|
@@ -175,6 +175,8 @@ AmberC.prototype.main = function(configuration, finished_callback) {
|
|
|
check_configuration(configuration).then(function(configuration) {
|
|
|
self.defaults = configuration;
|
|
|
self.defaults.smalltalk = {}; // the evaluated compiler will be stored in this variable (see create_compiler)
|
|
|
+ self.defaults.kernel_libraries = self.kernel_libraries;
|
|
|
+ self.defaults.compiler_libraries = self.compiler_libraries;
|
|
|
self.collect_files(self.defaults.stFiles, self.defaults.jsFiles)
|
|
|
}, function (error) {
|
|
|
console.log(error);
|
|
@@ -313,87 +315,82 @@ AmberC.prototype.collect_js_files = function(jsFiles, callback) {
|
|
|
|
|
|
/**
|
|
|
* Resolve kernel and compiler files.
|
|
|
- * Followed by resolve_init().
|
|
|
+ * Returns a Promise.
|
|
|
*/
|
|
|
AmberC.prototype.resolve_libraries = function() {
|
|
|
// Resolve libraries listed in this.kernel_libraries
|
|
|
var self = this;
|
|
|
- var all_resolved = new Combo(function(resolved_kernel_files, resolved_compiler_files) {
|
|
|
- create_compiler(self.defaults)(resolved_compiler_files[0]).then(function(resolve) {
|
|
|
- return self.defaults;
|
|
|
- }).then(readFiles)
|
|
|
- .then(compile(self.defaults)
|
|
|
- , function(error) {
|
|
|
- console.error(error);
|
|
|
- }).then(function() {
|
|
|
- return self.defaults;
|
|
|
- }).then(category_export)
|
|
|
- .then(function(resolve) {
|
|
|
- return self.defaults;
|
|
|
- }, function(error) {
|
|
|
- console.error(error);
|
|
|
- }).then(verify)
|
|
|
- .then(function(resolve) {
|
|
|
- return self.defaults;
|
|
|
- }, function(error) {
|
|
|
- console.error(error);
|
|
|
- }).then(compose_js_files);
|
|
|
- });
|
|
|
- this.resolve_kernel(all_resolved.add());
|
|
|
- this.resolve_compiler(all_resolved.add());
|
|
|
+
|
|
|
+ resolve_kernel(self.defaults)
|
|
|
+ .then(resolve_compiler)
|
|
|
+ .then(create_compiler(self.defaults))
|
|
|
+ .then(function(resolve) {
|
|
|
+ return self.defaults;
|
|
|
+ }).then(readFiles)
|
|
|
+ .then(compile(self.defaults)
|
|
|
+ , function(error) {
|
|
|
+ console.error(error);
|
|
|
+ }).then(function() {
|
|
|
+ return self.defaults;
|
|
|
+ }).then(category_export)
|
|
|
+ .then(function(resolve) {
|
|
|
+ return self.defaults;
|
|
|
+ }, function(error) {
|
|
|
+ console.error(error);
|
|
|
+ }).then(verify)
|
|
|
+ .then(function(resolve) {
|
|
|
+ return self.defaults;
|
|
|
+ }, function(error) {
|
|
|
+ console.error(error);
|
|
|
+ }).then(compose_js_files);
|
|
|
};
|
|
|
|
|
|
|
|
|
/**
|
|
|
- * Resolve .js files needed by kernel
|
|
|
- * callback is evaluated afterwards.
|
|
|
+ * Resolve .js files needed by kernel.
|
|
|
+ * Returns a Promise which resolves with the configuration object.
|
|
|
*/
|
|
|
-AmberC.prototype.resolve_kernel = function(callback) {
|
|
|
- var self = this;
|
|
|
- var kernel_files = this.kernel_libraries.concat(this.defaults.load);
|
|
|
- var kernel_resolved = new Combo(function() {
|
|
|
- var foundLibraries = [];
|
|
|
- Array.prototype.slice.call(arguments).forEach(function(file) {
|
|
|
- if (undefined !== file[0]) {
|
|
|
- foundLibraries.push(file[0]);
|
|
|
- }
|
|
|
+function resolve_kernel(configuration) {
|
|
|
+ var kernel_files = configuration.kernel_libraries.concat(configuration.load);
|
|
|
+ return new Promise(function(resolve, error) {
|
|
|
+ Promise.all(
|
|
|
+ kernel_files.map(function(file) {
|
|
|
+ return new Promise(function(resolve, error) {
|
|
|
+ resolve_js(file, configuration, resolve);
|
|
|
+ });
|
|
|
+ })
|
|
|
+ ).then(function(data) {
|
|
|
+ // boot.js and Kernel files need to be used first
|
|
|
+ // otherwise the global smalltalk object is undefined
|
|
|
+ configuration.libraries = data.concat(configuration.libraries);
|
|
|
+ resolve(configuration);
|
|
|
+ }, function(error) {
|
|
|
+ error(error);
|
|
|
});
|
|
|
- // boot.js and Kernel files need to be used first
|
|
|
- // otherwise the global smalltalk object is undefined
|
|
|
- self.defaults.libraries = foundLibraries.concat(self.defaults.libraries);
|
|
|
- callback(null);
|
|
|
});
|
|
|
-
|
|
|
- kernel_files.forEach(function(file) {
|
|
|
- resolve_js(file, self.defaults, kernel_resolved.add());
|
|
|
- });
|
|
|
-
|
|
|
- always_resolve(kernel_resolved.add());
|
|
|
};
|
|
|
|
|
|
|
|
|
/**
|
|
|
* Resolve .js files needed by compiler.
|
|
|
- * callback is evaluated afterwards with resolved files as argument.
|
|
|
+ * Returns a Promise which resolves with an array of all compiler related files.
|
|
|
*/
|
|
|
-AmberC.prototype.resolve_compiler = function(callback) {
|
|
|
+function resolve_compiler(configuration) {
|
|
|
// Resolve compiler libraries
|
|
|
- var compiler_files = this.compiler_libraries.concat(this.defaults.load);
|
|
|
- var compiler_resolved = new Combo(function() {
|
|
|
- var compilerFiles = [];
|
|
|
- Array.prototype.slice.call(arguments).forEach(function(file) {
|
|
|
- if (undefined !== file[0]) {
|
|
|
- compilerFiles.push(file[0]);
|
|
|
- }
|
|
|
+ var compiler_files = configuration.compiler_libraries.concat(configuration.load);
|
|
|
+ return new Promise(function(resolve, error) {
|
|
|
+ Promise.all(
|
|
|
+ compiler_files.map(function(file) {
|
|
|
+ return new Promise(function(resolve, error) {
|
|
|
+ resolve_js(file, configuration, resolve);
|
|
|
+ });
|
|
|
+ })
|
|
|
+ ).then(function(compilerFiles) {
|
|
|
+ resolve(compilerFiles);
|
|
|
+ }, function(error) {
|
|
|
+ error(error);
|
|
|
});
|
|
|
- callback(compilerFiles);
|
|
|
});
|
|
|
- var self = this;
|
|
|
- compiler_files.forEach(function(file) {
|
|
|
- resolve_js(file, self.defaults, compiler_resolved.add());
|
|
|
- });
|
|
|
-
|
|
|
- always_resolve(compiler_resolved.add());
|
|
|
};
|
|
|
|
|
|
|