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,236 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "/../../helper"))
2
+
3
+ module Johnson
4
+ module SpiderMonkey
5
+ class JSLandProxyTest < Johnson::TestCase
6
+ module AModule
7
+ end
8
+
9
+ class AClass
10
+ attr_reader :args
11
+
12
+ def initialize(*args)
13
+ @args = args
14
+ end
15
+ end
16
+
17
+ class Foo
18
+ class Inner
19
+ end
20
+
21
+ def self.bar; 10; end
22
+
23
+ attr_accessor :bar
24
+
25
+ def initialize
26
+ @bar = 10
27
+ end
28
+
29
+ def x2(x)
30
+ x * 2
31
+ end
32
+
33
+ def add(*args)
34
+ args.inject { |m,n| m += n }
35
+ end
36
+
37
+ def xform(arg)
38
+ yield(arg)
39
+ end
40
+ end
41
+
42
+ class Indexable
43
+ def initialize
44
+ @store = {}
45
+ end
46
+
47
+ def [](key)
48
+ @store[key]
49
+ end
50
+
51
+ def []=(key, value)
52
+ @store[key] = value
53
+ end
54
+
55
+ def key?(key)
56
+ @store.key?(key)
57
+ end
58
+ end
59
+
60
+ def setup
61
+ @runtime = Johnson::Runtime.new(Johnson::SpiderMonkey::Runtime)
62
+ end
63
+
64
+ def test_find_constants
65
+ assert_js_equal($LOAD_PATH, "Ruby['$LOAD_PATH']")
66
+ end
67
+
68
+ def test_proxies_get_reused
69
+ @runtime["foo"] = @runtime["bar"] = Foo.new
70
+ assert_js_equal(true, "foo === bar")
71
+ end
72
+
73
+ def test_attributes_get_added_to_ruby
74
+ foo = @runtime["foo"] = Foo.new
75
+ assert !foo.respond_to?(:johnson)
76
+ @runtime.evaluate("foo.johnson = 'explode';")
77
+ assert foo.respond_to?(:johnson)
78
+ assert_equal('explode', foo.johnson)
79
+ assert_js_equal('explode', 'foo.johnson')
80
+ assert !Foo.new.respond_to?(:johnson)
81
+ end
82
+
83
+ def test_assign_function_as_attribute
84
+ foo = @runtime["foo"] = Foo.new
85
+ assert !foo.respond_to?(:johnson)
86
+ f = @runtime.evaluate("foo.johnson = function() { return 'explode'; }")
87
+ assert foo.respond_to?(:johnson)
88
+ assert_equal('explode', foo.johnson)
89
+ assert_js_equal('explode', 'foo.johnson()')
90
+ assert_js_equal(f, 'foo.johnson')
91
+ assert !Foo.new.respond_to?(:johnson)
92
+ end
93
+
94
+ def test_assign_function_as_attribute_with_this
95
+ foo = @runtime["foo"] = Foo.new
96
+ @runtime.evaluate("foo.ex_squared = function(x) { return this.x2(x); }")
97
+ assert_equal(4, foo.ex_squared(2))
98
+ @runtime.evaluate("foo.ex_squared = 20;")
99
+ assert_equal(20, foo.ex_squared)
100
+ end
101
+
102
+ def test_use_ruby_global_object
103
+ func = @runtime.evaluate("function(x) { return this.x2(x); }")
104
+ foo = Foo.new
105
+ assert_equal(4, func.call_using(foo, 2))
106
+ end
107
+
108
+ def test_proxies_roundtrip
109
+ @runtime["foo"] = foo = Foo.new
110
+ assert_same(foo, @runtime.evaluate("foo"))
111
+ end
112
+
113
+ def test_proxies_classes
114
+ @runtime["Foo"] = Foo
115
+ assert_same(Foo, @runtime.evaluate("Foo"))
116
+ end
117
+
118
+ def test_proxies_modules
119
+ @runtime["AModule"] = AModule
120
+ assert_same(AModule, @runtime.evaluate("AModule"))
121
+ end
122
+
123
+ def test_proxies_hashes
124
+ @runtime["beatles"] = { "george" => "guitar" }
125
+ assert_equal("guitar", @runtime.evaluate("beatles['george']"))
126
+ end
127
+
128
+ def test_getter_calls_0_arity_method
129
+ @runtime["foo"] = Foo.new
130
+ assert_js_equal(10, "foo.bar")
131
+ end
132
+
133
+ def test_getter_calls_indexer
134
+ @runtime["foo"] = indexable = Indexable.new
135
+ indexable["bar"] = 10
136
+
137
+ assert_js_equal(10, "foo.bar")
138
+ end
139
+
140
+ def test_getter_returns_nil_for_unknown_properties
141
+ @runtime["foo"] = Foo.new
142
+ assert_js_equal(nil, "foo.quux")
143
+ end
144
+
145
+ def test_setter_calls_key=
146
+ @runtime["foo"] = foo = Foo.new
147
+ assert_js_equal(42, "foo.bar = 42")
148
+ assert_equal(42, foo.bar)
149
+ end
150
+
151
+ def test_setter_calls_indexer
152
+ @runtime["foo"] = indexable = Indexable.new
153
+ assert_js_equal(42, "foo.monkey = 42")
154
+ assert_equal(42, indexable["monkey"])
155
+ end
156
+
157
+ def test_calls_attr_reader
158
+ @runtime["foo"] = Foo.new
159
+ assert_js_equal(10, "foo.bar")
160
+ end
161
+
162
+ def test_calls_1_arity_method
163
+ @runtime["foo"] = Foo.new
164
+ assert_js_equal(10, "foo.x2(5)")
165
+ end
166
+
167
+ def test_calls_n_arity_method
168
+ @runtime["foo"] = Foo.new
169
+ assert_js_equal(10, "foo.add(4, 2, 2, 1, 1)")
170
+ end
171
+
172
+ def test_calls_class_method
173
+ @runtime["Foo"] = Foo
174
+ assert_js_equal(Foo.bar, "Foo.bar()")
175
+ end
176
+
177
+ def test_accesses_consts
178
+ @runtime["Foo"] = Foo
179
+ assert_same(Foo::Inner, @runtime.evaluate("Foo.Inner"))
180
+ end
181
+
182
+ def test_can_create_new_instances_in_js
183
+ @runtime["AClass"] = AClass
184
+ foo = @runtime.evaluate("AClass.new()")
185
+ assert_kind_of(AClass, foo)
186
+ end
187
+
188
+ def test_class_proxies_provide_a_ctor
189
+ @runtime["AClass"] = AClass
190
+ foo = @runtime.evaluate("new AClass()")
191
+ assert_kind_of(AClass, foo)
192
+
193
+ bar = @runtime.evaluate("new AClass(1, 2, 3)")
194
+ assert_equal([1, 2, 3], bar.args)
195
+ end
196
+
197
+ def test_dwims_blocks
198
+ @runtime["foo"] = Foo.new
199
+ assert_js_equal(4, "foo.xform(2, function(x) { return x * 2 })")
200
+ end
201
+
202
+ def test_dwims_blocks_for_0_arity_methods
203
+ @runtime[:arr] = [1, 2, 3]
204
+ assert_js_equal([2, 4, 6], "arr.collect(function(x) { return x * 2 })")
205
+ end
206
+
207
+ def test_scope_for_with
208
+ assert_js_equal(84, "with (rb) { b + b }", :b => 1, :rb => { "b" => 42 })
209
+ end
210
+
211
+ def test_lambdas_for_with
212
+ assert_js_equal(84, "with (rb) { b(42) }", :rb => { "b" => lambda { |x| x * 2 } })
213
+ end
214
+
215
+ class MethodForWith
216
+ def b(x); x * 2; end
217
+ end
218
+
219
+ def test_method_for_with
220
+ assert_js_equal(84, "with (rb) { b(42) }", :rb => MethodForWith.new)
221
+ end
222
+
223
+ def test_raises_string_to_ruby
224
+ assert_raise(Johnson::Error) { @runtime.evaluate("throw 'my string';") }
225
+ end
226
+
227
+ def test_raises_object_to_ruby
228
+ assert_raise(Johnson::Error) { @runtime.evaluate("throw { bad: true };") }
229
+ end
230
+
231
+ def test_raises_exception_to_ruby
232
+ assert_raise(Johnson::Error) { @runtime.evaluate("undefinedValue();") }
233
+ end
234
+ end
235
+ end
236
+ end
@@ -0,0 +1,240 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "/../../helper"))
2
+
3
+ module Johnson
4
+ module SpiderMonkey
5
+ class RubyLandProxyTest < Johnson::TestCase
6
+ def setup
7
+ @runtime = Johnson::Runtime.new(Johnson::SpiderMonkey::Runtime)
8
+ end
9
+
10
+ def test_constructing_a_proxy_directly_asplodes
11
+ assert_raise(Johnson::Error) { Johnson::SpiderMonkey::RubyLandProxy.new }
12
+ end
13
+
14
+ def test_objects_get_wrapped_as_proxies
15
+ assert_kind_of(Johnson::SpiderMonkey::RubyLandProxy, @runtime.evaluate("x = {}"))
16
+ assert_kind_of(Johnson::SpiderMonkey::RubyLandProxy, @runtime.evaluate("new Object()"))
17
+ end
18
+
19
+ def test_proxies_get_unwrapped_when_roundtripping
20
+ proxy = @runtime.evaluate("x = {}")
21
+ @runtime["y"] = proxy
22
+ assert(@runtime.evaluate("x === y"))
23
+ end
24
+
25
+ def test_reponds_to?
26
+ proxy = @runtime.evaluate("x = {}")
27
+ assert ! proxy.respond_to?(:foo)
28
+ assert ! proxy.respond_to?("foo")
29
+ end
30
+
31
+ def test_array_indexable
32
+ proxy = @runtime.evaluate("var x = [1,2,3]; x")
33
+ assert_equal(1, proxy[0])
34
+ assert_equal(1, proxy['0'])
35
+
36
+ proxy[0] = 10
37
+ assert_js_equal(10, 'x[0]')
38
+ end
39
+
40
+ def test_hash_indexable
41
+ proxy = @runtime.evaluate("var x = { 0: 1, 1: 2, 2: 3 }; x")
42
+ assert_equal(1, proxy[0])
43
+ assert_equal(1, proxy['0'])
44
+
45
+ proxy[0] = 10
46
+ assert_js_equal(10, 'x[0]')
47
+ end
48
+
49
+ def test_functions_get_wrapped_as_proxies
50
+ f = @runtime.evaluate("function() {}")
51
+ assert_kind_of(Johnson::SpiderMonkey::RubyLandProxy, f)
52
+ assert(f.function?)
53
+ end
54
+
55
+ def test_function?
56
+ f = @runtime.evaluate("function() {}")
57
+ assert_kind_of(Johnson::SpiderMonkey::RubyLandProxy, f)
58
+ assert(f.function?)
59
+
60
+ f = @runtime.evaluate("new Object()")
61
+ assert_kind_of(Johnson::SpiderMonkey::RubyLandProxy, f)
62
+ assert(!f.function?)
63
+ end
64
+
65
+ def test_calling_non_functions_complains
66
+ assert_raise(RuntimeError) { @runtime.evaluate("new Object()").call }
67
+ end
68
+
69
+ def test_functions_can_be_called
70
+ f = @runtime.evaluate("function() { return 42; }")
71
+ assert_equal(42, f.call)
72
+ end
73
+
74
+ def test_functions_can_be_called_with_args
75
+ f = @runtime.evaluate("function(x) { return x * 2; }")
76
+ assert_equal(84, f.call(42))
77
+ end
78
+
79
+ def test_functions_can_be_used_as_procs
80
+ f = @runtime.evaluate("function(x) { return x * 2; }")
81
+ a = [1, 2, 3]
82
+
83
+ assert_equal([2, 4, 6], a.collect(&f))
84
+ end
85
+
86
+ def test_function_proxies_are_called_with_a_global_this
87
+ f = @runtime.evaluate("x = 42; function() { return this.x; }")
88
+ assert_equal(42, f.call)
89
+ end
90
+
91
+ def test_can_be_indexed_by_string
92
+ proxy = @runtime.evaluate("x = { foo: 42 }")
93
+ assert_kind_of(Johnson::SpiderMonkey::RubyLandProxy, proxy)
94
+
95
+ assert_equal(42, proxy["foo"])
96
+
97
+ proxy["foo"] = 99
98
+ proxy["bar"] = 42
99
+
100
+ assert_js_equal(99, "x.foo")
101
+ assert_equal(99, proxy["foo"])
102
+ assert_equal(42, proxy["bar"])
103
+ end
104
+
105
+ def test_multilevel_indexing_works
106
+ proxy = @runtime.evaluate("x = { foo: { bar: 42 , baz: function() { return 42 } } }")
107
+ assert_equal(42, proxy["foo"]["bar"])
108
+ assert_equal(42, proxy["foo"]["baz"].call)
109
+ end
110
+
111
+ def test_respond_to_works
112
+ proxy = @runtime.evaluate("x = { foo: 42 }")
113
+ assert(!proxy.respond_to?(:bar))
114
+ assert(proxy.respond_to?(:foo))
115
+ end
116
+
117
+ def test_respond_to_always_returns_true_for_assignment
118
+ proxy = @runtime.evaluate("x = {}")
119
+ assert(proxy.respond_to?(:bar=))
120
+ end
121
+
122
+ def test_accessor
123
+ proxy = @runtime.evaluate("x = { foo: 42 }")
124
+ assert_equal(42, proxy.foo)
125
+ end
126
+
127
+ def test_mutator
128
+ proxy = @runtime.evaluate("x = {}")
129
+ proxy.foo = 42
130
+
131
+ assert_js_equal(42, "x.foo")
132
+ assert_equal(42, proxy.foo)
133
+ end
134
+
135
+ def test_method_with_no_arguments
136
+ proxy = @runtime.evaluate("x = { foo: function() { return 42 } }")
137
+ assert_equal(42, proxy.foo)
138
+ end
139
+
140
+ def test_method_with_one_argument
141
+ proxy = @runtime.evaluate("f = { f: function(x) { return x * 2 } }")
142
+ assert_equal(84, proxy.f(42))
143
+ end
144
+
145
+ def test_method_with_multiple_arguments
146
+ proxy = @runtime.evaluate("x = { add: function(x, y) { return x + y } }")
147
+ assert_equal(42, proxy.add(40, 2))
148
+ end
149
+
150
+ def test_supports_each_on_arrays
151
+ proxy = @runtime.evaluate("[1, 2, 3]")
152
+ values = []
153
+
154
+ proxy.each { |n| values << n }
155
+ assert_equal([1, 2, 3], values)
156
+ end
157
+
158
+ def test_supports_each_on_things_that_arent_arrays
159
+ proxy = @runtime.evaluate("x = { foo: 'fooval', bar: 'barval' }; x[0] = 42; x")
160
+ values = {}
161
+
162
+ proxy.each { |k, v| values[k] = v }
163
+ assert_equal({ 'foo' => 'fooval', 'bar' => 'barval', 0 => 42 }, values)
164
+ end
165
+
166
+ def test_each_passes_an_exception
167
+ proxy = @runtime.evaluate("x = { foo: 'fooval', bar: 'barval' }; x[0] = 42; x")
168
+ values = {}
169
+
170
+ assert_raise(RuntimeError) do
171
+ proxy.each do |k, v|
172
+ values[k] = v
173
+ raise "splat" if values.keys.size == 2
174
+ end
175
+ end
176
+ assert_equal({ 'foo' => 'fooval', 'bar' => 'barval' }, values)
177
+ end
178
+
179
+ def test_is_enumerable
180
+ proxy = @runtime.evaluate("[1, 2, 3]")
181
+ assert_kind_of(Enumerable, proxy)
182
+
183
+ assert_equal([2, 4, 6], proxy.collect { |n| n * 2 })
184
+ end
185
+
186
+ def test_has_a_length
187
+ proxy = @runtime.evaluate("[1, 2, 3]")
188
+ assert_equal(3, proxy.length)
189
+ end
190
+
191
+ def test_length_is_aliased_as_size
192
+ proxy = @runtime.evaluate("[1, 2, 3]")
193
+ assert_equal(3, proxy.size)
194
+ end
195
+
196
+ def test_length_for_arrays_ignores_non_numeric_properties
197
+ proxy = @runtime.evaluate("x = [1, 2, 3]; x['foo'] = 'bar'; x")
198
+ assert_equal(3, proxy.length)
199
+ end
200
+
201
+ def test_length_for_objects_includes_all_properties
202
+ proxy = @runtime.evaluate("x = { foo: 'foo', bar: 'bar', 0: 42 }")
203
+ assert_equal(3, proxy.length)
204
+ end
205
+
206
+ def test_raises_in_js
207
+ err = RuntimeError.new("an exception")
208
+ asplode = lambda { raise err }
209
+ assert_js_equal(err, "x = null; try { foo(); } catch(ex) { x = ex; }; x", :foo => asplode)
210
+ end
211
+
212
+ def test_array_multiple_assignment
213
+ a = @runtime.evaluate("[1,2,3]")
214
+ x, y, z = a
215
+
216
+ assert_equal(1, x)
217
+ assert_equal(2, y)
218
+ assert_equal(3, z)
219
+ end
220
+
221
+ # FIXME: If you uncomment this test, we get this error:
222
+ #
223
+ # JS API usage error: the address passed to JS_AddNamedRoot currently holds an
224
+ # invalid jsval. This is usually caused by a missing call to JS_RemoveRoot.
225
+ # The root's name is "ruby_land_proxy.c[210]:native_call: proxy_value".
226
+ # Assertion failure: root_points_to_gcArenaList, at jsgc.c:2618
227
+ #
228
+ # WTF?
229
+ #
230
+ # -Aaron
231
+ #
232
+ #def test_throwing_in_js_goes_to_ruby
233
+ # func = @runtime.evaluate('function () { throw "foo"; }')
234
+ # assert_raise(Johnson::Error) {
235
+ # func.call
236
+ # }
237
+ #end
238
+ end
239
+ end
240
+ end