johnson 1.1.0

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 (371) hide show
  1. data/.autotest +14 -0
  2. data/CHANGELOG.rdoc +11 -0
  3. data/Manifest.txt +370 -0
  4. data/README.rdoc +60 -0
  5. data/Rakefile +42 -0
  6. data/bin/johnson +108 -0
  7. data/docs/MINGW32.mk +124 -0
  8. data/docs/cross-compile.txt +38 -0
  9. data/ext/spidermonkey/context.c +115 -0
  10. data/ext/spidermonkey/context.h +19 -0
  11. data/ext/spidermonkey/conversions.c +320 -0
  12. data/ext/spidermonkey/conversions.h +18 -0
  13. data/ext/spidermonkey/debugger.c +226 -0
  14. data/ext/spidermonkey/debugger.h +9 -0
  15. data/ext/spidermonkey/extconf.rb +30 -0
  16. data/ext/spidermonkey/extensions.c +37 -0
  17. data/ext/spidermonkey/extensions.h +12 -0
  18. data/ext/spidermonkey/global.c +40 -0
  19. data/ext/spidermonkey/global.h +11 -0
  20. data/ext/spidermonkey/idhash.c +16 -0
  21. data/ext/spidermonkey/idhash.h +8 -0
  22. data/ext/spidermonkey/immutable_node.c +1153 -0
  23. data/ext/spidermonkey/immutable_node.c.erb +523 -0
  24. data/ext/spidermonkey/immutable_node.h +22 -0
  25. data/ext/spidermonkey/jroot.h +187 -0
  26. data/ext/spidermonkey/js_land_proxy.c +610 -0
  27. data/ext/spidermonkey/js_land_proxy.h +20 -0
  28. data/ext/spidermonkey/ruby_land_proxy.c +543 -0
  29. data/ext/spidermonkey/ruby_land_proxy.h +17 -0
  30. data/ext/spidermonkey/runtime.c +330 -0
  31. data/ext/spidermonkey/runtime.h +25 -0
  32. data/ext/spidermonkey/spidermonkey.c +20 -0
  33. data/ext/spidermonkey/spidermonkey.h +29 -0
  34. data/johnson.gemspec +44 -0
  35. data/js/johnson/cli.js +30 -0
  36. data/js/johnson/prelude.js +80 -0
  37. data/lib/johnson.rb +55 -0
  38. data/lib/johnson/cli.rb +7 -0
  39. data/lib/johnson/cli/options.rb +67 -0
  40. data/lib/johnson/error.rb +4 -0
  41. data/lib/johnson/nodes.rb +7 -0
  42. data/lib/johnson/nodes/binary_node.rb +65 -0
  43. data/lib/johnson/nodes/for.rb +14 -0
  44. data/lib/johnson/nodes/for_in.rb +12 -0
  45. data/lib/johnson/nodes/function.rb +13 -0
  46. data/lib/johnson/nodes/list.rb +28 -0
  47. data/lib/johnson/nodes/node.rb +68 -0
  48. data/lib/johnson/nodes/ternary_node.rb +20 -0
  49. data/lib/johnson/parser.rb +21 -0
  50. data/lib/johnson/parser/syntax_error.rb +13 -0
  51. data/lib/johnson/runtime.rb +63 -0
  52. data/lib/johnson/spidermonkey/context.rb +10 -0
  53. data/lib/johnson/spidermonkey/debugger.rb +67 -0
  54. data/lib/johnson/spidermonkey/immutable_node.rb +282 -0
  55. data/lib/johnson/spidermonkey/js_land_proxy.rb +62 -0
  56. data/lib/johnson/spidermonkey/mutable_tree_visitor.rb +242 -0
  57. data/lib/johnson/spidermonkey/ruby_land_proxy.rb +54 -0
  58. data/lib/johnson/spidermonkey/runtime.rb +103 -0
  59. data/lib/johnson/version.rb +3 -0
  60. data/lib/johnson/visitable.rb +16 -0
  61. data/lib/johnson/visitors.rb +5 -0
  62. data/lib/johnson/visitors/dot_visitor.rb +169 -0
  63. data/lib/johnson/visitors/ecma_visitor.rb +323 -0
  64. data/lib/johnson/visitors/enumerating_visitor.rb +15 -0
  65. data/lib/johnson/visitors/sexp_visitor.rb +174 -0
  66. data/lib/johnson/visitors/visitor.rb +91 -0
  67. data/lib/rails/init.rb +37 -0
  68. data/lib/tasks/gem.rake +9 -0
  69. data/lib/tasks/parsing.rake +37 -0
  70. data/lib/tasks/testing.rake +36 -0
  71. data/lib/tasks/vendor.rake +20 -0
  72. data/test/helper.rb +55 -0
  73. data/test/johnson/browser_test.rb +43 -0
  74. data/test/johnson/conversions/array_test.rb +32 -0
  75. data/test/johnson/conversions/boolean_test.rb +17 -0
  76. data/test/johnson/conversions/callable_test.rb +34 -0
  77. data/test/johnson/conversions/file_test.rb +15 -0
  78. data/test/johnson/conversions/nil_test.rb +20 -0
  79. data/test/johnson/conversions/number_test.rb +34 -0
  80. data/test/johnson/conversions/regexp_test.rb +24 -0
  81. data/test/johnson/conversions/string_test.rb +26 -0
  82. data/test/johnson/conversions/struct_test.rb +15 -0
  83. data/test/johnson/conversions/symbol_test.rb +19 -0
  84. data/test/johnson/conversions/thread_test.rb +24 -0
  85. data/test/johnson/error_test.rb +9 -0
  86. data/test/johnson/extensions_test.rb +56 -0
  87. data/test/johnson/nodes/array_literal_test.rb +57 -0
  88. data/test/johnson/nodes/array_node_test.rb +26 -0
  89. data/test/johnson/nodes/binary_node_test.rb +61 -0
  90. data/test/johnson/nodes/bracket_access_test.rb +16 -0
  91. data/test/johnson/nodes/delete_test.rb +11 -0
  92. data/test/johnson/nodes/do_while_test.rb +12 -0
  93. data/test/johnson/nodes/dot_accessor_test.rb +15 -0
  94. data/test/johnson/nodes/export_test.rb +9 -0
  95. data/test/johnson/nodes/for_test.rb +54 -0
  96. data/test/johnson/nodes/function_test.rb +71 -0
  97. data/test/johnson/nodes/if_test.rb +41 -0
  98. data/test/johnson/nodes/import_test.rb +13 -0
  99. data/test/johnson/nodes/label_test.rb +19 -0
  100. data/test/johnson/nodes/let_test.rb +31 -0
  101. data/test/johnson/nodes/object_literal_test.rb +110 -0
  102. data/test/johnson/nodes/return_test.rb +16 -0
  103. data/test/johnson/nodes/semi_test.rb +8 -0
  104. data/test/johnson/nodes/switch_test.rb +55 -0
  105. data/test/johnson/nodes/ternary_test.rb +25 -0
  106. data/test/johnson/nodes/throw_test.rb +9 -0
  107. data/test/johnson/nodes/try_node_test.rb +59 -0
  108. data/test/johnson/nodes/typeof_test.rb +11 -0
  109. data/test/johnson/nodes/unary_node_test.rb +23 -0
  110. data/test/johnson/nodes/void_test.rb +11 -0
  111. data/test/johnson/nodes/while_test.rb +26 -0
  112. data/test/johnson/nodes/with_test.rb +10 -0
  113. data/test/johnson/prelude_test.rb +56 -0
  114. data/test/johnson/runtime_test.rb +64 -0
  115. data/test/johnson/spidermonkey/context_test.rb +21 -0
  116. data/test/johnson/spidermonkey/immutable_node_test.rb +34 -0
  117. data/test/johnson/spidermonkey/js_land_proxy_test.rb +236 -0
  118. data/test/johnson/spidermonkey/ruby_land_proxy_test.rb +240 -0
  119. data/test/johnson/spidermonkey/runtime_test.rb +17 -0
  120. data/test/johnson/version_test.rb +13 -0
  121. data/test/johnson/visitors/dot_visitor_test.rb +39 -0
  122. data/test/johnson/visitors/enumerating_visitor_test.rb +12 -0
  123. data/test/johnson_test.rb +16 -0
  124. data/test/parser_test.rb +276 -0
  125. data/vendor/spidermonkey/.cvsignore +9 -0
  126. data/vendor/spidermonkey/Makefile.in +449 -0
  127. data/vendor/spidermonkey/Makefile.ref +365 -0
  128. data/vendor/spidermonkey/README.html +820 -0
  129. data/vendor/spidermonkey/SpiderMonkey.rsp +12 -0
  130. data/vendor/spidermonkey/Y.js +19 -0
  131. data/vendor/spidermonkey/build.mk +43 -0
  132. data/vendor/spidermonkey/config.mk +192 -0
  133. data/vendor/spidermonkey/config/AIX4.1.mk +65 -0
  134. data/vendor/spidermonkey/config/AIX4.2.mk +64 -0
  135. data/vendor/spidermonkey/config/AIX4.3.mk +65 -0
  136. data/vendor/spidermonkey/config/Darwin.mk +83 -0
  137. data/vendor/spidermonkey/config/Darwin1.3.mk +81 -0
  138. data/vendor/spidermonkey/config/Darwin1.4.mk +41 -0
  139. data/vendor/spidermonkey/config/Darwin5.2.mk +81 -0
  140. data/vendor/spidermonkey/config/Darwin5.3.mk +81 -0
  141. data/vendor/spidermonkey/config/HP-UXB.10.10.mk +77 -0
  142. data/vendor/spidermonkey/config/HP-UXB.10.20.mk +77 -0
  143. data/vendor/spidermonkey/config/HP-UXB.11.00.mk +80 -0
  144. data/vendor/spidermonkey/config/IRIX.mk +87 -0
  145. data/vendor/spidermonkey/config/IRIX5.3.mk +44 -0
  146. data/vendor/spidermonkey/config/IRIX6.1.mk +44 -0
  147. data/vendor/spidermonkey/config/IRIX6.2.mk +44 -0
  148. data/vendor/spidermonkey/config/IRIX6.3.mk +44 -0
  149. data/vendor/spidermonkey/config/IRIX6.5.mk +44 -0
  150. data/vendor/spidermonkey/config/Linux_All.mk +103 -0
  151. data/vendor/spidermonkey/config/Mac_OS10.0.mk +82 -0
  152. data/vendor/spidermonkey/config/OSF1V4.0.mk +72 -0
  153. data/vendor/spidermonkey/config/OSF1V5.0.mk +69 -0
  154. data/vendor/spidermonkey/config/SunOS4.1.4.mk +101 -0
  155. data/vendor/spidermonkey/config/SunOS5.10.mk +50 -0
  156. data/vendor/spidermonkey/config/SunOS5.3.mk +91 -0
  157. data/vendor/spidermonkey/config/SunOS5.4.mk +92 -0
  158. data/vendor/spidermonkey/config/SunOS5.5.1.mk +44 -0
  159. data/vendor/spidermonkey/config/SunOS5.5.mk +87 -0
  160. data/vendor/spidermonkey/config/SunOS5.6.mk +89 -0
  161. data/vendor/spidermonkey/config/SunOS5.7.mk +44 -0
  162. data/vendor/spidermonkey/config/SunOS5.8.mk +44 -0
  163. data/vendor/spidermonkey/config/SunOS5.9.mk +44 -0
  164. data/vendor/spidermonkey/config/WINNT4.0.mk +117 -0
  165. data/vendor/spidermonkey/config/WINNT5.0.mk +117 -0
  166. data/vendor/spidermonkey/config/WINNT5.1.mk +117 -0
  167. data/vendor/spidermonkey/config/WINNT5.2.mk +117 -0
  168. data/vendor/spidermonkey/config/WINNT6.0.mk +117 -0
  169. data/vendor/spidermonkey/config/dgux.mk +64 -0
  170. data/vendor/spidermonkey/editline/Makefile.ref +144 -0
  171. data/vendor/spidermonkey/editline/README +83 -0
  172. data/vendor/spidermonkey/editline/editline.3 +175 -0
  173. data/vendor/spidermonkey/editline/editline.c +1369 -0
  174. data/vendor/spidermonkey/editline/editline.h +135 -0
  175. data/vendor/spidermonkey/editline/sysunix.c +182 -0
  176. data/vendor/spidermonkey/editline/unix.h +82 -0
  177. data/vendor/spidermonkey/fdlibm/.cvsignore +7 -0
  178. data/vendor/spidermonkey/fdlibm/Makefile.in +127 -0
  179. data/vendor/spidermonkey/fdlibm/Makefile.ref +192 -0
  180. data/vendor/spidermonkey/fdlibm/e_acos.c +147 -0
  181. data/vendor/spidermonkey/fdlibm/e_acosh.c +105 -0
  182. data/vendor/spidermonkey/fdlibm/e_asin.c +156 -0
  183. data/vendor/spidermonkey/fdlibm/e_atan2.c +165 -0
  184. data/vendor/spidermonkey/fdlibm/e_atanh.c +110 -0
  185. data/vendor/spidermonkey/fdlibm/e_cosh.c +133 -0
  186. data/vendor/spidermonkey/fdlibm/e_exp.c +202 -0
  187. data/vendor/spidermonkey/fdlibm/e_fmod.c +184 -0
  188. data/vendor/spidermonkey/fdlibm/e_gamma.c +71 -0
  189. data/vendor/spidermonkey/fdlibm/e_gamma_r.c +70 -0
  190. data/vendor/spidermonkey/fdlibm/e_hypot.c +173 -0
  191. data/vendor/spidermonkey/fdlibm/e_j0.c +524 -0
  192. data/vendor/spidermonkey/fdlibm/e_j1.c +523 -0
  193. data/vendor/spidermonkey/fdlibm/e_jn.c +315 -0
  194. data/vendor/spidermonkey/fdlibm/e_lgamma.c +71 -0
  195. data/vendor/spidermonkey/fdlibm/e_lgamma_r.c +347 -0
  196. data/vendor/spidermonkey/fdlibm/e_log.c +184 -0
  197. data/vendor/spidermonkey/fdlibm/e_log10.c +134 -0
  198. data/vendor/spidermonkey/fdlibm/e_pow.c +386 -0
  199. data/vendor/spidermonkey/fdlibm/e_rem_pio2.c +222 -0
  200. data/vendor/spidermonkey/fdlibm/e_remainder.c +120 -0
  201. data/vendor/spidermonkey/fdlibm/e_scalb.c +89 -0
  202. data/vendor/spidermonkey/fdlibm/e_sinh.c +122 -0
  203. data/vendor/spidermonkey/fdlibm/e_sqrt.c +497 -0
  204. data/vendor/spidermonkey/fdlibm/fdlibm.h +273 -0
  205. data/vendor/spidermonkey/fdlibm/fdlibm.mak +1453 -0
  206. data/vendor/spidermonkey/fdlibm/fdlibm.mdp +0 -0
  207. data/vendor/spidermonkey/fdlibm/k_cos.c +135 -0
  208. data/vendor/spidermonkey/fdlibm/k_rem_pio2.c +354 -0
  209. data/vendor/spidermonkey/fdlibm/k_sin.c +114 -0
  210. data/vendor/spidermonkey/fdlibm/k_standard.c +785 -0
  211. data/vendor/spidermonkey/fdlibm/k_tan.c +170 -0
  212. data/vendor/spidermonkey/fdlibm/s_asinh.c +101 -0
  213. data/vendor/spidermonkey/fdlibm/s_atan.c +175 -0
  214. data/vendor/spidermonkey/fdlibm/s_cbrt.c +133 -0
  215. data/vendor/spidermonkey/fdlibm/s_ceil.c +120 -0
  216. data/vendor/spidermonkey/fdlibm/s_copysign.c +72 -0
  217. data/vendor/spidermonkey/fdlibm/s_cos.c +118 -0
  218. data/vendor/spidermonkey/fdlibm/s_erf.c +356 -0
  219. data/vendor/spidermonkey/fdlibm/s_expm1.c +267 -0
  220. data/vendor/spidermonkey/fdlibm/s_fabs.c +70 -0
  221. data/vendor/spidermonkey/fdlibm/s_finite.c +71 -0
  222. data/vendor/spidermonkey/fdlibm/s_floor.c +121 -0
  223. data/vendor/spidermonkey/fdlibm/s_frexp.c +99 -0
  224. data/vendor/spidermonkey/fdlibm/s_ilogb.c +85 -0
  225. data/vendor/spidermonkey/fdlibm/s_isnan.c +74 -0
  226. data/vendor/spidermonkey/fdlibm/s_ldexp.c +66 -0
  227. data/vendor/spidermonkey/fdlibm/s_lib_version.c +73 -0
  228. data/vendor/spidermonkey/fdlibm/s_log1p.c +211 -0
  229. data/vendor/spidermonkey/fdlibm/s_logb.c +79 -0
  230. data/vendor/spidermonkey/fdlibm/s_matherr.c +64 -0
  231. data/vendor/spidermonkey/fdlibm/s_modf.c +132 -0
  232. data/vendor/spidermonkey/fdlibm/s_nextafter.c +124 -0
  233. data/vendor/spidermonkey/fdlibm/s_rint.c +131 -0
  234. data/vendor/spidermonkey/fdlibm/s_scalbn.c +107 -0
  235. data/vendor/spidermonkey/fdlibm/s_signgam.c +40 -0
  236. data/vendor/spidermonkey/fdlibm/s_significand.c +68 -0
  237. data/vendor/spidermonkey/fdlibm/s_sin.c +118 -0
  238. data/vendor/spidermonkey/fdlibm/s_tan.c +112 -0
  239. data/vendor/spidermonkey/fdlibm/s_tanh.c +122 -0
  240. data/vendor/spidermonkey/fdlibm/w_acos.c +78 -0
  241. data/vendor/spidermonkey/fdlibm/w_acosh.c +78 -0
  242. data/vendor/spidermonkey/fdlibm/w_asin.c +80 -0
  243. data/vendor/spidermonkey/fdlibm/w_atan2.c +79 -0
  244. data/vendor/spidermonkey/fdlibm/w_atanh.c +81 -0
  245. data/vendor/spidermonkey/fdlibm/w_cosh.c +77 -0
  246. data/vendor/spidermonkey/fdlibm/w_exp.c +88 -0
  247. data/vendor/spidermonkey/fdlibm/w_fmod.c +78 -0
  248. data/vendor/spidermonkey/fdlibm/w_gamma.c +85 -0
  249. data/vendor/spidermonkey/fdlibm/w_gamma_r.c +81 -0
  250. data/vendor/spidermonkey/fdlibm/w_hypot.c +78 -0
  251. data/vendor/spidermonkey/fdlibm/w_j0.c +105 -0
  252. data/vendor/spidermonkey/fdlibm/w_j1.c +106 -0
  253. data/vendor/spidermonkey/fdlibm/w_jn.c +128 -0
  254. data/vendor/spidermonkey/fdlibm/w_lgamma.c +85 -0
  255. data/vendor/spidermonkey/fdlibm/w_lgamma_r.c +81 -0
  256. data/vendor/spidermonkey/fdlibm/w_log.c +78 -0
  257. data/vendor/spidermonkey/fdlibm/w_log10.c +81 -0
  258. data/vendor/spidermonkey/fdlibm/w_pow.c +99 -0
  259. data/vendor/spidermonkey/fdlibm/w_remainder.c +77 -0
  260. data/vendor/spidermonkey/fdlibm/w_scalb.c +95 -0
  261. data/vendor/spidermonkey/fdlibm/w_sinh.c +77 -0
  262. data/vendor/spidermonkey/fdlibm/w_sqrt.c +77 -0
  263. data/vendor/spidermonkey/javascript-trace.d +73 -0
  264. data/vendor/spidermonkey/js.c +3951 -0
  265. data/vendor/spidermonkey/js.mdp +0 -0
  266. data/vendor/spidermonkey/js.msg +308 -0
  267. data/vendor/spidermonkey/js3240.rc +79 -0
  268. data/vendor/spidermonkey/jsOS240.def +654 -0
  269. data/vendor/spidermonkey/jsapi.c +5836 -0
  270. data/vendor/spidermonkey/jsapi.h +2624 -0
  271. data/vendor/spidermonkey/jsarena.c +450 -0
  272. data/vendor/spidermonkey/jsarena.h +318 -0
  273. data/vendor/spidermonkey/jsarray.c +2996 -0
  274. data/vendor/spidermonkey/jsarray.h +127 -0
  275. data/vendor/spidermonkey/jsatom.c +1045 -0
  276. data/vendor/spidermonkey/jsatom.h +442 -0
  277. data/vendor/spidermonkey/jsbit.h +253 -0
  278. data/vendor/spidermonkey/jsbool.c +176 -0
  279. data/vendor/spidermonkey/jsbool.h +73 -0
  280. data/vendor/spidermonkey/jsclist.h +139 -0
  281. data/vendor/spidermonkey/jscntxt.c +1348 -0
  282. data/vendor/spidermonkey/jscntxt.h +1120 -0
  283. data/vendor/spidermonkey/jscompat.h +57 -0
  284. data/vendor/spidermonkey/jsconfig.h +248 -0
  285. data/vendor/spidermonkey/jsconfig.mk +181 -0
  286. data/vendor/spidermonkey/jscpucfg.c +396 -0
  287. data/vendor/spidermonkey/jscpucfg.h +212 -0
  288. data/vendor/spidermonkey/jsdate.c +2390 -0
  289. data/vendor/spidermonkey/jsdate.h +124 -0
  290. data/vendor/spidermonkey/jsdbgapi.c +1802 -0
  291. data/vendor/spidermonkey/jsdbgapi.h +464 -0
  292. data/vendor/spidermonkey/jsdhash.c +868 -0
  293. data/vendor/spidermonkey/jsdhash.h +592 -0
  294. data/vendor/spidermonkey/jsdtoa.c +3167 -0
  295. data/vendor/spidermonkey/jsdtoa.h +130 -0
  296. data/vendor/spidermonkey/jsdtracef.c +317 -0
  297. data/vendor/spidermonkey/jsdtracef.h +77 -0
  298. data/vendor/spidermonkey/jsemit.c +6909 -0
  299. data/vendor/spidermonkey/jsemit.h +741 -0
  300. data/vendor/spidermonkey/jsexn.c +1371 -0
  301. data/vendor/spidermonkey/jsexn.h +96 -0
  302. data/vendor/spidermonkey/jsfile.c +2736 -0
  303. data/vendor/spidermonkey/jsfile.h +56 -0
  304. data/vendor/spidermonkey/jsfile.msg +90 -0
  305. data/vendor/spidermonkey/jsfun.c +2634 -0
  306. data/vendor/spidermonkey/jsfun.h +254 -0
  307. data/vendor/spidermonkey/jsgc.c +3562 -0
  308. data/vendor/spidermonkey/jsgc.h +403 -0
  309. data/vendor/spidermonkey/jshash.c +476 -0
  310. data/vendor/spidermonkey/jshash.h +151 -0
  311. data/vendor/spidermonkey/jsify.pl +485 -0
  312. data/vendor/spidermonkey/jsinterp.c +7007 -0
  313. data/vendor/spidermonkey/jsinterp.h +525 -0
  314. data/vendor/spidermonkey/jsinvoke.c +43 -0
  315. data/vendor/spidermonkey/jsiter.c +1067 -0
  316. data/vendor/spidermonkey/jsiter.h +122 -0
  317. data/vendor/spidermonkey/jskeyword.tbl +124 -0
  318. data/vendor/spidermonkey/jskwgen.c +460 -0
  319. data/vendor/spidermonkey/jslibmath.h +266 -0
  320. data/vendor/spidermonkey/jslock.c +1309 -0
  321. data/vendor/spidermonkey/jslock.h +313 -0
  322. data/vendor/spidermonkey/jslocko.asm +60 -0
  323. data/vendor/spidermonkey/jslog2.c +94 -0
  324. data/vendor/spidermonkey/jslong.c +264 -0
  325. data/vendor/spidermonkey/jslong.h +412 -0
  326. data/vendor/spidermonkey/jsmath.c +567 -0
  327. data/vendor/spidermonkey/jsmath.h +57 -0
  328. data/vendor/spidermonkey/jsnum.c +1239 -0
  329. data/vendor/spidermonkey/jsnum.h +283 -0
  330. data/vendor/spidermonkey/jsobj.c +5282 -0
  331. data/vendor/spidermonkey/jsobj.h +709 -0
  332. data/vendor/spidermonkey/jsopcode.c +5245 -0
  333. data/vendor/spidermonkey/jsopcode.h +394 -0
  334. data/vendor/spidermonkey/jsopcode.tbl +523 -0
  335. data/vendor/spidermonkey/jsotypes.h +202 -0
  336. data/vendor/spidermonkey/jsparse.c +6704 -0
  337. data/vendor/spidermonkey/jsparse.h +511 -0
  338. data/vendor/spidermonkey/jsprf.c +1262 -0
  339. data/vendor/spidermonkey/jsprf.h +150 -0
  340. data/vendor/spidermonkey/jsproto.tbl +128 -0
  341. data/vendor/spidermonkey/jsprvtd.h +267 -0
  342. data/vendor/spidermonkey/jspubtd.h +744 -0
  343. data/vendor/spidermonkey/jsregexp.c +4364 -0
  344. data/vendor/spidermonkey/jsregexp.h +183 -0
  345. data/vendor/spidermonkey/jsreops.tbl +145 -0
  346. data/vendor/spidermonkey/jsscan.c +2012 -0
  347. data/vendor/spidermonkey/jsscan.h +387 -0
  348. data/vendor/spidermonkey/jsscope.c +1957 -0
  349. data/vendor/spidermonkey/jsscope.h +418 -0
  350. data/vendor/spidermonkey/jsscript.c +1832 -0
  351. data/vendor/spidermonkey/jsscript.h +287 -0
  352. data/vendor/spidermonkey/jsshell.msg +50 -0
  353. data/vendor/spidermonkey/jsstddef.h +83 -0
  354. data/vendor/spidermonkey/jsstr.c +5005 -0
  355. data/vendor/spidermonkey/jsstr.h +641 -0
  356. data/vendor/spidermonkey/jstypes.h +475 -0
  357. data/vendor/spidermonkey/jsutil.c +345 -0
  358. data/vendor/spidermonkey/jsutil.h +157 -0
  359. data/vendor/spidermonkey/jsxdrapi.c +800 -0
  360. data/vendor/spidermonkey/jsxdrapi.h +218 -0
  361. data/vendor/spidermonkey/jsxml.c +8476 -0
  362. data/vendor/spidermonkey/jsxml.h +349 -0
  363. data/vendor/spidermonkey/lock_SunOS.s +119 -0
  364. data/vendor/spidermonkey/perfect.js +39 -0
  365. data/vendor/spidermonkey/plify_jsdhash.sed +36 -0
  366. data/vendor/spidermonkey/prmjtime.c +846 -0
  367. data/vendor/spidermonkey/prmjtime.h +103 -0
  368. data/vendor/spidermonkey/resource.h +15 -0
  369. data/vendor/spidermonkey/rules.mk +197 -0
  370. data/vendor/spidermonkey/win32.order +384 -0
  371. metadata +513 -0
