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,42 @@
1
+ require "rubygems"
2
+ require "hoe"
3
+ require "rake/extensiontask"
4
+
5
+ require "./lib/johnson/version.rb"
6
+
7
+ HOE = Hoe.new "johnson", Johnson::VERSION do |p|
8
+ p.developer "John Barnette", "jbarnette@rubyforge.org"
9
+ p.developer "Aaron Patterson", "aaron.patterson@gmail.com"
10
+ p.developer "Yehuda Katz", "wycats@gmail.com"
11
+ p.developer "Matthew Draper", "matthew@trebex.net"
12
+
13
+ p.history_file = "CHANGELOG.rdoc"
14
+ p.readme_file = "README.rdoc"
15
+ p.summary = "Johnson wraps JavaScript in a loving Ruby embrace."
16
+ p.url = "http://github.com/jbarnette/johnson/wikis"
17
+
18
+ p.extra_rdoc_files = [p.readme_file]
19
+ p.test_globs = %w(test/**/*_test.rb)
20
+
21
+ p.clean_globs << "lib/johnson/spidermonkey.bundle"
22
+ p.clean_globs << "tmp"
23
+ p.clean_globs << "vendor/spidermonkey/**/*.OBJ"
24
+ p.clean_globs << "ext/**/*.{o,so,bundle,a,log}"
25
+
26
+ p.extra_deps << "rake"
27
+ p.extra_dev_deps << "rake-compiler"
28
+ p.spec_extras = { :extensions => %w(Rakefile) }
29
+ end
30
+
31
+ Rake::ExtensionTask.new "spidermonkey", HOE.spec do |ext|
32
+ ext.lib_dir = "lib/johnson"
33
+ end
34
+
35
+ task :test => :compile
36
+
37
+ Dir["lib/tasks/*.rake"].each { |f| load f }
38
+
39
+ # HACK: If Rake is running as part of the gem install, clear out the
40
+ # default task and make the extensions compile instead.
41
+
42
+ Rake::Task[:default].prerequisites.replace %w(compile) if ENV["RUBYARCHDIR"]
@@ -0,0 +1,108 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift(File.expand_path(File.join(File.dirname(__FILE__), "..", "lib")))
4
+
5
+ require "readline"
6
+ require "johnson"
7
+
8
+ RUNTIME = js = Johnson::Runtime.new
9
+ RUNTIME.evaluate(Johnson::CLI::JS)
10
+
11
+ EXIT_VERBS = [nil] + %w(exit quit)
12
+
13
+ local_binding = binding
14
+ ruby_readline = []
15
+
16
+ def copy_history
17
+ new_history = []
18
+ until Readline::HISTORY.empty?
19
+ new_history.push(Readline::HISTORY.pop)
20
+ end
21
+ new_history
22
+ end
23
+
24
+ def paste_history(old_history)
25
+ until old_history.empty?
26
+ Readline::HISTORY << old_history.pop
27
+ end
28
+ end
29
+
30
+ def handle_exit(input)
31
+ if EXIT_VERBS.include?(input)
32
+ puts if input.nil?
33
+ exit
34
+ end
35
+ end
36
+
37
+ def rescued(&block)
38
+ yield
39
+ rescue Exception => e
40
+ exit if SystemExit === e
41
+
42
+ puts e.message
43
+ puts e.backtrace.reject { |l| l =~ /bin\/johnson/ }
44
+ end
45
+
46
+ def eval_in_js(expression)
47
+ rescued { puts "=> " + RUNTIME.evaluate(expression, "(console)").inspect }
48
+ end
49
+
50
+ def eval_in_ruby(expression, bind_to)
51
+ rescued { puts "=> " + eval(expression, bind_to).inspect }
52
+ end
53
+
54
+ options = Johnson::CLI::Options.parse!(ARGV)
55
+
56
+ options.load_paths.each { |d| $LOAD_PATH << d }
57
+ options.paths_to_require.each { |p| RUNTIME.evaluate("Johnson.require('#{p}')") }
58
+ options.files_to_preload.each { |f| RUNTIME.load(f) }
59
+
60
+ unless options.expressions.empty?
61
+ options.expressions.each { |e| RUNTIME.evaluate(e, '-e') }
62
+ exit if options.files_to_evaluate.empty?
63
+ end
64
+
65
+ unless options.files_to_evaluate.empty?
66
+ RUNTIME[:arguments] = options.arguments
67
+
68
+ options.files_to_evaluate.each do |file|
69
+ RUNTIME.load(file)
70
+ end
71
+
72
+ exit
73
+ end
74
+
75
+ loop do
76
+ input = Readline.readline("js> ", true)
77
+ handle_exit(input)
78
+
79
+ if input =~ /^rb\s+(.+)$/
80
+ eval_in_ruby($1, local_binding)
81
+ next
82
+ end
83
+
84
+ if input == "rb"
85
+ js_readline = copy_history
86
+ paste_history(ruby_readline)
87
+
88
+ loop do
89
+ input = Readline.readline("rb> ", true)
90
+ handle_exit(input)
91
+
92
+ break if input == "js"
93
+
94
+ if input =~ /^js\s+(.+)$/
95
+ eval_in_js($1)
96
+ next
97
+ end
98
+
99
+ eval_in_ruby(input, local_binding)
100
+ end
101
+
102
+ ruby_readline = copy_history
103
+ paste_history(js_readline)
104
+ next
105
+ end
106
+
107
+ eval_in_js(input)
108
+ end
@@ -0,0 +1,124 @@
1
+ # -*- Mode: makefile -*-
2
+ #
3
+ #
4
+ # Based on patch submitted to mozilla.dev.tech.js-engine by 'Andy':
5
+ # http://groups.google.com/group/mozilla.dev.tech.js-engine/browse_thread/thread/16972946bf7df82e
6
+ #
7
+ #
8
+ # ***** BEGIN LICENSE BLOCK *****
9
+ # Version: MPL 1.1/GPL 2.0/LGPL 2.1
10
+ #
11
+ # The contents of this file are subject to the Mozilla Public License Version
12
+ # 1.1 (the "License"); you may not use this file except in compliance with
13
+ # the License. You may obtain a copy of the License at
14
+ # http://www.mozilla.org/MPL/
15
+ #
16
+ # Software distributed under the License is distributed on an "AS IS" basis,
17
+ # WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
18
+ # for the specific language governing rights and limitations under the
19
+ # License.
20
+ #
21
+ # The Original Code is Mozilla Communicator client code, released
22
+ # March 31, 1998.
23
+ #
24
+ # The Initial Developer of the Original Code is
25
+ # Netscape Communications Corporation.
26
+ # Portions created by the Initial Developer are Copyright (C) 1998
27
+ # the Initial Developer. All Rights Reserved.
28
+ #
29
+ # Contributor(s):
30
+ #
31
+ # Alternatively, the contents of this file may be used under the terms of
32
+ # either the GNU General Public License Version 2 or later (the "GPL"), or
33
+ # the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
34
+ # in which case the provisions of the GPL or the LGPL are applicable instead
35
+ # of those above. If you wish to allow use of your version of this file only
36
+ # under the terms of either the GPL or the LGPL, and not to allow others to
37
+ # use your version of this file under the terms of the MPL, indicate your
38
+ # decision by deleting the provisions above and replace them with the notice
39
+ # and other provisions required by the GPL or the LGPL. If you do not delete
40
+ # the provisions above, a recipient may use your version of this file under
41
+ # the terms of any one of the MPL, the GPL or the LGPL.
42
+ #
43
+ # ***** END LICENSE BLOCK *****
44
+
45
+ #
46
+ # Config for all versions of Mingw (copy and modified from Linux)
47
+ #
48
+
49
+ AR = i586-mingw32msvc-ar
50
+ CC = i586-mingw32msvc-gcc
51
+ LD = i586-mingw32msvc-ld
52
+ CCC = i586-mingw32msvc-g++
53
+
54
+ CFLAGS += -Wall -Wno-format
55
+ #OS_CFLAGS = -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DEXPORT_JS_API
56
+ OS_CFLAGS = -D_X86_=1 -DXP_WIN -DXP_WIN32 -DWIN32 -D_WINDOWS -D_WIN32 $(WIN_CFLAGS) -DEXPORT_JS_API
57
+ JSDLL_CFLAGS = -DEXPORT_JS_API # not work, dunno why?
58
+ SO_SUFFIX = dll
59
+ # libgcc.a:__divdi3 kernel32:DebugBreak,GetSystemTimeAsFileTime
60
+ # winmm:timeBeginPeriod,timeEndPeriod
61
+ WINLIBS = -lmsvcrt -lm -lkernel32 -lwinmm /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/libgcc.a
62
+ #LDFLAGS += $(WINLIBS) # dont work. rewrite by Makefile.ref
63
+ OTHER_LIBS += $(WINLIBS)
64
+
65
+ RANLIB = echo
66
+ MKSHLIB = $(LD) -shared $(XMKSHLIBOPTS)
67
+
68
+ # These don't work :(
69
+ LIBRARY = $(OBJDIR)/js32.lib
70
+ SHARED_LIBRARY = $(OBJDIR)/js32.dll
71
+ PROGRAM = $(OBJDIR)/js.exe
72
+
73
+ #.c.o:
74
+ # $(CC) -c -MD $*.d $(CFLAGS) $<
75
+
76
+ CPU_ARCH = $(shell uname -m)
77
+ # don't filter in x86-64 architecture
78
+ ifneq (x86_64,$(CPU_ARCH))
79
+ ifeq (86,$(findstring 86,$(CPU_ARCH)))
80
+ CPU_ARCH = x86
81
+ OS_CFLAGS+= -DX86_LINUX
82
+
83
+ ifeq (gcc, $(CC))
84
+ # if using gcc on x86, check version for opt bug
85
+ # (http://bugzilla.mozilla.org/show_bug.cgi?id=24892)
86
+ GCC_VERSION := $(shell gcc -v 2>&1 | grep version | awk '{ print $$3 }')
87
+ GCC_LIST:=$(sort 2.91.66 $(GCC_VERSION) )
88
+
89
+ ifeq (2.91.66, $(firstword $(GCC_LIST)))
90
+ CFLAGS+= -DGCC_OPT_BUG
91
+ endif
92
+ endif
93
+ endif
94
+ endif
95
+
96
+ GFX_ARCH = x
97
+
98
+ OS_LIBS = -lm -lc
99
+
100
+ ASFLAGS += -x assembler-with-cpp
101
+
102
+
103
+ ifeq ($(CPU_ARCH),alpha)
104
+
105
+ # Ask the C compiler on alpha linux to let us work with denormalized
106
+ # double values, which are required by the ECMA spec.
107
+
108
+ OS_CFLAGS += -mieee
109
+ endif
110
+
111
+ # Use the editline library to provide line-editing support.
112
+ #JS_EDITLINE = 1 // not support by Mingw
113
+
114
+ ifeq ($(CPU_ARCH),x86_64)
115
+ # Use VA_COPY() standard macro on x86-64
116
+ # FIXME: better use it everywhere
117
+ OS_CFLAGS += -DHAVE_VA_COPY
118
+ endif
119
+
120
+ ifeq ($(CPU_ARCH),x86_64)
121
+ # We need PIC code for shared libraries
122
+ # FIXME: better patch rules.mk & fdlibm/Makefile*
123
+ OS_CFLAGS += -DPIC -fPIC
124
+ endif
@@ -0,0 +1,38 @@
1
+
2
+ CROSS-COMPILING FOR WINDOWS
3
+
4
+ Based on http://eigenclass.org/hiki.rb?cross+compiling+rcovrt
5
+
6
+
7
+ *) Install the MinGW cross-compiler
8
+
9
+ Debian: apt-get install mingw32 mingw32-binutils mingw32-runtime
10
+
11
+ *) Download & extract a ruby distribution archive
12
+
13
+ *) Double the backslashes in the ALT_SEPARATOR definition in Makefile.in
14
+
15
+ *) Build & install it:
16
+
17
+ env ac_cv_func_getpgrp_void=no \
18
+ ac_cv_func_setpgrp_void=yes \
19
+ rb_cv_negative_time_t=no \
20
+ ac_cv_func_memcmp_working=yes \
21
+ rb_cv_binary_elf=no \
22
+ ./configure \
23
+ --host=i586-mingw32msvc \
24
+ --target=i386-mingw32 \
25
+ --build=i686-linux \
26
+ --prefix=~/ruby-mingw32
27
+
28
+ make ruby
29
+
30
+ make install
31
+
32
+ *) Build the extension (rake will build spidermonkey for you)
33
+
34
+ # Remove any native binaries that are already built
35
+ rake clean
36
+
37
+ rake build CROSS=MINGW32 CROSSLIB=~/ruby-mingw32/lib/ruby/1.8/i386-mingw32
38
+
@@ -0,0 +1,115 @@
1
+ #include "context.h"
2
+ #include "conversions.h"
3
+ #include "global.h"
4
+ #include "extensions.h"
5
+ #include "idhash.h"
6
+ #include "jsdbgapi.h"
7
+
8
+ // callback for JS_SetErrorReporter
9
+ static void report_js_error(JSContext* js, const char* message, JSErrorReport* UNUSED(report))
10
+ {
11
+ // first we find ourselves
12
+ VALUE self = (VALUE)JS_GetContextPrivate(js);
13
+
14
+ // then we find our bridge
15
+ JohnsonContext* context;
16
+ Data_Get_Struct(self, JohnsonContext, context);
17
+
18
+ // NOTE: SpiderMonkey REALLY doesn't like being interrupted. If we
19
+ // jump over to Ruby and raise here, segfaults and such ensue.
20
+ // Instead, we store the exception (if any) and the error message
21
+ // on the context. They're dealt with in the if (!ok) block of evaluate().
22
+
23
+ strncpy(context->msg, message, MAX_EXCEPTION_MESSAGE_SIZE);
24
+ JS_GetPendingException(context->js, &context->ex);
25
+ }
26
+
27
+ // callback for JS_SetBranchCallback
28
+ static JSBool branch_callback(JSContext* js, JSScript* UNUSED(script))
29
+ {
30
+ static unsigned long branch_counter = 0;
31
+ if( ++branch_counter % 0x1000 == 0 )
32
+ JS_MaybeGC( js );
33
+ return JS_TRUE;
34
+ }
35
+
36
+ /*
37
+ * call-seq:
38
+ * native_initialize(options={})
39
+ *
40
+ * Initializes the native spidermonkey values.
41
+ */
42
+ static VALUE
43
+ initialize_native(VALUE self, VALUE rb_runtime, VALUE UNUSED(options))
44
+ {
45
+ JohnsonContext* context;
46
+ JohnsonRuntime* runtime;
47
+
48
+ Data_Get_Struct(self, JohnsonContext, context);
49
+ Data_Get_Struct(rb_runtime, JohnsonRuntime, runtime);
50
+
51
+ if ((context->js = JS_NewContext(runtime->js, 8192L)))
52
+ {
53
+ // See if the runtime already has a shared global object.
54
+ JSObject* global = runtime->global;
55
+
56
+ // If it does, use it. If not,
57
+ if (!global)
58
+ // create one of our global objects.
59
+ global = johnson_create_global_object(context->js);
60
+
61
+ // Manually set the context's global object.
62
+ JS_SetGlobalObject(context->js, global);
63
+ JS_SetErrorReporter(context->js, report_js_error);
64
+ JS_SetBranchCallback(context->js, branch_callback);
65
+ JS_SetContextPrivate(context->js, (void *)self);
66
+
67
+ JS_SetOptions(context->js, JS_GetOptions(context->js)
68
+ #ifdef JSOPTION_DONT_REPORT_UNCAUGHT
69
+ | JSOPTION_DONT_REPORT_UNCAUGHT
70
+ #endif
71
+ #ifdef JSOPTION_VAROBJFIX
72
+ | JSOPTION_VAROBJFIX
73
+ #endif
74
+ // #ifdef JSOPTION_XML
75
+ // | JSOPTION_XML
76
+ // #endif
77
+ );
78
+
79
+ // Success.
80
+ return init_spidermonkey_extensions(context, self);
81
+ }
82
+
83
+ if (context->js) JS_DestroyContext(context->js);
84
+
85
+ rb_raise(rb_eRuntimeError, "Failed to initialize SpiderMonkey context");
86
+ }
87
+
88
+ ///////////////////////////////////////////////////////////////////////////
89
+ //// INFRASTRUCTURE BELOW HERE ////////////////////////////////////////////
90
+ ///////////////////////////////////////////////////////////////////////////
91
+
92
+ static VALUE allocate(VALUE klass)
93
+ {
94
+ JohnsonContext* context = calloc(1L, sizeof(JohnsonContext));
95
+ return Data_Wrap_Struct(klass, 0, 0, context);
96
+ }
97
+
98
+ void init_Johnson_SpiderMonkey_Context(VALUE spidermonkey)
99
+ {
100
+ /* HACK: These comments are *only* to make RDoc happy.
101
+ VALUE johnson = rb_define_module("Johnson");
102
+ VALUE spidermonkey = rb_define_module_under(johnson, "SpiderMonkey");
103
+ */
104
+
105
+ /* This is the private context used for SpiderMonkey. */
106
+ VALUE context = rb_define_class_under(spidermonkey, "Context", rb_cObject);
107
+
108
+ rb_define_alloc_func(context, allocate);
109
+ rb_define_private_method(context, "initialize_native", initialize_native, 2);
110
+ }
111
+
112
+ VALUE Johnson_SpiderMonkey_JSLandProxy()
113
+ {
114
+ return rb_eval_string("Johnson::SpiderMonkey::JSLandProxy");
115
+ }
@@ -0,0 +1,19 @@
1
+ #ifndef JOHNSON_SPIDERMONKEY_CONTEXT_H
2
+ #define JOHNSON_SPIDERMONKEY_CONTEXT_H
3
+
4
+ #include "spidermonkey.h"
5
+
6
+ #define MAX_EXCEPTION_MESSAGE_SIZE 2048L
7
+
8
+ typedef struct {
9
+ JSContext *js;
10
+
11
+ jsval ex; // an exception value
12
+ char msg[MAX_EXCEPTION_MESSAGE_SIZE]; // the 'backup' message
13
+
14
+ } JohnsonContext;
15
+
16
+ void init_Johnson_SpiderMonkey_Context(VALUE spidermonkey);
17
+ VALUE Johnson_SpiderMonkey_JSLandProxy();
18
+
19
+ #endif