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.
- data/CHANGELOG.rdoc +12 -0
- data/Manifest.txt +4 -285
- data/Rakefile +13 -20
- data/ext/tracemonkey/global.cc +4 -1
- data/ext/tracemonkey/js.cc +30 -33
- data/ext/tracemonkey/runtime.cc +96 -6
- data/ext/tracemonkey/split_global.cc +0 -5
- data/ext/tracemonkey/tracemonkey.h +2 -2
- data/lib/johnson.rb +2 -2
- data/lib/johnson/runtime.rb +25 -15
- data/lib/johnson/tracemonkey/runtime.rb +6 -3
- data/vendor/tracemonkey/config/system-headers +1 -3
- data/vendor/tracemonkey/jscntxt.h +5 -2
- data/vendor/tracemonkey/jsdbgapi.cpp +9 -1
- data/vendor/tracemonkey/jsdbgapi.h +4 -0
- data/vendor/tracemonkey/tests/ecma/NativeObjects/browser.js +0 -0
- data/vendor/tracemonkey/tests/ecma/NativeObjects/jstests.list +0 -0
- data/vendor/tracemonkey/tests/ecma_3_1/Object/jstests.list +1 -1
- data/vendor/tracemonkey/tests/js1_3/misc/browser.js +0 -0
- data/vendor/tracemonkey/tests/js1_3/misc/jstests.list +0 -0
- data/vendor/tracemonkey/tests/js1_5/Regress/jstests.list +4 -4
- data/vendor/tracemonkey/tests/js1_5/Scope/jstests.list +1 -1
- data/vendor/tracemonkey/tests/js1_5/decompilation/jstests.list +2 -2
- data/vendor/tracemonkey/tests/js1_7/decompilation/jstests.list +1 -1
- data/vendor/tracemonkey/tests/shell.js +2 -1
- metadata +51 -309
- data/ext/spidermonkey/context.c +0 -116
- data/ext/spidermonkey/context.h +0 -19
- data/ext/spidermonkey/conversions.c +0 -361
- data/ext/spidermonkey/conversions.h +0 -31
- data/ext/spidermonkey/debugger.c +0 -234
- data/ext/spidermonkey/debugger.h +0 -10
- data/ext/spidermonkey/extconf.rb +0 -32
- data/ext/spidermonkey/extensions.c +0 -37
- data/ext/spidermonkey/extensions.h +0 -12
- data/ext/spidermonkey/global.c +0 -40
- data/ext/spidermonkey/global.h +0 -11
- data/ext/spidermonkey/idhash.c +0 -16
- data/ext/spidermonkey/idhash.h +0 -8
- data/ext/spidermonkey/immutable_node.c +0 -1153
- data/ext/spidermonkey/immutable_node.c.erb +0 -523
- data/ext/spidermonkey/immutable_node.h +0 -22
- data/ext/spidermonkey/jroot.h +0 -197
- data/ext/spidermonkey/js_land_proxy.c +0 -620
- data/ext/spidermonkey/js_land_proxy.h +0 -20
- data/ext/spidermonkey/ruby_land_proxy.c +0 -618
- data/ext/spidermonkey/ruby_land_proxy.h +0 -38
- data/ext/spidermonkey/runtime.c +0 -396
- data/ext/spidermonkey/runtime.h +0 -27
- data/ext/spidermonkey/spidermonkey.c +0 -22
- data/ext/spidermonkey/spidermonkey.h +0 -29
- data/lib/johnson/spidermonkey.rb +0 -12
- data/lib/johnson/spidermonkey/context.rb +0 -10
- data/lib/johnson/spidermonkey/debugger.rb +0 -67
- data/lib/johnson/spidermonkey/immutable_node.rb +0 -282
- data/lib/johnson/spidermonkey/js_land_proxy.rb +0 -64
- data/lib/johnson/spidermonkey/mutable_tree_visitor.rb +0 -242
- data/lib/johnson/spidermonkey/ruby_land_proxy.rb +0 -17
- data/lib/johnson/spidermonkey/runtime.rb +0 -74
- data/test/johnson/spidermonkey/context_test.rb +0 -21
- data/test/johnson/spidermonkey/immutable_node_test.rb +0 -34
- data/test/johnson/spidermonkey/js_land_proxy_test.rb +0 -273
- data/test/johnson/spidermonkey/ruby_land_proxy_test.rb +0 -274
- data/test/johnson/spidermonkey/runtime_test.rb +0 -41
- data/vendor/spidermonkey/.cvsignore +0 -9
- data/vendor/spidermonkey/Makefile.in +0 -449
- data/vendor/spidermonkey/Makefile.ref +0 -365
- data/vendor/spidermonkey/README.html +0 -820
- data/vendor/spidermonkey/SpiderMonkey.rsp +0 -12
- data/vendor/spidermonkey/Y.js +0 -19
- data/vendor/spidermonkey/build.mk +0 -43
- data/vendor/spidermonkey/config.mk +0 -192
- data/vendor/spidermonkey/config/AIX4.1.mk +0 -65
- data/vendor/spidermonkey/config/AIX4.2.mk +0 -64
- data/vendor/spidermonkey/config/AIX4.3.mk +0 -65
- data/vendor/spidermonkey/config/Darwin.mk +0 -83
- data/vendor/spidermonkey/config/Darwin1.3.mk +0 -81
- data/vendor/spidermonkey/config/Darwin1.4.mk +0 -41
- data/vendor/spidermonkey/config/Darwin5.2.mk +0 -81
- data/vendor/spidermonkey/config/Darwin5.3.mk +0 -81
- data/vendor/spidermonkey/config/HP-UXB.10.10.mk +0 -77
- data/vendor/spidermonkey/config/HP-UXB.10.20.mk +0 -77
- data/vendor/spidermonkey/config/HP-UXB.11.00.mk +0 -80
- data/vendor/spidermonkey/config/IRIX.mk +0 -87
- data/vendor/spidermonkey/config/IRIX5.3.mk +0 -44
- data/vendor/spidermonkey/config/IRIX6.1.mk +0 -44
- data/vendor/spidermonkey/config/IRIX6.2.mk +0 -44
- data/vendor/spidermonkey/config/IRIX6.3.mk +0 -44
- data/vendor/spidermonkey/config/IRIX6.5.mk +0 -44
- data/vendor/spidermonkey/config/Linux_All.mk +0 -103
- data/vendor/spidermonkey/config/Mac_OS10.0.mk +0 -82
- data/vendor/spidermonkey/config/OSF1V4.0.mk +0 -72
- data/vendor/spidermonkey/config/OSF1V5.0.mk +0 -69
- data/vendor/spidermonkey/config/SunOS4.1.4.mk +0 -101
- data/vendor/spidermonkey/config/SunOS5.10.mk +0 -50
- data/vendor/spidermonkey/config/SunOS5.3.mk +0 -91
- data/vendor/spidermonkey/config/SunOS5.4.mk +0 -92
- data/vendor/spidermonkey/config/SunOS5.5.1.mk +0 -44
- data/vendor/spidermonkey/config/SunOS5.5.mk +0 -87
- data/vendor/spidermonkey/config/SunOS5.6.mk +0 -89
- data/vendor/spidermonkey/config/SunOS5.7.mk +0 -44
- data/vendor/spidermonkey/config/SunOS5.8.mk +0 -44
- data/vendor/spidermonkey/config/SunOS5.9.mk +0 -44
- data/vendor/spidermonkey/config/WINNT4.0.mk +0 -117
- data/vendor/spidermonkey/config/WINNT5.0.mk +0 -117
- data/vendor/spidermonkey/config/WINNT5.1.mk +0 -117
- data/vendor/spidermonkey/config/WINNT5.2.mk +0 -117
- data/vendor/spidermonkey/config/WINNT6.0.mk +0 -117
- data/vendor/spidermonkey/config/dgux.mk +0 -64
- data/vendor/spidermonkey/editline/Makefile.ref +0 -144
- data/vendor/spidermonkey/editline/README +0 -83
- data/vendor/spidermonkey/editline/editline.3 +0 -175
- data/vendor/spidermonkey/editline/editline.c +0 -1369
- data/vendor/spidermonkey/editline/editline.h +0 -135
- data/vendor/spidermonkey/editline/sysunix.c +0 -182
- data/vendor/spidermonkey/editline/unix.h +0 -82
- data/vendor/spidermonkey/fdlibm/.cvsignore +0 -7
- data/vendor/spidermonkey/fdlibm/Makefile.in +0 -127
- data/vendor/spidermonkey/fdlibm/Makefile.ref +0 -192
- data/vendor/spidermonkey/fdlibm/e_acos.c +0 -147
- data/vendor/spidermonkey/fdlibm/e_acosh.c +0 -105
- data/vendor/spidermonkey/fdlibm/e_asin.c +0 -156
- data/vendor/spidermonkey/fdlibm/e_atan2.c +0 -165
- data/vendor/spidermonkey/fdlibm/e_atanh.c +0 -110
- data/vendor/spidermonkey/fdlibm/e_cosh.c +0 -133
- data/vendor/spidermonkey/fdlibm/e_exp.c +0 -202
- data/vendor/spidermonkey/fdlibm/e_fmod.c +0 -184
- data/vendor/spidermonkey/fdlibm/e_gamma.c +0 -71
- data/vendor/spidermonkey/fdlibm/e_gamma_r.c +0 -70
- data/vendor/spidermonkey/fdlibm/e_hypot.c +0 -173
- data/vendor/spidermonkey/fdlibm/e_j0.c +0 -524
- data/vendor/spidermonkey/fdlibm/e_j1.c +0 -523
- data/vendor/spidermonkey/fdlibm/e_jn.c +0 -315
- data/vendor/spidermonkey/fdlibm/e_lgamma.c +0 -71
- data/vendor/spidermonkey/fdlibm/e_lgamma_r.c +0 -347
- data/vendor/spidermonkey/fdlibm/e_log.c +0 -184
- data/vendor/spidermonkey/fdlibm/e_log10.c +0 -134
- data/vendor/spidermonkey/fdlibm/e_pow.c +0 -386
- data/vendor/spidermonkey/fdlibm/e_rem_pio2.c +0 -222
- data/vendor/spidermonkey/fdlibm/e_remainder.c +0 -120
- data/vendor/spidermonkey/fdlibm/e_scalb.c +0 -89
- data/vendor/spidermonkey/fdlibm/e_sinh.c +0 -122
- data/vendor/spidermonkey/fdlibm/e_sqrt.c +0 -497
- data/vendor/spidermonkey/fdlibm/fdlibm.h +0 -273
- data/vendor/spidermonkey/fdlibm/fdlibm.mak +0 -1453
- data/vendor/spidermonkey/fdlibm/fdlibm.mdp +0 -0
- data/vendor/spidermonkey/fdlibm/k_cos.c +0 -135
- data/vendor/spidermonkey/fdlibm/k_rem_pio2.c +0 -354
- data/vendor/spidermonkey/fdlibm/k_sin.c +0 -114
- data/vendor/spidermonkey/fdlibm/k_standard.c +0 -785
- data/vendor/spidermonkey/fdlibm/k_tan.c +0 -170
- data/vendor/spidermonkey/fdlibm/s_asinh.c +0 -101
- data/vendor/spidermonkey/fdlibm/s_atan.c +0 -175
- data/vendor/spidermonkey/fdlibm/s_cbrt.c +0 -133
- data/vendor/spidermonkey/fdlibm/s_ceil.c +0 -120
- data/vendor/spidermonkey/fdlibm/s_copysign.c +0 -72
- data/vendor/spidermonkey/fdlibm/s_cos.c +0 -118
- data/vendor/spidermonkey/fdlibm/s_erf.c +0 -356
- data/vendor/spidermonkey/fdlibm/s_expm1.c +0 -267
- data/vendor/spidermonkey/fdlibm/s_fabs.c +0 -70
- data/vendor/spidermonkey/fdlibm/s_finite.c +0 -71
- data/vendor/spidermonkey/fdlibm/s_floor.c +0 -121
- data/vendor/spidermonkey/fdlibm/s_frexp.c +0 -99
- data/vendor/spidermonkey/fdlibm/s_ilogb.c +0 -85
- data/vendor/spidermonkey/fdlibm/s_isnan.c +0 -74
- data/vendor/spidermonkey/fdlibm/s_ldexp.c +0 -66
- data/vendor/spidermonkey/fdlibm/s_lib_version.c +0 -73
- data/vendor/spidermonkey/fdlibm/s_log1p.c +0 -211
- data/vendor/spidermonkey/fdlibm/s_logb.c +0 -79
- data/vendor/spidermonkey/fdlibm/s_matherr.c +0 -64
- data/vendor/spidermonkey/fdlibm/s_modf.c +0 -132
- data/vendor/spidermonkey/fdlibm/s_nextafter.c +0 -124
- data/vendor/spidermonkey/fdlibm/s_rint.c +0 -131
- data/vendor/spidermonkey/fdlibm/s_scalbn.c +0 -107
- data/vendor/spidermonkey/fdlibm/s_signgam.c +0 -40
- data/vendor/spidermonkey/fdlibm/s_significand.c +0 -68
- data/vendor/spidermonkey/fdlibm/s_sin.c +0 -118
- data/vendor/spidermonkey/fdlibm/s_tan.c +0 -112
- data/vendor/spidermonkey/fdlibm/s_tanh.c +0 -122
- data/vendor/spidermonkey/fdlibm/w_acos.c +0 -78
- data/vendor/spidermonkey/fdlibm/w_acosh.c +0 -78
- data/vendor/spidermonkey/fdlibm/w_asin.c +0 -80
- data/vendor/spidermonkey/fdlibm/w_atan2.c +0 -79
- data/vendor/spidermonkey/fdlibm/w_atanh.c +0 -81
- data/vendor/spidermonkey/fdlibm/w_cosh.c +0 -77
- data/vendor/spidermonkey/fdlibm/w_exp.c +0 -88
- data/vendor/spidermonkey/fdlibm/w_fmod.c +0 -78
- data/vendor/spidermonkey/fdlibm/w_gamma.c +0 -85
- data/vendor/spidermonkey/fdlibm/w_gamma_r.c +0 -81
- data/vendor/spidermonkey/fdlibm/w_hypot.c +0 -78
- data/vendor/spidermonkey/fdlibm/w_j0.c +0 -105
- data/vendor/spidermonkey/fdlibm/w_j1.c +0 -106
- data/vendor/spidermonkey/fdlibm/w_jn.c +0 -128
- data/vendor/spidermonkey/fdlibm/w_lgamma.c +0 -85
- data/vendor/spidermonkey/fdlibm/w_lgamma_r.c +0 -81
- data/vendor/spidermonkey/fdlibm/w_log.c +0 -78
- data/vendor/spidermonkey/fdlibm/w_log10.c +0 -81
- data/vendor/spidermonkey/fdlibm/w_pow.c +0 -99
- data/vendor/spidermonkey/fdlibm/w_remainder.c +0 -77
- data/vendor/spidermonkey/fdlibm/w_scalb.c +0 -95
- data/vendor/spidermonkey/fdlibm/w_sinh.c +0 -77
- data/vendor/spidermonkey/fdlibm/w_sqrt.c +0 -77
- data/vendor/spidermonkey/javascript-trace.d +0 -73
- data/vendor/spidermonkey/js.c +0 -3951
- data/vendor/spidermonkey/js.mdp +0 -0
- data/vendor/spidermonkey/js.msg +0 -308
- data/vendor/spidermonkey/js.pkg +0 -2
- data/vendor/spidermonkey/js3240.rc +0 -79
- data/vendor/spidermonkey/jsOS240.def +0 -654
- data/vendor/spidermonkey/jsapi.c +0 -5836
- data/vendor/spidermonkey/jsapi.h +0 -2624
- data/vendor/spidermonkey/jsarena.c +0 -450
- data/vendor/spidermonkey/jsarena.h +0 -318
- data/vendor/spidermonkey/jsarray.c +0 -2996
- data/vendor/spidermonkey/jsarray.h +0 -127
- data/vendor/spidermonkey/jsatom.c +0 -1045
- data/vendor/spidermonkey/jsatom.h +0 -442
- data/vendor/spidermonkey/jsbit.h +0 -253
- data/vendor/spidermonkey/jsbool.c +0 -176
- data/vendor/spidermonkey/jsbool.h +0 -73
- data/vendor/spidermonkey/jsclist.h +0 -139
- data/vendor/spidermonkey/jscntxt.c +0 -1348
- data/vendor/spidermonkey/jscntxt.h +0 -1120
- data/vendor/spidermonkey/jscompat.h +0 -57
- data/vendor/spidermonkey/jsconfig.h +0 -248
- data/vendor/spidermonkey/jsconfig.mk +0 -181
- data/vendor/spidermonkey/jscpucfg.c +0 -396
- data/vendor/spidermonkey/jscpucfg.h +0 -212
- data/vendor/spidermonkey/jsdate.c +0 -2390
- data/vendor/spidermonkey/jsdate.h +0 -124
- data/vendor/spidermonkey/jsdbgapi.c +0 -1802
- data/vendor/spidermonkey/jsdbgapi.h +0 -464
- data/vendor/spidermonkey/jsdhash.c +0 -868
- data/vendor/spidermonkey/jsdhash.h +0 -592
- data/vendor/spidermonkey/jsdtoa.c +0 -3167
- data/vendor/spidermonkey/jsdtoa.h +0 -130
- data/vendor/spidermonkey/jsdtracef.c +0 -317
- data/vendor/spidermonkey/jsdtracef.h +0 -77
- data/vendor/spidermonkey/jsemit.c +0 -6909
- data/vendor/spidermonkey/jsemit.h +0 -741
- data/vendor/spidermonkey/jsexn.c +0 -1371
- data/vendor/spidermonkey/jsexn.h +0 -96
- data/vendor/spidermonkey/jsfile.c +0 -2736
- data/vendor/spidermonkey/jsfile.h +0 -56
- data/vendor/spidermonkey/jsfile.msg +0 -90
- data/vendor/spidermonkey/jsfun.c +0 -2634
- data/vendor/spidermonkey/jsfun.h +0 -254
- data/vendor/spidermonkey/jsgc.c +0 -3562
- data/vendor/spidermonkey/jsgc.h +0 -403
- data/vendor/spidermonkey/jshash.c +0 -476
- data/vendor/spidermonkey/jshash.h +0 -151
- data/vendor/spidermonkey/jsify.pl +0 -485
- data/vendor/spidermonkey/jsinterp.c +0 -7007
- data/vendor/spidermonkey/jsinterp.h +0 -525
- data/vendor/spidermonkey/jsinvoke.c +0 -43
- data/vendor/spidermonkey/jsiter.c +0 -1067
- data/vendor/spidermonkey/jsiter.h +0 -122
- data/vendor/spidermonkey/jskeyword.tbl +0 -124
- data/vendor/spidermonkey/jskwgen.c +0 -460
- data/vendor/spidermonkey/jslibmath.h +0 -266
- data/vendor/spidermonkey/jslock.c +0 -1309
- data/vendor/spidermonkey/jslock.h +0 -313
- data/vendor/spidermonkey/jslocko.asm +0 -60
- data/vendor/spidermonkey/jslog2.c +0 -94
- data/vendor/spidermonkey/jslong.c +0 -264
- data/vendor/spidermonkey/jslong.h +0 -412
- data/vendor/spidermonkey/jsmath.c +0 -567
- data/vendor/spidermonkey/jsmath.h +0 -57
- data/vendor/spidermonkey/jsnum.c +0 -1239
- data/vendor/spidermonkey/jsnum.h +0 -283
- data/vendor/spidermonkey/jsobj.c +0 -5282
- data/vendor/spidermonkey/jsobj.h +0 -709
- data/vendor/spidermonkey/jsopcode.c +0 -5245
- data/vendor/spidermonkey/jsopcode.h +0 -394
- data/vendor/spidermonkey/jsopcode.tbl +0 -523
- data/vendor/spidermonkey/jsotypes.h +0 -202
- data/vendor/spidermonkey/jsparse.c +0 -6704
- data/vendor/spidermonkey/jsparse.h +0 -511
- data/vendor/spidermonkey/jsprf.c +0 -1264
- data/vendor/spidermonkey/jsprf.h +0 -150
- data/vendor/spidermonkey/jsproto.tbl +0 -128
- data/vendor/spidermonkey/jsprvtd.h +0 -267
- data/vendor/spidermonkey/jspubtd.h +0 -744
- data/vendor/spidermonkey/jsregexp.c +0 -4364
- data/vendor/spidermonkey/jsregexp.h +0 -183
- data/vendor/spidermonkey/jsreops.tbl +0 -145
- data/vendor/spidermonkey/jsscan.c +0 -2012
- data/vendor/spidermonkey/jsscan.h +0 -387
- data/vendor/spidermonkey/jsscope.c +0 -1957
- data/vendor/spidermonkey/jsscope.h +0 -418
- data/vendor/spidermonkey/jsscript.c +0 -1832
- data/vendor/spidermonkey/jsscript.h +0 -287
- data/vendor/spidermonkey/jsshell.msg +0 -50
- data/vendor/spidermonkey/jsstddef.h +0 -83
- data/vendor/spidermonkey/jsstr.c +0 -5005
- data/vendor/spidermonkey/jsstr.h +0 -641
- data/vendor/spidermonkey/jstypes.h +0 -475
- data/vendor/spidermonkey/jsutil.c +0 -345
- data/vendor/spidermonkey/jsutil.h +0 -157
- data/vendor/spidermonkey/jsxdrapi.c +0 -800
- data/vendor/spidermonkey/jsxdrapi.h +0 -218
- data/vendor/spidermonkey/jsxml.c +0 -8476
- data/vendor/spidermonkey/jsxml.h +0 -349
- data/vendor/spidermonkey/lock_SunOS.s +0 -119
- data/vendor/spidermonkey/perfect.js +0 -39
- data/vendor/spidermonkey/plify_jsdhash.sed +0 -36
- data/vendor/spidermonkey/prmjtime.c +0 -846
- data/vendor/spidermonkey/prmjtime.h +0 -103
- data/vendor/spidermonkey/resource.h +0 -15
- data/vendor/spidermonkey/rules.mk +0 -197
- data/vendor/spidermonkey/win32.order +0 -384
data/ext/tracemonkey/runtime.cc
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
-
|
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,
|
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
|
}
|
data/lib/johnson.rb
CHANGED
@@ -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.
|
19
|
+
VERSION = "2.0.0.pre2"
|
20
20
|
|
21
21
|
def self.version
|
22
22
|
VERSION
|
data/lib/johnson/runtime.rb
CHANGED
@@ -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
|
-
|
41
|
-
|
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(
|
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.
|
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
|
-
|
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/
|
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
|
-
|
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
|
-
|
35
|
-
|
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)
|
@@ -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
|
-
|
1156
|
-
|
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)
|
File without changes
|
File without changes
|
@@ -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
|
File without changes
|
File without changes
|
@@ -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.
|
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
|
-
|
343
|
+
script regress-504078.js
|
344
344
|
script regress-506567.js
|
345
345
|
script regress-57043.js
|
346
346
|
script regress-58116.js
|