Compiler-Core.js 50 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551
  1. define("amber_core/Compiler-Core", ["amber/boot", "amber_core/Kernel-Objects", "amber_core/Kernel-Infrastructure", "amber_core/Kernel-Collections"], function($boot){
  2. var smalltalk=$boot.vm,nil=$boot.nil,_st=$boot.asReceiver,globals=$boot.globals;
  3. smalltalk.addPackage('Compiler-Core');
  4. smalltalk.packages["Compiler-Core"].transport = {"type":"amd","amdNamespace":"amber_core"};
  5. smalltalk.addClass('AbstractCodeGenerator', globals.Object, ['currentClass', 'source'], 'Compiler-Core');
  6. //>>excludeStart("ide", pragmas.excludeIdeData);
  7. globals.AbstractCodeGenerator.comment="I am the abstract super class of all code generators and provide their common API.";
  8. //>>excludeEnd("ide");
  9. smalltalk.addMethod(
  10. smalltalk.method({
  11. selector: "classNameFor:",
  12. protocol: 'accessing',
  13. fn: function (aClass){
  14. var self=this;
  15. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16. return smalltalk.withContext(function($ctx1) {
  17. //>>excludeEnd("ctx");
  18. var $2,$3,$4,$1;
  19. $2=_st(aClass)._isMetaclass();
  20. if(smalltalk.assert($2)){
  21. $3=_st(_st(aClass)._instanceClass())._name();
  22. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23. $ctx1.sendIdx["name"]=1;
  24. //>>excludeEnd("ctx");
  25. $1=_st($3).__comma(".klass");
  26. } else {
  27. $4=_st(aClass)._isNil();
  28. if(smalltalk.assert($4)){
  29. $1="nil";
  30. } else {
  31. $1=_st(aClass)._name();
  32. };
  33. };
  34. return $1;
  35. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36. }, function($ctx1) {$ctx1.fill(self,"classNameFor:",{aClass:aClass},globals.AbstractCodeGenerator)});
  37. //>>excludeEnd("ctx");
  38. },
  39. //>>excludeStart("ide", pragmas.excludeIdeData);
  40. args: ["aClass"],
  41. source: "classNameFor: aClass\x0a\x09^ aClass isMetaclass\x0a\x09\x09ifTrue: [ aClass instanceClass name, '.klass' ]\x0a\x09\x09ifFalse: [\x0a\x09\x09aClass isNil\x0a\x09\x09\x09ifTrue: [ 'nil' ]\x0a\x09\x09\x09ifFalse: [ aClass name ]]",
  42. referencedClasses: [],
  43. //>>excludeEnd("ide");
  44. messageSends: ["ifTrue:ifFalse:", "isMetaclass", ",", "name", "instanceClass", "isNil"]
  45. }),
  46. globals.AbstractCodeGenerator);
  47. smalltalk.addMethod(
  48. smalltalk.method({
  49. selector: "compileNode:",
  50. protocol: 'compiling',
  51. fn: function (aNode){
  52. var self=this;
  53. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54. return smalltalk.withContext(function($ctx1) {
  55. //>>excludeEnd("ctx");
  56. self._subclassResponsibility();
  57. return self;
  58. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59. }, function($ctx1) {$ctx1.fill(self,"compileNode:",{aNode:aNode},globals.AbstractCodeGenerator)});
  60. //>>excludeEnd("ctx");
  61. },
  62. //>>excludeStart("ide", pragmas.excludeIdeData);
  63. args: ["aNode"],
  64. source: "compileNode: aNode\x0a\x09self subclassResponsibility",
  65. referencedClasses: [],
  66. //>>excludeEnd("ide");
  67. messageSends: ["subclassResponsibility"]
  68. }),
  69. globals.AbstractCodeGenerator);
  70. smalltalk.addMethod(
  71. smalltalk.method({
  72. selector: "currentClass",
  73. protocol: 'accessing',
  74. fn: function (){
  75. var self=this;
  76. var $1;
  77. $1=self["@currentClass"];
  78. return $1;
  79. },
  80. //>>excludeStart("ide", pragmas.excludeIdeData);
  81. args: [],
  82. source: "currentClass\x0a\x09^ currentClass",
  83. referencedClasses: [],
  84. //>>excludeEnd("ide");
  85. messageSends: []
  86. }),
  87. globals.AbstractCodeGenerator);
  88. smalltalk.addMethod(
  89. smalltalk.method({
  90. selector: "currentClass:",
  91. protocol: 'accessing',
  92. fn: function (aClass){
  93. var self=this;
  94. self["@currentClass"]=aClass;
  95. return self;
  96. },
  97. //>>excludeStart("ide", pragmas.excludeIdeData);
  98. args: ["aClass"],
  99. source: "currentClass: aClass\x0a\x09currentClass := aClass",
  100. referencedClasses: [],
  101. //>>excludeEnd("ide");
  102. messageSends: []
  103. }),
  104. globals.AbstractCodeGenerator);
  105. smalltalk.addMethod(
  106. smalltalk.method({
  107. selector: "pseudoVariables",
  108. protocol: 'accessing',
  109. fn: function (){
  110. var self=this;
  111. function $Smalltalk(){return globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  112. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  113. return smalltalk.withContext(function($ctx1) {
  114. //>>excludeEnd("ctx");
  115. var $1;
  116. $1=_st($Smalltalk())._pseudoVariableNames();
  117. return $1;
  118. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  119. }, function($ctx1) {$ctx1.fill(self,"pseudoVariables",{},globals.AbstractCodeGenerator)});
  120. //>>excludeEnd("ctx");
  121. },
  122. //>>excludeStart("ide", pragmas.excludeIdeData);
  123. args: [],
  124. source: "pseudoVariables\x0a\x09^ Smalltalk pseudoVariableNames",
  125. referencedClasses: ["Smalltalk"],
  126. //>>excludeEnd("ide");
  127. messageSends: ["pseudoVariableNames"]
  128. }),
  129. globals.AbstractCodeGenerator);
  130. smalltalk.addMethod(
  131. smalltalk.method({
  132. selector: "source",
  133. protocol: 'accessing',
  134. fn: function (){
  135. var self=this;
  136. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  137. return smalltalk.withContext(function($ctx1) {
  138. //>>excludeEnd("ctx");
  139. var $2,$1,$receiver;
  140. $2=self["@source"];
  141. if(($receiver = $2) == null || $receiver.isNil){
  142. $1="";
  143. } else {
  144. $1=$2;
  145. };
  146. return $1;
  147. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  148. }, function($ctx1) {$ctx1.fill(self,"source",{},globals.AbstractCodeGenerator)});
  149. //>>excludeEnd("ctx");
  150. },
  151. //>>excludeStart("ide", pragmas.excludeIdeData);
  152. args: [],
  153. source: "source\x0a\x09^ source ifNil: [ '' ]",
  154. referencedClasses: [],
  155. //>>excludeEnd("ide");
  156. messageSends: ["ifNil:"]
  157. }),
  158. globals.AbstractCodeGenerator);
  159. smalltalk.addMethod(
  160. smalltalk.method({
  161. selector: "source:",
  162. protocol: 'accessing',
  163. fn: function (aString){
  164. var self=this;
  165. self["@source"]=aString;
  166. return self;
  167. },
  168. //>>excludeStart("ide", pragmas.excludeIdeData);
  169. args: ["aString"],
  170. source: "source: aString\x0a\x09source := aString",
  171. referencedClasses: [],
  172. //>>excludeEnd("ide");
  173. messageSends: []
  174. }),
  175. globals.AbstractCodeGenerator);
  176. smalltalk.addClass('CodeGenerator', globals.AbstractCodeGenerator, [], 'Compiler-Core');
  177. //>>excludeStart("ide", pragmas.excludeIdeData);
  178. 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.";
  179. //>>excludeEnd("ide");
  180. smalltalk.addMethod(
  181. smalltalk.method({
  182. selector: "compileNode:",
  183. protocol: 'compiling',
  184. fn: function (aNode){
  185. var self=this;
  186. var ir,stream;
  187. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  188. return smalltalk.withContext(function($ctx1) {
  189. //>>excludeEnd("ctx");
  190. var $2,$3,$1;
  191. _st(self._semanticAnalyzer())._visit_(aNode);
  192. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  193. $ctx1.sendIdx["visit:"]=1;
  194. //>>excludeEnd("ctx");
  195. ir=_st(self._translator())._visit_(aNode);
  196. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  197. $ctx1.sendIdx["visit:"]=2;
  198. //>>excludeEnd("ctx");
  199. $2=self._irTranslator();
  200. _st($2)._currentClass_(self._currentClass());
  201. _st($2)._visit_(ir);
  202. $3=_st($2)._contents();
  203. $1=$3;
  204. return $1;
  205. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  206. }, function($ctx1) {$ctx1.fill(self,"compileNode:",{aNode:aNode,ir:ir,stream:stream},globals.CodeGenerator)});
  207. //>>excludeEnd("ctx");
  208. },
  209. //>>excludeStart("ide", pragmas.excludeIdeData);
  210. args: ["aNode"],
  211. 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",
  212. referencedClasses: [],
  213. //>>excludeEnd("ide");
  214. messageSends: ["visit:", "semanticAnalyzer", "translator", "currentClass:", "irTranslator", "currentClass", "contents"]
  215. }),
  216. globals.CodeGenerator);
  217. smalltalk.addMethod(
  218. smalltalk.method({
  219. selector: "irTranslator",
  220. protocol: 'compiling',
  221. fn: function (){
  222. var self=this;
  223. function $IRJSTranslator(){return globals.IRJSTranslator||(typeof IRJSTranslator=="undefined"?nil:IRJSTranslator)}
  224. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  225. return smalltalk.withContext(function($ctx1) {
  226. //>>excludeEnd("ctx");
  227. var $1;
  228. $1=_st($IRJSTranslator())._new();
  229. return $1;
  230. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  231. }, function($ctx1) {$ctx1.fill(self,"irTranslator",{},globals.CodeGenerator)});
  232. //>>excludeEnd("ctx");
  233. },
  234. //>>excludeStart("ide", pragmas.excludeIdeData);
  235. args: [],
  236. source: "irTranslator\x0a\x09^ IRJSTranslator new",
  237. referencedClasses: ["IRJSTranslator"],
  238. //>>excludeEnd("ide");
  239. messageSends: ["new"]
  240. }),
  241. globals.CodeGenerator);
  242. smalltalk.addMethod(
  243. smalltalk.method({
  244. selector: "semanticAnalyzer",
  245. protocol: 'compiling',
  246. fn: function (){
  247. var self=this;
  248. function $SemanticAnalyzer(){return globals.SemanticAnalyzer||(typeof SemanticAnalyzer=="undefined"?nil:SemanticAnalyzer)}
  249. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  250. return smalltalk.withContext(function($ctx1) {
  251. //>>excludeEnd("ctx");
  252. var $1;
  253. $1=_st($SemanticAnalyzer())._on_(self._currentClass());
  254. return $1;
  255. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  256. }, function($ctx1) {$ctx1.fill(self,"semanticAnalyzer",{},globals.CodeGenerator)});
  257. //>>excludeEnd("ctx");
  258. },
  259. //>>excludeStart("ide", pragmas.excludeIdeData);
  260. args: [],
  261. source: "semanticAnalyzer\x0a\x09^ SemanticAnalyzer on: self currentClass",
  262. referencedClasses: ["SemanticAnalyzer"],
  263. //>>excludeEnd("ide");
  264. messageSends: ["on:", "currentClass"]
  265. }),
  266. globals.CodeGenerator);
  267. smalltalk.addMethod(
  268. smalltalk.method({
  269. selector: "translator",
  270. protocol: 'compiling',
  271. fn: function (){
  272. var self=this;
  273. function $IRASTTranslator(){return globals.IRASTTranslator||(typeof IRASTTranslator=="undefined"?nil:IRASTTranslator)}
  274. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  275. return smalltalk.withContext(function($ctx1) {
  276. //>>excludeEnd("ctx");
  277. var $2,$3,$1;
  278. $2=_st($IRASTTranslator())._new();
  279. _st($2)._source_(self._source());
  280. _st($2)._theClass_(self._currentClass());
  281. $3=_st($2)._yourself();
  282. $1=$3;
  283. return $1;
  284. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  285. }, function($ctx1) {$ctx1.fill(self,"translator",{},globals.CodeGenerator)});
  286. //>>excludeEnd("ctx");
  287. },
  288. //>>excludeStart("ide", pragmas.excludeIdeData);
  289. args: [],
  290. source: "translator\x0a\x09^ IRASTTranslator new\x0a\x09\x09source: self source;\x0a\x09\x09theClass: self currentClass;\x0a\x09\x09yourself",
  291. referencedClasses: ["IRASTTranslator"],
  292. //>>excludeEnd("ide");
  293. messageSends: ["source:", "new", "source", "theClass:", "currentClass", "yourself"]
  294. }),
  295. globals.CodeGenerator);
  296. smalltalk.addClass('Compiler', globals.Object, ['currentClass', 'source', 'unknownVariables', 'codeGeneratorClass'], 'Compiler-Core');
  297. //>>excludeStart("ide", pragmas.excludeIdeData);
  298. globals.Compiler.comment="I provide the public interface for compiling Amber source code into JavaScript.\x0a\x0aThe code generator used to produce JavaScript can be plugged with `#codeGeneratorClass`.\x0aThe default code generator is an instance of `InlinedCodeGenerator`";
  299. //>>excludeEnd("ide");
  300. smalltalk.addMethod(
  301. smalltalk.method({
  302. selector: "codeGeneratorClass",
  303. protocol: 'accessing',
  304. fn: function (){
  305. var self=this;
  306. function $InliningCodeGenerator(){return globals.InliningCodeGenerator||(typeof InliningCodeGenerator=="undefined"?nil:InliningCodeGenerator)}
  307. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  308. return smalltalk.withContext(function($ctx1) {
  309. //>>excludeEnd("ctx");
  310. var $2,$1,$receiver;
  311. $2=self["@codeGeneratorClass"];
  312. if(($receiver = $2) == null || $receiver.isNil){
  313. $1=$InliningCodeGenerator();
  314. } else {
  315. $1=$2;
  316. };
  317. return $1;
  318. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  319. }, function($ctx1) {$ctx1.fill(self,"codeGeneratorClass",{},globals.Compiler)});
  320. //>>excludeEnd("ctx");
  321. },
  322. //>>excludeStart("ide", pragmas.excludeIdeData);
  323. args: [],
  324. source: "codeGeneratorClass\x0a\x09^ codeGeneratorClass ifNil: [ InliningCodeGenerator ]",
  325. referencedClasses: ["InliningCodeGenerator"],
  326. //>>excludeEnd("ide");
  327. messageSends: ["ifNil:"]
  328. }),
  329. globals.Compiler);
  330. smalltalk.addMethod(
  331. smalltalk.method({
  332. selector: "codeGeneratorClass:",
  333. protocol: 'accessing',
  334. fn: function (aClass){
  335. var self=this;
  336. self["@codeGeneratorClass"]=aClass;
  337. return self;
  338. },
  339. //>>excludeStart("ide", pragmas.excludeIdeData);
  340. args: ["aClass"],
  341. source: "codeGeneratorClass: aClass\x0a\x09codeGeneratorClass := aClass",
  342. referencedClasses: [],
  343. //>>excludeEnd("ide");
  344. messageSends: []
  345. }),
  346. globals.Compiler);
  347. smalltalk.addMethod(
  348. smalltalk.method({
  349. selector: "compile:",
  350. protocol: 'compiling',
  351. fn: function (aString){
  352. var self=this;
  353. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  354. return smalltalk.withContext(function($ctx1) {
  355. //>>excludeEnd("ctx");
  356. var $1;
  357. $1=self._compileNode_(self._parse_(aString));
  358. return $1;
  359. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  360. }, function($ctx1) {$ctx1.fill(self,"compile:",{aString:aString},globals.Compiler)});
  361. //>>excludeEnd("ctx");
  362. },
  363. //>>excludeStart("ide", pragmas.excludeIdeData);
  364. args: ["aString"],
  365. source: "compile: aString\x0a\x09^ self compileNode: (self parse: aString)",
  366. referencedClasses: [],
  367. //>>excludeEnd("ide");
  368. messageSends: ["compileNode:", "parse:"]
  369. }),
  370. globals.Compiler);
  371. smalltalk.addMethod(
  372. smalltalk.method({
  373. selector: "compile:forClass:",
  374. protocol: 'compiling',
  375. fn: function (aString,aClass){
  376. var self=this;
  377. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  378. return smalltalk.withContext(function($ctx1) {
  379. //>>excludeEnd("ctx");
  380. var $1;
  381. self._currentClass_(aClass);
  382. self._source_(aString);
  383. $1=self._compile_(aString);
  384. return $1;
  385. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  386. }, function($ctx1) {$ctx1.fill(self,"compile:forClass:",{aString:aString,aClass:aClass},globals.Compiler)});
  387. //>>excludeEnd("ctx");
  388. },
  389. //>>excludeStart("ide", pragmas.excludeIdeData);
  390. args: ["aString", "aClass"],
  391. source: "compile: aString forClass: aClass\x0a\x09self currentClass: aClass.\x0a\x09self source: aString.\x0a\x09^ self compile: aString",
  392. referencedClasses: [],
  393. //>>excludeEnd("ide");
  394. messageSends: ["currentClass:", "source:", "compile:"]
  395. }),
  396. globals.Compiler);
  397. smalltalk.addMethod(
  398. smalltalk.method({
  399. selector: "compileExpression:",
  400. protocol: 'compiling',
  401. fn: function (aString){
  402. var self=this;
  403. function $DoIt(){return globals.DoIt||(typeof DoIt=="undefined"?nil:DoIt)}
  404. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  405. return smalltalk.withContext(function($ctx1) {
  406. //>>excludeEnd("ctx");
  407. var $1,$2;
  408. self._currentClass_($DoIt());
  409. $1=_st("doIt ^ [ ".__comma(aString)).__comma(" ] value");
  410. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  411. $ctx1.sendIdx[","]=1;
  412. //>>excludeEnd("ctx");
  413. self._source_($1);
  414. $2=self._compileNode_(self._parse_(self._source()));
  415. return $2;
  416. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  417. }, function($ctx1) {$ctx1.fill(self,"compileExpression:",{aString:aString},globals.Compiler)});
  418. //>>excludeEnd("ctx");
  419. },
  420. //>>excludeStart("ide", pragmas.excludeIdeData);
  421. args: ["aString"],
  422. source: "compileExpression: aString\x0a\x09self currentClass: DoIt.\x0a\x09self source: 'doIt ^ [ ', aString, ' ] value'.\x0a\x09^ self compileNode: (self parse: self source)",
  423. referencedClasses: ["DoIt"],
  424. //>>excludeEnd("ide");
  425. messageSends: ["currentClass:", "source:", ",", "compileNode:", "parse:", "source"]
  426. }),
  427. globals.Compiler);
  428. smalltalk.addMethod(
  429. smalltalk.method({
  430. selector: "compileExpression:on:",
  431. protocol: 'compiling',
  432. fn: function (aString,anObject){
  433. var self=this;
  434. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  435. return smalltalk.withContext(function($ctx1) {
  436. //>>excludeEnd("ctx");
  437. var $1,$2;
  438. self._currentClass_(_st(anObject)._class());
  439. $1=_st("xxxDoIt ^ [ ".__comma(aString)).__comma(" ] value");
  440. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  441. $ctx1.sendIdx[","]=1;
  442. //>>excludeEnd("ctx");
  443. self._source_($1);
  444. $2=self._compileNode_(self._parse_(self._source()));
  445. return $2;
  446. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  447. }, function($ctx1) {$ctx1.fill(self,"compileExpression:on:",{aString:aString,anObject:anObject},globals.Compiler)});
  448. //>>excludeEnd("ctx");
  449. },
  450. //>>excludeStart("ide", pragmas.excludeIdeData);
  451. args: ["aString", "anObject"],
  452. source: "compileExpression: aString on: anObject\x0a\x09self currentClass: anObject class.\x0a\x09self source: 'xxxDoIt ^ [ ', aString, ' ] value'.\x0a\x09^ self compileNode: (self parse: self source)",
  453. referencedClasses: [],
  454. //>>excludeEnd("ide");
  455. messageSends: ["currentClass:", "class", "source:", ",", "compileNode:", "parse:", "source"]
  456. }),
  457. globals.Compiler);
  458. smalltalk.addMethod(
  459. smalltalk.method({
  460. selector: "compileNode:",
  461. protocol: 'compiling',
  462. fn: function (aNode){
  463. var self=this;
  464. var generator,result;
  465. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  466. return smalltalk.withContext(function($ctx1) {
  467. //>>excludeEnd("ctx");
  468. var $1,$2,$3;
  469. generator=_st(self._codeGeneratorClass())._new();
  470. $1=generator;
  471. _st($1)._source_(self._source());
  472. $2=_st($1)._currentClass_(self._currentClass());
  473. result=_st(generator)._compileNode_(aNode);
  474. self._unknownVariables_([]);
  475. $3=result;
  476. return $3;
  477. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  478. }, function($ctx1) {$ctx1.fill(self,"compileNode:",{aNode:aNode,generator:generator,result:result},globals.Compiler)});
  479. //>>excludeEnd("ctx");
  480. },
  481. //>>excludeStart("ide", pragmas.excludeIdeData);
  482. args: ["aNode"],
  483. 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: #().\x0a\x09^ result",
  484. referencedClasses: [],
  485. //>>excludeEnd("ide");
  486. messageSends: ["new", "codeGeneratorClass", "source:", "source", "currentClass:", "currentClass", "compileNode:", "unknownVariables:"]
  487. }),
  488. globals.Compiler);
  489. smalltalk.addMethod(
  490. smalltalk.method({
  491. selector: "currentClass",
  492. protocol: 'accessing',
  493. fn: function (){
  494. var self=this;
  495. var $1;
  496. $1=self["@currentClass"];
  497. return $1;
  498. },
  499. //>>excludeStart("ide", pragmas.excludeIdeData);
  500. args: [],
  501. source: "currentClass\x0a\x09^ currentClass",
  502. referencedClasses: [],
  503. //>>excludeEnd("ide");
  504. messageSends: []
  505. }),
  506. globals.Compiler);
  507. smalltalk.addMethod(
  508. smalltalk.method({
  509. selector: "currentClass:",
  510. protocol: 'accessing',
  511. fn: function (aClass){
  512. var self=this;
  513. self["@currentClass"]=aClass;
  514. return self;
  515. },
  516. //>>excludeStart("ide", pragmas.excludeIdeData);
  517. args: ["aClass"],
  518. source: "currentClass: aClass\x0a\x09currentClass := aClass",
  519. referencedClasses: [],
  520. //>>excludeEnd("ide");
  521. messageSends: []
  522. }),
  523. globals.Compiler);
  524. smalltalk.addMethod(
  525. smalltalk.method({
  526. selector: "eval:",
  527. protocol: 'compiling',
  528. fn: function (aString){
  529. var self=this;
  530. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  531. return smalltalk.withContext(function($ctx1) {
  532. //>>excludeEnd("ctx");
  533. return eval(aString);
  534. return self;
  535. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  536. }, function($ctx1) {$ctx1.fill(self,"eval:",{aString:aString},globals.Compiler)});
  537. //>>excludeEnd("ctx");
  538. },
  539. //>>excludeStart("ide", pragmas.excludeIdeData);
  540. args: ["aString"],
  541. source: "eval: aString\x0a\x09<return eval(aString)>",
  542. referencedClasses: [],
  543. //>>excludeEnd("ide");
  544. messageSends: []
  545. }),
  546. globals.Compiler);
  547. smalltalk.addMethod(
  548. smalltalk.method({
  549. selector: "evaluateExpression:",
  550. protocol: 'compiling',
  551. fn: function (aString){
  552. var self=this;
  553. function $DoIt(){return globals.DoIt||(typeof DoIt=="undefined"?nil:DoIt)}
  554. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  555. return smalltalk.withContext(function($ctx1) {
  556. //>>excludeEnd("ctx");
  557. var $1;
  558. $1=self._evaluateExpression_on_(aString,_st($DoIt())._new());
  559. return $1;
  560. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  561. }, function($ctx1) {$ctx1.fill(self,"evaluateExpression:",{aString:aString},globals.Compiler)});
  562. //>>excludeEnd("ctx");
  563. },
  564. //>>excludeStart("ide", pragmas.excludeIdeData);
  565. args: ["aString"],
  566. source: "evaluateExpression: aString\x0a\x09\x22Unlike #eval: evaluate a Smalltalk expression and answer the returned object\x22\x0a\x09^ self evaluateExpression: aString on: DoIt new",
  567. referencedClasses: ["DoIt"],
  568. //>>excludeEnd("ide");
  569. messageSends: ["evaluateExpression:on:", "new"]
  570. }),
  571. globals.Compiler);
  572. smalltalk.addMethod(
  573. smalltalk.method({
  574. selector: "evaluateExpression:on:",
  575. protocol: 'compiling',
  576. fn: function (aString,anObject){
  577. var self=this;
  578. var result,method;
  579. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  580. return smalltalk.withContext(function($ctx1) {
  581. //>>excludeEnd("ctx");
  582. var $1,$2;
  583. method=self._eval_(self._compileExpression_on_(aString,anObject));
  584. _st(method)._protocol_("**xxxDoIt");
  585. $1=_st(anObject)._class();
  586. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  587. $ctx1.sendIdx["class"]=1;
  588. //>>excludeEnd("ctx");
  589. _st($1)._addCompiledMethod_(method);
  590. result=_st(anObject)._xxxDoIt();
  591. _st(_st(anObject)._class())._removeCompiledMethod_(method);
  592. $2=result;
  593. return $2;
  594. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  595. }, function($ctx1) {$ctx1.fill(self,"evaluateExpression:on:",{aString:aString,anObject:anObject,result:result,method:method},globals.Compiler)});
  596. //>>excludeEnd("ctx");
  597. },
  598. //>>excludeStart("ide", pragmas.excludeIdeData);
  599. args: ["aString", "anObject"],
  600. source: "evaluateExpression: aString on: anObject\x0a\x09\x22Unlike #eval: evaluate a Smalltalk expression with anObject as the receiver and answer the returned object\x22\x0a\x09| result method |\x0a\x09method := self eval: (self compileExpression: aString on: anObject).\x0a\x09method protocol: '**xxxDoIt'.\x0a\x09anObject class addCompiledMethod: method.\x0a\x09result := anObject xxxDoIt.\x0a\x09anObject class removeCompiledMethod: method.\x0a\x09^ result",
  601. referencedClasses: [],
  602. //>>excludeEnd("ide");
  603. messageSends: ["eval:", "compileExpression:on:", "protocol:", "addCompiledMethod:", "class", "xxxDoIt", "removeCompiledMethod:"]
  604. }),
  605. globals.Compiler);
  606. smalltalk.addMethod(
  607. smalltalk.method({
  608. selector: "install:forClass:protocol:",
  609. protocol: 'compiling',
  610. fn: function (aString,aBehavior,anotherString){
  611. var self=this;
  612. function $ClassBuilder(){return globals.ClassBuilder||(typeof ClassBuilder=="undefined"?nil:ClassBuilder)}
  613. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  614. return smalltalk.withContext(function($ctx1) {
  615. //>>excludeEnd("ctx");
  616. var $1;
  617. $1=_st(_st($ClassBuilder())._new())._installMethod_forClass_protocol_(self._eval_(self._compile_forClass_(aString,aBehavior)),aBehavior,anotherString);
  618. return $1;
  619. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  620. }, function($ctx1) {$ctx1.fill(self,"install:forClass:protocol:",{aString:aString,aBehavior:aBehavior,anotherString:anotherString},globals.Compiler)});
  621. //>>excludeEnd("ctx");
  622. },
  623. //>>excludeStart("ide", pragmas.excludeIdeData);
  624. args: ["aString", "aBehavior", "anotherString"],
  625. source: "install: aString forClass: aBehavior protocol: anotherString\x0a\x09^ ClassBuilder new\x0a\x09\x09installMethod: (self eval: (self compile: aString forClass: aBehavior))\x0a\x09\x09forClass: aBehavior\x0a\x09\x09protocol: anotherString",
  626. referencedClasses: ["ClassBuilder"],
  627. //>>excludeEnd("ide");
  628. messageSends: ["installMethod:forClass:protocol:", "new", "eval:", "compile:forClass:"]
  629. }),
  630. globals.Compiler);
  631. smalltalk.addMethod(
  632. smalltalk.method({
  633. selector: "parse:",
  634. protocol: 'compiling',
  635. fn: function (aString){
  636. var self=this;
  637. function $Smalltalk(){return globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  638. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  639. return smalltalk.withContext(function($ctx1) {
  640. //>>excludeEnd("ctx");
  641. var $1;
  642. $1=_st($Smalltalk())._parse_(aString);
  643. return $1;
  644. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  645. }, function($ctx1) {$ctx1.fill(self,"parse:",{aString:aString},globals.Compiler)});
  646. //>>excludeEnd("ctx");
  647. },
  648. //>>excludeStart("ide", pragmas.excludeIdeData);
  649. args: ["aString"],
  650. source: "parse: aString\x0a\x09^ Smalltalk parse: aString",
  651. referencedClasses: ["Smalltalk"],
  652. //>>excludeEnd("ide");
  653. messageSends: ["parse:"]
  654. }),
  655. globals.Compiler);
  656. smalltalk.addMethod(
  657. smalltalk.method({
  658. selector: "parseExpression:",
  659. protocol: 'compiling',
  660. fn: function (aString){
  661. var self=this;
  662. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  663. return smalltalk.withContext(function($ctx1) {
  664. //>>excludeEnd("ctx");
  665. var $2,$1;
  666. $2=_st("doIt ^ [ ".__comma(aString)).__comma(" ] value");
  667. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  668. $ctx1.sendIdx[","]=1;
  669. //>>excludeEnd("ctx");
  670. $1=self._parse_($2);
  671. return $1;
  672. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  673. }, function($ctx1) {$ctx1.fill(self,"parseExpression:",{aString:aString},globals.Compiler)});
  674. //>>excludeEnd("ctx");
  675. },
  676. //>>excludeStart("ide", pragmas.excludeIdeData);
  677. args: ["aString"],
  678. source: "parseExpression: aString\x0a\x09^ self parse: 'doIt ^ [ ', aString, ' ] value'",
  679. referencedClasses: [],
  680. //>>excludeEnd("ide");
  681. messageSends: ["parse:", ","]
  682. }),
  683. globals.Compiler);
  684. smalltalk.addMethod(
  685. smalltalk.method({
  686. selector: "recompile:",
  687. protocol: 'compiling',
  688. fn: function (aClass){
  689. var self=this;
  690. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  691. return smalltalk.withContext(function($ctx1) {
  692. //>>excludeEnd("ctx");
  693. var $1;
  694. _st(_st(_st(aClass)._methodDictionary())._values())._do_displayingProgress_((function(each){
  695. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  696. return smalltalk.withContext(function($ctx2) {
  697. //>>excludeEnd("ctx");
  698. return self._install_forClass_protocol_(_st(each)._source(),aClass,_st(each)._protocol());
  699. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  700. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  701. //>>excludeEnd("ctx");
  702. }),"Recompiling ".__comma(_st(aClass)._name()));
  703. $1=_st(aClass)._isMetaclass();
  704. if(! smalltalk.assert($1)){
  705. self._recompile_(_st(aClass)._class());
  706. };
  707. return self;
  708. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  709. }, function($ctx1) {$ctx1.fill(self,"recompile:",{aClass:aClass},globals.Compiler)});
  710. //>>excludeEnd("ctx");
  711. },
  712. //>>excludeStart("ide", pragmas.excludeIdeData);
  713. args: ["aClass"],
  714. source: "recompile: aClass\x0a\x09aClass methodDictionary values\x0a\x09\x09do: [ :each | \x0a\x09\x09\x09self \x0a\x09\x09\x09\x09install: each source \x0a\x09\x09\x09\x09forClass: aClass \x0a\x09\x09\x09\x09protocol: each protocol ]\x0a\x09\x09displayingProgress: 'Recompiling ', aClass name.\x0a\x09aClass isMetaclass ifFalse: [ self recompile: aClass class ]",
  715. referencedClasses: [],
  716. //>>excludeEnd("ide");
  717. messageSends: ["do:displayingProgress:", "values", "methodDictionary", "install:forClass:protocol:", "source", "protocol", ",", "name", "ifFalse:", "isMetaclass", "recompile:", "class"]
  718. }),
  719. globals.Compiler);
  720. smalltalk.addMethod(
  721. smalltalk.method({
  722. selector: "recompileAll",
  723. protocol: 'compiling',
  724. fn: function (){
  725. var self=this;
  726. function $Smalltalk(){return globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  727. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  728. return smalltalk.withContext(function($ctx1) {
  729. //>>excludeEnd("ctx");
  730. _st(_st($Smalltalk())._classes())._do_displayingProgress_((function(each){
  731. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  732. return smalltalk.withContext(function($ctx2) {
  733. //>>excludeEnd("ctx");
  734. return self._recompile_(each);
  735. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  736. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  737. //>>excludeEnd("ctx");
  738. }),"Compiling all classes...");
  739. return self;
  740. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  741. }, function($ctx1) {$ctx1.fill(self,"recompileAll",{},globals.Compiler)});
  742. //>>excludeEnd("ctx");
  743. },
  744. //>>excludeStart("ide", pragmas.excludeIdeData);
  745. args: [],
  746. source: "recompileAll\x0a\x09Smalltalk classes \x0a\x09\x09do: [ :each | self recompile: each ]\x0a\x09\x09displayingProgress: 'Compiling all classes...'",
  747. referencedClasses: ["Smalltalk"],
  748. //>>excludeEnd("ide");
  749. messageSends: ["do:displayingProgress:", "classes", "recompile:"]
  750. }),
  751. globals.Compiler);
  752. smalltalk.addMethod(
  753. smalltalk.method({
  754. selector: "source",
  755. protocol: 'accessing',
  756. fn: function (){
  757. var self=this;
  758. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  759. return smalltalk.withContext(function($ctx1) {
  760. //>>excludeEnd("ctx");
  761. var $2,$1,$receiver;
  762. $2=self["@source"];
  763. if(($receiver = $2) == null || $receiver.isNil){
  764. $1="";
  765. } else {
  766. $1=$2;
  767. };
  768. return $1;
  769. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  770. }, function($ctx1) {$ctx1.fill(self,"source",{},globals.Compiler)});
  771. //>>excludeEnd("ctx");
  772. },
  773. //>>excludeStart("ide", pragmas.excludeIdeData);
  774. args: [],
  775. source: "source\x0a\x09^ source ifNil: [ '' ]",
  776. referencedClasses: [],
  777. //>>excludeEnd("ide");
  778. messageSends: ["ifNil:"]
  779. }),
  780. globals.Compiler);
  781. smalltalk.addMethod(
  782. smalltalk.method({
  783. selector: "source:",
  784. protocol: 'accessing',
  785. fn: function (aString){
  786. var self=this;
  787. self["@source"]=aString;
  788. return self;
  789. },
  790. //>>excludeStart("ide", pragmas.excludeIdeData);
  791. args: ["aString"],
  792. source: "source: aString\x0a\x09source := aString",
  793. referencedClasses: [],
  794. //>>excludeEnd("ide");
  795. messageSends: []
  796. }),
  797. globals.Compiler);
  798. smalltalk.addMethod(
  799. smalltalk.method({
  800. selector: "unknownVariables",
  801. protocol: 'accessing',
  802. fn: function (){
  803. var self=this;
  804. var $1;
  805. $1=self["@unknownVariables"];
  806. return $1;
  807. },
  808. //>>excludeStart("ide", pragmas.excludeIdeData);
  809. args: [],
  810. source: "unknownVariables\x0a\x09^ unknownVariables",
  811. referencedClasses: [],
  812. //>>excludeEnd("ide");
  813. messageSends: []
  814. }),
  815. globals.Compiler);
  816. smalltalk.addMethod(
  817. smalltalk.method({
  818. selector: "unknownVariables:",
  819. protocol: 'accessing',
  820. fn: function (aCollection){
  821. var self=this;
  822. self["@unknownVariables"]=aCollection;
  823. return self;
  824. },
  825. //>>excludeStart("ide", pragmas.excludeIdeData);
  826. args: ["aCollection"],
  827. source: "unknownVariables: aCollection\x0a\x09unknownVariables := aCollection",
  828. referencedClasses: [],
  829. //>>excludeEnd("ide");
  830. messageSends: []
  831. }),
  832. globals.Compiler);
  833. smalltalk.addMethod(
  834. smalltalk.method({
  835. selector: "recompile:",
  836. protocol: 'compiling',
  837. fn: function (aClass){
  838. var self=this;
  839. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  840. return smalltalk.withContext(function($ctx1) {
  841. //>>excludeEnd("ctx");
  842. _st(self._new())._recompile_(aClass);
  843. return self;
  844. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  845. }, function($ctx1) {$ctx1.fill(self,"recompile:",{aClass:aClass},globals.Compiler.klass)});
  846. //>>excludeEnd("ctx");
  847. },
  848. //>>excludeStart("ide", pragmas.excludeIdeData);
  849. args: ["aClass"],
  850. source: "recompile: aClass\x0a\x09self new recompile: aClass",
  851. referencedClasses: [],
  852. //>>excludeEnd("ide");
  853. messageSends: ["recompile:", "new"]
  854. }),
  855. globals.Compiler.klass);
  856. smalltalk.addMethod(
  857. smalltalk.method({
  858. selector: "recompileAll",
  859. protocol: 'compiling',
  860. fn: function (){
  861. var self=this;
  862. function $Smalltalk(){return globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  863. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  864. return smalltalk.withContext(function($ctx1) {
  865. //>>excludeEnd("ctx");
  866. _st(_st($Smalltalk())._classes())._do_((function(each){
  867. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  868. return smalltalk.withContext(function($ctx2) {
  869. //>>excludeEnd("ctx");
  870. return self._recompile_(each);
  871. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  872. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  873. //>>excludeEnd("ctx");
  874. }));
  875. return self;
  876. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  877. }, function($ctx1) {$ctx1.fill(self,"recompileAll",{},globals.Compiler.klass)});
  878. //>>excludeEnd("ctx");
  879. },
  880. //>>excludeStart("ide", pragmas.excludeIdeData);
  881. args: [],
  882. source: "recompileAll\x0a\x09Smalltalk classes do: [ :each |\x0a\x09\x09self recompile: each ]",
  883. referencedClasses: ["Smalltalk"],
  884. //>>excludeEnd("ide");
  885. messageSends: ["do:", "classes", "recompile:"]
  886. }),
  887. globals.Compiler.klass);
  888. smalltalk.addClass('DoIt', globals.Object, [], 'Compiler-Core');
  889. //>>excludeStart("ide", pragmas.excludeIdeData);
  890. globals.DoIt.comment="`DoIt` is the class used to compile and evaluate expressions. See `Compiler >> evaluateExpression:`.";
  891. //>>excludeEnd("ide");
  892. smalltalk.addClass('Evaluator', globals.InterfacingObject, [], 'Compiler-Core');
  893. //>>excludeStart("ide", pragmas.excludeIdeData);
  894. globals.Evaluator.comment="I evaluate code against a receiver, dispatching #evaluate:on: to the receiver.";
  895. //>>excludeEnd("ide");
  896. smalltalk.addMethod(
  897. smalltalk.method({
  898. selector: "evaluate:context:",
  899. protocol: 'evaluating',
  900. fn: function (aString,aContext){
  901. var self=this;
  902. var compiler,ast;
  903. function $Compiler(){return globals.Compiler||(typeof Compiler=="undefined"?nil:Compiler)}
  904. function $Error(){return globals.Error||(typeof Error=="undefined"?nil:Error)}
  905. function $AISemanticAnalyzer(){return globals.AISemanticAnalyzer||(typeof AISemanticAnalyzer=="undefined"?nil:AISemanticAnalyzer)}
  906. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  907. return smalltalk.withContext(function($ctx1) {
  908. //>>excludeEnd("ctx");
  909. var $1,$2,$3,$4;
  910. var $early={};
  911. try {
  912. compiler=_st($Compiler())._new();
  913. _st((function(){
  914. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  915. return smalltalk.withContext(function($ctx2) {
  916. //>>excludeEnd("ctx");
  917. ast=_st(compiler)._parseExpression_(aString);
  918. return ast;
  919. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  920. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  921. //>>excludeEnd("ctx");
  922. }))._on_do_($Error(),(function(ex){
  923. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  924. return smalltalk.withContext(function($ctx2) {
  925. //>>excludeEnd("ctx");
  926. $1=self._alert_(_st(ex)._messageText());
  927. throw $early=[$1];
  928. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  929. }, function($ctx2) {$ctx2.fillBlock({ex:ex},$ctx1,2)});
  930. //>>excludeEnd("ctx");
  931. }));
  932. $2=_st($AISemanticAnalyzer())._on_(_st(_st(aContext)._receiver())._class());
  933. _st($2)._context_(aContext);
  934. $3=_st($2)._visit_(ast);
  935. $4=_st(aContext)._evaluateNode_(ast);
  936. return $4;
  937. }
  938. catch(e) {if(e===$early)return e[0]; throw e}
  939. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  940. }, function($ctx1) {$ctx1.fill(self,"evaluate:context:",{aString:aString,aContext:aContext,compiler:compiler,ast:ast},globals.Evaluator)});
  941. //>>excludeEnd("ctx");
  942. },
  943. //>>excludeStart("ide", pragmas.excludeIdeData);
  944. args: ["aString", "aContext"],
  945. source: "evaluate: aString context: aContext\x0a\x09\x22Similar to #evaluate:for:, with the following differences:\x0a\x09- instead of compiling and running `aString`, `aString` is interpreted using an `ASTInterpreter`\x0a\x09- instead of evaluating against a receiver, evaluate in the context of `aContext`\x22\x0a\x0a\x09| compiler ast |\x0a\x09\x0a\x09compiler := Compiler new.\x0a\x09[ ast := compiler parseExpression: aString ] \x0a\x09\x09on: Error \x0a\x09\x09do: [ :ex | ^ self alert: ex messageText ].\x0a\x09\x09\x0a\x09(AISemanticAnalyzer on: aContext receiver class)\x0a\x09\x09context: aContext;\x0a\x09\x09visit: ast.\x0a\x0a\x09^ aContext evaluateNode: ast",
  946. referencedClasses: ["Compiler", "Error", "AISemanticAnalyzer"],
  947. //>>excludeEnd("ide");
  948. messageSends: ["new", "on:do:", "parseExpression:", "alert:", "messageText", "context:", "on:", "class", "receiver", "visit:", "evaluateNode:"]
  949. }),
  950. globals.Evaluator);
  951. smalltalk.addMethod(
  952. smalltalk.method({
  953. selector: "evaluate:for:",
  954. protocol: 'evaluating',
  955. fn: function (aString,anObject){
  956. var self=this;
  957. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  958. return smalltalk.withContext(function($ctx1) {
  959. //>>excludeEnd("ctx");
  960. var $1;
  961. $1=_st(anObject)._evaluate_on_(aString,self);
  962. return $1;
  963. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  964. }, function($ctx1) {$ctx1.fill(self,"evaluate:for:",{aString:aString,anObject:anObject},globals.Evaluator)});
  965. //>>excludeEnd("ctx");
  966. },
  967. //>>excludeStart("ide", pragmas.excludeIdeData);
  968. args: ["aString", "anObject"],
  969. source: "evaluate: aString for: anObject\x0a\x09^ anObject evaluate: aString on: self",
  970. referencedClasses: [],
  971. //>>excludeEnd("ide");
  972. messageSends: ["evaluate:on:"]
  973. }),
  974. globals.Evaluator);
  975. smalltalk.addMethod(
  976. smalltalk.method({
  977. selector: "evaluate:receiver:",
  978. protocol: 'evaluating',
  979. fn: function (aString,anObject){
  980. var self=this;
  981. var compiler;
  982. function $Compiler(){return globals.Compiler||(typeof Compiler=="undefined"?nil:Compiler)}
  983. function $Error(){return globals.Error||(typeof Error=="undefined"?nil:Error)}
  984. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  985. return smalltalk.withContext(function($ctx1) {
  986. //>>excludeEnd("ctx");
  987. var $1,$2;
  988. var $early={};
  989. try {
  990. compiler=_st($Compiler())._new();
  991. _st((function(){
  992. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  993. return smalltalk.withContext(function($ctx2) {
  994. //>>excludeEnd("ctx");
  995. return _st(compiler)._parseExpression_(aString);
  996. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  997. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  998. //>>excludeEnd("ctx");
  999. }))._on_do_($Error(),(function(ex){
  1000. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1001. return smalltalk.withContext(function($ctx2) {
  1002. //>>excludeEnd("ctx");
  1003. $1=self._alert_(_st(ex)._messageText());
  1004. throw $early=[$1];
  1005. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1006. }, function($ctx2) {$ctx2.fillBlock({ex:ex},$ctx1,2)});
  1007. //>>excludeEnd("ctx");
  1008. }));
  1009. $2=_st(compiler)._evaluateExpression_on_(aString,anObject);
  1010. return $2;
  1011. }
  1012. catch(e) {if(e===$early)return e[0]; throw e}
  1013. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1014. }, function($ctx1) {$ctx1.fill(self,"evaluate:receiver:",{aString:aString,anObject:anObject,compiler:compiler},globals.Evaluator)});
  1015. //>>excludeEnd("ctx");
  1016. },
  1017. //>>excludeStart("ide", pragmas.excludeIdeData);
  1018. args: ["aString", "anObject"],
  1019. source: "evaluate: aString receiver: anObject\x0a\x09| compiler |\x0a\x09\x0a\x09compiler := Compiler new.\x0a\x09[ compiler parseExpression: aString ] \x0a\x09\x09on: Error \x0a\x09\x09do: [ :ex | ^ self alert: ex messageText ].\x0a\x0a\x09^ compiler evaluateExpression: aString on: anObject",
  1020. referencedClasses: ["Compiler", "Error"],
  1021. //>>excludeEnd("ide");
  1022. messageSends: ["new", "on:do:", "parseExpression:", "alert:", "messageText", "evaluateExpression:on:"]
  1023. }),
  1024. globals.Evaluator);
  1025. smalltalk.addMethod(
  1026. smalltalk.method({
  1027. selector: "evaluate:for:",
  1028. protocol: 'instance creation',
  1029. fn: function (aString,anObject){
  1030. var self=this;
  1031. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1032. return smalltalk.withContext(function($ctx1) {
  1033. //>>excludeEnd("ctx");
  1034. var $1;
  1035. $1=_st(self._new())._evaluate_for_(aString,anObject);
  1036. return $1;
  1037. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1038. }, function($ctx1) {$ctx1.fill(self,"evaluate:for:",{aString:aString,anObject:anObject},globals.Evaluator.klass)});
  1039. //>>excludeEnd("ctx");
  1040. },
  1041. //>>excludeStart("ide", pragmas.excludeIdeData);
  1042. args: ["aString", "anObject"],
  1043. source: "evaluate: aString for: anObject\x0a\x09^ self new evaluate: aString for: anObject",
  1044. referencedClasses: [],
  1045. //>>excludeEnd("ide");
  1046. messageSends: ["evaluate:for:", "new"]
  1047. }),
  1048. globals.Evaluator.klass);
  1049. smalltalk.addClass('NodeVisitor', globals.Object, [], 'Compiler-Core');
  1050. //>>excludeStart("ide", pragmas.excludeIdeData);
  1051. globals.NodeVisitor.comment="I am the abstract super class of all AST node visitors.";
  1052. //>>excludeEnd("ide");
  1053. smalltalk.addMethod(
  1054. smalltalk.method({
  1055. selector: "visit:",
  1056. protocol: 'visiting',
  1057. fn: function (aNode){
  1058. var self=this;
  1059. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1060. return smalltalk.withContext(function($ctx1) {
  1061. //>>excludeEnd("ctx");
  1062. var $1;
  1063. $1=_st(aNode)._accept_(self);
  1064. return $1;
  1065. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1066. }, function($ctx1) {$ctx1.fill(self,"visit:",{aNode:aNode},globals.NodeVisitor)});
  1067. //>>excludeEnd("ctx");
  1068. },
  1069. //>>excludeStart("ide", pragmas.excludeIdeData);
  1070. args: ["aNode"],
  1071. source: "visit: aNode\x0a\x09^ aNode accept: self",
  1072. referencedClasses: [],
  1073. //>>excludeEnd("ide");
  1074. messageSends: ["accept:"]
  1075. }),
  1076. globals.NodeVisitor);
  1077. smalltalk.addMethod(
  1078. smalltalk.method({
  1079. selector: "visitAll:",
  1080. protocol: 'visiting',
  1081. fn: function (aCollection){
  1082. var self=this;
  1083. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1084. return smalltalk.withContext(function($ctx1) {
  1085. //>>excludeEnd("ctx");
  1086. var $1;
  1087. $1=_st(aCollection)._collect_((function(each){
  1088. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1089. return smalltalk.withContext(function($ctx2) {
  1090. //>>excludeEnd("ctx");
  1091. return self._visit_(each);
  1092. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1093. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  1094. //>>excludeEnd("ctx");
  1095. }));
  1096. return $1;
  1097. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1098. }, function($ctx1) {$ctx1.fill(self,"visitAll:",{aCollection:aCollection},globals.NodeVisitor)});
  1099. //>>excludeEnd("ctx");
  1100. },
  1101. //>>excludeStart("ide", pragmas.excludeIdeData);
  1102. args: ["aCollection"],
  1103. source: "visitAll: aCollection\x0a\x09^ aCollection collect: [ :each | self visit: each ]",
  1104. referencedClasses: [],
  1105. //>>excludeEnd("ide");
  1106. messageSends: ["collect:", "visit:"]
  1107. }),
  1108. globals.NodeVisitor);
  1109. smalltalk.addMethod(
  1110. smalltalk.method({
  1111. selector: "visitAssignmentNode:",
  1112. protocol: 'visiting',
  1113. fn: function (aNode){
  1114. var self=this;
  1115. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1116. return smalltalk.withContext(function($ctx1) {
  1117. //>>excludeEnd("ctx");
  1118. var $1;
  1119. $1=self._visitNode_(aNode);
  1120. return $1;
  1121. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1122. }, function($ctx1) {$ctx1.fill(self,"visitAssignmentNode:",{aNode:aNode},globals.NodeVisitor)});
  1123. //>>excludeEnd("ctx");
  1124. },
  1125. //>>excludeStart("ide", pragmas.excludeIdeData);
  1126. args: ["aNode"],
  1127. source: "visitAssignmentNode: aNode\x0a\x09^ self visitNode: aNode",
  1128. referencedClasses: [],
  1129. //>>excludeEnd("ide");
  1130. messageSends: ["visitNode:"]
  1131. }),
  1132. globals.NodeVisitor);
  1133. smalltalk.addMethod(
  1134. smalltalk.method({
  1135. selector: "visitBlockNode:",
  1136. protocol: 'visiting',
  1137. fn: function (aNode){
  1138. var self=this;
  1139. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1140. return smalltalk.withContext(function($ctx1) {
  1141. //>>excludeEnd("ctx");
  1142. var $1;
  1143. $1=self._visitNode_(aNode);
  1144. return $1;
  1145. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1146. }, function($ctx1) {$ctx1.fill(self,"visitBlockNode:",{aNode:aNode},globals.NodeVisitor)});
  1147. //>>excludeEnd("ctx");
  1148. },
  1149. //>>excludeStart("ide", pragmas.excludeIdeData);
  1150. args: ["aNode"],
  1151. source: "visitBlockNode: aNode\x0a\x09^ self visitNode: aNode",
  1152. referencedClasses: [],
  1153. //>>excludeEnd("ide");
  1154. messageSends: ["visitNode:"]
  1155. }),
  1156. globals.NodeVisitor);
  1157. smalltalk.addMethod(
  1158. smalltalk.method({
  1159. selector: "visitBlockSequenceNode:",
  1160. protocol: 'visiting',
  1161. fn: function (aNode){
  1162. var self=this;
  1163. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1164. return smalltalk.withContext(function($ctx1) {
  1165. //>>excludeEnd("ctx");
  1166. var $1;
  1167. $1=self._visitSequenceNode_(aNode);
  1168. return $1;
  1169. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1170. }, function($ctx1) {$ctx1.fill(self,"visitBlockSequenceNode:",{aNode:aNode},globals.NodeVisitor)});
  1171. //>>excludeEnd("ctx");
  1172. },
  1173. //>>excludeStart("ide", pragmas.excludeIdeData);
  1174. args: ["aNode"],
  1175. source: "visitBlockSequenceNode: aNode\x0a\x09^ self visitSequenceNode: aNode",
  1176. referencedClasses: [],
  1177. //>>excludeEnd("ide");
  1178. messageSends: ["visitSequenceNode:"]
  1179. }),
  1180. globals.NodeVisitor);
  1181. smalltalk.addMethod(
  1182. smalltalk.method({
  1183. selector: "visitCascadeNode:",
  1184. protocol: 'visiting',
  1185. fn: function (aNode){
  1186. var self=this;
  1187. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1188. return smalltalk.withContext(function($ctx1) {
  1189. //>>excludeEnd("ctx");
  1190. var $1;
  1191. $1=self._visitNode_(aNode);
  1192. return $1;
  1193. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1194. }, function($ctx1) {$ctx1.fill(self,"visitCascadeNode:",{aNode:aNode},globals.NodeVisitor)});
  1195. //>>excludeEnd("ctx");
  1196. },
  1197. //>>excludeStart("ide", pragmas.excludeIdeData);
  1198. args: ["aNode"],
  1199. source: "visitCascadeNode: aNode\x0a\x09^ self visitNode: aNode",
  1200. referencedClasses: [],
  1201. //>>excludeEnd("ide");
  1202. messageSends: ["visitNode:"]
  1203. }),
  1204. globals.NodeVisitor);
  1205. smalltalk.addMethod(
  1206. smalltalk.method({
  1207. selector: "visitDynamicArrayNode:",
  1208. protocol: 'visiting',
  1209. fn: function (aNode){
  1210. var self=this;
  1211. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1212. return smalltalk.withContext(function($ctx1) {
  1213. //>>excludeEnd("ctx");
  1214. var $1;
  1215. $1=self._visitNode_(aNode);
  1216. return $1;
  1217. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1218. }, function($ctx1) {$ctx1.fill(self,"visitDynamicArrayNode:",{aNode:aNode},globals.NodeVisitor)});
  1219. //>>excludeEnd("ctx");
  1220. },
  1221. //>>excludeStart("ide", pragmas.excludeIdeData);
  1222. args: ["aNode"],
  1223. source: "visitDynamicArrayNode: aNode\x0a\x09^ self visitNode: aNode",
  1224. referencedClasses: [],
  1225. //>>excludeEnd("ide");
  1226. messageSends: ["visitNode:"]
  1227. }),
  1228. globals.NodeVisitor);
  1229. smalltalk.addMethod(
  1230. smalltalk.method({
  1231. selector: "visitDynamicDictionaryNode:",
  1232. protocol: 'visiting',
  1233. fn: function (aNode){
  1234. var self=this;
  1235. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1236. return smalltalk.withContext(function($ctx1) {
  1237. //>>excludeEnd("ctx");
  1238. var $1;
  1239. $1=self._visitNode_(aNode);
  1240. return $1;
  1241. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1242. }, function($ctx1) {$ctx1.fill(self,"visitDynamicDictionaryNode:",{aNode:aNode},globals.NodeVisitor)});
  1243. //>>excludeEnd("ctx");
  1244. },
  1245. //>>excludeStart("ide", pragmas.excludeIdeData);
  1246. args: ["aNode"],
  1247. source: "visitDynamicDictionaryNode: aNode\x0a\x09^ self visitNode: aNode",
  1248. referencedClasses: [],
  1249. //>>excludeEnd("ide");
  1250. messageSends: ["visitNode:"]
  1251. }),
  1252. globals.NodeVisitor);
  1253. smalltalk.addMethod(
  1254. smalltalk.method({
  1255. selector: "visitJSStatementNode:",
  1256. protocol: 'visiting',
  1257. fn: function (aNode){
  1258. var self=this;
  1259. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1260. return smalltalk.withContext(function($ctx1) {
  1261. //>>excludeEnd("ctx");
  1262. var $1;
  1263. $1=self._visitNode_(aNode);
  1264. return $1;
  1265. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1266. }, function($ctx1) {$ctx1.fill(self,"visitJSStatementNode:",{aNode:aNode},globals.NodeVisitor)});
  1267. //>>excludeEnd("ctx");
  1268. },
  1269. //>>excludeStart("ide", pragmas.excludeIdeData);
  1270. args: ["aNode"],
  1271. source: "visitJSStatementNode: aNode\x0a\x09^ self visitNode: aNode",
  1272. referencedClasses: [],
  1273. //>>excludeEnd("ide");
  1274. messageSends: ["visitNode:"]
  1275. }),
  1276. globals.NodeVisitor);
  1277. smalltalk.addMethod(
  1278. smalltalk.method({
  1279. selector: "visitMethodNode:",
  1280. protocol: 'visiting',
  1281. fn: function (aNode){
  1282. var self=this;
  1283. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1284. return smalltalk.withContext(function($ctx1) {
  1285. //>>excludeEnd("ctx");
  1286. var $1;
  1287. $1=self._visitNode_(aNode);
  1288. return $1;
  1289. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1290. }, function($ctx1) {$ctx1.fill(self,"visitMethodNode:",{aNode:aNode},globals.NodeVisitor)});
  1291. //>>excludeEnd("ctx");
  1292. },
  1293. //>>excludeStart("ide", pragmas.excludeIdeData);
  1294. args: ["aNode"],
  1295. source: "visitMethodNode: aNode\x0a\x09^ self visitNode: aNode",
  1296. referencedClasses: [],
  1297. //>>excludeEnd("ide");
  1298. messageSends: ["visitNode:"]
  1299. }),
  1300. globals.NodeVisitor);
  1301. smalltalk.addMethod(
  1302. smalltalk.method({
  1303. selector: "visitNode:",
  1304. protocol: 'visiting',
  1305. fn: function (aNode){
  1306. var self=this;
  1307. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1308. return smalltalk.withContext(function($ctx1) {
  1309. //>>excludeEnd("ctx");
  1310. var $1;
  1311. $1=self._visitAll_(_st(aNode)._nodes());
  1312. return $1;
  1313. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1314. }, function($ctx1) {$ctx1.fill(self,"visitNode:",{aNode:aNode},globals.NodeVisitor)});
  1315. //>>excludeEnd("ctx");
  1316. },
  1317. //>>excludeStart("ide", pragmas.excludeIdeData);
  1318. args: ["aNode"],
  1319. source: "visitNode: aNode\x0a\x09^ self visitAll: aNode nodes",
  1320. referencedClasses: [],
  1321. //>>excludeEnd("ide");
  1322. messageSends: ["visitAll:", "nodes"]
  1323. }),
  1324. globals.NodeVisitor);
  1325. smalltalk.addMethod(
  1326. smalltalk.method({
  1327. selector: "visitReturnNode:",
  1328. protocol: 'visiting',
  1329. fn: function (aNode){
  1330. var self=this;
  1331. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1332. return smalltalk.withContext(function($ctx1) {
  1333. //>>excludeEnd("ctx");
  1334. var $1;
  1335. $1=self._visitNode_(aNode);
  1336. return $1;
  1337. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1338. }, function($ctx1) {$ctx1.fill(self,"visitReturnNode:",{aNode:aNode},globals.NodeVisitor)});
  1339. //>>excludeEnd("ctx");
  1340. },
  1341. //>>excludeStart("ide", pragmas.excludeIdeData);
  1342. args: ["aNode"],
  1343. source: "visitReturnNode: aNode\x0a\x09^ self visitNode: aNode",
  1344. referencedClasses: [],
  1345. //>>excludeEnd("ide");
  1346. messageSends: ["visitNode:"]
  1347. }),
  1348. globals.NodeVisitor);
  1349. smalltalk.addMethod(
  1350. smalltalk.method({
  1351. selector: "visitSendNode:",
  1352. protocol: 'visiting',
  1353. fn: function (aNode){
  1354. var self=this;
  1355. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1356. return smalltalk.withContext(function($ctx1) {
  1357. //>>excludeEnd("ctx");
  1358. var $1;
  1359. $1=self._visitNode_(aNode);
  1360. return $1;
  1361. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1362. }, function($ctx1) {$ctx1.fill(self,"visitSendNode:",{aNode:aNode},globals.NodeVisitor)});
  1363. //>>excludeEnd("ctx");
  1364. },
  1365. //>>excludeStart("ide", pragmas.excludeIdeData);
  1366. args: ["aNode"],
  1367. source: "visitSendNode: aNode\x0a\x09^ self visitNode: aNode",
  1368. referencedClasses: [],
  1369. //>>excludeEnd("ide");
  1370. messageSends: ["visitNode:"]
  1371. }),
  1372. globals.NodeVisitor);
  1373. smalltalk.addMethod(
  1374. smalltalk.method({
  1375. selector: "visitSequenceNode:",
  1376. protocol: 'visiting',
  1377. fn: function (aNode){
  1378. var self=this;
  1379. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1380. return smalltalk.withContext(function($ctx1) {
  1381. //>>excludeEnd("ctx");
  1382. var $1;
  1383. $1=self._visitNode_(aNode);
  1384. return $1;
  1385. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1386. }, function($ctx1) {$ctx1.fill(self,"visitSequenceNode:",{aNode:aNode},globals.NodeVisitor)});
  1387. //>>excludeEnd("ctx");
  1388. },
  1389. //>>excludeStart("ide", pragmas.excludeIdeData);
  1390. args: ["aNode"],
  1391. source: "visitSequenceNode: aNode\x0a\x09^ self visitNode: aNode",
  1392. referencedClasses: [],
  1393. //>>excludeEnd("ide");
  1394. messageSends: ["visitNode:"]
  1395. }),
  1396. globals.NodeVisitor);
  1397. smalltalk.addMethod(
  1398. smalltalk.method({
  1399. selector: "visitValueNode:",
  1400. protocol: 'visiting',
  1401. fn: function (aNode){
  1402. var self=this;
  1403. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1404. return smalltalk.withContext(function($ctx1) {
  1405. //>>excludeEnd("ctx");
  1406. var $1;
  1407. $1=self._visitNode_(aNode);
  1408. return $1;
  1409. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1410. }, function($ctx1) {$ctx1.fill(self,"visitValueNode:",{aNode:aNode},globals.NodeVisitor)});
  1411. //>>excludeEnd("ctx");
  1412. },
  1413. //>>excludeStart("ide", pragmas.excludeIdeData);
  1414. args: ["aNode"],
  1415. source: "visitValueNode: aNode\x0a\x09^ self visitNode: aNode",
  1416. referencedClasses: [],
  1417. //>>excludeEnd("ide");
  1418. messageSends: ["visitNode:"]
  1419. }),
  1420. globals.NodeVisitor);
  1421. smalltalk.addMethod(
  1422. smalltalk.method({
  1423. selector: "visitVariableNode:",
  1424. protocol: 'visiting',
  1425. fn: function (aNode){
  1426. var self=this;
  1427. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1428. return smalltalk.withContext(function($ctx1) {
  1429. //>>excludeEnd("ctx");
  1430. var $1;
  1431. $1=self._visitNode_(aNode);
  1432. return $1;
  1433. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1434. }, function($ctx1) {$ctx1.fill(self,"visitVariableNode:",{aNode:aNode},globals.NodeVisitor)});
  1435. //>>excludeEnd("ctx");
  1436. },
  1437. //>>excludeStart("ide", pragmas.excludeIdeData);
  1438. args: ["aNode"],
  1439. source: "visitVariableNode: aNode\x0a\x09^ self visitNode: aNode",
  1440. referencedClasses: [],
  1441. //>>excludeEnd("ide");
  1442. messageSends: ["visitNode:"]
  1443. }),
  1444. globals.NodeVisitor);
  1445. smalltalk.addMethod(
  1446. smalltalk.method({
  1447. selector: "asVariableName",
  1448. protocol: '*Compiler-Core',
  1449. fn: function (){
  1450. var self=this;
  1451. function $Smalltalk(){return globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  1452. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1453. return smalltalk.withContext(function($ctx1) {
  1454. //>>excludeEnd("ctx");
  1455. var $2,$1;
  1456. $2=_st(_st($Smalltalk())._reservedWords())._includes_(self);
  1457. if(smalltalk.assert($2)){
  1458. $1=self.__comma("_");
  1459. } else {
  1460. $1=self;
  1461. };
  1462. return $1;
  1463. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1464. }, function($ctx1) {$ctx1.fill(self,"asVariableName",{},globals.String)});
  1465. //>>excludeEnd("ctx");
  1466. },
  1467. //>>excludeStart("ide", pragmas.excludeIdeData);
  1468. args: [],
  1469. source: "asVariableName\x0a\x09^ (Smalltalk reservedWords includes: self)\x0a\x09\x09ifTrue: [ self, '_' ]\x0a\x09\x09ifFalse: [ self ]",
  1470. referencedClasses: ["Smalltalk"],
  1471. //>>excludeEnd("ide");
  1472. messageSends: ["ifTrue:ifFalse:", "includes:", "reservedWords", ","]
  1473. }),
  1474. globals.String);
  1475. });