Browse Source

Globals are different object than smalltalk.

Though, for backward compatibility, smalltalk inherits
from globals, so reading smalltalk[xxx] still works.
Herbert Vojčík 10 years ago
parent
commit
48b3be10a7
5 changed files with 69 additions and 58 deletions
  1. 7 7
      js/Kernel-Classes.js
  2. 30 22
      js/Kernel-Infrastructure.js
  3. 4 4
      st/Kernel-Classes.st
  4. 9 7
      st/Kernel-Infrastructure.st
  5. 19 18
      support/boot.js

+ 7 - 7
js/Kernel-Classes.js

@@ -1564,11 +1564,11 @@ fn: function (aClass,aString,aCollection,packageName){
 var self=this;
 
 		smalltalk.addClass(aString, aClass, aCollection, packageName);
-		return smalltalk[aString]
+		return globals[aString]
 	;
 return self},
 args: ["aClass", "aString", "aCollection", "packageName"],
-source: "basicAddSubclassOf: aClass named: aString instanceVariableNames: aCollection package: packageName\x0a\x09<\x0a\x09\x09smalltalk.addClass(aString, aClass, aCollection, packageName);\x0a\x09\x09return smalltalk[aString]\x0a\x09>",
+source: "basicAddSubclassOf: aClass named: aString instanceVariableNames: aCollection package: packageName\x0a\x09<\x0a\x09\x09smalltalk.addClass(aString, aClass, aCollection, packageName);\x0a\x09\x09return globals[aString]\x0a\x09>",
 messageSends: [],
 referencedClasses: []
 }),
@@ -1633,13 +1633,13 @@ protocol: 'private',
 fn: function (aClass,aString){
 var self=this;
 
-		smalltalk[aString] = aClass;
-		delete smalltalk[aClass.className];
+		globals[aString] = aClass;
+		delete globals[aClass.className];
 		aClass.className = aString;
 	;
 return self},
 args: ["aClass", "aString"],
-source: "basicRenameClass: aClass to: aString\x0a\x09<\x0a\x09\x09smalltalk[aString] = aClass;\x0a\x09\x09delete smalltalk[aClass.className];\x0a\x09\x09aClass.className = aString;\x0a\x09>",
+source: "basicRenameClass: aClass to: aString\x0a\x09<\x0a\x09\x09globals[aString] = aClass;\x0a\x09\x09delete globals[aClass.className];\x0a\x09\x09aClass.className = aString;\x0a\x09>",
 messageSends: [],
 referencedClasses: []
 }),
@@ -1885,11 +1885,11 @@ protocol: 'private',
 fn: function (aClass,aString){
 var self=this;
 
-		smalltalk[aString] = aClass;
+		globals[aString] = aClass;
 	;
 return self},
 args: ["aClass", "aString"],
-source: "rawRenameClass: aClass to: aString\x0a\x09<\x0a\x09\x09smalltalk[aString] = aClass;\x0a\x09>",
+source: "rawRenameClass: aClass to: aString\x0a\x09<\x0a\x09\x09globals[aString] = aClass;\x0a\x09>",
 messageSends: [],
 referencedClasses: []
 }),

+ 30 - 22
js/Kernel-Infrastructure.js

@@ -2265,12 +2265,12 @@ fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
 var $1;
-$1=self._at_("amdRequire");
+$1=_st(self._vm())._at_("amdRequire");
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"amdRequire",{},globals.SmalltalkImage)})},
 args: [],
-source: "amdRequire\x0a\x09^ self at: 'amdRequire'",
-messageSends: ["at:"],
+source: "amdRequire\x0a\x09^ self vm at: 'amdRequire'",
+messageSends: ["at:", "vm"],
 referencedClasses: []
 }),
 globals.SmalltalkImage);
@@ -2309,11 +2309,15 @@ selector: "at:",
 protocol: 'accessing',
 fn: function (aString){
 var self=this;
-return smalltalk[aString];
-return self},
+return smalltalk.withContext(function($ctx1) { 
+var $1;
+self._deprecatedAPI();
+$1=_st(self._globals())._at_(aString);
+return $1;
+}, function($ctx1) {$ctx1.fill(self,"at:",{aString:aString},globals.SmalltalkImage)})},
 args: ["aString"],
-source: "at: aString\x0a\x09<return smalltalk[aString]>",
-messageSends: [],
+source: "at: aString\x0a\x09self deprecatedAPI.\x0a\x09^ self globals at: aString",
+messageSends: ["deprecatedAPI", "at:", "globals"],
 referencedClasses: []
 }),
 globals.SmalltalkImage);
@@ -2347,11 +2351,15 @@ selector: "at:put:",
 protocol: 'accessing',
 fn: function (aString,anObject){
 var self=this;
-return smalltalk[aString]=anObject;
-return self},
+return smalltalk.withContext(function($ctx1) { 
+var $1;
+self._deprecatedAPI();
+$1=_st(self._globals())._at_put_(aString,anObject);
+return $1;
+}, function($ctx1) {$ctx1.fill(self,"at:put:",{aString:aString,anObject:anObject},globals.SmalltalkImage)})},
 args: ["aString", "anObject"],
-source: "at: aString put: anObject\x0a\x09<return smalltalk[aString]=anObject>",
-messageSends: [],
+source: "at: aString put: anObject\x0a\x09self deprecatedAPI.\x0a\x09^ self globals at: aString put: anObject",
+messageSends: ["deprecatedAPI", "at:put:", "globals"],
 referencedClasses: []
 }),
 globals.SmalltalkImage);
@@ -2476,12 +2484,12 @@ fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
 var $1;
-$1=self._at_("defaultAmdNamespace");
+$1=_st(self._vm())._defaultAmdNamespace();
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"defaultAmdNamespace",{},globals.SmalltalkImage)})},
 args: [],
-source: "defaultAmdNamespace\x0a\x09^ self at: 'defaultAmdNamespace'",
-messageSends: ["at:"],
+source: "defaultAmdNamespace\x0a\x09^ self vm defaultAmdNamespace",
+messageSends: ["defaultAmdNamespace", "vm"],
 referencedClasses: []
 }),
 globals.SmalltalkImage);
@@ -2493,11 +2501,11 @@ protocol: 'accessing amd',
 fn: function (aString){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-self._at_put_("defaultAmdNamespace",aString);
+_st(self._vm())._defaultAmdNamespace_(aString);
 return self}, function($ctx1) {$ctx1.fill(self,"defaultAmdNamespace:",{aString:aString},globals.SmalltalkImage)})},
 args: ["aString"],
-source: "defaultAmdNamespace: aString\x0a\x09self at: 'defaultAmdNamespace' put: aString",
-messageSends: ["at:put:"],
+source: "defaultAmdNamespace: aString\x0a\x09self vm defaultAmdNamespace: aString",
+messageSends: ["defaultAmdNamespace:", "vm"],
 referencedClasses: []
 }),
 globals.SmalltalkImage);
@@ -2571,10 +2579,10 @@ selector: "globals",
 protocol: 'accessing',
 fn: function (){
 var self=this;
-return self;
-},
+return globals;
+return self},
 args: [],
-source: "globals\x0a\x09\x22Future compatibility to be able to use Smalltalk globals at: ...\x22\x0a\x09^ self",
+source: "globals\x0a\x09\x22Future compatibility to be able to use Smalltalk globals at: ...\x22\x0a\x09<return globals>",
 messageSends: [],
 referencedClasses: []
 }),
@@ -2922,10 +2930,10 @@ protocol: 'initialization',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-_st(smalltalk)._at_put_("Smalltalk",self._current());
+_st(globals)._at_put_("Smalltalk",self._current());
 return self}, function($ctx1) {$ctx1.fill(self,"initialize",{},globals.SmalltalkImage.klass)})},
 args: [],
-source: "initialize\x0a\x09smalltalk at: 'Smalltalk' put: self current",
+source: "initialize\x0a\x09globals at: 'Smalltalk' put: self current",
 messageSends: ["at:put:", "current"],
 referencedClasses: []
 }),

+ 4 - 4
st/Kernel-Classes.st

@@ -685,7 +685,7 @@ installMethod: aCompiledMethod forClass: aBehavior protocol: aString
 basicAddSubclassOf: aClass named: aString instanceVariableNames: aCollection package: packageName
 	<
 		smalltalk.addClass(aString, aClass, aCollection, packageName);
-		return smalltalk[aString]
+		return globals[aString]
 	>
 !
 
@@ -705,8 +705,8 @@ basicRemoveClass: aClass
 
 basicRenameClass: aClass to: aString
 	<
-		smalltalk[aString] = aClass;
-		delete smalltalk[aClass.className];
+		globals[aString] = aClass;
+		delete globals[aClass.className];
 		aClass.className = aString;
 	>
 !
@@ -721,7 +721,7 @@ basicSwapClassNames: aClass with: anotherClass
 
 rawRenameClass: aClass to: aString
 	<
-		smalltalk[aString] = aClass;
+		globals[aString] = aClass;
 	>
 ! !
 

+ 9 - 7
st/Kernel-Infrastructure.st

@@ -914,7 +914,8 @@ It requires the `Compiler` package and the `js/parser.js` parser file in order t
 !SmalltalkImage methodsFor: 'accessing'!
 
 at: aString
-	<return smalltalk[aString]>
+	self deprecatedAPI.
+	^ self globals at: aString
 !
 
 at: aKey ifAbsent: aBlock
