| 
					
				 | 
			
			
				@@ -320,7 +320,25 @@ AmberC.prototype.resolve_libraries = function() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// Resolve libraries listed in this.kernel_libraries 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	var self = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	var all_resolved = new Combo(function(resolved_kernel_files, resolved_compiler_files) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		self.create_compiler(resolved_compiler_files[0]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		create_compiler(self.defaults)(resolved_compiler_files[0]).then(function(resolve) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return self.defaults; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}).then(readFiles) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.then(compile(self.defaults) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		, function(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			console.error(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}).then(function() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return self.defaults; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}).then(category_export) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.then(function(resolve) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return self.defaults; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}, function(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			console.error(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}).then(verify) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.then(function(resolve) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return self.defaults; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}, function(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			console.error(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}).then(compose_js_files); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	this.resolve_kernel(all_resolved.add()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	this.resolve_compiler(all_resolved.add()); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -382,60 +400,57 @@ AmberC.prototype.resolve_compiler = function(callback) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * Read all .js files needed by compiler and eval() them. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * The finished Compiler gets stored in defaults.smalltalk. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * Followed by compile(). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * The finished Compiler gets stored in configuration.smalltalk. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Returns a Promise object. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-AmberC.prototype.create_compiler = function(compilerFilesArray) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	var self = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	var compiler_files = new Combo(function() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		var builder = createConcatenator(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		builder.add('(function() {'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		builder.start(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Array.prototype.slice.call(arguments).forEach(function(data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// data is an array where index 0 is the error code and index 1 contains the data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			builder.add(data[1]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// matches and returns the "module_id" string in the AMD definition: define("module_id", ...) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			var match = ('' + data[1]).match(/^define\("([^"]*)"/); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (match) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				builder.addId(match[1]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		// store the generated smalltalk env in self.defaults.smalltalk 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		builder.finish('self.defaults.smalltalk = smalltalk;'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		builder.add('})();'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		eval(builder.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		console.log('Compiler loaded'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		self.defaults.smalltalk.ErrorHandler._setCurrent_(self.defaults.smalltalk.RethrowErrorHandler._new()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(0 !== self.defaults.jsGlobals.length) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			var jsGlobalVariables = self.defaults.smalltalk.globalJsVariables; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			jsGlobalVariables.push.apply(jsGlobalVariables, self.defaults.jsGlobals); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function create_compiler(configuration) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return function(compilerFilesArray) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return new Promise(function(resolve, error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			Promise.all( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				compilerFilesArray.map(function(file) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					return new Promise(function(resolve, error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						console.log('Loading file: ' + file); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						fs.readFile(file, function(err, data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							if (err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								error(err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								resolve(data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			).then(function(files) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				var builder = createConcatenator(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				builder.add('(function() {'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				builder.start(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				files.forEach(function(data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					// data is an array where index 0 is the error code and index 1 contains the data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					builder.add(data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					// matches and returns the "module_id" string in the AMD definition: define("module_id", ...) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					var match = ('' + data).match(/^define\("([^"]*)"/); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if (match) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						builder.addId(match[1]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				// store the generated smalltalk env in self.defaults.smalltalk 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				builder.finish('configuration.smalltalk = smalltalk;'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				builder.add('})();'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		readFiles(self.defaults).then(compile(self.defaults) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		, function(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			console.error(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}).then(function() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return self.defaults; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}).then(category_export) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		.then(function(resolve) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return self.defaults; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}, function(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			console.error(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}).then(verify) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		.then(function(resolve) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return self.defaults; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}, function(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			console.error(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}).then(compose_js_files); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				eval(builder.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				console.log('Compiler loaded'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				configuration.smalltalk.ErrorHandler._setCurrent_(configuration.smalltalk.RethrowErrorHandler._new()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if(0 !== configuration.jsGlobals.length) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					var jsGlobalVariables = configuration.smalltalk.globalJsVariables; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					jsGlobalVariables.push.apply(jsGlobalVariables, configuration.jsGlobals); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	compilerFilesArray.forEach(function(file) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		console.log('Loading file: ' + file); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		fs.readFile(file, compiler_files.add()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				resolve(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}, function(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				error(Error('Error creating compiler')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -447,7 +462,7 @@ AmberC.prototype.create_compiler = function(compilerFilesArray) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 function compile(configuration) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// return function which does the actual work 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// and use the compile function to reference the configuration object 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	return function (fileContents) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return function(fileContents) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		console.log('Compiling collected .st files'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		// import/compile content of .st files 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		return Promise.all( 
			 |