1
0
Преглед на файлове

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 преди 12 години
родител
ревизия
8abb620c1e
променени са 1 файла, в които са добавени 12 реда и са изтрити 16 реда
  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());
 };