johnson 2.0.0.pre1 → 2.0.0.pre2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (311) hide show
  1. data/CHANGELOG.rdoc +12 -0
  2. data/Manifest.txt +4 -285
  3. data/Rakefile +13 -20
  4. data/ext/tracemonkey/global.cc +4 -1
  5. data/ext/tracemonkey/js.cc +30 -33
  6. data/ext/tracemonkey/runtime.cc +96 -6
  7. data/ext/tracemonkey/split_global.cc +0 -5
  8. data/ext/tracemonkey/tracemonkey.h +2 -2
  9. data/lib/johnson.rb +2 -2
  10. data/lib/johnson/runtime.rb +25 -15
  11. data/lib/johnson/tracemonkey/runtime.rb +6 -3
  12. data/vendor/tracemonkey/config/system-headers +1 -3
  13. data/vendor/tracemonkey/jscntxt.h +5 -2
  14. data/vendor/tracemonkey/jsdbgapi.cpp +9 -1
  15. data/vendor/tracemonkey/jsdbgapi.h +4 -0
  16. data/vendor/tracemonkey/tests/ecma/NativeObjects/browser.js +0 -0
  17. data/vendor/tracemonkey/tests/ecma/NativeObjects/jstests.list +0 -0
  18. data/vendor/tracemonkey/tests/ecma_3_1/Object/jstests.list +1 -1
  19. data/vendor/tracemonkey/tests/js1_3/misc/browser.js +0 -0
  20. data/vendor/tracemonkey/tests/js1_3/misc/jstests.list +0 -0
  21. data/vendor/tracemonkey/tests/js1_5/Regress/jstests.list +4 -4
  22. data/vendor/tracemonkey/tests/js1_5/Scope/jstests.list +1 -1
  23. data/vendor/tracemonkey/tests/js1_5/decompilation/jstests.list +2 -2
  24. data/vendor/tracemonkey/tests/js1_7/decompilation/jstests.list +1 -1
  25. data/vendor/tracemonkey/tests/shell.js +2 -1
  26. metadata +51 -309
  27. data/ext/spidermonkey/context.c +0 -116
  28. data/ext/spidermonkey/context.h +0 -19
  29. data/ext/spidermonkey/conversions.c +0 -361
  30. data/ext/spidermonkey/conversions.h +0 -31
  31. data/ext/spidermonkey/debugger.c +0 -234
  32. data/ext/spidermonkey/debugger.h +0 -10
  33. data/ext/spidermonkey/extconf.rb +0 -32
  34. data/ext/spidermonkey/extensions.c +0 -37
  35. data/ext/spidermonkey/extensions.h +0 -12
  36. data/ext/spidermonkey/global.c +0 -40
  37. data/ext/spidermonkey/global.h +0 -11
  38. data/ext/spidermonkey/idhash.c +0 -16
  39. data/ext/spidermonkey/idhash.h +0 -8
  40. data/ext/spidermonkey/immutable_node.c +0 -1153
  41. data/ext/spidermonkey/immutable_node.c.erb +0 -523
  42. data/ext/spidermonkey/immutable_node.h +0 -22
  43. data/ext/spidermonkey/jroot.h +0 -197
  44. data/ext/spidermonkey/js_land_proxy.c +0 -620
  45. data/ext/spidermonkey/js_land_proxy.h +0 -20
  46. data/ext/spidermonkey/ruby_land_proxy.c +0 -618
  47. data/ext/spidermonkey/ruby_land_proxy.h +0 -38
  48. data/ext/spidermonkey/runtime.c +0 -396
  49. data/ext/spidermonkey/runtime.h +0 -27
  50. data/ext/spidermonkey/spidermonkey.c +0 -22
  51. data/ext/spidermonkey/spidermonkey.h +0 -29
  52. data/lib/johnson/spidermonkey.rb +0 -12
  53. data/lib/johnson/spidermonkey/context.rb +0 -10
  54. data/lib/johnson/spidermonkey/debugger.rb +0 -67
  55. data/lib/johnson/spidermonkey/immutable_node.rb +0 -282
  56. data/lib/johnson/spidermonkey/js_land_proxy.rb +0 -64
  57. data/lib/johnson/spidermonkey/mutable_tree_visitor.rb +0 -242
  58. data/lib/johnson/spidermonkey/ruby_land_proxy.rb +0 -17
  59. data/lib/johnson/spidermonkey/runtime.rb +0 -74
  60. data/test/johnson/spidermonkey/context_test.rb +0 -21
  61. data/test/johnson/spidermonkey/immutable_node_test.rb +0 -34
  62. data/test/johnson/spidermonkey/js_land_proxy_test.rb +0 -273
  63. data/test/johnson/spidermonkey/ruby_land_proxy_test.rb +0 -274
  64. data/test/johnson/spidermonkey/runtime_test.rb +0 -41
  65. data/vendor/spidermonkey/.cvsignore +0 -9
  66. data/vendor/spidermonkey/Makefile.in +0 -449
  67. data/vendor/spidermonkey/Makefile.ref +0 -365
  68. data/vendor/spidermonkey/README.html +0 -820
  69. data/vendor/spidermonkey/SpiderMonkey.rsp +0 -12
  70. data/vendor/spidermonkey/Y.js +0 -19
  71. data/vendor/spidermonkey/build.mk +0 -43
  72. data/vendor/spidermonkey/config.mk +0 -192
  73. data/vendor/spidermonkey/config/AIX4.1.mk +0 -65
  74. data/vendor/spidermonkey/config/AIX4.2.mk +0 -64
  75. data/vendor/spidermonkey/config/AIX4.3.mk +0 -65
  76. data/vendor/spidermonkey/config/Darwin.mk +0 -83
  77. data/vendor/spidermonkey/config/Darwin1.3.mk +0 -81
  78. data/vendor/spidermonkey/config/Darwin1.4.mk +0 -41
  79. data/vendor/spidermonkey/config/Darwin5.2.mk +0 -81
  80. data/vendor/spidermonkey/config/Darwin5.3.mk +0 -81
  81. data/vendor/spidermonkey/config/HP-UXB.10.10.mk +0 -77
  82. data/vendor/spidermonkey/config/HP-UXB.10.20.mk +0 -77
  83. data/vendor/spidermonkey/config/HP-UXB.11.00.mk +0 -80
  84. data/vendor/spidermonkey/config/IRIX.mk +0 -87
  85. data/vendor/spidermonkey/config/IRIX5.3.mk +0 -44
  86. data/vendor/spidermonkey/config/IRIX6.1.mk +0 -44
  87. data/vendor/spidermonkey/config/IRIX6.2.mk +0 -44
  88. data/vendor/spidermonkey/config/IRIX6.3.mk +0 -44
  89. data/vendor/spidermonkey/config/IRIX6.5.mk +0 -44
  90. data/vendor/spidermonkey/config/Linux_All.mk +0 -103
  91. data/vendor/spidermonkey/config/Mac_OS10.0.mk +0 -82
  92. data/vendor/spidermonkey/config/OSF1V4.0.mk +0 -72
  93. data/vendor/spidermonkey/config/OSF1V5.0.mk +0 -69
  94. data/vendor/spidermonkey/config/SunOS4.1.4.mk +0 -101
  95. data/vendor/spidermonkey/config/SunOS5.10.mk +0 -50
  96. data/vendor/spidermonkey/config/SunOS5.3.mk +0 -91
  97. data/vendor/spidermonkey/config/SunOS5.4.mk +0 -92
  98. data/vendor/spidermonkey/config/SunOS5.5.1.mk +0 -44
  99. data/vendor/spidermonkey/config/SunOS5.5.mk +0 -87
  100. data/vendor/spidermonkey/config/SunOS5.6.mk +0 -89
  101. data/vendor/spidermonkey/config/SunOS5.7.mk +0 -44
  102. data/vendor/spidermonkey/config/SunOS5.8.mk +0 -44
  103. data/vendor/spidermonkey/config/SunOS5.9.mk +0 -44
  104. data/vendor/spidermonkey/config/WINNT4.0.mk +0 -117
  105. data/vendor/spidermonkey/config/WINNT5.0.mk +0 -117
  106. data/vendor/spidermonkey/config/WINNT5.1.mk +0 -117
  107. data/vendor/spidermonkey/config/WINNT5.2.mk +0 -117
  108. data/vendor/spidermonkey/config/WINNT6.0.mk +0 -117
  109. data/vendor/spidermonkey/config/dgux.mk +0 -64
  110. data/vendor/spidermonkey/editline/Makefile.ref +0 -144
  111. data/vendor/spidermonkey/editline/README +0 -83
  112. data/vendor/spidermonkey/editline/editline.3 +0 -175
  113. data/vendor/spidermonkey/editline/editline.c +0 -1369
  114. data/vendor/spidermonkey/editline/editline.h +0 -135
  115. data/vendor/spidermonkey/editline/sysunix.c +0 -182
  116. data/vendor/spidermonkey/editline/unix.h +0 -82
  117. data/vendor/spidermonkey/fdlibm/.cvsignore +0 -7
  118. data/vendor/spidermonkey/fdlibm/Makefile.in +0 -127
  119. data/vendor/spidermonkey/fdlibm/Makefile.ref +0 -192
  120. data/vendor/spidermonkey/fdlibm/e_acos.c +0 -147
  121. data/vendor/spidermonkey/fdlibm/e_acosh.c +0 -105
  122. data/vendor/spidermonkey/fdlibm/e_asin.c +0 -156
  123. data/vendor/spidermonkey/fdlibm/e_atan2.c +0 -165
  124. data/vendor/spidermonkey/fdlibm/e_atanh.c +0 -110
  125. data/vendor/spidermonkey/fdlibm/e_cosh.c +0 -133
  126. data/vendor/spidermonkey/fdlibm/e_exp.c +0 -202
  127. data/vendor/spidermonkey/fdlibm/e_fmod.c +0 -184
  128. data/vendor/spidermonkey/fdlibm/e_gamma.c +0 -71
  129. data/vendor/spidermonkey/fdlibm/e_gamma_r.c +0 -70
  130. data/vendor/spidermonkey/fdlibm/e_hypot.c +0 -173
  131. data/vendor/spidermonkey/fdlibm/e_j0.c +0 -524
  132. data/vendor/spidermonkey/fdlibm/e_j1.c +0 -523
  133. data/vendor/spidermonkey/fdlibm/e_jn.c +0 -315
  134. data/vendor/spidermonkey/fdlibm/e_lgamma.c +0 -71
  135. data/vendor/spidermonkey/fdlibm/e_lgamma_r.c +0 -347
  136. data/vendor/spidermonkey/fdlibm/e_log.c +0 -184
  137. data/vendor/spidermonkey/fdlibm/e_log10.c +0 -134
  138. data/vendor/spidermonkey/fdlibm/e_pow.c +0 -386
  139. data/vendor/spidermonkey/fdlibm/e_rem_pio2.c +0 -222
  140. data/vendor/spidermonkey/fdlibm/e_remainder.c +0 -120
  141. data/vendor/spidermonkey/fdlibm/e_scalb.c +0 -89
  142. data/vendor/spidermonkey/fdlibm/e_sinh.c +0 -122
  143. data/vendor/spidermonkey/fdlibm/e_sqrt.c +0 -497
  144. data/vendor/spidermonkey/fdlibm/fdlibm.h +0 -273
  145. data/vendor/spidermonkey/fdlibm/fdlibm.mak +0 -1453
  146. data/vendor/spidermonkey/fdlibm/fdlibm.mdp +0 -0
  147. data/vendor/spidermonkey/fdlibm/k_cos.c +0 -135
  148. data/vendor/spidermonkey/fdlibm/k_rem_pio2.c +0 -354
  149. data/vendor/spidermonkey/fdlibm/k_sin.c +0 -114
  150. data/vendor/spidermonkey/fdlibm/k_standard.c +0 -785
  151. data/vendor/spidermonkey/fdlibm/k_tan.c +0 -170
  152. data/vendor/spidermonkey/fdlibm/s_asinh.c +0 -101
  153. data/vendor/spidermonkey/fdlibm/s_atan.c +0 -175
  154. data/vendor/spidermonkey/fdlibm/s_cbrt.c +0 -133
  155. data/vendor/spidermonkey/fdlibm/s_ceil.c +0 -120
  156. data/vendor/spidermonkey/fdlibm/s_copysign.c +0 -72
  157. data/vendor/spidermonkey/fdlibm/s_cos.c +0 -118
  158. data/vendor/spidermonkey/fdlibm/s_erf.c +0 -356
  159. data/vendor/spidermonkey/fdlibm/s_expm1.c +0 -267
  160. data/vendor/spidermonkey/fdlibm/s_fabs.c +0 -70
  161. data/vendor/spidermonkey/fdlibm/s_finite.c +0 -71
  162. data/vendor/spidermonkey/fdlibm/s_floor.c +0 -121
  163. data/vendor/spidermonkey/fdlibm/s_frexp.c +0 -99
  164. data/vendor/spidermonkey/fdlibm/s_ilogb.c +0 -85
  165. data/vendor/spidermonkey/fdlibm/s_isnan.c +0 -74
  166. data/vendor/spidermonkey/fdlibm/s_ldexp.c +0 -66
  167. data/vendor/spidermonkey/fdlibm/s_lib_version.c +0 -73
  168. data/vendor/spidermonkey/fdlibm/s_log1p.c +0 -211
  169. data/vendor/spidermonkey/fdlibm/s_logb.c +0 -79
  170. data/vendor/spidermonkey/fdlibm/s_matherr.c +0 -64
  171. data/vendor/spidermonkey/fdlibm/s_modf.c +0 -132
  172. data/vendor/spidermonkey/fdlibm/s_nextafter.c +0 -124
  173. data/vendor/spidermonkey/fdlibm/s_rint.c +0 -131
  174. data/vendor/spidermonkey/fdlibm/s_scalbn.c +0 -107
  175. data/vendor/spidermonkey/fdlibm/s_signgam.c +0 -40
  176. data/vendor/spidermonkey/fdlibm/s_significand.c +0 -68
  177. data/vendor/spidermonkey/fdlibm/s_sin.c +0 -118
  178. data/vendor/spidermonkey/fdlibm/s_tan.c +0 -112
  179. data/vendor/spidermonkey/fdlibm/s_tanh.c +0 -122
  180. data/vendor/spidermonkey/fdlibm/w_acos.c +0 -78
  181. data/vendor/spidermonkey/fdlibm/w_acosh.c +0 -78
  182. data/vendor/spidermonkey/fdlibm/w_asin.c +0 -80
  183. data/vendor/spidermonkey/fdlibm/w_atan2.c +0 -79
  184. data/vendor/spidermonkey/fdlibm/w_atanh.c +0 -81
  185. data/vendor/spidermonkey/fdlibm/w_cosh.c +0 -77
  186. data/vendor/spidermonkey/fdlibm/w_exp.c +0 -88
  187. data/vendor/spidermonkey/fdlibm/w_fmod.c +0 -78
  188. data/vendor/spidermonkey/fdlibm/w_gamma.c +0 -85
  189. data/vendor/spidermonkey/fdlibm/w_gamma_r.c +0 -81
  190. data/vendor/spidermonkey/fdlibm/w_hypot.c +0 -78
  191. data/vendor/spidermonkey/fdlibm/w_j0.c +0 -105
  192. data/vendor/spidermonkey/fdlibm/w_j1.c +0 -106
  193. data/vendor/spidermonkey/fdlibm/w_jn.c +0 -128
  194. data/vendor/spidermonkey/fdlibm/w_lgamma.c +0 -85
  195. data/vendor/spidermonkey/fdlibm/w_lgamma_r.c +0 -81
  196. data/vendor/spidermonkey/fdlibm/w_log.c +0 -78
  197. data/vendor/spidermonkey/fdlibm/w_log10.c +0 -81
  198. data/vendor/spidermonkey/fdlibm/w_pow.c +0 -99
  199. data/vendor/spidermonkey/fdlibm/w_remainder.c +0 -77
  200. data/vendor/spidermonkey/fdlibm/w_scalb.c +0 -95
  201. data/vendor/spidermonkey/fdlibm/w_sinh.c +0 -77
  202. data/vendor/spidermonkey/fdlibm/w_sqrt.c +0 -77
  203. data/vendor/spidermonkey/javascript-trace.d +0 -73
  204. data/vendor/spidermonkey/js.c +0 -3951
  205. data/vendor/spidermonkey/js.mdp +0 -0
  206. data/vendor/spidermonkey/js.msg +0 -308
  207. data/vendor/spidermonkey/js.pkg +0 -2
  208. data/vendor/spidermonkey/js3240.rc +0 -79
  209. data/vendor/spidermonkey/jsOS240.def +0 -654
  210. data/vendor/spidermonkey/jsapi.c +0 -5836
  211. data/vendor/spidermonkey/jsapi.h +0 -2624
  212. data/vendor/spidermonkey/jsarena.c +0 -450
  213. data/vendor/spidermonkey/jsarena.h +0 -318
  214. data/vendor/spidermonkey/jsarray.c +0 -2996
  215. data/vendor/spidermonkey/jsarray.h +0 -127
  216. data/vendor/spidermonkey/jsatom.c +0 -1045
  217. data/vendor/spidermonkey/jsatom.h +0 -442
  218. data/vendor/spidermonkey/jsbit.h +0 -253
  219. data/vendor/spidermonkey/jsbool.c +0 -176
  220. data/vendor/spidermonkey/jsbool.h +0 -73
  221. data/vendor/spidermonkey/jsclist.h +0 -139
  222. data/vendor/spidermonkey/jscntxt.c +0 -1348
  223. data/vendor/spidermonkey/jscntxt.h +0 -1120
  224. data/vendor/spidermonkey/jscompat.h +0 -57
  225. data/vendor/spidermonkey/jsconfig.h +0 -248
  226. data/vendor/spidermonkey/jsconfig.mk +0 -181
  227. data/vendor/spidermonkey/jscpucfg.c +0 -396
  228. data/vendor/spidermonkey/jscpucfg.h +0 -212
  229. data/vendor/spidermonkey/jsdate.c +0 -2390
  230. data/vendor/spidermonkey/jsdate.h +0 -124
  231. data/vendor/spidermonkey/jsdbgapi.c +0 -1802
  232. data/vendor/spidermonkey/jsdbgapi.h +0 -464
  233. data/vendor/spidermonkey/jsdhash.c +0 -868
  234. data/vendor/spidermonkey/jsdhash.h +0 -592
  235. data/vendor/spidermonkey/jsdtoa.c +0 -3167
  236. data/vendor/spidermonkey/jsdtoa.h +0 -130
  237. data/vendor/spidermonkey/jsdtracef.c +0 -317
  238. data/vendor/spidermonkey/jsdtracef.h +0 -77
  239. data/vendor/spidermonkey/jsemit.c +0 -6909
  240. data/vendor/spidermonkey/jsemit.h +0 -741
  241. data/vendor/spidermonkey/jsexn.c +0 -1371
  242. data/vendor/spidermonkey/jsexn.h +0 -96
  243. data/vendor/spidermonkey/jsfile.c +0 -2736
  244. data/vendor/spidermonkey/jsfile.h +0 -56
  245. data/vendor/spidermonkey/jsfile.msg +0 -90
  246. data/vendor/spidermonkey/jsfun.c +0 -2634
  247. data/vendor/spidermonkey/jsfun.h +0 -254
  248. data/vendor/spidermonkey/jsgc.c +0 -3562
  249. data/vendor/spidermonkey/jsgc.h +0 -403
  250. data/vendor/spidermonkey/jshash.c +0 -476
  251. data/vendor/spidermonkey/jshash.h +0 -151
  252. data/vendor/spidermonkey/jsify.pl +0 -485
  253. data/vendor/spidermonkey/jsinterp.c +0 -7007
  254. data/vendor/spidermonkey/jsinterp.h +0 -525
  255. data/vendor/spidermonkey/jsinvoke.c +0 -43
  256. data/vendor/spidermonkey/jsiter.c +0 -1067
  257. data/vendor/spidermonkey/jsiter.h +0 -122
  258. data/vendor/spidermonkey/jskeyword.tbl +0 -124
  259. data/vendor/spidermonkey/jskwgen.c +0 -460
  260. data/vendor/spidermonkey/jslibmath.h +0 -266
  261. data/vendor/spidermonkey/jslock.c +0 -1309
  262. data/vendor/spidermonkey/jslock.h +0 -313
  263. data/vendor/spidermonkey/jslocko.asm +0 -60
  264. data/vendor/spidermonkey/jslog2.c +0 -94
  265. data/vendor/spidermonkey/jslong.c +0 -264
  266. data/vendor/spidermonkey/jslong.h +0 -412
  267. data/vendor/spidermonkey/jsmath.c +0 -567
  268. data/vendor/spidermonkey/jsmath.h +0 -57
  269. data/vendor/spidermonkey/jsnum.c +0 -1239
  270. data/vendor/spidermonkey/jsnum.h +0 -283
  271. data/vendor/spidermonkey/jsobj.c +0 -5282
  272. data/vendor/spidermonkey/jsobj.h +0 -709
  273. data/vendor/spidermonkey/jsopcode.c +0 -5245
  274. data/vendor/spidermonkey/jsopcode.h +0 -394
  275. data/vendor/spidermonkey/jsopcode.tbl +0 -523
  276. data/vendor/spidermonkey/jsotypes.h +0 -202
  277. data/vendor/spidermonkey/jsparse.c +0 -6704
  278. data/vendor/spidermonkey/jsparse.h +0 -511
  279. data/vendor/spidermonkey/jsprf.c +0 -1264
  280. data/vendor/spidermonkey/jsprf.h +0 -150
  281. data/vendor/spidermonkey/jsproto.tbl +0 -128
  282. data/vendor/spidermonkey/jsprvtd.h +0 -267
  283. data/vendor/spidermonkey/jspubtd.h +0 -744
  284. data/vendor/spidermonkey/jsregexp.c +0 -4364
  285. data/vendor/spidermonkey/jsregexp.h +0 -183
  286. data/vendor/spidermonkey/jsreops.tbl +0 -145
  287. data/vendor/spidermonkey/jsscan.c +0 -2012
  288. data/vendor/spidermonkey/jsscan.h +0 -387
  289. data/vendor/spidermonkey/jsscope.c +0 -1957
  290. data/vendor/spidermonkey/jsscope.h +0 -418
  291. data/vendor/spidermonkey/jsscript.c +0 -1832
  292. data/vendor/spidermonkey/jsscript.h +0 -287
  293. data/vendor/spidermonkey/jsshell.msg +0 -50
  294. data/vendor/spidermonkey/jsstddef.h +0 -83
  295. data/vendor/spidermonkey/jsstr.c +0 -5005
  296. data/vendor/spidermonkey/jsstr.h +0 -641
  297. data/vendor/spidermonkey/jstypes.h +0 -475
  298. data/vendor/spidermonkey/jsutil.c +0 -345
  299. data/vendor/spidermonkey/jsutil.h +0 -157
  300. data/vendor/spidermonkey/jsxdrapi.c +0 -800
  301. data/vendor/spidermonkey/jsxdrapi.h +0 -218
  302. data/vendor/spidermonkey/jsxml.c +0 -8476
  303. data/vendor/spidermonkey/jsxml.h +0 -349
  304. data/vendor/spidermonkey/lock_SunOS.s +0 -119
  305. data/vendor/spidermonkey/perfect.js +0 -39
  306. data/vendor/spidermonkey/plify_jsdhash.sed +0 -36
  307. data/vendor/spidermonkey/prmjtime.c +0 -846
  308. data/vendor/spidermonkey/prmjtime.h +0 -103
  309. data/vendor/spidermonkey/resource.h +0 -15
  310. data/vendor/spidermonkey/rules.mk +0 -197
  311. data/vendor/spidermonkey/win32.order +0 -384
