UNPKG

@ambers/lang

Version:

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

1,445 lines (1,368 loc) 135 kB
define(["amber/boot", "require", "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-Methods"); $pkg.transport = {"type":"amd","amdNamespace":"amber/core"}; $core.addClass("BlockClosure", $globals.Object, "Kernel-Methods"); $core.setSlots($globals.BlockClosure, ["prototype", "length"]); //>>excludeStart("ide", pragmas.excludeIdeData); $globals.BlockClosure.comment="I represent a lexical closure.\x0aI am is directly mapped to JavaScript Function.\x0a\x0a## API\x0a\x0a1. Evaluation\x0a\x0a My instances get evaluated with the `#value*` methods in the 'evaluating' protocol.\x0a\x0a Example: ` [ :x | x + 1 ] value: 3 \x22Answers 4\x22 `\x0a\x0a2. Control structures\x0a\x0a Blocks are used (together with `Boolean`) for control structures (methods in the `controlling` protocol).\x0a\x0a Example: `aBlock whileTrue: [ ... ]`\x0a\x0a3. Error handling\x0a\x0a I provide the `#on:do:` method for handling exceptions.\x0a\x0a Example: ` aBlock on: MessageNotUnderstood do: [ :ex | ... ] `"; //>>excludeEnd("ide"); $core.addMethod( $core.method({ selector: "applyTo:arguments:", protocol: "evaluating", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["anObject", "aCollection"], source: "applyTo: anObject arguments: aCollection\x0a\x09<inlineJS: 'return self.apply(anObject, aCollection)'>", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [["inlineJS:", ["return self.apply(anObject, aCollection)"]]], messageSends: [] }, function ($methodClass){ return function (anObject,aCollection){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return self.apply(anObject, aCollection); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"applyTo:arguments:",{anObject:anObject,aCollection:aCollection})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosure); $core.addMethod( $core.method({ selector: "asCompiledMethod:", protocol: "converting", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aString"], source: "asCompiledMethod: aString\x0a\x09<inlineJS: 'return $core.method({selector:aString, fn:self});'>", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [["inlineJS:", ["return $core.method({selector:aString, fn:self});"]]], messageSends: [] }, function ($methodClass){ return function (aString){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $core.method({selector:aString, fn:self});; return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"asCompiledMethod:",{aString:aString})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosure); $core.addMethod( $core.method({ selector: "asJavaScriptObject", protocol: "converting", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "asJavaScriptObject\x0a\x09^ self", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: [] }, function ($methodClass){ return function (){ var self=this,$self=this; return self; }; }), $globals.BlockClosure); $core.addMethod( $core.method({ selector: "asJavaScriptSource", protocol: "converting", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "asJavaScriptSource\x0a\x09<inlineJS: 'return $self.toString();'>", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [["inlineJS:", ["return $self.toString();"]]], messageSends: [] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $self.toString();; return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"asJavaScriptSource",{})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosure); $core.addMethod( $core.method({ selector: "compiledSource", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "compiledSource\x0a\x09<inlineJS: 'return self.toString()'>", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [["inlineJS:", ["return self.toString()"]]], messageSends: [] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return self.toString(); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"compiledSource",{})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosure); $core.addMethod( $core.method({ selector: "currySelf", protocol: "converting", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "currySelf\x0a\x09\x22Transforms [ :selfarg :x :y | stcode ] block\x0a\x09which represents JS function (selfarg, x, y, ...) {jscode}\x0a\x09into function (x, y, ...) {jscode} that takes selfarg from 'this'.\x0a\x09IOW, it is usable as JS method and first arg takes the receiver.\x22\x0a\x09\x0a\x09<inlineJS: '\x0a\x09\x09return function () {\x0a\x09\x09\x09var args = [ this ];\x0a\x09\x09\x09args.push.apply(args, arguments);\x0a\x09\x09\x09return self.apply(null, args);\x0a\x09\x09}\x0a\x09'>", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [["inlineJS:", ["\x0a\x09\x09return function () {\x0a\x09\x09\x09var args = [ this ];\x0a\x09\x09\x09args.push.apply(args, arguments);\x0a\x09\x09\x09return self.apply(null, args);\x0a\x09\x09}\x0a\x09"]]], messageSends: [] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return function () { var args = [ this ]; args.push.apply(args, arguments); return self.apply(null, args); } ; return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"currySelf",{})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosure); $core.addMethod( $core.method({ selector: "ensure:", protocol: "evaluating", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aBlock"], source: "ensure: aBlock\x0a\x09<inlineJS: 'try{return $self._value()}finally{aBlock._value()}'>", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [["inlineJS:", ["try{return $self._value()}finally{aBlock._value()}"]]], messageSends: [] }, function ($methodClass){ return function (aBlock){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); try{return $self._value()}finally{aBlock._value()}; return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"ensure:",{aBlock:aBlock})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosure); $core.addMethod( $core.method({ selector: "fork", protocol: "timeout/interval", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "fork\x0a\x09ForkPool default fork: self", referencedClasses: ["ForkPool"], //>>excludeEnd("ide"); pragmas: [], messageSends: ["fork:", "default"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); $recv($recv($globals.ForkPool)._default())._fork_(self); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"fork",{})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosure); $core.addMethod( $core.method({ selector: "new", protocol: "evaluating", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "new\x0a\x09\x22Use the receiver as a JS constructor.\x0a\x09*Do not* use this method to instanciate Smalltalk objects!\x22\x0a\x09<inlineJS: 'return new self()'>", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [["inlineJS:", ["return new self()"]]], messageSends: [] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return new self(); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"new",{})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosure); $core.addMethod( $core.method({ selector: "newValue:", protocol: "evaluating", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["anObject"], source: "newValue: anObject\x0a\x09^ self newWithValues: { anObject }", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["newWithValues:"] }, function ($methodClass){ return function (anObject){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $self._newWithValues_([anObject]); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"newValue:",{anObject:anObject})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosure); $core.addMethod( $core.method({ selector: "newValue:value:", protocol: "evaluating", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["anObject", "anObject2"], source: "newValue: anObject value: anObject2\x0a\x09^ self newWithValues: { anObject. anObject2 }.", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["newWithValues:"] }, function ($methodClass){ return function (anObject,anObject2){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $self._newWithValues_([anObject,anObject2]); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"newValue:value:",{anObject:anObject,anObject2:anObject2})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosure); $core.addMethod( $core.method({ selector: "newValue:value:value:", protocol: "evaluating", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["anObject", "anObject2", "anObject3"], source: "newValue: anObject value: anObject2 value: anObject3\x0a\x09^ self newWithValues: { anObject. anObject2. anObject3 }.", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["newWithValues:"] }, function ($methodClass){ return function (anObject,anObject2,anObject3){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $self._newWithValues_([anObject,anObject2,anObject3]); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"newValue:value:value:",{anObject:anObject,anObject2:anObject2,anObject3:anObject3})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosure); $core.addMethod( $core.method({ selector: "newWithValues:", protocol: "evaluating", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aCollection"], source: "newWithValues: aCollection\x0a\x09\x22Simulates JS new operator by combination of Object.create and .apply\x22\x0a\x09<inlineJS: '\x0a\x09\x09var object = Object.create(self.prototype);\x0a\x09\x09var result = self.apply(object, aCollection);\x0a\x09\x09return typeof result === \x22object\x22 ? result : object;\x0a\x09'>", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [["inlineJS:", ["\x0a\x09\x09var object = Object.create(self.prototype);\x0a\x09\x09var result = self.apply(object, aCollection);\x0a\x09\x09return typeof result === \x22object\x22 ? result : object;\x0a\x09"]]], messageSends: [] }, function ($methodClass){ return function (aCollection){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); var object = Object.create(self.prototype); var result = self.apply(object, aCollection); return typeof result === "object" ? result : object; ; return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"newWithValues:",{aCollection:aCollection})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosure); $core.addMethod( $core.method({ selector: "numArgs", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "numArgs\x0a\x09^ length", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: [] }, function ($methodClass){ return function (){ var self=this,$self=this; return $self.length; }; }), $globals.BlockClosure); $core.addMethod( $core.method({ selector: "on:do:", protocol: "error handling", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["anErrorClass", "aBlock"], source: "on: anErrorClass do: aBlock\x0a\x09^ Smalltalk try: self ifTrue: [ :err | err isKindOf: anErrorClass ] catch: aBlock", referencedClasses: ["Smalltalk"], //>>excludeEnd("ide"); pragmas: [], messageSends: ["try:ifTrue:catch:", "isKindOf:"] }, function ($methodClass){ return function (anErrorClass,aBlock){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $recv($globals.Smalltalk)._try_ifTrue_catch_(self,(function(err){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); return $recv(err)._isKindOf_(anErrorClass); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({err:err},$ctx1,1)}); //>>excludeEnd("ctx"); }),aBlock); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"on:do:",{anErrorClass:anErrorClass,aBlock:aBlock})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosure); $core.addMethod( $core.method({ selector: "prototype", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "prototype\x0a\x09^ prototype", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: [] }, function ($methodClass){ return function (){ var self=this,$self=this; return $self.prototype; }; }), $globals.BlockClosure); $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 require provided resolve: ...\x0a\x09or\x0a\x09 XMLHttpRequest provided DONE\x22\x0a\x09\x0a\x09^ JSObjectProxy on: self", referencedClasses: ["JSObjectProxy"], //>>excludeEnd("ide"); pragmas: [], messageSends: ["on:"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $recv($globals.JSObjectProxy)._on_(self); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"provided",{})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosure); $core.addMethod( $core.method({ selector: "receiver", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "receiver\x0a\x09^ nil", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: [] }, function ($methodClass){ return function (){ var self=this,$self=this; return nil; }; }), $globals.BlockClosure); $core.addMethod( $core.method({ selector: "timeToRun", protocol: "evaluating", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "timeToRun\x0a\x09\x22Answer the number of milliseconds taken to execute this block.\x22\x0a\x0a\x09^ Date millisecondsToRun: self", referencedClasses: ["Date"], //>>excludeEnd("ide"); pragmas: [], messageSends: ["millisecondsToRun:"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $recv($globals.Date)._millisecondsToRun_(self); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"timeToRun",{})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosure); $core.addMethod( $core.method({ selector: "tryCatch:", protocol: "error handling", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aBlock"], source: "tryCatch: aBlock\x0a\x09\x22Too low-level. Try more high-level alternatives like:\x0a\x09\x09[ ... ] on: Error do: [ ... ]\x0a\x09\x09Smalltalk try: [ ... ] ifTrue: [ ... ] catch: [ ... ]\x0a\x09\x09[ ... ] tryIfTrue: [ ... ] catch: [ ... ]\x22\x0a\x09<inlineJS: '\x0a\x09\x09try {\x0a\x09\x09\x09return $self._value();\x0a\x09\x09} catch(error) {\x0a\x09\x09\x09// pass non-local returns undetected\x0a\x09\x09\x09if (Array.isArray(error) && error.length === 1) throw error;\x0a\x09\x09\x09return aBlock._value_(error);\x0a\x09\x09}\x0a\x09'>", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [["inlineJS:", ["\x0a\x09\x09try {\x0a\x09\x09\x09return $self._value();\x0a\x09\x09} catch(error) {\x0a\x09\x09\x09// pass non-local returns undetected\x0a\x09\x09\x09if (Array.isArray(error) && error.length === 1) throw error;\x0a\x09\x09\x09return aBlock._value_(error);\x0a\x09\x09}\x0a\x09"]]], messageSends: [] }, function ($methodClass){ return function (aBlock){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); try { return $self._value(); } catch(error) { // pass non-local returns undetected if (Array.isArray(error) && error.length === 1) throw error; return aBlock._value_(error); } ; return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"tryCatch:",{aBlock:aBlock})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosure); $core.addMethod( $core.method({ selector: "tryIfTrue:catch:", protocol: "error handling", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["anotherBlock", "aBlock"], source: "tryIfTrue: anotherBlock catch: aBlock\x0a\x09<inlineJS: '\x0a\x09\x09try {\x0a\x09\x09\x09return $self._value();\x0a\x09\x09} catch(error) {\x0a\x09\x09\x09// pass non-local returns undetected\x0a\x09\x09\x09if (Array.isArray(error) && error.length === 1) throw error;\x0a\x09\x09\x09if (!anotherBlock._value_(error)) throw error;\x0a\x09\x09\x09return aBlock._value_(error);\x0a\x09\x09}\x0a\x09'>", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [["inlineJS:", ["\x0a\x09\x09try {\x0a\x09\x09\x09return $self._value();\x0a\x09\x09} catch(error) {\x0a\x09\x09\x09// pass non-local returns undetected\x0a\x09\x09\x09if (Array.isArray(error) && error.length === 1) throw error;\x0a\x09\x09\x09if (!anotherBlock._value_(error)) throw error;\x0a\x09\x09\x09return aBlock._value_(error);\x0a\x09\x09}\x0a\x09"]]], messageSends: [] }, function ($methodClass){ return function (anotherBlock,aBlock){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); try { return $self._value(); } catch(error) { // pass non-local returns undetected if (Array.isArray(error) && error.length === 1) throw error; if (!anotherBlock._value_(error)) throw error; return aBlock._value_(error); } ; return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"tryIfTrue:catch:",{anotherBlock:anotherBlock,aBlock:aBlock})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosure); $core.addMethod( $core.method({ selector: "value", protocol: "evaluating", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "value\x0a\x09<inlineJS: 'return self();'>", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [["inlineJS:", ["return self();"]]], messageSends: [] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return self();; return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"value",{})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosure); $core.addMethod( $core.method({ selector: "value:", protocol: "evaluating", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["anArg"], source: "value: anArg\x0a\x09<inlineJS: 'return self(anArg);'>", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [["inlineJS:", ["return self(anArg);"]]], messageSends: [] }, function ($methodClass){ return function (anArg){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return self(anArg);; return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"value:",{anArg:anArg})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosure); $core.addMethod( $core.method({ selector: "value:value:", protocol: "evaluating", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["firstArg", "secondArg"], source: "value: firstArg value: secondArg\x0a\x09<inlineJS: 'return self(firstArg, secondArg);'>", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [["inlineJS:", ["return self(firstArg, secondArg);"]]], messageSends: [] }, function ($methodClass){ return function (firstArg,secondArg){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return self(firstArg, secondArg);; return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"value:value:",{firstArg:firstArg,secondArg:secondArg})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosure); $core.addMethod( $core.method({ selector: "value:value:value:", protocol: "evaluating", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["firstArg", "secondArg", "thirdArg"], source: "value: firstArg value: secondArg value: thirdArg\x0a\x09<inlineJS: 'return self(firstArg, secondArg, thirdArg);'>", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [["inlineJS:", ["return self(firstArg, secondArg, thirdArg);"]]], messageSends: [] }, function ($methodClass){ return function (firstArg,secondArg,thirdArg){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return self(firstArg, secondArg, thirdArg);; return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"value:value:value:",{firstArg:firstArg,secondArg:secondArg,thirdArg:thirdArg})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosure); $core.addMethod( $core.method({ selector: "valueWithInterval:", protocol: "timeout/interval", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aNumber"], source: "valueWithInterval: aNumber\x0a\x09<inlineJS: '\x0a\x09\x09var interval = setInterval(self, aNumber);\x0a\x09\x09return $globals.Timeout._on_(interval);\x0a\x09'>", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [["inlineJS:", ["\x0a\x09\x09var interval = setInterval(self, aNumber);\x0a\x09\x09return $globals.Timeout._on_(interval);\x0a\x09"]]], messageSends: [] }, function ($methodClass){ return function (aNumber){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); var interval = setInterval(self, aNumber); return $globals.Timeout._on_(interval); ; return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"valueWithInterval:",{aNumber:aNumber})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosure); $core.addMethod( $core.method({ selector: "valueWithPossibleArguments:", protocol: "evaluating", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aCollection"], source: "valueWithPossibleArguments: aCollection\x0a\x09<inlineJS: 'return self.apply(null, aCollection);'>", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [["inlineJS:", ["return self.apply(null, aCollection);"]]], messageSends: [] }, function ($methodClass){ return function (aCollection){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return self.apply(null, aCollection);; return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"valueWithPossibleArguments:",{aCollection:aCollection})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosure); $core.addMethod( $core.method({ selector: "valueWithTimeout:", protocol: "timeout/interval", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aNumber"], source: "valueWithTimeout: aNumber\x0a\x09<inlineJS: '\x0a\x09\x09var timeout = setTimeout(self, aNumber);\x0a\x09\x09return $globals.Timeout._on_(timeout);\x0a\x09'>", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [["inlineJS:", ["\x0a\x09\x09var timeout = setTimeout(self, aNumber);\x0a\x09\x09return $globals.Timeout._on_(timeout);\x0a\x09"]]], messageSends: [] }, function ($methodClass){ return function (aNumber){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); var timeout = setTimeout(self, aNumber); return $globals.Timeout._on_(timeout); ; return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"valueWithTimeout:",{aNumber:aNumber})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosure); $core.addMethod( $core.method({ selector: "whileFalse", protocol: "controlling", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "whileFalse\x0a\x09self whileFalse: []", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["whileFalse:"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); $self._whileFalse_((function(){ })); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"whileFalse",{})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosure); $core.addMethod( $core.method({ selector: "whileFalse:", protocol: "controlling", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aBlock"], source: "whileFalse: aBlock\x0a\x09<inlineJS: 'while(!$core.assert($self._value())) {aBlock._value()}'>", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [["inlineJS:", ["while(!$core.assert($self._value())) {aBlock._value()}"]]], messageSends: [] }, function ($methodClass){ return function (aBlock){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); while(!$core.assert($self._value())) {aBlock._value()}; return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"whileFalse:",{aBlock:aBlock})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosure); $core.addMethod( $core.method({ selector: "whileTrue", protocol: "controlling", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "whileTrue\x0a\x09self whileTrue: []", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["whileTrue:"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); $self._whileTrue_((function(){ })); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"whileTrue",{})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosure); $core.addMethod( $core.method({ selector: "whileTrue:", protocol: "controlling", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aBlock"], source: "whileTrue: aBlock\x0a\x09<inlineJS: 'while($core.assert($self._value())) {aBlock._value()}'>", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [["inlineJS:", ["while($core.assert($self._value())) {aBlock._value()}"]]], messageSends: [] }, function ($methodClass){ return function (aBlock){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); while($core.assert($self._value())) {aBlock._value()}; return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"whileTrue:",{aBlock:aBlock})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosure); $core.addMethod( $core.method({ selector: "javaScriptConstructorFor:initializingVia:", protocol: "instance creation", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aPrototype", "aMethodBlock"], source: "javaScriptConstructorFor: aPrototype initializingVia: aMethodBlock\x0a\x09<inlineJS: '\x0a\x09\x09function Ctr () {\x0a\x09\x09\x09aMethodBlock.apply(this, arguments);\x0a\x09\x09}\x0a\x09\x09Ctr.prototype = aPrototype;\x0a\x09\x09return Ctr;\x0a\x09'>", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [["inlineJS:", ["\x0a\x09\x09function Ctr () {\x0a\x09\x09\x09aMethodBlock.apply(this, arguments);\x0a\x09\x09}\x0a\x09\x09Ctr.prototype = aPrototype;\x0a\x09\x09return Ctr;\x0a\x09"]]], messageSends: [] }, function ($methodClass){ return function (aPrototype,aMethodBlock){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); function Ctr () { aMethodBlock.apply(this, arguments); } Ctr.prototype = aPrototype; return Ctr; ; return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"javaScriptConstructorFor:initializingVia:",{aPrototype:aPrototype,aMethodBlock:aMethodBlock})}); //>>excludeEnd("ctx"); }; }), $globals.BlockClosure.a$cls); $core.addClass("CompiledMethod", $globals.Object, "Kernel-Methods"); $core.setSlots($globals.CompiledMethod, ["args", "instantiateFn", "fn", "messageSends", "pragmas", "owner", "methodClass", "protocol", "referencedClasses", "selector", "source"]); //>>excludeStart("ide", pragmas.excludeIdeData); $globals.CompiledMethod.comment="I represent a class method of the system. I hold the source and compiled code of a class method.\x0a\x0a## API\x0aMy instances can be accessed using `Behavior >> #methodAt:`\x0a\x0a Object methodAt: 'asString'\x0a\x0aSource code access:\x0a\x0a\x09(String methodAt: 'lines') source\x0a\x0aReferenced classes:\x0a\x0a\x09(String methodAt: 'lines') referencedClasses\x0a\x0aMessages sent from an instance:\x0a\x09\x0a\x09(String methodAt: 'lines') messageSends"; //>>excludeEnd("ide"); $core.addMethod( $core.method({ selector: "arguments", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "arguments\x0a\x09^ args ifNil: [ #() ]", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["ifNil:"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); var $1; $1=$self.args; if($1 == null || $1.a$nil){ return []; } else { return $1; } //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"arguments",{})}); //>>excludeEnd("ctx"); }; }), $globals.CompiledMethod); $core.addMethod( $core.method({ selector: "asString", protocol: "converting", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "asString\x0a\x09^ self asStringForClass: self methodClass", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["asStringForClass:", "methodClass"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $self._asStringForClass_($self._methodClass()); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"asString",{})}); //>>excludeEnd("ctx"); }; }), $globals.CompiledMethod); $core.addMethod( $core.method({ selector: "asStringForClass:", protocol: "converting", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aClass"], source: "asStringForClass: aClass\x0a\x09| result |\x0a\x09result := aClass name.\x0a\x09self methodClass = aClass \x0a\x09\x09ifFalse: [ result := result, ' (', (self methodClass ifNil: [ 'nil' ] ifNotNil: [ self methodClass name ]), ')'].\x0a\x09(self origin = aClass | (self origin = self methodClass)) \x0a\x09\x09ifFalse: [ result := result, ' /', (self origin ifNil: [ 'nil' ] ifNotNil: [ self origin name ]), '/'].\x0a\x09^ result, ' >> ', self selector symbolPrintString", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["name", "ifFalse:", "=", "methodClass", ",", "ifNil:ifNotNil:", "|", "origin", "symbolPrintString", "selector"] }, function ($methodClass){ return function (aClass){ var self=this,$self=this; var result; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); var $1,$2,$3,$4,$5,$6; result=[$recv(aClass)._name() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["name"]=1 //>>excludeEnd("ctx"); ][0]; if(!$core.assert([$recv([$self._methodClass() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["methodClass"]=1 //>>excludeEnd("ctx"); ][0]).__eq(aClass) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["="]=1 //>>excludeEnd("ctx"); ][0])){ $1=[$recv(result).__comma(" (") //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx[","]=3 //>>excludeEnd("ctx"); ][0]; $2=[$self._methodClass() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["methodClass"]=2 //>>excludeEnd("ctx"); ][0]; if($2 == null || $2.a$nil){ $3="nil"; } else { $3=[$recv([$self._methodClass() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["methodClass"]=3 //>>excludeEnd("ctx"); ][0])._name() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["name"]=2 //>>excludeEnd("ctx"); ][0]; } result=[$recv([$recv($1).__comma($3) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx[","]=2 //>>excludeEnd("ctx"); ][0]).__comma(")") //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx[","]=1 //>>excludeEnd("ctx"); ][0]; result; } if(!$core.assert($recv([$recv([$self._origin() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["origin"]=1 //>>excludeEnd("ctx"); ][0]).__eq(aClass) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["="]=2 //>>excludeEnd("ctx"); ][0]).__or($recv([$self._origin() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["origin"]=2 //>>excludeEnd("ctx"); ][0]).__eq($self._methodClass())))){ $4=[$recv(result).__comma(" /") //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx[","]=6 //>>excludeEnd("ctx"); ][0]; $5=[$self._origin() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["origin"]=3 //>>excludeEnd("ctx"); ][0]; if($5 == null || $5.a$nil){ $6="nil"; } else { $6=$recv($self._origin())._name(); } result=[$recv([$recv($4).__comma($6) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx[","]=5 //>>excludeEnd("ctx"); ][0]).__comma("/") //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx[","]=4 //>>excludeEnd("ctx"); ][0]; result; } return [$recv($recv(result).__comma(" >> ")).__comma($recv($self._selector())._symbolPrintString()) //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx[","]=7 //>>excludeEnd("ctx"); ][0]; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"asStringForClass:",{aClass:aClass,result:result})}); //>>excludeEnd("ctx"); }; }), $globals.CompiledMethod); $core.addMethod( $core.method({ selector: "basicPragmas", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "basicPragmas\x0a\x09^ pragmas ifNil: [ #() ]", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["ifNil:"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); var $1; $1=$self.pragmas; if($1 == null || $1.a$nil){ return []; } else { return $1; } //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"basicPragmas",{})}); //>>excludeEnd("ctx"); }; }), $globals.CompiledMethod); $core.addMethod( $core.method({ selector: "browse", protocol: "browsing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "browse\x0a\x09Finder findMethod: self", referencedClasses: ["Finder"], //>>excludeEnd("ide"); pragmas: [], messageSends: ["findMethod:"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); $recv($globals.Finder)._findMethod_(self); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"browse",{})}); //>>excludeEnd("ctx"); }; }), $globals.CompiledMethod); $core.addMethod( $core.method({ selector: "category", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "category\x0a\x09^ self protocol", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["protocol"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $self._protocol(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"category",{})}); //>>excludeEnd("ctx"); }; }), $globals.CompiledMethod); $core.addMethod( $core.method({ selector: "defaultProtocol", protocol: "defaults", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "defaultProtocol\x0a\x09^ 'as yet unclassified'", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: [] }, function ($methodClass){ return function (){ var self=this,$self=this; return "as yet unclassified"; }; }), $globals.CompiledMethod); $core.addMethod( $core.method({ selector: "fn", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "fn\x0a\x09^ fn", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: [] }, function ($methodClass){ return function (){ var self=this,$self=this; return $self.fn; }; }), $globals.CompiledMethod); $core.addMethod( $core.method({ selector: "instantiateFn", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "instantiateFn\x0a\x09^ instantiateFn", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: [] }, function ($methodClass){ return function (){ var self=this,$self=this; return $self.instantiateFn; }; }), $globals.CompiledMethod); $core.addMethod( $core.method({ selector: "instantiateFn:", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["anObject"], source: "instantiateFn: anObject\x0a\x09instantiateFn := anObject", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: [] }, function ($methodClass){ return function (anObject){ var self=this,$self=this; $self.instantiateFn=anObject; return self; }; }), $globals.CompiledMethod); $core.addMethod( $core.method({ selector: "isCompiledMethod", protocol: "testing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "isCompiledMethod\x0a\x09^ true", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: [] }, function ($methodClass){ return function (){ var self=this,$self=this; return true; }; }), $globals.CompiledMethod); $core.addMethod( $core.method({ selector: "isOverridden", protocol: "testing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "isOverridden\x0a self methodClass allSubclassesDo: [ :each |\x0a\x09 (each includesSelector: selector)\x0a \x09ifTrue: [ ^ true ] ].\x0a\x09^ false", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["allSubclassesDo:", "methodClass", "ifTrue:", "includesSelector:"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); var $early={}; try { $recv($self._methodClass())._allSubclassesDo_((function(each){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); if($core.assert($recv(each)._includesSelector_($self.selector))){ throw $early=[true]; } else { return nil; } //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)}); //>>excludeEnd("ctx"); })); return false; } catch(e) {if(e===$early)return e[0]; throw e} //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"isOverridden",{})}); //>>excludeEnd("ctx"); }; }), $globals.CompiledMethod); $core.addMethod( $core.method({ selector: "isOverride", protocol: "testing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "isOverride\x0a\x09| superclass |\x0a \x0a superclass := self methodClass superclass.\x0a\x09superclass ifNil: [ ^ false ].\x0a\x09\x0a ^ (self methodClass superclass lookupSelector: self selector) notNil", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["superclass", "methodClass", "ifNil:", "notNil", "lookupSelector:", "selector"] }, function ($methodClass){ return function (){ var self=this,$self=this; var superclass; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); var $1; superclass=[$recv([$self._methodClass() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["methodClass"]=1 //>>excludeEnd("ctx"); ][0])._superclass() //>>excludeStart("ctx", pragmas.excludeDebugContexts); ,$ctx1.sendIdx["superclass"]=1 //>>excludeEnd("ctx"); ][0]; $1=superclass; if($1 == null || $1.a$nil){ return false; } return $recv($recv($recv($self._methodClass())._superclass())._lookupSelector_($self._selector()))._notNil(); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"isOverride",{superclass:superclass})}); //>>excludeEnd("ctx"); }; }), $globals.CompiledMethod); $core.addMethod( $core.method({ selector: "messageSends", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "messageSends\x0a\x09^ messageSends", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: [] }, function ($methodClass){ return function (){ var self=this,$self=this; return $self.messageSends; }; }), $globals.CompiledMethod); $core.addMethod( $core.method({ selector: "methodClass", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "methodClass\x0a\x09^ methodClass", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: [] }, function ($methodClass){ return function (){ var self=this,$self=this; return $self.methodClass; }; }), $globals.CompiledMethod); $core.addMethod( $core.method({ selector: "origin", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "origin\x0a\x09^ owner", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: [] }, function ($methodClass){ return function (){ var self=this,$self=this; return $self.owner; }; }), $globals.CompiledMethod); $core.addMethod( $core.method({ selector: "package", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "package\x0a\x09\x22Answer the package the receiver belongs to:\x0a\x09- if it is an extension method, answer the corresponding package\x0a\x09- else answer the `methodClass` package\x22\x0a\x09\x0a\x09^ self origin ifNotNil: [ :class | class packageOfProtocol: self protocol ]", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["ifNotNil:", "origin", "packageOfProtocol:", "protocol"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); var $1; $1=$self._origin(); if($1 == null || $1.a$nil){ return $1; } else { var class_; class_=$1; return $recv(class_)._packageOfProtocol_($self._protocol()); } //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"package",{})}); //>>excludeEnd("ctx"); }; }), $globals.CompiledMethod); $core.addMethod( $core.method({ selector: "pragmas", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "pragmas\x0a\x09^ self basicPragmas collect: [ :each | Message selector: each first arguments: each second ]", referencedClasses: ["Message"], //>>excludeEnd("ide"); pragmas: [], messageSends: ["collect:", "basicPragmas", "selector:arguments:", "first", "second"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); return $recv($self._basicPragmas())._collect_((function(each){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); return $recv($globals.Message)._selector_arguments_($recv(each)._first(),$recv(each)._second()); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)}); //>>excludeEnd("ctx"); })); //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"pragmas",{})}); //>>excludeEnd("ctx"); }; }), $globals.CompiledMethod); $core.addMethod( $core.method({ selector: "pragmas:", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["anArrayOfMessages"], source: "pragmas: anArrayOfMessages\x0a\x09pragmas := anArrayOfMessages collect: [ :each | { each selector. each arguments } ]", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["collect:", "selector", "arguments"] }, function ($methodClass){ return function (anArrayOfMessages){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); $self.pragmas=$recv(anArrayOfMessages)._collect_((function(each){ //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx2) { //>>excludeEnd("ctx"); return [$recv(each)._selector(),$recv(each)._arguments()]; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)}); //>>excludeEnd("ctx"); })); return self; //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"pragmas:",{anArrayOfMessages:anArrayOfMessages})}); //>>excludeEnd("ctx"); }; }), $globals.CompiledMethod); $core.addMethod( $core.method({ selector: "protocol", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: [], source: "protocol\x0a\x09^ protocol ifNil: [ self defaultProtocol ]", referencedClasses: [], //>>excludeEnd("ide"); pragmas: [], messageSends: ["ifNil:", "defaultProtocol"] }, function ($methodClass){ return function (){ var self=this,$self=this; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); var $1; $1=$self.protocol; if($1 == null || $1.a$nil){ return $self._defaultProtocol(); } else { return $1; } //>>excludeStart("ctx", pragmas.excludeDebugContexts); }, function($ctx1) {$ctx1.fill(self,"protocol",{})}); //>>excludeEnd("ctx"); }; }), $globals.CompiledMethod); $core.addMethod( $core.method({ selector: "protocol:", protocol: "accessing", //>>excludeStart("ide", pragmas.excludeIdeData); args: ["aString"], source: "protocol: aString\x0a\x09| oldProtocol |\x0a\x09oldProtocol := self protocol.\x0a\x09protocol := aString.\x0a\x0a\x09oldProtocol ifNotNil: [\x0a\x09\x09SystemAnnouncer current announce: (MethodMoved new\x0a\x09\x09\x09method: self;\x0a\x09\x09\x09oldProtocol: oldProtocol;\x0a\x09\x09\x09yourself) ].\x0a\x0a\x09self origin ifNotNil: [ :origin |\x0a\x09\x09origin organization addElement: aString.\x0a\x09\x09origin removeProtocolIfEmpty: oldProtocol ]", referencedClasses: ["SystemAnnouncer", "MethodMoved"], //>>excludeEnd("ide"); pragmas: [], messageSends: ["protocol", "ifNotNil:", "announce:", "current", "method:", "new", "oldProtocol:", "yourself", "origin", "addElement:", "organization", "removeProtocolIfEmpty:"] }, function ($methodClass){ return function (aString){ var self=this,$self=this; var oldProtocol; //>>excludeStart("ctx", pragmas.excludeDebugContexts); return $core.withContext(function($ctx1) { //>>excludeEnd("ctx"); var $1,$2,$3,$4; oldProtocol=$self._protocol(); $self.protocol=aString; $1=oldProtocol; if($1 != null && !$1.a$nil){ $2=$recv($globals.SystemAnnouncer)._current(); $3=$recv($globals.MethodMoved)._new(); $recv($3)._method_(s