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,15 @@
1
+ module Johnson
2
+ module Visitors
3
+ class EnumeratingVisitor < Visitor
4
+ attr_accessor :block
5
+ def initialize(block)
6
+ @block = block
7
+ end
8
+
9
+ superclass.instance_methods.each do |method|
10
+ next unless method.to_s =~ /^visit_/
11
+ eval("def #{method}(o); block.call(o); super; end")
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,174 @@
1
+ module Johnson
2
+ module Visitors
3
+ class SexpVisitor
4
+ def visit_SourceElements(o)
5
+ o.value.map { |x| x.accept(self) }
6
+ end
7
+
8
+ {
9
+ 'VarStatement' => :var,
10
+ 'LetStatement' => :let,
11
+ 'Comma' => :comma,
12
+ 'ObjectLiteral' => :object,
13
+ 'ArrayLiteral' => :array,
14
+ 'New' => :new,
15
+ 'FunctionCall' => :function_call,
16
+ 'Import' => :import,
17
+ 'Export' => :export,
18
+ }.each do |type,sym|
19
+ define_method(:"visit_#{type}") do |o|
20
+ [sym, o.value.map { |x| x.accept(self) }]
21
+ end
22
+ end
23
+
24
+ {
25
+ 'Name' => :name,
26
+ 'Number' => :lit,
27
+ 'Regexp' => :lit,
28
+ 'String' => :str
29
+ }.each do |type,sym|
30
+ define_method(:"visit_#{type}") do |o|
31
+ [sym, o.value]
32
+ end
33
+ end
34
+
35
+ {
36
+ 'Break' => :break,
37
+ 'Continue' => :continue,
38
+ 'Null' => :nil,
39
+ 'True' => :true,
40
+ 'False' => :false,
41
+ 'This' => :this,
42
+ }.each do |type,sym|
43
+ define_method(:"visit_#{type}") do |o|
44
+ [sym]
45
+ end
46
+ end
47
+
48
+ def visit_For(o)
49
+ [ :for,
50
+ o.init && o.init.accept(self),
51
+ o.cond && o.cond.accept(self),
52
+ o.update && o.update.accept(self),
53
+ o.body.accept(self)
54
+ ]
55
+ end
56
+
57
+ def visit_ForIn(o)
58
+ [ :for_in,
59
+ o.in_cond.accept(self),
60
+ o.body.accept(self)
61
+ ]
62
+ end
63
+
64
+ def visit_Try(o)
65
+ [ :try,
66
+ o.cond.accept(self),
67
+ o.b_then ? o.b_then.map { |x| x.accept(self) } : nil,
68
+ o.b_else ? o.b_else.accept(self) : nil
69
+ ]
70
+ end
71
+
72
+ {
73
+ 'Ternary' => :ternary,
74
+ 'If' => :if,
75
+ 'Catch' => :catch,
76
+ }.each do |node,ident|
77
+ define_method(:"visit_#{node}") do |o|
78
+ [ ident,
79
+ o.cond.accept(self),
80
+ o.b_then ? o.b_then.accept(self) : nil,
81
+ o.b_else ? o.b_else.accept(self) : nil
82
+ ]
83
+ end
84
+ end
85
+ ### UNARY NODES ###
86
+ {
87
+ 'Throw' => :throw,
88
+ 'Delete' => :delete,
89
+ 'Void' => :void,
90
+ 'Typeof' => :typeof,
91
+ 'PrefixDecrement' => :prefix_dec,
92
+ 'PostfixDecrement' => :postfix_dec,
93
+ 'PrefixIncrement' => :prefix_inc,
94
+ 'PostfixIncrement' => :postfix_inc,
95
+ 'Parenthesis' => :paren,
96
+ 'Return' => :return,
97
+ 'UnaryNegative' => :u_neg,
98
+ 'UnaryPositive' => :u_pos,
99
+ 'BitwiseNot' => :bitwise_not,
100
+ 'Not' => :not,
101
+ }.each do |node,ident|
102
+ define_method(:"visit_#{node}") do |o|
103
+ [ident, o.value && o.value.accept(self)]
104
+ end
105
+ end
106
+
107
+ ### FUNCTION NODES ###
108
+ def visit_Function(o)
109
+ [:func_expr, o.name, o.arguments, o.body.accept(self)]
110
+ end
111
+
112
+ ### BINARY NODES ###
113
+ {
114
+ 'In' => :in,
115
+ 'InstanceOf' => :instanceof,
116
+ 'Switch' => :switch,
117
+ 'Case' => :case,
118
+ 'Default' => :default,
119
+ 'With' => :with,
120
+ 'DoWhile' => :do_while,
121
+ 'While' => :while,
122
+ 'Property' => :property,
123
+ 'GreaterThanOrEqual' => :gt_equal,
124
+ 'LessThanOrEqual' => :lt_equal,
125
+ 'GreaterThan' => :gt,
126
+ 'LessThan' => :lt,
127
+ 'GetterProperty' => :getter,
128
+ 'SetterProperty' => :setter,
129
+ 'OpEqual' => :op_equal,
130
+ 'OpMultiply' => :op_multiply,
131
+ 'OpMultiplyEqual' => :op_multiply_equal,
132
+ 'OpAddEqual' => :op_add_equal,
133
+ 'OpSubtractEqual' => :op_subtract_equal,
134
+ 'OpAdd' => :op_add,
135
+ 'OpSubtract' => :op_subtract,
136
+ 'OpDivideEqual' => :op_divide_equal,
137
+ 'OpDivide' => :op_divide,
138
+ 'OpLShiftEqual' => :op_lshift_equal,
139
+ 'OpRShiftEqual' => :op_rshift_equal,
140
+ 'OpURShiftEqual' => :op_urshift_equal,
141
+ 'OpLShift' => :op_lshift,
142
+ 'OpRShift' => :op_rshift,
143
+ 'OpURShift' => :op_urshift,
144
+ 'OpBitAndEqual' => :op_bitand_equal,
145
+ 'OpBitAnd' => :op_bitand,
146
+ 'OpBitXorEqual' => :op_bitxor_equal,
147
+ 'OpBitOrEqual' => :op_bitor_equal,
148
+ 'OpBitXor' => :op_bitxor,
149
+ 'OpBitOr' => :op_bitor,
150
+ 'OpModEqual' => :op_mod_equal,
151
+ 'OpMod' => :op_mod,
152
+ 'AssignExpr' => :assign,
153
+ 'BracketAccess' => :bracket_access,
154
+ 'DotAccessor' => :dot_accessor,
155
+ 'LexicalScope' => :lexical_scope,
156
+ 'Equal' => :equal,
157
+ 'NotEqual' => :not_equal,
158
+ 'Or' => :or,
159
+ 'And' => :and,
160
+ 'StrictEqual' => :strict_equal,
161
+ 'StrictNotEqual' => :strict_not_equal,
162
+ 'Label' => :label,
163
+ }.each do |node,ident|
164
+ define_method(:"visit_#{node}") do |o|
165
+ [ident, o.left && o.left.accept(self), o.right &&o.right.accept(self)]
166
+ end
167
+ end
168
+
169
+ def accept(target)
170
+ target.accept(self)
171
+ end
172
+ end
173
+ end
174
+ end
@@ -0,0 +1,91 @@
1
+ module Johnson
2
+ module Visitors
3
+ class Visitor
4
+ def visit_SourceElements(o)
5
+ o.value.each { |x| x.accept(self) }
6
+ end
7
+
8
+ def visit_LexicalScope(o)
9
+ o.right.accept(self)
10
+ end
11
+
12
+ %w{
13
+ ArrayLiteral Comma Export FunctionCall Import New ObjectLiteral
14
+ VarStatement LetStatement
15
+ }.each do |type|
16
+ define_method(:"visit_#{type}") do |o|
17
+ o.value.each { |x| x.accept(self) }
18
+ end
19
+ end
20
+
21
+ %w{
22
+ Name Number Regexp String
23
+ Break Continue False Null This True
24
+ }.each do |type|
25
+ define_method(:"visit_#{type}") do |o|
26
+ end
27
+ end
28
+
29
+ def visit_For(o)
30
+ o.init && o.init.accept(self)
31
+ o.cond && o.cond.accept(self)
32
+ o.update && o.update.accept(self)
33
+ o.body.accept(self)
34
+ end
35
+
36
+ def visit_ForIn(o)
37
+ o.in_cond.accept(self)
38
+ o.body.accept(self)
39
+ end
40
+
41
+ def visit_Try(o)
42
+ o.cond.accept(self)
43
+ o.b_then && o.b_then.map { |x| x.accept(self) }
44
+ o.b_else && o.b_else.accept(self)
45
+ end
46
+
47
+ %w{ Ternary If Catch }.each do |node|
48
+ define_method(:"visit_#{node}") do |o|
49
+ o.cond.accept(self)
50
+ o.b_then && o.b_then.accept(self)
51
+ o.b_else && o.b_else.accept(self)
52
+ end
53
+ end
54
+
55
+ ### UNARY NODES ###
56
+ %w{ BitwiseNot Delete Not Parenthesis PostfixDecrement PostfixIncrement
57
+ PrefixDecrement PrefixIncrement Return Throw Typeof UnaryNegative
58
+ UnaryPositive Void
59
+ }.each do |node|
60
+ define_method(:"visit_#{node}") do |o|
61
+ o.value && o.value.accept(self)
62
+ end
63
+ end
64
+
65
+ ### FUNCTION NODES ###
66
+ def visit_Function(o)
67
+ o.body.accept(self)
68
+ end
69
+
70
+ ### BINARY NODES ###
71
+ %w{ And AssignExpr BracketAccess Case Default DoWhile DotAccessor Equal
72
+ GetterProperty GreaterThan GreaterThanOrEqual In InstanceOf Label
73
+ LessThan LessThanOrEqual NotEqual OpAdd OpAddEqual OpBitAnd
74
+ OpBitAndEqual OpBitOr OpBitOrEqual OpBitXor OpBitXorEqual OpDivide
75
+ OpDivideEqual OpEqual OpLShift OpLShiftEqual OpMod OpModEqual
76
+ OpMultiply OpMultiplyEqual OpRShift OpRShiftEqual OpSubtract
77
+ OpSubtractEqual OpURShift OpURShiftEqual Or Property SetterProperty
78
+ StrictEqual StrictNotEqual Switch While With
79
+ }.each do |node|
80
+ define_method(:"visit_#{node}") do |o|
81
+ o.left && o.left.accept(self)
82
+ o.right && o.right.accept(self)
83
+ end
84
+ end
85
+
86
+ def accept(target)
87
+ target.accept(self)
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,37 @@
1
+ require 'johnson'
2
+
3
+ class EJSHandler < ActionView::TemplateHandler
4
+ class EJSProxy # :nodoc:
5
+ def initialize(controller)
6
+ @controller = controller
7
+ end
8
+
9
+ def key?(pooperty)
10
+ @controller.instance_variables.include?("@#{pooperty}")
11
+ end
12
+
13
+ def [](pooperty)
14
+ @controller.instance_variable_get("@#{pooperty}")
15
+ end
16
+
17
+ def []=(pooperty, value)
18
+ @controller.instance_variable_set("@#{pooperty}", value)
19
+ end
20
+ end
21
+
22
+ def initialize(view)
23
+ @view = view
24
+ end
25
+
26
+ def render(template)
27
+ ctx = Johnson::Runtime.new
28
+ ctx.evaluate('Johnson.require("johnson/template");')
29
+ ctx['template'] = template.source
30
+ ctx['controller'] = @view.controller
31
+ ctx['at'] = EJSProxy.new(@view.controller)
32
+
33
+ ctx.evaluate('Johnson.templatize(template).call(at)')
34
+ end
35
+ end
36
+
37
+ ActionView::Template.register_template_handler("ejs", EJSHandler)
@@ -0,0 +1,9 @@
1
+ namespace :gem do
2
+ "Generate a VERSION.timestamp gemspec."
3
+ task :spec do
4
+ File.open("#{HOE.name}.gemspec", "w") do |f|
5
+ HOE.spec.version = "#{HOE.version}.#{Time.now.strftime("%Y%m%d%H%M%S")}"
6
+ f.puts(HOE.spec.to_ruby)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,37 @@
1
+ require "erb"
2
+
3
+ GENERATED_NODE = "ext/spidermonkey/immutable_node.c"
4
+ HOE.clean_globs << GENERATED_NODE
5
+ task :check_manifest => GENERATED_NODE
6
+
7
+ def jsops
8
+ ops = []
9
+ File.open("vendor/spidermonkey/jsopcode.tbl", "rb") { |f|
10
+ f.each_line do |line|
11
+ if line =~ /^OPDEF\((\w+),/
12
+ ops << $1
13
+ end
14
+ end
15
+ }
16
+ ops
17
+ end
18
+
19
+ def tokens
20
+ toks = []
21
+ File.open("vendor/spidermonkey/jsscan.h", "rb") { |f|
22
+ f.each_line do |line|
23
+ line.scan(/TOK_\w+/).each do |token|
24
+ next if token == "TOK_ERROR"
25
+ toks << token
26
+ end
27
+ end
28
+ }
29
+ toks.uniq
30
+ end
31
+
32
+ file GENERATED_NODE => "ext/spidermonkey/immutable_node.c.erb" do |t|
33
+ template = ERB.new(File.open(t.prerequisites.first, "rb") { |x| x.read })
34
+ File.open(GENERATED_NODE, "wb") { |f| f.write template.result(binding) }
35
+ end
36
+
37
+ file "ext/spidermonkey/extconf.rb" => GENERATED_NODE
@@ -0,0 +1,36 @@
1
+ namespace :test do
2
+ # partial-loads-ok and undef-value-errors necessary to ignore
3
+ # spurious (and eminently ignorable) warnings from the ruby
4
+ # interpreter
5
+ VALGRIND_BASIC_OPTS = "--num-callers=50 --error-limit=no --partial-loads-ok=yes --undef-value-errors=no"
6
+
7
+ desc "run test suite under valgrind with basic ruby options"
8
+ task :valgrind => :compile do
9
+ cmdline = "valgrind #{VALGRIND_BASIC_OPTS} ruby #{HOE.make_test_cmd}"
10
+ puts cmdline
11
+ system cmdline
12
+ end
13
+
14
+ desc "run test suite under valgrind with memory-fill ruby options"
15
+ task :valgrind_mem => :compile do
16
+ # fill malloced memory with "m" and freed memory with "f"
17
+ cmdline = "valgrind #{VALGRIND_BASIC_OPTS} --freelist-vol=100000000 --malloc-fill=6D --free-fill=66 ruby #{HOE.make_test_cmd}"
18
+ puts cmdline
19
+ system cmdline
20
+ end
21
+
22
+ desc "run test suite under valgrind with memory-zero ruby options"
23
+ task :valgrind_mem0 => :compile do
24
+ # fill malloced and freed memory with 0
25
+ cmdline = "valgrind #{VALGRIND_BASIC_OPTS} --freelist-vol=100000000 --malloc-fill=00 --free-fill=00 ruby #{HOE.make_test_cmd}"
26
+ puts cmdline
27
+ system cmdline
28
+ end
29
+
30
+ desc "run test suite under gdb"
31
+ task :gdb => :compile do
32
+ cmdline = "gdb --args ruby #{HOE.make_test_cmd}"
33
+ puts cmdline
34
+ system cmdline
35
+ end
36
+ end
@@ -0,0 +1,20 @@
1
+ namespace :vendor do
2
+ namespace :spidermonkey do
3
+ desc "Clean the vendored SpiderMonkey."
4
+ task :clean do
5
+ Dir.chdir "vendor/spidermonkey" do
6
+ sh "make clean -f Makefile.ref" unless Dir["**/libjs.a"].empty?
7
+ end
8
+ end
9
+
10
+ desc "Compile the vendored SpiderMonkey."
11
+ task :compile do
12
+ Dir.chdir "vendor/spidermonkey" do
13
+ sh "make -f Makefile.ref" if Dir["**/libjs.a"].empty?
14
+ end
15
+ end
16
+ end
17
+ end
18
+
19
+ task :clean => "vendor:spidermonkey:clean"
20
+ file "ext/spidermonkey/extconf.rb" => "vendor:spidermonkey:compile"
@@ -0,0 +1,55 @@
1
+ require "rubygems"
2
+ require "test/unit"
3
+
4
+ %w(../lib ../ext/spidermonkey).each do |path|
5
+ $LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), path)))
6
+ end
7
+
8
+ require "johnson"
9
+
10
+ module Johnson
11
+ class TestCase < Test::Unit::TestCase
12
+ class TestLogger
13
+ def debug(string)
14
+ puts string
15
+ end
16
+ end
17
+
18
+ undef :default_test if method_defined? :default_test
19
+
20
+ def setup
21
+ @runtime = Johnson::Runtime.new
22
+ #@runtime.delegate.gc_zeal = 2
23
+ #@runtime.delegate.debugger = Johnson::SpiderMonkey::Debugger.new(TestLogger.new)
24
+ end
25
+
26
+ def assert_js(expression, options={})
27
+ runtime = options[:runtime] || @runtime
28
+ assert(runtime.evaluate(expression), "Expected JS expression [#{expression}] to be true.")
29
+ end
30
+
31
+ def assert_js_equal(expected, expression, options={})
32
+ runtime = options.delete(:runtime) || @runtime
33
+ options.each { |k, v| runtime[k.to_s] = v }
34
+ assert_equal(expected, runtime.evaluate(expression))
35
+ end
36
+ end
37
+
38
+ class NodeTestCase < Test::Unit::TestCase
39
+ include Johnson::Nodes
40
+
41
+ undef :default_test if method_defined? :default_test
42
+
43
+ def setup
44
+ @parser = Johnson::Parser
45
+ end
46
+
47
+ def assert_sexp(expected, actual)
48
+ assert_equal(expected, actual.to_sexp)
49
+ end
50
+
51
+ def assert_ecma(expected, actual)
52
+ assert_equal(expected, actual.to_ecma)
53
+ end
54
+ end
55
+ end