UNPKG

amber

Version:

An implementation of the Smalltalk language that runs on top of the JS runtime.

1,428 lines (1,360 loc) 163 kB
define(["amber/boot", "amber_core/Kernel-Collections", "amber_core/Kernel-Helpers", "amber_core/Kernel-Objects"], function($boot){"use strict"; if(!("nilAsValue" in $boot))$boot.nilAsValue=$boot.nilAsReceiver; var $core=$boot.api,nil=$boot.nilAsValue,$nil=$boot.nilAsReceiver,$recv=$boot.asReceiver,$globals=$boot.globals; $core.addPackage("Kernel-Classes"); ($core.packageDescriptors||$core.packages)["Kernel-Classes"].innerEval = function (expr) { return eval(expr); }; ($core.packageDescriptors||$core.packages)["Kernel-Classes"].transport = {"type":"amd","amdNamespace":"amber_core"}; $core.addClass("Behavior", $globals.Object, ["organization"], "Kernel-Classes"); //>>excludeStart("ide", pragmas.excludeIdeData); $globals.Behavior.comment="I am the superclass of all class objects.\x0a\x0aIn addition to BehaviorBody, I define superclass/subclass relationships and instantiation.\x0a\x0aI define the protocol for creating instances of a class with `#basicNew` and `#new` (see `boot.js` for class constructors details).\x0a\x0aMy instances know about the subclass/superclass relationships between classes and contain the description that instances are created from.\x0a\x0aI also provide iterating over the class hierarchy."; //>>excludeEnd("ide"); $core.addMethod( $core.method({ selector: "allInstanceVariableNames", protocol: "accessing", fn: function (){ var self=this,$self=this; var result; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); var $1,$receiver; result=$recv($self._instanceVariableNames())._copy(); $1=$self._superclass(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); $ctx1.sendIdx["superclass"]=1; //>>excludeEnd("ctx"); if(($receiver = $1) == null || $receiver.a$nil){ $1; } else { $recv(result)._addAll_($recv($self._superclass())._allInstanceVariableNames()); } return result; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"allInstanceVariableNames",{result:result},$globals.Behavior)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "allInstanceVariableNames\x0a\x09| result |\x0a\x09result := self instanceVariableNames copy.\x0a\x09self superclass ifNotNil: [\x0a\x09\x09result addAll: self superclass allInstanceVariableNames ].\x0a\x09^ result", referencedClasses: [], //>>excludeEnd("ide"); messageSends: ["copy", "instanceVariableNames", "ifNotNil:", "superclass", "addAll:", "allInstanceVariableNames"] }), $globals.Behavior); $core.addMethod( $core.method({ selector: "allSelectors", protocol: "accessing", fn: function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); var $1,$2; $1=$self._allSuperclasses(); $2=$self._selectors(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); $ctx1.sendIdx["selectors"]=1; //>>excludeEnd("ctx"); return $recv($1)._inject_into_($2,(function(acc,each){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); $recv(acc)._addAll_($recv(each)._selectors()); return $recv(acc)._yourself(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({acc:acc,each:each},$ctx1,1)}); //>>excludeEnd("ctx"); })); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"allSelectors",{},$globals.Behavior)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "allSelectors\x0a\x09^ self allSuperclasses\x0a\x09\x09inject: self selectors\x0a\x09\x09into: [ :acc :each | acc addAll: each selectors; yourself ]", referencedClasses: [], //>>excludeEnd("ide"); messageSends: ["inject:into:", "allSuperclasses", "selectors", "addAll:", "yourself"] }), $globals.Behavior); $core.addMethod( $core.method({ selector: "allSubclasses", protocol: "accessing", fn: function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $recv($globals.Array)._streamContents_((function(str){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); return $self._allSubclassesDo_((function(each){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx3) { //>>excludeEnd("ctx"); return $recv(str)._nextPut_(each); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx3) {$ctx3.fillBlock({each:each},$ctx2,2)}); //>>excludeEnd("ctx"); })); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({str:str},$ctx1,1)}); //>>excludeEnd("ctx"); })); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"allSubclasses",{},$globals.Behavior)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "allSubclasses\x0a\x09\x22Answer an collection of the receiver's and the receiver's descendent's subclasses. \x22\x0a\x0a\x09^ Array streamContents: [ :str | self allSubclassesDo: [ :each | str nextPut: each ] ]", referencedClasses: ["Array"], //>>excludeEnd("ide"); messageSends: ["streamContents:", "allSubclassesDo:", "nextPut:"] }), $globals.Behavior); $core.addMethod( $core.method({ selector: "allSubclassesDo:", protocol: "enumerating", fn: function (aBlock){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); $core.traverseClassTree(self, function(subclass) { if (subclass !== self) aBlock._value_(subclass); }); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"allSubclassesDo:",{aBlock:aBlock},$globals.Behavior)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aBlock"], source: "allSubclassesDo: aBlock\x0a\x09\x22Evaluate the argument, aBlock, for each of the receiver's subclasses.\x22\x0a\x0a<inlineJS: '$core.traverseClassTree(self, function(subclass) {\x0a\x09if (subclass !== self) aBlock._value_(subclass);\x0a})'>", referencedClasses: [], //>>excludeEnd("ide"); messageSends: [] }), $globals.Behavior); $core.addMethod( $core.method({ selector: "allSuperclasses", protocol: "accessing", fn: function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); var $1,$3,$2,$receiver; $1=$self._superclass(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); $ctx1.sendIdx["superclass"]=1; //>>excludeEnd("ctx"); if(($receiver = $1) == null || $receiver.a$nil){ return []; } else { $1; } $3=$self._superclass(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); $ctx1.sendIdx["superclass"]=2; //>>excludeEnd("ctx"); $2=$recv($globals.OrderedCollection)._with_($3); $recv($2)._addAll_($recv($self._superclass())._allSuperclasses()); return $recv($2)._yourself(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"allSuperclasses",{},$globals.Behavior)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "allSuperclasses\x0a\x09\x0a\x09self superclass ifNil: [ ^ #() ].\x0a\x09\x0a\x09^ (OrderedCollection with: self superclass)\x0a\x09\x09addAll: self superclass allSuperclasses;\x0a\x09\x09yourself", referencedClasses: ["OrderedCollection"], //>>excludeEnd("ide"); messageSends: ["ifNil:", "superclass", "addAll:", "with:", "allSuperclasses", "yourself"] }), $globals.Behavior); $core.addMethod( $core.method({ selector: "basicNew", protocol: "instance creation", fn: function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return new self.fn(); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"basicNew",{},$globals.Behavior)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "basicNew\x0a\x09<inlineJS: 'return new self.fn()'>", referencedClasses: [], //>>excludeEnd("ide"); messageSends: [] }), $globals.Behavior); $core.addMethod( $core.method({ selector: "basicOrganization", protocol: "accessing", fn: function (){ var self=this,$self=this; return $self["@organization"]; }, //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "basicOrganization\x0a\x09^ organization", referencedClasses: [], //>>excludeEnd("ide"); messageSends: [] }), $globals.Behavior); $core.addMethod( $core.method({ selector: "basicOrganization:", protocol: "accessing", fn: function (aClassOrganizer){ var self=this,$self=this; $self["@organization"]=aClassOrganizer; return self; }, //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aClassOrganizer"], source: "basicOrganization: aClassOrganizer\x0a\x09organization := aClassOrganizer", referencedClasses: [], //>>excludeEnd("ide"); messageSends: [] }), $globals.Behavior); $core.addMethod( $core.method({ selector: "canUnderstand:", protocol: "testing", fn: function (aSelector){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); var $2,$1; return $recv($self._includesSelector_($recv(aSelector)._asString()))._or_((function(){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); $2=$self._superclass(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); $ctx2.sendIdx["superclass"]=1; //>>excludeEnd("ctx"); $1=$recv($2)._notNil(); return $recv($1)._and_((function(){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx3) { //>>excludeEnd("ctx"); return $recv($self._superclass())._canUnderstand_(aSelector); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)}); //>>excludeEnd("ctx"); })); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)}); //>>excludeEnd("ctx"); })); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"canUnderstand:",{aSelector:aSelector},$globals.Behavior)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aSelector"], source: "canUnderstand: aSelector\x0a\x09^ (self includesSelector: aSelector asString) or: [\x0a\x09\x09self superclass notNil and: [ self superclass canUnderstand: aSelector ]]", referencedClasses: [], //>>excludeEnd("ide"); messageSends: ["or:", "includesSelector:", "asString", "and:", "notNil", "superclass", "canUnderstand:"] }), $globals.Behavior); $core.addMethod( $core.method({ selector: "includesBehavior:", protocol: "testing", fn: function (aClass){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $recv($self.__eq_eq(aClass))._or_((function(){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); return $self._inheritsFrom_(aClass); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)}); //>>excludeEnd("ctx"); })); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"includesBehavior:",{aClass:aClass},$globals.Behavior)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aClass"], source: "includesBehavior: aClass\x0a\x09^ self == aClass or: [\x0a\x09\x09\x09self inheritsFrom: aClass ]", referencedClasses: [], //>>excludeEnd("ide"); messageSends: ["or:", "==", "inheritsFrom:"] }), $globals.Behavior); $core.addMethod( $core.method({ selector: "inheritsFrom:", protocol: "testing", fn: function (aClass){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); var $1,$3,$2,$receiver; $1=$self._superclass(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); $ctx1.sendIdx["superclass"]=1; //>>excludeEnd("ctx"); if(($receiver = $1) == null || $receiver.a$nil){ return false; } else { $1; } $3=$self._superclass(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); $ctx1.sendIdx["superclass"]=2; //>>excludeEnd("ctx"); $2=$recv(aClass).__eq_eq($3); return $recv($2)._or_((function(){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); return $recv($self._superclass())._inheritsFrom_(aClass); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)}); //>>excludeEnd("ctx"); })); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"inheritsFrom:",{aClass:aClass},$globals.Behavior)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aClass"], source: "inheritsFrom: aClass\x0a\x09self superclass ifNil: [ ^ false ].\x0a\x0a\x09^ aClass == self superclass or: [ \x0a\x09\x09self superclass inheritsFrom: aClass ]", referencedClasses: [], //>>excludeEnd("ide"); messageSends: ["ifNil:", "superclass", "or:", "==", "inheritsFrom:"] }), $globals.Behavior); $core.addMethod( $core.method({ selector: "instanceVariableNames", protocol: "accessing", fn: function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return self.iVarNames; return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"instanceVariableNames",{},$globals.Behavior)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "instanceVariableNames\x0a\x09<inlineJS: 'return self.iVarNames'>", referencedClasses: [], //>>excludeEnd("ide"); messageSends: [] }), $globals.Behavior); $core.addMethod( $core.method({ selector: "isBehavior", protocol: "testing", fn: function (){ var self=this,$self=this; return true; }, //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "isBehavior\x0a\x09^ true", referencedClasses: [], //>>excludeEnd("ide"); messageSends: [] }), $globals.Behavior); $core.addMethod( $core.method({ selector: "javascriptConstructor", protocol: "accessing", fn: function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return self.fn; return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"javascriptConstructor",{},$globals.Behavior)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "javascriptConstructor\x0a\x09\x22Answer the JS constructor used to instantiate. See boot.js\x22\x0a\x09\x0a\x09<inlineJS: 'return self.fn'>", referencedClasses: [], //>>excludeEnd("ide"); messageSends: [] }), $globals.Behavior); $core.addMethod( $core.method({ selector: "javascriptConstructor:", protocol: "accessing", fn: function (aJavaScriptFunction){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); $core.setClassConstructor(self, aJavaScriptFunction);; return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"javascriptConstructor:",{aJavaScriptFunction:aJavaScriptFunction},$globals.Behavior)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aJavaScriptFunction"], source: "javascriptConstructor: aJavaScriptFunction\x0a\x09\x22Set the JS constructor used to instantiate.\x0a\x09See the JS counter-part in boot.js `$core.setClassConstructor'\x22\x0a\x09\x0a\x09<inlineJS: '$core.setClassConstructor(self, aJavaScriptFunction);'>", referencedClasses: [], //>>excludeEnd("ide"); messageSends: [] }), $globals.Behavior); $core.addMethod( $core.method({ selector: "lookupSelector:", protocol: "accessing", fn: function (selector){ var self=this,$self=this; var lookupClass; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); var $1; var $early={}; try { lookupClass=self; $recv((function(){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); return $recv(lookupClass).__eq(nil); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)}); //>>excludeEnd("ctx"); }))._whileFalse_((function(){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); $1=$recv(lookupClass)._includesSelector_(selector); if($core.assert($1)){ throw $early=[$recv(lookupClass)._methodAt_(selector)]; } lookupClass=$recv(lookupClass)._superclass(); return lookupClass; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)}); //>>excludeEnd("ctx"); })); return nil; } catch(e) {if(e===$early)return e[0]; throw e} //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"lookupSelector:",{selector:selector,lookupClass:lookupClass},$globals.Behavior)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: ["selector"], source: "lookupSelector: selector\x0a\x09\x22Look up the given selector in my methodDictionary.\x0a\x09Return the corresponding method if found.\x0a\x09Otherwise chase the superclass chain and try again.\x0a\x09Return nil if no method is found.\x22\x0a\x09\x0a\x09| lookupClass |\x0a\x09\x0a\x09lookupClass := self.\x0a\x09[ lookupClass = nil ] whileFalse: [\x0a\x09\x09(lookupClass includesSelector: selector)\x0a\x09\x09\x09\x09ifTrue: [ ^ lookupClass methodAt: selector ].\x0a\x09\x09\x09lookupClass := lookupClass superclass ].\x0a\x09^ nil", referencedClasses: [], //>>excludeEnd("ide"); messageSends: ["whileFalse:", "=", "ifTrue:", "includesSelector:", "methodAt:", "superclass"] }), $globals.Behavior); $core.addMethod( $core.method({ selector: "new", protocol: "instance creation", fn: function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $recv($self._basicNew())._initialize(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"new",{},$globals.Behavior)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "new\x0a\x09^ self basicNew initialize", referencedClasses: [], //>>excludeEnd("ide"); messageSends: ["initialize", "basicNew"] }), $globals.Behavior); $core.addMethod( $core.method({ selector: "prototype", protocol: "accessing", fn: function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return self.fn.prototype; return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"prototype",{},$globals.Behavior)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "prototype\x0a\x09<inlineJS: 'return self.fn.prototype'>", referencedClasses: [], //>>excludeEnd("ide"); messageSends: [] }), $globals.Behavior); $core.addMethod( $core.method({ selector: "subclasses", protocol: "accessing", fn: function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); $self._subclassResponsibility(); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"subclasses",{},$globals.Behavior)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "subclasses\x0a\x09self subclassResponsibility", referencedClasses: [], //>>excludeEnd("ide"); messageSends: ["subclassResponsibility"] }), $globals.Behavior); $core.addMethod( $core.method({ selector: "superclass", protocol: "accessing", fn: function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return self.superclass; return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"superclass",{},$globals.Behavior)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "superclass\x0a\x09<inlineJS: 'return self.superclass'>", referencedClasses: [], //>>excludeEnd("ide"); messageSends: [] }), $globals.Behavior); $core.addMethod( $core.method({ selector: "theMetaClass", protocol: "accessing", fn: function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); $self._subclassResponsibility(); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"theMetaClass",{},$globals.Behavior)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "theMetaClass\x0a\x09self subclassResponsibility", referencedClasses: [], //>>excludeEnd("ide"); messageSends: ["subclassResponsibility"] }), $globals.Behavior); $core.addMethod( $core.method({ selector: "theNonMetaClass", protocol: "accessing", fn: function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); $self._subclassResponsibility(); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"theNonMetaClass",{},$globals.Behavior)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "theNonMetaClass\x0a\x09self subclassResponsibility", referencedClasses: [], //>>excludeEnd("ide"); messageSends: ["subclassResponsibility"] }), $globals.Behavior); $core.addMethod( $core.method({ selector: "withAllSubclasses", protocol: "accessing", fn: function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); var $1; $1=$recv($globals.Array)._with_(self); $recv($1)._addAll_($self._allSubclasses()); return $recv($1)._yourself(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"withAllSubclasses",{},$globals.Behavior)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "withAllSubclasses\x0a\x09^ (Array with: self) addAll: self allSubclasses; yourself", referencedClasses: ["Array"], //>>excludeEnd("ide"); messageSends: ["addAll:", "with:", "allSubclasses", "yourself"] }), $globals.Behavior); $core.addClass("Class", $globals.Behavior, ["package"], "Kernel-Classes"); //>>excludeStart("ide", pragmas.excludeIdeData); $globals.Class.comment="I am __the__ class object.\x0a\x0aMy instances are the classes of the system.\x0aClass creation is done throught a `ClassBuilder` instance."; //>>excludeEnd("ide"); $core.addMethod( $core.method({ selector: "basicPackage:", protocol: "accessing", fn: function (aPackage){ var self=this,$self=this; $self["@package"]=aPackage; return self; }, //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aPackage"], source: "basicPackage: aPackage\x0a\x09package := aPackage", referencedClasses: [], //>>excludeEnd("ide"); messageSends: [] }), $globals.Class); $core.addMethod( $core.method({ selector: "classTag", protocol: "accessing", fn: function (){ var self=this,$self=this; return "class"; }, //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "classTag\x0a\x09\x22Returns a tag or general category for this class.\x0a\x09Typically used to help tools do some reflection.\x0a\x09Helios, for example, uses this to decide what icon the class should display.\x22\x0a\x09\x0a\x09^ 'class'", referencedClasses: [], //>>excludeEnd("ide"); messageSends: [] }), $globals.Class); $core.addMethod( $core.method({ selector: "definition", protocol: "accessing", fn: function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); var $1,$2; return $recv($globals.String)._streamContents_((function(stream){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); $recv(stream)._print_($self._superclass()); //>>excludeStart("ctx", pragmas.excludeDebugContexts); $ctx2.sendIdx["print:"]=1; //>>excludeEnd("ctx"); $recv(stream)._write_(" subclass: "); //>>excludeStart("ctx", pragmas.excludeDebugContexts); $ctx2.sendIdx["write:"]=1; //>>excludeEnd("ctx"); $recv(stream)._printSymbol_($self._name()); $recv(stream)._lf(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); $ctx2.sendIdx["lf"]=1; //>>excludeEnd("ctx"); $recv(stream)._write_($recv($self._traitCompositionDefinition())._ifNotEmpty_((function(tcd){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx3) { //>>excludeEnd("ctx"); $1=$recv($globals.String)._tab(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); $ctx3.sendIdx["tab"]=1; //>>excludeEnd("ctx"); $2=$recv($globals.String)._lf(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); $ctx3.sendIdx["lf"]=2; //>>excludeEnd("ctx"); return [$1,"uses: ",tcd,$2]; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx3) {$ctx3.fillBlock({tcd:tcd},$ctx2,2)}); //>>excludeEnd("ctx"); }))); //>>excludeStart("ctx", pragmas.excludeDebugContexts); $ctx2.sendIdx["write:"]=2; //>>excludeEnd("ctx"); $recv(stream)._tab(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); $ctx2.sendIdx["tab"]=2; //>>excludeEnd("ctx"); $recv(stream)._write_("instanceVariableNames: "); //>>excludeStart("ctx", pragmas.excludeDebugContexts); $ctx2.sendIdx["write:"]=3; //>>excludeEnd("ctx"); $recv(stream)._print_(" "._join_($self._instanceVariableNames())); //>>excludeStart("ctx", pragmas.excludeDebugContexts); $ctx2.sendIdx["print:"]=2; //>>excludeEnd("ctx"); $recv(stream)._lf(); $recv(stream)._tab(); $recv(stream)._write_("package: "); return $recv(stream)._print_($self._category()); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({stream:stream},$ctx1,1)}); //>>excludeEnd("ctx"); })); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"definition",{},$globals.Class)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "definition\x0a\x09^ String streamContents: [ :stream | stream\x0a\x09\x09print: self superclass; write: ' subclass: '; printSymbol: self name; lf;\x0a\x09\x09write: (self traitCompositionDefinition ifNotEmpty: [ :tcd | { String tab. 'uses: '. tcd. String lf }]);\x0a\x09\x09tab; write: 'instanceVariableNames: '; print: (' ' join: self instanceVariableNames); lf;\x0a\x09\x09tab; write: 'package: '; print: self category ]", referencedClasses: ["String"], //>>excludeEnd("ide"); messageSends: ["streamContents:", "print:", "superclass", "write:", "printSymbol:", "name", "lf", "ifNotEmpty:", "traitCompositionDefinition", "tab", "join:", "instanceVariableNames", "category"] }), $globals.Class); $core.addMethod( $core.method({ selector: "isClass", protocol: "testing", fn: function (){ var self=this,$self=this; return true; }, //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "isClass\x0a\x09^ true", referencedClasses: [], //>>excludeEnd("ide"); messageSends: [] }), $globals.Class); $core.addMethod( $core.method({ selector: "package", protocol: "accessing", fn: function (){ var self=this,$self=this; return $self["@package"]; }, //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "package\x0a\x09^ package", referencedClasses: [], //>>excludeEnd("ide"); messageSends: [] }), $globals.Class); $core.addMethod( $core.method({ selector: "provided", protocol: "converting", fn: function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $recv($self._javascriptConstructor())._provided(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"provided",{},$globals.Class)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "provided\x0a\x09\x22Returns JS proxy that allows to access 'static API', as in\x0a\x09 Number provided EPSILON\x0a\x09that forwards to (wrapped JS) constructor function.\x22\x0a\x09\x0a\x09^ self javascriptConstructor provided", referencedClasses: [], //>>excludeEnd("ide"); messageSends: ["provided", "javascriptConstructor"] }), $globals.Class); $core.addMethod( $core.method({ selector: "rename:", protocol: "accessing", fn: function (aString){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); $recv($recv($globals.ClassBuilder)._new())._renameClass_to_(self,aString); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"rename:",{aString:aString},$globals.Class)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aString"], source: "rename: aString\x0a\x09ClassBuilder new renameClass: self to: aString", referencedClasses: ["ClassBuilder"], //>>excludeEnd("ide"); messageSends: ["renameClass:to:", "new"] }), $globals.Class); $core.addMethod( $core.method({ selector: "subclasses", protocol: "accessing", fn: function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return self.subclasses._copy(); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"subclasses",{},$globals.Class)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "subclasses\x0a\x09<inlineJS: 'return self.subclasses._copy()'>", referencedClasses: [], //>>excludeEnd("ide"); messageSends: [] }), $globals.Class); $core.addMethod( $core.method({ selector: "theMetaClass", protocol: "accessing", fn: function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $self._class(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"theMetaClass",{},$globals.Class)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "theMetaClass\x0a\x09^ self class", referencedClasses: [], //>>excludeEnd("ide"); messageSends: ["class"] }), $globals.Class); $core.addClass("Metaclass", $globals.Behavior, [], "Kernel-Classes"); //>>excludeStart("ide", pragmas.excludeIdeData); $globals.Metaclass.comment="I am the root of the class hierarchy.\x0a\x0aMy instances are metaclasses, one for each real class, and have a single instance, which they hold onto: the class that they are the metaclass of."; //>>excludeEnd("ide"); $core.addMethod( $core.method({ selector: "asJavaScriptSource", protocol: "converting", fn: function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); var $1; $1=$recv("$globals.".__comma($recv($self._instanceClass())._name())).__comma(".a$cls"); //>>excludeStart("ctx", pragmas.excludeDebugContexts); $ctx1.sendIdx[","]=1; //>>excludeEnd("ctx"); return $1; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"asJavaScriptSource",{},$globals.Metaclass)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "asJavaScriptSource\x0a\x09^ '$globals.', self instanceClass name, '.a$cls'", referencedClasses: [], //>>excludeEnd("ide"); messageSends: [",", "name", "instanceClass"] }), $globals.Metaclass); $core.addMethod( $core.method({ selector: "definition", protocol: "accessing", fn: function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); var $1,$2; return $recv($globals.String)._streamContents_((function(stream){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); $recv(stream)._print_(self); //>>excludeStart("ctx", pragmas.excludeDebugContexts); $ctx2.sendIdx["print:"]=1; //>>excludeEnd("ctx"); $recv(stream)._write_($recv($self._traitCompositionDefinition())._ifEmpty_ifNotEmpty_((function(){ return " "; }),(function(tcd){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx3) { //>>excludeEnd("ctx"); $1=$recv($globals.String)._lf(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); $ctx3.sendIdx["lf"]=1; //>>excludeEnd("ctx"); $2=$recv($globals.String)._tab(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); $ctx3.sendIdx["tab"]=1; //>>excludeEnd("ctx"); return [$1,$2,"uses: ",tcd,$recv($globals.String)._lf(),$recv($globals.String)._tab()]; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx3) {$ctx3.fillBlock({tcd:tcd},$ctx2,3)}); //>>excludeEnd("ctx"); }))); //>>excludeStart("ctx", pragmas.excludeDebugContexts); $ctx2.sendIdx["write:"]=1; //>>excludeEnd("ctx"); $recv(stream)._write_("instanceVariableNames: "); return $recv(stream)._print_(" "._join_($self._instanceVariableNames())); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({stream:stream},$ctx1,1)}); //>>excludeEnd("ctx"); })); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"definition",{},$globals.Metaclass)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "definition\x0a\x09^ String streamContents: [ :stream | stream\x0a\x09\x09print: self;\x0a\x09\x09write: (self traitCompositionDefinition\x0a\x09\x09\x09ifEmpty: [' ']\x0a\x09\x09\x09ifNotEmpty: [ :tcd | { String lf. String tab. 'uses: '. tcd. String lf. String tab }]);\x0a\x09\x09write: 'instanceVariableNames: ';\x0a\x09\x09print: (' ' join: self instanceVariableNames) ]", referencedClasses: ["String"], //>>excludeEnd("ide"); messageSends: ["streamContents:", "print:", "write:", "ifEmpty:ifNotEmpty:", "traitCompositionDefinition", "lf", "tab", "join:", "instanceVariableNames"] }), $globals.Metaclass); $core.addMethod( $core.method({ selector: "instanceClass", protocol: "accessing", fn: function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return self.instanceClass; return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"instanceClass",{},$globals.Metaclass)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "instanceClass\x0a\x09<inlineJS: 'return self.instanceClass'>", referencedClasses: [], //>>excludeEnd("ide"); messageSends: [] }), $globals.Metaclass); $core.addMethod( $core.method({ selector: "instanceVariableNames:", protocol: "accessing", fn: function (aCollection){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); $recv($recv($globals.ClassBuilder)._new())._class_instanceVariableNames_(self,aCollection); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"instanceVariableNames:",{aCollection:aCollection},$globals.Metaclass)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aCollection"], source: "instanceVariableNames: aCollection\x0a\x09ClassBuilder new\x0a\x09\x09class: self instanceVariableNames: aCollection.\x0a\x09^ self", referencedClasses: ["ClassBuilder"], //>>excludeEnd("ide"); messageSends: ["class:instanceVariableNames:", "new"] }), $globals.Metaclass); $core.addMethod( $core.method({ selector: "isMetaclass", protocol: "testing", fn: function (){ var self=this,$self=this; return true; }, //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "isMetaclass\x0a\x09^ true", referencedClasses: [], //>>excludeEnd("ide"); messageSends: [] }), $globals.Metaclass); $core.addMethod( $core.method({ selector: "name", protocol: "accessing", fn: function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $recv($recv($self._instanceClass())._name()).__comma(" class"); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"name",{},$globals.Metaclass)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "name\x0a\x09^ self instanceClass name, ' class'", referencedClasses: [], //>>excludeEnd("ide"); messageSends: [",", "name", "instanceClass"] }), $globals.Metaclass); $core.addMethod( $core.method({ selector: "package", protocol: "accessing", fn: function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $recv($self._instanceClass())._package(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"package",{},$globals.Metaclass)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "package\x0a\x09^ self instanceClass package", referencedClasses: [], //>>excludeEnd("ide"); messageSends: ["package", "instanceClass"] }), $globals.Metaclass); $core.addMethod( $core.method({ selector: "subclasses", protocol: "accessing", fn: function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $core.metaSubclasses(self); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"subclasses",{},$globals.Metaclass)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "subclasses\x0a\x09<inlineJS: 'return $core.metaSubclasses(self)'>", referencedClasses: [], //>>excludeEnd("ide"); messageSends: [] }), $globals.Metaclass); $core.addMethod( $core.method({ selector: "theMetaClass", protocol: "accessing", fn: function (){ var self=this,$self=this; return self; }, //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "theMetaClass\x0a\x09^ self", referencedClasses: [], //>>excludeEnd("ide"); messageSends: [] }), $globals.Metaclass); $core.addMethod( $core.method({ selector: "theNonMetaClass", protocol: "accessing", fn: function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $self._instanceClass(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"theNonMetaClass",{},$globals.Metaclass)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "theNonMetaClass\x0a\x09^ self instanceClass", referencedClasses: [], //>>excludeEnd("ide"); messageSends: ["instanceClass"] }), $globals.Metaclass); $core.addMethod( $core.method({ selector: "uses:instanceVariableNames:", protocol: "accessing", fn: function (aTraitCompositionDescription,aCollection){ var self=this,$self=this; var metaclass; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); metaclass=$self._instanceVariableNames_(aCollection); $recv(metaclass)._setTraitComposition_($recv(aTraitCompositionDescription)._asTraitComposition()); return metaclass; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"uses:instanceVariableNames:",{aTraitCompositionDescription:aTraitCompositionDescription,aCollection:aCollection,metaclass:metaclass},$globals.Metaclass)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aTraitCompositionDescription", "aCollection"], source: "uses: aTraitCompositionDescription instanceVariableNames: aCollection\x0a\x09| metaclass |\x0a\x09metaclass := self instanceVariableNames: aCollection.\x0a\x09metaclass setTraitComposition: aTraitCompositionDescription asTraitComposition.\x0a\x09^ metaclass", referencedClasses: [], //>>excludeEnd("ide"); messageSends: ["instanceVariableNames:", "setTraitComposition:", "asTraitComposition"] }), $globals.Metaclass); $core.addClass("ClassBuilder", $globals.Object, [], "Kernel-Classes"); //>>excludeStart("ide", pragmas.excludeIdeData); $globals.ClassBuilder.comment="I am responsible for compiling new classes or modifying existing classes in the system.\x0a\x0aRather than using me directly to compile a class, use `Class >> subclass:instanceVariableNames:package:`."; //>>excludeEnd("ide"); $core.addMethod( $core.method({ selector: "addSubclassOf:named:instanceVariableNames:package:", protocol: "class definition", fn: function (aClass,className,aCollection,packageName){ var self=this,$self=this; var theClass,thePackage; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); var $1,$2,$3,$receiver; theClass=$recv($recv($globals.Smalltalk)._globals())._at_(className); thePackage=$recv($globals.Package)._named_(packageName); $1=theClass; if(($receiver = $1) == null || $receiver.a$nil){ $1; } else { $recv(theClass)._package_(thePackage); $2=$recv($recv(theClass)._superclass()).__eq_eq(aClass); if(!$core.assert($2)){ return $self._migrateClassNamed_superclass_instanceVariableNames_package_(className,aClass,aCollection,packageName); } } $3=$self._basicAddSubclassOf_named_instanceVariableNames_package_(aClass,className,aCollection,packageName); $recv($3)._recompile(); return $recv($3)._yourself(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"addSubclassOf:named:instanceVariableNames:package:",{aClass:aClass,className:className,aCollection:aCollection,packageName:packageName,theClass:theClass,thePackage:thePackage},$globals.ClassBuilder)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aClass", "className", "aCollection", "packageName"], source: "addSubclassOf: aClass named: className instanceVariableNames: aCollection package: packageName\x0a\x09| theClass thePackage |\x0a\x09\x0a\x09theClass := Smalltalk globals at: className.\x0a\x09thePackage := Package named: packageName.\x0a\x09\x0a\x09theClass ifNotNil: [\x0a\x09\x09theClass package: thePackage.\x0a\x09\x09theClass superclass == aClass\x0a\x09\x09\x09ifFalse: [ ^ 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) recompile; yourself", referencedClasses: ["Smalltalk", "Package"], //>>excludeEnd("ide"); messageSends: ["at:", "globals", "named:", "ifNotNil:", "package:", "ifFalse:", "==", "superclass", "migrateClassNamed:superclass:instanceVariableNames:package:", "recompile", "basicAddSubclassOf:named:instanceVariableNames:package:", "yourself"] }), $globals.ClassBuilder); $core.addMethod( $core.method({ selector: "addTraitNamed:package:", protocol: "class definition", fn: function (traitName,packageName){ var self=this,$self=this; var theTrait,thePackage; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); var $1,$2,$receiver; theTrait=$recv($recv($globals.Smalltalk)._globals())._at_(traitName); thePackage=$recv($globals.Package)._named_(packageName); $1=theTrait; if(($receiver = $1) == null || $receiver.a$nil){ $1; } else { $2=theTrait; $recv($2)._package_(thePackage); $recv($2)._recompile(); return $recv($2)._yourself(); } return $self._basicAddTraitNamed_package_(traitName,packageName); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"addTraitNamed:package:",{traitName:traitName,packageName:packageName,theTrait:theTrait,thePackage:thePackage},$globals.ClassBuilder)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: ["traitName", "packageName"], source: "addTraitNamed: traitName package: packageName\x0a\x09| theTrait thePackage |\x0a\x09\x0a\x09theTrait := Smalltalk globals at: traitName.\x0a\x09thePackage := Package named: packageName.\x0a\x09\x0a\x09theTrait ifNotNil: [ ^ theTrait package: thePackage; recompile; yourself ].\x0a\x09\x09\x0a\x09^ self\x0a\x09\x09basicAddTraitNamed: traitName\x0a\x09\x09package: packageName", referencedClasses: ["Smalltalk", "Package"], //>>excludeEnd("ide"); messageSends: ["at:", "globals", "named:", "ifNotNil:", "package:", "recompile", "yourself", "basicAddTraitNamed:package:"] }), $globals.ClassBuilder); $core.addMethod( $core.method({ selector: "basicAddSubclassOf:named:instanceVariableNames:package:", protocol: "private", fn: function (aClass,aString,aCollection,packageName){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $core.addClass(aString, aClass, aCollection, packageName); ; return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"basicAddSubclassOf:named:instanceVariableNames:package:",{aClass:aClass,aString:aString,aCollection:aCollection,packageName:packageName},$globals.ClassBuilder)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aClass", "aString", "aCollection", "packageName"], source: "basicAddSubclassOf: aClass named: aString instanceVariableNames: aCollection package: packageName\x0a\x09<inlineJS: '\x0a\x09\x09return $core.addClass(aString, aClass, aCollection, packageName);\x0a\x09'>", referencedClasses: [], //>>excludeEnd("ide"); messageSends: [] }), $globals.ClassBuilder); $core.addMethod( $core.method({ selector: "basicAddTraitNamed:package:", protocol: "private", fn: function (aString,anotherString){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $core.addTrait(aString, anotherString); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"basicAddTraitNamed:package:",{aString:aString,anotherString:anotherString},$globals.ClassBuilder)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aString", "anotherString"], source: "basicAddTraitNamed: aString package: anotherString\x0a\x09<inlineJS: 'return $core.addTrait(aString, anotherString)'>", referencedClasses: [], //>>excludeEnd("ide"); messageSends: [] }), $globals.ClassBuilder); $core.addMethod( $core.method({ selector: "basicClass:instanceVariables:", protocol: "private", fn: function (aClass,aCollection){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); var $1; $1=$recv(aClass)._isMetaclass(); if(!$core.assert($1)){ $self._error_($recv($recv(aClass)._name()).__comma(" is not a metaclass")); } $recv(aClass)._basicAt_put_("iVarNames",aCollection); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"basicClass:instanceVariables:",{aClass:aClass,aCollection:aCollection},$globals.ClassBuilder)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aClass", "aCollection"], source: "basicClass: aClass instanceVariables: aCollection\x0a\x0a\x09aClass isMetaclass ifFalse: [ self error: aClass name, ' is not a metaclass' ].\x0a\x09aClass basicAt: 'iVarNames' put: aCollection", referencedClasses: [], //>>excludeEnd("ide"); messageSends: ["ifFalse:", "isMetaclass", "error:", ",", "name", "basicAt:put:"] }), $globals.ClassBuilder); $core.addMethod( $core.method({ selector: "basicRemoveClass:", protocol: "private", fn: function (aClass){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); $core.removeClass(aClass); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"basicRemoveClass:",{aClass:aClass},$globals.ClassBuilder)}); //>>excludeEnd("ctx"); }, //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aClass"], source: "basicRemoveClass: aClass\x0a\x09<inlineJS: '$core.removeClass(aClass)'>", referencedClasses: [], //>>excludeEnd("ide"); messageSends: [] }), $globals.ClassBuilder); $core.addMethod( $core.method({ selector: "basicRenameClass:to:", protocol: "private", fn: function (aClass,aString){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); $globals[aString] = aClass; dele