johnson 2.0.0.pre1 → 2.0.0.pre2

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 (311) hide show
  1. data/CHANGELOG.rdoc +12 -0
  2. data/Manifest.txt +4 -285
  3. data/Rakefile +13 -20
  4. data/ext/tracemonkey/global.cc +4 -1
  5. data/ext/tracemonkey/js.cc +30 -33
  6. data/ext/tracemonkey/runtime.cc +96 -6
  7. data/ext/tracemonkey/split_global.cc +0 -5
  8. data/ext/tracemonkey/tracemonkey.h +2 -2
  9. data/lib/johnson.rb +2 -2
  10. data/lib/johnson/runtime.rb +25 -15
  11. data/lib/johnson/tracemonkey/runtime.rb +6 -3
  12. data/vendor/tracemonkey/config/system-headers +1 -3
  13. data/vendor/tracemonkey/jscntxt.h +5 -2
  14. data/vendor/tracemonkey/jsdbgapi.cpp +9 -1
  15. data/vendor/tracemonkey/jsdbgapi.h +4 -0
  16. data/vendor/tracemonkey/tests/ecma/NativeObjects/browser.js +0 -0
  17. data/vendor/tracemonkey/tests/ecma/NativeObjects/jstests.list +0 -0
  18. data/vendor/tracemonkey/tests/ecma_3_1/Object/jstests.list +1 -1
  19. data/vendor/tracemonkey/tests/js1_3/misc/browser.js +0 -0
  20. data/vendor/tracemonkey/tests/js1_3/misc/jstests.list +0 -0
  21. data/vendor/tracemonkey/tests/js1_5/Regress/jstests.list +4 -4
  22. data/vendor/tracemonkey/tests/js1_5/Scope/jstests.list +1 -1
  23. data/vendor/tracemonkey/tests/js1_5/decompilation/jstests.list +2 -2
  24. data/vendor/tracemonkey/tests/js1_7/decompilation/jstests.list +1 -1
  25. data/vendor/tracemonkey/tests/shell.js +2 -1
  26. metadata +51 -309
  27. data/ext/spidermonkey/context.c +0 -116
  28. data/ext/spidermonkey/context.h +0 -19
  29. data/ext/spidermonkey/conversions.c +0 -361
  30. data/ext/spidermonkey/conversions.h +0 -31
  31. data/ext/spidermonkey/debugger.c +0 -234
  32. data/ext/spidermonkey/debugger.h +0 -10
  33. data/ext/spidermonkey/extconf.rb +0 -32
  34. data/ext/spidermonkey/extensions.c +0 -37
  35. data/ext/spidermonkey/extensions.h +0 -12
  36. data/ext/spidermonkey/global.c +0 -40
  37. data/ext/spidermonkey/global.h +0 -11
  38. data/ext/spidermonkey/idhash.c +0 -16
  39. data/ext/spidermonkey/idhash.h +0 -8
  40. data/ext/spidermonkey/immutable_node.c +0 -1153
  41. data/ext/spidermonkey/immutable_node.c.erb +0 -523
  42. data/ext/spidermonkey/immutable_node.h +0 -22
  43. data/ext/spidermonkey/jroot.h +0 -197
  44. data/ext/spidermonkey/js_land_proxy.c +0 -620
  45. data/ext/spidermonkey/js_land_proxy.h +0 -20
  46. data/ext/spidermonkey/ruby_land_proxy.c +0 -618
  47. data/ext/spidermonkey/ruby_land_proxy.h +0 -38
  48. data/ext/spidermonkey/runtime.c +0 -396
  49. data/ext/spidermonkey/runtime.h +0 -27
  50. data/ext/spidermonkey/spidermonkey.c +0 -22
  51. data/ext/spidermonkey/spidermonkey.h +0 -29
  52. data/lib/johnson/spidermonkey.rb +0 -12
  53. data/lib/johnson/spidermonkey/context.rb +0 -10
  54. data/lib/johnson/spidermonkey/debugger.rb +0 -67
  55. data/lib/johnson/spidermonkey/immutable_node.rb +0 -282
  56. data/lib/johnson/spidermonkey/js_land_proxy.rb +0 -64
  57. data/lib/johnson/spidermonkey/mutable_tree_visitor.rb +0 -242
  58. data/lib/johnson/spidermonkey/ruby_land_proxy.rb +0 -17
  59. data/lib/johnson/spidermonkey/runtime.rb +0 -74
  60. data/test/johnson/spidermonkey/context_test.rb +0 -21
  61. data/test/johnson/spidermonkey/immutable_node_test.rb +0 -34
  62. data/test/johnson/spidermonkey/js_land_proxy_test.rb +0 -273
  63. data/test/johnson/spidermonkey/ruby_land_proxy_test.rb +0 -274
  64. data/test/johnson/spidermonkey/runtime_test.rb +0 -41
  65. data/vendor/spidermonkey/.cvsignore +0 -9
  66. data/vendor/spidermonkey/Makefile.in +0 -449
  67. data/vendor/spidermonkey/Makefile.ref +0 -365
  68. data/vendor/spidermonkey/README.html +0 -820
  69. data/vendor/spidermonkey/SpiderMonkey.rsp +0 -12
  70. data/vendor/spidermonkey/Y.js +0 -19
  71. data/vendor/spidermonkey/build.mk +0 -43
  72. data/vendor/spidermonkey/config.mk +0 -192
  73. data/vendor/spidermonkey/config/AIX4.1.mk +0 -65
  74. data/vendor/spidermonkey/config/AIX4.2.mk +0 -64
  75. data/vendor/spidermonkey/config/AIX4.3.mk +0 -65
  76. data/vendor/spidermonkey/config/Darwin.mk +0 -83
  77. data/vendor/spidermonkey/config/Darwin1.3.mk +0 -81
  78. data/vendor/spidermonkey/config/Darwin1.4.mk +0 -41
  79. data/vendor/spidermonkey/config/Darwin5.2.mk +0 -81
  80. data/vendor/spidermonkey/config/Darwin5.3.mk +0 -81
  81. data/vendor/spidermonkey/config/HP-UXB.10.10.mk +0 -77
  82. data/vendor/spidermonkey/config/HP-UXB.10.20.mk +0 -77
  83. data/vendor/spidermonkey/config/HP-UXB.11.00.mk +0 -80
  84. data/vendor/spidermonkey/config/IRIX.mk +0 -87
  85. data/vendor/spidermonkey/config/IRIX5.3.mk +0 -44
  86. data/vendor/spidermonkey/config/IRIX6.1.mk +0 -44
  87. data/vendor/spidermonkey/config/IRIX6.2.mk +0 -44
  88. data/vendor/spidermonkey/config/IRIX6.3.mk +0 -44
  89. data/vendor/spidermonkey/config/IRIX6.5.mk +0 -44
  90. data/vendor/spidermonkey/config/Linux_All.mk +0 -103
  91. data/vendor/spidermonkey/config/Mac_OS10.0.mk +0 -82
  92. data/vendor/spidermonkey/config/OSF1V4.0.mk +0 -72
  93. data/vendor/spidermonkey/config/OSF1V5.0.mk +0 -69
  94. data/vendor/spidermonkey/config/SunOS4.1.4.mk +0 -101
  95. data/vendor/spidermonkey/config/SunOS5.10.mk +0 -50
  96. data/vendor/spidermonkey/config/SunOS5.3.mk +0 -91
  97. data/vendor/spidermonkey/config/SunOS5.4.mk +0 -92
  98. data/vendor/spidermonkey/config/SunOS5.5.1.mk +0 -44
  99. data/vendor/spidermonkey/config/SunOS5.5.mk +0 -87
  100. data/vendor/spidermonkey/config/SunOS5.6.mk +0 -89
  101. data/vendor/spidermonkey/config/SunOS5.7.mk +0 -44
  102. data/vendor/spidermonkey/config/SunOS5.8.mk +0 -44
  103. data/vendor/spidermonkey/config/SunOS5.9.mk +0 -44
  104. data/vendor/spidermonkey/config/WINNT4.0.mk +0 -117
  105. data/vendor/spidermonkey/config/WINNT5.0.mk +0 -117
  106. data/vendor/spidermonkey/config/WINNT5.1.mk +0 -117
  107. data/vendor/spidermonkey/config/WINNT5.2.mk +0 -117
  108. data/vendor/spidermonkey/config/WINNT6.0.mk +0 -117
  109. data/vendor/spidermonkey/config/dgux.mk +0 -64
  110. data/vendor/spidermonkey/editline/Makefile.ref +0 -144
  111. data/vendor/spidermonkey/editline/README +0 -83
  112. data/vendor/spidermonkey/editline/editline.3 +0 -175
  113. data/vendor/spidermonkey/editline/editline.c +0 -1369
  114. data/vendor/spidermonkey/editline/editline.h +0 -135
  115. data/vendor/spidermonkey/editline/sysunix.c +0 -182
  116. data/vendor/spidermonkey/editline/unix.h +0 -82
  117. data/vendor/spidermonkey/fdlibm/.cvsignore +0 -7
  118. data/vendor/spidermonkey/fdlibm/Makefile.in +0 -127
  119. data/vendor/spidermonkey/fdlibm/Makefile.ref +0 -192
  120. data/vendor/spidermonkey/fdlibm/e_acos.c +0 -147
  121. data/vendor/spidermonkey/fdlibm/e_acosh.c +0 -105
  122. data/vendor/spidermonkey/fdlibm/e_asin.c +0 -156
  123. data/vendor/spidermonkey/fdlibm/e_atan2.c +0 -165
  124. data/vendor/spidermonkey/fdlibm/e_atanh.c +0 -110
  125. data/vendor/spidermonkey/fdlibm/e_cosh.c +0 -133
  126. data/vendor/spidermonkey/fdlibm/e_exp.c +0 -202
  127. data/vendor/spidermonkey/fdlibm/e_fmod.c +0 -184
  128. data/vendor/spidermonkey/fdlibm/e_gamma.c +0 -71
  129. data/vendor/spidermonkey/fdlibm/e_gamma_r.c +0 -70
  130. data/vendor/spidermonkey/fdlibm/e_hypot.c +0 -173
  131. data/vendor/spidermonkey/fdlibm/e_j0.c +0 -524
  132. data/vendor/spidermonkey/fdlibm/e_j1.c +0 -523
  133. data/vendor/spidermonkey/fdlibm/e_jn.c +0 -315
  134. data/vendor/spidermonkey/fdlibm/e_lgamma.c +0 -71
  135. data/vendor/spidermonkey/fdlibm/e_lgamma_r.c +0 -347
  136. data/vendor/spidermonkey/fdlibm/e_log.c +0 -184
  137. data/vendor/spidermonkey/fdlibm/e_log10.c +0 -134
  138. data/vendor/spidermonkey/fdlibm/e_pow.c +0 -386
  139. data/vendor/spidermonkey/fdlibm/e_rem_pio2.c +0 -222
  140. data/vendor/spidermonkey/fdlibm/e_remainder.c +0 -120
  141. data/vendor/spidermonkey/fdlibm/e_scalb.c +0 -89
  142. data/vendor/spidermonkey/fdlibm/e_sinh.c +0 -122
  143. data/vendor/spidermonkey/fdlibm/e_sqrt.c +0 -497
  144. data/vendor/spidermonkey/fdlibm/fdlibm.h +0 -273
  145. data/vendor/spidermonkey/fdlibm/fdlibm.mak +0 -1453
  146. data/vendor/spidermonkey/fdlibm/fdlibm.mdp +0 -0
  147. data/vendor/spidermonkey/fdlibm/k_cos.c +0 -135
  148. data/vendor/spidermonkey/fdlibm/k_rem_pio2.c +0 -354
  149. data/vendor/spidermonkey/fdlibm/k_sin.c +0 -114
  150. data/vendor/spidermonkey/fdlibm/k_standard.c +0 -785
  151. data/vendor/spidermonkey/fdlibm/k_tan.c +0 -170
  152. data/vendor/spidermonkey/fdlibm/s_asinh.c +0 -101
  153. data/vendor/spidermonkey/fdlibm/s_atan.c +0 -175
  154. data/vendor/spidermonkey/fdlibm/s_cbrt.c +0 -133
  155. data/vendor/spidermonkey/fdlibm/s_ceil.c +0 -120
  156. data/vendor/spidermonkey/fdlibm/s_copysign.c +0 -72
  157. data/vendor/spidermonkey/fdlibm/s_cos.c +0 -118
  158. data/vendor/spidermonkey/fdlibm/s_erf.c +0 -356
  159. data/vendor/spidermonkey/fdlibm/s_expm1.c +0 -267
  160. data/vendor/spidermonkey/fdlibm/s_fabs.c +0 -70
  161. data/vendor/spidermonkey/fdlibm/s_finite.c +0 -71
  162. data/vendor/spidermonkey/fdlibm/s_floor.c +0 -121
  163. data/vendor/spidermonkey/fdlibm/s_frexp.c +0 -99
  164. data/vendor/spidermonkey/fdlibm/s_ilogb.c +0 -85
  165. data/vendor/spidermonkey/fdlibm/s_isnan.c +0 -74
  166. data/vendor/spidermonkey/fdlibm/s_ldexp.c +0 -66
  167. data/vendor/spidermonkey/fdlibm/s_lib_version.c +0 -73
  168. data/vendor/spidermonkey/fdlibm/s_log1p.c +0 -211
  169. data/vendor/spidermonkey/fdlibm/s_logb.c +0 -79
  170. data/vendor/spidermonkey/fdlibm/s_matherr.c +0 -64
  171. data/vendor/spidermonkey/fdlibm/s_modf.c +0 -132
  172. data/vendor/spidermonkey/fdlibm/s_nextafter.c +0 -124
  173. data/vendor/spidermonkey/fdlibm/s_rint.c +0 -131
  174. data/vendor/spidermonkey/fdlibm/s_scalbn.c +0 -107
  175. data/vendor/spidermonkey/fdlibm/s_signgam.c +0 -40
  176. data/vendor/spidermonkey/fdlibm/s_significand.c +0 -68
  177. data/vendor/spidermonkey/fdlibm/s_sin.c +0 -118
  178. data/vendor/spidermonkey/fdlibm/s_tan.c +0 -112
  179. data/vendor/spidermonkey/fdlibm/s_tanh.c +0 -122
  180. data/vendor/spidermonkey/fdlibm/w_acos.c +0 -78
  181. data/vendor/spidermonkey/fdlibm/w_acosh.c +0 -78
  182. data/vendor/spidermonkey/fdlibm/w_asin.c +0 -80
  183. data/vendor/spidermonkey/fdlibm/w_atan2.c +0 -79
  184. data/vendor/spidermonkey/fdlibm/w_atanh.c +0 -81
  185. data/vendor/spidermonkey/fdlibm/w_cosh.c +0 -77
  186. data/vendor/spidermonkey/fdlibm/w_exp.c +0 -88
  187. data/vendor/spidermonkey/fdlibm/w_fmod.c +0 -78
  188. data/vendor/spidermonkey/fdlibm/w_gamma.c +0 -85
  189. data/vendor/spidermonkey/fdlibm/w_gamma_r.c +0 -81
  190. data/vendor/spidermonkey/fdlibm/w_hypot.c +0 -78
  191. data/vendor/spidermonkey/fdlibm/w_j0.c +0 -105
  192. data/vendor/spidermonkey/fdlibm/w_j1.c +0 -106
  193. data/vendor/spidermonkey/fdlibm/w_jn.c +0 -128
  194. data/vendor/spidermonkey/fdlibm/w_lgamma.c +0 -85
  195. data/vendor/spidermonkey/fdlibm/w_lgamma_r.c +0 -81
  196. data/vendor/spidermonkey/fdlibm/w_log.c +0 -78
  197. data/vendor/spidermonkey/fdlibm/w_log10.c +0 -81
  198. data/vendor/spidermonkey/fdlibm/w_pow.c +0 -99
  199. data/vendor/spidermonkey/fdlibm/w_remainder.c +0 -77
  200. data/vendor/spidermonkey/fdlibm/w_scalb.c +0 -95
  201. data/vendor/spidermonkey/fdlibm/w_sinh.c +0 -77
  202. data/vendor/spidermonkey/fdlibm/w_sqrt.c +0 -77
  203. data/vendor/spidermonkey/javascript-trace.d +0 -73
  204. data/vendor/spidermonkey/js.c +0 -3951
  205. data/vendor/spidermonkey/js.mdp +0 -0
  206. data/vendor/spidermonkey/js.msg +0 -308
  207. data/vendor/spidermonkey/js.pkg +0 -2
  208. data/vendor/spidermonkey/js3240.rc +0 -79
  209. data/vendor/spidermonkey/jsOS240.def +0 -654
  210. data/vendor/spidermonkey/jsapi.c +0 -5836
  211. data/vendor/spidermonkey/jsapi.h +0 -2624
  212. data/vendor/spidermonkey/jsarena.c +0 -450
  213. data/vendor/spidermonkey/jsarena.h +0 -318
  214. data/vendor/spidermonkey/jsarray.c +0 -2996
  215. data/vendor/spidermonkey/jsarray.h +0 -127
  216. data/vendor/spidermonkey/jsatom.c +0 -1045
  217. data/vendor/spidermonkey/jsatom.h +0 -442
  218. data/vendor/spidermonkey/jsbit.h +0 -253
  219. data/vendor/spidermonkey/jsbool.c +0 -176
  220. data/vendor/spidermonkey/jsbool.h +0 -73
  221. data/vendor/spidermonkey/jsclist.h +0 -139
  222. data/vendor/spidermonkey/jscntxt.c +0 -1348
  223. data/vendor/spidermonkey/jscntxt.h +0 -1120
  224. data/vendor/spidermonkey/jscompat.h +0 -57
  225. data/vendor/spidermonkey/jsconfig.h +0 -248
  226. data/vendor/spidermonkey/jsconfig.mk +0 -181
  227. data/vendor/spidermonkey/jscpucfg.c +0 -396
  228. data/vendor/spidermonkey/jscpucfg.h +0 -212
  229. data/vendor/spidermonkey/jsdate.c +0 -2390
  230. data/vendor/spidermonkey/jsdate.h +0 -124
  231. data/vendor/spidermonkey/jsdbgapi.c +0 -1802
  232. data/vendor/spidermonkey/jsdbgapi.h +0 -464
  233. data/vendor/spidermonkey/jsdhash.c +0 -868
  234. data/vendor/spidermonkey/jsdhash.h +0 -592
  235. data/vendor/spidermonkey/jsdtoa.c +0 -3167
  236. data/vendor/spidermonkey/jsdtoa.h +0 -130
  237. data/vendor/spidermonkey/jsdtracef.c +0 -317
  238. data/vendor/spidermonkey/jsdtracef.h +0 -77
  239. data/vendor/spidermonkey/jsemit.c +0 -6909
  240. data/vendor/spidermonkey/jsemit.h +0 -741
  241. data/vendor/spidermonkey/jsexn.c +0 -1371
  242. data/vendor/spidermonkey/jsexn.h +0 -96
  243. data/vendor/spidermonkey/jsfile.c +0 -2736
  244. data/vendor/spidermonkey/jsfile.h +0 -56
  245. data/vendor/spidermonkey/jsfile.msg +0 -90
  246. data/vendor/spidermonkey/jsfun.c +0 -2634
  247. data/vendor/spidermonkey/jsfun.h +0 -254
  248. data/vendor/spidermonkey/jsgc.c +0 -3562
  249. data/vendor/spidermonkey/jsgc.h +0 -403
  250. data/vendor/spidermonkey/jshash.c +0 -476
  251. data/vendor/spidermonkey/jshash.h +0 -151
  252. data/vendor/spidermonkey/jsify.pl +0 -485
  253. data/vendor/spidermonkey/jsinterp.c +0 -7007
  254. data/vendor/spidermonkey/jsinterp.h +0 -525
  255. data/vendor/spidermonkey/jsinvoke.c +0 -43
  256. data/vendor/spidermonkey/jsiter.c +0 -1067
  257. data/vendor/spidermonkey/jsiter.h +0 -122
  258. data/vendor/spidermonkey/jskeyword.tbl +0 -124
  259. data/vendor/spidermonkey/jskwgen.c +0 -460
  260. data/vendor/spidermonkey/jslibmath.h +0 -266
  261. data/vendor/spidermonkey/jslock.c +0 -1309
  262. data/vendor/spidermonkey/jslock.h +0 -313
  263. data/vendor/spidermonkey/jslocko.asm +0 -60
  264. data/vendor/spidermonkey/jslog2.c +0 -94
  265. data/vendor/spidermonkey/jslong.c +0 -264
  266. data/vendor/spidermonkey/jslong.h +0 -412
  267. data/vendor/spidermonkey/jsmath.c +0 -567
  268. data/vendor/spidermonkey/jsmath.h +0 -57
  269. data/vendor/spidermonkey/jsnum.c +0 -1239
  270. data/vendor/spidermonkey/jsnum.h +0 -283
  271. data/vendor/spidermonkey/jsobj.c +0 -5282
  272. data/vendor/spidermonkey/jsobj.h +0 -709
  273. data/vendor/spidermonkey/jsopcode.c +0 -5245
  274. data/vendor/spidermonkey/jsopcode.h +0 -394
  275. data/vendor/spidermonkey/jsopcode.tbl +0 -523
  276. data/vendor/spidermonkey/jsotypes.h +0 -202
  277. data/vendor/spidermonkey/jsparse.c +0 -6704
  278. data/vendor/spidermonkey/jsparse.h +0 -511
  279. data/vendor/spidermonkey/jsprf.c +0 -1264
  280. data/vendor/spidermonkey/jsprf.h +0 -150
  281. data/vendor/spidermonkey/jsproto.tbl +0 -128
  282. data/vendor/spidermonkey/jsprvtd.h +0 -267
  283. data/vendor/spidermonkey/jspubtd.h +0 -744
  284. data/vendor/spidermonkey/jsregexp.c +0 -4364
  285. data/vendor/spidermonkey/jsregexp.h +0 -183
  286. data/vendor/spidermonkey/jsreops.tbl +0 -145
  287. data/vendor/spidermonkey/jsscan.c +0 -2012
  288. data/vendor/spidermonkey/jsscan.h +0 -387
  289. data/vendor/spidermonkey/jsscope.c +0 -1957
  290. data/vendor/spidermonkey/jsscope.h +0 -418
  291. data/vendor/spidermonkey/jsscript.c +0 -1832
  292. data/vendor/spidermonkey/jsscript.h +0 -287
  293. data/vendor/spidermonkey/jsshell.msg +0 -50
  294. data/vendor/spidermonkey/jsstddef.h +0 -83
  295. data/vendor/spidermonkey/jsstr.c +0 -5005
  296. data/vendor/spidermonkey/jsstr.h +0 -641
  297. data/vendor/spidermonkey/jstypes.h +0 -475
  298. data/vendor/spidermonkey/jsutil.c +0 -345
  299. data/vendor/spidermonkey/jsutil.h +0 -157
  300. data/vendor/spidermonkey/jsxdrapi.c +0 -800
  301. data/vendor/spidermonkey/jsxdrapi.h +0 -218
  302. data/vendor/spidermonkey/jsxml.c +0 -8476
  303. data/vendor/spidermonkey/jsxml.h +0 -349
  304. data/vendor/spidermonkey/lock_SunOS.s +0 -119
  305. data/vendor/spidermonkey/perfect.js +0 -39
  306. data/vendor/spidermonkey/plify_jsdhash.sed +0 -36
  307. data/vendor/spidermonkey/prmjtime.c +0 -846
  308. data/vendor/spidermonkey/prmjtime.h +0 -103
  309. data/vendor/spidermonkey/resource.h +0 -15
  310. data/vendor/spidermonkey/rules.mk +0 -197
  311. data/vendor/spidermonkey/win32.order +0 -384
