Browse Source

amberc.js: split import of st files and export of categories in two phases

Manfred Kroehnert 12 years ago
parent
commit
862f8eb35e
1 changed files with 23 additions and 18 deletions
  1. 23 18
      bin/amberc.js

+ 23 - 18
bin/amberc.js

@@ -52,6 +52,7 @@ var defaults = function() {
 		'deploy': false,
 		'libraries': [],
 		'compile': [],
+		'compiled_categories': [],
 		'compiled': [],
 		'program': undefined
 	};
@@ -250,10 +251,12 @@ function collect_files(filesArray) {
 		switch (suffix) {
 			case '.st':
 				if (path.existsSync(currentFile)) {
-					defaults.compile.push(currentFile, category);
+					defaults.compile.push(currentFile);
+					defaults.compiled_categories.push(category);
 					defaults.compiled.push(category + defaults.suffix_used + '.js');
 				} else if (path.existsSync(amberFile)) {
-					defaults.compile.push(amberFile, category);
+					defaults.compile.push(amberFile);
+					defaults.compiled_categories.push(category);
 					defaults.compiled.push(category + defaults.suffix_used + '.js');
 				} else {
 					throw(new Error('File not found: ' + currentFile));
@@ -322,7 +325,7 @@ function create_compiler(compilerFilesArray) {
 
 function compile() {
 	console.log('Compiling collected .st files to .js')
-	node_compile(defaults.compile);
+	node_compile(defaults.compile, defaults.compiled_categories);
 
 	console.log('Verifying if all .st files were compiled');
 	map(defaults.compiled, function(file, callback) {
@@ -341,24 +344,26 @@ function compile() {
 }
 
 
-function node_compile(filesArray) {
-	// The filesArray variable is a series of .st filenames and category names.
-	// If it is a .st file we import it, if it is a category name we export it
-	// as aCategoryName.js.
+function node_compile(smalltalkFiles, categories) {
+	// the smalltalkFiles variable is a series of .st filenames to be imported
+	// the categories variable holds category names to be exported as aCategoryName.js.
 
-	// If it ends with .st, import it, otherwise export category as .js
-	filesArray.forEach(function(val, index, array) {
+	// import .st files
+	smalltalkFiles.forEach(function(val) {
 		if (/\.st/.test(val)) {
-			console.log("Reading file " + val);
-			code = fs.readFileSync(val, "utf8");
+			console.log("Importing: " + val);
+			var code = fs.readFileSync(val, "utf8");
 			defaults.smalltalk.Importer._new()._import_(code._stream());
-		} else {
-			console.log("Exporting " + (defaults.deploy ? "(debug + deploy)" : "(debug)") + " category "
-				+ val + " as " + val + defaults.suffix_used + ".js" + (defaults.deploy ? " and " + val + defaults.suffix_used + ".deploy.js" : ""));
-			fs.writeFileSync(val + defaults.suffix_used + ".js", defaults.smalltalk.Exporter._new()._exportPackage_(val));
-			if (defaults.deploy) {
-				fs.writeFileSync(val + defaults.suffix_used + ".deploy.js", defaults.smalltalk.StrippedExporter._new()._exportPackage_(val));
-			}
+		}
+	});
+
+	// export categories as .js
+	categories.forEach(function(val) {
+		console.log("Exporting " + (defaults.deploy ? "(debug + deploy)" : "(debug)") + " category "
+			+ val + " as " + val + defaults.suffix_used + ".js" + (defaults.deploy ? " and " + val + defaults.suffix_used + ".deploy.js" : ""));
+		fs.writeFileSync(val + defaults.suffix_used + ".js", defaults.smalltalk.Exporter._new()._exportPackage_(val));
+		if (defaults.deploy) {
+			fs.writeFileSync(val + defaults.suffix_used + ".deploy.js", defaults.smalltalk.StrippedExporter._new()._exportPackage_(val));
 		}
 	});
 }