Compiler-IR.deploy.js 53 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092
  1. smalltalk.addPackage('Compiler-IR', {});
  2. smalltalk.addClass('IRASTTranslator', smalltalk.NodeVisitor, ['source', 'theClass', 'method', 'sequence', 'nextAlias'], 'Compiler-IR');
  3. smalltalk.addMethod(
  4. "_alias_",
  5. smalltalk.method({
  6. selector: "alias:",
  7. fn: function (aNode) {
  8. var self=this;
  9. var $1,$2,$3,$4;
  10. var variable;
  11. $1=smalltalk.send((smalltalk.IRVariable || IRVariable),"_new",[]);
  12. smalltalk.send($1,"_variable_",[smalltalk.send(smalltalk.send((smalltalk.AliasVar || AliasVar),"_new",[]),"_name_",[smalltalk.send("$","__comma",[smalltalk.send(self,"_nextAlias",[])])])]);
  13. $2=smalltalk.send($1,"_yourself",[]);
  14. variable=$2;
  15. $3=smalltalk.send((smalltalk.IRAssignment || IRAssignment),"_new",[]);
  16. smalltalk.send($3,"_add_",[variable]);
  17. smalltalk.send($3,"_add_",[smalltalk.send(self,"_visit_",[aNode])]);
  18. $4=smalltalk.send($3,"_yourself",[]);
  19. smalltalk.send(smalltalk.send(self,"_sequence",[]),"_add_",[$4]);
  20. smalltalk.send(smalltalk.send(smalltalk.send(self,"_method",[]),"_internalVariables",[]),"_add_",[variable]);
  21. return variable;
  22. }
  23. }),
  24. smalltalk.IRASTTranslator);
  25. smalltalk.addMethod(
  26. "_method",
  27. smalltalk.method({
  28. selector: "method",
  29. fn: function () {
  30. var self=this;
  31. return self["@method"];
  32. }
  33. }),
  34. smalltalk.IRASTTranslator);
  35. smalltalk.addMethod(
  36. "_method_",
  37. smalltalk.method({
  38. selector: "method:",
  39. fn: function (anIRMethod) {
  40. var self=this;
  41. self["@method"]=anIRMethod;
  42. return self;}
  43. }),
  44. smalltalk.IRASTTranslator);
  45. smalltalk.addMethod(
  46. "_nextAlias",
  47. smalltalk.method({
  48. selector: "nextAlias",
  49. fn: function () {
  50. var self=this;
  51. smalltalk.send(self["@nextAlias"],"_ifNil_",[(function(){
  52. self["@nextAlias"]=(0);
  53. return self["@nextAlias"];
  54. })]);
  55. self["@nextAlias"]=smalltalk.send(self["@nextAlias"],"__plus",[(1)]);
  56. return smalltalk.send(self["@nextAlias"],"_asString",[]);
  57. }
  58. }),
  59. smalltalk.IRASTTranslator);
  60. smalltalk.addMethod(
  61. "_sequence",
  62. smalltalk.method({
  63. selector: "sequence",
  64. fn: function () {
  65. var self=this;
  66. return self["@sequence"];
  67. }
  68. }),
  69. smalltalk.IRASTTranslator);
  70. smalltalk.addMethod(
  71. "_sequence_",
  72. smalltalk.method({
  73. selector: "sequence:",
  74. fn: function (anIRSequence) {
  75. var self=this;
  76. self["@sequence"]=anIRSequence;
  77. return self;}
  78. }),
  79. smalltalk.IRASTTranslator);
  80. smalltalk.addMethod(
  81. "_source",
  82. smalltalk.method({
  83. selector: "source",
  84. fn: function () {
  85. var self=this;
  86. return self["@source"];
  87. }
  88. }),
  89. smalltalk.IRASTTranslator);
  90. smalltalk.addMethod(
  91. "_source_",
  92. smalltalk.method({
  93. selector: "source:",
  94. fn: function (aString) {
  95. var self=this;
  96. self["@source"]=aString;
  97. return self;}
  98. }),
  99. smalltalk.IRASTTranslator);
  100. smalltalk.addMethod(
  101. "_theClass",
  102. smalltalk.method({
  103. selector: "theClass",
  104. fn: function () {
  105. var self=this;
  106. return self["@theClass"];
  107. }
  108. }),
  109. smalltalk.IRASTTranslator);
  110. smalltalk.addMethod(
  111. "_theClass_",
  112. smalltalk.method({
  113. selector: "theClass:",
  114. fn: function (aClass) {
  115. var self=this;
  116. self["@theClass"]=aClass;
  117. return self;}
  118. }),
  119. smalltalk.IRASTTranslator);
  120. smalltalk.addMethod(
  121. "_visitAssignmentNode_",
  122. smalltalk.method({
  123. selector: "visitAssignmentNode:",
  124. fn: function (aNode){
  125. var self=this;
  126. var left=nil;
  127. var right=nil;
  128. var assignment=nil;
  129. (right=smalltalk.send(self, "_visit_", [smalltalk.send(aNode, "_right", [])]));
  130. (left=smalltalk.send(self, "_visit_", [smalltalk.send(aNode, "_left", [])]));
  131. smalltalk.send(smalltalk.send(self, "_sequence", []), "_add_", [(function($rec){smalltalk.send($rec, "_add_", [left]);smalltalk.send($rec, "_add_", [right]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.IRAssignment || IRAssignment), "_new", []))]);
  132. return left;
  133. return self;}
  134. }),
  135. smalltalk.IRASTTranslator);
  136. smalltalk.addMethod(
  137. "_visitBlockNode_",
  138. smalltalk.method({
  139. selector: "visitBlockNode:",
  140. fn: function (aNode) {
  141. var self=this;
  142. var $1,$2,$3,$4;
  143. var closure;
  144. $1=smalltalk.send((smalltalk.IRClosure || IRClosure),"_new",[]);
  145. smalltalk.send($1,"_arguments_",[smalltalk.send(aNode,"_parameters",[])]);
  146. smalltalk.send($1,"_scope_",[smalltalk.send(aNode,"_scope",[])]);
  147. $2=smalltalk.send($1,"_yourself",[]);
  148. closure=$2;
  149. smalltalk.send(smalltalk.send(smalltalk.send(aNode,"_scope",[]),"_temps",[]),"_do_",[(function(each){
  150. $3=smalltalk.send((smalltalk.IRTempDeclaration || IRTempDeclaration),"_new",[]);
  151. smalltalk.send($3,"_name_",[smalltalk.send(each,"_name",[])]);
  152. $4=smalltalk.send($3,"_yourself",[]);
  153. return smalltalk.send(closure,"_add_",[$4]);
  154. })]);
  155. smalltalk.send(smalltalk.send(aNode,"_nodes",[]),"_do_",[(function(each){
  156. return smalltalk.send(closure,"_add_",[smalltalk.send(self,"_visit_",[each])]);
  157. })]);
  158. return closure;
  159. }
  160. }),
  161. smalltalk.IRASTTranslator);
  162. smalltalk.addMethod(
  163. "_visitBlockSequenceNode_",
  164. smalltalk.method({
  165. selector: "visitBlockSequenceNode:",
  166. fn: function (aNode) {
  167. var self=this;
  168. var $1,$2;
  169. return smalltalk.send(self,"_withSequence_do_",[smalltalk.send((smalltalk.IRBlockSequence || IRBlockSequence),"_new",[]),(function(){
  170. return smalltalk.send(smalltalk.send(aNode,"_nodes",[]),"_ifNotEmpty_",[(function(){
  171. smalltalk.send(smalltalk.send(smalltalk.send(aNode,"_nodes",[]),"_allButLast",[]),"_do_",[(function(each){
  172. return smalltalk.send(smalltalk.send(self,"_sequence",[]),"_add_",[smalltalk.send(self,"_visit_",[each])]);
  173. })]);
  174. return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aNode,"_nodes",[]),"_last",[]),"_isReturnNode",[]),"_ifFalse_ifTrue_",[(function(){
  175. $1=smalltalk.send((smalltalk.IRReturn || IRReturn),"_new",[]);
  176. smalltalk.send($1,"_add_",[smalltalk.send(self,"_visit_",[smalltalk.send(smalltalk.send(aNode,"_nodes",[]),"_last",[])])]);
  177. $2=smalltalk.send($1,"_yourself",[]);
  178. return smalltalk.send(smalltalk.send(self,"_sequence",[]),"_add_",[$2]);
  179. }),(function(){
  180. return smalltalk.send(smalltalk.send(self,"_sequence",[]),"_add_",[smalltalk.send(self,"_visit_",[smalltalk.send(smalltalk.send(aNode,"_nodes",[]),"_last",[])])]);
  181. })]);
  182. })]);
  183. })]);
  184. }
  185. }),
  186. smalltalk.IRASTTranslator);
  187. smalltalk.addMethod(
  188. "_visitCascadeNode_",
  189. smalltalk.method({
  190. selector: "visitCascadeNode:",
  191. fn: function (aNode) {
  192. var self=this;
  193. var alias;
  194. if(! smalltalk.assert(smalltalk.send(smalltalk.send(aNode,"_receiver",[]),"_isValueNode",[]))){
  195. alias=smalltalk.send(self,"_alias_",[smalltalk.send(aNode,"_receiver",[])]);
  196. alias;
  197. smalltalk.send(smalltalk.send(aNode,"_nodes",[]),"_do_",[(function(each){
  198. return smalltalk.send(each,"_receiver_",[smalltalk.send(smalltalk.send((smalltalk.VariableNode || VariableNode),"_new",[]),"_binding_",[smalltalk.send(alias,"_variable",[])])]);
  199. })]);
  200. };
  201. smalltalk.send(smalltalk.send(smalltalk.send(aNode,"_nodes",[]),"_allButLast",[]),"_do_",[(function(each){
  202. return smalltalk.send(smalltalk.send(self,"_sequence",[]),"_add_",[smalltalk.send(self,"_visit_",[each])]);
  203. })]);
  204. return smalltalk.send(self,"_alias_",[smalltalk.send(smalltalk.send(aNode,"_nodes",[]),"_last",[])]);
  205. }
  206. }),
  207. smalltalk.IRASTTranslator);
  208. smalltalk.addMethod(
  209. "_visitDynamicArrayNode_",
  210. smalltalk.method({
  211. selector: "visitDynamicArrayNode:",
  212. fn: function (aNode) {
  213. var self=this;
  214. var array;
  215. array=smalltalk.send((smalltalk.IRDynamicArray || IRDynamicArray),"_new",[]);
  216. smalltalk.send(smalltalk.send(aNode,"_nodes",[]),"_do_",[(function(each){
  217. return smalltalk.send(array,"_add_",[smalltalk.send(self,"_visit_",[each])]);
  218. })]);
  219. return array;
  220. }
  221. }),
  222. smalltalk.IRASTTranslator);
  223. smalltalk.addMethod(
  224. "_visitDynamicDictionaryNode_",
  225. smalltalk.method({
  226. selector: "visitDynamicDictionaryNode:",
  227. fn: function (aNode) {
  228. var self=this;
  229. var dictionary;
  230. dictionary=smalltalk.send((smalltalk.IRDynamicDictionary || IRDynamicDictionary),"_new",[]);
  231. smalltalk.send(smalltalk.send(aNode,"_nodes",[]),"_do_",[(function(each){
  232. return smalltalk.send(dictionary,"_add_",[smalltalk.send(self,"_visit_",[each])]);
  233. })]);
  234. return dictionary;
  235. }
  236. }),
  237. smalltalk.IRASTTranslator);
  238. smalltalk.addMethod(
  239. "_visitJSStatementNode_",
  240. smalltalk.method({
  241. selector: "visitJSStatementNode:",
  242. fn: function (aNode) {
  243. var self=this;
  244. var $1,$2;
  245. $1=smalltalk.send((smalltalk.IRVerbatim || IRVerbatim),"_new",[]);
  246. smalltalk.send($1,"_source_",[smalltalk.send(aNode,"_source",[])]);
  247. $2=smalltalk.send($1,"_yourself",[]);
  248. return $2;
  249. }
  250. }),
  251. smalltalk.IRASTTranslator);
  252. smalltalk.addMethod(
  253. "_visitMethodNode_",
  254. smalltalk.method({
  255. selector: "visitMethodNode:",
  256. fn: function (aNode) {
  257. var self=this;
  258. var $1,$2,$3,$4,$5,$6;
  259. $1=smalltalk.send((smalltalk.IRMethod || IRMethod),"_new",[]);
  260. smalltalk.send($1,"_source_",[smalltalk.send(self,"_source",[])]);
  261. smalltalk.send($1,"_arguments_",[smalltalk.send(aNode,"_arguments",[])]);
  262. smalltalk.send($1,"_selector_",[smalltalk.send(aNode,"_selector",[])]);
  263. smalltalk.send($1,"_messageSends_",[smalltalk.send(aNode,"_messageSends",[])]);
  264. smalltalk.send($1,"_classReferences_",[smalltalk.send(aNode,"_classReferences",[])]);
  265. smalltalk.send($1,"_scope_",[smalltalk.send(aNode,"_scope",[])]);
  266. $2=smalltalk.send($1,"_yourself",[]);
  267. smalltalk.send(self,"_method_",[$2]);
  268. smalltalk.send(smalltalk.send(smalltalk.send(aNode,"_scope",[]),"_temps",[]),"_do_",[(function(each){
  269. $3=smalltalk.send((smalltalk.IRTempDeclaration || IRTempDeclaration),"_new",[]);
  270. smalltalk.send($3,"_name_",[smalltalk.send(each,"_name",[])]);
  271. $4=smalltalk.send($3,"_yourself",[]);
  272. return smalltalk.send(smalltalk.send(self,"_method",[]),"_add_",[$4]);
  273. })]);
  274. smalltalk.send(smalltalk.send(aNode,"_nodes",[]),"_do_",[(function(each){
  275. return smalltalk.send(smalltalk.send(self,"_method",[]),"_add_",[smalltalk.send(self,"_visit_",[each])]);
  276. })]);
  277. if(! smalltalk.assert(smalltalk.send(smalltalk.send(aNode,"_scope",[]),"_hasLocalReturn",[]))){
  278. $5=smalltalk.send((smalltalk.IRVariable || IRVariable),"_new",[]);
  279. smalltalk.send($5,"_variable_",[smalltalk.send(smalltalk.send(smalltalk.send(aNode,"_scope",[]),"_pseudoVars",[]),"_at_",["self"])]);
  280. $6=smalltalk.send($5,"_yourself",[]);
  281. smalltalk.send(smalltalk.send(smalltalk.send(self,"_method",[]),"_add_",[smalltalk.send((smalltalk.IRReturn || IRReturn),"_new",[])]),"_add_",[$6]);
  282. };
  283. return smalltalk.send(self,"_method",[]);
  284. }
  285. }),
  286. smalltalk.IRASTTranslator);
  287. smalltalk.addMethod(
  288. "_visitReturnNode_",
  289. smalltalk.method({
  290. selector: "visitReturnNode:",
  291. fn: function (aNode){
  292. var self=this;
  293. var return_=nil;
  294. (return_=((($receiver = smalltalk.send(aNode, "_nonLocalReturn", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send((smalltalk.IRNonLocalReturn || IRNonLocalReturn), "_new", []);})() : (function(){return smalltalk.send((smalltalk.IRReturn || IRReturn), "_new", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send((smalltalk.IRNonLocalReturn || IRNonLocalReturn), "_new", []);}), (function(){return smalltalk.send((smalltalk.IRReturn || IRReturn), "_new", []);})])));
  295. smalltalk.send(return_, "_scope_", [smalltalk.send(aNode, "_scope", [])]);
  296. smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_", [(function(each){return smalltalk.send(return_, "_add_", [smalltalk.send(self, "_alias_", [each])]);})]);
  297. return return_;
  298. return self;}
  299. }),
  300. smalltalk.IRASTTranslator);
  301. smalltalk.addMethod(
  302. "_visitSendNode_",
  303. smalltalk.method({
  304. selector: "visitSendNode:",
  305. fn: function (aNode){
  306. var self=this;
  307. var send=nil;
  308. var receiver=nil;
  309. var arguments=nil;
  310. (send=smalltalk.send((smalltalk.IRSend || IRSend), "_new", []));
  311. (function($rec){smalltalk.send($rec, "_selector_", [smalltalk.send(aNode, "_selector", [])]);return smalltalk.send($rec, "_index_", [smalltalk.send(aNode, "_index", [])]);})(send);
  312. ((($receiver = smalltalk.send(aNode, "_superSend", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(send, "_classSend_", [smalltalk.send(smalltalk.send(self, "_theClass", []), "_superclass", [])]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(send, "_classSend_", [smalltalk.send(smalltalk.send(self, "_theClass", []), "_superclass", [])]);})]));
  313. (receiver=((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(aNode, "_receiver", []), "_shouldBeInlined", []), "_or_", [(function(){return smalltalk.send(smalltalk.send(aNode, "_receiver", []), "_shouldBeAliased", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self, "_alias_", [smalltalk.send(aNode, "_receiver", [])]);})() : (function(){return smalltalk.send(self, "_visit_", [smalltalk.send(aNode, "_receiver", [])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self, "_alias_", [smalltalk.send(aNode, "_receiver", [])]);}), (function(){return smalltalk.send(self, "_visit_", [smalltalk.send(aNode, "_receiver", [])]);})])));
  314. (arguments=smalltalk.send(smalltalk.send(aNode, "_arguments", []), "_collect_", [(function(each){return ((($receiver = smalltalk.send(each, "_shouldBeInlined", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self, "_alias_", [each]);})() : (function(){return smalltalk.send(self, "_visit_", [each]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self, "_alias_", [each]);}), (function(){return smalltalk.send(self, "_visit_", [each]);})]));})]));
  315. smalltalk.send(send, "_add_", [receiver]);
  316. smalltalk.send(arguments, "_do_", [(function(each){return smalltalk.send(send, "_add_", [each]);})]);
  317. return send;
  318. return self;}
  319. }),
  320. smalltalk.IRASTTranslator);
  321. smalltalk.addMethod(
  322. "_visitSequenceNode_",
  323. smalltalk.method({
  324. selector: "visitSequenceNode:",
  325. fn: function (aNode) {
  326. var self=this;
  327. return smalltalk.send(self,"_withSequence_do_",[smalltalk.send((smalltalk.IRSequence || IRSequence),"_new",[]),(function(){
  328. return smalltalk.send(smalltalk.send(aNode,"_nodes",[]),"_do_",[(function(each){
  329. var instruction;
  330. instruction=smalltalk.send(self,"_visit_",[each]);
  331. instruction;
  332. if(! smalltalk.assert(smalltalk.send(instruction,"_isVariable",[]))){
  333. return smalltalk.send(smalltalk.send(self,"_sequence",[]),"_add_",[instruction]);
  334. };
  335. })]);
  336. })]);
  337. }
  338. }),
  339. smalltalk.IRASTTranslator);
  340. smalltalk.addMethod(
  341. "_visitValueNode_",
  342. smalltalk.method({
  343. selector: "visitValueNode:",
  344. fn: function (aNode) {
  345. var self=this;
  346. var $1,$2;
  347. $1=smalltalk.send((smalltalk.IRValue || IRValue),"_new",[]);
  348. smalltalk.send($1,"_value_",[smalltalk.send(aNode,"_value",[])]);
  349. $2=smalltalk.send($1,"_yourself",[]);
  350. return $2;
  351. }
  352. }),
  353. smalltalk.IRASTTranslator);
  354. smalltalk.addMethod(
  355. "_visitVariableNode_",
  356. smalltalk.method({
  357. selector: "visitVariableNode:",
  358. fn: function (aNode) {
  359. var self=this;
  360. var $1,$2;
  361. $1=smalltalk.send((smalltalk.IRVariable || IRVariable),"_new",[]);
  362. smalltalk.send($1,"_variable_",[smalltalk.send(aNode,"_binding",[])]);
  363. $2=smalltalk.send($1,"_yourself",[]);
  364. return $2;
  365. }
  366. }),
  367. smalltalk.IRASTTranslator);
  368. smalltalk.addMethod(
  369. "_withSequence_do_",
  370. smalltalk.method({
  371. selector: "withSequence:do:",
  372. fn: function (aSequence, aBlock) {
  373. var self=this;
  374. var outerSequence;
  375. outerSequence=smalltalk.send(self,"_sequence",[]);
  376. smalltalk.send(self,"_sequence_",[aSequence]);
  377. smalltalk.send(aBlock,"_value",[]);
  378. smalltalk.send(self,"_sequence_",[outerSequence]);
  379. return aSequence;
  380. }
  381. }),
  382. smalltalk.IRASTTranslator);
  383. smalltalk.addClass('IRInstruction', smalltalk.Object, ['parent', 'instructions'], 'Compiler-IR');
  384. smalltalk.addMethod(
  385. "_accept_",
  386. smalltalk.method({
  387. selector: "accept:",
  388. fn: function (aVisitor) {
  389. var self=this;
  390. return smalltalk.send(aVisitor,"_visitIRInstruction_",[self]);
  391. }
  392. }),
  393. smalltalk.IRInstruction);
  394. smalltalk.addMethod(
  395. "_add_",
  396. smalltalk.method({
  397. selector: "add:",
  398. fn: function (anObject) {
  399. var self=this;
  400. smalltalk.send(anObject,"_parent_",[self]);
  401. return smalltalk.send(smalltalk.send(self,"_instructions",[]),"_add_",[anObject]);
  402. }
  403. }),
  404. smalltalk.IRInstruction);
  405. smalltalk.addMethod(
  406. "_canBeAssigned",
  407. smalltalk.method({
  408. selector: "canBeAssigned",
  409. fn: function () {
  410. var self=this;
  411. return true;
  412. }
  413. }),
  414. smalltalk.IRInstruction);
  415. smalltalk.addMethod(
  416. "_instructions",
  417. smalltalk.method({
  418. selector: "instructions",
  419. fn: function () {
  420. var self=this;
  421. return smalltalk.send(self["@instructions"],"_ifNil_",[(function(){
  422. self["@instructions"]=smalltalk.send((smalltalk.OrderedCollection || OrderedCollection),"_new",[]);
  423. return self["@instructions"];
  424. })]);
  425. }
  426. }),
  427. smalltalk.IRInstruction);
  428. smalltalk.addMethod(
  429. "_isClosure",
  430. smalltalk.method({
  431. selector: "isClosure",
  432. fn: function () {
  433. var self=this;
  434. return false;
  435. }
  436. }),
  437. smalltalk.IRInstruction);
  438. smalltalk.addMethod(
  439. "_isInlined",
  440. smalltalk.method({
  441. selector: "isInlined",
  442. fn: function () {
  443. var self=this;
  444. return false;
  445. }
  446. }),
  447. smalltalk.IRInstruction);
  448. smalltalk.addMethod(
  449. "_isLocalReturn",
  450. smalltalk.method({
  451. selector: "isLocalReturn",
  452. fn: function () {
  453. var self=this;
  454. return false;
  455. }
  456. }),
  457. smalltalk.IRInstruction);
  458. smalltalk.addMethod(
  459. "_isReturn",
  460. smalltalk.method({
  461. selector: "isReturn",
  462. fn: function () {
  463. var self=this;
  464. return false;
  465. }
  466. }),
  467. smalltalk.IRInstruction);
  468. smalltalk.addMethod(
  469. "_isSend",
  470. smalltalk.method({
  471. selector: "isSend",
  472. fn: function () {
  473. var self=this;
  474. return false;
  475. }
  476. }),
  477. smalltalk.IRInstruction);
  478. smalltalk.addMethod(
  479. "_isSequence",
  480. smalltalk.method({
  481. selector: "isSequence",
  482. fn: function () {
  483. var self=this;
  484. return false;
  485. }
  486. }),
  487. smalltalk.IRInstruction);
  488. smalltalk.addMethod(
  489. "_isTempDeclaration",
  490. smalltalk.method({
  491. selector: "isTempDeclaration",
  492. fn: function () {
  493. var self=this;
  494. return false;
  495. }
  496. }),
  497. smalltalk.IRInstruction);
  498. smalltalk.addMethod(
  499. "_isVariable",
  500. smalltalk.method({
  501. selector: "isVariable",
  502. fn: function () {
  503. var self=this;
  504. return false;
  505. }
  506. }),
  507. smalltalk.IRInstruction);
  508. smalltalk.addMethod(
  509. "_parent",
  510. smalltalk.method({
  511. selector: "parent",
  512. fn: function () {
  513. var self=this;
  514. return self["@parent"];
  515. }
  516. }),
  517. smalltalk.IRInstruction);
  518. smalltalk.addMethod(
  519. "_parent_",
  520. smalltalk.method({
  521. selector: "parent:",
  522. fn: function (anIRInstruction) {
  523. var self=this;
  524. self["@parent"]=anIRInstruction;
  525. return self;}
  526. }),
  527. smalltalk.IRInstruction);
  528. smalltalk.addMethod(
  529. "_remove",
  530. smalltalk.method({
  531. selector: "remove",
  532. fn: function () {
  533. var self=this;
  534. smalltalk.send(smalltalk.send(self,"_parent",[]),"_remove_",[self]);
  535. return self;}
  536. }),
  537. smalltalk.IRInstruction);
  538. smalltalk.addMethod(
  539. "_remove_",
  540. smalltalk.method({
  541. selector: "remove:",
  542. fn: function (anIRInstruction) {
  543. var self=this;
  544. smalltalk.send(smalltalk.send(self,"_instructions",[]),"_remove_",[anIRInstruction]);
  545. return self;}
  546. }),
  547. smalltalk.IRInstruction);
  548. smalltalk.addMethod(
  549. "_replace_with_",
  550. smalltalk.method({
  551. selector: "replace:with:",
  552. fn: function (anIRInstruction, anotherIRInstruction) {
  553. var self=this;
  554. smalltalk.send(anotherIRInstruction,"_parent_",[self]);
  555. smalltalk.send(smalltalk.send(self,"_instructions",[]),"_at_put_",[smalltalk.send(smalltalk.send(self,"_instructions",[]),"_indexOf_",[anIRInstruction]),anotherIRInstruction]);
  556. return self;}
  557. }),
  558. smalltalk.IRInstruction);
  559. smalltalk.addMethod(
  560. "_replaceWith_",
  561. smalltalk.method({
  562. selector: "replaceWith:",
  563. fn: function (anIRInstruction) {
  564. var self=this;
  565. smalltalk.send(smalltalk.send(self,"_parent",[]),"_replace_with_",[self,anIRInstruction]);
  566. return self;}
  567. }),
  568. smalltalk.IRInstruction);
  569. smalltalk.addMethod(
  570. "_on_",
  571. smalltalk.method({
  572. selector: "on:",
  573. fn: function (aBuilder) {
  574. var self=this;
  575. var $1,$2;
  576. $1=smalltalk.send(self,"_new",[]);
  577. smalltalk.send($1,"_builder_",[aBuilder]);
  578. $2=smalltalk.send($1,"_yourself",[]);
  579. return $2;
  580. }
  581. }),
  582. smalltalk.IRInstruction.klass);
  583. smalltalk.addClass('IRAssignment', smalltalk.IRInstruction, [], 'Compiler-IR');
  584. smalltalk.addMethod(
  585. "_accept_",
  586. smalltalk.method({
  587. selector: "accept:",
  588. fn: function (aVisitor) {
  589. var self=this;
  590. return smalltalk.send(aVisitor,"_visitIRAssignment_",[self]);
  591. }
  592. }),
  593. smalltalk.IRAssignment);
  594. smalltalk.addClass('IRDynamicArray', smalltalk.IRInstruction, [], 'Compiler-IR');
  595. smalltalk.addMethod(
  596. "_accept_",
  597. smalltalk.method({
  598. selector: "accept:",
  599. fn: function (aVisitor) {
  600. var self=this;
  601. return smalltalk.send(aVisitor,"_visitIRDynamicArray_",[self]);
  602. }
  603. }),
  604. smalltalk.IRDynamicArray);
  605. smalltalk.addClass('IRDynamicDictionary', smalltalk.IRInstruction, [], 'Compiler-IR');
  606. smalltalk.addMethod(
  607. "_accept_",
  608. smalltalk.method({
  609. selector: "accept:",
  610. fn: function (aVisitor) {
  611. var self=this;
  612. return smalltalk.send(aVisitor,"_visitIRDynamicDictionary_",[self]);
  613. }
  614. }),
  615. smalltalk.IRDynamicDictionary);
  616. smalltalk.addClass('IRScopedInstruction', smalltalk.IRInstruction, ['scope'], 'Compiler-IR');
  617. smalltalk.addMethod(
  618. "_scope",
  619. smalltalk.method({
  620. selector: "scope",
  621. fn: function () {
  622. var self=this;
  623. return self["@scope"];
  624. }
  625. }),
  626. smalltalk.IRScopedInstruction);
  627. smalltalk.addMethod(
  628. "_scope_",
  629. smalltalk.method({
  630. selector: "scope:",
  631. fn: function (aScope) {
  632. var self=this;
  633. self["@scope"]=aScope;
  634. return self;}
  635. }),
  636. smalltalk.IRScopedInstruction);
  637. smalltalk.addClass('IRClosure', smalltalk.IRScopedInstruction, ['arguments'], 'Compiler-IR');
  638. smalltalk.addMethod(
  639. "_accept_",
  640. smalltalk.method({
  641. selector: "accept:",
  642. fn: function (aVisitor) {
  643. var self=this;
  644. return smalltalk.send(aVisitor,"_visitIRClosure_",[self]);
  645. }
  646. }),
  647. smalltalk.IRClosure);
  648. smalltalk.addMethod(
  649. "_arguments",
  650. smalltalk.method({
  651. selector: "arguments",
  652. fn: function () {
  653. var self=this;
  654. return smalltalk.send(self["@arguments"],"_ifNil_",[(function(){
  655. return [];
  656. })]);
  657. }
  658. }),
  659. smalltalk.IRClosure);
  660. smalltalk.addMethod(
  661. "_arguments_",
  662. smalltalk.method({
  663. selector: "arguments:",
  664. fn: function (aCollection) {
  665. var self=this;
  666. self["@arguments"]=aCollection;
  667. return self;}
  668. }),
  669. smalltalk.IRClosure);
  670. smalltalk.addMethod(
  671. "_isClosure",
  672. smalltalk.method({
  673. selector: "isClosure",
  674. fn: function () {
  675. var self=this;
  676. return true;
  677. }
  678. }),
  679. smalltalk.IRClosure);
  680. smalltalk.addMethod(
  681. "_scope_",
  682. smalltalk.method({
  683. selector: "scope:",
  684. fn: function (aScope) {
  685. var self=this;
  686. smalltalk.send(self,"_scope_",[aScope],smalltalk.IRScopedInstruction);
  687. smalltalk.send(aScope,"_instruction_",[self]);
  688. return self;}
  689. }),
  690. smalltalk.IRClosure);
  691. smalltalk.addMethod(
  692. "_sequence",
  693. smalltalk.method({
  694. selector: "sequence",
  695. fn: function () {
  696. var self=this;
  697. return smalltalk.send(smalltalk.send(self,"_instructions",[]),"_last",[]);
  698. }
  699. }),
  700. smalltalk.IRClosure);
  701. smalltalk.addClass('IRMethod', smalltalk.IRScopedInstruction, ['source', 'selector', 'classReferences', 'messageSends', 'arguments', 'internalVariables'], 'Compiler-IR');
  702. smalltalk.addMethod(
  703. "_accept_",
  704. smalltalk.method({
  705. selector: "accept:",
  706. fn: function (aVisitor) {
  707. var self=this;
  708. return smalltalk.send(aVisitor,"_visitIRMethod_",[self]);
  709. }
  710. }),
  711. smalltalk.IRMethod);
  712. smalltalk.addMethod(
  713. "_arguments",
  714. smalltalk.method({
  715. selector: "arguments",
  716. fn: function () {
  717. var self=this;
  718. return self["@arguments"];
  719. }
  720. }),
  721. smalltalk.IRMethod);
  722. smalltalk.addMethod(
  723. "_arguments_",
  724. smalltalk.method({
  725. selector: "arguments:",
  726. fn: function (aCollection) {
  727. var self=this;
  728. self["@arguments"]=aCollection;
  729. return self;}
  730. }),
  731. smalltalk.IRMethod);
  732. smalltalk.addMethod(
  733. "_classReferences",
  734. smalltalk.method({
  735. selector: "classReferences",
  736. fn: function () {
  737. var self=this;
  738. return self["@classReferences"];
  739. }
  740. }),
  741. smalltalk.IRMethod);
  742. smalltalk.addMethod(
  743. "_classReferences_",
  744. smalltalk.method({
  745. selector: "classReferences:",
  746. fn: function (aCollection) {
  747. var self=this;
  748. self["@classReferences"]=aCollection;
  749. return self;}
  750. }),
  751. smalltalk.IRMethod);
  752. smalltalk.addMethod(
  753. "_internalVariables",
  754. smalltalk.method({
  755. selector: "internalVariables",
  756. fn: function () {
  757. var self=this;
  758. return smalltalk.send(self["@internalVariables"],"_ifNil_",[(function(){
  759. self["@internalVariables"]=smalltalk.send((smalltalk.Set || Set),"_new",[]);
  760. return self["@internalVariables"];
  761. })]);
  762. }
  763. }),
  764. smalltalk.IRMethod);
  765. smalltalk.addMethod(
  766. "_messageSends",
  767. smalltalk.method({
  768. selector: "messageSends",
  769. fn: function () {
  770. var self=this;
  771. return self["@messageSends"];
  772. }
  773. }),
  774. smalltalk.IRMethod);
  775. smalltalk.addMethod(
  776. "_messageSends_",
  777. smalltalk.method({
  778. selector: "messageSends:",
  779. fn: function (aCollection) {
  780. var self=this;
  781. self["@messageSends"]=aCollection;
  782. return self;}
  783. }),
  784. smalltalk.IRMethod);
  785. smalltalk.addMethod(
  786. "_scope_",
  787. smalltalk.method({
  788. selector: "scope:",
  789. fn: function (aScope) {
  790. var self=this;
  791. smalltalk.send(self,"_scope_",[aScope],smalltalk.IRScopedInstruction);
  792. smalltalk.send(aScope,"_instruction_",[self]);
  793. return self;}
  794. }),
  795. smalltalk.IRMethod);
  796. smalltalk.addMethod(
  797. "_selector",
  798. smalltalk.method({
  799. selector: "selector",
  800. fn: function () {
  801. var self=this;
  802. return self["@selector"];
  803. }
  804. }),
  805. smalltalk.IRMethod);
  806. smalltalk.addMethod(
  807. "_selector_",
  808. smalltalk.method({
  809. selector: "selector:",
  810. fn: function (aString) {
  811. var self=this;
  812. self["@selector"]=aString;
  813. return self;}
  814. }),
  815. smalltalk.IRMethod);
  816. smalltalk.addMethod(
  817. "_source",
  818. smalltalk.method({
  819. selector: "source",
  820. fn: function () {
  821. var self=this;
  822. return self["@source"];
  823. }
  824. }),
  825. smalltalk.IRMethod);
  826. smalltalk.addMethod(
  827. "_source_",
  828. smalltalk.method({
  829. selector: "source:",
  830. fn: function (aString) {
  831. var self=this;
  832. self["@source"]=aString;
  833. return self;}
  834. }),
  835. smalltalk.IRMethod);
  836. smalltalk.addClass('IRReturn', smalltalk.IRScopedInstruction, [], 'Compiler-IR');
  837. smalltalk.addMethod(
  838. "_accept_",
  839. smalltalk.method({
  840. selector: "accept:",
  841. fn: function (aVisitor) {
  842. var self=this;
  843. return smalltalk.send(aVisitor,"_visitIRReturn_",[self]);
  844. }
  845. }),
  846. smalltalk.IRReturn);
  847. smalltalk.addMethod(
  848. "_canBeAssigned",
  849. smalltalk.method({
  850. selector: "canBeAssigned",
  851. fn: function () {
  852. var self=this;
  853. return false;
  854. }
  855. }),
  856. smalltalk.IRReturn);
  857. smalltalk.addMethod(
  858. "_isLocalReturn",
  859. smalltalk.method({
  860. selector: "isLocalReturn",
  861. fn: function () {
  862. var self=this;
  863. return smalltalk.send(self,"_isReturn",[]);
  864. }
  865. }),
  866. smalltalk.IRReturn);
  867. smalltalk.addMethod(
  868. "_isNonLocalReturn",
  869. smalltalk.method({
  870. selector: "isNonLocalReturn",
  871. fn: function () {
  872. var self=this;
  873. return smalltalk.send(smalltalk.send(self,"_isLocalReturn",[]),"_not",[]);
  874. }
  875. }),
  876. smalltalk.IRReturn);
  877. smalltalk.addMethod(
  878. "_isReturn",
  879. smalltalk.method({
  880. selector: "isReturn",
  881. fn: function () {
  882. var self=this;
  883. return true;
  884. }
  885. }),
  886. smalltalk.IRReturn);
  887. smalltalk.addClass('IRNonLocalReturn', smalltalk.IRReturn, [], 'Compiler-IR');
  888. smalltalk.addMethod(
  889. "_accept_",
  890. smalltalk.method({
  891. selector: "accept:",
  892. fn: function (aVisitor) {
  893. var self=this;
  894. return smalltalk.send(aVisitor,"_visitIRNonLocalReturn_",[self]);
  895. }
  896. }),
  897. smalltalk.IRNonLocalReturn);
  898. smalltalk.addMethod(
  899. "_isLocalReturn",
  900. smalltalk.method({
  901. selector: "isLocalReturn",
  902. fn: function () {
  903. var self=this;
  904. return false;
  905. }
  906. }),
  907. smalltalk.IRNonLocalReturn);
  908. smalltalk.addClass('IRSend', smalltalk.IRInstruction, ['selector', 'classSend', 'index'], 'Compiler-IR');
  909. smalltalk.addMethod(
  910. "_accept_",
  911. smalltalk.method({
  912. selector: "accept:",
  913. fn: function (aVisitor) {
  914. var self=this;
  915. return smalltalk.send(aVisitor,"_visitIRSend_",[self]);
  916. }
  917. }),
  918. smalltalk.IRSend);
  919. smalltalk.addMethod(
  920. "_classSend",
  921. smalltalk.method({
  922. selector: "classSend",
  923. fn: function () {
  924. var self=this;
  925. return self["@classSend"];
  926. }
  927. }),
  928. smalltalk.IRSend);
  929. smalltalk.addMethod(
  930. "_classSend_",
  931. smalltalk.method({
  932. selector: "classSend:",
  933. fn: function (aClass) {
  934. var self=this;
  935. self["@classSend"]=aClass;
  936. return self;}
  937. }),
  938. smalltalk.IRSend);
  939. smalltalk.addMethod(
  940. "_index",
  941. smalltalk.method({
  942. selector: "index",
  943. fn: function () {
  944. var self=this;
  945. return self["@index"];
  946. }
  947. }),
  948. smalltalk.IRSend);
  949. smalltalk.addMethod(
  950. "_index_",
  951. smalltalk.method({
  952. selector: "index:",
  953. fn: function (anInteger) {
  954. var self=this;
  955. self["@index"]=anInteger;
  956. return self;}
  957. }),
  958. smalltalk.IRSend);
  959. smalltalk.addMethod(
  960. "_isSend",
  961. smalltalk.method({
  962. selector: "isSend",
  963. fn: function () {
  964. var self=this;
  965. return true;
  966. }
  967. }),
  968. smalltalk.IRSend);
  969. smalltalk.addMethod(
  970. "_selector",
  971. smalltalk.method({
  972. selector: "selector",
  973. fn: function () {
  974. var self=this;
  975. return self["@selector"];
  976. }
  977. }),
  978. smalltalk.IRSend);
  979. smalltalk.addMethod(
  980. "_selector_",
  981. smalltalk.method({
  982. selector: "selector:",
  983. fn: function (aString) {
  984. var self=this;
  985. self["@selector"]=aString;
  986. return self;}
  987. }),
  988. smalltalk.IRSend);
  989. smalltalk.addClass('IRSequence', smalltalk.IRInstruction, [], 'Compiler-IR');
  990. smalltalk.addMethod(
  991. "_accept_",
  992. smalltalk.method({
  993. selector: "accept:",
  994. fn: function (aVisitor) {
  995. var self=this;
  996. return smalltalk.send(aVisitor,"_visitIRSequence_",[self]);
  997. }
  998. }),
  999. smalltalk.IRSequence);
  1000. smalltalk.addMethod(
  1001. "_isSequence",
  1002. smalltalk.method({
  1003. selector: "isSequence",
  1004. fn: function () {
  1005. var self=this;
  1006. return true;
  1007. }
  1008. }),
  1009. smalltalk.IRSequence);
  1010. smalltalk.addClass('IRBlockSequence', smalltalk.IRSequence, [], 'Compiler-IR');
  1011. smalltalk.addMethod(
  1012. "_accept_",
  1013. smalltalk.method({
  1014. selector: "accept:",
  1015. fn: function (aVisitor) {
  1016. var self=this;
  1017. return smalltalk.send(aVisitor,"_visitIRBlockSequence_",[self]);
  1018. }
  1019. }),
  1020. smalltalk.IRBlockSequence);
  1021. smalltalk.addClass('IRTempDeclaration', smalltalk.IRInstruction, ['name'], 'Compiler-IR');
  1022. smalltalk.addMethod(
  1023. "_accept_",
  1024. smalltalk.method({
  1025. selector: "accept:",
  1026. fn: function (aVisitor) {
  1027. var self=this;
  1028. return smalltalk.send(aVisitor,"_visitIRTempDeclaration_",[self]);
  1029. }
  1030. }),
  1031. smalltalk.IRTempDeclaration);
  1032. smalltalk.addMethod(
  1033. "_isTempDeclaration",
  1034. smalltalk.method({
  1035. selector: "isTempDeclaration",
  1036. fn: function () {
  1037. var self=this;
  1038. return true;
  1039. }
  1040. }),
  1041. smalltalk.IRTempDeclaration);
  1042. smalltalk.addMethod(
  1043. "_name",
  1044. smalltalk.method({
  1045. selector: "name",
  1046. fn: function () {
  1047. var self=this;
  1048. return self["@name"];
  1049. }
  1050. }),
  1051. smalltalk.IRTempDeclaration);
  1052. smalltalk.addMethod(
  1053. "_name_",
  1054. smalltalk.method({
  1055. selector: "name:",
  1056. fn: function (aString) {
  1057. var self=this;
  1058. self["@name"]=aString;
  1059. return self;}
  1060. }),
  1061. smalltalk.IRTempDeclaration);
  1062. smalltalk.addClass('IRValue', smalltalk.IRInstruction, ['value'], 'Compiler-IR');
  1063. smalltalk.addMethod(
  1064. "_accept_",
  1065. smalltalk.method({
  1066. selector: "accept:",
  1067. fn: function (aVisitor) {
  1068. var self=this;
  1069. return smalltalk.send(aVisitor,"_visitIRValue_",[self]);
  1070. }
  1071. }),
  1072. smalltalk.IRValue);
  1073. smalltalk.addMethod(
  1074. "_value",
  1075. smalltalk.method({
  1076. selector: "value",
  1077. fn: function () {
  1078. var self=this;
  1079. return self["@value"];
  1080. }
  1081. }),
  1082. smalltalk.IRValue);
  1083. smalltalk.addMethod(
  1084. "_value_",
  1085. smalltalk.method({
  1086. selector: "value:",
  1087. fn: function (aString) {
  1088. var self=this;
  1089. self["@value"]=aString;
  1090. return self;}
  1091. }),
  1092. smalltalk.IRValue);
  1093. smalltalk.addClass('IRVariable', smalltalk.IRInstruction, ['variable'], 'Compiler-IR');
  1094. smalltalk.addMethod(
  1095. "_accept_",
  1096. smalltalk.method({
  1097. selector: "accept:",
  1098. fn: function (aVisitor) {
  1099. var self=this;
  1100. return smalltalk.send(aVisitor,"_visitIRVariable_",[self]);
  1101. }
  1102. }),
  1103. smalltalk.IRVariable);
  1104. smalltalk.addMethod(
  1105. "_isVariable",
  1106. smalltalk.method({
  1107. selector: "isVariable",
  1108. fn: function () {
  1109. var self=this;
  1110. return true;
  1111. }
  1112. }),
  1113. smalltalk.IRVariable);
  1114. smalltalk.addMethod(
  1115. "_variable",
  1116. smalltalk.method({
  1117. selector: "variable",
  1118. fn: function () {
  1119. var self=this;
  1120. return self["@variable"];
  1121. }
  1122. }),
  1123. smalltalk.IRVariable);
  1124. smalltalk.addMethod(
  1125. "_variable_",
  1126. smalltalk.method({
  1127. selector: "variable:",
  1128. fn: function (aScopeVariable) {
  1129. var self=this;
  1130. self["@variable"]=aScopeVariable;
  1131. return self;}
  1132. }),
  1133. smalltalk.IRVariable);
  1134. smalltalk.addClass('IRVerbatim', smalltalk.IRInstruction, ['source'], 'Compiler-IR');
  1135. smalltalk.addMethod(
  1136. "_accept_",
  1137. smalltalk.method({
  1138. selector: "accept:",
  1139. fn: function (aVisitor) {
  1140. var self=this;
  1141. return smalltalk.send(aVisitor,"_visitIRVerbatim_",[self]);
  1142. }
  1143. }),
  1144. smalltalk.IRVerbatim);
  1145. smalltalk.addMethod(
  1146. "_source",
  1147. smalltalk.method({
  1148. selector: "source",
  1149. fn: function () {
  1150. var self=this;
  1151. return self["@source"];
  1152. }
  1153. }),
  1154. smalltalk.IRVerbatim);
  1155. smalltalk.addMethod(
  1156. "_source_",
  1157. smalltalk.method({
  1158. selector: "source:",
  1159. fn: function (aString) {
  1160. var self=this;
  1161. self["@source"]=aString;
  1162. return self;}
  1163. }),
  1164. smalltalk.IRVerbatim);
  1165. smalltalk.addClass('IRVisitor', smalltalk.Object, [], 'Compiler-IR');
  1166. smalltalk.addMethod(
  1167. "_visit_",
  1168. smalltalk.method({
  1169. selector: "visit:",
  1170. fn: function (anIRInstruction) {
  1171. var self=this;
  1172. return smalltalk.send(anIRInstruction,"_accept_",[self]);
  1173. }
  1174. }),
  1175. smalltalk.IRVisitor);
  1176. smalltalk.addMethod(
  1177. "_visitIRAssignment_",
  1178. smalltalk.method({
  1179. selector: "visitIRAssignment:",
  1180. fn: function (anIRAssignment) {
  1181. var self=this;
  1182. return smalltalk.send(self,"_visitIRInstruction_",[anIRAssignment]);
  1183. }
  1184. }),
  1185. smalltalk.IRVisitor);
  1186. smalltalk.addMethod(
  1187. "_visitIRBlockSequence_",
  1188. smalltalk.method({
  1189. selector: "visitIRBlockSequence:",
  1190. fn: function (anIRBlockSequence) {
  1191. var self=this;
  1192. return smalltalk.send(self,"_visitIRSequence_",[anIRBlockSequence]);
  1193. }
  1194. }),
  1195. smalltalk.IRVisitor);
  1196. smalltalk.addMethod(
  1197. "_visitIRClosure_",
  1198. smalltalk.method({
  1199. selector: "visitIRClosure:",
  1200. fn: function (anIRClosure) {
  1201. var self=this;
  1202. return smalltalk.send(self,"_visitIRInstruction_",[anIRClosure]);
  1203. }
  1204. }),
  1205. smalltalk.IRVisitor);
  1206. smalltalk.addMethod(
  1207. "_visitIRDynamicArray_",
  1208. smalltalk.method({
  1209. selector: "visitIRDynamicArray:",
  1210. fn: function (anIRDynamicArray) {
  1211. var self=this;
  1212. return smalltalk.send(self,"_visitIRInstruction_",[anIRDynamicArray]);
  1213. }
  1214. }),
  1215. smalltalk.IRVisitor);
  1216. smalltalk.addMethod(
  1217. "_visitIRDynamicDictionary_",
  1218. smalltalk.method({
  1219. selector: "visitIRDynamicDictionary:",
  1220. fn: function (anIRDynamicDictionary) {
  1221. var self=this;
  1222. return smalltalk.send(self,"_visitIRInstruction_",[anIRDynamicDictionary]);
  1223. }
  1224. }),
  1225. smalltalk.IRVisitor);
  1226. smalltalk.addMethod(
  1227. "_visitIRInstruction_",
  1228. smalltalk.method({
  1229. selector: "visitIRInstruction:",
  1230. fn: function (anIRInstruction) {
  1231. var self=this;
  1232. smalltalk.send(smalltalk.send(anIRInstruction,"_instructions",[]),"_do_",[(function(each){
  1233. return smalltalk.send(self,"_visit_",[each]);
  1234. })]);
  1235. return anIRInstruction;
  1236. }
  1237. }),
  1238. smalltalk.IRVisitor);
  1239. smalltalk.addMethod(
  1240. "_visitIRMethod_",
  1241. smalltalk.method({
  1242. selector: "visitIRMethod:",
  1243. fn: function (anIRMethod) {
  1244. var self=this;
  1245. return smalltalk.send(self,"_visitIRInstruction_",[anIRMethod]);
  1246. }
  1247. }),
  1248. smalltalk.IRVisitor);
  1249. smalltalk.addMethod(
  1250. "_visitIRNonLocalReturn_",
  1251. smalltalk.method({
  1252. selector: "visitIRNonLocalReturn:",
  1253. fn: function (anIRNonLocalReturn) {
  1254. var self=this;
  1255. return smalltalk.send(self,"_visitIRInstruction_",[anIRNonLocalReturn]);
  1256. }
  1257. }),
  1258. smalltalk.IRVisitor);
  1259. smalltalk.addMethod(
  1260. "_visitIRNonLocalReturnHandling_",
  1261. smalltalk.method({
  1262. selector: "visitIRNonLocalReturnHandling:",
  1263. fn: function (anIRNonLocalReturnHandling) {
  1264. var self=this;
  1265. return smalltalk.send(self,"_visitIRInstruction_",[anIRNonLocalReturnHandling]);
  1266. }
  1267. }),
  1268. smalltalk.IRVisitor);
  1269. smalltalk.addMethod(
  1270. "_visitIRReturn_",
  1271. smalltalk.method({
  1272. selector: "visitIRReturn:",
  1273. fn: function (anIRReturn) {
  1274. var self=this;
  1275. return smalltalk.send(self,"_visitIRInstruction_",[anIRReturn]);
  1276. }
  1277. }),
  1278. smalltalk.IRVisitor);
  1279. smalltalk.addMethod(
  1280. "_visitIRSend_",
  1281. smalltalk.method({
  1282. selector: "visitIRSend:",
  1283. fn: function (anIRSend) {
  1284. var self=this;
  1285. return smalltalk.send(self,"_visitIRInstruction_",[anIRSend]);
  1286. }
  1287. }),
  1288. smalltalk.IRVisitor);
  1289. smalltalk.addMethod(
  1290. "_visitIRSequence_",
  1291. smalltalk.method({
  1292. selector: "visitIRSequence:",
  1293. fn: function (anIRSequence) {
  1294. var self=this;
  1295. return smalltalk.send(self,"_visitIRInstruction_",[anIRSequence]);
  1296. }
  1297. }),
  1298. smalltalk.IRVisitor);
  1299. smalltalk.addMethod(
  1300. "_visitIRTempDeclaration_",
  1301. smalltalk.method({
  1302. selector: "visitIRTempDeclaration:",
  1303. fn: function (anIRTempDeclaration) {
  1304. var self=this;
  1305. return smalltalk.send(self,"_visitIRInstruction_",[anIRTempDeclaration]);
  1306. }
  1307. }),
  1308. smalltalk.IRVisitor);
  1309. smalltalk.addMethod(
  1310. "_visitIRValue_",
  1311. smalltalk.method({
  1312. selector: "visitIRValue:",
  1313. fn: function (anIRValue) {
  1314. var self=this;
  1315. return smalltalk.send(self,"_visitIRInstruction_",[anIRValue]);
  1316. }
  1317. }),
  1318. smalltalk.IRVisitor);
  1319. smalltalk.addMethod(
  1320. "_visitIRVariable_",
  1321. smalltalk.method({
  1322. selector: "visitIRVariable:",
  1323. fn: function (anIRVariable) {
  1324. var self=this;
  1325. return smalltalk.send(self,"_visitIRInstruction_",[anIRVariable]);
  1326. }
  1327. }),
  1328. smalltalk.IRVisitor);
  1329. smalltalk.addMethod(
  1330. "_visitIRVerbatim_",
  1331. smalltalk.method({
  1332. selector: "visitIRVerbatim:",
  1333. fn: function (anIRVerbatim) {
  1334. var self=this;
  1335. return smalltalk.send(self,"_visitIRInstruction_",[anIRVerbatim]);
  1336. }
  1337. }),
  1338. smalltalk.IRVisitor);
  1339. smalltalk.addClass('IRJSTranslator', smalltalk.IRVisitor, ['stream'], 'Compiler-IR');
  1340. smalltalk.addMethod(
  1341. "_contents",
  1342. smalltalk.method({
  1343. selector: "contents",
  1344. fn: function () {
  1345. var self=this;
  1346. return smalltalk.send(smalltalk.send(self,"_stream",[]),"_contents",[]);
  1347. }
  1348. }),
  1349. smalltalk.IRJSTranslator);
  1350. smalltalk.addMethod(
  1351. "_initialize",
  1352. smalltalk.method({
  1353. selector: "initialize",
  1354. fn: function () {
  1355. var self=this;
  1356. smalltalk.send(self,"_initialize",[],smalltalk.IRVisitor);
  1357. self["@stream"]=smalltalk.send((smalltalk.JSStream || JSStream),"_new",[]);
  1358. return self;}
  1359. }),
  1360. smalltalk.IRJSTranslator);
  1361. smalltalk.addMethod(
  1362. "_stream",
  1363. smalltalk.method({
  1364. selector: "stream",
  1365. fn: function () {
  1366. var self=this;
  1367. return self["@stream"];
  1368. }
  1369. }),
  1370. smalltalk.IRJSTranslator);
  1371. smalltalk.addMethod(
  1372. "_stream_",
  1373. smalltalk.method({
  1374. selector: "stream:",
  1375. fn: function (aStream) {
  1376. var self=this;
  1377. self["@stream"]=aStream;
  1378. return self;}
  1379. }),
  1380. smalltalk.IRJSTranslator);
  1381. smalltalk.addMethod(
  1382. "_visitIRAssignment_",
  1383. smalltalk.method({
  1384. selector: "visitIRAssignment:",
  1385. fn: function (anIRAssignment) {
  1386. var self=this;
  1387. smalltalk.send(self,"_visit_",[smalltalk.send(smalltalk.send(anIRAssignment,"_instructions",[]),"_first",[])]);
  1388. smalltalk.send(smalltalk.send(self,"_stream",[]),"_nextPutAssignment",[]);
  1389. smalltalk.send(self,"_visit_",[smalltalk.send(smalltalk.send(anIRAssignment,"_instructions",[]),"_last",[])]);
  1390. return self;}
  1391. }),
  1392. smalltalk.IRJSTranslator);
  1393. smalltalk.addMethod(
  1394. "_visitIRClosure_",
  1395. smalltalk.method({
  1396. selector: "visitIRClosure:",
  1397. fn: function (anIRClosure) {
  1398. var self=this;
  1399. smalltalk.send(smalltalk.send(self,"_stream",[]),"_nextPutClosureWith_arguments_",[(function(){
  1400. return smalltalk.send(self,"_visitIRClosure_",[anIRClosure],smalltalk.IRVisitor);
  1401. }),smalltalk.send(anIRClosure,"_arguments",[])]);
  1402. return self;}
  1403. }),
  1404. smalltalk.IRJSTranslator);
  1405. smalltalk.addMethod(
  1406. "_visitIRDynamicArray_",
  1407. smalltalk.method({
  1408. selector: "visitIRDynamicArray:",
  1409. fn: function (anIRDynamicArray) {
  1410. var self=this;
  1411. smalltalk.send(smalltalk.send(self,"_stream",[]),"_nextPutAll_",["["]);
  1412. smalltalk.send(smalltalk.send(anIRDynamicArray,"_instructions",[]),"_do_separatedBy_",[(function(each){
  1413. return smalltalk.send(self,"_visit_",[each]);
  1414. }),(function(){
  1415. return smalltalk.send(smalltalk.send(self,"_stream",[]),"_nextPutAll_",[","]);
  1416. })]);
  1417. smalltalk.send(self["@stream"],"_nextPutAll_",["]"]);
  1418. return self;}
  1419. }),
  1420. smalltalk.IRJSTranslator);
  1421. smalltalk.addMethod(
  1422. "_visitIRDynamicDictionary_",
  1423. smalltalk.method({
  1424. selector: "visitIRDynamicDictionary:",
  1425. fn: function (anIRDynamicDictionary) {
  1426. var self=this;
  1427. smalltalk.send(smalltalk.send(self,"_stream",[]),"_nextPutAll_",["smalltalk.HashedCollection._fromPairs_(["]);
  1428. smalltalk.send(smalltalk.send(anIRDynamicDictionary,"_instructions",[]),"_do_separatedBy_",[(function(each){
  1429. return smalltalk.send(self,"_visit_",[each]);
  1430. }),(function(){
  1431. return smalltalk.send(smalltalk.send(self,"_stream",[]),"_nextPutAll_",[","]);
  1432. })]);
  1433. smalltalk.send(smalltalk.send(self,"_stream",[]),"_nextPutAll_",["])"]);
  1434. return self;}
  1435. }),
  1436. smalltalk.IRJSTranslator);
  1437. smalltalk.addMethod(
  1438. "_visitIRMethod_",
  1439. smalltalk.method({
  1440. selector: "visitIRMethod:",
  1441. fn: function (anIRMethod) {
  1442. var self=this;
  1443. smalltalk.send(smalltalk.send(self,"_stream",[]),"_nextPutMethodDeclaration_with_",[anIRMethod,(function(){
  1444. return smalltalk.send(smalltalk.send(self,"_stream",[]),"_nextPutFunctionWith_arguments_",[(function(){
  1445. if(smalltalk.assert(smalltalk.send(smalltalk.send(anIRMethod,"_internalVariables",[]),"_notEmpty",[]))){
  1446. smalltalk.send(smalltalk.send(self,"_stream",[]),"_nextPutVars_",[smalltalk.send(smalltalk.send(smalltalk.send(anIRMethod,"_internalVariables",[]),"_asArray",[]),"_collect_",[(function(each){
  1447. return smalltalk.send(smalltalk.send(each,"_variable",[]),"_alias",[]);
  1448. })])]);
  1449. };
  1450. return smalltalk.send(smalltalk.send(smalltalk.send(anIRMethod,"_scope",[]),"_hasNonLocalReturn",[]),"_ifTrue_ifFalse_",[(function(){
  1451. return smalltalk.send(smalltalk.send(self,"_stream",[]),"_nextPutNonLocalReturnHandlingWith_",[(function(){
  1452. return smalltalk.send(self,"_visitIRMethod_",[anIRMethod],smalltalk.IRVisitor);
  1453. })]);
  1454. }),(function(){
  1455. return smalltalk.send(self,"_visitIRMethod_",[anIRMethod],smalltalk.IRVisitor);
  1456. })]);
  1457. }),smalltalk.send(anIRMethod,"_arguments",[])]);
  1458. })]);
  1459. return self;}
  1460. }),
  1461. smalltalk.IRJSTranslator);
  1462. smalltalk.addMethod(
  1463. "_visitIRNonLocalReturn_",
  1464. smalltalk.method({
  1465. selector: "visitIRNonLocalReturn:",
  1466. fn: function (anIRNonLocalReturn) {
  1467. var self=this;
  1468. smalltalk.send(smalltalk.send(self,"_stream",[]),"_nextPutNonLocalReturnWith_",[(function(){
  1469. return smalltalk.send(self,"_visitIRNonLocalReturn_",[anIRNonLocalReturn],smalltalk.IRVisitor);
  1470. })]);
  1471. return self;}
  1472. }),
  1473. smalltalk.IRJSTranslator);
  1474. smalltalk.addMethod(
  1475. "_visitIRReturn_",
  1476. smalltalk.method({
  1477. selector: "visitIRReturn:",
  1478. fn: function (anIRReturn) {
  1479. var self=this;
  1480. smalltalk.send(smalltalk.send(self,"_stream",[]),"_nextPutReturnWith_",[(function(){
  1481. return smalltalk.send(self,"_visitIRReturn_",[anIRReturn],smalltalk.IRVisitor);
  1482. })]);
  1483. return self;}
  1484. }),
  1485. smalltalk.IRJSTranslator);
  1486. smalltalk.addMethod(
  1487. "_visitIRSend_",
  1488. smalltalk.method({
  1489. selector: "visitIRSend:",
  1490. fn: function (anIRSend) {
  1491. var self=this;
  1492. smalltalk.send(smalltalk.send(self,"_stream",[]),"_nextPutAll_",["smalltalk.send("]);
  1493. smalltalk.send(self,"_visit_",[smalltalk.send(smalltalk.send(anIRSend,"_instructions",[]),"_first",[])]);
  1494. smalltalk.send(smalltalk.send(self,"_stream",[]),"_nextPutAll_",[smalltalk.send(smalltalk.send(",\x22","__comma",[smalltalk.send(smalltalk.send(anIRSend,"_selector",[]),"_asSelector",[])]),"__comma",["\x22,["])]);
  1495. smalltalk.send(smalltalk.send(smalltalk.send(anIRSend,"_instructions",[]),"_allButFirst",[]),"_do_separatedBy_",[(function(each){
  1496. return smalltalk.send(self,"_visit_",[each]);
  1497. }),(function(){
  1498. return smalltalk.send(smalltalk.send(self,"_stream",[]),"_nextPutAll_",[","]);
  1499. })]);
  1500. smalltalk.send(smalltalk.send(self,"_stream",[]),"_nextPutAll_",["]"]);
  1501. smalltalk.send(smalltalk.send(anIRSend,"_classSend",[]),"_ifNotNil_",[(function(){
  1502. return smalltalk.send(smalltalk.send(self,"_stream",[]),"_nextPutAll_",[smalltalk.send(",","__comma",[smalltalk.send(smalltalk.send(anIRSend,"_classSend",[]),"_asJavascript",[])])]);
  1503. })]);
  1504. smalltalk.send(smalltalk.send(self,"_stream",[]),"_nextPutAll_",[")"]);
  1505. return self;}
  1506. }),
  1507. smalltalk.IRJSTranslator);
  1508. smalltalk.addMethod(
  1509. "_visitIRSequence_",
  1510. smalltalk.method({
  1511. selector: "visitIRSequence:",
  1512. fn: function (anIRSequence) {
  1513. var self=this;
  1514. smalltalk.send(smalltalk.send(self,"_stream",[]),"_nextPutSequenceWith_",[(function(){
  1515. return smalltalk.send(smalltalk.send(anIRSequence,"_instructions",[]),"_do_",[(function(each){
  1516. return smalltalk.send(smalltalk.send(self,"_stream",[]),"_nextPutStatementWith_",[smalltalk.send(self,"_visit_",[each])]);
  1517. })]);
  1518. })]);
  1519. return self;}
  1520. }),
  1521. smalltalk.IRJSTranslator);
  1522. smalltalk.addMethod(
  1523. "_visitIRTempDeclaration_",
  1524. smalltalk.method({
  1525. selector: "visitIRTempDeclaration:",
  1526. fn: function (anIRTempDeclaration) {
  1527. var self=this;
  1528. smalltalk.send(smalltalk.send(self,"_stream",[]),"_nextPutVar_",[smalltalk.send(smalltalk.send(anIRTempDeclaration,"_name",[]),"_asVariableName",[])]);
  1529. return self;}
  1530. }),
  1531. smalltalk.IRJSTranslator);
  1532. smalltalk.addMethod(
  1533. "_visitIRValue_",
  1534. smalltalk.method({
  1535. selector: "visitIRValue:",
  1536. fn: function (anIRValue) {
  1537. var self=this;
  1538. smalltalk.send(smalltalk.send(self,"_stream",[]),"_nextPutAll_",[smalltalk.send(smalltalk.send(anIRValue,"_value",[]),"_asJavascript",[])]);
  1539. return self;}
  1540. }),
  1541. smalltalk.IRJSTranslator);
  1542. smalltalk.addMethod(
  1543. "_visitIRVariable_",
  1544. smalltalk.method({
  1545. selector: "visitIRVariable:",
  1546. fn: function (anIRVariable) {
  1547. var self=this;
  1548. smalltalk.send(smalltalk.send(self,"_stream",[]),"_nextPutAll_",[smalltalk.send(smalltalk.send(anIRVariable,"_variable",[]),"_alias",[])]);
  1549. return self;}
  1550. }),
  1551. smalltalk.IRJSTranslator);
  1552. smalltalk.addMethod(
  1553. "_visitIRVerbatim_",
  1554. smalltalk.method({
  1555. selector: "visitIRVerbatim:",
  1556. fn: function (anIRVerbatim) {
  1557. var self=this;
  1558. smalltalk.send(smalltalk.send(self,"_stream",[]),"_nextPutStatementWith_",[(function(){
  1559. return smalltalk.send(smalltalk.send(self,"_stream",[]),"_nextPutAll_",[smalltalk.send(anIRVerbatim,"_source",[])]);
  1560. })]);
  1561. return self;}
  1562. }),
  1563. smalltalk.IRJSTranslator);
  1564. smalltalk.addClass('JSStream', smalltalk.Object, ['stream'], 'Compiler-IR');
  1565. smalltalk.addMethod(
  1566. "_contents",
  1567. smalltalk.method({
  1568. selector: "contents",
  1569. fn: function () {
  1570. var self=this;
  1571. return smalltalk.send(self["@stream"],"_contents",[]);
  1572. }
  1573. }),
  1574. smalltalk.JSStream);
  1575. smalltalk.addMethod(
  1576. "_initialize",
  1577. smalltalk.method({
  1578. selector: "initialize",
  1579. fn: function () {
  1580. var self=this;
  1581. smalltalk.send(self,"_initialize",[],smalltalk.Object);
  1582. self["@stream"]=smalltalk.send("","_writeStream",[]);
  1583. return self;}
  1584. }),
  1585. smalltalk.JSStream);
  1586. smalltalk.addMethod(
  1587. "_lf",
  1588. smalltalk.method({
  1589. selector: "lf",
  1590. fn: function () {
  1591. var self=this;
  1592. smalltalk.send(self["@stream"],"_lf",[]);
  1593. return self;}
  1594. }),
  1595. smalltalk.JSStream);
  1596. smalltalk.addMethod(
  1597. "_nextPut_",
  1598. smalltalk.method({
  1599. selector: "nextPut:",
  1600. fn: function (aString) {
  1601. var self=this;
  1602. smalltalk.send(self["@stream"],"_nextPut_",[aString]);
  1603. return self;}
  1604. }),
  1605. smalltalk.JSStream);
  1606. smalltalk.addMethod(
  1607. "_nextPutAll_",
  1608. smalltalk.method({
  1609. selector: "nextPutAll:",
  1610. fn: function (aString) {
  1611. var self=this;
  1612. smalltalk.send(self["@stream"],"_nextPutAll_",[aString]);
  1613. return self;}
  1614. }),
  1615. smalltalk.JSStream);
  1616. smalltalk.addMethod(
  1617. "_nextPutAssignment",
  1618. smalltalk.method({
  1619. selector: "nextPutAssignment",
  1620. fn: function () {
  1621. var self=this;
  1622. smalltalk.send(self["@stream"],"_nextPutAll_",["="]);
  1623. return self;}
  1624. }),
  1625. smalltalk.JSStream);
  1626. smalltalk.addMethod(
  1627. "_nextPutClosureWith_arguments_",
  1628. smalltalk.method({
  1629. selector: "nextPutClosureWith:arguments:",
  1630. fn: function (aBlock, anArray) {
  1631. var self=this;
  1632. var $1;
  1633. smalltalk.send(self["@stream"],"_nextPutAll_",["(function("]);
  1634. smalltalk.send(anArray,"_do_separatedBy_",[(function(each){
  1635. return smalltalk.send(self["@stream"],"_nextPutAll_",[smalltalk.send(each,"_asVariableName",[])]);
  1636. }),(function(){
  1637. return smalltalk.send(self["@stream"],"_nextPut_",[","]);
  1638. })]);
  1639. smalltalk.send(self["@stream"],"_nextPutAll_",["){"]);
  1640. $1=smalltalk.send(self["@stream"],"_lf",[]);
  1641. smalltalk.send(aBlock,"_value",[]);
  1642. smalltalk.send(self["@stream"],"_nextPutAll_",["})"]);
  1643. return self;}
  1644. }),
  1645. smalltalk.JSStream);
  1646. smalltalk.addMethod(
  1647. "_nextPutFunctionWith_arguments_",
  1648. smalltalk.method({
  1649. selector: "nextPutFunctionWith:arguments:",
  1650. fn: function (aBlock, anArray) {
  1651. var self=this;
  1652. var $1,$2;
  1653. smalltalk.send(self["@stream"],"_nextPutAll_",["fn: function("]);
  1654. smalltalk.send(anArray,"_do_separatedBy_",[(function(each){
  1655. return smalltalk.send(self["@stream"],"_nextPutAll_",[smalltalk.send(each,"_asVariableName",[])]);
  1656. }),(function(){
  1657. return smalltalk.send(self["@stream"],"_nextPut_",[","]);
  1658. })]);
  1659. smalltalk.send(self["@stream"],"_nextPutAll_",["){"]);
  1660. $1=smalltalk.send(self["@stream"],"_lf",[]);
  1661. smalltalk.send(self["@stream"],"_nextPutAll_",["var self=this;"]);
  1662. $2=smalltalk.send(self["@stream"],"_lf",[]);
  1663. smalltalk.send(aBlock,"_value",[]);
  1664. smalltalk.send(self["@stream"],"_nextPutAll_",["}"]);
  1665. return self;}
  1666. }),
  1667. smalltalk.JSStream);
  1668. smalltalk.addMethod(
  1669. "_nextPutIf_with_",
  1670. smalltalk.method({
  1671. selector: "nextPutIf:with:",
  1672. fn: function (aBlock, anotherBlock) {
  1673. var self=this;
  1674. var $1;
  1675. smalltalk.send(self["@stream"],"_nextPutAll_",["if("]);
  1676. smalltalk.send(aBlock,"_value",[]);
  1677. smalltalk.send(self["@stream"],"_nextPutAll_",["){"]);
  1678. $1=smalltalk.send(self["@stream"],"_lf",[]);
  1679. smalltalk.send(anotherBlock,"_value",[]);
  1680. smalltalk.send(self["@stream"],"_nextPutAll_",["}"]);
  1681. return self;}
  1682. }),
  1683. smalltalk.JSStream);
  1684. smalltalk.addMethod(
  1685. "_nextPutIfElse_with_with_",
  1686. smalltalk.method({
  1687. selector: "nextPutIfElse:with:with:",
  1688. fn: function (aBlock, ifBlock, elseBlock) {
  1689. var self=this;
  1690. var $1,$2;
  1691. smalltalk.send(self["@stream"],"_nextPutAll_",["if("]);
  1692. smalltalk.send(aBlock,"_value",[]);
  1693. smalltalk.send(self["@stream"],"_nextPutAll_",["){"]);
  1694. $1=smalltalk.send(self["@stream"],"_lf",[]);
  1695. smalltalk.send(ifBlock,"_value",[]);
  1696. smalltalk.send(self["@stream"],"_nextPutAll_",["} else {"]);
  1697. $2=smalltalk.send(self["@stream"],"_lf",[]);
  1698. smalltalk.send(elseBlock,"_value",[]);
  1699. smalltalk.send(self["@stream"],"_nextPutAll_",["}"]);
  1700. return self;}
  1701. }),
  1702. smalltalk.JSStream);
  1703. smalltalk.addMethod(
  1704. "_nextPutMethodDeclaration_with_",
  1705. smalltalk.method({
  1706. selector: "nextPutMethodDeclaration:with:",
  1707. fn: function (aMethod, aBlock) {
  1708. var self=this;
  1709. var $1,$2,$3;
  1710. smalltalk.send(self["@stream"],"_nextPutAll_",["smalltalk.method({"]);
  1711. smalltalk.send(self["@stream"],"_lf",[]);
  1712. smalltalk.send(self["@stream"],"_nextPutAll_",[smalltalk.send(smalltalk.send("selector: \x22","__comma",[smalltalk.send(aMethod,"_selector",[])]),"__comma",["\x22,"])]);
  1713. smalltalk.send(self["@stream"],"_lf",[]);
  1714. smalltalk.send(self["@stream"],"_nextPutAll_",[smalltalk.send(smalltalk.send("source: ","__comma",[smalltalk.send(smalltalk.send(aMethod,"_source",[]),"_asJavascript",[])]),"__comma",[","])]);
  1715. $1=smalltalk.send(self["@stream"],"_lf",[]);
  1716. smalltalk.send(aBlock,"_value",[]);
  1717. smalltalk.send(self["@stream"],"_nextPutAll_",[smalltalk.send(smalltalk.send(",","__comma",[smalltalk.send((smalltalk.String || String),"_lf",[])]),"__comma",["messageSends: "])]);
  1718. smalltalk.send(self["@stream"],"_nextPutAll_",[smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aMethod,"_messageSends",[]),"_asArray",[]),"_asJavascript",[]),"__comma",[","])]);
  1719. smalltalk.send(self["@stream"],"_lf",[]);
  1720. smalltalk.send(self["@stream"],"_nextPutAll_",[smalltalk.send(smalltalk.send("args: ","__comma",[smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aMethod,"_arguments",[]),"_collect_",[(function(each){
  1721. return smalltalk.send(each,"_value",[]);
  1722. })]),"_asArray",[]),"_asJavascript",[])]),"__comma",[","])]);
  1723. smalltalk.send(self["@stream"],"_lf",[]);
  1724. $2=smalltalk.send(self["@stream"],"_nextPutAll_",["referencedClasses: ["]);
  1725. smalltalk.send(smalltalk.send(aMethod,"_classReferences",[]),"_do_separatedBy_",[(function(each){
  1726. return smalltalk.send(self["@stream"],"_nextPutAll_",[smalltalk.send(each,"_asJavascript",[])]);
  1727. }),(function(){
  1728. return smalltalk.send(self["@stream"],"_nextPutAll_",[","]);
  1729. })]);
  1730. smalltalk.send(self["@stream"],"_nextPutAll_",["]"]);
  1731. $3=smalltalk.send(self["@stream"],"_nextPutAll_",["})"]);
  1732. return self;}
  1733. }),
  1734. smalltalk.JSStream);
  1735. smalltalk.addMethod(
  1736. "_nextPutNonLocalReturnHandlingWith_",
  1737. smalltalk.method({
  1738. selector: "nextPutNonLocalReturnHandlingWith:",
  1739. fn: function (aBlock) {
  1740. var self=this;
  1741. var $1,$2;
  1742. smalltalk.send(self["@stream"],"_nextPutAll_",["var $early={};"]);
  1743. smalltalk.send(self["@stream"],"_lf",[]);
  1744. smalltalk.send(self["@stream"],"_nextPutAll_",["try {"]);
  1745. $1=smalltalk.send(self["@stream"],"_lf",[]);
  1746. smalltalk.send(aBlock,"_value",[]);
  1747. smalltalk.send(self["@stream"],"_nextPutAll_",["}"]);
  1748. smalltalk.send(self["@stream"],"_lf",[]);
  1749. smalltalk.send(self["@stream"],"_nextPutAll_",["catch(e) {if(e===$early)return e[0]; throw e}"]);
  1750. $2=smalltalk.send(self["@stream"],"_lf",[]);
  1751. return self;}
  1752. }),
  1753. smalltalk.JSStream);
  1754. smalltalk.addMethod(
  1755. "_nextPutNonLocalReturnWith_",
  1756. smalltalk.method({
  1757. selector: "nextPutNonLocalReturnWith:",
  1758. fn: function (aBlock) {
  1759. var self=this;
  1760. smalltalk.send(self["@stream"],"_nextPutAll_",["throw $early=["]);
  1761. smalltalk.send(aBlock,"_value",[]);
  1762. smalltalk.send(self["@stream"],"_nextPutAll_",["]"]);
  1763. return self;}
  1764. }),
  1765. smalltalk.JSStream);
  1766. smalltalk.addMethod(
  1767. "_nextPutReturn",
  1768. smalltalk.method({
  1769. selector: "nextPutReturn",
  1770. fn: function () {
  1771. var self=this;
  1772. smalltalk.send(self["@stream"],"_nextPutAll_",["return "]);
  1773. return self;}
  1774. }),
  1775. smalltalk.JSStream);
  1776. smalltalk.addMethod(
  1777. "_nextPutReturnWith_",
  1778. smalltalk.method({
  1779. selector: "nextPutReturnWith:",
  1780. fn: function (aBlock) {
  1781. var self=this;
  1782. smalltalk.send(self,"_nextPutReturn",[]);
  1783. smalltalk.send(aBlock,"_value",[]);
  1784. return self;}
  1785. }),
  1786. smalltalk.JSStream);
  1787. smalltalk.addMethod(
  1788. "_nextPutSendTo_selector_arguments_",
  1789. smalltalk.method({
  1790. selector: "nextPutSendTo:selector:arguments:",
  1791. fn: function (receiver, selector, arguments) {
  1792. var self=this;
  1793. smalltalk.send(self["@stream"],"_nextPutAll_",["smalltalk.send("]);
  1794. smalltalk.send(receiver,"_emitOn_",[self]);
  1795. smalltalk.send(self["@stream"],"_nextPutAll_",[smalltalk.send(smalltalk.send(",\x22","__comma",[smalltalk.send(selector,"_asSelector",[])]),"__comma",["\x22,["])]);
  1796. smalltalk.send(arguments,"_do_separatedBy_",[(function(each){
  1797. return smalltalk.send(each,"_emitOn_",[self]);
  1798. }),(function(){
  1799. return smalltalk.send(self["@stream"],"_nextPutAll_",[","]);
  1800. })]);
  1801. smalltalk.send(self["@stream"],"_nextPutAll_",["])"]);
  1802. return self;}
  1803. }),
  1804. smalltalk.JSStream);
  1805. smalltalk.addMethod(
  1806. "_nextPutSequenceWith_",
  1807. smalltalk.method({
  1808. selector: "nextPutSequenceWith:",
  1809. fn: function (aBlock) {
  1810. var self=this;
  1811. smalltalk.send(aBlock,"_value",[]);
  1812. return self;}
  1813. }),
  1814. smalltalk.JSStream);
  1815. smalltalk.addMethod(
  1816. "_nextPutStatement_with_",
  1817. smalltalk.method({
  1818. selector: "nextPutStatement:with:",
  1819. fn: function (anInteger, aBlock) {
  1820. var self=this;
  1821. var $1,$2;
  1822. smalltalk.send(self["@stream"],"_nextPutAll_",[smalltalk.send(smalltalk.send("case ","__comma",[smalltalk.send(anInteger,"_asString",[])]),"__comma",[":"])]);
  1823. $1=smalltalk.send(self["@stream"],"_lf",[]);
  1824. smalltalk.send(self,"_nextPutStatementWith_",[aBlock]);
  1825. smalltalk.send(self["@stream"],"_nextPutAll_",[smalltalk.send(smalltalk.send("smalltalk.thisContext.pc=","__comma",[smalltalk.send(smalltalk.send(anInteger,"__plus",[(1)]),"_asString",[])]),"__comma",[";"])]);
  1826. $2=smalltalk.send(self["@stream"],"_lf",[]);
  1827. return self;}
  1828. }),
  1829. smalltalk.JSStream);
  1830. smalltalk.addMethod(
  1831. "_nextPutStatementWith_",
  1832. smalltalk.method({
  1833. selector: "nextPutStatementWith:",
  1834. fn: function (aBlock) {
  1835. var self=this;
  1836. var $1;
  1837. smalltalk.send(aBlock,"_value",[]);
  1838. smalltalk.send(self["@stream"],"_nextPutAll_",[";"]);
  1839. $1=smalltalk.send(self["@stream"],"_lf",[]);
  1840. return self;}
  1841. }),
  1842. smalltalk.JSStream);
  1843. smalltalk.addMethod(
  1844. "_nextPutVar_",
  1845. smalltalk.method({
  1846. selector: "nextPutVar:",
  1847. fn: function (aString) {
  1848. var self=this;
  1849. var $1;
  1850. smalltalk.send(self["@stream"],"_nextPutAll_",[smalltalk.send(smalltalk.send("var ","__comma",[aString]),"__comma",[";"])]);
  1851. $1=smalltalk.send(self["@stream"],"_lf",[]);
  1852. return self;}
  1853. }),
  1854. smalltalk.JSStream);
  1855. smalltalk.addMethod(
  1856. "_nextPutVars_",
  1857. smalltalk.method({
  1858. selector: "nextPutVars:",
  1859. fn: function (aCollection) {
  1860. var self=this;
  1861. var $1;
  1862. smalltalk.send(self["@stream"],"_nextPutAll_",["var "]);
  1863. smalltalk.send(aCollection,"_do_separatedBy_",[(function(each){
  1864. return smalltalk.send(self["@stream"],"_nextPutAll_",[each]);
  1865. }),(function(){
  1866. return smalltalk.send(self["@stream"],"_nextPutAll_",[","]);
  1867. })]);
  1868. smalltalk.send(self["@stream"],"_nextPutAll_",[";"]);
  1869. $1=smalltalk.send(self["@stream"],"_lf",[]);
  1870. return self;}
  1871. }),
  1872. smalltalk.JSStream);
  1873. smalltalk.addMethod(
  1874. "_appendToInstruction_",
  1875. smalltalk.method({
  1876. selector: "appendToInstruction:",
  1877. fn: function (anIRInstruction) {
  1878. var self=this;
  1879. smalltalk.send(anIRInstruction,"_appendBlock_",[self]);
  1880. return self;}
  1881. }),
  1882. smalltalk.BlockClosure);
  1883. smalltalk.addMethod(
  1884. "_asVariableName",
  1885. smalltalk.method({
  1886. selector: "asVariableName",
  1887. fn: function () {
  1888. var self=this;
  1889. return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk),"_current",[]),"_reservedWords",[]),"_includes_",[self]),"_ifTrue_ifFalse_",[(function(){
  1890. return smalltalk.send(self,"__comma",["_"]);
  1891. }),(function(){
  1892. return self;
  1893. })]);
  1894. }
  1895. }),
  1896. smalltalk.String);