瀏覽代碼

amberc.js: change some defaults into direct members

Those properties should stay constant if the compiler
gets used multiple times.
The defaults are an empty skeleton which gets changed
throughout each run of amberc.
Manfred Kroehnert 12 年之前
父節點
當前提交
4de3cc0d1e
共有 1 個文件被更改,包括 26 次插入25 次删除
  1. 26 25
      bin/amberc.js

+ 26 - 25
bin/amberc.js

@@ -72,26 +72,26 @@ var path = require('path'),
 
 console.time('Compile Time');
 
-function AmberC() {}
+function AmberC() {
+	// Get Amber root directory from the location of this script so that
+	// we can find the st and js directories etc.
+	this.amber_dir = path.normalize( path.join(path.dirname(process.argv[1]), '..') );
+	this.kernel_libraries = ['boot', 'Kernel-Objects', 'Kernel-Classes', 'Kernel-Methods',
+	                          'Kernel-Collections', 'Kernel-Exceptions', 'Kernel-Transcript',
+	                          'Kernel-Announcements'];
+	this.compiler_libraries = this.kernel_libraries.concat(['parser', 'Compiler',
+	                                'Compiler-Exceptions']);
+	                                //, 'Compiler-Core', 'Compiler-AST', 'Compiler-IR', 'Compiler-Inlining', 'Compiler-Semantic'];
+	this.closure_jar = path.resolve(path.join(process.env['HOME'], 'compiler.jar'));
+}
 
 
 /**
  * Default values.
  */
