|
@@ -57,6 +57,365 @@ referencedClasses: []
|
|
smalltalk.ChunkParser.klass);
|
|
smalltalk.ChunkParser.klass);
|
|
|
|
|
|
|
|
|
|
|
|
+smalltalk.addClass('Compiler', smalltalk.Object, ['currentClass', 'source', 'unknownVariables'], 'Compiler');
|
|
|
|
+smalltalk.addMethod(
|
|
|
|
+"_codeGeneratorClass",
|
|
|
|
+smalltalk.method({
|
|
|
|
+selector: "codeGeneratorClass",
|
|
|
|
+category: 'accessing',
|
|
|
|
+fn: function (){
|
|
|
|
+var self=this;
|
|
|
|
+return (smalltalk.FunCodeGenerator || FunCodeGenerator);
|
|
|
|
+return self;},
|
|
|
|
+args: [],
|
|
|
|
+source: "codeGeneratorClass\x0a\x09^FunCodeGenerator",
|
|
|
|
+messageSends: [],
|
|
|
|
+referencedClasses: ["FunCodeGenerator"]
|
|
|
|
+}),
|
|
|
|
+smalltalk.Compiler);
|
|
|
|
+
|
|
|
|
+smalltalk.addMethod(
|
|
|
|
+"_compile_",
|
|
|
|
+smalltalk.method({
|
|
|
|
+selector: "compile:",
|
|
|
|
+category: 'compiling',
|
|
|
|
+fn: function (aString){
|
|
|
|
+var self=this;
|
|
|
|
+return smalltalk.send(self, "_compileNode_", [smalltalk.send(self, "_parse_", [aString])]);
|
|
|
|
+return self;},
|
|
|
|
+args: ["aString"],
|
|
|
|
+source: "compile: aString\x0a\x09^self compileNode: (self parse: aString)",
|
|
|
|
+messageSends: ["compileNode:", "parse:"],
|
|
|
|
+referencedClasses: []
|
|
|
|
+}),
|
|
|
|
+smalltalk.Compiler);
|
|
|
|
+
|
|
|
|
+smalltalk.addMethod(
|
|
|
|
+"_compile_forClass_",
|
|
|
|
+smalltalk.method({
|
|
|
|
+selector: "compile:forClass:",
|
|
|
|
+category: 'compiling',
|
|
|
|
+fn: function (aString, aClass){
|
|
|
|
+var self=this;
|
|
|
|
+smalltalk.send(self, "_currentClass_", [aClass]);
|
|
|
|
+smalltalk.send(self, "_source_", [aString]);
|
|
|
|
+return smalltalk.send(self, "_compile_", [aString]);
|
|
|
|
+return self;},
|
|
|
|
+args: ["aString", "aClass"],
|
|
|
|
+source: "compile: aString forClass: aClass\x0a\x09self currentClass: aClass.\x0a\x09self source: aString.\x0a\x09^self compile: aString",
|
|
|
|
+messageSends: ["currentClass:", "source:", "compile:"],
|
|
|
|
+referencedClasses: []
|
|
|
|
+}),
|
|
|
|
+smalltalk.Compiler);
|
|
|
|
+
|
|
|
|
+smalltalk.addMethod(
|
|
|
|
+"_compileExpression_",
|
|
|
|
+smalltalk.method({
|
|
|
|
+selector: "compileExpression:",
|
|
|
|
+category: 'compiling',
|
|
|
|
+fn: function (aString){
|
|
|
|
+var self=this;
|
|
|
|
+smalltalk.send(self, "_currentClass_", [(smalltalk.DoIt || DoIt)]);
|
|
|
|
+smalltalk.send(self, "_source_", [smalltalk.send(smalltalk.send("doIt ^[", "__comma", [aString]), "__comma", ["] value"])]);
|
|
|
|
+return smalltalk.send(self, "_compileNode_", [smalltalk.send(self, "_parse_", [smalltalk.send(self, "_source", [])])]);
|
|
|
|
+return self;},
|
|
|
|
+args: ["aString"],
|
|
|
|
+source: "compileExpression: aString\x0a\x09self currentClass: DoIt.\x0a\x09self source: 'doIt ^[', aString, '] value'.\x0a\x09^self compileNode: (self parse: self source)",
|
|
|
|
+messageSends: ["currentClass:", "source:", ",", "compileNode:", "parse:", "source"],
|
|
|
|
+referencedClasses: ["DoIt"]
|
|
|
|
+}),
|
|
|
|
+smalltalk.Compiler);
|
|
|
|
+
|
|
|
|
+smalltalk.addMethod(
|
|
|
|
+"_compileNode_",
|
|
|
|
+smalltalk.method({
|
|
|
|
+selector: "compileNode:",
|
|
|
|
+category: 'compiling',
|
|
|
|
+fn: function (aNode){
|
|
|
|
+var self=this;
|
|
|
|
+var generator=nil;
|
|
|
|
+var result=nil;
|
|
|
|
+(generator=smalltalk.send(smalltalk.send(self, "_codeGeneratorClass", []), "_new", []));
|
|
|
|
+(function($rec){smalltalk.send($rec, "_source_", [smalltalk.send(self, "_source", [])]);return smalltalk.send($rec, "_currentClass_", [smalltalk.send(self, "_currentClass", [])]);})(generator);
|
|
|
|
+(result=smalltalk.send(generator, "_compileNode_", [aNode]));
|
|
|
|
+smalltalk.send(self, "_unknownVariables_", [smalltalk.send(generator, "_unknownVariables", [])]);
|
|
|
|
+return result;
|
|
|
|
+return self;},
|
|
|
|
+args: ["aNode"],
|
|
|
|
+source: "compileNode: aNode\x0a\x09| generator result |\x0a\x09generator := self codeGeneratorClass new.\x0a\x09generator\x0a\x09\x09source: self source;\x0a\x09\x09currentClass: self currentClass.\x0a\x09result := generator compileNode: aNode.\x0a\x09self unknownVariables: generator unknownVariables.\x0a\x09^result",
|
|
|
|
+messageSends: ["new", "codeGeneratorClass", "source:", "source", "currentClass:", "currentClass", "compileNode:", "unknownVariables:", "unknownVariables"],
|
|
|
|
+referencedClasses: []
|
|
|
|
+}),
|
|
|
|
+smalltalk.Compiler);
|
|
|
|
+
|
|
|
|
+smalltalk.addMethod(
|
|
|
|
+"_currentClass",
|
|
|
|
+smalltalk.method({
|
|
|
|
+selector: "currentClass",
|
|
|
|
+category: 'accessing',
|
|
|
|
+fn: function (){
|
|
|
|
+var self=this;
|
|
|
|
+return self['@currentClass'];
|
|
|
|
+return self;},
|
|
|
|
+args: [],
|
|
|
|
+source: "currentClass\x0a\x09^currentClass",
|
|
|
|
+messageSends: [],
|
|
|
|
+referencedClasses: []
|
|
|
|
+}),
|
|
|
|
+smalltalk.Compiler);
|
|
|
|
+
|
|
|
|
+smalltalk.addMethod(
|
|
|
|
+"_currentClass_",
|
|
|
|
+smalltalk.method({
|
|
|
|
+selector: "currentClass:",
|
|
|
|
+category: 'accessing',
|
|
|
|
+fn: function (aClass){
|
|
|
|
+var self=this;
|
|
|
|
+(self['@currentClass']=aClass);
|
|
|
|
+return self;},
|
|
|
|
+args: ["aClass"],
|
|
|
|
+source: "currentClass: aClass\x0a\x09currentClass := aClass",
|
|
|
|
+messageSends: [],
|
|
|
|
+referencedClasses: []
|
|
|
|
+}),
|
|
|
|
+smalltalk.Compiler);
|
|
|
|
+
|
|
|
|
+smalltalk.addMethod(
|
|
|
|
+"_eval_",
|
|
|
|
+smalltalk.method({
|
|
|
|
+selector: "eval:",
|
|
|
|
+category: 'compiling',
|
|
|
|
+fn: function (aString){
|
|
|
|
+var self=this;
|
|
|
|
+return eval(aString);
|
|
|
|
+return self;},
|
|
|
|
+args: ["aString"],
|
|
|
|
+source: "eval: aString\x0a\x09<return eval(aString)>",
|
|
|
|
+messageSends: [],
|
|
|
|
+referencedClasses: []
|
|
|
|
+}),
|
|
|
|
+smalltalk.Compiler);
|
|
|
|
+
|
|
|
|
+smalltalk.addMethod(
|
|
|
|
+"_evaluateExpression_",
|
|
|
|
+smalltalk.method({
|
|
|
|
+selector: "evaluateExpression:",
|
|
|
|
+category: 'compiling',
|
|
|
|
+fn: function (aString){
|
|
|
|
+var self=this;
|
|
|
|
+var result=nil;
|
|
|
|
+smalltalk.send((smalltalk.DoIt || DoIt), "_addCompiledMethod_", [smalltalk.send(self, "_eval_", [smalltalk.send(self, "_compileExpression_", [aString])])]);
|
|
|
|
+(result=smalltalk.send(smalltalk.send((smalltalk.DoIt || DoIt), "_new", []), "_doIt", []));
|
|
|
|
+smalltalk.send((smalltalk.DoIt || DoIt), "_removeCompiledMethod_", [smalltalk.send(smalltalk.send((smalltalk.DoIt || DoIt), "_methodDictionary", []), "_at_", ["doIt"])]);
|
|
|
|
+return result;
|
|
|
|
+return self;},
|
|
|
|
+args: ["aString"],
|
|
|
|
+source: "evaluateExpression: aString\x0a\x09\x22Unlike #eval: evaluate a Smalltalk expression and answer the returned object\x22\x0a\x09| result |\x0a\x09DoIt addCompiledMethod: (self eval: (self compileExpression: aString)).\x0a\x09result := DoIt new doIt.\x0a\x09DoIt removeCompiledMethod: (DoIt methodDictionary at: 'doIt').\x0a\x09^result",
|
|
|
|
+messageSends: ["addCompiledMethod:", "eval:", "compileExpression:", "doIt", "new", "removeCompiledMethod:", "at:", "methodDictionary"],
|
|
|
|
+referencedClasses: ["DoIt"]
|
|
|
|
+}),
|
|
|
|
+smalltalk.Compiler);
|
|
|
|
+
|
|
|
|
+smalltalk.addMethod(
|
|
|
|
+"_install_forClass_category_",
|
|
|
|
+smalltalk.method({
|
|
|
|
+selector: "install:forClass:category:",
|
|
|
|
+category: 'compiling',
|
|
|
|
+fn: function (aString, aBehavior, anotherString){
|
|
|
|
+var self=this;
|
|
|
|
+var compiled=nil;
|
|
|
|
+(compiled=smalltalk.send(self, "_eval_", [smalltalk.send(self, "_compile_forClass_", [aString, aBehavior])]));
|
|
|
|
+smalltalk.send(compiled, "_category_", [anotherString]);
|
|
|
|
+smalltalk.send(aBehavior, "_addCompiledMethod_", [compiled]);
|
|
|
|
+return compiled;
|
|
|
|
+return self;},
|
|
|
|
+args: ["aString", "aBehavior", "anotherString"],
|
|
|
|
+source: "install: aString forClass: aBehavior category: anotherString\x0a\x09| compiled |\x0a\x09compiled := self eval: (self compile: aString forClass: aBehavior).\x0a\x09compiled category: anotherString.\x0a\x09aBehavior addCompiledMethod: compiled.\x0a\x09^compiled",
|
|
|
|
+messageSends: ["eval:", "compile:forClass:", "category:", "addCompiledMethod:"],
|
|
|
|
+referencedClasses: []
|
|
|
|
+}),
|
|
|
|
+smalltalk.Compiler);
|
|
|
|
+
|
|
|
|
+smalltalk.addMethod(
|
|
|
|
+"_parse_",
|
|
|
|
+smalltalk.method({
|
|
|
|
+selector: "parse:",
|
|
|
|
+category: 'compiling',
|
|
|
|
+fn: function (aString){
|
|
|
|
+var self=this;
|
|
|
|
+return smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_parse_", [aString]);
|
|
|
|
+return self;},
|
|
|
|
+args: ["aString"],
|
|
|
|
+source: "parse: aString\x0a ^Smalltalk current parse: aString",
|
|
|
|
+messageSends: ["parse:", "current"],
|
|
|
|
+referencedClasses: ["Smalltalk"]
|
|
|
|
+}),
|
|
|
|
+smalltalk.Compiler);
|
|
|
|
+
|
|
|
|
+smalltalk.addMethod(
|
|
|
|
+"_parseExpression_",
|
|
|
|
+smalltalk.method({
|
|
|
|
+selector: "parseExpression:",
|
|
|
|
+category: 'compiling',
|
|
|
|
+fn: function (aString){
|
|
|
|
+var self=this;
|
|
|
|
+return smalltalk.send(self, "_parse_", [smalltalk.send(smalltalk.send("doIt ^[", "__comma", [aString]), "__comma", ["] value"])]);
|
|
|
|
+return self;},
|
|
|
|
+args: ["aString"],
|
|
|
|
+source: "parseExpression: aString\x0a ^self parse: 'doIt ^[', aString, '] value'",
|
|
|
|
+messageSends: ["parse:", ","],
|
|
|
|
+referencedClasses: []
|
|
|
|
+}),
|
|
|
|
+smalltalk.Compiler);
|
|
|
|
+
|
|
|
|
+smalltalk.addMethod(
|
|
|
|
+"_recompile_",
|
|
|
|
+smalltalk.method({
|
|
|
|
+selector: "recompile:",
|
|
|
|
+category: 'compiling',
|
|
|
|
+fn: function (aClass){
|
|
|
|
+var self=this;
|
|
|
|
+smalltalk.send(smalltalk.send(aClass, "_methodDictionary", []), "_do_", [(function(each){return smalltalk.send(self, "_install_forClass_category_", [smalltalk.send(each, "_source", []), aClass, smalltalk.send(each, "_category", [])]);})]);
|
|
|
|
+smalltalk.send(self, "_setupClass_", [aClass]);
|
|
|
|
+((($receiver = smalltalk.send(aClass, "_isMetaclass", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_recompile_", [smalltalk.send(aClass, "_class", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_recompile_", [smalltalk.send(aClass, "_class", [])]);})]));
|
|
|
|
+return self;},
|
|
|
|
+args: ["aClass"],
|
|
|
|
+source: "recompile: aClass\x0a\x09aClass methodDictionary do: [:each |\x0a\x09\x09self install: each source forClass: aClass category: each category].\x0a\x09self setupClass: aClass.\x0a\x09aClass isMetaclass ifFalse: [self recompile: aClass class]",
|
|
|
|
+messageSends: ["do:", "methodDictionary", "install:forClass:category:", "source", "category", "setupClass:", "ifFalse:", "isMetaclass", "recompile:", "class"],
|
|
|
|
+referencedClasses: []
|
|
|
|
+}),
|
|
|
|
+smalltalk.Compiler);
|
|
|
|
+
|
|
|
|
+smalltalk.addMethod(
|
|
|
|
+"_recompileAll",
|
|
|
|
+smalltalk.method({
|
|
|
|
+selector: "recompileAll",
|
|
|
|
+category: 'compiling',
|
|
|
|
+fn: function (){
|
|
|
|
+var self=this;
|
|
|
|
+smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "_do_", [(function(each){(function($rec){smalltalk.send($rec, "_show_", [each]);return smalltalk.send($rec, "_cr", []);})((smalltalk.Transcript || Transcript));return smalltalk.send((function(){return smalltalk.send(self, "_recompile_", [each]);}), "_valueWithTimeout_", [(100)]);})]);
|
|
|
|
+return self;},
|
|
|
|
+args: [],
|
|
|
|
+source: "recompileAll\x0a\x09Smalltalk current classes do: [:each |\x0a\x09\x09Transcript show: each; cr.\x0a\x09\x09[self recompile: each] valueWithTimeout: 100]",
|
|
|
|
+messageSends: ["do:", "classes", "current", "show:", "cr", "valueWithTimeout:", "recompile:"],
|
|
|
|
+referencedClasses: ["Smalltalk", "Transcript"]
|
|
|
|
+}),
|
|
|
|
+smalltalk.Compiler);
|
|
|
|
+
|
|
|
|
+smalltalk.addMethod(
|
|
|
|
+"_setupClass_",
|
|
|
|
+smalltalk.method({
|
|
|
|
+selector: "setupClass:",
|
|
|
|
+category: 'compiling',
|
|
|
|
+fn: function (aClass){
|
|
|
|
+var self=this;
|
|
|
|
+smalltalk.init(aClass);
|
|
|
|
+return self;},
|
|
|
|
+args: ["aClass"],
|
|
|
|
+source: "setupClass: aClass\x0a\x09<smalltalk.init(aClass)>",
|
|
|
|
+messageSends: [],
|
|
|
|
+referencedClasses: []
|
|
|
|
+}),
|
|
|
|
+smalltalk.Compiler);
|
|
|
|
+
|
|
|
|
+smalltalk.addMethod(
|
|
|
|
+"_source",
|
|
|
|
+smalltalk.method({
|
|
|
|
+selector: "source",
|
|
|
|
+category: 'accessing',
|
|
|
|
+fn: function (){
|
|
|
|
+var self=this;
|
|
|
|
+return (($receiver = self['@source']) == nil || $receiver == undefined) ? (function(){return "";})() : $receiver;
|
|
|
|
+return self;},
|
|
|
|
+args: [],
|
|
|
|
+source: "source\x0a\x09^source ifNil: ['']",
|
|
|
|
+messageSends: ["ifNil:"],
|
|
|
|
+referencedClasses: []
|
|
|
|
+}),
|
|
|
|
+smalltalk.Compiler);
|
|
|
|
+
|
|
|
|
+smalltalk.addMethod(
|
|
|
|
+"_source_",
|
|
|
|
+smalltalk.method({
|
|
|
|
+selector: "source:",
|
|
|
|
+category: 'accessing',
|
|
|
|
+fn: function (aString){
|
|
|
|
+var self=this;
|
|
|
|
+(self['@source']=aString);
|
|
|
|
+return self;},
|
|
|
|
+args: ["aString"],
|
|
|
|
+source: "source: aString\x0a\x09source := aString",
|
|
|
|
+messageSends: [],
|
|
|
|
+referencedClasses: []
|
|
|
|
+}),
|
|
|
|
+smalltalk.Compiler);
|
|
|
|
+
|
|
|
|
+smalltalk.addMethod(
|
|
|
|
+"_unknownVariables",
|
|
|
|
+smalltalk.method({
|
|
|
|
+selector: "unknownVariables",
|
|
|
|
+category: 'accessing',
|
|
|
|
+fn: function (){
|
|
|
|
+var self=this;
|
|
|
|
+return self['@unknownVariables'];
|
|
|
|
+return self;},
|
|
|
|
+args: [],
|
|
|
|
+source: "unknownVariables\x0a\x09^unknownVariables",
|
|
|
|
+messageSends: [],
|
|
|
|
+referencedClasses: []
|
|
|
|
+}),
|
|
|
|
+smalltalk.Compiler);
|
|
|
|
+
|
|
|
|
+smalltalk.addMethod(
|
|
|
|
+"_unknownVariables_",
|
|
|
|
+smalltalk.method({
|
|
|
|
+selector: "unknownVariables:",
|
|
|
|
+category: 'accessing',
|
|
|
|
+fn: function (aCollection){
|
|
|
|
+var self=this;
|
|
|
|
+(self['@unknownVariables']=aCollection);
|
|
|
|
+return self;},
|
|
|
|
+args: ["aCollection"],
|
|
|
|
+source: "unknownVariables: aCollection\x0a\x09unknownVariables := aCollection",
|
|
|
|
+messageSends: [],
|
|
|
|
+referencedClasses: []
|
|
|
|
+}),
|
|
|
|
+smalltalk.Compiler);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+smalltalk.addMethod(
|
|
|
|
+"_recompile_",
|
|
|
|
+smalltalk.method({
|
|
|
|
+selector: "recompile:",
|
|
|
|
+category: 'compiling',
|
|
|
|
+fn: function (aClass){
|
|
|
|
+var self=this;
|
|
|
|
+smalltalk.send(smalltalk.send(self, "_new", []), "_recompile_", [aClass]);
|
|
|
|
+return self;},
|
|
|
|
+args: ["aClass"],
|
|
|
|
+source: "recompile: aClass\x0a\x09self new recompile: aClass",
|
|
|
|
+messageSends: ["recompile:", "new"],
|
|
|
|
+referencedClasses: []
|
|
|
|
+}),
|
|
|
|
+smalltalk.Compiler.klass);
|
|
|
|
+
|
|
|
|
+smalltalk.addMethod(
|
|
|
|
+"_recompileAll",
|
|
|
|
+smalltalk.method({
|
|
|
|
+selector: "recompileAll",
|
|
|
|
+category: 'compiling',
|
|
|
|
+fn: function (){
|
|
|
|
+var self=this;
|
|
|
|
+smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "_do_", [(function(each){return smalltalk.send(self, "_recompile_", [each]);})]);
|
|
|
|
+return self;},
|
|
|
|
+args: [],
|
|
|
|
+source: "recompileAll\x0a\x09Smalltalk current classes do: [:each |\x0a\x09\x09self recompile: each]",
|
|
|
|
+messageSends: ["do:", "classes", "current", "recompile:"],
|
|
|
|
+referencedClasses: ["Smalltalk"]
|
|
|
|
+}),
|
|
|
|
+smalltalk.Compiler.klass);
|
|
|
|
+
|
|
|
|
+
|
|
smalltalk.addClass('DoIt', smalltalk.Object, [], 'Compiler');
|
|
smalltalk.addClass('DoIt', smalltalk.Object, [], 'Compiler');
|
|
|
|
|
|
|
|
|
|
@@ -1676,7 +2035,7 @@ smalltalk.NodeVisitor);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-smalltalk.addClass('AbstractCompiler', smalltalk.NodeVisitor, ['currentClass', 'source'], 'Compiler');
|
|
|
|
|
|
+smalltalk.addClass('AbstractCodeGenerator', smalltalk.NodeVisitor, ['currentClass', 'source'], 'Compiler');
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_classNameFor_",
|
|
"_classNameFor_",
|
|
smalltalk.method({
|
|
smalltalk.method({
|
|
@@ -1691,59 +2050,7 @@ source: "classNameFor: aClass\x0a\x09^aClass isMetaclass\x0a\x09 ifTrue: [aCl
|
|
messageSends: ["ifTrue:ifFalse:", "isMetaclass", ",", "name", "instanceClass", "isNil"],
|
|
messageSends: ["ifTrue:ifFalse:", "isMetaclass", ",", "name", "instanceClass", "isNil"],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.AbstractCompiler);
|
|
|
|
-
|
|
|
|
-smalltalk.addMethod(
|
|
|
|
-"_compile_",
|
|
|
|
-smalltalk.method({
|
|
|
|
-selector: "compile:",
|
|
|
|
-category: 'compiling',
|
|
|
|
-fn: function (aString){
|
|
|
|
-var self=this;
|
|
|
|
-return smalltalk.send(self, "_compileNode_", [smalltalk.send(self, "_parse_", [aString])]);
|
|
|
|
-return self;},
|
|
|
|
-args: ["aString"],
|
|
|
|
-source: "compile: aString\x0a\x09^self compileNode: (self parse: aString)",
|
|
|
|
-messageSends: ["compileNode:", "parse:"],
|
|
|
|
-referencedClasses: []
|
|
|
|
-}),
|
|
|
|
-smalltalk.AbstractCompiler);
|
|
|
|
-
|
|
|
|
-smalltalk.addMethod(
|
|
|
|
-"_compile_forClass_",
|
|
|
|
-smalltalk.method({
|
|
|
|
-selector: "compile:forClass:",
|
|
|
|
-category: 'compiling',
|
|
|
|
-fn: function (aString, aClass){
|
|
|
|
-var self=this;
|
|
|
|
-smalltalk.send(self, "_currentClass_", [aClass]);
|
|
|
|
-smalltalk.send(self, "_source_", [aString]);
|
|
|
|
-return smalltalk.send(self, "_compile_", [aString]);
|
|
|
|
-return self;},
|
|
|
|
-args: ["aString", "aClass"],
|
|
|
|
-source: "compile: aString forClass: aClass\x0a\x09self currentClass: aClass.\x0a\x09self source: aString.\x0a\x09^self compile: aString",
|
|
|
|
-messageSends: ["currentClass:", "source:", "compile:"],
|
|
|
|
-referencedClasses: []
|
|
|
|
-}),
|
|
|
|
-smalltalk.AbstractCompiler);
|
|
|
|
-
|
|
|
|
-smalltalk.addMethod(
|
|
|
|
-"_compileExpression_",
|
|
|
|
-smalltalk.method({
|
|
|
|
-selector: "compileExpression:",
|
|
|
|
-category: 'compiling',
|
|
|
|
-fn: function (aString){
|
|
|
|
-var self=this;
|
|
|
|
-smalltalk.send(self, "_currentClass_", [(smalltalk.DoIt || DoIt)]);
|
|
|
|
-smalltalk.send(self, "_source_", [smalltalk.send(smalltalk.send("doIt ^[", "__comma", [aString]), "__comma", ["] value"])]);
|
|
|
|
-return smalltalk.send(self, "_compileNode_", [smalltalk.send(self, "_parse_", [smalltalk.send(self, "_source", [])])]);
|
|
|
|
-return self;},
|
|
|
|
-args: ["aString"],
|
|
|
|
-source: "compileExpression: aString\x0a\x09self currentClass: DoIt.\x0a\x09self source: 'doIt ^[', aString, '] value'.\x0a\x09^self compileNode: (self parse: self source)",
|
|
|
|
-messageSends: ["currentClass:", "source:", ",", "compileNode:", "parse:", "source"],
|
|
|
|
-referencedClasses: ["DoIt"]
|
|
|
|
-}),
|
|
|
|
-smalltalk.AbstractCompiler);
|
|
|
|
|
|
+smalltalk.AbstractCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_compileNode_",
|
|
"_compileNode_",
|
|
@@ -1759,7 +2066,7 @@ source: "compileNode: aNode\x0a\x09self subclassResponsibility",
|
|
messageSends: ["subclassResponsibility"],
|
|
messageSends: ["subclassResponsibility"],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.AbstractCompiler);
|
|
|
|
|
|
+smalltalk.AbstractCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_currentClass",
|
|
"_currentClass",
|
|
@@ -1775,7 +2082,7 @@ source: "currentClass\x0a\x09^currentClass",
|
|
messageSends: [],
|
|
messageSends: [],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.AbstractCompiler);
|
|
|
|
|
|
+smalltalk.AbstractCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_currentClass_",
|
|
"_currentClass_",
|
|
@@ -1791,95 +2098,7 @@ source: "currentClass: aClass\x0a\x09currentClass := aClass",
|
|
messageSends: [],
|
|
messageSends: [],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.AbstractCompiler);
|
|
|
|
-
|
|
|
|
-smalltalk.addMethod(
|
|
|
|
-"_eval_",
|
|
|
|
-smalltalk.method({
|
|
|
|
-selector: "eval:",
|
|
|
|
-category: 'compiling',
|
|
|
|
-fn: function (aString){
|
|
|
|
-var self=this;
|
|
|
|
-return eval(aString);
|
|
|
|
-return self;},
|
|
|
|
-args: ["aString"],
|
|
|
|
-source: "eval: aString\x0a\x09<return eval(aString)>",
|
|
|
|
-messageSends: [],
|
|
|
|
-referencedClasses: []
|
|
|
|
-}),
|
|
|
|
-smalltalk.AbstractCompiler);
|
|
|
|
-
|
|
|
|
-smalltalk.addMethod(
|
|
|
|
-"_evaluateExpression_",
|
|
|
|
-smalltalk.method({
|
|
|
|
-selector: "evaluateExpression:",
|
|
|
|
-category: 'compiling',
|
|
|
|
-fn: function (aString){
|
|
|
|
-var self=this;
|
|
|
|
-var result=nil;
|
|
|
|
-smalltalk.send((smalltalk.DoIt || DoIt), "_addCompiledMethod_", [smalltalk.send(self, "_eval_", [smalltalk.send(self, "_compileExpression_", [aString])])]);
|
|
|
|
-(result=smalltalk.send(smalltalk.send((smalltalk.DoIt || DoIt), "_new", []), "_doIt", []));
|
|
|
|
-smalltalk.send((smalltalk.DoIt || DoIt), "_removeCompiledMethod_", [smalltalk.send(smalltalk.send((smalltalk.DoIt || DoIt), "_methodDictionary", []), "_at_", ["doIt"])]);
|
|
|
|
-return result;
|
|
|
|
-return self;},
|
|
|
|
-args: ["aString"],
|
|
|
|
-source: "evaluateExpression: aString\x0a\x09\x22Unlike #eval: evaluate a Smalltalk expression and answer the returned object\x22\x0a\x09| result |\x0a\x09DoIt addCompiledMethod: (self eval: (self compileExpression: aString)).\x0a\x09result := DoIt new doIt.\x0a\x09DoIt removeCompiledMethod: (DoIt methodDictionary at: 'doIt').\x0a\x09^result",
|
|
|
|
-messageSends: ["addCompiledMethod:", "eval:", "compileExpression:", "doIt", "new", "removeCompiledMethod:", "at:", "methodDictionary"],
|
|
|
|
-referencedClasses: ["DoIt"]
|
|
|
|
-}),
|
|
|
|
-smalltalk.AbstractCompiler);
|
|
|
|
-
|
|
|
|
-smalltalk.addMethod(
|
|
|
|
-"_install_forClass_category_",
|
|
|
|
-smalltalk.method({
|
|
|
|
-selector: "install:forClass:category:",
|
|
|
|
-category: 'compiling',
|
|
|
|
-fn: function (aString, aBehavior, anotherString){
|
|
|
|
-var self=this;
|
|
|
|
-var compiled=nil;
|
|
|
|
-(compiled=smalltalk.send(self, "_eval_", [smalltalk.send(self, "_compile_forClass_", [aString, aBehavior])]));
|
|
|
|
-smalltalk.send(compiled, "_category_", [anotherString]);
|
|
|
|
-smalltalk.send(aBehavior, "_addCompiledMethod_", [compiled]);
|
|
|
|
-return compiled;
|
|
|
|
-return self;},
|
|
|
|
-args: ["aString", "aBehavior", "anotherString"],
|
|
|
|
-source: "install: aString forClass: aBehavior category: anotherString\x0a\x09| compiled |\x0a\x09compiled := self eval: (self compile: aString forClass: aBehavior).\x0a\x09compiled category: anotherString.\x0a\x09aBehavior addCompiledMethod: compiled.\x0a\x09^compiled",
|
|
|
|
-messageSends: ["eval:", "compile:forClass:", "category:", "addCompiledMethod:"],
|
|
|
|
-referencedClasses: []
|
|
|
|
-}),
|
|
|
|
-smalltalk.AbstractCompiler);
|
|
|
|
-
|
|
|
|
-smalltalk.addMethod(
|
|
|
|
-"_parse_",
|
|
|
|
-smalltalk.method({
|
|
|
|
-selector: "parse:",
|
|
|
|
-category: 'compiling',
|
|
|
|
-fn: function (aString){
|
|
|
|
-var self=this;
|
|
|
|
-return smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_parse_", [aString]);
|
|
|
|
-return self;},
|
|
|
|
-args: ["aString"],
|
|
|
|
-source: "parse: aString\x0a ^Smalltalk current parse: aString",
|
|
|
|
-messageSends: ["parse:", "current"],
|
|
|
|
-referencedClasses: ["Smalltalk"]
|
|
|
|
-}),
|
|
|
|
-smalltalk.AbstractCompiler);
|
|
|
|
-
|
|
|
|
-smalltalk.addMethod(
|
|
|
|
-"_parseExpression_",
|
|
|
|
-smalltalk.method({
|
|
|
|
-selector: "parseExpression:",
|
|
|
|
-category: 'compiling',
|
|
|
|
-fn: function (aString){
|
|
|
|
-var self=this;
|
|
|
|
-return smalltalk.send(self, "_parse_", [smalltalk.send(smalltalk.send("doIt ^[", "__comma", [aString]), "__comma", ["] value"])]);
|
|
|
|
-return self;},
|
|
|
|
-args: ["aString"],
|
|
|
|
-source: "parseExpression: aString\x0a ^self parse: 'doIt ^[', aString, '] value'",
|
|
|
|
-messageSends: ["parse:", ","],
|
|
|
|
-referencedClasses: []
|
|
|
|
-}),
|
|
|
|
-smalltalk.AbstractCompiler);
|
|
|
|
|
|
+smalltalk.AbstractCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_pseudoVariables",
|
|
"_pseudoVariables",
|
|
@@ -1895,41 +2114,7 @@ source: "pseudoVariables\x0a\x09^#('self' 'super' 'true' 'false' 'nil' 'thisCont
|
|
messageSends: [],
|
|
messageSends: [],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.AbstractCompiler);
|
|
|
|
-
|
|
|
|
-smalltalk.addMethod(
|
|
|
|
-"_recompile_",
|
|
|
|
-smalltalk.method({
|
|
|
|
-selector: "recompile:",
|
|
|
|
-category: 'compiling',
|
|
|
|
-fn: function (aClass){
|
|
|
|
-var self=this;
|
|
|
|
-smalltalk.send(smalltalk.send(aClass, "_methodDictionary", []), "_do_", [(function(each){return smalltalk.send(self, "_install_forClass_category_", [smalltalk.send(each, "_source", []), aClass, smalltalk.send(each, "_category", [])]);})]);
|
|
|
|
-smalltalk.send(self, "_setupClass_", [aClass]);
|
|
|
|
-((($receiver = smalltalk.send(aClass, "_isMetaclass", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_recompile_", [smalltalk.send(aClass, "_class", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_recompile_", [smalltalk.send(aClass, "_class", [])]);})]));
|
|
|
|
-return self;},
|
|
|
|
-args: ["aClass"],
|
|
|
|
-source: "recompile: aClass\x0a\x09aClass methodDictionary do: [:each |\x0a\x09\x09self install: each source forClass: aClass category: each category].\x0a\x09self setupClass: aClass.\x0a\x09aClass isMetaclass ifFalse: [self recompile: aClass class]",
|
|
|
|
-messageSends: ["do:", "methodDictionary", "install:forClass:category:", "source", "category", "setupClass:", "ifFalse:", "isMetaclass", "recompile:", "class"],
|
|
|
|
-referencedClasses: []
|
|
|
|
-}),
|
|
|
|
-smalltalk.AbstractCompiler);
|
|
|
|
-
|
|
|
|
-smalltalk.addMethod(
|
|
|
|
-"_recompileAll",
|
|
|
|
-smalltalk.method({
|
|
|
|
-selector: "recompileAll",
|
|
|
|
-category: 'compiling',
|
|
|
|
-fn: function (){
|
|
|
|
-var self=this;
|
|
|
|
-smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "_do_", [(function(each){(function($rec){smalltalk.send($rec, "_show_", [each]);return smalltalk.send($rec, "_cr", []);})((smalltalk.Transcript || Transcript));return smalltalk.send((function(){return smalltalk.send(self, "_recompile_", [each]);}), "_valueWithTimeout_", [(100)]);})]);
|
|
|
|
-return self;},
|
|
|
|
-args: [],
|
|
|
|
-source: "recompileAll\x0a\x09Smalltalk current classes do: [:each |\x0a\x09\x09Transcript show: each; cr.\x0a\x09\x09[self recompile: each] valueWithTimeout: 100]",
|
|
|
|
-messageSends: ["do:", "classes", "current", "show:", "cr", "valueWithTimeout:", "recompile:"],
|
|
|
|
-referencedClasses: ["Smalltalk", "Transcript"]
|
|
|
|
-}),
|
|
|
|
-smalltalk.AbstractCompiler);
|
|
|
|
|
|
+smalltalk.AbstractCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_safeVariableNameFor_",
|
|
"_safeVariableNameFor_",
|
|
@@ -1945,23 +2130,7 @@ source: "safeVariableNameFor: aString\x0a\x09^(Smalltalk current reservedWords i
|
|
messageSends: ["ifTrue:ifFalse:", "includes:", "reservedWords", "current", ","],
|
|
messageSends: ["ifTrue:ifFalse:", "includes:", "reservedWords", "current", ","],
|
|
referencedClasses: ["Smalltalk"]
|
|
referencedClasses: ["Smalltalk"]
|
|
}),
|
|
}),
|
|
-smalltalk.AbstractCompiler);
|
|
|
|
-
|
|
|
|
-smalltalk.addMethod(
|
|
|
|
-"_setupClass_",
|
|
|
|
-smalltalk.method({
|
|
|
|
-selector: "setupClass:",
|
|
|
|
-category: 'compiling',
|
|
|
|
-fn: function (aClass){
|
|
|
|
-var self=this;
|
|
|
|
-smalltalk.init(aClass);
|
|
|
|
-return self;},
|
|
|
|
-args: ["aClass"],
|
|
|
|
-source: "setupClass: aClass\x0a\x09<smalltalk.init(aClass)>",
|
|
|
|
-messageSends: [],
|
|
|
|
-referencedClasses: []
|
|
|
|
-}),
|
|
|
|
-smalltalk.AbstractCompiler);
|
|
|
|
|
|
+smalltalk.AbstractCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_source",
|
|
"_source",
|
|
@@ -1977,7 +2146,7 @@ source: "source\x0a\x09^source ifNil: ['']",
|
|
messageSends: ["ifNil:"],
|
|
messageSends: ["ifNil:"],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.AbstractCompiler);
|
|
|
|
|
|
+smalltalk.AbstractCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_source_",
|
|
"_source_",
|
|
@@ -1993,43 +2162,11 @@ source: "source: aString\x0a\x09source := aString",
|
|
messageSends: [],
|
|
messageSends: [],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.AbstractCompiler);
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-smalltalk.addMethod(
|
|
|
|
-"_recompile_",
|
|
|
|
-smalltalk.method({
|
|
|
|
-selector: "recompile:",
|
|
|
|
-category: 'compiling',
|
|
|
|
-fn: function (aClass){
|
|
|
|
-var self=this;
|
|
|
|
-smalltalk.send(smalltalk.send(self, "_new", []), "_recompile_", [aClass]);
|
|
|
|
-return self;},
|
|
|
|
-args: ["aClass"],
|
|
|
|
-source: "recompile: aClass\x0a\x09self new recompile: aClass",
|
|
|
|
-messageSends: ["recompile:", "new"],
|
|
|
|
-referencedClasses: []
|
|
|
|
-}),
|
|
|
|
-smalltalk.AbstractCompiler.klass);
|
|
|
|
|
|
+smalltalk.AbstractCodeGenerator);
|
|
|
|
|
|
-smalltalk.addMethod(
|
|
|
|
-"_recompileAll",
|
|
|
|
-smalltalk.method({
|
|
|
|
-selector: "recompileAll",
|
|
|
|
-category: 'compiling',
|
|
|
|
-fn: function (){
|
|
|
|
-var self=this;
|
|
|
|
-smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "_do_", [(function(each){return smalltalk.send(self, "_recompile_", [each]);})]);
|
|
|
|
-return self;},
|
|
|
|
-args: [],
|
|
|
|
-source: "recompileAll\x0a\x09Smalltalk current classes do: [:each |\x0a\x09\x09self recompile: each]",
|
|
|
|
-messageSends: ["do:", "classes", "current", "recompile:"],
|
|
|
|
-referencedClasses: ["Smalltalk"]
|
|
|
|
-}),
|
|
|
|
-smalltalk.AbstractCompiler.klass);
|
|
|
|
|
|
|
|
|
|
|
|
-smalltalk.addClass('Compiler', smalltalk.AbstractCompiler, ['stream', 'nestedBlocks', 'earlyReturn', 'currentSelector', 'unknownVariables', 'tempVariables', 'messageSends', 'referencedClasses', 'classReferenced', 'argVariables'], 'Compiler');
|
|
|
|
|
|
+smalltalk.addClass('FunCodeGenerator', smalltalk.AbstractCodeGenerator, ['stream', 'nestedBlocks', 'earlyReturn', 'currentSelector', 'unknownVariables', 'tempVariables', 'messageSends', 'referencedClasses', 'classReferenced', 'argVariables'], 'Compiler');
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_argVariables",
|
|
"_argVariables",
|
|
smalltalk.method({
|
|
smalltalk.method({
|
|
@@ -2044,7 +2181,7 @@ source: "argVariables\x0a\x09^argVariables copy",
|
|
messageSends: ["copy"],
|
|
messageSends: ["copy"],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.Compiler);
|
|
|
|
|
|
+smalltalk.FunCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_checkClass_for_",
|
|
"_checkClass_for_",
|
|
@@ -2060,7 +2197,7 @@ source: "checkClass: aClassName for: receiver\x0a stream nextPutAll: '(((
|
|
messageSends: ["nextPutAll:", ","],
|
|
messageSends: ["nextPutAll:", ","],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.Compiler);
|
|
|
|
|
|
+smalltalk.FunCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_compileNode_",
|
|
"_compileNode_",
|
|
@@ -2078,7 +2215,7 @@ source: "compileNode: aNode\x0a\x09stream := '' writeStream.\x0a\x09self visit:
|
|
messageSends: ["writeStream", "visit:", "contents"],
|
|
messageSends: ["writeStream", "visit:", "contents"],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.Compiler);
|
|
|
|
|
|
+smalltalk.FunCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_initialize",
|
|
"_initialize",
|
|
@@ -2087,7 +2224,7 @@ selector: "initialize",
|
|
category: 'initialization',
|
|
category: 'initialization',
|
|
fn: function (){
|
|
fn: function (){
|
|
var self=this;
|
|
var self=this;
|
|
-smalltalk.send(self, "_initialize", [], smalltalk.Compiler.superclass || nil);
|
|
|
|
|
|
+smalltalk.send(self, "_initialize", [], smalltalk.FunCodeGenerator.superclass || nil);
|
|
(self['@stream']=smalltalk.send("", "_writeStream", []));
|
|
(self['@stream']=smalltalk.send("", "_writeStream", []));
|
|
(self['@unknownVariables']=[]);
|
|
(self['@unknownVariables']=[]);
|
|
(self['@tempVariables']=[]);
|
|
(self['@tempVariables']=[]);
|
|
@@ -2100,7 +2237,7 @@ source: "initialize\x0a\x09super initialize.\x0a\x09stream := '' writeStream. \x
|
|
messageSends: ["initialize", "writeStream"],
|
|
messageSends: ["initialize", "writeStream"],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.Compiler);
|
|
|
|
|
|
+smalltalk.FunCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_inline_receiver_argumentNodes_",
|
|
"_inline_receiver_argumentNodes_",
|
|
@@ -2130,7 +2267,7 @@ source: "inline: aSelector receiver: receiver argumentNodes: aCollection\x0a
|
|
messageSends: ["ifTrue:", "=", "isBlockNode", "first", "checkClass:for:", "nextPutAll:", "visit:", "and:", "second"],
|
|
messageSends: ["ifTrue:", "=", "isBlockNode", "first", "checkClass:for:", "nextPutAll:", "visit:", "and:", "second"],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.Compiler);
|
|
|
|
|
|
+smalltalk.FunCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_inlineLiteral_receiverNode_argumentNodes_",
|
|
"_inlineLiteral_receiverNode_argumentNodes_",
|
|
@@ -2164,7 +2301,7 @@ source: "inlineLiteral: aSelector receiverNode: anObject argumentNodes: aCollect
|
|
messageSends: ["ifTrue:", "=", "and:", "isBlockNode", "first", "nextPutAll:", "visit:", "isNode:ofClass:", "second"],
|
|
messageSends: ["ifTrue:", "=", "and:", "isBlockNode", "first", "nextPutAll:", "visit:", "isNode:ofClass:", "second"],
|
|
referencedClasses: ["Number"]
|
|
referencedClasses: ["Number"]
|
|
}),
|
|
}),
|
|
-smalltalk.Compiler);
|
|
|
|
|
|
+smalltalk.FunCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_isNode_ofClass_",
|
|
"_isNode_ofClass_",
|
|
@@ -2180,7 +2317,7 @@ source: "isNode: aNode ofClass: aClass\x0a\x09^aNode isValueNode and: [\x0a
|
|
messageSends: ["and:", "isValueNode", "or:", "=", "class", "value", "currentClass"],
|
|
messageSends: ["and:", "isValueNode", "or:", "=", "class", "value", "currentClass"],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.Compiler);
|
|
|
|
|
|
+smalltalk.FunCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_knownVariables",
|
|
"_knownVariables",
|
|
@@ -2196,7 +2333,7 @@ source: "knownVariables\x0a\x09^self pseudoVariables \x0a\x09\x09addAll: self te
|
|
messageSends: ["addAll:", "tempVariables", "argVariables", "yourself", "pseudoVariables"],
|
|
messageSends: ["addAll:", "tempVariables", "argVariables", "yourself", "pseudoVariables"],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.Compiler);
|
|
|
|
|
|
+smalltalk.FunCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_performOptimizations",
|
|
"_performOptimizations",
|
|
@@ -2212,7 +2349,7 @@ source: "performOptimizations\x0a\x09^self class performOptimizations",
|
|
messageSends: ["performOptimizations", "class"],
|
|
messageSends: ["performOptimizations", "class"],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.Compiler);
|
|
|
|
|
|
+smalltalk.FunCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_send_to_arguments_superSend_",
|
|
"_send_to_arguments_superSend_",
|
|
@@ -2229,7 +2366,7 @@ source: "send: aSelector to: aReceiver arguments: aCollection superSend: aBoolea
|
|
messageSends: ["streamContents:", "nextPutAll:", ",", "asSelector", "do:separatedBy:", "visit:", "ifTrue:", "classNameFor:", "currentClass"],
|
|
messageSends: ["streamContents:", "nextPutAll:", ",", "asSelector", "do:separatedBy:", "visit:", "ifTrue:", "classNameFor:", "currentClass"],
|
|
referencedClasses: ["String"]
|
|
referencedClasses: ["String"]
|
|
}),
|
|
}),
|
|
-smalltalk.Compiler);
|
|
|
|
|
|
+smalltalk.FunCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_tempVariables",
|
|
"_tempVariables",
|
|
@@ -2245,7 +2382,7 @@ source: "tempVariables\x0a\x09^tempVariables copy",
|
|
messageSends: ["copy"],
|
|
messageSends: ["copy"],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.Compiler);
|
|
|
|
|
|
+smalltalk.FunCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_unknownVariables",
|
|
"_unknownVariables",
|
|
@@ -2261,7 +2398,7 @@ source: "unknownVariables\x0a\x09^unknownVariables copy",
|
|
messageSends: ["copy"],
|
|
messageSends: ["copy"],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.Compiler);
|
|
|
|
|
|
+smalltalk.FunCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_visit_",
|
|
"_visit_",
|
|
@@ -2277,7 +2414,7 @@ source: "visit: aNode\x0a\x09aNode accept: self",
|
|
messageSends: ["accept:"],
|
|
messageSends: ["accept:"],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.Compiler);
|
|
|
|
|
|
+smalltalk.FunCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_visitAssignmentNode_",
|
|
"_visitAssignmentNode_",
|
|
@@ -2297,7 +2434,7 @@ source: "visitAssignmentNode: aNode\x0a\x09stream nextPutAll: '('.\x0a\x09self v
|
|
messageSends: ["nextPutAll:", "visit:", "left", "right"],
|
|
messageSends: ["nextPutAll:", "visit:", "left", "right"],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.Compiler);
|
|
|
|
|
|
+smalltalk.FunCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_visitBlockNode_",
|
|
"_visitBlockNode_",
|
|
@@ -2317,7 +2454,7 @@ source: "visitBlockNode: aNode\x0a\x09stream nextPutAll: '(function('.\x0a\x09aN
|
|
messageSends: ["nextPutAll:", "do:separatedBy:", "parameters", "add:", "do:", "nodes", "visit:"],
|
|
messageSends: ["nextPutAll:", "do:separatedBy:", "parameters", "add:", "do:", "nodes", "visit:"],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.Compiler);
|
|
|
|
|
|
+smalltalk.FunCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_visitBlockSequenceNode_",
|
|
"_visitBlockSequenceNode_",
|
|
@@ -2338,7 +2475,7 @@ source: "visitBlockSequenceNode: aNode\x0a\x09| index |\x0a\x09nestedBlocks := n
|
|
messageSends: ["+", "ifTrue:ifFalse:", "isEmpty", "nodes", "nextPutAll:", "do:", "temps", "safeVariableNameFor:", "add:", ",", "lf", "ifTrue:", "=", "size", "visit:", "-"],
|
|
messageSends: ["+", "ifTrue:ifFalse:", "isEmpty", "nodes", "nextPutAll:", "do:", "temps", "safeVariableNameFor:", "add:", ",", "lf", "ifTrue:", "=", "size", "visit:", "-"],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.Compiler);
|
|
|
|
|
|
+smalltalk.FunCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_visitCascadeNode_",
|
|
"_visitCascadeNode_",
|
|
@@ -2361,7 +2498,7 @@ source: "visitCascadeNode: aNode\x0a\x09| index |\x0a\x09index := 0.\x0a\x09(tem
|
|
messageSends: ["ifFalse:", "includes:", "add:", "nextPutAll:", "do:", "nodes", "+", "ifTrue:", "=", "size", "receiver:", "value:", "new", "visit:", "receiver"],
|
|
messageSends: ["ifFalse:", "includes:", "add:", "nextPutAll:", "do:", "nodes", "+", "ifTrue:", "=", "size", "receiver:", "value:", "new", "visit:", "receiver"],
|
|
referencedClasses: ["VariableNode"]
|
|
referencedClasses: ["VariableNode"]
|
|
}),
|
|
}),
|
|
-smalltalk.Compiler);
|
|
|
|
|
|
+smalltalk.FunCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_visitClassReferenceNode_",
|
|
"_visitClassReferenceNode_",
|
|
@@ -2378,7 +2515,7 @@ source: "visitClassReferenceNode: aNode\x0a\x09(referencedClasses includes: aNod
|
|
messageSends: ["ifFalse:", "includes:", "value", "add:", "nextPutAll:", ","],
|
|
messageSends: ["ifFalse:", "includes:", "value", "add:", "nextPutAll:", ","],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.Compiler);
|
|
|
|
|
|
+smalltalk.FunCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_visitDynamicArrayNode_",
|
|
"_visitDynamicArrayNode_",
|
|
@@ -2396,7 +2533,7 @@ source: "visitDynamicArrayNode: aNode\x0a\x09stream nextPutAll: '['.\x0a\x09aNod
|
|
messageSends: ["nextPutAll:", "do:separatedBy:", "nodes", "visit:"],
|
|
messageSends: ["nextPutAll:", "do:separatedBy:", "nodes", "visit:"],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.Compiler);
|
|
|
|
|
|
+smalltalk.FunCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_visitDynamicDictionaryNode_",
|
|
"_visitDynamicDictionaryNode_",
|
|
@@ -2414,7 +2551,7 @@ source: "visitDynamicDictionaryNode: aNode\x0a\x09stream nextPutAll: 'smalltalk.
|
|
messageSends: ["nextPutAll:", "do:separatedBy:", "nodes", "visit:"],
|
|
messageSends: ["nextPutAll:", "do:separatedBy:", "nodes", "visit:"],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.Compiler);
|
|
|
|
|
|
+smalltalk.FunCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_visitFailure_",
|
|
"_visitFailure_",
|
|
@@ -2430,7 +2567,7 @@ source: "visitFailure: aFailure\x0a\x09self error: aFailure asString",
|
|
messageSends: ["error:", "asString"],
|
|
messageSends: ["error:", "asString"],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.Compiler);
|
|
|
|
|
|
+smalltalk.FunCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_visitJSStatementNode_",
|
|
"_visitJSStatementNode_",
|
|
@@ -2446,7 +2583,7 @@ source: "visitJSStatementNode: aNode\x0a\x09stream nextPutAll: aNode source",
|
|
messageSends: ["nextPutAll:", "source"],
|
|
messageSends: ["nextPutAll:", "source"],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.Compiler);
|
|
|
|
|
|
+smalltalk.FunCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_visitMethodNode_",
|
|
"_visitMethodNode_",
|
|
@@ -2489,7 +2626,7 @@ source: "visitMethodNode: aNode\x0a\x09| str currentSelector | \x0a\x09currentSe
|
|
messageSends: ["asSelector", "selector", "nextPutAll:", "lf", ",", "asJavascript", "source", "do:separatedBy:", "arguments", "add:", "writeStream", "do:", "nodes", "visit:", "ifTrue:", "contents", "printString"],
|
|
messageSends: ["asSelector", "selector", "nextPutAll:", "lf", ",", "asJavascript", "source", "do:separatedBy:", "arguments", "add:", "writeStream", "do:", "nodes", "visit:", "ifTrue:", "contents", "printString"],
|
|
referencedClasses: ["String"]
|
|
referencedClasses: ["String"]
|
|
}),
|
|
}),
|
|
-smalltalk.Compiler);
|
|
|
|
|
|
+smalltalk.FunCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_visitReturnNode_",
|
|
"_visitReturnNode_",
|
|
@@ -2508,7 +2645,7 @@ source: "visitReturnNode: aNode\x0a\x09nestedBlocks > 0 ifTrue: [\x0a\x09 ear
|
|
messageSends: ["ifTrue:", ">", "ifTrue:ifFalse:", "nextPutAll:", "do:", "nodes", "visit:"],
|
|
messageSends: ["ifTrue:", ">", "ifTrue:ifFalse:", "nextPutAll:", "do:", "nodes", "visit:"],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.Compiler);
|
|
|
|
|
|
+smalltalk.FunCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_visitSendNode_",
|
|
"_visitSendNode_",
|
|
@@ -2535,7 +2672,7 @@ source: "visitSendNode: aNode\x0a | str receiver superSend inlined |\x0a
|
|
messageSends: ["ifFalse:", "includes:", "selector", "add:", "writeStream", "visit:", "receiver", "=", "contents", "ifTrue:ifFalse:", "performOptimizations", "inlineLiteral:receiverNode:argumentNodes:", "arguments", "inline:receiver:argumentNodes:", "nextPutAll:", ",", "send:to:arguments:superSend:"],
|
|
messageSends: ["ifFalse:", "includes:", "selector", "add:", "writeStream", "visit:", "receiver", "=", "contents", "ifTrue:ifFalse:", "performOptimizations", "inlineLiteral:receiverNode:argumentNodes:", "arguments", "inline:receiver:argumentNodes:", "nextPutAll:", ",", "send:to:arguments:superSend:"],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.Compiler);
|
|
|
|
|
|
+smalltalk.FunCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_visitSequenceNode_",
|
|
"_visitSequenceNode_",
|
|
@@ -2553,7 +2690,7 @@ source: "visitSequenceNode: aNode\x0a\x09aNode temps do: [:each || temp |\x0a
|
|
messageSends: ["do:", "temps", "safeVariableNameFor:", "add:", "nextPutAll:", ",", "lf", "do:separatedBy:", "nodes", "visit:"],
|
|
messageSends: ["do:", "temps", "safeVariableNameFor:", "add:", "nextPutAll:", ",", "lf", "do:separatedBy:", "nodes", "visit:"],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.Compiler);
|
|
|
|
|
|
+smalltalk.FunCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_visitValueNode_",
|
|
"_visitValueNode_",
|
|
@@ -2569,7 +2706,7 @@ source: "visitValueNode: aNode\x0a\x09stream nextPutAll: aNode value asJavascrip
|
|
messageSends: ["nextPutAll:", "asJavascript", "value"],
|
|
messageSends: ["nextPutAll:", "asJavascript", "value"],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.Compiler);
|
|
|
|
|
|
+smalltalk.FunCodeGenerator);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_visitVariableNode_",
|
|
"_visitVariableNode_",
|
|
@@ -2586,10 +2723,10 @@ source: "visitVariableNode: aNode\x0a\x09| varName |\x0a\x09(self currentClass a
|
|
messageSends: ["ifTrue:ifFalse:", "includes:", "allInstanceVariableNames", "currentClass", "value", "nextPutAll:", ",", "safeVariableNameFor:", "ifFalse:ifTrue:", "knownVariables", "add:", "assigned", "="],
|
|
messageSends: ["ifTrue:ifFalse:", "includes:", "allInstanceVariableNames", "currentClass", "value", "nextPutAll:", ",", "safeVariableNameFor:", "ifFalse:ifTrue:", "knownVariables", "add:", "assigned", "="],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.Compiler);
|
|
|
|
|
|
+smalltalk.FunCodeGenerator);
|
|
|
|
|
|
|
|
|
|
-smalltalk.Compiler.klass.iVarNames = ['performOptimizations'];
|
|
|
|
|
|
+smalltalk.FunCodeGenerator.klass.iVarNames = ['performOptimizations'];
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_performOptimizations",
|
|
"_performOptimizations",
|
|
smalltalk.method({
|
|
smalltalk.method({
|
|
@@ -2604,7 +2741,7 @@ source: "performOptimizations\x0a\x09^performOptimizations ifNil: [true]",
|
|
messageSends: ["ifNil:"],
|
|
messageSends: ["ifNil:"],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.Compiler.klass);
|
|
|
|
|
|
+smalltalk.FunCodeGenerator.klass);
|
|
|
|
|
|
smalltalk.addMethod(
|
|
smalltalk.addMethod(
|
|
"_performOptimizations_",
|
|
"_performOptimizations_",
|
|
@@ -2620,6 +2757,6 @@ source: "performOptimizations: aBoolean\x0a\x09performOptimizations := aBoolean"
|
|
messageSends: [],
|
|
messageSends: [],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
-smalltalk.Compiler.klass);
|
|
|
|
|
|
+smalltalk.FunCodeGenerator.klass);
|
|
|
|
|
|
|
|
|