Laurent Laffont hace 13 años
padre
commit
d21e9baaee
Se han modificado 9 ficheros con 3754 adiciones y 216 borrados
  1. 3 0
      bin/amber
  2. 11 11
      js/Kernel-Tests.deploy.js
  3. 18 18
      js/Kernel-Tests.js
  4. 187 187
      js/amber.js
  5. 8 0
      repl/Makefile
  6. 78 0
      repl/REPL.js
  7. 56 0
      repl/REPL.st
  8. 3392 0
      repl/amber.js
  9. 1 0
      st/Kernel.st

+ 3 - 0
bin/amber

@@ -0,0 +1,3 @@
+#!/bin/bash
+cd `dirname $0`/..
+node ./repl/amber.js

+ 11 - 11
js/Kernel-Tests.deploy.js

@@ -372,6 +372,17 @@ return self;}
 }),
 smalltalk.PackageTest);
 
+smalltalk.addMethod(
+'_tearDown',
+smalltalk.method({
+selector: 'tearDown',
+fn: function (){
+var self=this;
+(function($rec){smalltalk.send($rec, "_defaultCommitPathJs_", [self['@backUpCommitPathJs']]);return smalltalk.send($rec, "_defaultCommitPathSt_", [self['@backUpCommitPathSt']]);})((smalltalk.Package || Package));
+return self;}
+}),
+smalltalk.PackageTest);
+
 smalltalk.addMethod(
 '_testGrulCommitPathStShouldBeGrulSt',
 smalltalk.method({
@@ -416,17 +427,6 @@ return self;}
 }),
 smalltalk.PackageTest);
 
-smalltalk.addMethod(
-'_tearDown',
-smalltalk.method({
-selector: 'tearDown',
-fn: function (){
-var self=this;
-(function($rec){smalltalk.send($rec, "_defaultCommitPathJs_", [self['@backUpCommitPathJs']]);return smalltalk.send($rec, "_defaultCommitPathSt_", [self['@backUpCommitPathSt']]);})((smalltalk.Package || Package));
-return self;}
-}),
-smalltalk.PackageTest);
-
 
 
 smalltalk.addClass('PackageWithDefaultCommitPathChangedTest', smalltalk.PackageTest, [], 'Kernel-Tests');

+ 18 - 18
js/Kernel-Tests.js

@@ -488,7 +488,23 @@ return self;},
 args: [],
 source: unescape('setUp%0A%09backUpCommitPathJs%20%3A%3D%20Package%20defaultCommitPathJs.%0A%09backUpCommitPathSt%20%3A%3D%20Package%20defaultCommitPathSt.%0A%0A%09Package%20resetCommitPaths.%0A%0A%09zorkPackage%20%3A%3D%20Package%20new%20name%3A%20%27Zork%27.%0A%09grulPackage%20%3A%3D%20Package%20new%20%0A%09%09%09%09%09name%3A%20%27Grul%27%3B%0A%09%09%09%09%09commitPathJs%3A%20%27server/grul/js%27%3B%0A%09%09%09%09%09commitPathSt%3A%20%27grul/st%27%3B%0A%09%09%09%09%09yourself'),
 messageSends: ["defaultCommitPathJs", "defaultCommitPathSt", "resetCommitPaths", "name:", "new", "commitPathJs:", "commitPathSt:", "yourself"],
-referencedClasses: [smalltalk.Package]
+referencedClasses: ["Package"]
+}),
+smalltalk.PackageTest);
+
+smalltalk.addMethod(
+unescape('_tearDown'),
+smalltalk.method({
+selector: unescape('tearDown'),
+category: 'running',
+fn: function (){
+var self=this;
+(function($rec){smalltalk.send($rec, "_defaultCommitPathJs_", [self['@backUpCommitPathJs']]);return smalltalk.send($rec, "_defaultCommitPathSt_", [self['@backUpCommitPathSt']]);})((smalltalk.Package || Package));
+return self;},
+args: [],
+source: unescape('tearDown%0A%09%20Package%20%0A%09%09defaultCommitPathJs%3A%20backUpCommitPathJs%3B%0A%09%09defaultCommitPathSt%3A%20backUpCommitPathSt'),
+messageSends: ["defaultCommitPathJs:", "defaultCommitPathSt:"],
+referencedClasses: ["Package"]
 }),
 smalltalk.PackageTest);
 
@@ -556,22 +572,6 @@ referencedClasses: []
 }),
 smalltalk.PackageTest);
 
