| 
					
				 | 
			
			
				@@ -413,7 +413,23 @@ AmberC.prototype.create_compiler = function(compilerFilesArray) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			jsGlobalVariables.push.apply(jsGlobalVariables, self.defaults.jsGlobals); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		self.compile(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		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); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	compilerFilesArray.forEach(function(file) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -425,56 +441,56 @@ AmberC.prototype.create_compiler = function(compilerFilesArray) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * Compile all given .st files by importing them. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * Followed by category_export(). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Captures the configuration object in a closure and returns a function that 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * does the actual work and returns a Promise.all() object. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-AmberC.prototype.compile = function() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	console.log('Compiling collected .st files'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	// import .st files 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	var self = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	var imports = new Combo(function() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Array.prototype.slice.call(arguments).forEach(function(code) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (undefined !== code[0]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				// get element 0 of code since all return values are stored inside an array by Combo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                var importer = self.defaults.smalltalk.Importer._new(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    importer._import_(code[0]._stream()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } catch (ex) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    throw new Error("Import error in section:\n" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        importer._lastSection() + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        "\n\n" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        "while processing chunk:\n" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        importer._lastChunk() + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        "\n\n" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        (ex._messageText && ex._messageText() || ex.message || ex)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		category_export(self.defaults).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); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function compile(configuration) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// return function which does the actual work 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// and use the compile function to reference the configuration object 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return function (fileContents) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		console.log('Compiling collected .st files'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// import/compile content of .st files 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return Promise.all( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			fileContents.map(function(code) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				return new Promise(function(resolve, error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					var importer = configuration.smalltalk.Importer._new(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						importer._import_(code._stream()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						resolve(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} catch (ex) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						error(Error("Import error in section:\n" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							importer._lastSection() + "\n\n" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							"while processing chunk:\n" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							importer._lastChunk() + "\n\n" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							(ex._messageText && ex._messageText() || ex.message || ex)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	this.defaults.compile.forEach(function(stFile) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		var callback = imports.add(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (/\.st/.test(stFile)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			console.ambercLog('Importing: ' + stFile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			fs.readFile(stFile, 'utf8', function(err, data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if (!err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					callback(data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					throw new Error('Could not import: ' + stFile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Read the content of all files into memory. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Returns a Promise.all() object. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function readFiles(configuration) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return Promise.all( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		configuration.compile.map(function(stFile) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return new Promise(function(resolve, error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (/\.st/.test(stFile)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					console.ambercLog('Importing: ' + stFile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					fs.readFile(stFile, 'utf8', function(err, data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if (!err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							resolve(data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							error(Error('Could not import: ' + stFile)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	always_resolve(imports.add()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |