Browse Source

explicit package creation

It's hard to inject right transport type, default namespace etc.
into implicitly created package.
If it is created explicitly, it helps requirejs implementation.
Herbert Vojčík 11 years ago
parent
commit
58e533dd01
4 changed files with 29 additions and 17 deletions
  1. 5 4
      js/Kernel-Classes.deploy.js
  2. 6 5
      js/Kernel-Classes.js
  3. 8 7
      st/Kernel-Classes.st
  4. 10 1
      support/boot.js

+ 5 - 4
js/Kernel-Classes.deploy.js

@@ -1029,16 +1029,17 @@ smalltalk.method({
 selector: "addSubclassOf:named:instanceVariableNames:package:",
 fn: function (aClass,className,aCollection,packageName){
 var self=this;
-var theClass;
+var theClass,thePackage;
 function $Smalltalk(){return smalltalk.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
 return smalltalk.withContext(function($ctx1) { 
 var $1,$2,$3,$4;
 theClass=_st(_st($Smalltalk())._current())._at_(className);
+thePackage=self._createPackageNamed_(packageName);
 $1=theClass;
 if(($receiver = $1) == nil || $receiver == undefined){
 $1;
 } else {
-_st(theClass)._package_(self._createPackageNamed_(packageName));
+_st(theClass)._package_(thePackage);
 $2=_st(_st(theClass)._superclass()).__eq_eq(aClass);
 if(! smalltalk.assert($2)){
 $3=self._migrateClassNamed_superclass_instanceVariableNames_package_(className,aClass,aCollection,packageName);
@@ -1047,8 +1048,8 @@ return $3;
 };
 $4=self._basicAddSubclassOf_named_instanceVariableNames_package_(aClass,className,aCollection,packageName);
 return $4;
-}, function($ctx1) {$ctx1.fill(self,"addSubclassOf:named:instanceVariableNames:package:",{aClass:aClass,className:className,aCollection:aCollection,packageName:packageName,theClass:theClass},smalltalk.ClassBuilder)})},
-messageSends: ["at:", "current", "ifNotNil:", "package:", "createPackageNamed:", "ifFalse:", "migrateClassNamed:superclass:instanceVariableNames:package:", "==", "superclass", "basicAddSubclassOf:named:instanceVariableNames:package:"]}),
+}, function($ctx1) {$ctx1.fill(self,"addSubclassOf:named:instanceVariableNames:package:",{aClass:aClass,className:className,aCollection:aCollection,packageName:packageName,theClass:theClass,thePackage:thePackage},smalltalk.ClassBuilder)})},
+messageSends: ["at:", "current", "createPackageNamed:", "ifNotNil:", "package:", "ifFalse:", "migrateClassNamed:superclass:instanceVariableNames:package:", "==", "superclass", "basicAddSubclassOf:named:instanceVariableNames:package:"]}),
 smalltalk.ClassBuilder);
 
 smalltalk.addMethod(

+ 6 - 5
js/Kernel-Classes.js

@@ -1354,16 +1354,17 @@ selector: "addSubclassOf:named:instanceVariableNames:package:",
 category: 'class definition',
 fn: function (aClass,className,aCollection,packageName){
 var self=this;
-var theClass;
+var theClass,thePackage;
 function $Smalltalk(){return smalltalk.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
 return smalltalk.withContext(function($ctx1) { 
 var $1,$2,$3,$4;
 theClass=_st(_st($Smalltalk())._current())._at_(className);
+thePackage=self._createPackageNamed_(packageName);
 $1=theClass;
 if(($receiver = $1) == nil || $receiver == undefined){
 $1;
 } else {
-_st(theClass)._package_(self._createPackageNamed_(packageName));
+_st(theClass)._package_(thePackage);
 $2=_st(_st(theClass)._superclass()).__eq_eq(aClass);
 if(! smalltalk.assert($2)){
 $3=self._migrateClassNamed_superclass_instanceVariableNames_package_(className,aClass,aCollection,packageName);
@@ -1372,10 +1373,10 @@ return $3;
 };
 $4=self._basicAddSubclassOf_named_instanceVariableNames_package_(aClass,className,aCollection,packageName);
 return $4;
-}, function($ctx1) {$ctx1.fill(self,"addSubclassOf:named:instanceVariableNames:package:",{aClass:aClass,className:className,aCollection:aCollection,packageName:packageName,theClass:theClass},smalltalk.ClassBuilder)})},
+}, function($ctx1) {$ctx1.fill(self,"addSubclassOf:named:instanceVariableNames:package:",{aClass:aClass,className:className,aCollection:aCollection,packageName:packageName,theClass:theClass,thePackage:thePackage},smalltalk.ClassBuilder)})},
 args: ["aClass", "className", "aCollection", "packageName"],
