Compiler-AST.js 88 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066
  1. define(["amber/boot", "require", "amber/core/Compiler-Core", "amber/core/Kernel-Dag", "amber/core/Kernel-Exceptions", "amber/core/Kernel-Methods", "amber/core/Kernel-Objects"], function($boot,requirejs){"use strict";
  2. var $core=$boot.api,nil=$boot.nilAsValue,$nil=$boot.nilAsReceiver,$recv=$boot.asReceiver,$globals=$boot.globals;
  3. var $pkg = $core.addPackage("Compiler-AST");
  4. $pkg.transport = {"type":"amd","amdNamespace":"amber/core"};
  5. $core.addClass("ASTNode", $globals.DagParentNode, ["parent", "position", "source"], "Compiler-AST");
  6. //>>excludeStart("ide", pragmas.excludeIdeData);
  7. $globals.ASTNode.comment="I am the abstract root class of the abstract syntax tree.\x0a\x0aConcrete classes should implement `#accept:` to allow visiting.\x0a\x0a`position` holds a point containing line and column number of the symbol location in the original source file.";
  8. //>>excludeEnd("ide");
  9. $core.addMethod(
  10. $core.method({
  11. selector: "inPosition:",
  12. protocol: "testing",
  13. //>>excludeStart("ide", pragmas.excludeIdeData);
  14. args: ["aPoint"],
  15. source: "inPosition: aPoint\x0a\x09^ (self positionStart <= aPoint and: [\x0a\x09\x09self positionEnd >= aPoint ])",
  16. referencedClasses: [],
  17. //>>excludeEnd("ide");
  18. pragmas: [],
  19. messageSends: ["and:", "<=", "positionStart", ">=", "positionEnd"]
  20. }, function ($methodClass){ return function (aPoint){
  21. var self=this,$self=this;
  22. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23. return $core.withContext(function($ctx1) {
  24. //>>excludeEnd("ctx");
  25. if($core.assert($recv($self._positionStart()).__lt_eq(aPoint))){
  26. return $recv($self._positionEnd()).__gt_eq(aPoint);
  27. } else {
  28. return false;
  29. }
  30. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31. }, function($ctx1) {$ctx1.fill(self,"inPosition:",{aPoint:aPoint})});
  32. //>>excludeEnd("ctx");
  33. }; }),
  34. $globals.ASTNode);
  35. $core.addMethod(
  36. $core.method({
  37. selector: "isNavigationNode",
  38. protocol: "testing",
  39. //>>excludeStart("ide", pragmas.excludeIdeData);
  40. args: [],
  41. source: "isNavigationNode\x0a\x09\x22Answer true if the node can be navigated to\x22\x0a\x09\x0a\x09^ false",
  42. referencedClasses: [],
  43. //>>excludeEnd("ide");
  44. pragmas: [],
  45. messageSends: []
  46. }, function ($methodClass){ return function (){
  47. var self=this,$self=this;
  48. return false;
  49. }; }),
  50. $globals.ASTNode);
  51. $core.addMethod(
  52. $core.method({
  53. selector: "isReturnNode",
  54. protocol: "testing",
  55. //>>excludeStart("ide", pragmas.excludeIdeData);
  56. args: [],
  57. source: "isReturnNode\x0a\x09^ false",
  58. referencedClasses: [],
  59. //>>excludeEnd("ide");
  60. pragmas: [],
  61. messageSends: []
  62. }, function ($methodClass){ return function (){
  63. var self=this,$self=this;
  64. return false;
  65. }; }),
  66. $globals.ASTNode);
  67. $core.addMethod(
  68. $core.method({
  69. selector: "location:",
  70. protocol: "accessing",
  71. //>>excludeStart("ide", pragmas.excludeIdeData);
  72. args: ["aLocation"],
  73. source: "location: aLocation\x0a\x09self position: aLocation start line @ aLocation start column",
  74. referencedClasses: [],
  75. //>>excludeEnd("ide");
  76. pragmas: [],
  77. messageSends: ["position:", "@", "line", "start", "column"]
  78. }, function ($methodClass){ return function (aLocation){
  79. var self=this,$self=this;
  80. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81. return $core.withContext(function($ctx1) {
  82. //>>excludeEnd("ctx");
  83. $self._position_($recv($recv([$recv(aLocation)._start()
  84. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  85. ,$ctx1.sendIdx["start"]=1
  86. //>>excludeEnd("ctx");
  87. ][0])._line()).__at($recv($recv(aLocation)._start())._column()));
  88. return self;
  89. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  90. }, function($ctx1) {$ctx1.fill(self,"location:",{aLocation:aLocation})});
  91. //>>excludeEnd("ctx");
  92. }; }),
  93. $globals.ASTNode);
  94. $core.addMethod(
  95. $core.method({
  96. selector: "navigationNodeAt:ifAbsent:",
  97. protocol: "accessing",
  98. //>>excludeStart("ide", pragmas.excludeIdeData);
  99. args: ["aPoint", "aBlock"],
  100. source: "navigationNodeAt: aPoint ifAbsent: aBlock\x0a\x09\x22Answer the navigation node in the receiver's tree at aPoint \x0a\x09or nil if no navigation node was found.\x0a\x09\x0a\x09See `node >> isNaviationNode`\x22\x0a\x09\x0a\x09| children |\x0a\x09\x0a\x09children := self allDagChildren select: [ :each | \x0a\x09\x09each isNavigationNode and: [ each inPosition: aPoint ] ].\x0a\x09\x0a\x09children ifEmpty: [ ^ aBlock value ].\x0a\x09\x0a\x09^ (children asArray sort: [ :a :b | \x0a\x09\x09(a positionStart dist: aPoint) <= \x0a\x09\x09(b positionStart dist: aPoint) ]) first",
  101. referencedClasses: [],
  102. //>>excludeEnd("ide");
  103. pragmas: [],
  104. messageSends: ["select:", "allDagChildren", "and:", "isNavigationNode", "inPosition:", "ifEmpty:", "value", "first", "sort:", "asArray", "<=", "dist:", "positionStart"]
  105. }, function ($methodClass){ return function (aPoint,aBlock){
  106. var self=this,$self=this;
  107. var children;
  108. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  109. return $core.withContext(function($ctx1) {
  110. //>>excludeEnd("ctx");
  111. var $early={};
  112. try {
  113. children=$recv($self._allDagChildren())._select_((function(each){
  114. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  115. return $core.withContext(function($ctx2) {
  116. //>>excludeEnd("ctx");
  117. if($core.assert($recv(each)._isNavigationNode())){
  118. return $recv(each)._inPosition_(aPoint);
  119. } else {
  120. return false;
  121. }
  122. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  123. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  124. //>>excludeEnd("ctx");
  125. }));
  126. $recv(children)._ifEmpty_((function(){
  127. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  128. return $core.withContext(function($ctx2) {
  129. //>>excludeEnd("ctx");
  130. throw $early=[$recv(aBlock)._value()];
  131. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  132. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  133. //>>excludeEnd("ctx");
  134. }));
  135. return $recv($recv($recv(children)._asArray())._sort_((function(a,b){
  136. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  137. return $core.withContext(function($ctx2) {
  138. //>>excludeEnd("ctx");
  139. return $recv([$recv([$recv(a)._positionStart()
  140. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  141. ,$ctx2.sendIdx["positionStart"]=1
  142. //>>excludeEnd("ctx");
  143. ][0])._dist_(aPoint)
  144. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  145. ,$ctx2.sendIdx["dist:"]=1
  146. //>>excludeEnd("ctx");
  147. ][0]).__lt_eq($recv($recv(b)._positionStart())._dist_(aPoint));
  148. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  149. }, function($ctx2) {$ctx2.fillBlock({a:a,b:b},$ctx1,4)});
  150. //>>excludeEnd("ctx");
  151. })))._first();
  152. }
  153. catch(e) {if(e===$early)return e[0]; throw e}
  154. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  155. }, function($ctx1) {$ctx1.fill(self,"navigationNodeAt:ifAbsent:",{aPoint:aPoint,aBlock:aBlock,children:children})});
  156. //>>excludeEnd("ctx");
  157. }; }),
  158. $globals.ASTNode);
  159. $core.addMethod(
  160. $core.method({
  161. selector: "parent",
  162. protocol: "accessing",
  163. //>>excludeStart("ide", pragmas.excludeIdeData);
  164. args: [],
  165. source: "parent\x0a\x09^ parent",
  166. referencedClasses: [],
  167. //>>excludeEnd("ide");
  168. pragmas: [],
  169. messageSends: []
  170. }, function ($methodClass){ return function (){
  171. var self=this,$self=this;
  172. return $self.parent;
  173. }; }),
  174. $globals.ASTNode);
  175. $core.addMethod(
  176. $core.method({
  177. selector: "parent:",
  178. protocol: "accessing",
  179. //>>excludeStart("ide", pragmas.excludeIdeData);
  180. args: ["aNode"],
  181. source: "parent: aNode\x0a\x09parent := aNode",
  182. referencedClasses: [],
  183. //>>excludeEnd("ide");
  184. pragmas: [],
  185. messageSends: []
  186. }, function ($methodClass){ return function (aNode){
  187. var self=this,$self=this;
  188. $self.parent=aNode;
  189. return self;
  190. }; }),
  191. $globals.ASTNode);
  192. $core.addMethod(
  193. $core.method({
  194. selector: "position",
  195. protocol: "accessing",
  196. //>>excludeStart("ide", pragmas.excludeIdeData);
  197. args: [],
  198. source: "position\x0a\x09\x22answer the line and column of the receiver in the source code\x22\x0a\x09\x0a\x09^ position ifNil: [ \x0a\x09\x09self parent ifNotNil: [ :node | node position ] ]",
  199. referencedClasses: [],
  200. //>>excludeEnd("ide");
  201. pragmas: [],
  202. messageSends: ["ifNil:", "ifNotNil:", "parent", "position"]
  203. }, function ($methodClass){ return function (){
  204. var self=this,$self=this;
  205. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  206. return $core.withContext(function($ctx1) {
  207. //>>excludeEnd("ctx");
  208. var $1,$2;
  209. $1=$self.position;
  210. if($1 == null || $1.a$nil){
  211. $2=$self._parent();
  212. if($2 == null || $2.a$nil){
  213. return $2;
  214. } else {
  215. var node;
  216. node=$2;
  217. return $recv(node)._position();
  218. }
  219. } else {
  220. return $1;
  221. }
  222. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  223. }, function($ctx1) {$ctx1.fill(self,"position",{})});
  224. //>>excludeEnd("ctx");
  225. }; }),
  226. $globals.ASTNode);
  227. $core.addMethod(
  228. $core.method({
  229. selector: "position:",
  230. protocol: "accessing",
  231. //>>excludeStart("ide", pragmas.excludeIdeData);
  232. args: ["aPosition"],
  233. source: "position: aPosition\x0a\x09position := aPosition",
  234. referencedClasses: [],
  235. //>>excludeEnd("ide");
  236. pragmas: [],
  237. messageSends: []
  238. }, function ($methodClass){ return function (aPosition){
  239. var self=this,$self=this;
  240. $self.position=aPosition;
  241. return self;
  242. }; }),
  243. $globals.ASTNode);
  244. $core.addMethod(
  245. $core.method({
  246. selector: "positionEnd",
  247. protocol: "accessing",
  248. //>>excludeStart("ide", pragmas.excludeIdeData);
  249. args: [],
  250. source: "positionEnd\x0a\x09^ self positionStart + ((self source lines size - 1) @ (self source lines last size - 1))",
  251. referencedClasses: [],
  252. //>>excludeEnd("ide");
  253. pragmas: [],
  254. messageSends: ["+", "positionStart", "@", "-", "size", "lines", "source", "last"]
  255. }, function ($methodClass){ return function (){
  256. var self=this,$self=this;
  257. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  258. return $core.withContext(function($ctx1) {
  259. //>>excludeEnd("ctx");
  260. return $recv($self._positionStart()).__plus($recv([$recv([$recv([$recv([$self._source()
  261. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  262. ,$ctx1.sendIdx["source"]=1
  263. //>>excludeEnd("ctx");
  264. ][0])._lines()
  265. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  266. ,$ctx1.sendIdx["lines"]=1
  267. //>>excludeEnd("ctx");
  268. ][0])._size()
  269. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  270. ,$ctx1.sendIdx["size"]=1
  271. //>>excludeEnd("ctx");
  272. ][0]).__minus((1))
  273. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  274. ,$ctx1.sendIdx["-"]=1
  275. //>>excludeEnd("ctx");
  276. ][0]).__at($recv($recv($recv($recv($self._source())._lines())._last())._size()).__minus((1))));
  277. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  278. }, function($ctx1) {$ctx1.fill(self,"positionEnd",{})});
  279. //>>excludeEnd("ctx");
  280. }; }),
  281. $globals.ASTNode);
  282. $core.addMethod(
  283. $core.method({
  284. selector: "positionStart",
  285. protocol: "accessing",
  286. //>>excludeStart("ide", pragmas.excludeIdeData);
  287. args: [],
  288. source: "positionStart\x0a\x09^ self position",
  289. referencedClasses: [],
  290. //>>excludeEnd("ide");
  291. pragmas: [],
  292. messageSends: ["position"]
  293. }, function ($methodClass){ return function (){
  294. var self=this,$self=this;
  295. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  296. return $core.withContext(function($ctx1) {
  297. //>>excludeEnd("ctx");
  298. return $self._position();
  299. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  300. }, function($ctx1) {$ctx1.fill(self,"positionStart",{})});
  301. //>>excludeEnd("ctx");
  302. }; }),
  303. $globals.ASTNode);
  304. $core.addMethod(
  305. $core.method({
  306. selector: "size",
  307. protocol: "accessing",
  308. //>>excludeStart("ide", pragmas.excludeIdeData);
  309. args: [],
  310. source: "size\x0a\x09^ self source size",
  311. referencedClasses: [],
  312. //>>excludeEnd("ide");
  313. pragmas: [],
  314. messageSends: ["size", "source"]
  315. }, function ($methodClass){ return function (){
  316. var self=this,$self=this;
  317. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  318. return $core.withContext(function($ctx1) {
  319. //>>excludeEnd("ctx");
  320. return $recv($self._source())._size();
  321. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  322. }, function($ctx1) {$ctx1.fill(self,"size",{})});
  323. //>>excludeEnd("ctx");
  324. }; }),
  325. $globals.ASTNode);
  326. $core.addMethod(
  327. $core.method({
  328. selector: "source",
  329. protocol: "accessing",
  330. //>>excludeStart("ide", pragmas.excludeIdeData);
  331. args: [],
  332. source: "source\x0a\x09^ source ifNil: [ '' ]",
  333. referencedClasses: [],
  334. //>>excludeEnd("ide");
  335. pragmas: [],
  336. messageSends: ["ifNil:"]
  337. }, function ($methodClass){ return function (){
  338. var self=this,$self=this;
  339. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  340. return $core.withContext(function($ctx1) {
  341. //>>excludeEnd("ctx");
  342. var $1;
  343. $1=$self.source;
  344. if($1 == null || $1.a$nil){
  345. return "";
  346. } else {
  347. return $1;
  348. }
  349. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  350. }, function($ctx1) {$ctx1.fill(self,"source",{})});
  351. //>>excludeEnd("ctx");
  352. }; }),
  353. $globals.ASTNode);
  354. $core.addMethod(
  355. $core.method({
  356. selector: "source:",
  357. protocol: "accessing",
  358. //>>excludeStart("ide", pragmas.excludeIdeData);
  359. args: ["aString"],
  360. source: "source: aString\x0a\x09source := aString",
  361. referencedClasses: [],
  362. //>>excludeEnd("ide");
  363. pragmas: [],
  364. messageSends: []
  365. }, function ($methodClass){ return function (aString){
  366. var self=this,$self=this;
  367. $self.source=aString;
  368. return self;
  369. }; }),
  370. $globals.ASTNode);
  371. $core.addClass("ExpressionNode", $globals.ASTNode, ["shouldBeAliased"], "Compiler-AST");
  372. //>>excludeStart("ide", pragmas.excludeIdeData);
  373. $globals.ExpressionNode.comment="I am the abstract root class for expression nodes.";
  374. //>>excludeEnd("ide");
  375. $core.addMethod(
  376. $core.method({
  377. selector: "isIdempotent",
  378. protocol: "testing",
  379. //>>excludeStart("ide", pragmas.excludeIdeData);
  380. args: [],
  381. source: "isIdempotent\x0a\x09^ false",
  382. referencedClasses: [],
  383. //>>excludeEnd("ide");
  384. pragmas: [],
  385. messageSends: []
  386. }, function ($methodClass){ return function (){
  387. var self=this,$self=this;
  388. return false;
  389. }; }),
  390. $globals.ExpressionNode);
  391. $core.addMethod(
  392. $core.method({
  393. selector: "isImmutable",
  394. protocol: "testing",
  395. //>>excludeStart("ide", pragmas.excludeIdeData);
  396. args: [],
  397. source: "isImmutable\x0a\x09self deprecatedAPI: 'Use #isIdempotent instead.'.\x0a\x09^ self isIdempotent",
  398. referencedClasses: [],
  399. //>>excludeEnd("ide");
  400. pragmas: [],
  401. messageSends: ["deprecatedAPI:", "isIdempotent"]
  402. }, function ($methodClass){ return function (){
  403. var self=this,$self=this;
  404. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  405. return $core.withContext(function($ctx1) {
  406. //>>excludeEnd("ctx");
  407. $self._deprecatedAPI_("Use #isIdempotent instead.");
  408. return $self._isIdempotent();
  409. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  410. }, function($ctx1) {$ctx1.fill(self,"isImmutable",{})});
  411. //>>excludeEnd("ctx");
  412. }; }),
  413. $globals.ExpressionNode);
  414. $core.addMethod(
  415. $core.method({
  416. selector: "isSuper",
  417. protocol: "testing",
  418. //>>excludeStart("ide", pragmas.excludeIdeData);
  419. args: [],
  420. source: "isSuper\x0a\x09^ false",
  421. referencedClasses: [],
  422. //>>excludeEnd("ide");
  423. pragmas: [],
  424. messageSends: []
  425. }, function ($methodClass){ return function (){
  426. var self=this,$self=this;
  427. return false;
  428. }; }),
  429. $globals.ExpressionNode);
  430. $core.addMethod(
  431. $core.method({
  432. selector: "shouldBeAliased",
  433. protocol: "accessing",
  434. //>>excludeStart("ide", pragmas.excludeIdeData);
  435. args: [],
  436. source: "shouldBeAliased\x0a\x09^ shouldBeAliased ifNil: [ false ]",
  437. referencedClasses: [],
  438. //>>excludeEnd("ide");
  439. pragmas: [],
  440. messageSends: ["ifNil:"]
  441. }, function ($methodClass){ return function (){
  442. var self=this,$self=this;
  443. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  444. return $core.withContext(function($ctx1) {
  445. //>>excludeEnd("ctx");
  446. var $1;
  447. $1=$self.shouldBeAliased;
  448. if($1 == null || $1.a$nil){
  449. return false;
  450. } else {
  451. return $1;
  452. }
  453. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  454. }, function($ctx1) {$ctx1.fill(self,"shouldBeAliased",{})});
  455. //>>excludeEnd("ctx");
  456. }; }),
  457. $globals.ExpressionNode);
  458. $core.addMethod(
  459. $core.method({
  460. selector: "shouldBeAliased:",
  461. protocol: "accessing",
  462. //>>excludeStart("ide", pragmas.excludeIdeData);
  463. args: ["aBoolean"],
  464. source: "shouldBeAliased: aBoolean\x0a\x09shouldBeAliased := aBoolean",
  465. referencedClasses: [],
  466. //>>excludeEnd("ide");
  467. pragmas: [],
  468. messageSends: []
  469. }, function ($methodClass){ return function (aBoolean){
  470. var self=this,$self=this;
  471. $self.shouldBeAliased=aBoolean;
  472. return self;
  473. }; }),
  474. $globals.ExpressionNode);
  475. $core.addMethod(
  476. $core.method({
  477. selector: "withTail:",
  478. protocol: "building",
  479. //>>excludeStart("ide", pragmas.excludeIdeData);
  480. args: ["aCollection"],
  481. source: "withTail: aCollection\x0a\x09^ aCollection inject: self into: [\x0a\x09\x09:receiver :send | SendNode new\x0a\x09\x09\x09position: send position;\x0a\x09\x09\x09source: send source;\x0a\x09\x09\x09receiver: receiver;\x0a\x09\x09\x09selector: send selector;\x0a\x09\x09\x09arguments: send arguments;\x0a\x09\x09\x09yourself ]",
  482. referencedClasses: ["SendNode"],
  483. //>>excludeEnd("ide");
  484. pragmas: [],
  485. messageSends: ["inject:into:", "position:", "new", "position", "source:", "source", "receiver:", "selector:", "selector", "arguments:", "arguments", "yourself"]
  486. }, function ($methodClass){ return function (aCollection){
  487. var self=this,$self=this;
  488. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  489. return $core.withContext(function($ctx1) {
  490. //>>excludeEnd("ctx");
  491. var $1;
  492. return $recv(aCollection)._inject_into_(self,(function(receiver,send){
  493. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  494. return $core.withContext(function($ctx2) {
  495. //>>excludeEnd("ctx");
  496. $1=$recv($globals.SendNode)._new();
  497. $recv($1)._position_($recv(send)._position());
  498. $recv($1)._source_($recv(send)._source());
  499. $recv($1)._receiver_(receiver);
  500. $recv($1)._selector_($recv(send)._selector());
  501. $recv($1)._arguments_($recv(send)._arguments());
  502. return $recv($1)._yourself();
  503. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  504. }, function($ctx2) {$ctx2.fillBlock({receiver:receiver,send:send},$ctx1,1)});
  505. //>>excludeEnd("ctx");
  506. }));
  507. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  508. }, function($ctx1) {$ctx1.fill(self,"withTail:",{aCollection:aCollection})});
  509. //>>excludeEnd("ctx");
  510. }; }),
  511. $globals.ExpressionNode);
  512. $core.addClass("AssignmentNode", $globals.ExpressionNode, ["left", "right"], "Compiler-AST");
  513. //>>excludeStart("ide", pragmas.excludeIdeData);
  514. $globals.AssignmentNode.comment="I represent an assignment node.";
  515. //>>excludeEnd("ide");
  516. $core.addMethod(
  517. $core.method({
  518. selector: "acceptDagVisitor:",
  519. protocol: "visiting",
  520. //>>excludeStart("ide", pragmas.excludeIdeData);
  521. args: ["aVisitor"],
  522. source: "acceptDagVisitor: aVisitor\x0a\x09^ aVisitor visitAssignmentNode: self",
  523. referencedClasses: [],
  524. //>>excludeEnd("ide");
  525. pragmas: [],
  526. messageSends: ["visitAssignmentNode:"]
  527. }, function ($methodClass){ return function (aVisitor){
  528. var self=this,$self=this;
  529. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  530. return $core.withContext(function($ctx1) {
  531. //>>excludeEnd("ctx");
  532. return $recv(aVisitor)._visitAssignmentNode_(self);
  533. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  534. }, function($ctx1) {$ctx1.fill(self,"acceptDagVisitor:",{aVisitor:aVisitor})});
  535. //>>excludeEnd("ctx");
  536. }; }),
  537. $globals.AssignmentNode);
  538. $core.addMethod(
  539. $core.method({
  540. selector: "dagChildren",
  541. protocol: "accessing",
  542. //>>excludeStart("ide", pragmas.excludeIdeData);
  543. args: [],
  544. source: "dagChildren\x0a\x09^ { self left. self right }",
  545. referencedClasses: [],
  546. //>>excludeEnd("ide");
  547. pragmas: [],
  548. messageSends: ["left", "right"]
  549. }, function ($methodClass){ return function (){
  550. var self=this,$self=this;
  551. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  552. return $core.withContext(function($ctx1) {
  553. //>>excludeEnd("ctx");
  554. return [$self._left(),$self._right()];
  555. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  556. }, function($ctx1) {$ctx1.fill(self,"dagChildren",{})});
  557. //>>excludeEnd("ctx");
  558. }; }),
  559. $globals.AssignmentNode);
  560. $core.addMethod(
  561. $core.method({
  562. selector: "left",
  563. protocol: "accessing",
  564. //>>excludeStart("ide", pragmas.excludeIdeData);
  565. args: [],
  566. source: "left\x0a\x09^ left",
  567. referencedClasses: [],
  568. //>>excludeEnd("ide");
  569. pragmas: [],
  570. messageSends: []
  571. }, function ($methodClass){ return function (){
  572. var self=this,$self=this;
  573. return $self.left;
  574. }; }),
  575. $globals.AssignmentNode);
  576. $core.addMethod(
  577. $core.method({
  578. selector: "left:",
  579. protocol: "accessing",
  580. //>>excludeStart("ide", pragmas.excludeIdeData);
  581. args: ["aNode"],
  582. source: "left: aNode\x0a\x09left := aNode",
  583. referencedClasses: [],
  584. //>>excludeEnd("ide");
  585. pragmas: [],
  586. messageSends: []
  587. }, function ($methodClass){ return function (aNode){
  588. var self=this,$self=this;
  589. $self.left=aNode;
  590. return self;
  591. }; }),
  592. $globals.AssignmentNode);
  593. $core.addMethod(
  594. $core.method({
  595. selector: "right",
  596. protocol: "accessing",
  597. //>>excludeStart("ide", pragmas.excludeIdeData);
  598. args: [],
  599. source: "right\x0a\x09^ right",
  600. referencedClasses: [],
  601. //>>excludeEnd("ide");
  602. pragmas: [],
  603. messageSends: []
  604. }, function ($methodClass){ return function (){
  605. var self=this,$self=this;
  606. return $self.right;
  607. }; }),
  608. $globals.AssignmentNode);
  609. $core.addMethod(
  610. $core.method({
  611. selector: "right:",
  612. protocol: "accessing",
  613. //>>excludeStart("ide", pragmas.excludeIdeData);
  614. args: ["aNode"],
  615. source: "right: aNode\x0a\x09right := aNode",
  616. referencedClasses: [],
  617. //>>excludeEnd("ide");
  618. pragmas: [],
  619. messageSends: []
  620. }, function ($methodClass){ return function (aNode){
  621. var self=this,$self=this;
  622. $self.right=aNode;
  623. return self;
  624. }; }),
  625. $globals.AssignmentNode);
  626. $core.addClass("BlockNode", $globals.ExpressionNode, ["parameters", "scope", "sequenceNode"], "Compiler-AST");
  627. //>>excludeStart("ide", pragmas.excludeIdeData);
  628. $globals.BlockNode.comment="I represent an block closure node.";
  629. //>>excludeEnd("ide");
  630. $core.addMethod(
  631. $core.method({
  632. selector: "acceptDagVisitor:",
  633. protocol: "visiting",
  634. //>>excludeStart("ide", pragmas.excludeIdeData);
  635. args: ["aVisitor"],
  636. source: "acceptDagVisitor: aVisitor\x0a\x09^ aVisitor visitBlockNode: self",
  637. referencedClasses: [],
  638. //>>excludeEnd("ide");
  639. pragmas: [],
  640. messageSends: ["visitBlockNode:"]
  641. }, function ($methodClass){ return function (aVisitor){
  642. var self=this,$self=this;
  643. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  644. return $core.withContext(function($ctx1) {
  645. //>>excludeEnd("ctx");
  646. return $recv(aVisitor)._visitBlockNode_(self);
  647. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  648. }, function($ctx1) {$ctx1.fill(self,"acceptDagVisitor:",{aVisitor:aVisitor})});
  649. //>>excludeEnd("ctx");
  650. }; }),
  651. $globals.BlockNode);
  652. $core.addMethod(
  653. $core.method({
  654. selector: "dagChild",
  655. protocol: "accessing",
  656. //>>excludeStart("ide", pragmas.excludeIdeData);
  657. args: [],
  658. source: "dagChild\x0a\x09^ self sequenceNode",
  659. referencedClasses: [],
  660. //>>excludeEnd("ide");
  661. pragmas: [],
  662. messageSends: ["sequenceNode"]
  663. }, function ($methodClass){ return function (){
  664. var self=this,$self=this;
  665. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  666. return $core.withContext(function($ctx1) {
  667. //>>excludeEnd("ctx");
  668. return $self._sequenceNode();
  669. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  670. }, function($ctx1) {$ctx1.fill(self,"dagChild",{})});
  671. //>>excludeEnd("ctx");
  672. }; }),
  673. $globals.BlockNode);
  674. $core.addMethod(
  675. $core.method({
  676. selector: "parameters",
  677. protocol: "accessing",
  678. //>>excludeStart("ide", pragmas.excludeIdeData);
  679. args: [],
  680. source: "parameters\x0a\x09^ parameters ifNil: [ parameters := Array new ]",
  681. referencedClasses: ["Array"],
  682. //>>excludeEnd("ide");
  683. pragmas: [],
  684. messageSends: ["ifNil:", "new"]
  685. }, function ($methodClass){ return function (){
  686. var self=this,$self=this;
  687. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  688. return $core.withContext(function($ctx1) {
  689. //>>excludeEnd("ctx");
  690. var $1;
  691. $1=$self.parameters;
  692. if($1 == null || $1.a$nil){
  693. $self.parameters=$recv($globals.Array)._new();
  694. return $self.parameters;
  695. } else {
  696. return $1;
  697. }
  698. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  699. }, function($ctx1) {$ctx1.fill(self,"parameters",{})});
  700. //>>excludeEnd("ctx");
  701. }; }),
  702. $globals.BlockNode);
  703. $core.addMethod(
  704. $core.method({
  705. selector: "parameters:",
  706. protocol: "accessing",
  707. //>>excludeStart("ide", pragmas.excludeIdeData);
  708. args: ["aCollection"],
  709. source: "parameters: aCollection\x0a\x09parameters := aCollection",
  710. referencedClasses: [],
  711. //>>excludeEnd("ide");
  712. pragmas: [],
  713. messageSends: []
  714. }, function ($methodClass){ return function (aCollection){
  715. var self=this,$self=this;
  716. $self.parameters=aCollection;
  717. return self;
  718. }; }),
  719. $globals.BlockNode);
  720. $core.addMethod(
  721. $core.method({
  722. selector: "scope",
  723. protocol: "accessing",
  724. //>>excludeStart("ide", pragmas.excludeIdeData);
  725. args: [],
  726. source: "scope\x0a\x09^ scope",
  727. referencedClasses: [],
  728. //>>excludeEnd("ide");
  729. pragmas: [],
  730. messageSends: []
  731. }, function ($methodClass){ return function (){
  732. var self=this,$self=this;
  733. return $self.scope;
  734. }; }),
  735. $globals.BlockNode);
  736. $core.addMethod(
  737. $core.method({
  738. selector: "scope:",
  739. protocol: "accessing",
  740. //>>excludeStart("ide", pragmas.excludeIdeData);
  741. args: ["aLexicalScope"],
  742. source: "scope: aLexicalScope\x0a\x09scope := aLexicalScope",
  743. referencedClasses: [],
  744. //>>excludeEnd("ide");
  745. pragmas: [],
  746. messageSends: []
  747. }, function ($methodClass){ return function (aLexicalScope){
  748. var self=this,$self=this;
  749. $self.scope=aLexicalScope;
  750. return self;
  751. }; }),
  752. $globals.BlockNode);
  753. $core.addMethod(
  754. $core.method({
  755. selector: "sequenceNode",
  756. protocol: "accessing",
  757. //>>excludeStart("ide", pragmas.excludeIdeData);
  758. args: [],
  759. source: "sequenceNode\x0a\x09^ sequenceNode",
  760. referencedClasses: [],
  761. //>>excludeEnd("ide");
  762. pragmas: [],
  763. messageSends: []
  764. }, function ($methodClass){ return function (){
  765. var self=this,$self=this;
  766. return $self.sequenceNode;
  767. }; }),
  768. $globals.BlockNode);
  769. $core.addMethod(
  770. $core.method({
  771. selector: "sequenceNode:",
  772. protocol: "accessing",
  773. //>>excludeStart("ide", pragmas.excludeIdeData);
  774. args: ["anObject"],
  775. source: "sequenceNode: anObject\x0a\x09sequenceNode := anObject",
  776. referencedClasses: [],
  777. //>>excludeEnd("ide");
  778. pragmas: [],
  779. messageSends: []
  780. }, function ($methodClass){ return function (anObject){
  781. var self=this,$self=this;
  782. $self.sequenceNode=anObject;
  783. return self;
  784. }; }),
  785. $globals.BlockNode);
  786. $core.addClass("CascadeNode", $globals.ExpressionNode, ["receiver"], "Compiler-AST");
  787. //>>excludeStart("ide", pragmas.excludeIdeData);
  788. $globals.CascadeNode.comment="I represent an cascade node.";
  789. //>>excludeEnd("ide");
  790. $core.addMethod(
  791. $core.method({
  792. selector: "acceptDagVisitor:",
  793. protocol: "visiting",
  794. //>>excludeStart("ide", pragmas.excludeIdeData);
  795. args: ["aVisitor"],
  796. source: "acceptDagVisitor: aVisitor\x0a\x09^ aVisitor visitCascadeNode: self",
  797. referencedClasses: [],
  798. //>>excludeEnd("ide");
  799. pragmas: [],
  800. messageSends: ["visitCascadeNode:"]
  801. }, function ($methodClass){ return function (aVisitor){
  802. var self=this,$self=this;
  803. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  804. return $core.withContext(function($ctx1) {
  805. //>>excludeEnd("ctx");
  806. return $recv(aVisitor)._visitCascadeNode_(self);
  807. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  808. }, function($ctx1) {$ctx1.fill(self,"acceptDagVisitor:",{aVisitor:aVisitor})});
  809. //>>excludeEnd("ctx");
  810. }; }),
  811. $globals.CascadeNode);
  812. $core.addMethod(
  813. $core.method({
  814. selector: "receiver",
  815. protocol: "accessing",
  816. //>>excludeStart("ide", pragmas.excludeIdeData);
  817. args: [],
  818. source: "receiver\x0a\x09^ receiver",
  819. referencedClasses: [],
  820. //>>excludeEnd("ide");
  821. pragmas: [],
  822. messageSends: []
  823. }, function ($methodClass){ return function (){
  824. var self=this,$self=this;
  825. return $self.receiver;
  826. }; }),
  827. $globals.CascadeNode);
  828. $core.addMethod(
  829. $core.method({
  830. selector: "receiver:",
  831. protocol: "accessing",
  832. //>>excludeStart("ide", pragmas.excludeIdeData);
  833. args: ["aNode"],
  834. source: "receiver: aNode\x0a\x09receiver := aNode",
  835. referencedClasses: [],
  836. //>>excludeEnd("ide");
  837. pragmas: [],
  838. messageSends: []
  839. }, function ($methodClass){ return function (aNode){
  840. var self=this,$self=this;
  841. $self.receiver=aNode;
  842. return self;
  843. }; }),
  844. $globals.CascadeNode);
  845. $core.addClass("DynamicArrayNode", $globals.ExpressionNode, [], "Compiler-AST");
  846. //>>excludeStart("ide", pragmas.excludeIdeData);
  847. $globals.DynamicArrayNode.comment="I represent an dynamic array node.";
  848. //>>excludeEnd("ide");
  849. $core.addMethod(
  850. $core.method({
  851. selector: "acceptDagVisitor:",
  852. protocol: "visiting",
  853. //>>excludeStart("ide", pragmas.excludeIdeData);
  854. args: ["aVisitor"],
  855. source: "acceptDagVisitor: aVisitor\x0a\x09^ aVisitor visitDynamicArrayNode: self",
  856. referencedClasses: [],
  857. //>>excludeEnd("ide");
  858. pragmas: [],
  859. messageSends: ["visitDynamicArrayNode:"]
  860. }, function ($methodClass){ return function (aVisitor){
  861. var self=this,$self=this;
  862. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  863. return $core.withContext(function($ctx1) {
  864. //>>excludeEnd("ctx");
  865. return $recv(aVisitor)._visitDynamicArrayNode_(self);
  866. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  867. }, function($ctx1) {$ctx1.fill(self,"acceptDagVisitor:",{aVisitor:aVisitor})});
  868. //>>excludeEnd("ctx");
  869. }; }),
  870. $globals.DynamicArrayNode);
  871. $core.addClass("DynamicDictionaryNode", $globals.ExpressionNode, [], "Compiler-AST");
  872. //>>excludeStart("ide", pragmas.excludeIdeData);
  873. $globals.DynamicDictionaryNode.comment="I represent an dynamic dictionary node.";
  874. //>>excludeEnd("ide");
  875. $core.addMethod(
  876. $core.method({
  877. selector: "acceptDagVisitor:",
  878. protocol: "visiting",
  879. //>>excludeStart("ide", pragmas.excludeIdeData);
  880. args: ["aVisitor"],
  881. source: "acceptDagVisitor: aVisitor\x0a\x09^ aVisitor visitDynamicDictionaryNode: self",
  882. referencedClasses: [],
  883. //>>excludeEnd("ide");
  884. pragmas: [],
  885. messageSends: ["visitDynamicDictionaryNode:"]
  886. }, function ($methodClass){ return function (aVisitor){
  887. var self=this,$self=this;
  888. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  889. return $core.withContext(function($ctx1) {
  890. //>>excludeEnd("ctx");
  891. return $recv(aVisitor)._visitDynamicDictionaryNode_(self);
  892. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  893. }, function($ctx1) {$ctx1.fill(self,"acceptDagVisitor:",{aVisitor:aVisitor})});
  894. //>>excludeEnd("ctx");
  895. }; }),
  896. $globals.DynamicDictionaryNode);
  897. $core.addClass("SendNode", $globals.ExpressionNode, ["selector", "arguments", "receiver", "index", "javaScriptSelector", "argumentSwitcher", "isSideEffect"], "Compiler-AST");
  898. //>>excludeStart("ide", pragmas.excludeIdeData);
  899. $globals.SendNode.comment="I represent an message send node.";
  900. //>>excludeEnd("ide");
  901. $core.addMethod(
  902. $core.method({
  903. selector: "acceptDagVisitor:",
  904. protocol: "visiting",
  905. //>>excludeStart("ide", pragmas.excludeIdeData);
  906. args: ["aVisitor"],
  907. source: "acceptDagVisitor: aVisitor\x0a\x09^ aVisitor visitSendNode: self",
  908. referencedClasses: [],
  909. //>>excludeEnd("ide");
  910. pragmas: [],
  911. messageSends: ["visitSendNode:"]
  912. }, function ($methodClass){ return function (aVisitor){
  913. var self=this,$self=this;
  914. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  915. return $core.withContext(function($ctx1) {
  916. //>>excludeEnd("ctx");
  917. return $recv(aVisitor)._visitSendNode_(self);
  918. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  919. }, function($ctx1) {$ctx1.fill(self,"acceptDagVisitor:",{aVisitor:aVisitor})});
  920. //>>excludeEnd("ctx");
  921. }; }),
  922. $globals.SendNode);
  923. $core.addMethod(
  924. $core.method({
  925. selector: "argumentSwitcher",
  926. protocol: "accessing",
  927. //>>excludeStart("ide", pragmas.excludeIdeData);
  928. args: [],
  929. source: "argumentSwitcher\x0a\x09^ argumentSwitcher",
  930. referencedClasses: [],
  931. //>>excludeEnd("ide");
  932. pragmas: [],
  933. messageSends: []
  934. }, function ($methodClass){ return function (){
  935. var self=this,$self=this;
  936. return $self.argumentSwitcher;
  937. }; }),
  938. $globals.SendNode);
  939. $core.addMethod(
  940. $core.method({
  941. selector: "argumentSwitcher:",
  942. protocol: "accessing",
  943. //>>excludeStart("ide", pragmas.excludeIdeData);
  944. args: ["aJSFunction"],
  945. source: "argumentSwitcher: aJSFunction\x0a\x09argumentSwitcher := aJSFunction",
  946. referencedClasses: [],
  947. //>>excludeEnd("ide");
  948. pragmas: [],
  949. messageSends: []
  950. }, function ($methodClass){ return function (aJSFunction){
  951. var self=this,$self=this;
  952. $self.argumentSwitcher=aJSFunction;
  953. return self;
  954. }; }),
  955. $globals.SendNode);
  956. $core.addMethod(
  957. $core.method({
  958. selector: "arguments",
  959. protocol: "accessing",
  960. //>>excludeStart("ide", pragmas.excludeIdeData);
  961. args: [],
  962. source: "arguments\x0a\x09^ arguments ifNil: [ arguments := #() ]",
  963. referencedClasses: [],
  964. //>>excludeEnd("ide");
  965. pragmas: [],
  966. messageSends: ["ifNil:"]
  967. }, function ($methodClass){ return function (){
  968. var self=this,$self=this;
  969. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  970. return $core.withContext(function($ctx1) {
  971. //>>excludeEnd("ctx");
  972. var $1;
  973. $1=$self.arguments;
  974. if($1 == null || $1.a$nil){
  975. $self.arguments=[];
  976. return $self.arguments;
  977. } else {
  978. return $1;
  979. }
  980. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  981. }, function($ctx1) {$ctx1.fill(self,"arguments",{})});
  982. //>>excludeEnd("ctx");
  983. }; }),
  984. $globals.SendNode);
  985. $core.addMethod(
  986. $core.method({
  987. selector: "arguments:",
  988. protocol: "accessing",
  989. //>>excludeStart("ide", pragmas.excludeIdeData);
  990. args: ["aCollection"],
  991. source: "arguments: aCollection\x0a\x09arguments := aCollection",
  992. referencedClasses: [],
  993. //>>excludeEnd("ide");
  994. pragmas: [],
  995. messageSends: []
  996. }, function ($methodClass){ return function (aCollection){
  997. var self=this,$self=this;
  998. $self.arguments=aCollection;
  999. return self;
  1000. }; }),
  1001. $globals.SendNode);
  1002. $core.addMethod(
  1003. $core.method({
  1004. selector: "beSideEffect",
  1005. protocol: "accessing",
  1006. //>>excludeStart("ide", pragmas.excludeIdeData);
  1007. args: [],
  1008. source: "beSideEffect\x0a\x09isSideEffect := true",
  1009. referencedClasses: [],
  1010. //>>excludeEnd("ide");
  1011. pragmas: [],
  1012. messageSends: []
  1013. }, function ($methodClass){ return function (){
  1014. var self=this,$self=this;
  1015. $self.isSideEffect=true;
  1016. return self;
  1017. }; }),
  1018. $globals.SendNode);
  1019. $core.addMethod(
  1020. $core.method({
  1021. selector: "dagChildren",
  1022. protocol: "accessing",
  1023. //>>excludeStart("ide", pragmas.excludeIdeData);
  1024. args: [],
  1025. source: "dagChildren\x0a\x09self receiver ifNil: [ ^ self arguments copy ].\x0a\x09\x0a\x09^ self arguments copyWithFirst: self receiver",
  1026. referencedClasses: [],
  1027. //>>excludeEnd("ide");
  1028. pragmas: [],
  1029. messageSends: ["ifNil:", "receiver", "copy", "arguments", "copyWithFirst:"]
  1030. }, function ($methodClass){ return function (){
  1031. var self=this,$self=this;
  1032. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1033. return $core.withContext(function($ctx1) {
  1034. //>>excludeEnd("ctx");
  1035. var $1;
  1036. $1=[$self._receiver()
  1037. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1038. ,$ctx1.sendIdx["receiver"]=1
  1039. //>>excludeEnd("ctx");
  1040. ][0];
  1041. if($1 == null || $1.a$nil){
  1042. return $recv([$self._arguments()
  1043. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1044. ,$ctx1.sendIdx["arguments"]=1
  1045. //>>excludeEnd("ctx");
  1046. ][0])._copy();
  1047. } else {
  1048. $1;
  1049. }
  1050. return $recv($self._arguments())._copyWithFirst_($self._receiver());
  1051. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1052. }, function($ctx1) {$ctx1.fill(self,"dagChildren",{})});
  1053. //>>excludeEnd("ctx");
  1054. }; }),
  1055. $globals.SendNode);
  1056. $core.addMethod(
  1057. $core.method({
  1058. selector: "index",
  1059. protocol: "accessing",
  1060. //>>excludeStart("ide", pragmas.excludeIdeData);
  1061. args: [],
  1062. source: "index\x0a\x09^ index",
  1063. referencedClasses: [],
  1064. //>>excludeEnd("ide");
  1065. pragmas: [],
  1066. messageSends: []
  1067. }, function ($methodClass){ return function (){
  1068. var self=this,$self=this;
  1069. return $self.index;
  1070. }; }),
  1071. $globals.SendNode);
  1072. $core.addMethod(
  1073. $core.method({
  1074. selector: "index:",
  1075. protocol: "accessing",
  1076. //>>excludeStart("ide", pragmas.excludeIdeData);
  1077. args: ["anInteger"],
  1078. source: "index: anInteger\x0a\x09index := anInteger",
  1079. referencedClasses: [],
  1080. //>>excludeEnd("ide");
  1081. pragmas: [],
  1082. messageSends: []
  1083. }, function ($methodClass){ return function (anInteger){
  1084. var self=this,$self=this;
  1085. $self.index=anInteger;
  1086. return self;
  1087. }; }),
  1088. $globals.SendNode);
  1089. $core.addMethod(
  1090. $core.method({
  1091. selector: "isNavigationNode",
  1092. protocol: "testing",
  1093. //>>excludeStart("ide", pragmas.excludeIdeData);
  1094. args: [],
  1095. source: "isNavigationNode\x0a\x09^ true",
  1096. referencedClasses: [],
  1097. //>>excludeEnd("ide");
  1098. pragmas: [],
  1099. messageSends: []
  1100. }, function ($methodClass){ return function (){
  1101. var self=this,$self=this;
  1102. return true;
  1103. }; }),
  1104. $globals.SendNode);
  1105. $core.addMethod(
  1106. $core.method({
  1107. selector: "isSideEffect",
  1108. protocol: "accessing",
  1109. //>>excludeStart("ide", pragmas.excludeIdeData);
  1110. args: [],
  1111. source: "isSideEffect\x0a\x09^ isSideEffect ifNil: [ false ]",
  1112. referencedClasses: [],
  1113. //>>excludeEnd("ide");
  1114. pragmas: [],
  1115. messageSends: ["ifNil:"]
  1116. }, function ($methodClass){ return function (){
  1117. var self=this,$self=this;
  1118. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1119. return $core.withContext(function($ctx1) {
  1120. //>>excludeEnd("ctx");
  1121. var $1;
  1122. $1=$self.isSideEffect;
  1123. if($1 == null || $1.a$nil){
  1124. return false;
  1125. } else {
  1126. return $1;
  1127. }
  1128. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1129. }, function($ctx1) {$ctx1.fill(self,"isSideEffect",{})});
  1130. //>>excludeEnd("ctx");
  1131. }; }),
  1132. $globals.SendNode);
  1133. $core.addMethod(
  1134. $core.method({
  1135. selector: "javaScriptSelector",
  1136. protocol: "accessing",
  1137. //>>excludeStart("ide", pragmas.excludeIdeData);
  1138. args: [],
  1139. source: "javaScriptSelector\x0a\x09^ javaScriptSelector",
  1140. referencedClasses: [],
  1141. //>>excludeEnd("ide");
  1142. pragmas: [],
  1143. messageSends: []
  1144. }, function ($methodClass){ return function (){
  1145. var self=this,$self=this;
  1146. return $self.javaScriptSelector;
  1147. }; }),
  1148. $globals.SendNode);
  1149. $core.addMethod(
  1150. $core.method({
  1151. selector: "javaScriptSelector:",
  1152. protocol: "accessing",
  1153. //>>excludeStart("ide", pragmas.excludeIdeData);
  1154. args: ["aString"],
  1155. source: "javaScriptSelector: aString\x0a\x09javaScriptSelector := aString",
  1156. referencedClasses: [],
  1157. //>>excludeEnd("ide");
  1158. pragmas: [],
  1159. messageSends: []
  1160. }, function ($methodClass){ return function (aString){
  1161. var self=this,$self=this;
  1162. $self.javaScriptSelector=aString;
  1163. return self;
  1164. }; }),
  1165. $globals.SendNode);
  1166. $core.addMethod(
  1167. $core.method({
  1168. selector: "navigationLink",
  1169. protocol: "accessing",
  1170. //>>excludeStart("ide", pragmas.excludeIdeData);
  1171. args: [],
  1172. source: "navigationLink\x0a\x09^ self selector",
  1173. referencedClasses: [],
  1174. //>>excludeEnd("ide");
  1175. pragmas: [],
  1176. messageSends: ["selector"]
  1177. }, function ($methodClass){ return function (){
  1178. var self=this,$self=this;
  1179. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1180. return $core.withContext(function($ctx1) {
  1181. //>>excludeEnd("ctx");
  1182. return $self._selector();
  1183. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1184. }, function($ctx1) {$ctx1.fill(self,"navigationLink",{})});
  1185. //>>excludeEnd("ctx");
  1186. }; }),
  1187. $globals.SendNode);
  1188. $core.addMethod(
  1189. $core.method({
  1190. selector: "receiver",
  1191. protocol: "accessing",
  1192. //>>excludeStart("ide", pragmas.excludeIdeData);
  1193. args: [],
  1194. source: "receiver\x0a\x09^ receiver",
  1195. referencedClasses: [],
  1196. //>>excludeEnd("ide");
  1197. pragmas: [],
  1198. messageSends: []
  1199. }, function ($methodClass){ return function (){
  1200. var self=this,$self=this;
  1201. return $self.receiver;
  1202. }; }),
  1203. $globals.SendNode);
  1204. $core.addMethod(
  1205. $core.method({
  1206. selector: "receiver:",
  1207. protocol: "accessing",
  1208. //>>excludeStart("ide", pragmas.excludeIdeData);
  1209. args: ["aNode"],
  1210. source: "receiver: aNode\x0a\x09receiver := aNode",
  1211. referencedClasses: [],
  1212. //>>excludeEnd("ide");
  1213. pragmas: [],
  1214. messageSends: []
  1215. }, function ($methodClass){ return function (aNode){
  1216. var self=this,$self=this;
  1217. $self.receiver=aNode;
  1218. return self;
  1219. }; }),
  1220. $globals.SendNode);
  1221. $core.addMethod(
  1222. $core.method({
  1223. selector: "selector",
  1224. protocol: "accessing",
  1225. //>>excludeStart("ide", pragmas.excludeIdeData);
  1226. args: [],
  1227. source: "selector\x0a\x09^ selector",
  1228. referencedClasses: [],
  1229. //>>excludeEnd("ide");
  1230. pragmas: [],
  1231. messageSends: []
  1232. }, function ($methodClass){ return function (){
  1233. var self=this,$self=this;
  1234. return $self.selector;
  1235. }; }),
  1236. $globals.SendNode);
  1237. $core.addMethod(
  1238. $core.method({
  1239. selector: "selector:",
  1240. protocol: "accessing",
  1241. //>>excludeStart("ide", pragmas.excludeIdeData);
  1242. args: ["aString"],
  1243. source: "selector: aString\x0a\x09selector := aString",
  1244. referencedClasses: [],
  1245. //>>excludeEnd("ide");
  1246. pragmas: [],
  1247. messageSends: []
  1248. }, function ($methodClass){ return function (aString){
  1249. var self=this,$self=this;
  1250. $self.selector=aString;
  1251. return self;
  1252. }; }),
  1253. $globals.SendNode);
  1254. $core.addMethod(
  1255. $core.method({
  1256. selector: "superSend",
  1257. protocol: "accessing",
  1258. //>>excludeStart("ide", pragmas.excludeIdeData);
  1259. args: [],
  1260. source: "superSend\x0a\x09^ self receiver ifNil: [ false ] ifNotNil: [ :recv | recv isSuper ]",
  1261. referencedClasses: [],
  1262. //>>excludeEnd("ide");
  1263. pragmas: [],
  1264. messageSends: ["ifNil:ifNotNil:", "receiver", "isSuper"]
  1265. }, function ($methodClass){ return function (){
  1266. var self=this,$self=this;
  1267. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1268. return $core.withContext(function($ctx1) {
  1269. //>>excludeEnd("ctx");
  1270. var $1;
  1271. $1=$self._receiver();
  1272. if($1 == null || $1.a$nil){
  1273. return false;
  1274. } else {
  1275. var recv;
  1276. recv=$1;
  1277. return $recv(recv)._isSuper();
  1278. }
  1279. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1280. }, function($ctx1) {$ctx1.fill(self,"superSend",{})});
  1281. //>>excludeEnd("ctx");
  1282. }; }),
  1283. $globals.SendNode);
  1284. $core.addClass("ValueNode", $globals.ExpressionNode, ["value"], "Compiler-AST");
  1285. //>>excludeStart("ide", pragmas.excludeIdeData);
  1286. $globals.ValueNode.comment="I represent a value node.";
  1287. //>>excludeEnd("ide");
  1288. $core.addMethod(
  1289. $core.method({
  1290. selector: "acceptDagVisitor:",
  1291. protocol: "visiting",
  1292. //>>excludeStart("ide", pragmas.excludeIdeData);
  1293. args: ["aVisitor"],
  1294. source: "acceptDagVisitor: aVisitor\x0a\x09^ aVisitor visitValueNode: self",
  1295. referencedClasses: [],
  1296. //>>excludeEnd("ide");
  1297. pragmas: [],
  1298. messageSends: ["visitValueNode:"]
  1299. }, function ($methodClass){ return function (aVisitor){
  1300. var self=this,$self=this;
  1301. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1302. return $core.withContext(function($ctx1) {
  1303. //>>excludeEnd("ctx");
  1304. return $recv(aVisitor)._visitValueNode_(self);
  1305. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1306. }, function($ctx1) {$ctx1.fill(self,"acceptDagVisitor:",{aVisitor:aVisitor})});
  1307. //>>excludeEnd("ctx");
  1308. }; }),
  1309. $globals.ValueNode);
  1310. $core.addMethod(
  1311. $core.method({
  1312. selector: "isIdempotent",
  1313. protocol: "testing",
  1314. //>>excludeStart("ide", pragmas.excludeIdeData);
  1315. args: [],
  1316. source: "isIdempotent\x0a\x09^ self value isImmutable",
  1317. referencedClasses: [],
  1318. //>>excludeEnd("ide");
  1319. pragmas: [],
  1320. messageSends: ["isImmutable", "value"]
  1321. }, function ($methodClass){ return function (){
  1322. var self=this,$self=this;
  1323. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1324. return $core.withContext(function($ctx1) {
  1325. //>>excludeEnd("ctx");
  1326. return $recv($self._value())._isImmutable();
  1327. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1328. }, function($ctx1) {$ctx1.fill(self,"isIdempotent",{})});
  1329. //>>excludeEnd("ctx");
  1330. }; }),
  1331. $globals.ValueNode);
  1332. $core.addMethod(
  1333. $core.method({
  1334. selector: "value",
  1335. protocol: "accessing",
  1336. //>>excludeStart("ide", pragmas.excludeIdeData);
  1337. args: [],
  1338. source: "value\x0a\x09^ value",
  1339. referencedClasses: [],
  1340. //>>excludeEnd("ide");
  1341. pragmas: [],
  1342. messageSends: []
  1343. }, function ($methodClass){ return function (){
  1344. var self=this,$self=this;
  1345. return $self.value;
  1346. }; }),
  1347. $globals.ValueNode);
  1348. $core.addMethod(
  1349. $core.method({
  1350. selector: "value:",
  1351. protocol: "accessing",
  1352. //>>excludeStart("ide", pragmas.excludeIdeData);
  1353. args: ["anObject"],
  1354. source: "value: anObject\x0a\x09value := anObject",
  1355. referencedClasses: [],
  1356. //>>excludeEnd("ide");
  1357. pragmas: [],
  1358. messageSends: []
  1359. }, function ($methodClass){ return function (anObject){
  1360. var self=this,$self=this;
  1361. $self.value=anObject;
  1362. return self;
  1363. }; }),
  1364. $globals.ValueNode);
  1365. $core.addClass("VariableNode", $globals.ExpressionNode, ["identifier", "assigned", "binding"], "Compiler-AST");
  1366. //>>excludeStart("ide", pragmas.excludeIdeData);
  1367. $globals.VariableNode.comment="I represent an variable node.";
  1368. //>>excludeEnd("ide");
  1369. $core.addMethod(
  1370. $core.method({
  1371. selector: "acceptDagVisitor:",
  1372. protocol: "visiting",
  1373. //>>excludeStart("ide", pragmas.excludeIdeData);
  1374. args: ["aVisitor"],
  1375. source: "acceptDagVisitor: aVisitor\x0a\x09^ aVisitor visitVariableNode: self",
  1376. referencedClasses: [],
  1377. //>>excludeEnd("ide");
  1378. pragmas: [],
  1379. messageSends: ["visitVariableNode:"]
  1380. }, function ($methodClass){ return function (aVisitor){
  1381. var self=this,$self=this;
  1382. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1383. return $core.withContext(function($ctx1) {
  1384. //>>excludeEnd("ctx");
  1385. return $recv(aVisitor)._visitVariableNode_(self);
  1386. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1387. }, function($ctx1) {$ctx1.fill(self,"acceptDagVisitor:",{aVisitor:aVisitor})});
  1388. //>>excludeEnd("ctx");
  1389. }; }),
  1390. $globals.VariableNode);
  1391. $core.addMethod(
  1392. $core.method({
  1393. selector: "alias",
  1394. protocol: "accessing",
  1395. //>>excludeStart("ide", pragmas.excludeIdeData);
  1396. args: [],
  1397. source: "alias\x0a\x09^ self binding alias",
  1398. referencedClasses: [],
  1399. //>>excludeEnd("ide");
  1400. pragmas: [],
  1401. messageSends: ["alias", "binding"]
  1402. }, function ($methodClass){ return function (){
  1403. var self=this,$self=this;
  1404. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1405. return $core.withContext(function($ctx1) {
  1406. //>>excludeEnd("ctx");
  1407. return $recv($self._binding())._alias();
  1408. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1409. }, function($ctx1) {$ctx1.fill(self,"alias",{})});
  1410. //>>excludeEnd("ctx");
  1411. }; }),
  1412. $globals.VariableNode);
  1413. $core.addMethod(
  1414. $core.method({
  1415. selector: "assigned",
  1416. protocol: "accessing",
  1417. //>>excludeStart("ide", pragmas.excludeIdeData);
  1418. args: [],
  1419. source: "assigned\x0a\x09^ assigned ifNil: [ false ]",
  1420. referencedClasses: [],
  1421. //>>excludeEnd("ide");
  1422. pragmas: [],
  1423. messageSends: ["ifNil:"]
  1424. }, function ($methodClass){ return function (){
  1425. var self=this,$self=this;
  1426. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1427. return $core.withContext(function($ctx1) {
  1428. //>>excludeEnd("ctx");
  1429. var $1;
  1430. $1=$self.assigned;
  1431. if($1 == null || $1.a$nil){
  1432. return false;
  1433. } else {
  1434. return $1;
  1435. }
  1436. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1437. }, function($ctx1) {$ctx1.fill(self,"assigned",{})});
  1438. //>>excludeEnd("ctx");
  1439. }; }),
  1440. $globals.VariableNode);
  1441. $core.addMethod(
  1442. $core.method({
  1443. selector: "assigned:",
  1444. protocol: "accessing",
  1445. //>>excludeStart("ide", pragmas.excludeIdeData);
  1446. args: ["aBoolean"],
  1447. source: "assigned: aBoolean\x0a\x09assigned := aBoolean",
  1448. referencedClasses: [],
  1449. //>>excludeEnd("ide");
  1450. pragmas: [],
  1451. messageSends: []
  1452. }, function ($methodClass){ return function (aBoolean){
  1453. var self=this,$self=this;
  1454. $self.assigned=aBoolean;
  1455. return self;
  1456. }; }),
  1457. $globals.VariableNode);
  1458. $core.addMethod(
  1459. $core.method({
  1460. selector: "binding",
  1461. protocol: "accessing",
  1462. //>>excludeStart("ide", pragmas.excludeIdeData);
  1463. args: [],
  1464. source: "binding\x0a\x09^ binding",
  1465. referencedClasses: [],
  1466. //>>excludeEnd("ide");
  1467. pragmas: [],
  1468. messageSends: []
  1469. }, function ($methodClass){ return function (){
  1470. var self=this,$self=this;
  1471. return $self.binding;
  1472. }; }),
  1473. $globals.VariableNode);
  1474. $core.addMethod(
  1475. $core.method({
  1476. selector: "binding:",
  1477. protocol: "accessing",
  1478. //>>excludeStart("ide", pragmas.excludeIdeData);
  1479. args: ["aScopeVar"],
  1480. source: "binding: aScopeVar\x0a\x09binding := aScopeVar",
  1481. referencedClasses: [],
  1482. //>>excludeEnd("ide");
  1483. pragmas: [],
  1484. messageSends: []
  1485. }, function ($methodClass){ return function (aScopeVar){
  1486. var self=this,$self=this;
  1487. $self.binding=aScopeVar;
  1488. return self;
  1489. }; }),
  1490. $globals.VariableNode);
  1491. $core.addMethod(
  1492. $core.method({
  1493. selector: "identifier",
  1494. protocol: "accessing",
  1495. //>>excludeStart("ide", pragmas.excludeIdeData);
  1496. args: [],
  1497. source: "identifier\x0a\x09^ identifier",
  1498. referencedClasses: [],
  1499. //>>excludeEnd("ide");
  1500. pragmas: [],
  1501. messageSends: []
  1502. }, function ($methodClass){ return function (){
  1503. var self=this,$self=this;
  1504. return $self.identifier;
  1505. }; }),
  1506. $globals.VariableNode);
  1507. $core.addMethod(
  1508. $core.method({
  1509. selector: "identifier:",
  1510. protocol: "accessing",
  1511. //>>excludeStart("ide", pragmas.excludeIdeData);
  1512. args: ["anObject"],
  1513. source: "identifier: anObject\x0a\x09identifier := anObject",
  1514. referencedClasses: [],
  1515. //>>excludeEnd("ide");
  1516. pragmas: [],
  1517. messageSends: []
  1518. }, function ($methodClass){ return function (anObject){
  1519. var self=this,$self=this;
  1520. $self.identifier=anObject;
  1521. return self;
  1522. }; }),
  1523. $globals.VariableNode);
  1524. $core.addMethod(
  1525. $core.method({
  1526. selector: "isAssignable",
  1527. protocol: "testing",
  1528. //>>excludeStart("ide", pragmas.excludeIdeData);
  1529. args: [],
  1530. source: "isAssignable\x0a\x09^ self binding isAssignable",
  1531. referencedClasses: [],
  1532. //>>excludeEnd("ide");
  1533. pragmas: [],
  1534. messageSends: ["isAssignable", "binding"]
  1535. }, function ($methodClass){ return function (){
  1536. var self=this,$self=this;
  1537. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1538. return $core.withContext(function($ctx1) {
  1539. //>>excludeEnd("ctx");
  1540. return $recv($self._binding())._isAssignable();
  1541. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1542. }, function($ctx1) {$ctx1.fill(self,"isAssignable",{})});
  1543. //>>excludeEnd("ctx");
  1544. }; }),
  1545. $globals.VariableNode);
  1546. $core.addMethod(
  1547. $core.method({
  1548. selector: "isIdempotent",
  1549. protocol: "testing",
  1550. //>>excludeStart("ide", pragmas.excludeIdeData);
  1551. args: [],
  1552. source: "isIdempotent\x0a\x09^ self binding isIdempotent",
  1553. referencedClasses: [],
  1554. //>>excludeEnd("ide");
  1555. pragmas: [],
  1556. messageSends: ["isIdempotent", "binding"]
  1557. }, function ($methodClass){ return function (){
  1558. var self=this,$self=this;
  1559. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1560. return $core.withContext(function($ctx1) {
  1561. //>>excludeEnd("ctx");
  1562. return $recv($self._binding())._isIdempotent();
  1563. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1564. }, function($ctx1) {$ctx1.fill(self,"isIdempotent",{})});
  1565. //>>excludeEnd("ctx");
  1566. }; }),
  1567. $globals.VariableNode);
  1568. $core.addMethod(
  1569. $core.method({
  1570. selector: "isImmutable",
  1571. protocol: "testing",
  1572. //>>excludeStart("ide", pragmas.excludeIdeData);
  1573. args: [],
  1574. source: "isImmutable\x0a\x09self deprecatedAPI: 'Use #isIdempotent / #isAssignable not instead.'.\x0a\x09^ self isIdempotent \x22to be consistent with super\x22",
  1575. referencedClasses: [],
  1576. //>>excludeEnd("ide");
  1577. pragmas: [],
  1578. messageSends: ["deprecatedAPI:", "isIdempotent"]
  1579. }, function ($methodClass){ return function (){
  1580. var self=this,$self=this;
  1581. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1582. return $core.withContext(function($ctx1) {
  1583. //>>excludeEnd("ctx");
  1584. $self._deprecatedAPI_("Use #isIdempotent / #isAssignable not instead.");
  1585. return $self._isIdempotent();
  1586. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1587. }, function($ctx1) {$ctx1.fill(self,"isImmutable",{})});
  1588. //>>excludeEnd("ctx");
  1589. }; }),
  1590. $globals.VariableNode);
  1591. $core.addMethod(
  1592. $core.method({
  1593. selector: "isNavigationNode",
  1594. protocol: "testing",
  1595. //>>excludeStart("ide", pragmas.excludeIdeData);
  1596. args: [],
  1597. source: "isNavigationNode\x0a\x09^ true",
  1598. referencedClasses: [],
  1599. //>>excludeEnd("ide");
  1600. pragmas: [],
  1601. messageSends: []
  1602. }, function ($methodClass){ return function (){
  1603. var self=this,$self=this;
  1604. return true;
  1605. }; }),
  1606. $globals.VariableNode);
  1607. $core.addMethod(
  1608. $core.method({
  1609. selector: "isSuper",
  1610. protocol: "testing",
  1611. //>>excludeStart("ide", pragmas.excludeIdeData);
  1612. args: [],
  1613. source: "isSuper\x0a\x09^ self binding isSuper",
  1614. referencedClasses: [],
  1615. //>>excludeEnd("ide");
  1616. pragmas: [],
  1617. messageSends: ["isSuper", "binding"]
  1618. }, function ($methodClass){ return function (){
  1619. var self=this,$self=this;
  1620. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1621. return $core.withContext(function($ctx1) {
  1622. //>>excludeEnd("ctx");
  1623. return $recv($self._binding())._isSuper();
  1624. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1625. }, function($ctx1) {$ctx1.fill(self,"isSuper",{})});
  1626. //>>excludeEnd("ctx");
  1627. }; }),
  1628. $globals.VariableNode);
  1629. $core.addMethod(
  1630. $core.method({
  1631. selector: "navigationLink",
  1632. protocol: "accessing",
  1633. //>>excludeStart("ide", pragmas.excludeIdeData);
  1634. args: [],
  1635. source: "navigationLink\x0a\x09^ self identifier",
  1636. referencedClasses: [],
  1637. //>>excludeEnd("ide");
  1638. pragmas: [],
  1639. messageSends: ["identifier"]
  1640. }, function ($methodClass){ return function (){
  1641. var self=this,$self=this;
  1642. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1643. return $core.withContext(function($ctx1) {
  1644. //>>excludeEnd("ctx");
  1645. return $self._identifier();
  1646. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1647. }, function($ctx1) {$ctx1.fill(self,"navigationLink",{})});
  1648. //>>excludeEnd("ctx");
  1649. }; }),
  1650. $globals.VariableNode);
  1651. $core.addMethod(
  1652. $core.method({
  1653. selector: "value",
  1654. protocol: "accessing",
  1655. //>>excludeStart("ide", pragmas.excludeIdeData);
  1656. args: [],
  1657. source: "value\x0a\x09self deprecatedAPI: 'Use #identifier instead.'.\x0a\x09^ self identifier",
  1658. referencedClasses: [],
  1659. //>>excludeEnd("ide");
  1660. pragmas: [],
  1661. messageSends: ["deprecatedAPI:", "identifier"]
  1662. }, function ($methodClass){ return function (){
  1663. var self=this,$self=this;
  1664. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1665. return $core.withContext(function($ctx1) {
  1666. //>>excludeEnd("ctx");
  1667. $self._deprecatedAPI_("Use #identifier instead.");
  1668. return $self._identifier();
  1669. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1670. }, function($ctx1) {$ctx1.fill(self,"value",{})});
  1671. //>>excludeEnd("ctx");
  1672. }; }),
  1673. $globals.VariableNode);
  1674. $core.addMethod(
  1675. $core.method({
  1676. selector: "value:",
  1677. protocol: "accessing",
  1678. //>>excludeStart("ide", pragmas.excludeIdeData);
  1679. args: ["anObject"],
  1680. source: "value: anObject\x0a\x09self deprecatedAPI: 'Use #identifier: instead.'.\x0a\x09self identifier: anObject",
  1681. referencedClasses: [],
  1682. //>>excludeEnd("ide");
  1683. pragmas: [],
  1684. messageSends: ["deprecatedAPI:", "identifier:"]
  1685. }, function ($methodClass){ return function (anObject){
  1686. var self=this,$self=this;
  1687. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1688. return $core.withContext(function($ctx1) {
  1689. //>>excludeEnd("ctx");
  1690. $self._deprecatedAPI_("Use #identifier: instead.");
  1691. $self._identifier_(anObject);
  1692. return self;
  1693. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1694. }, function($ctx1) {$ctx1.fill(self,"value:",{anObject:anObject})});
  1695. //>>excludeEnd("ctx");
  1696. }; }),
  1697. $globals.VariableNode);
  1698. $core.addClass("JSStatementNode", $globals.ASTNode, [], "Compiler-AST");
  1699. //>>excludeStart("ide", pragmas.excludeIdeData);
  1700. $globals.JSStatementNode.comment="I represent an JavaScript statement node.";
  1701. //>>excludeEnd("ide");
  1702. $core.addMethod(
  1703. $core.method({
  1704. selector: "acceptDagVisitor:",
  1705. protocol: "visiting",
  1706. //>>excludeStart("ide", pragmas.excludeIdeData);
  1707. args: ["aVisitor"],
  1708. source: "acceptDagVisitor: aVisitor\x0a\x09^ aVisitor visitJSStatementNode: self",
  1709. referencedClasses: [],
  1710. //>>excludeEnd("ide");
  1711. pragmas: [],
  1712. messageSends: ["visitJSStatementNode:"]
  1713. }, function ($methodClass){ return function (aVisitor){
  1714. var self=this,$self=this;
  1715. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1716. return $core.withContext(function($ctx1) {
  1717. //>>excludeEnd("ctx");
  1718. return $recv(aVisitor)._visitJSStatementNode_(self);
  1719. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1720. }, function($ctx1) {$ctx1.fill(self,"acceptDagVisitor:",{aVisitor:aVisitor})});
  1721. //>>excludeEnd("ctx");
  1722. }; }),
  1723. $globals.JSStatementNode);
  1724. $core.addClass("MethodNode", $globals.ASTNode, ["selector", "arguments", "pragmas", "scope", "classReferences", "sendIndexes", "sequenceNode"], "Compiler-AST");
  1725. //>>excludeStart("ide", pragmas.excludeIdeData);
  1726. $globals.MethodNode.comment="I represent an method node.\x0a\x0aA method node must be the root and only method node of a valid AST.";
  1727. //>>excludeEnd("ide");
  1728. $core.addMethod(
  1729. $core.method({
  1730. selector: "acceptDagVisitor:",
  1731. protocol: "visiting",
  1732. //>>excludeStart("ide", pragmas.excludeIdeData);
  1733. args: ["aVisitor"],
  1734. source: "acceptDagVisitor: aVisitor\x0a\x09^ aVisitor visitMethodNode: self",
  1735. referencedClasses: [],
  1736. //>>excludeEnd("ide");
  1737. pragmas: [],
  1738. messageSends: ["visitMethodNode:"]
  1739. }, function ($methodClass){ return function (aVisitor){
  1740. var self=this,$self=this;
  1741. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1742. return $core.withContext(function($ctx1) {
  1743. //>>excludeEnd("ctx");
  1744. return $recv(aVisitor)._visitMethodNode_(self);
  1745. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1746. }, function($ctx1) {$ctx1.fill(self,"acceptDagVisitor:",{aVisitor:aVisitor})});
  1747. //>>excludeEnd("ctx");
  1748. }; }),
  1749. $globals.MethodNode);
  1750. $core.addMethod(
  1751. $core.method({
  1752. selector: "arguments",
  1753. protocol: "accessing",
  1754. //>>excludeStart("ide", pragmas.excludeIdeData);
  1755. args: [],
  1756. source: "arguments\x0a\x09^ arguments ifNil: [ #() ]",
  1757. referencedClasses: [],
  1758. //>>excludeEnd("ide");
  1759. pragmas: [],
  1760. messageSends: ["ifNil:"]
  1761. }, function ($methodClass){ return function (){
  1762. var self=this,$self=this;
  1763. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1764. return $core.withContext(function($ctx1) {
  1765. //>>excludeEnd("ctx");
  1766. var $1;
  1767. $1=$self.arguments;
  1768. if($1 == null || $1.a$nil){
  1769. return [];
  1770. } else {
  1771. return $1;
  1772. }
  1773. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1774. }, function($ctx1) {$ctx1.fill(self,"arguments",{})});
  1775. //>>excludeEnd("ctx");
  1776. }; }),
  1777. $globals.MethodNode);
  1778. $core.addMethod(
  1779. $core.method({
  1780. selector: "arguments:",
  1781. protocol: "accessing",
  1782. //>>excludeStart("ide", pragmas.excludeIdeData);
  1783. args: ["aCollection"],
  1784. source: "arguments: aCollection\x0a\x09arguments := aCollection",
  1785. referencedClasses: [],
  1786. //>>excludeEnd("ide");
  1787. pragmas: [],
  1788. messageSends: []
  1789. }, function ($methodClass){ return function (aCollection){
  1790. var self=this,$self=this;
  1791. $self.arguments=aCollection;
  1792. return self;
  1793. }; }),
  1794. $globals.MethodNode);
  1795. $core.addMethod(
  1796. $core.method({
  1797. selector: "classReferences",
  1798. protocol: "accessing",
  1799. //>>excludeStart("ide", pragmas.excludeIdeData);
  1800. args: [],
  1801. source: "classReferences\x0a\x09^ classReferences",
  1802. referencedClasses: [],
  1803. //>>excludeEnd("ide");
  1804. pragmas: [],
  1805. messageSends: []
  1806. }, function ($methodClass){ return function (){
  1807. var self=this,$self=this;
  1808. return $self.classReferences;
  1809. }; }),
  1810. $globals.MethodNode);
  1811. $core.addMethod(
  1812. $core.method({
  1813. selector: "classReferences:",
  1814. protocol: "accessing",
  1815. //>>excludeStart("ide", pragmas.excludeIdeData);
  1816. args: ["aCollection"],
  1817. source: "classReferences: aCollection\x0a\x09classReferences := aCollection",
  1818. referencedClasses: [],
  1819. //>>excludeEnd("ide");
  1820. pragmas: [],
  1821. messageSends: []
  1822. }, function ($methodClass){ return function (aCollection){
  1823. var self=this,$self=this;
  1824. $self.classReferences=aCollection;
  1825. return self;
  1826. }; }),
  1827. $globals.MethodNode);
  1828. $core.addMethod(
  1829. $core.method({
  1830. selector: "dagChild",
  1831. protocol: "accessing",
  1832. //>>excludeStart("ide", pragmas.excludeIdeData);
  1833. args: [],
  1834. source: "dagChild\x0a\x09^ self sequenceNode",
  1835. referencedClasses: [],
  1836. //>>excludeEnd("ide");
  1837. pragmas: [],
  1838. messageSends: ["sequenceNode"]
  1839. }, function ($methodClass){ return function (){
  1840. var self=this,$self=this;
  1841. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1842. return $core.withContext(function($ctx1) {
  1843. //>>excludeEnd("ctx");
  1844. return $self._sequenceNode();
  1845. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1846. }, function($ctx1) {$ctx1.fill(self,"dagChild",{})});
  1847. //>>excludeEnd("ctx");
  1848. }; }),
  1849. $globals.MethodNode);
  1850. $core.addMethod(
  1851. $core.method({
  1852. selector: "messageSends",
  1853. protocol: "accessing",
  1854. //>>excludeStart("ide", pragmas.excludeIdeData);
  1855. args: [],
  1856. source: "messageSends\x0a\x09^ self sendIndexes keys",
  1857. referencedClasses: [],
  1858. //>>excludeEnd("ide");
  1859. pragmas: [],
  1860. messageSends: ["keys", "sendIndexes"]
  1861. }, function ($methodClass){ return function (){
  1862. var self=this,$self=this;
  1863. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1864. return $core.withContext(function($ctx1) {
  1865. //>>excludeEnd("ctx");
  1866. return $recv($self._sendIndexes())._keys();
  1867. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1868. }, function($ctx1) {$ctx1.fill(self,"messageSends",{})});
  1869. //>>excludeEnd("ctx");
  1870. }; }),
  1871. $globals.MethodNode);
  1872. $core.addMethod(
  1873. $core.method({
  1874. selector: "method",
  1875. protocol: "accessing",
  1876. //>>excludeStart("ide", pragmas.excludeIdeData);
  1877. args: [],
  1878. source: "method\x0a\x09^ self",
  1879. referencedClasses: [],
  1880. //>>excludeEnd("ide");
  1881. pragmas: [],
  1882. messageSends: []
  1883. }, function ($methodClass){ return function (){
  1884. var self=this,$self=this;
  1885. return self;
  1886. }; }),
  1887. $globals.MethodNode);
  1888. $core.addMethod(
  1889. $core.method({
  1890. selector: "pragmas",
  1891. protocol: "accessing",
  1892. //>>excludeStart("ide", pragmas.excludeIdeData);
  1893. args: [],
  1894. source: "pragmas\x0a\x09^ pragmas ifNil: [ #() ]",
  1895. referencedClasses: [],
  1896. //>>excludeEnd("ide");
  1897. pragmas: [],
  1898. messageSends: ["ifNil:"]
  1899. }, function ($methodClass){ return function (){
  1900. var self=this,$self=this;
  1901. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1902. return $core.withContext(function($ctx1) {
  1903. //>>excludeEnd("ctx");
  1904. var $1;
  1905. $1=$self.pragmas;
  1906. if($1 == null || $1.a$nil){
  1907. return [];
  1908. } else {
  1909. return $1;
  1910. }
  1911. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1912. }, function($ctx1) {$ctx1.fill(self,"pragmas",{})});
  1913. //>>excludeEnd("ctx");
  1914. }; }),
  1915. $globals.MethodNode);
  1916. $core.addMethod(
  1917. $core.method({
  1918. selector: "pragmas:",
  1919. protocol: "accessing",
  1920. //>>excludeStart("ide", pragmas.excludeIdeData);
  1921. args: ["aCollection"],
  1922. source: "pragmas: aCollection\x0a\x09pragmas := aCollection",
  1923. referencedClasses: [],
  1924. //>>excludeEnd("ide");
  1925. pragmas: [],
  1926. messageSends: []
  1927. }, function ($methodClass){ return function (aCollection){
  1928. var self=this,$self=this;
  1929. $self.pragmas=aCollection;
  1930. return self;
  1931. }; }),
  1932. $globals.MethodNode);
  1933. $core.addMethod(
  1934. $core.method({
  1935. selector: "scope",
  1936. protocol: "accessing",
  1937. //>>excludeStart("ide", pragmas.excludeIdeData);
  1938. args: [],
  1939. source: "scope\x0a\x09^ scope",
  1940. referencedClasses: [],
  1941. //>>excludeEnd("ide");
  1942. pragmas: [],
  1943. messageSends: []
  1944. }, function ($methodClass){ return function (){
  1945. var self=this,$self=this;
  1946. return $self.scope;
  1947. }; }),
  1948. $globals.MethodNode);
  1949. $core.addMethod(
  1950. $core.method({
  1951. selector: "scope:",
  1952. protocol: "accessing",
  1953. //>>excludeStart("ide", pragmas.excludeIdeData);
  1954. args: ["aMethodScope"],
  1955. source: "scope: aMethodScope\x0a\x09scope := aMethodScope",
  1956. referencedClasses: [],
  1957. //>>excludeEnd("ide");
  1958. pragmas: [],
  1959. messageSends: []
  1960. }, function ($methodClass){ return function (aMethodScope){
  1961. var self=this,$self=this;
  1962. $self.scope=aMethodScope;
  1963. return self;
  1964. }; }),
  1965. $globals.MethodNode);
  1966. $core.addMethod(
  1967. $core.method({
  1968. selector: "selector",
  1969. protocol: "accessing",
  1970. //>>excludeStart("ide", pragmas.excludeIdeData);
  1971. args: [],
  1972. source: "selector\x0a\x09^ selector",
  1973. referencedClasses: [],
  1974. //>>excludeEnd("ide");
  1975. pragmas: [],
  1976. messageSends: []
  1977. }, function ($methodClass){ return function (){
  1978. var self=this,$self=this;
  1979. return $self.selector;
  1980. }; }),
  1981. $globals.MethodNode);
  1982. $core.addMethod(
  1983. $core.method({
  1984. selector: "selector:",
  1985. protocol: "accessing",
  1986. //>>excludeStart("ide", pragmas.excludeIdeData);
  1987. args: ["aString"],
  1988. source: "selector: aString\x0a\x09selector := aString",
  1989. referencedClasses: [],
  1990. //>>excludeEnd("ide");
  1991. pragmas: [],
  1992. messageSends: []
  1993. }, function ($methodClass){ return function (aString){
  1994. var self=this,$self=this;
  1995. $self.selector=aString;
  1996. return self;
  1997. }; }),
  1998. $globals.MethodNode);
  1999. $core.addMethod(
  2000. $core.method({
  2001. selector: "sendIndexes",
  2002. protocol: "accessing",
  2003. //>>excludeStart("ide", pragmas.excludeIdeData);
  2004. args: [],
  2005. source: "sendIndexes\x0a\x09^ sendIndexes",
  2006. referencedClasses: [],
  2007. //>>excludeEnd("ide");
  2008. pragmas: [],
  2009. messageSends: []
  2010. }, function ($methodClass){ return function (){
  2011. var self=this,$self=this;
  2012. return $self.sendIndexes;
  2013. }; }),
  2014. $globals.MethodNode);
  2015. $core.addMethod(
  2016. $core.method({
  2017. selector: "sendIndexes:",
  2018. protocol: "accessing",
  2019. //>>excludeStart("ide", pragmas.excludeIdeData);
  2020. args: ["aDictionary"],
  2021. source: "sendIndexes: aDictionary\x0a\x09sendIndexes := aDictionary",
  2022. referencedClasses: [],
  2023. //>>excludeEnd("ide");
  2024. pragmas: [],
  2025. messageSends: []
  2026. }, function ($methodClass){ return function (aDictionary){
  2027. var self=this,$self=this;
  2028. $self.sendIndexes=aDictionary;
  2029. return self;
  2030. }; }),
  2031. $globals.MethodNode);
  2032. $core.addMethod(
  2033. $core.method({
  2034. selector: "sequenceNode",
  2035. protocol: "accessing",
  2036. //>>excludeStart("ide", pragmas.excludeIdeData);
  2037. args: [],
  2038. source: "sequenceNode\x0a\x09^ sequenceNode",
  2039. referencedClasses: [],
  2040. //>>excludeEnd("ide");
  2041. pragmas: [],
  2042. messageSends: []
  2043. }, function ($methodClass){ return function (){
  2044. var self=this,$self=this;
  2045. return $self.sequenceNode;
  2046. }; }),
  2047. $globals.MethodNode);
  2048. $core.addMethod(
  2049. $core.method({
  2050. selector: "sequenceNode:",
  2051. protocol: "accessing",
  2052. //>>excludeStart("ide", pragmas.excludeIdeData);
  2053. args: ["aSequenceNode"],
  2054. source: "sequenceNode: aSequenceNode\x0a\x09sequenceNode := aSequenceNode",
  2055. referencedClasses: [],
  2056. //>>excludeEnd("ide");
  2057. pragmas: [],
  2058. messageSends: []
  2059. }, function ($methodClass){ return function (aSequenceNode){
  2060. var self=this,$self=this;
  2061. $self.sequenceNode=aSequenceNode;
  2062. return self;
  2063. }; }),
  2064. $globals.MethodNode);
  2065. $core.addClass("ReturnNode", $globals.ASTNode, ["scope", "expression"], "Compiler-AST");
  2066. //>>excludeStart("ide", pragmas.excludeIdeData);
  2067. $globals.ReturnNode.comment="I represent an return node. At the AST level, there is not difference between a local return or non-local return.";
  2068. //>>excludeEnd("ide");
  2069. $core.addMethod(
  2070. $core.method({
  2071. selector: "acceptDagVisitor:",
  2072. protocol: "visiting",
  2073. //>>excludeStart("ide", pragmas.excludeIdeData);
  2074. args: ["aVisitor"],
  2075. source: "acceptDagVisitor: aVisitor\x0a\x09^ aVisitor visitReturnNode: self",
  2076. referencedClasses: [],
  2077. //>>excludeEnd("ide");
  2078. pragmas: [],
  2079. messageSends: ["visitReturnNode:"]
  2080. }, function ($methodClass){ return function (aVisitor){
  2081. var self=this,$self=this;
  2082. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2083. return $core.withContext(function($ctx1) {
  2084. //>>excludeEnd("ctx");
  2085. return $recv(aVisitor)._visitReturnNode_(self);
  2086. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2087. }, function($ctx1) {$ctx1.fill(self,"acceptDagVisitor:",{aVisitor:aVisitor})});
  2088. //>>excludeEnd("ctx");
  2089. }; }),
  2090. $globals.ReturnNode);
  2091. $core.addMethod(
  2092. $core.method({
  2093. selector: "dagChild",
  2094. protocol: "accessing",
  2095. //>>excludeStart("ide", pragmas.excludeIdeData);
  2096. args: [],
  2097. source: "dagChild\x0a\x09^ self expression",
  2098. referencedClasses: [],
  2099. //>>excludeEnd("ide");
  2100. pragmas: [],
  2101. messageSends: ["expression"]
  2102. }, function ($methodClass){ return function (){
  2103. var self=this,$self=this;
  2104. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2105. return $core.withContext(function($ctx1) {
  2106. //>>excludeEnd("ctx");
  2107. return $self._expression();
  2108. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2109. }, function($ctx1) {$ctx1.fill(self,"dagChild",{})});
  2110. //>>excludeEnd("ctx");
  2111. }; }),
  2112. $globals.ReturnNode);
  2113. $core.addMethod(
  2114. $core.method({
  2115. selector: "expression",
  2116. protocol: "accessing",
  2117. //>>excludeStart("ide", pragmas.excludeIdeData);
  2118. args: [],
  2119. source: "expression\x0a\x09^ expression ifNil: [ nodes first ]",
  2120. referencedClasses: [],
  2121. //>>excludeEnd("ide");
  2122. pragmas: [],
  2123. messageSends: ["ifNil:", "first"]
  2124. }, function ($methodClass){ return function (){
  2125. var self=this,$self=this;
  2126. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2127. return $core.withContext(function($ctx1) {
  2128. //>>excludeEnd("ctx");
  2129. var $1;
  2130. $1=$self.expression;
  2131. if($1 == null || $1.a$nil){
  2132. return $recv($self.nodes)._first();
  2133. } else {
  2134. return $1;
  2135. }
  2136. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2137. }, function($ctx1) {$ctx1.fill(self,"expression",{})});
  2138. //>>excludeEnd("ctx");
  2139. }; }),
  2140. $globals.ReturnNode);
  2141. $core.addMethod(
  2142. $core.method({
  2143. selector: "expression:",
  2144. protocol: "accessing",
  2145. //>>excludeStart("ide", pragmas.excludeIdeData);
  2146. args: ["anObject"],
  2147. source: "expression: anObject\x0a\x09expression := anObject",
  2148. referencedClasses: [],
  2149. //>>excludeEnd("ide");
  2150. pragmas: [],
  2151. messageSends: []
  2152. }, function ($methodClass){ return function (anObject){
  2153. var self=this,$self=this;
  2154. $self.expression=anObject;
  2155. return self;
  2156. }; }),
  2157. $globals.ReturnNode);
  2158. $core.addMethod(
  2159. $core.method({
  2160. selector: "isReturnNode",
  2161. protocol: "testing",
  2162. //>>excludeStart("ide", pragmas.excludeIdeData);
  2163. args: [],
  2164. source: "isReturnNode\x0a\x09^ true",
  2165. referencedClasses: [],
  2166. //>>excludeEnd("ide");
  2167. pragmas: [],
  2168. messageSends: []
  2169. }, function ($methodClass){ return function (){
  2170. var self=this,$self=this;
  2171. return true;
  2172. }; }),
  2173. $globals.ReturnNode);
  2174. $core.addMethod(
  2175. $core.method({
  2176. selector: "nonLocalReturn",
  2177. protocol: "testing",
  2178. //>>excludeStart("ide", pragmas.excludeIdeData);
  2179. args: [],
  2180. source: "nonLocalReturn\x0a\x09^ self scope isMethodScope not",
  2181. referencedClasses: [],
  2182. //>>excludeEnd("ide");
  2183. pragmas: [],
  2184. messageSends: ["not", "isMethodScope", "scope"]
  2185. }, function ($methodClass){ return function (){
  2186. var self=this,$self=this;
  2187. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2188. return $core.withContext(function($ctx1) {
  2189. //>>excludeEnd("ctx");
  2190. return $recv($recv($self._scope())._isMethodScope())._not();
  2191. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2192. }, function($ctx1) {$ctx1.fill(self,"nonLocalReturn",{})});
  2193. //>>excludeEnd("ctx");
  2194. }; }),
  2195. $globals.ReturnNode);
  2196. $core.addMethod(
  2197. $core.method({
  2198. selector: "scope",
  2199. protocol: "accessing",
  2200. //>>excludeStart("ide", pragmas.excludeIdeData);
  2201. args: [],
  2202. source: "scope\x0a\x09^ scope",
  2203. referencedClasses: [],
  2204. //>>excludeEnd("ide");
  2205. pragmas: [],
  2206. messageSends: []
  2207. }, function ($methodClass){ return function (){
  2208. var self=this,$self=this;
  2209. return $self.scope;
  2210. }; }),
  2211. $globals.ReturnNode);
  2212. $core.addMethod(
  2213. $core.method({
  2214. selector: "scope:",
  2215. protocol: "accessing",
  2216. //>>excludeStart("ide", pragmas.excludeIdeData);
  2217. args: ["aLexicalScope"],
  2218. source: "scope: aLexicalScope\x0a\x09scope := aLexicalScope",
  2219. referencedClasses: [],
  2220. //>>excludeEnd("ide");
  2221. pragmas: [],
  2222. messageSends: []
  2223. }, function ($methodClass){ return function (aLexicalScope){
  2224. var self=this,$self=this;
  2225. $self.scope=aLexicalScope;
  2226. return self;
  2227. }; }),
  2228. $globals.ReturnNode);
  2229. $core.addClass("SequenceNode", $globals.ASTNode, ["temps"], "Compiler-AST");
  2230. //>>excludeStart("ide", pragmas.excludeIdeData);
  2231. $globals.SequenceNode.comment="I represent an sequence node. A sequence represent a set of instructions inside the same scope (the method scope or a block scope).";
  2232. //>>excludeEnd("ide");
  2233. $core.addMethod(
  2234. $core.method({
  2235. selector: "acceptDagVisitor:",
  2236. protocol: "visiting",
  2237. //>>excludeStart("ide", pragmas.excludeIdeData);
  2238. args: ["aVisitor"],
  2239. source: "acceptDagVisitor: aVisitor\x0a\x09^ aVisitor visitSequenceNode: self",
  2240. referencedClasses: [],
  2241. //>>excludeEnd("ide");
  2242. pragmas: [],
  2243. messageSends: ["visitSequenceNode:"]
  2244. }, function ($methodClass){ return function (aVisitor){
  2245. var self=this,$self=this;
  2246. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2247. return $core.withContext(function($ctx1) {
  2248. //>>excludeEnd("ctx");
  2249. return $recv(aVisitor)._visitSequenceNode_(self);
  2250. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2251. }, function($ctx1) {$ctx1.fill(self,"acceptDagVisitor:",{aVisitor:aVisitor})});
  2252. //>>excludeEnd("ctx");
  2253. }; }),
  2254. $globals.SequenceNode);
  2255. $core.addMethod(
  2256. $core.method({
  2257. selector: "temps",
  2258. protocol: "accessing",
  2259. //>>excludeStart("ide", pragmas.excludeIdeData);
  2260. args: [],
  2261. source: "temps\x0a\x09^ temps ifNil: [ #() ]",
  2262. referencedClasses: [],
  2263. //>>excludeEnd("ide");
  2264. pragmas: [],
  2265. messageSends: ["ifNil:"]
  2266. }, function ($methodClass){ return function (){
  2267. var self=this,$self=this;
  2268. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2269. return $core.withContext(function($ctx1) {
  2270. //>>excludeEnd("ctx");
  2271. var $1;
  2272. $1=$self.temps;
  2273. if($1 == null || $1.a$nil){
  2274. return [];
  2275. } else {
  2276. return $1;
  2277. }
  2278. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2279. }, function($ctx1) {$ctx1.fill(self,"temps",{})});
  2280. //>>excludeEnd("ctx");
  2281. }; }),
  2282. $globals.SequenceNode);
  2283. $core.addMethod(
  2284. $core.method({
  2285. selector: "temps:",
  2286. protocol: "accessing",
  2287. //>>excludeStart("ide", pragmas.excludeIdeData);
  2288. args: ["aCollection"],
  2289. source: "temps: aCollection\x0a\x09temps := aCollection",
  2290. referencedClasses: [],
  2291. //>>excludeEnd("ide");
  2292. pragmas: [],
  2293. messageSends: []
  2294. }, function ($methodClass){ return function (aCollection){
  2295. var self=this,$self=this;
  2296. $self.temps=aCollection;
  2297. return self;
  2298. }; }),
  2299. $globals.SequenceNode);
  2300. $core.addClass("BlockSequenceNode", $globals.SequenceNode, [], "Compiler-AST");
  2301. //>>excludeStart("ide", pragmas.excludeIdeData);
  2302. $globals.BlockSequenceNode.comment="I represent an special sequence node for block scopes.";
  2303. //>>excludeEnd("ide");
  2304. $core.addMethod(
  2305. $core.method({
  2306. selector: "acceptDagVisitor:",
  2307. protocol: "visiting",
  2308. //>>excludeStart("ide", pragmas.excludeIdeData);
  2309. args: ["aVisitor"],
  2310. source: "acceptDagVisitor: aVisitor\x0a\x09^ aVisitor visitBlockSequenceNode: self",
  2311. referencedClasses: [],
  2312. //>>excludeEnd("ide");
  2313. pragmas: [],
  2314. messageSends: ["visitBlockSequenceNode:"]
  2315. }, function ($methodClass){ return function (aVisitor){
  2316. var self=this,$self=this;
  2317. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2318. return $core.withContext(function($ctx1) {
  2319. //>>excludeEnd("ctx");
  2320. return $recv(aVisitor)._visitBlockSequenceNode_(self);
  2321. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2322. }, function($ctx1) {$ctx1.fill(self,"acceptDagVisitor:",{aVisitor:aVisitor})});
  2323. //>>excludeEnd("ctx");
  2324. }; }),
  2325. $globals.BlockSequenceNode);
  2326. $core.addClass("AstPragmator", $globals.Object, ["methodNode"], "Compiler-AST");
  2327. //>>excludeStart("ide", pragmas.excludeIdeData);
  2328. $globals.AstPragmator.comment="I am abstract superclass for pragma-processing transformer.\x0a\x0aMy subclasses should implement messages for each pragma\x0athey process. Pragma processing checks if a message is known\x0ato a class but not to its superclass. IOW, each and only those\x0apragmas are processed which are defined as methods in the subclass.\x0a\x0aThese messages can access sequence node in which\x0aa pragma occurred and its containing method node\x0aas `self sequenceNode` and `self methodNode`.\x0a\x0aSee `EarlyPragmator` for an example.";
  2329. //>>excludeEnd("ide");
  2330. $core.addMethod(
  2331. $core.method({
  2332. selector: "methodNode",
  2333. protocol: "accessing",
  2334. //>>excludeStart("ide", pragmas.excludeIdeData);
  2335. args: [],
  2336. source: "methodNode\x0a\x09^ methodNode",
  2337. referencedClasses: [],
  2338. //>>excludeEnd("ide");
  2339. pragmas: [],
  2340. messageSends: []
  2341. }, function ($methodClass){ return function (){
  2342. var self=this,$self=this;
  2343. return $self.methodNode;
  2344. }; }),
  2345. $globals.AstPragmator);
  2346. $core.addMethod(
  2347. $core.method({
  2348. selector: "methodNode:",
  2349. protocol: "accessing",
  2350. //>>excludeStart("ide", pragmas.excludeIdeData);
  2351. args: ["anObject"],
  2352. source: "methodNode: anObject\x0a\x09methodNode := anObject",
  2353. referencedClasses: [],
  2354. //>>excludeEnd("ide");
  2355. pragmas: [],
  2356. messageSends: []
  2357. }, function ($methodClass){ return function (anObject){
  2358. var self=this,$self=this;
  2359. $self.methodNode=anObject;
  2360. return self;
  2361. }; }),
  2362. $globals.AstPragmator);
  2363. $core.addMethod(
  2364. $core.method({
  2365. selector: "value:",
  2366. protocol: "visiting",
  2367. //>>excludeStart("ide", pragmas.excludeIdeData);
  2368. args: ["aMethodNode"],
  2369. source: "value: aMethodNode\x0a\x09self methodNode: aMethodNode.\x0a\x09self processPragmas: aMethodNode pragmas.\x0a\x09^ aMethodNode",
  2370. referencedClasses: [],
  2371. //>>excludeEnd("ide");
  2372. pragmas: [],
  2373. messageSends: ["methodNode:", "processPragmas:", "pragmas"]
  2374. }, function ($methodClass){ return function (aMethodNode){
  2375. var self=this,$self=this;
  2376. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2377. return $core.withContext(function($ctx1) {
  2378. //>>excludeEnd("ctx");
  2379. $self._methodNode_(aMethodNode);
  2380. $self._processPragmas_($recv(aMethodNode)._pragmas());
  2381. return aMethodNode;
  2382. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2383. }, function($ctx1) {$ctx1.fill(self,"value:",{aMethodNode:aMethodNode})});
  2384. //>>excludeEnd("ctx");
  2385. }; }),
  2386. $globals.AstPragmator);
  2387. $core.addClass("AstSemanticPragmator", $globals.AstPragmator, [], "Compiler-AST");
  2388. $core.addMethod(
  2389. $core.method({
  2390. selector: "inlineJS:",
  2391. protocol: "pragmas",
  2392. //>>excludeStart("ide", pragmas.excludeIdeData);
  2393. args: ["aString"],
  2394. source: "inlineJS: aString\x0a\x09self methodNode sequenceNode dagChildren ifNotEmpty: [\x0a\x09\x09CompilerError signal: 'There must be no other code or code generator pragma than a lone inlineJS:' ].\x0a\x09self methodNode sequenceNode addDagChild: (\x0a\x09\x09JSStatementNode new\x0a\x09\x09\x09source: aString;\x0a\x09\x09\x09yourself)",
  2395. referencedClasses: ["CompilerError", "JSStatementNode"],
  2396. //>>excludeEnd("ide");
  2397. pragmas: [],
  2398. messageSends: ["ifNotEmpty:", "dagChildren", "sequenceNode", "methodNode", "signal:", "addDagChild:", "source:", "new", "yourself"]
  2399. }, function ($methodClass){ return function (aString){
  2400. var self=this,$self=this;
  2401. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2402. return $core.withContext(function($ctx1) {
  2403. //>>excludeEnd("ctx");
  2404. var $1,$2;
  2405. $recv($recv([$recv([$self._methodNode()
  2406. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2407. ,$ctx1.sendIdx["methodNode"]=1
  2408. //>>excludeEnd("ctx");
  2409. ][0])._sequenceNode()
  2410. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2411. ,$ctx1.sendIdx["sequenceNode"]=1
  2412. //>>excludeEnd("ctx");
  2413. ][0])._dagChildren())._ifNotEmpty_((function(){
  2414. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2415. return $core.withContext(function($ctx2) {
  2416. //>>excludeEnd("ctx");
  2417. return $recv($globals.CompilerError)._signal_("There must be no other code or code generator pragma than a lone inlineJS:");
  2418. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2419. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  2420. //>>excludeEnd("ctx");
  2421. }));
  2422. $1=$recv($self._methodNode())._sequenceNode();
  2423. $2=$recv($globals.JSStatementNode)._new();
  2424. $recv($2)._source_(aString);
  2425. $recv($1)._addDagChild_($recv($2)._yourself());
  2426. return self;
  2427. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2428. }, function($ctx1) {$ctx1.fill(self,"inlineJS:",{aString:aString})});
  2429. //>>excludeEnd("ctx");
  2430. }; }),
  2431. $globals.AstSemanticPragmator);
  2432. $core.addClass("CompilerError", $globals.Error, [], "Compiler-AST");
  2433. //>>excludeStart("ide", pragmas.excludeIdeData);
  2434. $globals.CompilerError.comment="I am the common superclass of all compiling errors.";
  2435. //>>excludeEnd("ide");
  2436. $core.addClass("ParentFakingPathDagVisitor", $globals.PathDagVisitor, ["setParentSelector"], "Compiler-AST");
  2437. //>>excludeStart("ide", pragmas.excludeIdeData);
  2438. $globals.ParentFakingPathDagVisitor.comment="I am base class of `DagNode` visitor.\x0a\x0aI hold the path of ancestors up to actual node\x0ain `self path`.";
  2439. //>>excludeEnd("ide");
  2440. $core.addMethod(
  2441. $core.method({
  2442. selector: "visit:",
  2443. protocol: "visiting",
  2444. //>>excludeStart("ide", pragmas.excludeIdeData);
  2445. args: ["aNode"],
  2446. source: "visit: aNode\x0a\x09self path ifNotEmpty: [ :p | aNode parent: p last ].\x0a\x09^ super visit: aNode",
  2447. referencedClasses: [],
  2448. //>>excludeEnd("ide");
  2449. pragmas: [],
  2450. messageSends: ["ifNotEmpty:", "path", "parent:", "last", "visit:"]
  2451. }, function ($methodClass){ return function (aNode){
  2452. var self=this,$self=this;
  2453. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2454. return $core.withContext(function($ctx1) {
  2455. //>>excludeEnd("ctx");
  2456. $recv($self._path())._ifNotEmpty_((function(p){
  2457. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2458. return $core.withContext(function($ctx2) {
  2459. //>>excludeEnd("ctx");
  2460. return $recv(aNode)._parent_($recv(p)._last());
  2461. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2462. }, function($ctx2) {$ctx2.fillBlock({p:p},$ctx1,1)});
  2463. //>>excludeEnd("ctx");
  2464. }));
  2465. return [(
  2466. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2467. $ctx1.supercall = true,
  2468. //>>excludeEnd("ctx");
  2469. ($methodClass.superclass||$boot.nilAsClass).fn.prototype._visit_.call($self,aNode))
  2470. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2471. ,$ctx1.supercall = false
  2472. //>>excludeEnd("ctx");
  2473. ][0];
  2474. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2475. }, function($ctx1) {$ctx1.fill(self,"visit:",{aNode:aNode})});
  2476. //>>excludeEnd("ctx");
  2477. }; }),
  2478. $globals.ParentFakingPathDagVisitor);
  2479. $core.addClass("NodeVisitor", $globals.ParentFakingPathDagVisitor, [], "Compiler-AST");
  2480. //>>excludeStart("ide", pragmas.excludeIdeData);
  2481. $globals.NodeVisitor.comment="I am the abstract super class of all AST node visitors.";
  2482. //>>excludeEnd("ide");
  2483. $core.addMethod(
  2484. $core.method({
  2485. selector: "visitAssignmentNode:",
  2486. protocol: "visiting",
  2487. //>>excludeStart("ide", pragmas.excludeIdeData);
  2488. args: ["aNode"],
  2489. source: "visitAssignmentNode: aNode\x0a\x09^ self visitDagNode: aNode",
  2490. referencedClasses: [],
  2491. //>>excludeEnd("ide");
  2492. pragmas: [],
  2493. messageSends: ["visitDagNode:"]
  2494. }, function ($methodClass){ return function (aNode){
  2495. var self=this,$self=this;
  2496. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2497. return $core.withContext(function($ctx1) {
  2498. //>>excludeEnd("ctx");
  2499. return $self._visitDagNode_(aNode);
  2500. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2501. }, function($ctx1) {$ctx1.fill(self,"visitAssignmentNode:",{aNode:aNode})});
  2502. //>>excludeEnd("ctx");
  2503. }; }),
  2504. $globals.NodeVisitor);
  2505. $core.addMethod(
  2506. $core.method({
  2507. selector: "visitBlockNode:",
  2508. protocol: "visiting",
  2509. //>>excludeStart("ide", pragmas.excludeIdeData);
  2510. args: ["aNode"],
  2511. source: "visitBlockNode: aNode\x0a\x09^ self visitDagNode: aNode",
  2512. referencedClasses: [],
  2513. //>>excludeEnd("ide");
  2514. pragmas: [],
  2515. messageSends: ["visitDagNode:"]
  2516. }, function ($methodClass){ return function (aNode){
  2517. var self=this,$self=this;
  2518. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2519. return $core.withContext(function($ctx1) {
  2520. //>>excludeEnd("ctx");
  2521. return $self._visitDagNode_(aNode);
  2522. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2523. }, function($ctx1) {$ctx1.fill(self,"visitBlockNode:",{aNode:aNode})});
  2524. //>>excludeEnd("ctx");
  2525. }; }),
  2526. $globals.NodeVisitor);
  2527. $core.addMethod(
  2528. $core.method({
  2529. selector: "visitBlockSequenceNode:",
  2530. protocol: "visiting",
  2531. //>>excludeStart("ide", pragmas.excludeIdeData);
  2532. args: ["aNode"],
  2533. source: "visitBlockSequenceNode: aNode\x0a\x09^ self visitSequenceNode: aNode",
  2534. referencedClasses: [],
  2535. //>>excludeEnd("ide");
  2536. pragmas: [],
  2537. messageSends: ["visitSequenceNode:"]
  2538. }, function ($methodClass){ return function (aNode){
  2539. var self=this,$self=this;
  2540. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2541. return $core.withContext(function($ctx1) {
  2542. //>>excludeEnd("ctx");
  2543. return $self._visitSequenceNode_(aNode);
  2544. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2545. }, function($ctx1) {$ctx1.fill(self,"visitBlockSequenceNode:",{aNode:aNode})});
  2546. //>>excludeEnd("ctx");
  2547. }; }),
  2548. $globals.NodeVisitor);
  2549. $core.addMethod(
  2550. $core.method({
  2551. selector: "visitCascadeNode:",
  2552. protocol: "visiting",
  2553. //>>excludeStart("ide", pragmas.excludeIdeData);
  2554. args: ["aNode"],
  2555. source: "visitCascadeNode: aNode\x0a\x09^ self visitDagNode: aNode",
  2556. referencedClasses: [],
  2557. //>>excludeEnd("ide");
  2558. pragmas: [],
  2559. messageSends: ["visitDagNode:"]
  2560. }, function ($methodClass){ return function (aNode){
  2561. var self=this,$self=this;
  2562. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2563. return $core.withContext(function($ctx1) {
  2564. //>>excludeEnd("ctx");
  2565. return $self._visitDagNode_(aNode);
  2566. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2567. }, function($ctx1) {$ctx1.fill(self,"visitCascadeNode:",{aNode:aNode})});
  2568. //>>excludeEnd("ctx");
  2569. }; }),
  2570. $globals.NodeVisitor);
  2571. $core.addMethod(
  2572. $core.method({
  2573. selector: "visitDagNode:",
  2574. protocol: "visiting",
  2575. //>>excludeStart("ide", pragmas.excludeIdeData);
  2576. args: ["aNode"],
  2577. source: "visitDagNode: aNode\x0a\x09^ self visitDagNodeVariantSimple: aNode",
  2578. referencedClasses: [],
  2579. //>>excludeEnd("ide");
  2580. pragmas: [],
  2581. messageSends: ["visitDagNodeVariantSimple:"]
  2582. }, function ($methodClass){ return function (aNode){
  2583. var self=this,$self=this;
  2584. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2585. return $core.withContext(function($ctx1) {
  2586. //>>excludeEnd("ctx");
  2587. return $self._visitDagNodeVariantSimple_(aNode);
  2588. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2589. }, function($ctx1) {$ctx1.fill(self,"visitDagNode:",{aNode:aNode})});
  2590. //>>excludeEnd("ctx");
  2591. }; }),
  2592. $globals.NodeVisitor);
  2593. $core.addMethod(
  2594. $core.method({
  2595. selector: "visitDynamicArrayNode:",
  2596. protocol: "visiting",
  2597. //>>excludeStart("ide", pragmas.excludeIdeData);
  2598. args: ["aNode"],
  2599. source: "visitDynamicArrayNode: aNode\x0a\x09^ self visitDagNode: aNode",
  2600. referencedClasses: [],
  2601. //>>excludeEnd("ide");
  2602. pragmas: [],
  2603. messageSends: ["visitDagNode:"]
  2604. }, function ($methodClass){ return function (aNode){
  2605. var self=this,$self=this;
  2606. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2607. return $core.withContext(function($ctx1) {
  2608. //>>excludeEnd("ctx");
  2609. return $self._visitDagNode_(aNode);
  2610. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2611. }, function($ctx1) {$ctx1.fill(self,"visitDynamicArrayNode:",{aNode:aNode})});
  2612. //>>excludeEnd("ctx");
  2613. }; }),
  2614. $globals.NodeVisitor);
  2615. $core.addMethod(
  2616. $core.method({
  2617. selector: "visitDynamicDictionaryNode:",
  2618. protocol: "visiting",
  2619. //>>excludeStart("ide", pragmas.excludeIdeData);
  2620. args: ["aNode"],
  2621. source: "visitDynamicDictionaryNode: aNode\x0a\x09^ self visitDagNode: aNode",
  2622. referencedClasses: [],
  2623. //>>excludeEnd("ide");
  2624. pragmas: [],
  2625. messageSends: ["visitDagNode:"]
  2626. }, function ($methodClass){ return function (aNode){
  2627. var self=this,$self=this;
  2628. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2629. return $core.withContext(function($ctx1) {
  2630. //>>excludeEnd("ctx");
  2631. return $self._visitDagNode_(aNode);
  2632. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2633. }, function($ctx1) {$ctx1.fill(self,"visitDynamicDictionaryNode:",{aNode:aNode})});
  2634. //>>excludeEnd("ctx");
  2635. }; }),
  2636. $globals.NodeVisitor);
  2637. $core.addMethod(
  2638. $core.method({
  2639. selector: "visitJSStatementNode:",
  2640. protocol: "visiting",
  2641. //>>excludeStart("ide", pragmas.excludeIdeData);
  2642. args: ["aNode"],
  2643. source: "visitJSStatementNode: aNode\x0a\x09^ self visitDagNode: aNode",
  2644. referencedClasses: [],
  2645. //>>excludeEnd("ide");
  2646. pragmas: [],
  2647. messageSends: ["visitDagNode:"]
  2648. }, function ($methodClass){ return function (aNode){
  2649. var self=this,$self=this;
  2650. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2651. return $core.withContext(function($ctx1) {
  2652. //>>excludeEnd("ctx");
  2653. return $self._visitDagNode_(aNode);
  2654. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2655. }, function($ctx1) {$ctx1.fill(self,"visitJSStatementNode:",{aNode:aNode})});
  2656. //>>excludeEnd("ctx");
  2657. }; }),
  2658. $globals.NodeVisitor);
  2659. $core.addMethod(
  2660. $core.method({
  2661. selector: "visitMethodNode:",
  2662. protocol: "visiting",
  2663. //>>excludeStart("ide", pragmas.excludeIdeData);
  2664. args: ["aNode"],
  2665. source: "visitMethodNode: aNode\x0a\x09^ self visitDagNode: aNode",
  2666. referencedClasses: [],
  2667. //>>excludeEnd("ide");
  2668. pragmas: [],
  2669. messageSends: ["visitDagNode:"]
  2670. }, function ($methodClass){ return function (aNode){
  2671. var self=this,$self=this;
  2672. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2673. return $core.withContext(function($ctx1) {
  2674. //>>excludeEnd("ctx");
  2675. return $self._visitDagNode_(aNode);
  2676. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2677. }, function($ctx1) {$ctx1.fill(self,"visitMethodNode:",{aNode:aNode})});
  2678. //>>excludeEnd("ctx");
  2679. }; }),
  2680. $globals.NodeVisitor);
  2681. $core.addMethod(
  2682. $core.method({
  2683. selector: "visitReturnNode:",
  2684. protocol: "visiting",
  2685. //>>excludeStart("ide", pragmas.excludeIdeData);
  2686. args: ["aNode"],
  2687. source: "visitReturnNode: aNode\x0a\x09^ self visitDagNode: aNode",
  2688. referencedClasses: [],
  2689. //>>excludeEnd("ide");
  2690. pragmas: [],
  2691. messageSends: ["visitDagNode:"]
  2692. }, function ($methodClass){ return function (aNode){
  2693. var self=this,$self=this;
  2694. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2695. return $core.withContext(function($ctx1) {
  2696. //>>excludeEnd("ctx");
  2697. return $self._visitDagNode_(aNode);
  2698. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2699. }, function($ctx1) {$ctx1.fill(self,"visitReturnNode:",{aNode:aNode})});
  2700. //>>excludeEnd("ctx");
  2701. }; }),
  2702. $globals.NodeVisitor);
  2703. $core.addMethod(
  2704. $core.method({
  2705. selector: "visitSendNode:",
  2706. protocol: "visiting",
  2707. //>>excludeStart("ide", pragmas.excludeIdeData);
  2708. args: ["aNode"],
  2709. source: "visitSendNode: aNode\x0a\x09^ self visitDagNode: aNode",
  2710. referencedClasses: [],
  2711. //>>excludeEnd("ide");
  2712. pragmas: [],
  2713. messageSends: ["visitDagNode:"]
  2714. }, function ($methodClass){ return function (aNode){
  2715. var self=this,$self=this;
  2716. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2717. return $core.withContext(function($ctx1) {
  2718. //>>excludeEnd("ctx");
  2719. return $self._visitDagNode_(aNode);
  2720. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2721. }, function($ctx1) {$ctx1.fill(self,"visitSendNode:",{aNode:aNode})});
  2722. //>>excludeEnd("ctx");
  2723. }; }),
  2724. $globals.NodeVisitor);
  2725. $core.addMethod(
  2726. $core.method({
  2727. selector: "visitSequenceNode:",
  2728. protocol: "visiting",
  2729. //>>excludeStart("ide", pragmas.excludeIdeData);
  2730. args: ["aNode"],
  2731. source: "visitSequenceNode: aNode\x0a\x09^ self visitDagNode: aNode",
  2732. referencedClasses: [],
  2733. //>>excludeEnd("ide");
  2734. pragmas: [],
  2735. messageSends: ["visitDagNode:"]
  2736. }, function ($methodClass){ return function (aNode){
  2737. var self=this,$self=this;
  2738. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2739. return $core.withContext(function($ctx1) {
  2740. //>>excludeEnd("ctx");
  2741. return $self._visitDagNode_(aNode);
  2742. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2743. }, function($ctx1) {$ctx1.fill(self,"visitSequenceNode:",{aNode:aNode})});
  2744. //>>excludeEnd("ctx");
  2745. }; }),
  2746. $globals.NodeVisitor);
  2747. $core.addMethod(
  2748. $core.method({
  2749. selector: "visitValueNode:",
  2750. protocol: "visiting",
  2751. //>>excludeStart("ide", pragmas.excludeIdeData);
  2752. args: ["aNode"],
  2753. source: "visitValueNode: aNode\x0a\x09^ self visitDagNode: aNode",
  2754. referencedClasses: [],
  2755. //>>excludeEnd("ide");
  2756. pragmas: [],
  2757. messageSends: ["visitDagNode:"]
  2758. }, function ($methodClass){ return function (aNode){
  2759. var self=this,$self=this;
  2760. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2761. return $core.withContext(function($ctx1) {
  2762. //>>excludeEnd("ctx");
  2763. return $self._visitDagNode_(aNode);
  2764. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2765. }, function($ctx1) {$ctx1.fill(self,"visitValueNode:",{aNode:aNode})});
  2766. //>>excludeEnd("ctx");
  2767. }; }),
  2768. $globals.NodeVisitor);
  2769. $core.addMethod(
  2770. $core.method({
  2771. selector: "visitVariableNode:",
  2772. protocol: "visiting",
  2773. //>>excludeStart("ide", pragmas.excludeIdeData);
  2774. args: ["aNode"],
  2775. source: "visitVariableNode: aNode\x0a\x09^ self visitDagNode: aNode",
  2776. referencedClasses: [],
  2777. //>>excludeEnd("ide");
  2778. pragmas: [],
  2779. messageSends: ["visitDagNode:"]
  2780. }, function ($methodClass){ return function (aNode){
  2781. var self=this,$self=this;
  2782. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2783. return $core.withContext(function($ctx1) {
  2784. //>>excludeEnd("ctx");
  2785. return $self._visitDagNode_(aNode);
  2786. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2787. }, function($ctx1) {$ctx1.fill(self,"visitVariableNode:",{aNode:aNode})});
  2788. //>>excludeEnd("ctx");
  2789. }; }),
  2790. $globals.NodeVisitor);
  2791. $core.setTraitComposition([{trait: $globals.TDerivedDagChildren}], $globals.AssignmentNode);
  2792. $core.setTraitComposition([{trait: $globals.TSingleDagChild}], $globals.BlockNode);
  2793. $core.setTraitComposition([{trait: $globals.TDerivedDagChildren}], $globals.SendNode);
  2794. $core.setTraitComposition([{trait: $globals.TDagSink}], $globals.ValueNode);
  2795. $core.setTraitComposition([{trait: $globals.TDagSink}], $globals.VariableNode);
  2796. $core.setTraitComposition([{trait: $globals.TDagSink}], $globals.JSStatementNode);
  2797. $core.setTraitComposition([{trait: $globals.TSingleDagChild}], $globals.MethodNode);
  2798. $core.setTraitComposition([{trait: $globals.TSingleDagChild}], $globals.ReturnNode);
  2799. $core.setTraitComposition([{trait: $globals.TPragmator}], $globals.AstPragmator);
  2800. $core.addMethod(
  2801. $core.method({
  2802. selector: "ast",
  2803. protocol: "*Compiler-AST",
  2804. //>>excludeStart("ide", pragmas.excludeIdeData);
  2805. args: [],
  2806. source: "ast\x0a\x09self source ifEmpty: [ CompilerError signal: 'Method source is empty' ].\x0a\x09\x0a\x09^ Compiler new\x0a\x09\x09ast: self source\x0a\x09\x09forClass: self origin\x0a\x09\x09protocol: self protocol",
  2807. referencedClasses: ["CompilerError", "Compiler"],
  2808. //>>excludeEnd("ide");
  2809. pragmas: [],
  2810. messageSends: ["ifEmpty:", "source", "signal:", "ast:forClass:protocol:", "new", "origin", "protocol"]
  2811. }, function ($methodClass){ return function (){
  2812. var self=this,$self=this;
  2813. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2814. return $core.withContext(function($ctx1) {
  2815. //>>excludeEnd("ctx");
  2816. $recv([$self._source()
  2817. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2818. ,$ctx1.sendIdx["source"]=1
  2819. //>>excludeEnd("ctx");
  2820. ][0])._ifEmpty_((function(){
  2821. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2822. return $core.withContext(function($ctx2) {
  2823. //>>excludeEnd("ctx");
  2824. return $recv($globals.CompilerError)._signal_("Method source is empty");
  2825. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2826. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  2827. //>>excludeEnd("ctx");
  2828. }));
  2829. return $recv($recv($globals.Compiler)._new())._ast_forClass_protocol_($self._source(),$self._origin(),$self._protocol());
  2830. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2831. }, function($ctx1) {$ctx1.fill(self,"ast",{})});
  2832. //>>excludeEnd("ctx");
  2833. }; }),
  2834. $globals.CompiledMethod);
  2835. });