Browse Source

Compiler API part split from CodeGenerator part.

Herbert Vojčík 12 years ago
parent
commit
470a01b0ab
3 changed files with 822 additions and 541 deletions
  1. 289 192
      js/Compiler.deploy.js
  2. 401 264
      js/Compiler.js
  3. 132 85
      st/Compiler.st

File diff suppressed because it is too large
+ 289 - 192
js/Compiler.deploy.js


+ 401 - 264
js/Compiler.js

@@ -57,6 +57,365 @@ referencedClasses: []
 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');
 
 
@@ -1676,7 +2035,7 @@ smalltalk.NodeVisitor);
 
 
 
-smalltalk.addClass('AbstractCompiler', smalltalk.NodeVisitor, ['currentClass', 'source'], 'Compiler');
+smalltalk.addClass('AbstractCodeGenerator', smalltalk.NodeVisitor, ['currentClass', 'source'], 'Compiler');
 smalltalk.addMethod(
 "_classNameFor_",
 smalltalk.method({
@@ -1691,59 +2050,7 @@ source: "classNameFor: aClass\x0a\x09^aClass isMetaclass\x0a\x09    ifTrue: [aCl
 messageSends: ["ifTrue:ifFalse:", "isMetaclass", ",", "name", "instanceClass", "isNil"],
 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(
 "_compileNode_",
@@ -1759,7 +2066,7 @@ source: "compileNode: aNode\x0a\x09self subclassResponsibility",
 messageSends: ["subclassResponsibility"],
 referencedClasses: []
 }),
-smalltalk.AbstractCompiler);
+smalltalk.AbstractCodeGenerator);
 
 smalltalk.addMethod(
 "_currentClass",
@@ -1775,7 +2082,7 @@ source: "currentClass\x0a\x09^currentClass",
 messageSends: [],
 referencedClasses: []
 }),
-smalltalk.AbstractCompiler);
+smalltalk.AbstractCodeGenerator);
 
 smalltalk.addMethod(
 "_currentClass_",
@@ -1791,95 +2098,7 @@ source: "currentClass: aClass\x0a\x09currentClass := aClass",
 messageSends: [],
 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(
 "_pseudoVariables",
@@ -1895,41 +2114,7 @@ source: "pseudoVariables\x0a\x09^#('self' 'super' 'true' 'false' 'nil' 'thisCont
 messageSends: [],
 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(
 "_safeVariableNameFor_",
@@ -1945,23 +2130,7 @@ source: "safeVariableNameFor: aString\x0a\x09^(Smalltalk current reservedWords i
 messageSends: ["ifTrue:ifFalse:", "includes:", "reservedWords", "current", ","],
 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(
 "_source",
@@ -1977,7 +2146,7 @@ source: "source\x0a\x09^source ifNil: ['']",
 messageSends: ["ifNil:"],
 referencedClasses: []
 }),
-smalltalk.AbstractCompiler);
+smalltalk.AbstractCodeGenerator);
 
 smalltalk.addMethod(
 "_source_",
@@ -1993,43 +2162,11 @@ source: "source: aString\x0a\x09source := aString",
 messageSends: [],
 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(
 "_argVariables",
 smalltalk.method({
@@ -2044,7 +2181,7 @@ source: "argVariables\x0a\x09^argVariables copy",
 messageSends: ["copy"],
 referencedClasses: []
 }),
-smalltalk.Compiler);
+smalltalk.FunCodeGenerator);
 
 smalltalk.addMethod(
 "_checkClass_for_",
@@ -2060,7 +2197,7 @@ source: "checkClass: aClassName for: receiver\x0a        stream nextPutAll: '(((
 messageSends: ["nextPutAll:", ","],
 referencedClasses: []
 }),
-smalltalk.Compiler);
+smalltalk.FunCodeGenerator);
 
 smalltalk.addMethod(
 "_compileNode_",
@@ -2078,7 +2215,7 @@ source: "compileNode: aNode\x0a\x09stream := '' writeStream.\x0a\x09self visit:
 messageSends: ["writeStream", "visit:", "contents"],
 referencedClasses: []
 }),
-smalltalk.Compiler);
+smalltalk.FunCodeGenerator);
 
 smalltalk.addMethod(
 "_initialize",
@@ -2087,7 +2224,7 @@ selector: "initialize",
 category: 'initialization',
 fn: function (){
 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['@unknownVariables']=[]);
 (self['@tempVariables']=[]);
@@ -2100,7 +2237,7 @@ source: "initialize\x0a\x09super initialize.\x0a\x09stream := '' writeStream. \x
 messageSends: ["initialize", "writeStream"],
 referencedClasses: []
 }),
