| 
					
				 | 
			
			
				@@ -541,7 +541,7 @@ AmberC.prototype.verify = function() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					throw(new Error('Compilation failed of: ' + file)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}, function(err, result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			self.compose_js_files(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			compose_js_files(self.defaults); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -551,82 +551,85 @@ AmberC.prototype.verify = function() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * Concatenates compiled JavaScript files into one file in the correct order. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * The name of the produced file is given by defaults.program (set by the last commandline option). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-AmberC.prototype.compose_js_files = function() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	var defaults = this.defaults; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	var programFile = defaults.program; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (undefined === programFile) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (undefined !== defaults.output_dir) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		programFile = path.join(defaults.output_dir, programFile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function compose_js_files(configuration) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return new Promise(function(resolve, reject) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		var defaults = configuration; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		var programFile = defaults.program; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (undefined === programFile) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (undefined !== defaults.output_dir) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			programFile = path.join(defaults.output_dir, programFile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	var program_files = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (0 !== defaults.libraries.length) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		console.log('Collecting libraries: ' + defaults.libraries); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		program_files.push.apply(program_files, defaults.libraries); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		var program_files = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (0 !== defaults.libraries.length) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			console.log('Collecting libraries: ' + defaults.libraries); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			program_files.push.apply(program_files, defaults.libraries); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (0 !== defaults.compiled.length) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		var compiledFiles = defaults.compiled.slice(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (0 !== defaults.compiled.length) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			var compiledFiles = defaults.compiled.slice(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		console.log('Collecting compiled files: ' + compiledFiles); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		program_files.push.apply(program_files, compiledFiles); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			console.log('Collecting compiled files: ' + compiledFiles); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			program_files.push.apply(program_files, compiledFiles); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	console.ambercLog('Writing program file: %s.js', programFile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		console.ambercLog('Writing program file: %s.js', programFile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	var fileStream = fs.createWriteStream(programFile + defaults.suffix_used + '.js'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	fileStream.on('error', function(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		fileStream.end(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		console.ambercLog(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		var fileStream = fs.createWriteStream(programFile + defaults.suffix_used + '.js'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		fileStream.on('error', function(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			fileStream.end(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			console.ambercLog(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	fileStream.on('close', function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		fileStream.on('close', function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	var builder = createConcatenator(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	builder.add('#!/usr/bin/env node'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	builder.start(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	program_files.forEach(function(file) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(fs.existsSync(file)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			console.log('Adding : ' + file); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			var buffer = fs.readFileSync(file); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// matches and returns the "module_id" string in the AMD define: define("module_id", ...) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			var match = buffer.toString().match(/^define\("([^"]*)"/); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (match /*&& match[1].slice(0,9) !== "amber_vm/"*/) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				builder.addId(match[1]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		var builder = createConcatenator(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		builder.add('#!/usr/bin/env node'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		builder.start(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		program_files.forEach(function(file) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if(fs.existsSync(file)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				console.log('Adding : ' + file); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				var buffer = fs.readFileSync(file); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				// matches and returns the "module_id" string in the AMD define: define("module_id", ...) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				var match = buffer.toString().match(/^define\("([^"]*)"/); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (match /*&& match[1].slice(0,9) !== "amber_vm/"*/) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					builder.addId(match[1]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				builder.add(buffer); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				fileStream.end(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				throw(new Error('Can not find file ' + file)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			builder.add(buffer); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			fileStream.end(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw(new Error('Can not find file ' + file)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	var mainFunctionOrFile = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		var mainFunctionOrFile = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (undefined !== defaults.main) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		console.log('Adding call to: %s>>main', defaults.main); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		mainFunctionOrFile += 'smalltalk.' + defaults.main + '._main();'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (undefined !== defaults.main) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			console.log('Adding call to: %s>>main', defaults.main); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			mainFunctionOrFile += 'smalltalk.' + defaults.main + '._main();'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (undefined !== defaults.mainfile && fs.existsSync(defaults.mainfile)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		console.log('Adding main file: ' + defaults.mainfile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		mainFunctionOrFile += '\n' + fs.readFileSync(defaults.mainfile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (undefined !== defaults.mainfile && fs.existsSync(defaults.mainfile)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			console.log('Adding main file: ' + defaults.mainfile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			mainFunctionOrFile += '\n' + fs.readFileSync(defaults.mainfile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	builder.finish(mainFunctionOrFile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		builder.finish(mainFunctionOrFile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	console.log('Writing...'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	builder.forEach(function (element) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		fileStream.write(element); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		fileStream.write('\n'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		console.log('Writing...'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		builder.forEach(function (element) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			fileStream.write(element); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			fileStream.write('\n'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		console.log('Done.'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		fileStream.end(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		resolve(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	console.log('Done.'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	fileStream.end(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |