|  | @@ -541,7 +541,7 @@ AmberC.prototype.verify = function() {
 | 
											
												
													
														|  |  					throw(new Error('Compilation failed of: ' + file));
 |  |  					throw(new Error('Compilation failed of: ' + file));
 | 
											
												
													
														|  |  			});
 |  |  			});
 | 
											
												
													
														|  |  		}, function(err, result) {
 |  |  		}, 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.
 |  |   * 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).
 |  |   * 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();
 |  | 
 | 
											
												
													
														|  |  };
 |  |  };
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  
 |  |  
 |