-smalltalk.Compiler);
+smalltalk.FunCodeGenerator);
 
 smalltalk.addMethod(
 "_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"],
 referencedClasses: []
 }),
-smalltalk.Compiler);
+smalltalk.FunCodeGenerator);
 
 smalltalk.addMethod(
 "_inlineLiteral_receiverNode_argumentNodes_",
@@ -2164,7 +2301,7 @@ source: "inlineLiteral: aSelector receiverNode: anObject argumentNodes: aCollect
 messageSends: ["ifTrue:", "=", "and:", "isBlockNode", "first", "nextPutAll:", "visit:", "isNode:ofClass:", "second"],
 referencedClasses: ["Number"]
 }),
-smalltalk.Compiler);
+smalltalk.FunCodeGenerator);
 
 smalltalk.addMethod(
 "_isNode_ofClass_",
@@ -2180,7 +2317,7 @@ source: "isNode: aNode ofClass: aClass\x0a\x09^aNode isValueNode and: [\x0a
 messageSends: ["and:", "isValueNode", "or:", "=", "class", "value", "currentClass"],
 referencedClasses: []
 }),
-smalltalk.Compiler);
+smalltalk.FunCodeGenerator);
 
 smalltalk.addMethod(
 "_knownVariables",
@@ -2196,7 +2333,7 @@ source: "knownVariables\x0a\x09^self pseudoVariables \x0a\x09\x09addAll: self te
 messageSends: ["addAll:", "tempVariables", "argVariables", "yourself", "pseudoVariables"],
 referencedClasses: []
 }),
-smalltalk.Compiler);
+smalltalk.FunCodeGenerator);
 
 smalltalk.addMethod(
 "_performOptimizations",
@@ -2212,7 +2349,7 @@ source: "performOptimizations\x0a\x09^self class performOptimizations",
 messageSends: ["performOptimizations", "class"],
 referencedClasses: []
 }),
-smalltalk.Compiler);
+smalltalk.FunCodeGenerator);
 
 smalltalk.addMethod(
 "_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"],
 referencedClasses: ["String"]
 }),
-smalltalk.Compiler);
+smalltalk.FunCodeGenerator);
 
 smalltalk.addMethod(
 "_tempVariables",
@@ -2245,7 +2382,7 @@ source: "tempVariables\x0a\x09^tempVariables copy",
 messageSends: ["copy"],
 referencedClasses: []
 }),
-smalltalk.Compiler);
+smalltalk.FunCodeGenerator);
 
 smalltalk.addMethod(
 "_unknownVariables",
@@ -2261,7 +2398,7 @@ source: "unknownVariables\x0a\x09^unknownVariables copy",
 messageSends: ["copy"],
 referencedClasses: []
 }),
-smalltalk.Compiler);
+smalltalk.FunCodeGenerator);
 
 smalltalk.addMethod(
 "_visit_",
@@ -2277,7 +2414,7 @@ source: "visit: aNode\x0a\x09aNode accept: self",
 messageSends: ["accept:"],
 referencedClasses: []
 }),
-smalltalk.Compiler);
+smalltalk.FunCodeGenerator);
 
 smalltalk.addMethod(
 "_visitAssignmentNode_",
@@ -2297,7 +2434,7 @@ source: "visitAssignmentNode: aNode\x0a\x09stream nextPutAll: '('.\x0a\x09self v
 messageSends: ["nextPutAll:", "visit:", "left", "right"],
 referencedClasses: []
 }),
-smalltalk.Compiler);
+smalltalk.FunCodeGenerator);
 
 smalltalk.addMethod(
 "_visitBlockNode_",
@@ -2317,7 +2454,7 @@ source: "visitBlockNode: aNode\x0a\x09stream nextPutAll: '(function('.\x0a\x09aN
 messageSends: ["nextPutAll:", "do:separatedBy:", "parameters", "add:", "do:", "nodes", "visit:"],
 referencedClasses: []
 }),
-smalltalk.Compiler);
+smalltalk.FunCodeGenerator);
 
 smalltalk.addMethod(
 "_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:", "-"],
 referencedClasses: []
 }),