@@ -1,242 +0,0 @@
1
- module Johnson
2
- module SpiderMonkey
3
- class MutableTreeVisitor
4
- include Johnson::Nodes
5
-
6
- def visit_For(ro_node)
7
- For.new( ro_node.line,
8
- ro_node.index,
9
- ro_node.pn_left.pn_kid1 && ro_node.pn_left.pn_kid1.accept(self),
10
- ro_node.pn_left.pn_kid2 && ro_node.pn_left.pn_kid2.accept(self),
11
- ro_node.pn_left.pn_kid3 && ro_node.pn_left.pn_kid3.accept(self),
12
- ro_node.pn_right.accept(self)
13
- )
14
- end
15
-
16
- def visit_Name(ro_node)
17
- Name.new(ro_node.line, ro_node.index, ro_node.name)
18
- end
19
-
20
- def visit_Number(ro_node)
21
- Number.new(ro_node.line, ro_node.index, ro_node.pn_dval)
22
- end
23
-
24
- def visit_String(ro_node)
25
- Nodes::String.new( ro_node.line,
26
- ro_node.index,
27
- ro_node.name )
28
- end
29
-
30
- def visit_Regexp(ro_node)
31
- Regexp.new( ro_node.line,
32
- ro_node.index,
33
- ro_node.regexp )
34
- end
35
-
36
- def visit_Function(ro_node)
37
- Function.new( ro_node.line,
38
- ro_node.index,
39
- ro_node.function_name,
40
- ro_node.function_args,
41
- ro_node.function_body.accept(self) )
42
- end
43
-
44
- def visit_LexicalScope(ro_node)
45
- LexicalScope.new(
46
- ro_node.line,
47
- ro_node.index,
48
- Name.new(ro_node.line, ro_node.index, "unnamed"), # lexical scope nodes don't hold a name
49
- ro_node.pn_expr.accept(self))
50
- end
51
-
52
- %w{ Label AssignExpr DotAccessor }.each do |type|
53
- define_method(:"visit_#{type}") do |ro_node|
54
- Nodes.const_get(type).new(
55
- ro_node.line,
56
- ro_node.index,
57
- Name.new(ro_node.line, ro_node.index, ro_node.name),
58
- ro_node.pn_expr.accept(self)
59
- )
60
- end
61
- end
62
-
63
- %w{
64
- SourceElements
65
- VarStatement
66
- LetStatement
67
- Comma
68
- ObjectLiteral
69
- ArrayLiteral
70
- New
71
- FunctionCall
72
- Import
73
- Export
74
- }.each do |list_op|
75
- define_method(:"visit_#{list_op}") do |ro_node|
76
- Nodes.const_get(list_op).new( ro_node.line,
77
- ro_node.index,
78
- ro_node.children.map { |c|
79
- c.accept(self)
80
- }.compact)
81
- end
82
- end
83
-
84
- {
85
- 'Null' => nil,
86
- 'True' => true,
87
- 'False' => false,
88
- 'This' => 'this',
89
- 'Continue' => 'continue',
90
- 'Break' => 'break',
91
- }.each do |type,val|
92
- define_method(:"visit_#{type}") do |ro_node|
93
- Nodes.const_get(type).new(
94
- ro_node.line,
95
- ro_node.index,
96
- val
97
- )
98
- end
99
- end
100
-
101
- def visit_Try(ro_node)
102
- Try.new(
103
- ro_node.line,
104
- ro_node.index,
105
- ro_node.pn_kid1 && ro_node.pn_kid1.accept(self),
106
- if ro_node.pn_kid2
107
- case ro_node.pn_kid2.pn_type
108
- when :tok_reserved
109
- ro_node.pn_kid2.children.map { |x| x.pn_expr.accept(self) }
110
- else
111
- raise "HALP some other catch #{ro_node.line}, #{ro_node.index}"
112
- end
113
- else
114
- nil
115
- end,
116
- ro_node.pn_kid3 && ro_node.pn_kid3.accept(self)
117
- )
118
- end
119
-
120
- %w{
121
- Ternary
122
- If
123
- Catch
124
- }.each do |node|
125
- define_method(:"visit_#{node}") do |ro_node|
126
- Nodes.const_get(node).new(
127
- ro_node.line,
128
- ro_node.index,
129
- ro_node.pn_kid1 && ro_node.pn_kid1.accept(self),
130
- ro_node.pn_kid2 && ro_node.pn_kid2.accept(self),
131
- ro_node.pn_kid3 && ro_node.pn_kid3.accept(self)
132
- )
133
- end
134
- end
135
-
136
- %w{
137
- BitwiseNot
138
- Delete
139
- Not
140
- Parenthesis
141
- PostfixDecrement
142
- PostfixIncrement
143
- PrefixDecrement
144
- PrefixIncrement
145
- Return
146
- Throw
147
- Typeof
148
- UnaryNegative
149
- UnaryPositive
150
- Void
151
- }.each do |node|
152
- define_method(:"visit_#{node}") do |ro_node|
153
- Nodes.const_get(node).new(ro_node.line,
154
- ro_node.index,
155
- ro_node.pn_kid && ro_node.pn_kid.accept(self))
156
- end
157
- end
158
-
159
- %w{
160
- And
161
- BracketAccess
162
- DoWhile
163
- Case
164
- Default
165
- While
166
- With
167
- Equal
168
- Switch
169
- In
170
- InstanceOf
171
- GetterProperty
172
- ForIn
173
- GreaterThan
174
- LessThan
175
- GreaterThanOrEqual
176
- LessThanOrEqual
177
- NotEqual
178
- OpAdd
179
- OpAddEqual
180
- OpBitAnd
181
- OpBitAndEqual
182
- OpBitOr
183
- OpBitOrEqual
184
- OpBitXor
185
- OpBitXorEqual
186
- OpDivide
187
- OpDivideEqual
188
- OpEqual
189
- OpLShift
190
- OpLShiftEqual
191
- OpMod
192
- OpModEqual
193
- OpMultiply
194
- OpMultiplyEqual
195
- OpRShift
196
- OpRShiftEqual
197
- OpSubtract
198
- OpSubtractEqual
199
- OpURShift
200
- OpURShiftEqual
201
- Or
202
- Property
203
- SetterProperty
204
- StrictEqual
205
- StrictNotEqual
206
- }.each do |bin_op|
207
- define_method(:"visit_#{bin_op}") do |ro_node|
208
- if ro_node.children.length > 1
209
- kids = ro_node.children.reverse
210
- tree = self.class.const_get(bin_op).new(
211
- ro_node.line,
212
- ro_node.index,
213
- kids[1].accept(self),
214
- kids[0].accept(self)
215
- )
216
- 2.times { kids.shift }
217
- kids.each do |kid|
218
- tree = self.class.const_get(bin_op).new(
219
- ro_node.line,
220
- ro_node.index,
221
- kid.accept(self),
222
- tree
223
- )
224
- end
225
- tree
226
- else
227
- self.class.const_get(bin_op).new(
228
- ro_node.line,
229
- ro_node.index,
230
- ro_node.pn_left && ro_node.pn_left.accept(self),
231
- ro_node.pn_right && ro_node.pn_right.accept(self)
232
- )
233
- end
234
- end
235
- end
236
-
237
- def accept(target)
238
- target.accept(self)
239
- end
240
- end
241
- end
242
- end
@@ -1,17 +0,0 @@
1
- module Johnson #:nodoc:
2
- module SpiderMonkey #:nodoc:
3
- class RubyLandProxy < Johnson::RubyLandProxy # native
4
- module Callable
5
- def call_using(this, *args)
6
- native_call(this, *args)
7
- end
8
- end
9
- end
10
- class RubyLandScript < Johnson::SpiderMonkey::RubyLandProxy # native
11
- def break(linenum, &block)
12
- runtime.set_trap(self, linenum, block)
13
- runtime.traps << [self, linenum]
14
- end
15
- end
16
- end
17
- end
@@ -1,74 +0,0 @@
1
- module Johnson #:nodoc:
2
- module SpiderMonkey #:nodoc:
3
- class Runtime < Johnson::Runtime # native
4
- def version
5
- SpiderMonkey::VERSION
6
- end
7
-
8
- CONTEXT_MAP_KEY = :johnson_context_map
9
-
10
- attr_reader :traps
11
- def initialize(options={})
12
- @debugger = nil
13
- @gcthings = {}
14
- @traps = []
15
- initialize_native(options)
16
- super()
17
- end
18
-
19
- # called from js_land_proxy.c:make_js_land_proxy
20
- def add_gcthing(thing)
21
- @gcthings[thing.object_id] = thing
22
- end
23
-
24
- # called from js_land_proxy.c:finalize
25
- def remove_gcthing(object_id)
26
- @gcthings.delete(object_id) if defined? @gcthings
27
- end
28
-
29
- def debugger?
30
- not @debugger.nil?
31
- end
32
-
33
- def current_context
34
- contexts = (Thread.current[CONTEXT_MAP_KEY] ||= {})
35
- contexts[self.object_id] ||= Context.new(self)
36
- end
37
-
38
- alias :evaluate_compiled_script_without_clearing_traps :evaluate_compiled_script
39
- def evaluate_compiled_script script
40
- evaluate_compiled_script_without_clearing_traps(script)
41
- ensure
42
- @traps.each do |trap_tuple|
43
- clear_trap(*trap_tuple)
44
- end
45
- end
46
-
47
- ###
48
- # Compile +script+ with +filename+ and +linenum+
49
- def compile(script, filename=nil, linenum=nil)
50
- filename ||= 'none'
51
- linenum ||= 1
52
- native_compile(script, filename, linenum)
53
- end
54
-
55
- class << self
56
-
57
- def parse_io *args
58
- Johnson::SpiderMonkey::ImmutableNode.parse_io( *args )
59
- end
60
-
61
- end
62
-
63
- private
64
- # Called by SpiderMonkey's garbage collector to determine whether or
65
- # not it should GC
66
- def should_sm_gc?
67
- return false if Thread.list.find_all { |t|
68
- t.key?(CONTEXT_MAP_KEY)
69
- }.length > 1
70
- true
71
- end
72
- end
73
- end
74
- end
@@ -1,21 +0,0 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), "/../../helper"))
2
-
3
- module Johnson
4
- module SpiderMonkey
5
- class ContextTest < Johnson::TestCase
6
- def setup
7
- @runtime = Johnson::Runtime.new(Johnson::SpiderMonkey::Runtime)
8
- end
9
-
10
- def test_wraps_global_unfuckedly
11
- assert_same(@runtime.global, @runtime.evaluate("this"))
12
- end
13
-
14
- def test_provides_basic_runtime_interface
15
- assert(@runtime.respond_to?(:evaluate))
16
- assert(@runtime.respond_to?(:[]))
17
- assert(@runtime.respond_to?(:[]=))
18
- end
19
- end
20
- end
21
- end
@@ -1,34 +0,0 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), "/../../helper"))
2
-
3
- require 'stringio'
4
-
5
- module Johnson
6
- module SpiderMonkey
7
- class ImmutableNodeTest < Johnson::TestCase
8
- include Johnson::SpiderMonkey
9
-
10
- def test_initialize
11
- node = nil
12
- assert_nothing_raised {
13
- node = ImmutableNode.new
14
- }
15
- end
16
-
17
- def test_parse_some_shit
18
- assert_nothing_raised {
19
- node = ImmutableNode.parse_io(StringIO.new('var x = 10;'))
20
- }
21
- end
22
-
23
- def test_index
24
- node = ImmutableNode.parse_io(StringIO.new('var x = 10;'))
25
- assert_equal(0, node.index)
26
- end
27
-
28
- def test_line
29
- node = ImmutableNode.parse_io(StringIO.new('var x = 10;'))
30
- assert_equal(0, node.line)
31
- end
32
- end
33
- end
34
- end
@@ -1,273 +0,0 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), "/../../helper"))
2
-
3
- module Johnson
4
- module SpiderMonkey
5
- class JSLandProxyTest < Johnson::TestCase
6
- module AModule
7
- end
8
-
9
- class AClass
10
- attr_reader :args
11
-
12
- def initialize(*args)
13
- @args = args
14
- end
15
- end
16
-
17
- class Foo
18
- class Inner
19
- end
20
-
21
- def self.bar; 10; end
22
-
23
- attr_accessor :bar
24
-
25
- def initialize
26
- @bar = 10
27
- end
28
-
29
- def x2(x)
30
- x * 2
31
- end
32
-
33
- def add(*args)
34
- args.inject { |m,n| m += n }
35
- end
36
-
37
- def xform(arg)
38
- yield(arg)
39
- end
40
- end
41
-
42
- class Indexable
43
- def initialize
44
- @store = {}
45
- end
46
-
47
- def [](key)
48
- @store[key]
49
- end
50
-
51
- def []=(key, value)
52
- @store[key] = value
53
- end
54
-
55
- def key?(key)
56
- @store.key?(key)
57
- end
58
- end
59
-
60
- def setup
61
- @runtime = Johnson::Runtime.new(Johnson::SpiderMonkey::Runtime)
62
- end
63
-
64
- def test_find_constants
65
- assert_js_equal($LOAD_PATH, "Ruby['$LOAD_PATH']")
66
- end
67
-
68
- def test_proxies_get_reused
69
- @runtime["foo"] = @runtime["bar"] = Foo.new
70
- assert_js_equal(true, "foo === bar")
71
- end
72
-
73
- def test_attributes_get_added_to_ruby
74
- foo = @runtime["foo"] = Foo.new
75
- assert !foo.respond_to?(:johnson)
76
- @runtime.evaluate("foo.johnson = 'explode';")
77
- assert foo.respond_to?(:johnson)
78
- assert_equal('explode', foo.johnson)
79
- assert_js_equal('explode', 'foo.johnson')
80
- assert !Foo.new.respond_to?(:johnson)
81
- end
82
-
83
- def test_assign_function_as_attribute
84
- foo = @runtime["foo"] = Foo.new
85
- assert !foo.respond_to?(:johnson)
86
- f = @runtime.evaluate("foo.johnson = function() { return 'explode'; }")
87
- assert foo.respond_to?(:johnson)
88
- assert_equal('explode', foo.johnson)
89
- assert_js_equal('explode', 'foo.johnson()')
90
- assert_js_equal(f, 'foo.johnson')
91
- assert !Foo.new.respond_to?(:johnson)
92
- end
93
-
94
- def test_assign_function_as_attribute_with_this
95
- foo = @runtime["foo"] = Foo.new
96
- @runtime.evaluate("foo.ex_squared = function(x) { return this.x2(x); }")
97
- assert_equal(4, foo.ex_squared(2))
98
- @runtime.evaluate("foo.ex_squared = 20;")
99
- assert_equal(20, foo.ex_squared)
100
- end
101
-
102
- def test_use_ruby_global_object
103
- func = @runtime.evaluate("function(x) { return this.x2(x); }")
104
- foo = Foo.new
105
- assert_equal(4, func.call_using(foo, 2))
106
- end
107
-
108
- def test_proxies_roundtrip
109
- @runtime["foo"] = foo = Foo.new
110
- assert_same(foo, @runtime.evaluate("foo"))
111
- end
112
-
113
- def test_proxies_classes
114
- @runtime["Foo"] = Foo
115
- assert_same(Foo, @runtime.evaluate("Foo"))
116
- end
117
-
118
- def test_proxies_modules
119
- @runtime["AModule"] = AModule
120
- assert_same(AModule, @runtime.evaluate("AModule"))
121
- end
122
-
123
- def test_proxies_hashes
124
- @runtime["beatles"] = { "george" => "guitar" }
125
- assert_equal("guitar", @runtime.evaluate("beatles['george']"))
126
- end
127
-
128
- def test_getter_calls_0_arity_method
129
- @runtime["foo"] = Foo.new
130
- assert_js_equal(10, "foo.bar")
131
- end
132
-
133
- def test_getter_calls_indexer
134
- @runtime["foo"] = indexable = Indexable.new
135
- indexable["bar"] = 10
136
-
137
- assert_js_equal(10, "foo.bar")
138
- end
139
-
140
- def test_getter_returns_nil_for_unknown_properties
141
- @runtime["foo"] = Foo.new
142
- assert_js_equal(nil, "foo.quux")
143
- end
144
-
145
- def test_setter_calls_key=
146
- @runtime["foo"] = foo = Foo.new
147
- assert_js_equal(42, "foo.bar = 42")
148
- assert_equal(42, foo.bar)
149
- end
150
-
151
- def test_setter_calls_indexer
152
- @runtime["foo"] = indexable = Indexable.new
153
- assert_js_equal(42, "foo.monkey = 42")
154
- assert_equal(42, indexable["monkey"])
155
- end
156
-
157
- def test_calls_attr_reader
158
- @runtime["foo"] = Foo.new
159
- assert_js_equal(10, "foo.bar")
160
- end
161
-
162
- def test_calls_1_arity_method
163
- @runtime["foo"] = Foo.new
164
- assert_js_equal(10, "foo.x2(5)")
165
- end
166
-
167
- def test_calls_n_arity_method
168
- @runtime["foo"] = Foo.new
169
- assert_js_equal(10, "foo.add(4, 2, 2, 1, 1)")
170
- end
171
-
172
- def test_calls_class_method
173
- @runtime["Foo"] = Foo
174
- assert_js_equal(Foo.bar, "Foo.bar()")
175
- end
176
-
177
- def test_accesses_consts
178
- @runtime["Foo"] = Foo
179
- assert_same(Foo::Inner, @runtime.evaluate("Foo.Inner"))
180
- end
181
-
182
- def test_can_create_new_instances_in_js
183
- @runtime["AClass"] = AClass
184
- foo = @runtime.evaluate("AClass.new()")
185
- assert_kind_of(AClass, foo)
186
- end
187
-
188
- def test_class_proxies_provide_a_ctor
189
- @runtime["AClass"] = AClass
190
- foo = @runtime.evaluate("new AClass()")
191
- assert_kind_of(AClass, foo)
192
-
193
- bar = @runtime.evaluate("new AClass(1, 2, 3)")
194
- assert_equal([1, 2, 3], bar.args)
195
- end
196
-
197
- def test_dwims_blocks
198
- @runtime["foo"] = Foo.new
199
- assert_js_equal(4, "foo.xform(2, function(x) { return x * 2 })")
200
- end
201
-
202
- def test_dwims_blocks_for_0_arity_methods
203
- @runtime[:arr] = [1, 2, 3]
204
- assert_js_equal([2, 4, 6], "arr.collect(function(x) { return x * 2 })")
205
- end
206
-
207
- def test_scope_for_with
208
- assert_js_equal(84, "with (rb) { b + b }", :b => 1, :rb => { "b" => 42 })
209
- end
210
-
211
- def test_lambdas_for_with
212
- assert_js_equal(84, "with (rb) { b(42) }", :rb => { "b" => lambda { |x| x * 2 } })
213
- end
214
-
215
- class MethodForWith
216
- def b(x); x * 2; end
217
- end
218
-
219
- def test_method_for_with
220
- assert_js_equal(84, "with (rb) { b(42) }", :rb => MethodForWith.new)
221
- end
222
-
223
- def test_raises_string_to_ruby
224
- assert_raise(Johnson::Error) { @runtime.evaluate("throw 'my string';") }
225
- end
226
-
227
- def test_raises_object_to_ruby
228
- assert_raise(Johnson::Error) { @runtime.evaluate("throw { bad: true };") }
229
- end
230
-
231
- def test_raises_exception_to_ruby
232
- assert_raise(Johnson::Error) { @runtime.evaluate("undefinedValue();") }
233
- end
234
-
235
- def test_js_property_false_should_not_invoke
236
- klass = Class.new do
237
- def bar ; 10 ; end
238
- def js_property?(name) ; false ; end
239
- end
240
- @runtime['foo'] = foo = klass.new
241
- assert_equal foo.method(:bar), @runtime.evaluate("foo.bar")
242
- end
243
-
244
- def test_js_property_nil_should_not_invoke
245
- klass = Class.new do
246
- def bar ; 10 ; end
247
- def js_property?(name) ; nil ; end
248
- end
249
- foo = klass.new
250
- assert_js_equal(foo.method(:bar), "foo.bar", :foo => foo)
251
- end
252
-
253
- def test_js_property_true_should_invoke_0_arity
254
- klass = Class.new do
255
- def bar ; 10 ; end
256
- def js_property?(name) ; true ; end
257
- end
258
- assert_js_equal(10, "foo.bar", :foo => klass.new)
259
- end
260
-
261
- def test_js_property_on_n_arity_should_raise_exception
262
- klass = Class.new do
263
- def bar(n) ; 10 + n ; end
264
- def js_property?(name) ; true ; end
265
- end
266
- @runtime['foo'] = klass.new
267
- assert_raises(ArgumentError) do
268
- @runtime.evaluate("foo.bar")
269
- end
270
- end
271
- end
272
- end
273
- end