|
@@ -19,18 +19,25 @@ var self=this;
|
|
|
|
|
|
return $core.withContext(function($ctx1) {
|
|
return $core.withContext(function($ctx1) {
|
|
|
|
|
|
-self._subclassResponsibility();
|
|
+return $recv(self._transformers())._inject_into_(aNode,(function(input,transformer){
|
|
-return self;
|
|
+
|
|
|
|
+return $core.withContext(function($ctx2) {
|
|
|
|
+
|
|
|
|
+return $recv(transformer)._visit_(input);
|
|
|
|
+
|
|
|
|
+}, function($ctx2) {$ctx2.fillBlock({input:input,transformer:transformer},$ctx1,1)});
|
|
|
|
+
|
|
|
|
+}));
|
|
|
|
|
|
}, function($ctx1) {$ctx1.fill(self,"compileNode:",{aNode:aNode},$globals.AbstractCodeGenerator)});
|
|
}, function($ctx1) {$ctx1.fill(self,"compileNode:",{aNode:aNode},$globals.AbstractCodeGenerator)});
|
|
|
|
|
|
},
|
|
},
|
|
|
|
|
|
args: ["aNode"],
|
|
args: ["aNode"],
|
|
-source: "compileNode: aNode\x0a\x09self subclassResponsibility",
|
|
+source: "compileNode: aNode\x0a\x09^ self transformers\x0a\x09\x09inject: aNode\x0a\x09\x09into: [ :input :transformer | transformer visit: input ]",
|
|
referencedClasses: [],
|
|
referencedClasses: [],
|
|
|
|
|
|
-messageSends: ["subclassResponsibility"]
|
|
+messageSends: ["inject:into:", "transformers", "visit:"]
|
|
}),
|
|
}),
|
|
$globals.AbstractCodeGenerator);
|
|
$globals.AbstractCodeGenerator);
|
|
|
|
|
|
@@ -179,48 +186,36 @@ messageSends: []
|
|
}),
|
|
}),
|
|
$globals.AbstractCodeGenerator);
|
|
$globals.AbstractCodeGenerator);
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-$core.addClass('CodeGenerator', $globals.AbstractCodeGenerator, [], 'Compiler-Core');
|
|
|
|
-
|
|
|
|
-$globals.CodeGenerator.comment="I am a basic code generator. I generate a valid JavaScript output, but no not perform any inlining.\x0aSee `InliningCodeGenerator` for an optimized JavaScript code generation.";
|
|
|
|
-
|
|
|
|
$core.addMethod(
|
|
$core.addMethod(
|
|
$core.method({
|
|
$core.method({
|
|
-selector: "compileNode:",
|
|
+selector: "transformers",
|
|
protocol: 'compiling',
|
|
protocol: 'compiling',
|
|
-fn: function (aNode){
|
|
+fn: function (){
|
|
var self=this;
|
|
var self=this;
|
|
-var ir,stream;
|
|
|
|
|
|
|
|
return $core.withContext(function($ctx1) {
|
|
return $core.withContext(function($ctx1) {
|
|
|
|
|
|
-var $1;
|
|
+self._subclassResponsibility();
|
|
-$recv(self._semanticAnalyzer())._visit_(aNode);
|
|
+return self;
|
|
-
|
|
|
|
-$ctx1.sendIdx["visit:"]=1;
|
|
|
|
-
|
|
|
|
-ir=$recv(self._translator())._visit_(aNode);
|
|
|
|
-
|
|
|
|
-$ctx1.sendIdx["visit:"]=2;
|
|
|
|
-
|
|
|
|
-$1=self._irTranslator();
|
|
|
|
-$recv($1)._currentClass_(self._currentClass());
|
|
|
|
-$recv($1)._visit_(ir);
|
|
|
|
-return $recv($1)._contents();
|
|
|
|
|
|
|
|
-}, function($ctx1) {$ctx1.fill(self,"compileNode:",{aNode:aNode,ir:ir,stream:stream},$globals.CodeGenerator)});
|
|
+}, function($ctx1) {$ctx1.fill(self,"transformers",{},$globals.AbstractCodeGenerator)});
|
|
|
|
|
|
},
|
|
},
|
|
|
|
|
|
-args: ["aNode"],
|
|
+args: [],
|
|
-source: "compileNode: aNode\x0a\x09| ir stream |\x0a\x09self semanticAnalyzer visit: aNode.\x0a\x09ir := self translator visit: aNode.\x0a\x09^ self irTranslator\x0a\x09\x09currentClass: self currentClass;\x0a\x09\x09visit: ir;\x0a\x09\x09contents",
|
|
+source: "transformers\x0a\x09self subclassResponsibility",
|
|
referencedClasses: [],
|
|
referencedClasses: [],
|
|
|
|
|
|
-messageSends: ["visit:", "semanticAnalyzer", "translator", "currentClass:", "irTranslator", "currentClass", "contents"]
|
|
+messageSends: ["subclassResponsibility"]
|
|
}),
|
|
}),
|
|
-$globals.CodeGenerator);
|
|
+$globals.AbstractCodeGenerator);
|
|
|
|
+
|
|
|
|
|
|
|
|
+
|
|
|
|
+$core.addClass('CodeGenerator', $globals.AbstractCodeGenerator, [], 'Compiler-Core');
|
|
|
|
+
|
|
|
|
+$globals.CodeGenerator.comment="I am a basic code generator. I generate a valid JavaScript output, but no not perform any inlining.\x0aSee `InliningCodeGenerator` for an optimized JavaScript code generation.";
|
|
|
|
+
|
|
$core.addMethod(
|
|
$core.addMethod(
|
|
$core.method({
|
|
$core.method({
|
|
selector: "irTranslator",
|
|
selector: "irTranslator",
|
|
@@ -288,6 +283,35 @@ messageSends: []
|
|
}),
|
|
}),
|
|
$globals.CodeGenerator);
|
|
$globals.CodeGenerator);
|
|
|
|
|
|
|
|
+$core.addMethod(
|
|
|
|
+$core.method({
|
|
|
|
+selector: "transformers",
|
|
|
|
+protocol: 'compiling',
|
|
|
|
+fn: function (){
|
|
|
|
+var self=this;
|
|
|
|
+
|
|
|
|
+return $core.withContext(function($ctx1) {
|
|
|
|
+
|
|
|
|
+var $1,$2,$4,$3;
|
|
|
|
+$1=self._semanticAnalyzer();
|
|
|
|
+$2=self._translator();
|
|
|
|
+$4=self._irTranslator();
|
|
|
|
+$recv($4)._currentClass_(self._currentClass());
|
|
|
|
+$3=$recv($4)._yourself();
|
|
|
|
+return [$1,$2,$3];
|
|
|
|
+
|
|
|
|
+}, function($ctx1) {$ctx1.fill(self,"transformers",{},$globals.CodeGenerator)});
|
|
|
|
+
|
|
|
|
+},
|
|
|
|
+
|
|
|
|
+args: [],
|
|
|
|
+source: "transformers\x0a\x09^ {\x0a\x09\x09self semanticAnalyzer.\x0a\x09\x09self translator.\x0a\x09\x09self irTranslator currentClass: self currentClass; yourself\x0a\x09}",
|
|
|
|
+referencedClasses: [],
|
|
|
|
+
|
|
|
|
+messageSends: ["semanticAnalyzer", "translator", "currentClass:", "irTranslator", "currentClass", "yourself"]
|
|
|
|
+}),
|
|
|
|
+$globals.CodeGenerator);
|
|
|
|
+
|
|
$core.addMethod(
|
|
$core.addMethod(
|
|
$core.method({
|
|
$core.method({
|
|
selector: "translator",
|
|
selector: "translator",
|