Browse Source

amberc.js: merge readFiles() into compile()

This creates another function which takes a
configuration object and the promise resolves
into the configuration object.
Manfred Kroehnert 10 years ago
parent
commit
1d818a2f32
1 changed files with 40 additions and 46 deletions
  1. 40 46
      cli/support/amberc.js

+ 40 - 46
cli/support/amberc.js

@@ -148,9 +148,7 @@ AmberC.prototype.main = function(configuration, finished_callback) {
 	.then(resolve_compiler, logError)
 	.then(create_compiler(configuration), logError)
 	.then(function() {return configuration;})
-	.then(readFiles, logError)
-	.then(compile(configuration), logError)
-	.then(function() {return configuration;})
+	.then(compile, logError)
 	.then(category_export, logError)
 	.then(verify, logError)
 	.then(compose_js_files, logError)
@@ -378,59 +376,55 @@ function create_compiler(configuration) {
 };
 
 
-/**
- * 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, reject) {
-				if (/\.st/.test(stFile)) {
-					console.ambercLog('Importing: ' + stFile);
-					fs.readFile(stFile, 'utf8', function(err, data) {
-						if (!err)
-							resolve(data);
-						else
-							reject(Error('Could not import: ' + stFile));
-					});
-				}
-			});
-		})
-	);
-};
-
-
 /**
  * Compile all given .st files by importing them.
- * Captures the configuration object in a closure and returns a function that
- * does the actual work and returns a Promise.all() object.
+ * Returns a Promise object that resolves into configuration.
  */
 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, reject) {
+		Promise.all(
+			configuration.compile.map(function(stFile) {
 				return new Promise(function(resolve, reject) {
-					var importer = configuration.smalltalk.Importer._new();
-					try {
-						importer._import_(code._stream());
-						resolve(true);
-					} catch (ex) {
-						reject(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))
-						);
+					if (/\.st/.test(stFile)) {
+						console.ambercLog('Importing: ' + stFile);
+						fs.readFile(stFile, 'utf8', function(err, data) {
+							if (!err)
+								resolve(data);
+							else
+								reject(Error('Could not import: ' + stFile));
+						});
 					}
 				});
 			})
-		);
-	};
+		)
+		.then(function(fileContents) {
+			console.log('Compiling collected .st files');
+			// import/compile content of .st files
+			Promise.all(
+				fileContents.map(function(code) {
+					return new Promise(function(resolve, reject) {
+						var importer = configuration.smalltalk.Importer._new();
+						try {
+							importer._import_(code._stream());
+							resolve(true);
+						} catch (ex) {
+							reject(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))
+							);
+						}
+					});
+				})
+			);
+		})
+		.then(function() {
+			resolve(configuration);
+		});
+	});
 };