-smalltalk.addMethod(
-unescape('_tearDown'),
-smalltalk.method({
-selector: unescape('tearDown'),
-category: 'running',
-fn: function (){
-var self=this;
-(function($rec){smalltalk.send($rec, "_defaultCommitPathJs_", [self['@backUpCommitPathJs']]);return smalltalk.send($rec, "_defaultCommitPathSt_", [self['@backUpCommitPathSt']]);})((smalltalk.Package || Package));
-return self;},
-args: [],
-source: unescape('tearDown%0A%09%20Package%20%0A%09%09defaultCommitPathJs%3A%20backUpCommitPathJs%3B%0A%09%09defaultCommitPathSt%3A%20backUpCommitPathSt'),
-messageSends: ["defaultCommitPathJs:", "defaultCommitPathSt:"],
-referencedClasses: [smalltalk.Package]
-}),
-smalltalk.PackageTest);
-
 
 
 smalltalk.addClass('PackageWithDefaultCommitPathChangedTest', smalltalk.PackageTest, [], 'Kernel-Tests');
@@ -588,7 +588,7 @@ return self;},
 args: [],
 source: unescape('setUp%0A%09super%20setUp.%0A%0A%09Package%0A%09%09defaultCommitPathJs%3A%20%27javascripts/%27%3B%0A%09%09defaultCommitPathSt%3A%20%27smalltalk/%27.'),
 messageSends: ["setUp", "defaultCommitPathJs:", "defaultCommitPathSt:"],
-referencedClasses: [smalltalk.Package]
+referencedClasses: ["Package"]
 }),
 smalltalk.PackageWithDefaultCommitPathChangedTest);
 

+ 187 - 187
js/amber.js