-source: "addSubclassOf: aClass named: className instanceVariableNames: aCollection package: packageName\x0a\x09| theClass |\x0a\x09\x0a\x09theClass := Smalltalk current at: className.\x0a\x09\x0a\x09theClass ifNotNil: [\x0a\x09\x09theClass package: (self createPackageNamed: packageName).\x0a\x09\x09theClass superclass == aClass ifFalse: [\x0a\x09\x09\x09^ self\x0a\x09\x09\x09\x09migrateClassNamed: className\x0a\x09\x09\x09\x09superclass: aClass\x0a\x09\x09\x09\x09instanceVariableNames: aCollection\x0a\x09\x09\x09\x09package: packageName ] ].\x0a\x09\x09\x0a\x09\x09^ self\x0a\x09\x09\x09basicAddSubclassOf: aClass\x0a\x09\x09\x09named: className\x0a\x09\x09\x09instanceVariableNames: aCollection\x0a\x09\x09\x09package: packageName",
-messageSends: ["at:", "current", "ifNotNil:", "package:", "createPackageNamed:", "ifFalse:", "migrateClassNamed:superclass:instanceVariableNames:package:", "==", "superclass", "basicAddSubclassOf:named:instanceVariableNames:package:"],
+source: "addSubclassOf: aClass named: className instanceVariableNames: aCollection package: packageName\x0a\x09| theClass thePackage |\x0a\x09\x0a\x09theClass := Smalltalk current at: className.\x0a\x09thePackage := self createPackageNamed: packageName.\x0a\x09\x0a\x09theClass ifNotNil: [\x0a\x09\x09theClass package: thePackage.\x0a\x09\x09theClass superclass == aClass ifFalse: [\x0a\x09\x09\x09^ self\x0a\x09\x09\x09\x09migrateClassNamed: className\x0a\x09\x09\x09\x09superclass: aClass\x0a\x09\x09\x09\x09instanceVariableNames: aCollection\x0a\x09\x09\x09\x09package: packageName ] ].\x0a\x09\x09\x0a\x09^ self\x0a\x09\x09basicAddSubclassOf: aClass\x0a\x09\x09named: className\x0a\x09\x09instanceVariableNames: aCollection\x0a\x09\x09package: packageName",
+messageSends: ["at:", "current", "createPackageNamed:", "ifNotNil:", "package:", "ifFalse:", "migrateClassNamed:superclass:instanceVariableNames:package:", "==", "superclass", "basicAddSubclassOf:named:instanceVariableNames:package:"],
 referencedClasses: ["Smalltalk"]
 }),
 smalltalk.ClassBuilder);

+ 8 - 7
st/Kernel-Classes.st

@@ -471,12 +471,13 @@ instanceVariableNamesFor: aString
 !ClassBuilder methodsFor: 'class definition'!
 
 addSubclassOf: aClass named: className instanceVariableNames: aCollection package: packageName
-	| theClass |
+	| theClass thePackage |
 	
 	theClass := Smalltalk current at: className.
+	thePackage := self createPackageNamed: packageName.
 	
 	theClass ifNotNil: [
-		theClass package: (self createPackageNamed: packageName).
+		theClass package: thePackage.
 		theClass superclass == aClass ifFalse: [
 			^ self
 				migrateClassNamed: className
@@ -484,11 +485,11 @@ addSubclassOf: aClass named: className instanceVariableNames: aCollection packag
 				instanceVariableNames: aCollection
 				package: packageName ] ].
 		
