johnson 2.0.0.pre1 → 2.0.0.pre2

Sign up to get free protection for your applications and to get access to all the features.
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