Browse Source

Concatenated programs less hacky, main works.

Herbert Vojčík 11 years ago
parent
commit
430a0778a2
1 changed files with 9 additions and 12 deletions
  1. 9 12
      bin/amberc.js

+ 9 - 12
bin/amberc.js

@@ -601,33 +601,30 @@ AmberC.prototype.compose_js_files = function() {
 
 
 	var defineDefine = function () {
 	var defineDefine = function () {
 		var path = require('path');
 		var path = require('path');
-		var amdefine = $SRC$;
-		var define = amdefine(module);
-		var result = function () {
-			var id = arguments[0];
-			setTimeout(function () { define.require(id); }, 0);
-			return define.apply(this, arguments);
-		};
-		result.amd = {};
-		return result;
+		return ($SRC$)(module);
 	};
 	};
 
 
-	fileStream.write('var define = ('+(''+defineDefine).replace('$SRC$', ""+amdefine)+')();\n'
+	fileStream.write('var define = ('+(''+defineDefine).replace('$SRC$', ""+amdefine)+')(), requirejs = define.require;\n'
 		+ 'define("amber_vm/browser-compatibility", [], {});\n');
 		+ 'define("amber_vm/browser-compatibility", [], {});\n');
+	var ids = [];
 	program_files.forEach(function(file) {
 	program_files.forEach(function(file) {
 		if(fs.existsSync(file)) {
 		if(fs.existsSync(file)) {
 			console.log('Adding : ' + file);
 			console.log('Adding : ' + file);
-			fileStream.write(fs.readFileSync(file));
+			var buffer = fs.readFileSync(file);
+			var match = buffer.toString().match(/^define\("([^"]*)"/);
+			if (match /*&& match[1].slice(0,9) !== "amber_vm/"*/) { ids.push(match[1]); }
+			fileStream.write(buffer);
 		} else {
 		} else {
 			fileStream.end();
 			fileStream.end();
 			throw(new Error('Can not find file ' + file));
 			throw(new Error('Can not find file ' + file));
 		}
 		}
 	});
 	});
-	fileStream.write('define("amber_vm/_init", ["amber_vm/smalltalk"], function (st) { st.initialize(); });\n');
+	fileStream.write('define("amber_vm/_init", ["amber_vm/smalltalk","'+ids.join('","')+'"], function (smalltalk) { smalltalk.initialize();\n');
 	if (undefined !== defaults.main) {
 	if (undefined !== defaults.main) {
 		console.log('Adding call to: %s>>main', defaults.main);
 		console.log('Adding call to: %s>>main', defaults.main);
 		fileStream.write('smalltalk.' + defaults.main + '._main()');
 		fileStream.write('smalltalk.' + defaults.main + '._main()');
 	}
 	}
+	fileStream.write('});\nrequirejs("amber_vm/_init");\n');
 
 
 	if (undefined !== defaults.mainfile && fs.existsSync(defaults.mainfile)) {
 	if (undefined !== defaults.mainfile && fs.existsSync(defaults.mainfile)) {
 		console.log('Adding main file: ' + defaults.mainfile);
 		console.log('Adding main file: ' + defaults.mainfile);