-		^ self
-			basicAddSubclassOf: aClass
-			named: className
-			instanceVariableNames: aCollection
-			package: packageName
+	^ self
+		basicAddSubclassOf: aClass
+		named: className
+		instanceVariableNames: aCollection
+		package: packageName
 !
 
 class: aClass instanceVariableNames: ivarNames

+ 10 - 1
support/boot.js

@@ -113,6 +113,8 @@ function RootBrik(brikz, st) {
 	this.nil = new SmalltalkNil();
 
 	this.__init__ = function () {
+		st.addPackage("Kernel-Objects");
+		st.addPackage("Kernel-Infrastructure");
 		st.wrapClassName("Object", "Kernel-Objects", SmalltalkObject, undefined, false);
 		st.wrapClassName("Smalltalk", "Kernel-Infrastructure", Smalltalk, st.Object, false);
 		st.wrapClassName("UndefinedObject", "Kernel-Objects", SmalltalkNil, st.Object, false);
@@ -320,6 +322,7 @@ function ClassesBrik(brikz, st) {
 	inherits(SmalltalkMetaclass, SmalltalkBehavior);
 
 	this.__init__ = function () {
+		st.addPackage("Kernel-Classes");
 		st.wrapClassName("Behavior", "Kernel-Classes", SmalltalkBehavior, st.Object, false);
 		st.wrapClassName("Metaclass", "Kernel-Classes", SmalltalkMetaclass, st.Behavior, false);
 		st.wrapClassName("Class", "Kernel-Classes", SmalltalkClass, st.Behavior, false);
@@ -424,7 +427,8 @@ function ClassesBrik(brikz, st) {
 	};
 
 	function rawAddClass(pkgName, className, superclass, iVarNames, wrapped, fn) {
-		var pkg = st.addPackage(pkgName);
+		var pkg = st.packages[pkgName];
+		if (!pkg) { throw new Error("Missing package "+pkgName); }
 		if(st[className] && st[className].superclass == superclass) {
 //            st[className].superclass = superclass;
 			st[className].iVarNames = iVarNames || [];
@@ -546,6 +550,7 @@ function MethodsBrik(brikz, st) {
 	inherits(SmalltalkMethod, SmalltalkObject);
 
 	this.__init__ = function () {
+		st.addPackage("Kernel-Methods");
 		st.wrapClassName("CompiledMethod", "Kernel-Methods", SmalltalkMethod, st.Object, false);
 	};
 
@@ -698,11 +703,13 @@ function SmalltalkInitBrik(brikz, st) {
 	};
 
 	this.__init__ = function () {
+		st.addPackage("Kernel-Methods");
 		st.wrapClassName("Number", "Kernel-Objects", Number, st.Object);
 		st.wrapClassName("BlockClosure", "Kernel-Methods", Function, st.Object);
 		st.wrapClassName("Boolean", "Kernel-Objects", Boolean, st.Object);
 		st.wrapClassName("Date", "Kernel-Objects", Date, st.Object);
 
+		st.addPackage("Kernel-Collections");
 		st.addClass("Collection", st.Object, null, "Kernel-Collections");
 		st.addClass("IndexableCollection", st.Collection, null, "Kernel-Collections");
 		st.addClass("SequenceableCollection", st.IndexableCollection, null, "Kernel-Collections");
@@ -711,6 +718,7 @@ function SmalltalkInitBrik(brikz, st) {
 		st.wrapClassName("Array", "Kernel-Collections", Array, st.SequenceableCollection);
 		st.wrapClassName("RegularExpression", "Kernel-Collections", RegExp, st.Object);
 
+		st.addPackage("Kernel-Exceptions");
 		st.wrapClassName("Error", "Kernel-Exceptions", Error, st.Object);
 
 		/* Alias definitions */
@@ -806,6 +814,7 @@ function RuntimeBrik(brikz, st) {
 	inherits(SmalltalkMethodContext, SmalltalkObject);
 
 	this.__init__ = function () {
+		st.addPackage("Kernel-Methods");
 		st.wrapClassName("MethodContext", "Kernel-Methods", SmalltalkMethodContext, st.Object, false);
 
 		// Fallbacks