-smalltalk.Compiler);
+smalltalk.FunCodeGenerator);
 
 smalltalk.addMethod(
 "_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"],
 referencedClasses: ["VariableNode"]
 }),
-smalltalk.Compiler);
+smalltalk.FunCodeGenerator);
 
 smalltalk.addMethod(
 "_visitClassReferenceNode_",
@@ -2378,7 +2515,7 @@ source: "visitClassReferenceNode: aNode\x0a\x09(referencedClasses includes: aNod
 messageSends: ["ifFalse:", "includes:", "value", "add:", "nextPutAll:", ","],
 referencedClasses: []
 }),
-smalltalk.Compiler);
+smalltalk.FunCodeGenerator);
 
 smalltalk.addMethod(
 "_visitDynamicArrayNode_",
@@ -2396,7 +2533,7 @@ source: "visitDynamicArrayNode: aNode\x0a\x09stream nextPutAll: '['.\x0a\x09aNod
 messageSends: ["nextPutAll:", "do:separatedBy:", "nodes", "visit:"],
 referencedClasses: []
 }),
-smalltalk.Compiler);
+smalltalk.FunCodeGenerator);
 
 smalltalk.addMethod(
 "_visitDynamicDictionaryNode_",
@@ -2414,7 +2551,7 @@ source: "visitDynamicDictionaryNode: aNode\x0a\x09stream nextPutAll: 'smalltalk.
 messageSends: ["nextPutAll:", "do:separatedBy:", "nodes", "visit:"],
 referencedClasses: []
 }),
-smalltalk.Compiler);
+smalltalk.FunCodeGenerator);
 
 smalltalk.addMethod(
 "_visitFailure_",
@@ -2430,7 +2567,7 @@ source: "visitFailure: aFailure\x0a\x09self error: aFailure asString",
 messageSends: ["error:", "asString"],
 referencedClasses: []
 }),
-smalltalk.Compiler);
+smalltalk.FunCodeGenerator);
 
 smalltalk.addMethod(
 "_visitJSStatementNode_",
@@ -2446,7 +2583,7 @@ source: "visitJSStatementNode: aNode\x0a\x09stream nextPutAll: aNode source",
 messageSends: ["nextPutAll:", "source"],
 referencedClasses: []
 }),
-smalltalk.Compiler);
+smalltalk.FunCodeGenerator);
 
 smalltalk.addMethod(
 "_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"],
 referencedClasses: ["String"]
 }),
-smalltalk.Compiler);
+smalltalk.FunCodeGenerator);
 
 smalltalk.addMethod(
 "_visitReturnNode_",
@@ -2508,7 +2645,7 @@ source: "visitReturnNode: aNode\x0a\x09nestedBlocks > 0 ifTrue: [\x0a\x09    ear
 messageSends: ["ifTrue:", ">", "ifTrue:ifFalse:", "nextPutAll:", "do:", "nodes", "visit:"],
 referencedClasses: []
 }),
-smalltalk.Compiler);
+smalltalk.FunCodeGenerator);
 
 smalltalk.addMethod(
 "_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:"],
 referencedClasses: []
 }),
-smalltalk.Compiler);
+smalltalk.FunCodeGenerator);
 
 smalltalk.addMethod(
 "_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:"],
 referencedClasses: []
 }),
-smalltalk.Compiler);
+smalltalk.FunCodeGenerator);
 
 smalltalk.addMethod(
 "_visitValueNode_",
@@ -2569,7 +2706,7 @@ source: "visitValueNode: aNode\x0a\x09stream nextPutAll: aNode value asJavascrip
 messageSends: ["nextPutAll:", "asJavascript", "value"],
 referencedClasses: []
 }),
-smalltalk.Compiler);
+smalltalk.FunCodeGenerator);
 
 smalltalk.addMethod(
 "_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", "="],
 referencedClasses: []
 }),
-smalltalk.Compiler);
+smalltalk.FunCodeGenerator);
 
 
-smalltalk.Compiler.klass.iVarNames = ['performOptimizations'];
+smalltalk.FunCodeGenerator.klass.iVarNames = ['performOptimizations'];
 smalltalk.addMethod(
 "_performOptimizations",
 smalltalk.method({
@@ -2604,7 +2741,7 @@ source: "performOptimizations\x0a\x09^performOptimizations ifNil: [true]",
 messageSends: ["ifNil:"],
 referencedClasses: []
 }),
-smalltalk.Compiler.klass);
+smalltalk.FunCodeGenerator.klass);
 
 smalltalk.addMethod(
 "_performOptimizations_",
@@ -2620,6 +2757,6 @@ source: "performOptimizations: aBoolean\x0a\x09performOptimizations := aBoolean"
 messageSends: [],
 referencedClasses: []
 }),