@@ -22,6 +22,17 @@ static VALUE global(VALUE self)
22
22
  return convert_to_ruby(runtime, OBJECT_TO_JSVAL(runtime->global));
23
23
  }
24
24
 
25
+ static VALUE new_global(VALUE self)
26
+ {
27
+ JohnsonRuntime* runtime;
28
+ Data_Get_Struct(self, JohnsonRuntime, runtime);
29
+ JSContext * context = johnson_get_current_context(runtime);
30
+
31
+ PREPARE_RUBY_JROOTS(context, 0);
32
+ JSObject* obj = johnson_create_global_object(context);
33
+ JRETURN_RUBY(convert_to_ruby(runtime, OBJECT_TO_JSVAL(obj)));
34
+ }
35
+
25
36
  static VALUE new_split_global_outer(VALUE self)
26
37
  {
27
38
  JohnsonRuntime* runtime;
@@ -53,6 +64,24 @@ static VALUE new_split_global_inner(VALUE self, VALUE ruby_outer)
53
64
  JRETURN_RUBY(convert_to_ruby(runtime, OBJECT_TO_JSVAL(new_inner_object)));
54
65
  }
55
66
 
67
+ static VALUE seal(VALUE self, VALUE ruby_object, VALUE deep)
68
+ {
69
+ JohnsonRuntime* runtime;
70
+ Data_Get_Struct(self, JohnsonRuntime, runtime);
71
+ JSContext * context = johnson_get_current_context(runtime);
72
+
73
+ PREPARE_RUBY_JROOTS(context, 1);
74
+
75
+ jsval object;
76
+
77
+ JCHECK(convert_to_js(runtime,ruby_object,&object));
78
+ JROOT(object);
79
+
80
+ JSBool ok = JS_SealObject(context, JSVAL_TO_OBJECT(object), deep == Qfalse || deep == Qnil ? JS_FALSE : JS_TRUE);
81
+
82
+ JRETURN_RUBY(convert_to_ruby(runtime, ok ? JSVAL_TRUE : JSVAL_FALSE));
83
+ }
84
+
56
85
  static JSTrapStatus trap_handler( JSContext *context,
57
86
  JSScript *UNUSED(script),
58
87
  jsbytecode *UNUSED(pc),
@@ -218,8 +247,10 @@ static VALUE evaluate_compiled_script(VALUE self, VALUE compiled_script, VALUE r
218
247
 
219
248
  if (johnson_context->ex) {
220
249
  RAISE_JS_ERROR(self, johnson_context->ex);
221
- return Qnil;
250
+ } else {
251
+ rb_raise(rb_eNoMemError,"spidermonkey ran out of memory");
222
252
  }
253
+ return Qnil;
223
254
  }
224
255
 
225
256
  return convert_to_ruby(runtime, js);
@@ -250,6 +281,12 @@ set_gc_zeal(VALUE self, VALUE zeal)
250
281
  }
