UNPKG

@ambers/lang

Version:

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

1,381 lines (1,305 loc) 173 kB
define(["amber/boot", "require", "amber/core/Kernel-Collections", "amber/core/Kernel-Helpers", "amber/core/Kernel-Objects"], function($boot,requirejs){"use strict"; var $core=$boot.api,nil=$boot.nilAsValue,$nil=$boot.nilAsReceiver,$recv=$boot.asReceiver,$globals=$boot.globals; var $pkg = $core.addPackage("Kernel-Classes"); $pkg.transport = {"type":"amd","amdNamespace":"amber/core"}; $core.addClass("Behavior", $globals.Object, "Kernel-Classes"); $core.setSlots($globals.Behavior, ["organization", "slots", "fn", "superclass"]); //>>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: "allSelectors", protocol: "accessing", //>>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"); pragmas: [], messageSends: ["inject:into:", "allSuperclasses", "selectors", "addAll:", "yourself"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $recv($self._allSuperclasses())._inject_into_([$self._selectors() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["selectors"]=1 //>>excludeEnd("ctx"); ][0],(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",{})}); //>>excludeEnd("ctx"); }; }), $globals.Behavior); $core.addMethod( $core.method({ selector: "allSubclasses", protocol: "accessing", //>>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"); pragmas: [], messageSends: ["streamContents:", "allSubclassesDo:", "nextPut:"] }, function ($methodClass){ return 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",{})}); //>>excludeEnd("ctx"); }; }), $globals.Behavior); $core.addMethod( $core.method({ selector: "allSubclassesDo:", protocol: "enumerating", //>>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"); pragmas: [["inlineJS:", ["$core.traverseClassTree(self, function(subclass) {\x0a\x09if (subclass !== self) aBlock._value_(subclass);\x0a})"]]], messageSends: [] }, function ($methodClass){ return 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})}); //>>excludeEnd("ctx"); }; }), $globals.Behavior); $core.addMethod( $core.method({ selector: "allSuperclasses", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "allSuperclasses\x0a\x09\x0a\x09self superclass ifNil: [ ^ #() ].\x0a\x09\x0a\x09^ self superclass allSuperclasses copyWithFirst: self superclass", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["ifNil:", "superclass", "copyWithFirst:", "allSuperclasses"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); var $1; $1=[$self._superclass() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["superclass"]=1 //>>excludeEnd("ctx"); ][0]; if($1 == null || $1.a$nil){ return []; } return $recv($recv([$self._superclass() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["superclass"]=2 //>>excludeEnd("ctx"); ][0])._allSuperclasses())._copyWithFirst_($self._superclass()); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"allSuperclasses",{})}); //>>excludeEnd("ctx"); }; }), $globals.Behavior); $core.addMethod( $core.method({ selector: "alternateConstructorViaSelector:", protocol: "instance creation", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aSelector"], source: "alternateConstructorViaSelector: aSelector\x0a\x09^ BlockClosure\x0a\x09\x09javaScriptConstructorFor: self prototype\x0a\x09\x09initializingVia: (self >> aSelector) fn", referencedClasses: ["BlockClosure"], //>>excludeEnd("ide"); pragmas: [], messageSends: ["javaScriptConstructorFor:initializingVia:", "prototype", "fn", ">>"] }, function ($methodClass){ return function (aSelector){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $recv($globals.BlockClosure)._javaScriptConstructorFor_initializingVia_($self._prototype(),$recv($self.__gt_gt(aSelector))._fn()); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"alternateConstructorViaSelector:",{aSelector:aSelector})}); //>>excludeEnd("ctx"); }; }), $globals.Behavior); $core.addMethod( $core.method({ selector: "applySuperConstructorOn:withArguments:", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["anObject", "anArray"], source: "applySuperConstructorOn: anObject withArguments: anArray\x0a\x09<inlineJS: '\x0a\x09\x09Object.getPrototypeOf($self.fn.prototype).constructor\x0a\x09\x09.apply(anObject, anArray)\x0a\x09'>", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [["inlineJS:", ["\x0a\x09\x09Object.getPrototypeOf($self.fn.prototype).constructor\x0a\x09\x09.apply(anObject, anArray)\x0a\x09"]]], messageSends: [] }, function ($methodClass){ return function (anObject,anArray){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); Object.getPrototypeOf($self.fn.prototype).constructor .apply(anObject, anArray) ; return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"applySuperConstructorOn:withArguments:",{anObject:anObject,anArray:anArray})}); //>>excludeEnd("ctx"); }; }), $globals.Behavior); $core.addMethod( $core.method({ selector: "basicNew", protocol: "instance creation", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "basicNew\x0a\x09<inlineJS: 'return new self.fn()'>", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [["inlineJS:", ["return new self.fn()"]]], messageSends: [] }, function ($methodClass){ return 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",{})}); //>>excludeEnd("ctx"); }; }), $globals.Behavior); $core.addMethod( $core.method({ selector: "basicOrganization", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "basicOrganization\x0a\x09^ organization", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: [] }, function ($methodClass){ return function (){ var self=this,$self=this; return $self.organization; }; }), $globals.Behavior); $core.addMethod( $core.method({ selector: "basicOrganization:", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aClassOrganizer"], source: "basicOrganization: aClassOrganizer\x0a\x09organization := aClassOrganizer", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: [] }, function ($methodClass){ return function (aClassOrganizer){ var self=this,$self=this; $self.organization=aClassOrganizer; return self; }; }), $globals.Behavior); $core.addMethod( $core.method({ selector: "beJavaScriptSubclassOf:", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aJavaScriptFunction"], source: "beJavaScriptSubclassOf: aJavaScriptFunction\x0a\x09\x22Reparent the JS constructor's prototype to aJavaScriptFunction's one,\x0a\x09plus bookkeeping. That way I stay part of (simulated) Smalltalk hierarchy,\x0a\x09but my instances will physically be instanceof aJavaScriptFunction.\x22\x0a\x0a\x09self makeJavaScriptConstructorSubclassOf: aJavaScriptFunction.\x0a\x09Smalltalk core detachClass: self", referencedClasses: ["Smalltalk"], //>>excludeEnd("ide"); pragmas: [], messageSends: ["makeJavaScriptConstructorSubclassOf:", "detachClass:", "core"] }, function ($methodClass){ return function (aJavaScriptFunction){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); $self._makeJavaScriptConstructorSubclassOf_(aJavaScriptFunction); $recv($recv($globals.Smalltalk)._core())._detachClass_(self); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"beJavaScriptSubclassOf:",{aJavaScriptFunction:aJavaScriptFunction})}); //>>excludeEnd("ctx"); }; }), $globals.Behavior); $core.addMethod( $core.method({ selector: "canUnderstand:", protocol: "testing", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aSelector"], source: "canUnderstand: aSelector\x0a\x09^ (self lookupSelector: aSelector) notNil", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["notNil", "lookupSelector:"] }, function ($methodClass){ return function (aSelector){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $recv($self._lookupSelector_(aSelector))._notNil(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"canUnderstand:",{aSelector:aSelector})}); //>>excludeEnd("ctx"); }; }), $globals.Behavior); $core.addMethod( $core.method({ selector: "includesBehavior:", protocol: "testing", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aClass"], source: "includesBehavior: aClass\x0a\x09^ self == aClass or: [\x0a\x09\x09\x09self inheritsFrom: aClass ]", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["or:", "==", "inheritsFrom:"] }, function ($methodClass){ return function (aClass){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); if($core.assert($self.__eq_eq(aClass))){ return true; } else { return $self._inheritsFrom_(aClass); } //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"includesBehavior:",{aClass:aClass})}); //>>excludeEnd("ctx"); }; }), $globals.Behavior); $core.addMethod( $core.method({ selector: "inheritsFrom:", protocol: "testing", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aClass"], source: "inheritsFrom: aClass\x0a\x09^ self superclass\x0a\x09\x09ifNil: [ false ]\x0a\x09\x09ifNotNil: [ :superClass | superClass includesBehavior: aClass ]", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["ifNil:ifNotNil:", "superclass", "includesBehavior:"] }, function ($methodClass){ return function (aClass){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); var $1; $1=$self._superclass(); if($1 == null || $1.a$nil){ return false; } else { var superClass; superClass=$1; return $recv(superClass)._includesBehavior_(aClass); } //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"inheritsFrom:",{aClass:aClass})}); //>>excludeEnd("ctx"); }; }), $globals.Behavior); $core.addMethod( $core.method({ selector: "isBehavior", protocol: "testing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "isBehavior\x0a\x09^ true", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: [] }, function ($methodClass){ return function (){ var self=this,$self=this; return true; }; }), $globals.Behavior); $core.addMethod( $core.method({ selector: "javaScriptConstructor", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "javaScriptConstructor\x0a\x09\x22Answer the JS constructor used to instantiate. See kernel-language.js\x22\x0a\x09\x0a\x09^ fn", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: [] }, function ($methodClass){ return function (){ var self=this,$self=this; return $self.fn; }; }), $globals.Behavior); $core.addMethod( $core.method({ selector: "javaScriptConstructor:", protocol: "accessing", //>>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\x09Smalltalk core setClassConstructor: self to: aJavaScriptFunction", referencedClasses: ["Smalltalk"], //>>excludeEnd("ide"); pragmas: [], messageSends: ["setClassConstructor:to:", "core"] }, function ($methodClass){ return function (aJavaScriptFunction){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); $recv($recv($globals.Smalltalk)._core())._setClassConstructor_to_(self,aJavaScriptFunction); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"javaScriptConstructor:",{aJavaScriptFunction:aJavaScriptFunction})}); //>>excludeEnd("ctx"); }; }), $globals.Behavior); $core.addMethod( $core.method({ selector: "javascriptConstructor", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "javascriptConstructor\x0a\x09self deprecatedAPI: 'Use #javaScriptConstructor instead.'.\x0a\x09^ self javaScriptConstructor", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["deprecatedAPI:", "javaScriptConstructor"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); $self._deprecatedAPI_("Use #javaScriptConstructor instead."); return $self._javaScriptConstructor(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"javascriptConstructor",{})}); //>>excludeEnd("ctx"); }; }), $globals.Behavior); $core.addMethod( $core.method({ selector: "javascriptConstructor:", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aJavaScriptFunction"], source: "javascriptConstructor: aJavaScriptFunction\x0a\x09self deprecatedAPI: 'Use #javaScriptConstructor: instead.'.\x0a\x09^ self javaScriptConstructor: aJavaScriptFunction", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["deprecatedAPI:", "javaScriptConstructor:"] }, function ($methodClass){ return function (aJavaScriptFunction){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); $self._deprecatedAPI_("Use #javaScriptConstructor: instead."); return $self._javaScriptConstructor_(aJavaScriptFunction); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"javascriptConstructor:",{aJavaScriptFunction:aJavaScriptFunction})}); //>>excludeEnd("ctx"); }; }), $globals.Behavior); $core.addMethod( $core.method({ selector: "lookupSelector:", protocol: "accessing", //>>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<inlineJS: 'return $self.methods[selector]'>", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [["inlineJS:", ["return $self.methods[selector]"]]], messageSends: [] }, function ($methodClass){ return function (selector){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $self.methods[selector]; return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"lookupSelector:",{selector:selector})}); //>>excludeEnd("ctx"); }; }), $globals.Behavior); $core.addMethod( $core.method({ selector: "makeJavaScriptConstructorSubclassOf:", protocol: "private", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["javaScriptClass"], source: "makeJavaScriptConstructorSubclassOf: javaScriptClass\x0a\x09<inlineJS: '\x0a\x09\x09Object.setPrototypeOf($self.fn.prototype, javaScriptClass.prototype);\x0a\x09'>", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [["inlineJS:", ["\x0a\x09\x09Object.setPrototypeOf($self.fn.prototype, javaScriptClass.prototype);\x0a\x09"]]], messageSends: [] }, function ($methodClass){ return function (javaScriptClass){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); Object.setPrototypeOf($self.fn.prototype, javaScriptClass.prototype); ; return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"makeJavaScriptConstructorSubclassOf:",{javaScriptClass:javaScriptClass})}); //>>excludeEnd("ctx"); }; }), $globals.Behavior); $core.addMethod( $core.method({ selector: "new", protocol: "instance creation", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "new\x0a\x09^ self basicNew initialize", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["initialize", "basicNew"] }, function ($methodClass){ return 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",{})}); //>>excludeEnd("ctx"); }; }), $globals.Behavior); $core.addMethod( $core.method({ selector: "prototype", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "prototype\x0a\x09^ self javaScriptConstructor prototype", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["prototype", "javaScriptConstructor"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $recv($self._javaScriptConstructor())._prototype(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"prototype",{})}); //>>excludeEnd("ctx"); }; }), $globals.Behavior); $core.addMethod( $core.method({ selector: "slots", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "slots\x0a\x09^ slots", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: [] }, function ($methodClass){ return function (){ var self=this,$self=this; return $self.slots; }; }), $globals.Behavior); $core.addMethod( $core.method({ selector: "subclasses", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "subclasses\x0a\x09self subclassResponsibility", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["subclassResponsibility"] }, function ($methodClass){ return 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",{})}); //>>excludeEnd("ctx"); }; }), $globals.Behavior); $core.addMethod( $core.method({ selector: "superPrototype", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "superPrototype\x0a\x09<inlineJS: 'return Object.getPrototypeOf($self.fn.prototype)'>", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [["inlineJS:", ["return Object.getPrototypeOf($self.fn.prototype)"]]], messageSends: [] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return Object.getPrototypeOf($self.fn.prototype); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"superPrototype",{})}); //>>excludeEnd("ctx"); }; }), $globals.Behavior); $core.addMethod( $core.method({ selector: "superclass", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "superclass\x0a\x09^ superclass", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: [] }, function ($methodClass){ return function (){ var self=this,$self=this; return $self.superclass; }; }), $globals.Behavior); $core.addMethod( $core.method({ selector: "theMetaClass", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "theMetaClass\x0a\x09self subclassResponsibility", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["subclassResponsibility"] }, function ($methodClass){ return 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",{})}); //>>excludeEnd("ctx"); }; }), $globals.Behavior); $core.addMethod( $core.method({ selector: "theNonMetaClass", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "theNonMetaClass\x0a\x09self subclassResponsibility", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["subclassResponsibility"] }, function ($methodClass){ return 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",{})}); //>>excludeEnd("ctx"); }; }), $globals.Behavior); $core.addMethod( $core.method({ selector: "withAllSubclasses", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "withAllSubclasses\x0a\x09^ self allSubclasses copyWithFirst: self", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["copyWithFirst:", "allSubclasses"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $recv($self._allSubclasses())._copyWithFirst_(self); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"withAllSubclasses",{})}); //>>excludeEnd("ctx"); }; }), $globals.Behavior); $core.addClass("Class", $globals.Behavior, "Kernel-Classes"); $core.setSlots($globals.Class, ["package", "subclasses"]); //>>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", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aPackage"], source: "basicPackage: aPackage\x0a\x09package := aPackage", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: [] }, function ($methodClass){ return function (aPackage){ var self=this,$self=this; $self.package=aPackage; return self; }; }), $globals.Class); $core.addMethod( $core.method({ selector: "classTag", protocol: "accessing", //>>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"); pragmas: [], messageSends: [] }, function ($methodClass){ return function (){ var self=this,$self=this; return "class"; }; }), $globals.Class); $core.addMethod( $core.method({ selector: "definition", protocol: "accessing", //>>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: {'slots: {'. ('. ' join: (self instanceVariableNames collect: #symbolPrintString)). '}'}; lf;\x0a\x09\x09tab; write: 'package: '; print: self category ]", referencedClasses: ["String"], //>>excludeEnd("ide"); pragmas: [], messageSends: ["streamContents:", "print:", "superclass", "write:", "printSymbol:", "name", "lf", "ifNotEmpty:", "traitCompositionDefinition", "tab", "join:", "collect:", "instanceVariableNames", "category"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); 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"); ][0]; [$recv(stream)._write_(" subclass: ") //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx2.sendIdx["write:"]=1 //>>excludeEnd("ctx"); ][0]; $recv(stream)._printSymbol_($self._name()); [$recv(stream)._lf() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx2.sendIdx["lf"]=1 //>>excludeEnd("ctx"); ][0]; [$recv(stream)._write_($recv($self._traitCompositionDefinition())._ifNotEmpty_((function(tcd){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx3) { //>>excludeEnd("ctx"); return [[$recv($globals.String)._tab() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx3.sendIdx["tab"]=1 //>>excludeEnd("ctx"); ][0],"uses: ",tcd,[$recv($globals.String)._lf() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx3.sendIdx["lf"]=2 //>>excludeEnd("ctx"); ][0]]; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx3) {$ctx3.fillBlock({tcd:tcd},$ctx2,2)}); //>>excludeEnd("ctx"); }))) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx2.sendIdx["write:"]=2 //>>excludeEnd("ctx"); ][0]; [$recv(stream)._tab() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx2.sendIdx["tab"]=2 //>>excludeEnd("ctx"); ][0]; [$recv(stream)._write_(["slots: {",". "._join_($recv($self._instanceVariableNames())._collect_("symbolPrintString")),"}"]) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx2.sendIdx["write:"]=3 //>>excludeEnd("ctx"); ][0]; $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",{})}); //>>excludeEnd("ctx"); }; }), $globals.Class); $core.addMethod( $core.method({ selector: "includingPossibleMetaDo:", protocol: "enumerating", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aBlock"], source: "includingPossibleMetaDo: aBlock\x0a\x0a\x09aBlock value: self.\x0a\x09aBlock value: self theMetaClass", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["value:", "theMetaClass"] }, function ($methodClass){ return function (aBlock){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); [$recv(aBlock)._value_(self) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["value:"]=1 //>>excludeEnd("ctx"); ][0]; $recv(aBlock)._value_($self._theMetaClass()); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"includingPossibleMetaDo:",{aBlock:aBlock})}); //>>excludeEnd("ctx"); }; }), $globals.Class); $core.addMethod( $core.method({ selector: "isClass", protocol: "testing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "isClass\x0a\x09^ true", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: [] }, function ($methodClass){ return function (){ var self=this,$self=this; return true; }; }), $globals.Class); $core.addMethod( $core.method({ selector: "package", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "package\x0a\x09^ package", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: [] }, function ($methodClass){ return function (){ var self=this,$self=this; return $self.package; }; }), $globals.Class); $core.addMethod( $core.method({ selector: "provided", protocol: "converting", //>>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"); pragmas: [], messageSends: ["provided", "javaScriptConstructor"] }, function ($methodClass){ return 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",{})}); //>>excludeEnd("ctx"); }; }), $globals.Class); $core.addMethod( $core.method({ selector: "rename:", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aString"], source: "rename: aString\x0a\x09ClassBuilder new renameClass: self to: aString", referencedClasses: ["ClassBuilder"], //>>excludeEnd("ide"); pragmas: [], messageSends: ["renameClass:to:", "new"] }, function ($methodClass){ return 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})}); //>>excludeEnd("ctx"); }; }), $globals.Class); $core.addMethod( $core.method({ selector: "subclasses", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "subclasses\x0a\x09^ subclasses copy", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["copy"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $recv($self.subclasses)._copy(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"subclasses",{})}); //>>excludeEnd("ctx"); }; }), $globals.Class); $core.addMethod( $core.method({ selector: "theMetaClass", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "theMetaClass\x0a\x09^ self class", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["class"] }, function ($methodClass){ return 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",{})}); //>>excludeEnd("ctx"); }; }), $globals.Class); $core.addClass("Metaclass", $globals.Behavior, "Kernel-Classes"); $core.setSlots($globals.Metaclass, ["instanceClass"]); //>>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", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "asJavaScriptSource\x0a\x09^ '$globals.', self instanceClass name, '.a$cls'", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: [",", "name", "instanceClass"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return [$recv("$globals.".__comma($recv($self._instanceClass())._name())).__comma(".a$cls") //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx[","]=1 //>>excludeEnd("ctx"); ][0]; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"asJavaScriptSource",{})}); //>>excludeEnd("ctx"); }; }), $globals.Metaclass); $core.addMethod( $core.method({ selector: "definition", protocol: "accessing", //>>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: {'slots: {'. ('. ' join: (self instanceVariableNames collect: #symbolPrintString)). '}'} ]", referencedClasses: ["String"], //>>excludeEnd("ide"); pragmas: [], messageSends: ["streamContents:", "print:", "write:", "ifEmpty:ifNotEmpty:", "traitCompositionDefinition", "lf", "tab", "join:", "collect:", "instanceVariableNames"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $recv($globals.String)._streamContents_((function(stream){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); $recv(stream)._print_(self); [$recv(stream)._write_($recv($self._traitCompositionDefinition())._ifEmpty_ifNotEmpty_((function(){ return " "; }),(function(tcd){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx3) { //>>excludeEnd("ctx"); return [[$recv($globals.String)._lf() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx3.sendIdx["lf"]=1 //>>excludeEnd("ctx"); ][0],[$recv($globals.String)._tab() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx3.sendIdx["tab"]=1 //>>excludeEnd("ctx"); ][0],"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"); ][0]; return $recv(stream)._write_(["slots: {",". "._join_($recv($self._instanceVariableNames())._collect_("symbolPrintString")),"}"]); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({stream:stream},$ctx1,1)}); //>>excludeEnd("ctx"); })); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"definition",{})}); //>>excludeEnd("ctx"); }; }), $globals.Metaclass); $core.addMethod( $core.method({ selector: "instanceClass", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "instanceClass\x0a\x09^ instanceClass", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: [] }, function ($methodClass){ return function (){ var self=this,$self=this; return $self.instanceClass; }; }), $globals.Metaclass); $core.addMethod( $core.method({ selector: "instanceVariableNames:", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aString"], source: "instanceVariableNames: aString\x0a\x09\x22Kept for file-in compatibility.\x22\x0a\x09^ self slots: aString instanceVariablesStringAsSlotList", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["slots:", "instanceVariablesStringAsSlotList"] }, function ($methodClass){ return function (aString){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $self._slots_($recv(aString)._instanceVariablesStringAsSlotList()); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"instanceVariableNames:",{aString:aString})}); //>>excludeEnd("ctx"); }; }), $globals.Metaclass); $core.addMethod( $core.method({ selector: "isMetaclass", protocol: "testing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "isMetaclass\x0a\x09^ true", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: [] }, function ($methodClass){ return function (){ var self=this,$self=this; return true; }; }), $globals.Metaclass); $core.addMethod( $core.method({ selector: "name", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "name\x0a\x09^ self instanceClass name, ' class'", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: [",", "name", "instanceClass"] }, function ($methodClass){ return 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",{})}); //>>excludeEnd("ctx"); }; }), $globals.Metaclass); $core.addMethod( $core.method({ selector: "package", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "package\x0a\x09^ self instanceClass package", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["package", "instanceClass"] }, function ($methodClass){ return 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",{})}); //>>excludeEnd("ctx"); }; }), $globals.Metaclass); $core.addMethod( $core.method({ selector: "slots:", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aCollection"], source: "slots: aCollection\x0a\x09ClassBuilder new\x0a\x09\x09class: self slots: aCollection.\x0a\x09^ self", referencedClasses: ["ClassBuilder"], //>>excludeEnd("ide"); pragmas: [], messageSends: ["class:slots:", "new"] }, function ($methodClass){ return function (aCollection){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); $recv($recv($globals.ClassBuilder)._new())._class_slots_(self,aCollection); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"slots:",{aCollection:aCollection})}); //>>excludeEnd("ctx"); }; }), $globals.Metaclass); $core.addMethod( $core.method({ selector: "subclasses", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "subclasses\x0a\x09^ Smalltalk core metaSubclasses: self", referencedClasses: ["Smalltalk"], //>>excludeEnd("ide"); pragmas: [], messageSends: ["metaSubclasses:", "core"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $recv($recv($globals.Smalltalk)._core())._metaSubclasses_(self); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"subclasses",{})}); //>>excludeEnd("ctx"); }; }), $globals.Metaclass); $core.addMethod( $core.method({ selector: "theMetaClass", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "theMetaClass\x0a\x09^ self", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: [] }, function ($methodClass){ return function (){ var self=this,$self=this; return self; }; }), $globals.Metaclass); $core.addMethod( $core.method({ selector: "theNonMetaClass", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "theNonMetaClass\x0a\x09^ self instanceClass", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["instanceClass"] }, function ($methodClass){ return 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",{})}); //>>excludeEnd("ctx"); }; }), $globals.Metaclass); $core.addMethod( $core.method({ selector: "uses:instanceVariableNames:", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aTraitCompositionDescription", "aString"], source: "uses: aTraitCompositionDescription instanceVariableNames: aString\x0a\x09\x22Kept for file-in compatibility.\x22\x0a\x09^ self uses: aTraitCompositionDescription slots: aString instanceVariablesStringAsSlotList", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["uses:slots:", "instanceVariablesStringAsSlotList"] }, function ($methodClass){ return function (aTraitCompositionDescription,aString){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $self._uses_slots_(aTraitCompositionDescription,$recv(aString)._instanceVariablesStringAsSlotList()); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"uses:instanceVariableNames:",{aTraitCompositionDescription:aTraitCompositionDescription,aString:aString})}); //>>excludeEnd("ctx"); }; }), $globals.Metaclass); $core.addMethod( $core.method({ selector: "uses:slots:", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aTraitCompositionDescription", "aCollection"], source: "uses: aTraitCompositionDescription slots: aCollection\x0a\x09self\x0a\x09\x09slots: aCollection;\x0a\x09\x09setTraitComposition: aTraitCompositionDescription asTraitComposition.\x0a\x09^ self", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["slots:", "setTraitComposition:", "asTraitComposition"] }, function ($methodClass){ return function (aTraitCompositionDescription,aCollection){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); $self._slots_(aCollection); $self._setTraitComposition_($recv(aTraitCompositionDescription)._asTraitComposition()); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"uses:slots:",{aTraitCompositionDescription:aTraitCompositionDescription,aCollection:aCollection})}); //>>excludeEnd("ctx"); }; }), $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", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aClass", "className", "aCollection", "packageName"], source: "addSubclassOf: aClass named: className instanceVariableNames: aCollection package: packageName\x0a\x09self deprecatedAPI: 'Use #addSubclass:named:slots:package: instead.'.\x0a\x09^ self\x0a\x09\x09addSubclassOf: aClass\x0a\x09\x09named: className\x0a\x09\x09slots: aCollection\x0a\x09\x09package: packageName", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["deprecatedAPI:", "addSubclassOf:named:slots:package:"] }, function ($methodClass){ return function (aClass,className,aCollection,packageName){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); $self._deprecatedAPI_("Use #addSubclass:named:slots:package: instead."); return $self._addSubclassOf_named_slots_package_(aClass,className,aCollection,packageName); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"addSubclassOf:named:instanceVariableNames:package:",{aClass:aClass,className:className,aCollection:aCollection,packageName:packageName})}); //>>excludeEnd("ctx"); }; }), $globals.ClassBuilder); $core.addMethod( $core.method({ selector: "addSubclassOf:named:slots:package:", protocol: "class definition", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aClass", "className", "aCollection", "packageName"], source: "addSubclassOf: aClass named: className slots: 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\x09slots: aCollection\x0a\x09\x09\x09\x09package: packageName ] ].\x0a\x09\x09\x0a\x09^ (self\x0a\x09\x09basicAddSubclassOf: aClass\x0a\x09\x09named: className\x0a\x09\x09slots: aCollection\x0a\x09\x09package: packageName) recompile; yourself", referencedClasses: ["Smalltalk", "Package"], //>>excludeEnd("ide"); pragmas: [], messageSends: ["at:", "globals", "named:", "ifNotNil:", "package:", "ifFalse:", "==", "superclass", "migrateClassNamed:superclass:slots:package:", "recompile", "basicAddSubclassOf:named:slots:package:", "yourself"] }, function ($methodClass){ return function (aClass,className,aCollection,packageName){ var self=this,$self=this; var theClas