-smalltalk.Compiler.klass);
+smalltalk.FunCodeGenerator.klass);
 
 

+ 132 - 85
st/Compiler.st

@@ -40,6 +40,126 @@ on: aStream
 	^self new stream: aStream
 ! !
 
+Object subclass: #Compiler
+	instanceVariableNames: 'currentClass source unknownVariables'
+	package: 'Compiler'!
+
+!Compiler methodsFor: 'accessing'!
+
+codeGeneratorClass
+	^FunCodeGenerator
+!
+
+currentClass
+	^currentClass
+!
+
+currentClass: aClass
+	currentClass := aClass
+!
+
+source
+	^source ifNil: ['']
+!
+
+source: aString
+	source := aString
+!
+
+unknownVariables
+	^unknownVariables
+!
+
+unknownVariables: aCollection
+	unknownVariables := aCollection
+! !
+
+!Compiler methodsFor: 'compiling'!
+
+compile: aString
+	^self compileNode: (self parse: aString)
+!
+
+compile: aString forClass: aClass
+	self currentClass: aClass.
+	self source: aString.
+	^self compile: aString
+!
+
+compileExpression: aString
+	self currentClass: DoIt.
+	self source: 'doIt ^[', aString, '] value'.
+	^self compileNode: (self parse: self source)
+!
+
+compileNode: aNode
+	| generator result |
+	generator := self codeGeneratorClass new.
+	generator
+		source: self source;
+		currentClass: self currentClass.
+	result := generator compileNode: aNode.
+	self unknownVariables: generator unknownVariables.
+	^result
+!
+
+eval: aString
+	<return eval(aString)>
+!
+
+evaluateExpression: aString
+	"Unlike #eval: evaluate a Smalltalk expression and answer the returned object"
+	| result |
+	DoIt addCompiledMethod: (self eval: (self compileExpression: aString)).
+	result := DoIt new doIt.
+	DoIt removeCompiledMethod: (DoIt methodDictionary at: 'doIt').
+	^result
+!
+
+install: aString forClass: aBehavior category: anotherString
+	| compiled |
+	compiled := self eval: (self compile: aString forClass: aBehavior).
+	compiled category: anotherString.
+	aBehavior addCompiledMethod: compiled.
+	^compiled
+!
+
+parse: aString
+    ^Smalltalk current parse: aString
+!
+
+parseExpression: aString
+    ^self parse: 'doIt ^[', aString, '] value'
+!
+
+recompile: aClass
+	aClass methodDictionary do: [:each |
+		self install: each source forClass: aClass category: each category].
+	self setupClass: aClass.
+	aClass isMetaclass ifFalse: [self recompile: aClass class]
+!
+
+recompileAll
+	Smalltalk current classes do: [:each |
+		Transcript show: each; cr.
+		[self recompile: each] valueWithTimeout: 100]
+!
+
+setupClass: aClass
+	<smalltalk.init(aClass)>
+! !
+
+!Compiler class methodsFor: 'compiling'!
+
+recompile: aClass
+	self new recompile: aClass
+!
+
+recompileAll
+	Smalltalk current classes do: [:each |
+		self recompile: each]
+! !
+
 Object subclass: #DoIt
 	instanceVariableNames: ''
 	package: 'Compiler'!
@@ -782,11 +902,11 @@ visitVariableNode: aNode
 	self visitNode: aNode
 ! !
 
-NodeVisitor subclass: #AbstractCompiler
+NodeVisitor subclass: #AbstractCodeGenerator
 	instanceVariableNames: 'currentClass source'
 	package: 'Compiler'!
 
-!AbstractCompiler methodsFor: 'accessing'!
+!AbstractCodeGenerator methodsFor: 'accessing'!
 
 classNameFor: aClass
 	^aClass isMetaclass
@@ -823,90 +943,17 @@ source: aString
 	source := aString
 ! !
 