-var createDefaults = function(){
-	// Get Amber root directory from the location of this script so that
-	// we can find the st and js directories etc.
-	var amber_dir = path.join(path.dirname(process.argv[1]), '..');
-	amber_dir = path.normalize(amber_dir);
-
-	var kernel_libraries = ['boot', 'Kernel-Objects', 'Kernel-Classes', 'Kernel-Methods', 'Kernel-Collections', 'Kernel-Exceptions', 'Kernel-Transcript', 'Kernel-Announcements'];
-	var compiler_libs = ['parser', 'Compiler', 'Compiler-Exceptions'];//, 'Compiler-Core', 'Compiler-AST', 'Compiler-IR', 'Compiler-Inlining', 'Compiler-Semantic'];
-
+var createDefaults = function(amber_dir){
 	return {
-		'amber_dir': amber_dir,
 		'smalltalk': {}, // the evaluated compiler will be stored in this variable (see create_compiler)
-		'base': kernel_libraries,
-		'compiler_libraries': kernel_libraries.concat(compiler_libs),
 		'load': [],
 		'init': path.join(amber_dir, 'js', 'init.js'),
 		'main': undefined,
@@ -100,7 +100,6 @@ var createDefaults = function(){
 		'closure_parts': false,
 		'closure_full': false,
 		'closure_options': '',
-		'closure_jar': path.resolve(path.join(process.env['HOME'], 'compiler.jar')),
 		'suffix': '',
 		'loadsuffix': '',
 		'suffix_used': '',
@@ -122,7 +121,7 @@ AmberC.prototype.main = function(parameters) {
 	if (1 > options.length) {
 		this.usage();
 	} else {
-		this.defaults = createDefaults();
+		this.defaults = createDefaults(this.amber_dir);
 		this.handle_options(options);
 	}
 };
@@ -298,13 +297,14 @@ AmberC.prototype.usage = function() {
 
 /**
  * Checks if the java executable exists and afterwards,
- * if compiler.jar exists at the path stored in defaults.closure_jar.
+ * if compiler.jar exists at the path stored in this.closure_jar.
  * All closure related entries are set to false upon failure.
  *
  * callback gets called in any case.
  */
 AmberC.prototype.check_for_closure_compiler = function(callback) {
 	var defaults = this.defaults;
+	var self = this;
 	if (defaults.closure) {
 		exec('which java', function(error, stdout, stderr) {
 			// stdout contains path to java executable
@@ -316,9 +316,9 @@ AmberC.prototype.check_for_closure_compiler = function(callback) {
 				callback();
 				return;
 			}
-			path.exists(defaults.closure_jar, function(exists) {
+			path.exists(self.closure_jar, function(exists) {
 				if (!exists) {
-					console.warn('Can not find Closure compiler at: ' + defaults.closure_jar);
+					console.warn('Can not find Closure compiler at: ' + self.closure_jar);
 					defaults.closure = false;
 					defaults.closure_parts = false;
 					defaults.closure_full = false;
@@ -342,7 +342,7 @@ AmberC.prototype.check_for_closure_compiler = function(callback) {
  */
 AmberC.prototype.resolve_js = function(filename, callback) {
 	var jsFile = filename + this.defaults.loadsuffix + '.js';
-	var amberJsFile = path.join(this.defaults.amber_dir, 'js', jsFile);
+	var amberJsFile = path.join(this.amber_dir, 'js', jsFile);
 	console.log('Resolving: ' + jsFile);
 	path.exists(jsFile, function(exists) {
 		if (exists) {
@@ -382,6 +382,7 @@ AmberC.prototype.collect_files = function(stFiles, jsFiles) {
  */
 AmberC.prototype.collect_st_files = function(stFiles, callback) {
 	var defaults = this.defaults;
+	var self = this;
 	var collected_st_files = new Combo(function() {
 		Array.prototype.slice.call(arguments).forEach(function(data) {
 			if (undefined !== data[0]) {
@@ -399,7 +400,7 @@ AmberC.prototype.collect_st_files = function(stFiles, callback) {
 		var _callback = collected_st_files.add();
 		console.log('Checking: ' + stFile);
 		var category = path.basename(stFile, '.st');
-		var amberStFile = path.join(defaults.amber_dir, 'st', stFile);
+		var amberStFile = path.join(self.amber_dir, 'st', stFile);
 		path.exists(stFile, function(exists) {
 			if (exists) {
 				_callback(stFile, category);
@@ -447,7 +448,7 @@ AmberC.prototype.collect_js_files = function(jsFiles, callback) {
  * Followed by resolve_init().
  */
 AmberC.prototype.resolve_libraries = function() {
-	// Resolve libraries listed in defaults.base
+	// Resolve libraries listed in this.kernel_libraries
 	var self = this;
 	var all_resolved = new Combo(function(resolved_library_files, resolved_compiler_files) {
 		self.resolve_init(resolved_compiler_files[0]);
@@ -463,7 +464,7 @@ AmberC.prototype.resolve_libraries = function() {
  */
 AmberC.prototype.resolve_kernel = function(callback) {
 	var self = this;
-	var kernel_files = this.defaults.base.concat(this.defaults.load);
+	var kernel_files = this.kernel_libraries.concat(this.defaults.load);
 	var kernel_resolved = new Combo(function() {
 		Array.prototype.slice.call(arguments).forEach(function(file) {
 			if (undefined !== file[0]) {
@@ -487,7 +488,7 @@ AmberC.prototype.resolve_kernel = function(callback) {
  */
 AmberC.prototype.resolve_compiler = function(callback) {
 	// Resolve compiler libraries
-	var compiler_files = this.defaults.compiler_libraries.concat(this.defaults.load);
+	var compiler_files = this.compiler_libraries.concat(this.defaults.load);
 	var compiler_resolved = new Combo(function() {
 		var compilerFiles = [];
 		Array.prototype.slice.call(arguments).forEach(function(file) {
@@ -514,7 +515,7 @@ AmberC.prototype.resolve_init = function(compilerFiles) {
 	// check and add init.js
 	var initFile = this.defaults.init;
 	if ('.js' !== path.extname(initFile)) {
-		initFile = resolve_js(initFile);
+		initFile = this.resolve_js(initFile);
 		this.defaults.init = initFile;
 	}
 	compilerFiles.push(initFile);
@@ -723,7 +724,7 @@ AmberC.prototype.closure_compile = function(sourceFile, minifiedFile, callback)
 	var self = this;
 	exec(
 		'java -jar ' +
-		self.defaults.closure_jar + ' ' +
+		self.closure_jar + ' ' +
 		self.defaults.closure_options +
 		' --js '+ sourceFile +
 		' --js_output_file '+ minifiedFile,