1
0
Ver Fonte

amberc.js: fix async error in resolve_libraries()

If Combo.add() is evaluated immediately a function
it can lead to a double evaluation of Combo.callback.
In this case the Combo counter gets incremented and decremented
before another instance of Combo.add() can be created.
Manfred Kroehnert há 12 anos atrás
pai
commit
8abb620c1e
1 ficheiros alterados com 12 adições e 16 exclusões
  1. 12 16
      bin/amberc.js

+ 12 - 16
bin/amberc.js

@@ -375,8 +375,12 @@ AmberC.prototype.collect_files = function(stFiles, jsFiles) {
 	var collected_files = new Combo(function() {
 		self.resolve_libraries();
 	});
-	this.collect_st_files(stFiles, collected_files.add());
-	this.collect_js_files(jsFiles, collected_files.add());
+	if (0 !== stFiles.length) {
+		self.collect_st_files(stFiles, collected_files.add());
+	}
+	if (0 !== jsFiles.length) {
+		self.collect_js_files(jsFiles, collected_files.add());
+	}
 };
 
 
@@ -390,13 +394,11 @@ AmberC.prototype.collect_st_files = function(stFiles, callback) {
 	var self = this;
 	var collected_st_files = new Combo(function() {
 		Array.prototype.slice.call(arguments).forEach(function(data) {
-			if (undefined !== data[0]) {
-				var stFile = data[0];
-				var stCategory = data[1];
-				defaults.compile.push(stFile);
-				defaults.compiled_categories.push(stCategory);
-				defaults.compiled.push(stCategory + defaults.suffix_used + '.js');
-			}
+			var stFile = data[0];
+			var stCategory = data[1];
+			defaults.compile.push(stFile);
+			defaults.compiled_categories.push(stCategory);
+			defaults.compiled.push(stCategory + defaults.suffix_used + '.js');
 		});
 		callback();
 	});
@@ -420,8 +422,6 @@ AmberC.prototype.collect_st_files = function(stFiles, callback) {
 			}
 		});
 	});
-
-	always_resolve(collected_st_files.add());
 };
 
 
@@ -433,9 +433,7 @@ AmberC.prototype.collect_js_files = function(jsFiles, callback) {
 	var self = this;
 	var collected_js_files = new Combo(function() {
 		Array.prototype.slice.call(arguments).forEach(function(file) {
-			if (undefined !== file[0]) {
-				self.defaults.libraries.push(file[0]);
-			}
+			self.defaults.libraries.push(file[0]);
 		});
 		callback();
 	});
@@ -443,8 +441,6 @@ AmberC.prototype.collect_js_files = function(jsFiles, callback) {
 	jsFiles.forEach(function(jsFile) {
 		self.resolve_js(jsFile, collected_js_files.add());
 	});
-
-	always_resolve(collected_js_files.add());
 };