-!AbstractCompiler methodsFor: 'compiling'!
-
-compile: aString
-	^self compileNode: (self parse: aString)
-!
-
-compile: aString forClass: aClass
-	self currentClass: aClass.
-	self source: aString.
-	^self compile: aString
-!
-
-compileExpression: aString
-	self currentClass: DoIt.
-	self source: 'doIt ^[', aString, '] value'.
-	^self compileNode: (self parse: self source)
-!
+!AbstractCodeGenerator methodsFor: 'compiling'!
 
 compileNode: aNode
 	self subclassResponsibility
-!
-
-eval: aString
-	<return eval(aString)>
-!
-
-evaluateExpression: aString
-	"Unlike #eval: evaluate a Smalltalk expression and answer the returned object"
-	| result |
-	DoIt addCompiledMethod: (self eval: (self compileExpression: aString)).
-	result := DoIt new doIt.
-	DoIt removeCompiledMethod: (DoIt methodDictionary at: 'doIt').
-	^result
-!
-
-install: aString forClass: aBehavior category: anotherString
-	| compiled |
-	compiled := self eval: (self compile: aString forClass: aBehavior).
-	compiled category: anotherString.
-	aBehavior addCompiledMethod: compiled.
-	^compiled
-!
-
-parse: aString
-    ^Smalltalk current parse: aString
-!
-
-parseExpression: aString
-    ^self parse: 'doIt ^[', aString, '] value'
-!
-
-recompile: aClass
-	aClass methodDictionary do: [:each |
-		self install: each source forClass: aClass category: each category].
-	self setupClass: aClass.
-	aClass isMetaclass ifFalse: [self recompile: aClass class]
-!
-
-recompileAll
-	Smalltalk current classes do: [:each |
-		Transcript show: each; cr.
-		[self recompile: each] valueWithTimeout: 100]
-!
-
-setupClass: aClass
-	<smalltalk.init(aClass)>
-! !
-
-!AbstractCompiler class methodsFor: 'compiling'!
-
-recompile: aClass
-	self new recompile: aClass
-!
-
-recompileAll
-	Smalltalk current classes do: [:each |
-		self recompile: each]
 ! !
 
-AbstractCompiler subclass: #Compiler
+AbstractCodeGenerator subclass: #FunCodeGenerator
 	instanceVariableNames: 'stream nestedBlocks earlyReturn currentSelector unknownVariables tempVariables messageSends referencedClasses classReferenced argVariables'
 	package: 'Compiler'!
 
-!Compiler methodsFor: 'accessing'!
+!FunCodeGenerator methodsFor: 'accessing'!
 
 argVariables
 	^argVariables copy
@@ -927,7 +974,7 @@ unknownVariables
 	^unknownVariables copy
 ! !
 
-!Compiler methodsFor: 'compiling'!
+!FunCodeGenerator methodsFor: 'compiling'!
 
 compileNode: aNode
 	stream := '' writeStream.
@@ -935,7 +982,7 @@ compileNode: aNode
 	^stream contents
 ! !
 
-!Compiler methodsFor: 'initialization'!
+!FunCodeGenerator methodsFor: 'initialization'!
 
 initialize
 	super initialize.
@@ -947,7 +994,7 @@ initialize
 	classReferenced := #()
 ! !
 
-!Compiler methodsFor: 'optimizations'!
+!FunCodeGenerator methodsFor: 'optimizations'!
 
 checkClass: aClassName for: receiver
         stream nextPutAll: '((($receiver = ', receiver, ').klass === smalltalk.', aClassName, ') ? '
@@ -1195,13 +1242,13 @@ isNode: aNode ofClass: aClass
           		aNode value = 'self' and: [self currentClass = aClass]]]
 ! !
 
-!Compiler methodsFor: 'testing'!
+!FunCodeGenerator methodsFor: 'testing'!
 
 performOptimizations
 	^self class performOptimizations
 ! !
 
-!Compiler methodsFor: 'visiting'!
+!FunCodeGenerator methodsFor: 'visiting'!
 
 send: aSelector to: aReceiver arguments: aCollection superSend: aBoolean
 	^String streamContents: [:str || tmp |
@@ -1429,9 +1476,9 @@ visitVariableNode: aNode
                 				ifFalse: [stream nextPutAll: varName]]]
 ! !
 
-Compiler class instanceVariableNames: 'performOptimizations'!
+FunCodeGenerator class instanceVariableNames: 'performOptimizations'!
 
-!Compiler class methodsFor: 'accessing'!
+!FunCodeGenerator class methodsFor: 'accessing'!
 
 performOptimizations
 	^performOptimizations ifNil: [true]

Some files were not shown because too many files changed in this diff