@@ -0,0 +1,62 @@
1
+ module Johnson
2
+ module SpiderMonkey
3
+ module JSLandProxy #:nodoc:
4
+ def self.send_with_possible_block(target, symbol, args)
5
+ block = args.pop if args.last.is_a?(RubyLandProxy) && args.last.function?
6
+ target.__send__(symbol, *args, &block)
7
+ end
8
+
9
+ def self.treat_all_properties_as_methods(target)
10
+ def target.js_property?(name); true; end
11
+ end
12
+
13
+ def self.js_property?(target, name)
14
+ # FIXME: that rescue is gross; handles, e.g., "name?"
15
+ (target.send(:instance_variable_defined?, "@#{name}") rescue false) ||
16
+ (target.respond_to?(:js_property?) && target.__send__(:js_property?, name))
17
+ end
18
+
19
+ def self.call_proc_by_oid(oid, *args)
20
+ id2ref(oid).call(*args)
21
+ end
22
+
23
+ def self.id2ref(oid)
24
+ ObjectSpace._id2ref(oid)
25
+ end
26
+
27
+ def self.autovivified(target, attribute)
28
+ target.send(:__johnson_js_properties)[attribute]
29
+ end
30
+
31
+ def self.autovivified?(target, attribute)
32
+ target.respond_to?(:__johnson_js_properties) &&
33
+ target.send(:__johnson_js_properties).key?(attribute)
34
+ end
35
+
36
+ def self.autovivify(target, attribute, value)
37
+ (class << target; self; end).instance_eval do
38
+ unless target.respond_to?(:__johnson_js_properties)
39
+ define_method(:__johnson_js_properties) do
40
+ @__johnson_js_properties ||= {}
41
+ end
42
+ end
43
+
44
+ define_method(:"#{attribute}=") do |arg|
45
+ send(:__johnson_js_properties)[attribute] = arg
46
+ end
47
+
48
+ define_method(:"#{attribute}") do |*args|
49
+ js_prop = send(:__johnson_js_properties)[attribute]
50
+ if js_prop.is_a?(RubyLandProxy) && js_prop.function?
51
+ js_prop.call_using(self, *args)
52
+ else
53
+ js_prop
54
+ end
55
+ end
56
+ end
57
+
58
+ target.send(:"#{attribute}=", value)
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,242 @@
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
@@ -0,0 +1,54 @@
1
+ module Johnson #:nodoc:
2
+ module SpiderMonkey #:nodoc:
3
+ class RubyLandProxy # native
4
+ include Enumerable
5
+
6
+ def initialize
7
+ raise Johnson::Error, "#{self.class.name} is an internal support class."
8
+ end
9
+
10
+ private :initialize
11
+
12
+ # FIXME: need to revisit array vs non-array proxy, to_a/to_ary semantics, etc.
13
+ alias_method :size, :length
14
+ alias_method :to_ary, :to_a
15
+
16
+ def to_proc
17
+ @proc ||= Proc.new { |*args| call(*args) }
18
+ end
19
+
20
+ def call(*args)
21
+ call_using(runtime.global, *args)
22
+ end
23
+
24
+ def call_using(this, *args)
25
+ native_call(this, *args)
26
+ end
27
+
28
+ def inspect
29
+ toString
30
+ end
31
+
32
+ def method_missing(sym, *args, &block)
33
+ args << block if block_given?
34
+
35
+ name = sym.to_s
36
+ assignment = "=" == name[-1, 1]
37
+
38
+ # default behavior if the slot's not there
39
+ return super unless assignment || respond_to?(sym)
40
+
41
+ unless function_property?(name)
42
+ # for arity 0, treat it as a get
43
+ return self[name] if args.empty?
44
+
45
+ # arity 1 and quacking like an assignment, treat it as a set
46
+ return self[name[0..-2]] = args[0] if assignment && 1 == args.size
47
+ end
48
+
49
+ # okay, must really be a function
50
+ call_function_property(name, *args)
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,103 @@
1
+ module Johnson #:nodoc:
2
+ module SpiderMonkey #:nodoc:
3
+ class Runtime # native
4
+ CONTEXT_MAP_KEY = :johnson_context_map
5
+
6
+ def initialize(options={})
7
+ @debugger = nil
8
+ @compiled_scripts = {}
9
+ @gcthings = {}
10
+ @traps = []
11
+ initialize_native(options)
12
+ self["Ruby"] = Object
13
+ end
14
+
15
+ # called from js_land_proxy.c:make_js_land_proxy
16
+ def add_gcthing(thing)
17
+ @gcthings[thing.object_id] = thing
18
+ end
19
+
20
+ # called from js_land_proxy.c:finalize
21
+ def remove_gcthing(object_id)
22
+ @gcthings.delete(object_id) if defined? @gcthings
23
+ end
24
+
25
+
26
+ def current_context
27
+ contexts = (Thread.current[CONTEXT_MAP_KEY] ||= {})
28
+ contexts[self.object_id] ||= Context.new(self)
29
+ end
30
+
31
+ def [](key)
32
+ global[key]
33
+ end
34
+
35
+ def []=(key, value)
36
+ global[key] = value
37
+ end
38
+
39
+ ###
40
+ # Evaluate +script+ with +filename+ and +linenum+
41
+ def evaluate(script, filename = nil, linenum = nil)
42
+ compiled_script = compile(script, filename, linenum)
43
+ evaluate_compiled_script(compiled_script)
44
+ end
45
+
46
+ def evaluate_compiled script
47
+ evaluate_compiled_script(script)
48
+ @traps.each do |trap_tuple|
49
+ clear_trap(*trap_tuple)
50
+ end
51
+ end
52
+
53
+ ###
54
+ # Compile +script+ with +filename+ and +linenum+
55
+ def compile(script, filename=nil, linenum=nil)
56
+ filename ||= 'none'
57
+ linenum ||= 1
58
+ @compiled_scripts[filename] = native_compile(script, filename, linenum)
59
+ end
60
+
61
+ ###
62
+ # Yield to +block+ in +filename+ at +linenum+
63
+ def break(filename, linenum, &block)
64
+ raise "#{filename} has not been compiled" unless @compiled_scripts.key?(filename)
65
+
66
+ compiled_script = @compiled_scripts[filename]
67
+ set_trap(compiled_script, linenum, block)
68
+ @traps << [compiled_script, linenum]
69
+ end
70
+
71
+ class << self
72
+ def raise_js_exception(jsex)
73
+ raise jsex if Exception === jsex
74
+ raise Johnson::Error.new(jsex.to_s) unless Johnson::SpiderMonkey::RubyLandProxy === jsex
75
+
76
+ stack = jsex.stack rescue nil
77
+
78
+ message = jsex['message'] || jsex.to_s
79
+ at = "(#{jsex['fileName']}):#{jsex['lineNumber']}"
80
+ ex = Johnson::Error.new("#{message} at #{at}")
81
+ if stack
82
+ js_caller = stack.split("\n").find_all { |x| x != '@:0' }
83
+ ex.set_backtrace(js_caller + caller)
84
+ else
85
+ ex.set_backtrace(caller)
86
+ end
87
+
88
+ raise ex
89
+ end
90
+ end
91
+
92
+ private
93
+ # Called by SpiderMonkey's garbage collector to determine whether or
94
+ # not it should GC
95
+ def should_sm_gc?
96
+ return false if Thread.list.find_all { |t|
97
+ t.key?(CONTEXT_MAP_KEY)
98
+ }.length > 1
99
+ true
100
+ end
101
+ end
102
+ end
103
+ end