Browse Source

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 years ago
parent
commit
4de3cc0d1e
1 changed files with 26 additions and 25 deletions
  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,