| 
					
				 | 
			
			
				@@ -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, 
			 |