251
282
  #endif
252
283
 
284
+ #ifdef DEBUG
285
+ void* from = 0;
286
+ void* thing = 0;
287
+ unsigned depth = 0;
288
+ #endif DEBUG
289
+
253
290
  /*
254
291
  * call-seq:
255
292
  * gc()
@@ -266,6 +303,14 @@ gc(VALUE self)
266
303
 
267
304
  JS_GC(context);
268
305
 
306
+ #ifdef DEBUG
307
+ if(depth){
308
+ fprintf(stderr,"dumping\n");
309
+ JS_DumpHeap(context, stderr, from, 0, thing, depth, 0);
310
+ fprintf(stderr,"done\n");
311
+ }
312
+ #endif
313
+
269
314
  return Qnil;
270
315
  }
271
316
 
@@ -339,18 +384,23 @@ JSBool gc_callback(JSContext *context, JSGCStatus status)
339
384
 
340
385
  /**
341
386
  * call-seq:
342
- * initialize_native(options)
387
+ * initialize_native(size, options)
343
388
  *
344
389
  * Create the underlying TraceMonkey runtime. This must be called
345
390
  * first, and only once. Called by +initialize+ by default.
346
391
  */
347
392
  static VALUE
348
- initialize_native(VALUE self, VALUE UNUSED(options))
393
+ initialize_native(VALUE self, VALUE size, VALUE UNUSED(options))
349
394
  {
350
395
  JohnsonRuntime* runtime;
351
396
  Data_Get_Struct(self, JohnsonRuntime, runtime);
352
397
 
353
- if ((runtime->js = JS_NewRuntime(0x2000000))
398
+ size_t s = NUM2INT(size);
399
+ if (s == 0) {
400
+ s = 0x2000000;
401
+ }
402
+
403
+ if ((runtime->js = JS_NewRuntime(s))
354
404
  && (runtime->jsids = create_id_hash())
355
405
  && (runtime->rbids = create_id_hash()))
356
406
  {
@@ -396,8 +446,14 @@ static int proxy_cleanup_enumerator(JSHashEntry *entry, int /* i */, void* arg)
396
446
  return 0;
397
447
  }
398
448
 
399
- static void deallocate(JohnsonRuntime* runtime)
449
+ /*
450
+ static VALUE destroy(VALUE self)
400
451
  {
452
+ JohnsonRuntime* runtime;
453
+ Data_Get_Struct(self, JohnsonRuntime, runtime);
454
+
455
+ fprintf(stderr,"destroy SM RT\n");
456
+
401
457
  // our gc callback can create ruby objects, so disable it
402
458
  JS_SetGCCallbackRT(runtime->js, NULL);
403
459
 
@@ -415,6 +471,35 @@ static void deallocate(JohnsonRuntime* runtime)
415
471
  JS_DestroyContext(cleanup);
416
472
 
417
473
  JS_DestroyRuntime(runtime->js);
474
+
475
+ runtime->js = 0;
476
+
477
+ return Qnil;
478
+ }
479
+ */
480
+
481
+ static void deallocate(JohnsonRuntime* runtime)
482
+ {
483
+ if (runtime->js) {
484
+ // our gc callback can create ruby objects, so disable it
485
+ JS_SetGCCallbackRT(runtime->js, NULL);
486
+
487
+ JSContext *context = NULL;
488
+ JSContext *iterator = NULL;
489
+
490
+ while ((context = JS_ContextIterator(runtime->js, &iterator)) != NULL) {
491
+ JS_SetContextPrivate(iterator, NULL);
492
+ JS_DestroyContext(iterator);
493
+ iterator = NULL;
494
+ }
495
+
496
+ JSContext* cleanup = JS_NewContext(runtime->js, 8192L);
497
+ JS_HashTableEnumerateEntries(runtime->jsids, proxy_cleanup_enumerator, runtime);
498
+ JS_DestroyContext(cleanup);
499
+
500
+ JS_DestroyRuntime(runtime->js);
501
+ }
502
+
418
503
  free(runtime);
419
504
  }
420
505
 
@@ -437,13 +522,16 @@ void init_Johnson_TraceMonkey_Runtime(VALUE tracemonkey)
437
522
  VALUE klass = rb_define_class_under(tracemonkey, "Runtime", johnson_runtime);
438
523
 
439
524
  rb_define_alloc_func(klass, allocate);
440
- rb_define_private_method(klass, "initialize_native", (ruby_callback)initialize_native, 1);
525
+ rb_define_private_method(klass, "initialize_native", (ruby_callback)initialize_native, 2);
441
526
 
442
527
  rb_define_method(klass, "global", (ruby_callback)global, 0);
528
+ rb_define_method(klass, "new_global", (ruby_callback)global, 0);
443
529
 
444
530
  rb_define_method(klass, "new_split_global_outer", (ruby_callback)new_split_global_outer, 0);
445
531
  rb_define_method(klass, "new_split_global_inner", (ruby_callback)new_split_global_inner, 1);
446
532
 
533
+ rb_define_method(klass, "seal", (ruby_callback)seal, 2);
534
+
447
535
  rb_define_method(klass, "debugger=", (ruby_callback)set_debugger, 1);
448
536
  rb_define_method(klass, "gc", (ruby_callback)gc, 0);
449
537
  #ifdef JS_GC_ZEAL
@@ -453,4 +541,6 @@ void init_Johnson_TraceMonkey_Runtime(VALUE tracemonkey)
453
541
  rb_define_private_method(klass, "native_compile", (ruby_callback)native_compile, 4);
454
542
  rb_define_method(klass, "set_trap", (ruby_callback)set_trap, 3);
455
543
  rb_define_private_method(klass, "clear_trap", (ruby_callback)clear_trap, 2);
544
+
545
+ // rb_define_private_method(klass, "_destroy", (ruby_callback)destroy, 0);
456
546
  }
@@ -3,17 +3,12 @@
3
3
  JSObject* johnson_create_split_global_outer_object(JSContext* cx)
4
4
  {
5
5
  JSObject* outer = split_create_outer(cx);
6
- // fprintf(stderr,"outer %08x\n", outer);
7
6
  return outer;
8
7
  }
9
8
 
10
9
  JSObject* johnson_create_split_global_inner_object(JSContext* cx, JSObject* outer)
11
10
  {
12
- // JSObject* current = JS_GetGlobalObject(cx);
13
- // JS_SetGlobalObject(cx, outer);
14
11
  JSObject* inner = split_create_inner(cx, outer);
15
12
  JS_ClearScope(cx, outer);
16
- // fprintf(stderr,"inner %08x outer %08x\n", inner, outer);
17
- // JS_SetGlobalObject(cx, current);
18
13
  return inner;
19
14
  }
@@ -1,5 +1,5 @@
1
- #ifndef JOHNSON_SPIDERMONKEY_H
2
- #define JOHNSON_SPIDERMONKEY_H
1
+ #ifndef JOHNSON_TRACEMONKEY_H
2
+ #define JOHNSON_TRACEMONKEY_H
3
3
 
4
4
  #include <assert.h>
5
5
  #include <stdarg.h>
@@ -1,5 +1,5 @@
1
1
  require "stackdeck"
2
-
2
+ require 'date'
3
3
  require "generator"
4
4
 
5
5
  # the 'public' interface
@@ -16,7 +16,7 @@ require "johnson/visitors"
16
16
  require "johnson/nodes"
17
17
 
18
18
  module Johnson
19
- VERSION = "2.0.0.pre1"
19
+ VERSION = "2.0.0.pre2"
20
20
 
21
21
  def self.version
22
22
  VERSION
@@ -26,8 +26,11 @@ module Johnson
26
26
  # this is deprecated; instead, just create an instance of that
27
27
  # engine's runtime directly.
28
28
  #
29
+ # options passed to the underlying runtime
30
+ # Use size to specify heap limit
31
+ #
29
32
  # :call-seq:
30
- # new(runtime_class=nil)
33
+ # new(runtime_class=nil, options)
31
34
  #
32
35
  def self.new(*args)
33
36
  return super if self < Johnson::Runtime
@@ -35,12 +38,10 @@ module Johnson
35
38
  delegate = args.first
36
39
  if delegate.is_a? Class
37
40
  delegate.new
38
- elsif delegate
41
+ elsif !delegate.nil? && !delegate.is_a?( Hash )
39
42
  delegate
40
- elsif
41
- v = default.new( *args )
42
- raise "hell" if !v
43
- v
43
+ else
44
+ default.new( *args )
44
45
  end
45
46
  end
46
47
 
@@ -124,37 +125,46 @@ module Johnson
124
125
  global.Johnson.getStack
125
126
  end
126
127
 
127
- def parse_js_stack(ex, full_stack)
128
+ def parse_js_stack(full_stack, jsex=nil)
128
129
  full_js_stack = full_stack.split(/\n/)
129
130
  short_js_stack = current_stack.split(/\n/)
130
131
 
131
132
  upper, lower = StackDeck.split_list(full_js_stack, short_js_stack)
132
- upper.map {|s| StackDeck::Frame::JavaScript.parse(s) }
133
+ stack = upper.map {|s| StackDeck::Frame::JavaScript.parse(s) }
134
+
135
+ if jsex
136
+ top = StackDeck::Frame::JavaScript.new(nil, jsex['fileName'], jsex['lineNumber'])
137
+ stack.unshift top unless top.same_line?(stack.first)
138
+ end
139
+
140
+ stack
133
141
  end
134
142
  private :parse_js_stack
135
143
 
136
144
  def raise_js_exception(jsex)
145
+ exception_source = caller(2)
146
+
137
147
  case jsex
138
148
  when Exception
139
149
  if stack = jsex.send(:remove_instance_variable, :@js_stack)
140
- jsex.higher_stack_deck.concat parse_js_stack(jsex, stack)
150
+ jsex.append_to_stack_deck parse_js_stack(stack)
141
151
  end
142
152
  raise jsex
143
153
  when String
144
154
  ex = Johnson::Error.new(jsex)
155
+ ex.set_backtrace exception_source
145
156
  when Johnson::RubyLandProxy
146
157
  ex = Johnson::Error.new(jsex['message'] || jsex.to_s, jsex)
158
+ ex.set_backtrace exception_source
159
+
147
160
  if stack = jsex['stack']
148
- stack = parse_js_stack(ex, stack)
149
- top = StackDeck::Frame::JavaScript.new(nil, jsex['fileName'], jsex['lineNumber'])
150
- stack.unshift top unless top.same_line?(stack.first)
151
- ex.higher_stack_deck.concat stack
161
+ ex.append_to_stack_deck parse_js_stack(stack, jsex)
152
162
  end
153
163
  else
154
164
  ex = Johnson::Error.new(jsex.inspect)
165
+ ex.set_backtrace exception_source
155
166
  end
156
167
 
157
- ex.set_backtrace caller(2)
158
168
  raise ex
159
169
  end
160
170
 
@@ -168,7 +178,7 @@ module Johnson
168
178
 
169
179
  def default
170
180
  if @runtimes.empty?
171
- require "johnson/spidermonkey"
181
+ require "johnson/tracemonkey"
172
182
  end
173
183
  @runtimes[0]
174
184
  end
@@ -12,7 +12,9 @@ module Johnson #:nodoc:
12
12
  @debugger = nil
13
13
  @gcthings = {}
14
14
  @traps = []
15
- initialize_native(options)
15
+ size = (options[:size] || options["size"] || ENV["JOHNSON_HEAP_SIZE"] || 0x2000000).to_i
16
+ options.delete(:size)
17
+ initialize_native(size, options)
16
18
  super()
17
19
  end
18
20
 
@@ -31,8 +33,9 @@ module Johnson #:nodoc:
31
33
  end
32
34
 
33
35
  def current_context
34
- contexts = (Thread.current[CONTEXT_MAP_KEY] ||= {})
35
- contexts[self.object_id] ||= Context.new(self)
36
+ @thread_id ||= Thread.current.object_id
37
+ raise RuntimeError, "Johnson is not thread safe" if @thread_id != Thread.current.object_id
38
+ return @context ||= Context.new(self)
36
39
  end
37
40
 
38
41
  def evaluate(script, filename = nil, linenum = nil, global=nil, scope=nil)
@@ -1012,10 +1012,8 @@ hunspell.hxx
1012
1012
  #if MOZ_NATIVE_BZ2==1
1013
1013
  bzlib.h
1014
1014
  #endif
1015
- #ifdef MOZ_PLATFORM_HILDON
1015
+ #if MOZ_PLATFORM_MAEMO==5
1016
1016
  hildon-uri.h
1017
1017
  hildon-mime.h
1018
- #endif
1019
- #ifdef NS_OSSO
1020
1018
  libosso.h
1021
1019
  #endif
@@ -956,6 +956,8 @@ typedef struct JSLocalRootStack {
956
956
 
957
957
  #define JSRESOLVE_INFER 0xffff /* infer bits from current bytecode */
958
958
 
959
+ extern const JSDebugHooks js_NullDebugHooks; /* defined in jsdbgapi.cpp */
960
+
959
961
  struct JSContext {
960
962
  /*
961
963
  * If this flag is set, we were asked to call back the operation callback
@@ -1152,8 +1154,9 @@ struct JSContext {
1152
1154
  void updateJITEnabled() {
1153
1155
  #ifdef JS_TRACER
1154
1156
  jitEnabled = ((options & JSOPTION_JIT) &&
1155
- !runtime->debuggerInhibitsJIT() &&
1156
- debugHooks == &runtime->globalDebugHooks);
1157
+ (debugHooks == &js_NullDebugHooks ||
1158
+ (debugHooks == &runtime->globalDebugHooks &&
1159
+ !runtime->debuggerInhibitsJIT())));
1157
1160
  #endif
1158
1161
  }
1159
1162
 
@@ -1817,11 +1817,13 @@ JS_GetGlobalDebugHooks(JSRuntime *rt)
1817
1817
  return &rt->globalDebugHooks;
1818
1818
  }
1819
1819
 
1820
+ const JSDebugHooks js_NullDebugHooks = {};
1821
+
1820
1822
  JS_PUBLIC_API(JSDebugHooks *)
1821
1823
  JS_SetContextDebugHooks(JSContext *cx, const JSDebugHooks *hooks)
1822
1824
  {
1823
1825
  JS_ASSERT(hooks);
1824
- if (hooks != &cx->runtime->globalDebugHooks)
1826
+ if (hooks != &cx->runtime->globalDebugHooks && hooks != &js_NullDebugHooks)
1825
1827
  js_LeaveTrace(cx);
1826
1828
 
1827
1829
  #ifdef JS_TRACER
@@ -1836,6 +1838,12 @@ JS_SetContextDebugHooks(JSContext *cx, const JSDebugHooks *hooks)
1836
1838
  return old;
1837
1839
  }
1838
1840
 
1841
+ JS_PUBLIC_API(JSDebugHooks *)
1842
+ JS_ClearContextDebugHooks(JSContext *cx)
1843
+ {
1844
+ return JS_SetContextDebugHooks(cx, &js_NullDebugHooks);
1845
+ }
1846
+
1839
1847
  #ifdef MOZ_SHARK
1840
1848
 
1841
1849
  #include <CHUD/CHUD.h>
@@ -427,6 +427,10 @@ JS_GetGlobalDebugHooks(JSRuntime *rt);
427
427
  extern JS_PUBLIC_API(JSDebugHooks *)
428
428
  JS_SetContextDebugHooks(JSContext *cx, const JSDebugHooks *hooks);
429
429
 
430
+ /* Disable debug hooks for this context. */
431
+ extern JS_PUBLIC_API(JSDebugHooks *)
432
+ JS_ClearContextDebugHooks(JSContext *cx);
433
+
430
434
  #ifdef MOZ_SHARK
431
435
 
432
436
  extern JS_PUBLIC_API(JSBool)
@@ -1,2 +1,2 @@
1
1
  url-prefix ../../jsreftest.html?test=ecma_3_1/Object/
2
- script regress-444787.js
2
+ fails script regress-444787.js # bug 535393
@@ -31,7 +31,7 @@ script regress-167658.js
31
31
  script regress-168347.js
32
32
  random script regress-169559.js
33
33
  script regress-170193.js
34
- script regress-172699.js
34
+ fails script regress-172699.js # bug 535393
35
35
  skip script regress-173067.js # obsolete test
36
36
  script regress-174709.js
37
37
  script regress-176125.js
@@ -131,7 +131,7 @@ script regress-31255.js
131
131
  script regress-312588.js
132
132
  random script regress-313967-01.js # BigO
133
133
  random script regress-313967-02.js # BigO
134
- skip-if(xulRuntime.OS=="WINNT"&&isDebugBuild) script regress-314401.js # slow
134
+ skip-if(!xulRuntime.shell) script regress-314401.js # bug 538159
135
135
  script regress-315974.js
136
136
  script regress-315990.js
137
137
  script regress-317476.js
@@ -170,7 +170,7 @@ skip-if(xulRuntime.OS=="WINNT"&&isDebugBuild) script regress-341360.js # slow
170
170
  script regress-343713.js
171
171
  script regress-343966.js
172
172
  script regress-344711-n.js
173
- script regress-344804.js
173
+ skip-if(!xulRuntime.shell) script regress-344804.js # bug 547025
174
174
  script regress-344959.js
175
175
  script regress-346237.js
176
176
  script regress-346801.js
@@ -340,7 +340,7 @@ script regress-481436.js
340
340
  script regress-482421.js
341
341
  script regress-483103.js
342
342
  script regress-501124.js
343
- fails script regress-504078.js
343
+ script regress-504078.js
344
344
  script regress-506567.js
345
345
  script regress-57043.js
346
346
  script regress-58116.js