| 
					
				 | 
			
			
				@@ -43,7 +43,7 @@ function createConcatenator () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		finish: function (realWork) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			this.add( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				'define("amber_vm/_init", ["amber_vm/smalltalk","' + this.ids.join('","') + '"], function (smalltalk) {', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				'define("amber_vm/_init", ["amber_vm/smalltalk", "amber_vm/globals", "' + this.ids.join('","') + '"], function (smalltalk, globals) {', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				'smalltalk.initialize();', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				realWork, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				'});', 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -62,10 +62,10 @@ var path = require('path'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	Promise = require('es6-promise').Promise; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * AmberC constructor function. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * AmberCompiler constructor function. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * amber_dir: points to the location of an amber installation 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function AmberC(amber_dir) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function AmberCompiler(amber_dir) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if (undefined === amber_dir || !fs.existsSync(amber_dir)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		throw new Error('amber_dir needs to be a valid directory'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -110,7 +110,7 @@ var createDefaultConfiguration = function() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * If check_configuration_ok() returns successfully 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * the configuration is used to trigger the following compilation steps. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-AmberC.prototype.main = function(configuration, finished_callback) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+AmberCompiler.prototype.main = function(configuration, finished_callback) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	console.time('Compile Time'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if (configuration.amd_namespace.length === 0) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -129,6 +129,7 @@ AmberC.prototype.main = function(configuration, finished_callback) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// the evaluated compiler will be stored in this variable (see create_compiler) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	configuration.smalltalk = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	configuration.globals = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	configuration.kernel_libraries = this.kernel_libraries; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	configuration.compiler_libraries = this.compiler_libraries; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	configuration.amber_dir = this.amber_dir; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -161,11 +162,11 @@ AmberC.prototype.main = function(configuration, finished_callback) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 function check_configuration(configuration) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	return new Promise(function(resolve, reject) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if (undefined === configuration) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			reject(Error('AmberC.check_configuration_ok(): missing configuration object')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			reject(Error('AmberCompiler.check_configuration_ok(): missing configuration object')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if (0 === configuration.jsFiles.length && 0 === configuration.stFiles.length) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			reject(Error('AmberC.check_configuration_ok(): no files to compile/link specified in configuration object')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			reject(Error('AmberCompiler.check_configuration_ok(): no files to compile/link specified in configuration object')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		resolve(configuration); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -328,14 +329,14 @@ function create_compiler(configuration) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		// store the generated smalltalk env in configuration.smalltalk 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		builder.finish('configuration.smalltalk = smalltalk;'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		builder.finish('configuration.smalltalk = smalltalk; configuration.globals = globals;'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		builder.add('})();'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		eval(builder.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		console.log('Compiler loaded'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		configuration.smalltalk.ErrorHandler._register_(configuration.smalltalk.RethrowErrorHandler._new()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		configuration.globals.ErrorHandler._register_(configuration.globals.RethrowErrorHandler._new()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if(0 !== configuration.jsGlobals.length) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			var jsGlobalVariables = configuration.smalltalk.globalJsVariables; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -358,12 +359,12 @@ function compile(configuration) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		configuration.compile.map(function(stFile) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			return new Promise(function(resolve, reject) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				if (/\.st/.test(stFile)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					console.ambercLog('Importing: ' + stFile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					console.ambercLog('Reading: ' + stFile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					fs.readFile(stFile, 'utf8', function(err, data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						if (!err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							resolve(data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							reject(Error('Could not import: ' + stFile)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							reject(Error('Could not read: ' + stFile)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			}); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -375,12 +376,12 @@ function compile(configuration) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		return Promise.all( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			fileContents.map(function(code) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				return new Promise(function(resolve, reject) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					var importer = configuration.smalltalk.Importer._new(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					var importer = configuration.globals.Importer._new(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						importer._import_(code._stream()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						resolve(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					} catch (ex) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						reject(Error("Import error in section:\n" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						reject(Error("Compiler error in section:\n" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							importer._lastSection() + "\n\n" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							"while processing chunk:\n" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							importer._lastChunk() + "\n\n" + 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -413,11 +414,11 @@ function category_export(configuration) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				var jsFile = category + configuration.suffix_used + '.js'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				jsFile = path.join(jsFilePath, jsFile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				configuration.compiled.push(jsFile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				var smalltalk = configuration.smalltalk; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				var packageObject = smalltalk.Package._named_(category); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				var smalltalkGlobals = configuration.globals; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				var packageObject = smalltalkGlobals.Package._named_(category); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				packageObject._transport()._namespace_(configuration.amd_namespace); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				fs.writeFile(jsFile, smalltalk.String._streamContents_(function (stream) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					smalltalk.AmdExporter._new()._exportPackage_on_(packageObject, stream); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				fs.writeFile(jsFile, smalltalkGlobals.String._streamContents_(function (stream) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					smalltalkGlobals.AmdExporter._new()._exportPackage_on_(packageObject, stream); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				}), function(err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					if (err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						reject(err); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -467,8 +468,7 @@ function compose_js_files(configuration) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	return new Promise(function(resolve, reject) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		var programFile = configuration.program; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if (undefined === programFile) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			resolve(configuration); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			reject(configuration); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if (undefined !== configuration.output_dir) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			programFile = path.join(configuration.output_dir, programFile); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -524,7 +524,7 @@ function compose_js_files(configuration) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if (undefined !== configuration.main) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			console.log('Adding call to: %s>>main', configuration.main); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			mainFunctionOrFile += 'smalltalk.' + configuration.main + '._main();'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			mainFunctionOrFile += 'globals.' + configuration.main + '._main();'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if (undefined !== configuration.mainfile && fs.existsSync(configuration.mainfile)) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -545,5 +545,5 @@ function compose_js_files(configuration) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-module.exports.Compiler = AmberC; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+module.exports.Compiler = AmberCompiler; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 module.exports.createDefaultConfiguration = createDefaultConfiguration; 
			 |