@@ -924,7 +925,8 @@ at: aKey ifAbsent: aBlock
 !
 
 at: aString put: anObject
-	<return smalltalk[aString]=anObject>
+	self deprecatedAPI.
+	^ self globals at: aString put: anObject
 !
 
 current
@@ -935,7 +937,7 @@ current
 
 globals
 	"Future compatibility to be able to use Smalltalk globals at: ..."
-	^ self
+	<return globals>
 !
 
 includesKey: aKey
@@ -981,15 +983,15 @@ vm
 !SmalltalkImage methodsFor: 'accessing amd'!
 
 amdRequire
-	^ self at: 'amdRequire'
+	^ self vm at: 'amdRequire'
 !
 
 defaultAmdNamespace
-	^ self at: 'defaultAmdNamespace'
+	^ self vm defaultAmdNamespace
 !
 
 defaultAmdNamespace: aString
-	self at: 'defaultAmdNamespace' put: aString
+	self vm defaultAmdNamespace: aString
 ! !
 
 !SmalltalkImage methodsFor: 'classes'!
@@ -1139,7 +1141,7 @@ SmalltalkImage class instanceVariableNames: 'current'!
 !SmalltalkImage class methodsFor: 'initialization'!
 
 initialize
-	smalltalk at: 'Smalltalk' put: self current
+	globals at: 'Smalltalk' put: self current
 ! !
 
 !SmalltalkImage class methodsFor: 'instance creation'!

+ 19 - 18
support/boot.js

@@ -92,7 +92,8 @@ function inherits(child, parent) {
 	return child;
 }
 
-var api = {};
+var globals = {};
+var api = Object.create(globals);
 var brikz = new Brikz(api);
 
 function RootBrik(brikz, st) {
@@ -449,20 +450,20 @@ function ClassesBrik(brikz, st) {
 			throw new Error("Missing package "+pkgName);
 		}
 
-		if(st[className] && st[className].superclass == superclass) {
-//            st[className].superclass = superclass;
-			st[className].iVarNames = iVarNames || [];
-			if (pkg) st[className].pkg = pkg;
+		if(globals[className] && globals[className].superclass == superclass) {
+//            globals[className].superclass = superclass;
+			globals[className].iVarNames = iVarNames || [];
+			if (pkg) globals[className].pkg = pkg;
 			if (fn) {
-				fn.prototype = st[className].fn.prototype;
-				st[className].fn = fn;
+				fn.prototype = globals[className].fn.prototype;
+				globals[className].fn = fn;
 				fn.prototype.constructor = fn;
 			}
 		} else {
-			if(st[className]) {
-				st.removeClass(st[className]);
+			if(globals[className]) {
+				st.removeClass(globals[className]);
 			}
-			st[className] = klass({
+			globals[className] = klass({
 				className: className,
 				superclass: superclass,
 				pkg: pkg,
@@ -471,18 +472,18 @@ function ClassesBrik(brikz, st) {
 				wrapped: wrapped
 			});
 
-			addSubclass(st[className]);
+			addSubclass(globals[className]);
 		}
 
-		classes.addElement(st[className]);
-		org.addOrganizationElement(pkg, st[className]);
+		classes.addElement(globals[className]);
+		org.addOrganizationElement(pkg, globals[className]);
 	}
 
 	st.removeClass = function(klass) {
 		org.removeOrganizationElement(klass.pkg, klass);
 		classes.removeElement(klass);
 		removeSubclass(klass);
-		delete st[klass.className];
+		delete globals[klass.className];
 	};
 
 	function addSubclass(klass) {
@@ -502,9 +503,9 @@ function ClassesBrik(brikz, st) {
 
 	st.wrapClassName = function(className, pkgName, fn, superclass, wrapped) {
 		wrapped = wrapped !== false;
-		rawAddClass(pkgName, className, superclass, st[className] && st[className].iVarNames, wrapped, fn);
+		rawAddClass(pkgName, className, superclass, globals[className] && globals[className].iVarNames, wrapped, fn);
 		if(wrapped) {
-			wrappedClasses.addElement(st[className]);
+			wrappedClasses.addElement(globals[className]);
 		}
 	};
 
@@ -527,7 +528,7 @@ function ClassesBrik(brikz, st) {
 	/* Create an alias for an existing class */
 
 	st.alias = function(klass, alias) {
-		st[alias] = klass;
+		globals[alias] = klass;
 	};
 
 	/* Answer all registered Smalltalk classes */
@@ -1128,5 +1129,5 @@ function runnable () {
 	brikz.rebuild();
 };
 
-return { smalltalk: api, nil: brikz.root.nil, globals: api };
+return { smalltalk: api, nil: brikz.root.nil, globals: globals };
 });