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,30 @@
1
+ Ruby.require("uri");
2
+ Ruby.require("open-uri");
3
+
4
+ function load() {
5
+ for (var i = 0; i < arguments.length; ++i)
6
+ Johnson.require(arguments[i]);
7
+ }
8
+
9
+ function print() {
10
+ for (var i = 0; i < arguments.length; ++i)
11
+ Ruby.puts(arguments[i]);
12
+ }
13
+
14
+ // NOTE: the Rhino version takes an optional encoding
15
+ function readFile(path) {
16
+ return Ruby.IO.read(path);
17
+ }
18
+
19
+ // NOTE: the Rhino version takes an optional encoding
20
+ function readUrl(url) {
21
+ return Ruby.URI.parse(url).read();
22
+ }
23
+
24
+ function quit() {
25
+ Ruby.exit();
26
+ }
27
+
28
+ function version() {
29
+ return Ruby.Johnson.VERSION;
30
+ }
@@ -0,0 +1,80 @@
1
+ var Johnson = {};
2
+
3
+ Johnson.Symbol = function(string) {
4
+ this.string = string;
5
+ };
6
+
7
+ Johnson.Symbol.prototype = {
8
+ toString: function() {
9
+ return this.string;
10
+ },
11
+
12
+ inspect: function() {
13
+ return ":" + this.toString();
14
+ }
15
+ };
16
+
17
+ Johnson.symbolCache = {};
18
+
19
+ Johnson.symbolize = function(string) {
20
+ if (!Johnson.symbolCache[string])
21
+ Johnson.symbolCache[string] = new Johnson.Symbol(string);
22
+
23
+ return Johnson.symbolCache[string];
24
+ };
25
+
26
+ Object.defineProperty(String.prototype, "toSymbol", function() {
27
+ return Johnson.symbolize(this.toString());
28
+ }, Object.READ_ONLY | Object.NON_DELETABLE);
29
+
30
+ Johnson.Generator = function(enumerableProxy) {
31
+ this.items = enumerableProxy.toArray();
32
+ this.index = 0;
33
+ };
34
+
35
+ Johnson.Generator.prototype.hasNext = function() {
36
+ var len = this.items.length;
37
+ if (typeof len != 'number') len = this.items.length();
38
+ return this.index < len;
39
+ }
40
+
41
+ Johnson.Generator.prototype.next = function() {
42
+ if (this.hasNext()) {
43
+ return this.items[this.index++];
44
+ }
45
+ throw StopIteration;
46
+ }
47
+
48
+ Johnson.Generator.create = function() {
49
+ return new Johnson.Generator(this);
50
+ }
51
+
52
+ Johnson.required = {};
53
+
54
+ Johnson.require = function(file) {
55
+ file = Ruby.File.join(Ruby.File.dirname(file),
56
+ Ruby.File.basename(file, ".js") + ".js");
57
+
58
+ if(Johnson.required[file]) return false;
59
+
60
+ for(var directory in Ruby["$LOAD_PATH"]) {
61
+ var path = Ruby.File.join(directory, file);
62
+
63
+ if(Ruby.File.send("file?", path)) {
64
+ Johnson.required[file] = true;
65
+ Johnson.runtime.load(path);
66
+
67
+ return true;
68
+ }
69
+ }
70
+
71
+ throw Ruby.LoadError;
72
+ }
73
+
74
+ this.__defineGetter__("__FILE__", function() {
75
+ try { throw new Error; } catch(e) {
76
+ return e.stack.split("\n")[2].split("@")[1].split(":").slice(0,-1).join(":");
77
+ }
78
+ })
79
+
80
+ null; // no need to marshal a result
@@ -0,0 +1,55 @@
1
+ require "generator"
2
+ require "johnson/version"
3
+
4
+ # the command-line option parser and support libs
5
+ require "johnson/cli"
6
+
7
+ # the native SpiderMonkey extension
8
+ require "johnson/spidermonkey"
9
+
10
+ # visitable module and visitors
11
+ require "johnson/visitable"
12
+ require "johnson/visitors"
13
+
14
+ # parse tree nodes
15
+ require "johnson/nodes"
16
+
17
+ # the SpiderMonkey bits written in Ruby
18
+ require "johnson/spidermonkey/runtime"
19
+ require "johnson/spidermonkey/context"
20
+ require "johnson/spidermonkey/js_land_proxy"
21
+ require "johnson/spidermonkey/ruby_land_proxy"
22
+ require "johnson/spidermonkey/mutable_tree_visitor"
23
+ require "johnson/spidermonkey/debugger"
24
+ require "johnson/spidermonkey/immutable_node"
25
+
26
+ # the 'public' interface
27
+ require "johnson/error"
28
+ require "johnson/runtime"
29
+ require "johnson/parser"
30
+
31
+ # make sure all the Johnson JavaScript libs are in the load path
32
+ $LOAD_PATH.push(File.expand_path("#{File.dirname(__FILE__)}/../js"))
33
+
34
+ module Johnson
35
+ PRELUDE = IO.read(File.dirname(__FILE__) + "/../js/johnson/prelude.js")
36
+
37
+ def self.evaluate(expression, vars={})
38
+ runtime = Johnson::Runtime.new
39
+ vars.each { |key, value| runtime[key] = value }
40
+
41
+ runtime.evaluate(expression)
42
+ end
43
+
44
+ def self.parse(js, *args)
45
+ Johnson::Parser.parse(js, *args)
46
+ end
47
+
48
+ ###
49
+ # Create a new runtime and load all +files+. Returns a new Johnson::Runtime.
50
+ def self.load(*files)
51
+ rt = Johnson::Runtime.new
52
+ rt.load(*files)
53
+ rt
54
+ end
55
+ end
@@ -0,0 +1,7 @@
1
+ require "johnson/cli/options"
2
+
3
+ module Johnson #:nodoc:
4
+ module CLI #:nodoc:
5
+ JS = IO.read(File.dirname(__FILE__) + "/../../js/johnson/cli.js")
6
+ end
7
+ end
@@ -0,0 +1,67 @@
1
+ require "optparse"
2
+
3
+ module Johnson #:nodoc:
4
+ module CLI #:nodoc:
5
+ class Options #:nodoc:
6
+ class << self
7
+ alias_method :parse!, :new
8
+ end
9
+
10
+ attr_reader :arguments
11
+ attr_reader :expressions
12
+ attr_reader :files_to_preload
13
+ attr_reader :files_to_evaluate
14
+ attr_reader :load_paths
15
+ attr_reader :paths_to_require
16
+
17
+ def initialize(*args)
18
+ @arguments = []
19
+ @expressions = []
20
+ @load_paths = []
21
+ @files_to_preload = []
22
+ @paths_to_require = []
23
+
24
+ argv = args.flatten
25
+
26
+ if index = argv.index("--")
27
+ @arguments = argv[(index+1)..-1]
28
+ argv = argv[0..index]
29
+ end
30
+
31
+ parser = OptionParser.new do |parser|
32
+ parser.banner = "Usage: johnson [options] [file.js...] [-- jsargs...]"
33
+ parser.version = Johnson::VERSION
34
+
35
+ parser.on("-e [EXPRESSION]", "Evaluate [EXPRESSION] and exit") do |expression|
36
+ @expressions << expression
37
+ end
38
+
39
+ parser.on("-I [DIRECTORY]", "Specify $LOAD_PATH directories") do |dir|
40
+ @load_paths << dir
41
+ end
42
+
43
+ parser.on("-i [FILE]", "Evaluate [FILE] before interaction") do |file|
44
+ @files_to_preload << file
45
+ end
46
+
47
+ parser.on("-r [PATH]", "Require [PATH] before executing") do |path|
48
+ @paths_to_require << path
49
+ end
50
+
51
+ parser.on("-h", "-?", "--help", "Show this message") do
52
+ puts parser
53
+ exit
54
+ end
55
+
56
+ parser.on("-v", "--version", "Show Johnson's version (#{Johnson::VERSION})") do
57
+ puts Johnson::VERSION
58
+ exit
59
+ end
60
+ end
61
+
62
+ parser.parse!(argv)
63
+ @files_to_evaluate = argv.dup
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,4 @@
1
+ module Johnson
2
+ class Error < StandardError
3
+ end
4
+ end
@@ -0,0 +1,7 @@
1
+ require 'johnson/nodes/node'
2
+ require 'johnson/nodes/function'
3
+ require 'johnson/nodes/list'
4
+ require 'johnson/nodes/for'
5
+ require 'johnson/nodes/for_in'
6
+ require 'johnson/nodes/ternary_node'
7
+ require 'johnson/nodes/binary_node'
@@ -0,0 +1,65 @@
1
+ module Johnson
2
+ module Nodes
3
+ BINARY_NODES = %w{
4
+ And
5
+ DoWhile
6
+ Case
7
+ Default
8
+ While
9
+ With
10
+ In
11
+ Switch
12
+ InstanceOf
13
+ AssignExpr
14
+ BracketAccess
15
+ DotAccessor
16
+ LexicalScope
17
+ Equal
18
+ GetterProperty
19
+ Label
20
+ GreaterThan
21
+ LessThan
22
+ GreaterThanOrEqual
23
+ LessThanOrEqual
24
+ NotEqual
25
+ OpAdd
26
+ OpAddEqual
27
+ OpBitAnd
28
+ OpBitAndEqual
29
+ OpBitOr
30
+ OpBitOrEqual
31
+ OpBitXor
32
+ OpBitXorEqual
33
+ OpDivide
34
+ OpDivideEqual
35
+ OpEqual
36
+ OpLShift
37
+ OpLShiftEqual
38
+ OpMod
39
+ OpModEqual
40
+ OpMultiply
41
+ OpMultiplyEqual
42
+ OpRShift
43
+ OpRShiftEqual
44
+ OpSubtract
45
+ OpSubtractEqual
46
+ OpURShift
47
+ OpURShiftEqual
48
+ Or
49
+ Property
50
+ SetterProperty
51
+ StrictEqual
52
+ StrictNotEqual
53
+ }
54
+
55
+ class BinaryNode < Node
56
+ alias :right :value
57
+ attr_accessor :left
58
+ def initialize(line, column, left, right)
59
+ super(line, column, right)
60
+ @left = left
61
+ end
62
+ end
63
+ BINARY_NODES.each { |bn| const_set(bn.to_sym, Class.new(BinaryNode)) }
64
+ end
65
+ end
@@ -0,0 +1,14 @@
1
+ module Johnson
2
+ module Nodes
3
+ class For < Node
4
+ alias :body :value
5
+ attr_accessor :init, :cond, :update
6
+ def initialize(line, column, init, cond, update, body)
7
+ super(line, column, body)
8
+ @init = init
9
+ @cond = cond
10
+ @update = update
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,12 @@
1
+ module Johnson
2
+ module Nodes
3
+ class ForIn < Node
4
+ alias :body :value
5
+ attr_accessor :in_cond
6
+ def initialize(line, column, in_cond, body)
7
+ super(line, column, body)
8
+ @in_cond = in_cond
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ module Johnson
2
+ module Nodes
3
+ class Function < Node
4
+ alias :body :value
5
+ attr_accessor :name, :arguments
6
+ def initialize(line, column, name, arguments, body)
7
+ super(line, column, body)
8
+ @name = name
9
+ @arguments = arguments
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,28 @@
1
+ module Johnson
2
+ module Nodes
3
+ LIST_NODES = %w{
4
+ SourceElements
5
+ VarStatement
6
+ LetStatement
7
+ Comma
8
+ ObjectLiteral
9
+ ArrayLiteral
10
+ New
11
+ FunctionCall
12
+ Import
13
+ Export
14
+ }
15
+ # This is an abstract node used for nodes of list type
16
+ # see SourceElements
17
+ class List < Node
18
+ def initialize(line, column, value = [])
19
+ super
20
+ end
21
+
22
+ def <<(obj)
23
+ self.value << obj
24
+ end
25
+ end
26
+ LIST_NODES.each { |ln| const_set(ln.to_sym, Class.new(List)) }
27
+ end
28
+ end
@@ -0,0 +1,68 @@
1
+ module Johnson
2
+ module Nodes
3
+ SINGLE_NODES = %w{
4
+ BitwiseNot
5
+ Break
6
+ Continue
7
+ Delete
8
+ False
9
+ Name
10
+ Not
11
+ Null
12
+ Number
13
+ Parenthesis
14
+ PostfixIncrement
15
+ PrefixIncrement
16
+ PostfixDecrement
17
+ PrefixDecrement
18
+ Regexp
19
+ Return
20
+ String
21
+ This
22
+ Throw
23
+ True
24
+ Typeof
25
+ UnaryNegative
26
+ UnaryPositive
27
+ Void
28
+ }
29
+ class Node
30
+ include Johnson::Visitable
31
+ include Johnson::Visitors
32
+
33
+ attr_accessor :value
34
+ attr_reader :line, :column
35
+ def initialize(line, column, value)
36
+ @line = line
37
+ @column = column
38
+ @value = value
39
+ end
40
+
41
+ def to_s
42
+ to_sexp.inspect
43
+ end
44
+
45
+ alias_method :inspect, :to_s
46
+
47
+ def to_sexp
48
+ SexpVisitor.new.accept(self)
49
+ end
50
+
51
+ def to_ecma
52
+ EcmaVisitor.new.accept(self)
53
+ end
54
+
55
+ alias_method :to_js, :to_ecma
56
+
57
+ def to_dot
58
+ DotVisitor.new { |d| d.accept(self) }
59
+ end
60
+
61
+ def each(&block)
62
+ EnumeratingVisitor.new(block).accept(self)
63
+ self
64
+ end
65
+ end
66
+ SINGLE_NODES.each { |se| const_set(se.to_sym, Class.new(Node)) }
67
+ end
68
+ end