@@ -1,198 +1,198 @@
 /* Amber package loading
-   usage example:
-   amber.load({
-     files: ['MyCategory1.js', 'MyCategory2.js'],
-     ready: function() {smalltalk.Browser._open()}
-   })
+	usage example:
+	amber.load({
+		files: ['MyCategory1.js', 'MyCategory2.js'],
+		ready: function() {smalltalk.Browser._open()}
+	})
 */
 
 
 amber = (function() {
-    var that = {};
-
-    var scripts = document.getElementsByTagName("script");
-    var src     = scripts[ scripts.length - 1 ].src;
-    var home    = src.split("/").slice(0, -2).join("/") + "/";
-    var nocache = '?' + (new Date()).getTime();
-
-    var debug;
-    var deploy;
-
-    var localStorageSource = [];
-    var localPackages;
-    var spec;
-
-    that.load = function(obj) {
-	spec = obj || {};
-
-	// In deployment mode, only the compressed version of Kernel
-	// and Canvas are loaded
-	deploy = spec.deploy || false;
-	debug = spec.debug || false;
-
-	// Specify a version string to avoid wrong browser caching
-	if (spec.version) {
-	    nocache = '?' + spec.version;
-	}
-	
-	loadDependencies();
-	loadJS('boot.js');
-	
-	populateLocalPackages();
-
-	if (deploy) {
-	    loadPackages([
-		'Kernel.deploy',
-		'Canvas.deploy'
-	    ]);
-	} else {
-	    loadIDEDependencies();
-	    loadCSS('amber.css');
-	    
-	    loadPackages([
-		'Kernel',
-		'Canvas',
-		'Compiler',
-		'parser',
-		'IDE',
-		'SUnit',
-		'Examples',
-		'Benchfib',
-		'Kernel-Tests'
-	    ]);
-	}
-
-	var additionalFiles = spec.packages || spec.files;
-	    if (additionalFiles) {
-		loadPackages(additionalFiles, spec.prefix);
-	    }
-
-	    // Always load all local packages
-	    for (name in localPackages) {
-		log('Local package:  ' + name);
-		localStorageSource.push(localPackages[name]);
-	    }
-
-	    // Be sure to setup & initialize smalltalk classes
-	    loadJS('init.js');
-	    initializeSmalltalk();
-    };
-
-    function loadPackages(names, prefix){
-	var name, url;
-	var prefix = prefix || 'js';
-	
-	for (var i=0; i < names.length; i++) {
-	    name = names[i].split(/\.js$/)[0];
-	    
-	    // Only load package from the server if it isn't stored in
-	    // localStorage
-	    if (!(name in localPackages)) {
-		log('Server package: ' + name);
-		loadJS(name + '.js', prefix);
-	    }
-	}
-    };
-
-    function loadJS(name, prefix) {
-	var prefix = prefix || 'js';
-	var name = name;
-	
-	if (!deploy) {
-	    name = name + nocache;
-	}
-
-	var url = home + prefix + '/' + name;
-	var scriptString = '<script src="' + url + '" type="text/javascript"></script>';
-	document.write(scriptString);
-    };
-
-    function loadCSS(name, prefix) {
-	var prefix = prefix || 'css';
-	var name = name;
-	if (!deploy) {
-	    name = name + nocache;
-	}
-
-	var url = home + prefix + '/' + name;
-
-	var link = document.createElement("link");
-	link.setAttribute("rel", "stylesheet");
-	link.setAttribute("type", "text/css");
-	link.setAttribute("href", url);
-	document.getElementsByTagName("head")[0].appendChild(link);
-    };
-
-    function loadDependencies() {
-	if (typeof jQuery == 'undefined') {
-		loadJS('lib/jQuery/jquery-1.6.4.min.js');
-	}
-
-	if ((typeof jQuery == 'undefined') || (typeof jQuery.ui == 'undefined')) {      
-		loadJS('lib/jQuery/jquery-ui-1.8.16.custom.min.js');
-	}
-    };
-
-    function loadIDEDependencies() {
-	loadJS('lib/jQuery/jquery.textarea.js');
-	loadJS('lib/CodeMirror/lib/codemirror.js');
-	loadCSS('lib/CodeMirror/lib/codemirror.css', 'js');
-	loadJS('lib/CodeMirror/mode/smalltalk/smalltalk.js');
-	loadCSS('lib/CodeMirror/theme/amber.css', 'js');
-    };
-
-    // This will be called after JS files have been loaded
-    function initializeSmalltalk() {
-	
-	window.smalltalkReady = function() {
-	    
-	    for (var i=0; i < localStorageSource.length; i++) {
-		eval(localStorageSource[i]);
-	    }
-	    
-	    if (deploy) {
-		smalltalk.setDeploymentMode();
-	    }
-	    
-	    if (spec.ready) {
-		spec.ready();
-	    }
-	}
-    };
-
-    function populateLocalPackages(){
-	var localStorageRE = /^smalltalk\.packages\.(.*)$/;
-	localPackages = {};
-
-	var match, key;
-	
-	for(var i=0; i < localStorage.length; i++) {
-	    key = localStorage.key(i);
-	    
-	    if (match = key.match(localStorageRE)) {
-		localPackages[match[1]] = localStorage[key];
-	    }
-	}
-
-	return localPackages;
-    };
-
-    function clearLocalPackages() {
-	for (var name in localPackages) {
-	    log('Removing ' + name + ' from local storage');
-	    localStorage.removeItem('smalltalk.packages.' + name);
-	}
-    };
-
-    function log(string) {
-	if (debug) {
-	    console.log(string);
+	var that = {};
+
+	var scripts = document.getElementsByTagName("script");
+	var src     = scripts[ scripts.length - 1 ].src;
+	var home    = src.split("/").slice(0, -2).join("/") + "/";
+	var nocache = '?' + (new Date()).getTime();
+
+	var debug;
+	var deploy;
+
+	var localStorageSource = [];
+	var localPackages;
+	var spec;
+
+	that.load = function(obj) {
+		spec = obj || {};
+
+		// In deployment mode, only the compressed version of Kernel
+		// and Canvas are loaded
+		deploy = spec.deploy || false;
+		debug = spec.debug || false;
+
+		// Specify a version string to avoid wrong browser caching
+		if (spec.version) {
+			nocache = '?' + spec.version;
+		}
+
+		loadDependencies();
+		loadJS('boot.js');
+
+		populateLocalPackages();
+
+		if (deploy) {
+			loadPackages([
+					'Kernel.deploy',
+					'Canvas.deploy'
+					]);
+		} else {
+			loadIDEDependencies();
+			loadCSS('amber.css');
+
+			loadPackages([
+				'Kernel',
+				'Canvas',
+				'Compiler',
+				'parser',
+				'IDE',
+				'SUnit',
+				'Examples',
+				'Benchfib',
+				'Kernel-Tests'
+			]);
+		}
+
+		var additionalFiles = spec.packages || spec.files;
+		if (additionalFiles) {
+			loadPackages(additionalFiles, spec.prefix);
+		}
+
+		// Always load all local packages
+		for (name in localPackages) {
+			log('Local package:  ' + name);
+			localStorageSource.push(localPackages[name]);
+		}
+
+		// Be sure to setup & initialize smalltalk classes
+		loadJS('init.js');
+		initializeSmalltalk();
+	};
+
+	function loadPackages(names, prefix){
+		var name, url;
+		var prefix = prefix || 'js';
+
+		for (var i=0; i < names.length; i++) {
+			name = names[i].split(/\.js$/)[0];
+
+			// Only load package from the server if it isn't stored in
+			// localStorage
+			if (!(name in localPackages)) {
+				log('Server package: ' + name);
+				loadJS(name + '.js', prefix);
+			}
+		}
+	};
+
+	function loadJS(name, prefix) {
+		var prefix = prefix || 'js';
+		var name = name;
+
+		if (!deploy) {
+			name = name + nocache;
+		}
+
+		var url = home + prefix + '/' + name;
+		var scriptString = '<script src="' + url + '" type="text/javascript"></script>';
+		document.write(scriptString);
+	};
+
+	function loadCSS(name, prefix) {
+		var prefix = prefix || 'css';
+		var name = name;
+		if (!deploy) {
+			name = name + nocache;
+		}
+
+		var url = home + prefix + '/' + name;
+
+		var link = document.createElement("link");
+		link.setAttribute("rel", "stylesheet");
+		link.setAttribute("type", "text/css");
+		link.setAttribute("href", url);
+		document.getElementsByTagName("head")[0].appendChild(link);
+	};
+
+  function loadDependencies() {
+		if (typeof jQuery == 'undefined') {
+			loadJS('lib/jQuery/jquery-1.6.4.min.js');
+		}
+
+		if ((typeof jQuery == 'undefined') || (typeof jQuery.ui == 'undefined')) {      
+			loadJS('lib/jQuery/jquery-ui-1.8.16.custom.min.js');
+		}
+  };
+
+	function loadIDEDependencies() {
+		loadJS('lib/jQuery/jquery.textarea.js');
+		loadJS('lib/CodeMirror/lib/codemirror.js');
+		loadCSS('lib/CodeMirror/lib/codemirror.css', 'js');
+		loadJS('lib/CodeMirror/mode/smalltalk/smalltalk.js');
+		loadCSS('lib/CodeMirror/theme/amber.css', 'js');
+	};
+
+	// This will be called after JS files have been loaded
+	function initializeSmalltalk() {
+
+		window.smalltalkReady = function() {
+
+			for (var i=0; i < localStorageSource.length; i++) {
+				eval(localStorageSource[i]);
+			}
+
+			if (deploy) {
+				smalltalk.setDeploymentMode();
+			}
+
+			if (spec.ready) {
+				spec.ready();
+			}
+		}
+	};
+
+	function populateLocalPackages(){
+		var localStorageRE = /^smalltalk\.packages\.(.*)$/;
+		localPackages = {};
+
+		var match, key;
+
+		for(var i=0; i < localStorage.length; i++) {
+			key = localStorage.key(i);
+
+			if (match = key.match(localStorageRE)) {
+				localPackages[match[1]] = localStorage[key];
+			}
+		}
+
+		return localPackages;
+	};
+
+	function clearLocalPackages() {
+		for (var name in localPackages) {
+			log('Removing ' + name + ' from local storage');
+			localStorage.removeItem('smalltalk.packages.' + name);
+		}
+	};
+
+	function log(string) {
+		if (debug) {
+			console.log(string);
+		}
 	}
-    }
 
-    return that;
+	return that;
 })();
 
 window.loadAmber = function(spec) {
-    amber.load(spec);
+	amber.load(spec);
 }

+ 8 - 0
repl/Makefile

@@ -0,0 +1,8 @@
+repl.js: REPL.st
+	../bin/amberc -m Repl -l Compiler,parser REPL.st amber
+
+run: repl.js
+	./amber
+
+clean:
+	rm -f amber.js

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 78 - 0
repl/REPL.js


+ 56 - 0
repl/REPL.st

@@ -0,0 +1,56 @@
+Object subclass: #Repl
+	instanceVariableNames: 'readline interface util'
+	category: 'REPL'!
+
+!Repl methodsFor: 'accessing'!
+
+prompt
+	^'amber >> '
+! !
+
+!Repl methodsFor: 'actions'!
+
+createInterface
+	"No completion for now"
+	interface := readline createInterface: process stdin stdout: process stdout.
+	interface on: 'line' do: [:buffer  | self eval: buffer].
+	interface on: 'close' do: [self close].
+	self setPrompt.
+	interface prompt
+!
+
+setPrompt
+	interface setPrompt: self prompt
+!
+
+close
+	process stdin destroy
+!
+
+eval: buffer
+	| result |
+	buffer isEmpty ifFalse: [
+		self try: [
+			result := Compiler new loadExpression: buffer.
+			Transcript show: result]
+		catch: [:e |
+			e isSmalltalkError
+			    ifTrue: [ErrorHandler new handleError: e]
+			    ifFalse: [process stdout write: e jsStack]]].
+	interface prompt
+! !
+
+!Repl methodsFor: 'initialization'!
+
+initialize
+	super initialize.
+	readline := require value: 'readline'.
+	util := require value: 'util'
+! !
+
+!Repl class methodsFor: 'not yet classified'!
+
+main
+	self new createInterface
+! !
+

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 3392 - 0
repl/amber.js


+ 1 - 0
st/Kernel.st

@@ -511,6 +511,7 @@ propertyAt: key ifAbsent: block
 	^(self propertyAt: key) ifNil: [block value]
 ! !
 
+
 !Package class methodsFor: 'accessing'!
 
 named: aPackageName

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio