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/spidermonkey/context.c
DELETED
@@ -1,116 +0,0 @@
|
|
1
|
-
#include "context.h"
|
2
|
-
#include "conversions.h"
|
3
|
-
#include "global.h"
|
4
|
-
#include "extensions.h"
|
5
|
-
#include "idhash.h"
|
6
|
-
#include "jsdbgapi.h"
|
7
|
-
|
8
|
-
// callback for JS_SetErrorReporter
|
9
|
-
static void report_js_error(JSContext* js, const char* message, JSErrorReport* UNUSED(report))
|
10
|
-
{
|
11
|
-
// first we find ourselves
|
12
|
-
VALUE self = (VALUE)JS_GetContextPrivate(js);
|
13
|
-
|
14
|
-
// then we find our bridge
|
15
|
-
JohnsonContext* context;
|
16
|
-
Data_Get_Struct(self, JohnsonContext, context);
|
17
|
-
|
18
|
-
// NOTE: SpiderMonkey REALLY doesn't like being interrupted. If we
|
19
|
-
// jump over to Ruby and raise here, segfaults and such ensue.
|
20
|
-
// Instead, we store the exception (if any) and the error message
|
21
|
-
// on the context. They're dealt with in the if (!ok) block of evaluate().
|
22
|
-
|
23
|
-
strncpy(context->msg, message, MAX_EXCEPTION_MESSAGE_SIZE);
|
24
|
-
JS_GetPendingException(context->js, &context->ex);
|
25
|
-
}
|
26
|
-
|
27
|
-
// callback for JS_SetBranchCallback
|
28
|
-
static JSBool branch_callback(JSContext* js, JSScript* UNUSED(script))
|
29
|
-
{
|
30
|
-
static unsigned long branch_counter = 0;
|
31
|
-
if( ++branch_counter % 0x1000 == 0 )
|
32
|
-
JS_MaybeGC( js );
|
33
|
-
return JS_TRUE;
|
34
|
-
}
|
35
|
-
|
36
|
-
/*
|
37
|
-
* call-seq:
|
38
|
-
* native_initialize(runtime, options)
|
39
|
-
*
|
40
|
-
* Create the underlying SpiderMonkey context. This must be called
|
41
|
-
* first, and only once. Called by +initialize+ by default.
|
42
|
-
*/
|
43
|
-
static VALUE
|
44
|
-
initialize_native(VALUE self, VALUE rb_runtime, VALUE UNUSED(options))
|
45
|
-
{
|
46
|
-
JohnsonContext* context;
|
47
|
-
JohnsonRuntime* runtime;
|
48
|
-
|
49
|
-
Data_Get_Struct(self, JohnsonContext, context);
|
50
|
-
Data_Get_Struct(rb_runtime, JohnsonRuntime, runtime);
|
51
|
-
|
52
|
-
if ((context->js = JS_NewContext(runtime->js, 8192L)))
|
53
|
-
{
|
54
|
-
// See if the runtime already has a shared global object.
|
55
|
-
JSObject* global = runtime->global;
|
56
|
-
|
57
|
-
// If it does, use it. If not,
|
58
|
-
if (!global)
|
59
|
-
// create one of our global objects.
|
60
|
-
global = johnson_create_global_object(context->js);
|
61
|
-
|
62
|
-
// Manually set the context's global object.
|
63
|
-
JS_SetGlobalObject(context->js, global);
|
64
|
-
JS_SetErrorReporter(context->js, report_js_error);
|
65
|
-
JS_SetBranchCallback(context->js, branch_callback);
|
66
|
-
JS_SetContextPrivate(context->js, (void *)self);
|
67
|
-
|
68
|
-
JS_SetOptions(context->js, JS_GetOptions(context->js)
|
69
|
-
#ifdef JSOPTION_DONT_REPORT_UNCAUGHT
|
70
|
-
| JSOPTION_DONT_REPORT_UNCAUGHT
|
71
|
-
#endif
|
72
|
-
#ifdef JSOPTION_VAROBJFIX
|
73
|
-
| JSOPTION_VAROBJFIX
|
74
|
-
#endif
|
75
|
-
// #ifdef JSOPTION_XML
|
76
|
-
// | JSOPTION_XML
|
77
|
-
// #endif
|
78
|
-
);
|
79
|
-
|
80
|
-
// Success.
|
81
|
-
return init_spidermonkey_extensions(context, self);
|
82
|
-
}
|
83
|
-
|
84
|
-
if (context->js) JS_DestroyContext(context->js);
|
85
|
-
|
86
|
-
rb_raise(rb_eRuntimeError, "Failed to initialize SpiderMonkey context");
|
87
|
-
}
|
88
|
-
|
89
|
-
///////////////////////////////////////////////////////////////////////////
|
90
|
-
//// INFRASTRUCTURE BELOW HERE ////////////////////////////////////////////
|
91
|
-
///////////////////////////////////////////////////////////////////////////
|
92
|
-
|
93
|
-
static VALUE allocate(VALUE klass)
|
94
|
-
{
|
95
|
-
JohnsonContext* context = calloc(1L, sizeof(JohnsonContext));
|
96
|
-
return Data_Wrap_Struct(klass, 0, 0, context);
|
97
|
-
}
|
98
|
-
|
99
|
-
void init_Johnson_SpiderMonkey_Context(VALUE spidermonkey)
|
100
|
-
{
|
101
|
-
/* HACK: These comments are *only* to make RDoc happy.
|
102
|
-
VALUE johnson = rb_define_module("Johnson");
|
103
|
-
VALUE spidermonkey = rb_define_module_under(johnson, "SpiderMonkey");
|
104
|
-
*/
|
105
|
-
|
106
|
-
/* This is the private context used for SpiderMonkey. */
|
107
|
-
VALUE context = rb_define_class_under(spidermonkey, "Context", rb_cObject);
|
108
|
-
|
109
|
-
rb_define_alloc_func(context, allocate);
|
110
|
-
rb_define_private_method(context, "initialize_native", initialize_native, 2);
|
111
|
-
}
|
112
|
-
|
113
|
-
VALUE Johnson_SpiderMonkey_JSLandProxy()
|
114
|
-
{
|
115
|
-
return rb_eval_string("Johnson::SpiderMonkey::JSLandProxy");
|
116
|
-
}
|
data/ext/spidermonkey/context.h
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
#ifndef JOHNSON_SPIDERMONKEY_CONTEXT_H
|
2
|
-
#define JOHNSON_SPIDERMONKEY_CONTEXT_H
|
3
|
-
|
4
|
-
#include "spidermonkey.h"
|
5
|
-
|
6
|
-
#define MAX_EXCEPTION_MESSAGE_SIZE 2048L
|
7
|
-
|
8
|
-
typedef struct {
|
9
|
-
JSContext *js;
|
10
|
-
|
11
|
-
jsval ex; // an exception value
|
12
|
-
char msg[MAX_EXCEPTION_MESSAGE_SIZE]; // the 'backup' message
|
13
|
-
|
14
|
-
} JohnsonContext;
|
15
|
-
|
16
|
-
void init_Johnson_SpiderMonkey_Context(VALUE spidermonkey);
|
17
|
-
VALUE Johnson_SpiderMonkey_JSLandProxy();
|
18
|
-
|
19
|
-
#endif
|
@@ -1,361 +0,0 @@
|
|
1
|
-
#include "conversions.h"
|
2
|
-
#include "js_land_proxy.h"
|
3
|
-
#include "ruby_land_proxy.h"
|
4
|
-
|
5
|
-
DEFINE_RUBY_WRAPPER(convert_to_ruby, convert_to_ruby, ARGLIST2(runtime, js_value))
|
6
|
-
|
7
|
-
DEFINE_RUBY_WRAPPER(convert_js_string_to_ruby, convert_js_string_to_ruby, ARGLIST2(runtime, str))
|
8
|
-
|
9
|
-
static VALUE convert_regexp_to_ruby(JohnsonRuntime* runtime, jsval regexp);
|
10
|
-
DECLARE_RUBY_WRAPPER(convert_regexp_to_ruby, JohnsonRuntime* runtime; jsval regexp)
|
11
|
-
DEFINE_RUBY_WRAPPER(convert_regexp_to_ruby, convert_regexp_to_ruby, ARGLIST2(runtime, regexp))
|
12
|
-
|
13
|
-
DEFINE_RUBY_WRAPPER(rb_funcall_0, rb_funcall, ARGLIST3(obj, sym, argc))
|
14
|
-
DEFINE_RUBY_WRAPPER(rb_funcall_1, rb_funcall, ARGLIST4(obj, sym, argc, a))
|
15
|
-
DEFINE_RUBY_WRAPPER(rb_funcall_2, rb_funcall, ARGLIST5(obj, sym, argc, a, b))
|
16
|
-
|
17
|
-
DECLARE_RUBY_WRAPPER(rb_float_new, double v)
|
18
|
-
DEFINE_RUBY_WRAPPER(rb_float_new, rb_float_new, ARGLIST1(v))
|
19
|
-
|
20
|
-
DEFINE_RUBY_WRAPPER(rb_intern, rb_intern, ARGLIST1(name))
|
21
|
-
|
22
|
-
static JSBool convert_float_or_bignum_to_js(JohnsonRuntime* runtime, VALUE float_or_bignum, jsval* retval)
|
23
|
-
{
|
24
|
-
JSContext * context = johnson_get_current_context(runtime);
|
25
|
-
return JS_NewDoubleValue(context, NUM2DBL(float_or_bignum), retval);
|
26
|
-
}
|
27
|
-
|
28
|
-
static JSBool convert_symbol_to_js(JohnsonRuntime* runtime, VALUE symbol, jsval* retval)
|
29
|
-
{
|
30
|
-
JSContext * context = johnson_get_current_context(runtime);
|
31
|
-
PREPARE_JROOTS(context, 2);
|
32
|
-
|
33
|
-
VALUE to_s = CALL_RUBY_WRAPPER(rb_funcall_0, symbol, RB_INTERN("to_s"), 0);
|
34
|
-
CALL_RUBY_WRAPPER(rb_string_value, &to_s);
|
35
|
-
jsval name = STRING_TO_JSVAL(JS_NewStringCopyN(context, StringValuePtr(to_s), (size_t) StringValueLen(to_s)));
|
36
|
-
|
37
|
-
JROOT(name);
|
38
|
-
|
39
|
-
// calls Johnson.symbolize(name) in JS-land. See lib/prelude.js
|
40
|
-
|
41
|
-
jsval nsJohnson;
|
42
|
-
JCHECK(JS_GetProperty(context, runtime->global, "Johnson", &nsJohnson));
|
43
|
-
JROOT(nsJohnson);
|
44
|
-
|
45
|
-
JCHECK(JS_CallFunctionName(context, JSVAL_TO_OBJECT(nsJohnson), "symbolize", 1, &name, retval));
|
46
|
-
|
47
|
-
JRETURN;
|
48
|
-
}
|
49
|
-
|
50
|
-
static JSBool convert_regexp_to_js(JohnsonRuntime* runtime, VALUE regexp, jsval* retval)
|
51
|
-
{
|
52
|
-
JSContext * context = johnson_get_current_context(runtime);
|
53
|
-
PREPARE_JROOTS(context, 0);
|
54
|
-
VALUE source = rb_funcall(regexp, RB_INTERN("source"), 0);
|
55
|
-
CALL_RUBY_WRAPPER(rb_string_value, &source);
|
56
|
-
jsint options = (jsint)(NUM2INT(rb_funcall(regexp, RB_INTERN("options"), 0)));
|
57
|
-
|
58
|
-
JSObject* obj = JS_NewRegExpObject(context,
|
59
|
-
StringValuePtr(source),
|
60
|
-
(size_t) StringValueLen(source),
|
61
|
-
(unsigned) options);
|
62
|
-
|
63
|
-
JCHECK(obj);
|
64
|
-
*retval = OBJECT_TO_JSVAL(obj);
|
65
|
-
JRETURN;
|
66
|
-
}
|
67
|
-
|
68
|
-
JSBool convert_to_js(JohnsonRuntime* runtime, VALUE ruby, jsval* retval)
|
69
|
-
{
|
70
|
-
JSContext * context = johnson_get_current_context(runtime);
|
71
|
-
PREPARE_JROOTS(context, 0);
|
72
|
-
switch(TYPE(ruby))
|
73
|
-
{
|
74
|
-
case T_NONE:
|
75
|
-
JERROR("I don't know how to handle T_NONE.");
|
76
|
-
JRETURN;
|
77
|
-
|
78
|
-
case T_ICLASS:
|
79
|
-
JERROR("I don't know how to handle T_ICLASS.");
|
80
|
-
JRETURN;
|
81
|
-
|
82
|
-
case T_MATCH:
|
83
|
-
JERROR("I don't know how to handle T_MATCH.");
|
84
|
-
JRETURN;
|
85
|
-
|
86
|
-
case T_BLKTAG:
|
87
|
-
JERROR("I don't know how to handle T_BLKTAG.");
|
88
|
-
JRETURN;
|
89
|
-
|
90
|
-
case T_NODE:
|
91
|
-
JERROR("I don't know how to handle T_NODE | T_MASK.");
|
92
|
-
JRETURN;
|
93
|
-
|
94
|
-
case T_UNDEF:
|
95
|
-
JERROR("I don't know how to handle T_UNDEF.");
|
96
|
-
JRETURN;
|
97
|
-
|
98
|
-
case T_VARMAP:
|
99
|
-
JERROR("I don't know how to handle T_VARMAP.");
|
100
|
-
JRETURN;
|
101
|
-
|
102
|
-
case T_NIL:
|
103
|
-
*retval = JSVAL_NULL;
|
104
|
-
JRETURN;
|
105
|
-
|
106
|
-
case T_TRUE:
|
107
|
-
*retval = JSVAL_TRUE;
|
108
|
-
JRETURN;
|
109
|
-
|
110
|
-
case T_FALSE:
|
111
|
-
*retval = JSVAL_FALSE;
|
112
|
-
JRETURN;
|
113
|
-
|
114
|
-
case T_STRING:
|
115
|
-
{
|
116
|
-
CALL_RUBY_WRAPPER(rb_string_value, &ruby);
|
117
|
-
const char * src = StringValuePtr(ruby);
|
118
|
-
const size_t srclen = StringValueLen(ruby);
|
119
|
-
size_t dstlen = 0;
|
120
|
-
JCHECK(JS_DecodeBytes(context, src, srclen, NULL, &dstlen));
|
121
|
-
jschar* dstchars = JS_malloc(context, sizeof(jschar) * (1 + dstlen));
|
122
|
-
JCHECK(dstchars);
|
123
|
-
JCHECK(JS_DecodeBytes(context, src, srclen, dstchars, &dstlen));
|
124
|
-
JSString* str = JS_NewUCString(context, dstchars, dstlen);
|
125
|
-
JCHECK(str);
|
126
|
-
*retval = STRING_TO_JSVAL(str);
|
127
|
-
JRETURN;
|
128
|
-
}
|
129
|
-
|
130
|
-
case T_FIXNUM:
|
131
|
-
{
|
132
|
-
long val = NUM2LONG(ruby);
|
133
|
-
if (val >= JSVAL_INT_MIN && val <= JSVAL_INT_MAX)
|
134
|
-
{
|
135
|
-
*retval = INT_TO_JSVAL((jsint)val);
|
136
|
-
JRETURN;
|
137
|
-
}
|
138
|
-
}
|
139
|
-
|
140
|
-
case T_FLOAT:
|
141
|
-
case T_BIGNUM:
|
142
|
-
JCHECK(convert_float_or_bignum_to_js(runtime, ruby, retval));
|
143
|
-
JRETURN;
|
144
|
-
|
145
|
-
case T_SYMBOL:
|
146
|
-
JCHECK(convert_symbol_to_js(runtime, ruby, retval));
|
147
|
-
JRETURN;
|
148
|
-
|
149
|
-
case T_CLASS:
|
150
|
-
case T_ARRAY:
|
151
|
-
case T_HASH:
|
152
|
-
case T_MODULE:
|
153
|
-
case T_FILE:
|
154
|
-
case T_STRUCT:
|
155
|
-
case T_OBJECT:
|
156
|
-
JCHECK(make_js_land_proxy(runtime, ruby, retval));
|
157
|
-
JRETURN;
|
158
|
-
|
159
|
-
case T_REGEXP:
|
160
|
-
JCHECK(convert_regexp_to_js(runtime, ruby, retval));
|
161
|
-
JRETURN;
|
162
|
-
|
163
|
-
case T_DATA:
|
164
|
-
if (ruby_value_is_proxy(ruby))
|
165
|
-
JCHECK(unwrap_ruby_land_proxy(runtime, ruby, retval));
|
166
|
-
else // If we can't identify the object, just wrap it
|
167
|
-
JCHECK(make_js_land_proxy(runtime, ruby, retval));
|
168
|
-
JRETURN;
|
169
|
-
|
170
|
-
default:
|
171
|
-
JERROR("unknown ruby type in switch");
|
172
|
-
}
|
173
|
-
|
174
|
-
*retval = JSVAL_NULL;
|
175
|
-
JRETURN;
|
176
|
-
}
|
177
|
-
|
178
|
-
VALUE convert_js_string_to_ruby(JohnsonRuntime* runtime, JSString* str)
|
179
|
-
{
|
180
|
-
JSContext * context = johnson_get_current_context(runtime);
|
181
|
-
PREPARE_RUBY_JROOTS(context, 1);
|
182
|
-
JROOT(str);
|
183
|
-
jschar* src = JS_GetStringChars(str);
|
184
|
-
JCHECK(src);
|
185
|
-
size_t srclen = JS_GetStringLength(str);
|
186
|
-
size_t dstlen = 0;
|
187
|
-
JCHECK(JS_EncodeCharacters(context, src, srclen, NULL, &dstlen));
|
188
|
-
char* dst = JS_malloc(context, sizeof(char) * (1 + dstlen));
|
189
|
-
JCHECK(dst);
|
190
|
-
JCHECK(JS_EncodeCharacters(context, src, srclen, dst, &dstlen));
|
191
|
-
// This will leak dst if rb_str_new raises
|
192
|
-
VALUE ruby_str = rb_str_new(dst, dstlen);
|
193
|
-
JS_free(context, dst);
|
194
|
-
JRETURN_RUBY(ruby_str);
|
195
|
-
}
|
196
|
-
|
197
|
-
static VALUE convert_regexp_to_ruby(JohnsonRuntime* runtime, jsval regexp)
|
198
|
-
{
|
199
|
-
JSContext * context = johnson_get_current_context(runtime);
|
200
|
-
PREPARE_RUBY_JROOTS(context, 1);
|
201
|
-
JROOT(regexp);
|
202
|
-
JSRegExp* re = (JSRegExp*)JS_GetPrivate(context, JSVAL_TO_OBJECT(regexp));
|
203
|
-
|
204
|
-
JRETURN_RUBY(RB_FUNCALL_2(rb_cRegexp, RB_INTERN("new"),
|
205
|
-
CONVERT_JS_STRING_TO_RUBY(runtime, re->source),
|
206
|
-
INT2NUM((long)re->flags)));
|
207
|
-
}
|
208
|
-
|
209
|
-
static JSBool js_value_is_regexp(JohnsonRuntime* runtime, jsval maybe_regexp, bool* is_regexp)
|
210
|
-
{
|
211
|
-
JSContext * context = johnson_get_current_context(runtime);
|
212
|
-
PREPARE_JROOTS(context, 1);
|
213
|
-
JROOT(maybe_regexp);
|
214
|
-
JSBool result = JS_InstanceOf(context, JSVAL_TO_OBJECT(maybe_regexp), &js_RegExpClass, NULL);
|
215
|
-
*is_regexp = (result ? true : false);
|
216
|
-
JRETURN;
|
217
|
-
}
|
218
|
-
|
219
|
-
static JSBool js_value_is_symbol(JohnsonRuntime* runtime, jsval maybe_symbol, bool* is_symbol)
|
220
|
-
{
|
221
|
-
jsval nsJohnson, cSymbol;
|
222
|
-
JSContext * context = johnson_get_current_context(runtime);
|
223
|
-
|
224
|
-
PREPARE_JROOTS(context, 3);
|
225
|
-
JROOT(maybe_symbol);
|
226
|
-
|
227
|
-
JCHECK(JS_GetProperty(context, runtime->global, "Johnson", &nsJohnson));
|
228
|
-
if (!JSVAL_IS_OBJECT(nsJohnson))
|
229
|
-
JERROR("Unable to retrieve Johnson from JSLand");
|
230
|
-
JROOT(nsJohnson);
|
231
|
-
|
232
|
-
JCHECK(JS_GetProperty(context, JSVAL_TO_OBJECT(nsJohnson), "Symbol", &cSymbol));
|
233
|
-
if (!JSVAL_IS_OBJECT(cSymbol))
|
234
|
-
JERROR("Unable to retrieve Johnson.Symbol from JSLand");
|
235
|
-
JROOT(cSymbol);
|
236
|
-
|
237
|
-
JSBool is_a_symbol;
|
238
|
-
JCHECK(JS_HasInstance(context, JSVAL_TO_OBJECT(cSymbol), maybe_symbol, &is_a_symbol));
|
239
|
-
|
240
|
-
*is_symbol = (is_a_symbol != JS_FALSE);
|
241
|
-
JRETURN;
|
242
|
-
}
|
243
|
-
|
244
|
-
VALUE convert_to_ruby(JohnsonRuntime* runtime, jsval js)
|
245
|
-
{
|
246
|
-
if (JSVAL_NULL == js) return Qnil;
|
247
|
-
|
248
|
-
JSContext * context = johnson_get_current_context(runtime);
|
249
|
-
|
250
|
-
PREPARE_RUBY_JROOTS(context, 1);
|
251
|
-
JROOT(js);
|
252
|
-
|
253
|
-
switch (JS_TypeOfValue(context, js))
|
254
|
-
{
|
255
|
-
case JSTYPE_VOID:
|
256
|
-
JRETURN_RUBY(Qnil);
|
257
|
-
|
258
|
-
case JSTYPE_FUNCTION:
|
259
|
-
case JSTYPE_OBJECT:
|
260
|
-
if (OBJECT_TO_JSVAL(runtime->global) == js)
|
261
|
-
// global gets special treatment, since the Prelude might not be loaded
|
262
|
-
JRETURN_RUBY(CALL_RUBY_WRAPPER(make_ruby_land_proxy, runtime, js, "GlobalProxy"));
|
263
|
-
|
264
|
-
// this conditional requires the Prelude
|
265
|
-
bool is_symbol = false;
|
266
|
-
JCHECK(js_value_is_symbol(runtime, js, &is_symbol));
|
267
|
-
if (is_symbol)
|
268
|
-
JRETURN_RUBY(ID2SYM(RB_INTERN(JS_GetStringBytes(JS_ValueToString(context, js)))));
|
269
|
-
|
270
|
-
if (js_value_is_proxy(runtime, js))
|
271
|
-
JRETURN_RUBY(unwrap_js_land_proxy(runtime, js));
|
272
|
-
|
273
|
-
bool is_regexp = false;
|
274
|
-
JCHECK(js_value_is_regexp(runtime, js, &is_regexp));
|
275
|
-
if (is_regexp)
|
276
|
-
JRETURN_RUBY(CALL_RUBY_WRAPPER(convert_regexp_to_ruby, runtime, js));
|
277
|
-
|
278
|
-
JRETURN_RUBY(CALL_RUBY_WRAPPER(make_ruby_land_proxy, runtime, js, LEAKY_ROOT_NAME("RubyLandProxy", JS_GetStringBytes(JS_ValueToString(context, js)))));
|
279
|
-
|
280
|
-
case JSTYPE_BOOLEAN:
|
281
|
-
JRETURN_RUBY(JSVAL_TRUE == js ? Qtrue : Qfalse);
|
282
|
-
|
283
|
-
case JSTYPE_STRING:
|
284
|
-
JRETURN_RUBY(CONVERT_JS_STRING_TO_RUBY(runtime, JSVAL_TO_STRING(js)));
|
285
|
-
|
286
|
-
case JSTYPE_NUMBER:
|
287
|
-
if (JSVAL_IS_INT(js)) JRETURN_RUBY(INT2FIX(JSVAL_TO_INT(js)));
|
288
|
-
else JRETURN_RUBY(CALL_RUBY_WRAPPER(rb_float_new, *JSVAL_TO_DOUBLE(js)));
|
289
|
-
|
290
|
-
default:
|
291
|
-
JERROR("unknown js type in switch");
|
292
|
-
}
|
293
|
-
|
294
|
-
JRETURN_RUBY(Qnil);
|
295
|
-
}
|
296
|
-
|
297
|
-
NORETURN(void) raise_js_error_in_ruby(JohnsonRuntime* runtime)
|
298
|
-
{
|
299
|
-
JSContext * context = johnson_get_current_context(runtime);
|
300
|
-
JohnsonContext * johnson_context = OUR_CONTEXT(context);
|
301
|
-
if (JS_IsExceptionPending(context))
|
302
|
-
{
|
303
|
-
assert(JS_GetPendingException(context, &(johnson_context->ex)));
|
304
|
-
JS_AddNamedRoot(context, &(johnson_context->ex), "raise_js_error_in_ruby");
|
305
|
-
JS_ClearPendingException(context);
|
306
|
-
JS_RemoveRoot(context, &(johnson_context->ex));
|
307
|
-
}
|
308
|
-
|
309
|
-
VALUE ruby_runtime = (VALUE)JS_GetRuntimePrivate(runtime->js);
|
310
|
-
if (johnson_context->ex)
|
311
|
-
RAISE_JS_ERROR(ruby_runtime, johnson_context->ex);
|
312
|
-
|
313
|
-
// FIXME: I don't think this is needed, it should
|
314
|
-
// be done on the Ruby side.
|
315
|
-
if (!johnson_context->msg)
|
316
|
-
rb_raise(rb_eRuntimeError, "Unknown JavaScriptError");
|
317
|
-
|
318
|
-
// FIXME: I don't think this can ever happen....
|
319
|
-
rb_raise(rb_eRuntimeError, johnson_context->msg);
|
320
|
-
}
|
321
|
-
|
322
|
-
#define TAG_RAISE 0x6
|
323
|
-
#define TAG_THROW 0x7
|
324
|
-
|
325
|
-
JSBool report_ruby_error_in_js(JohnsonRuntime* runtime, int state, VALUE old_errinfo)
|
326
|
-
{
|
327
|
-
JSContext * context = johnson_get_current_context(runtime);
|
328
|
-
assert(state);
|
329
|
-
switch (state)
|
330
|
-
{
|
331
|
-
case TAG_RAISE:
|
332
|
-
{
|
333
|
-
VALUE local_error = ruby_errinfo;
|
334
|
-
ruby_errinfo = old_errinfo;
|
335
|
-
|
336
|
-
if (rb_funcall(local_error, rb_intern("respond_to?"), 1, ID2SYM(rb_intern("copy_ruby_stack_to_deck"))))
|
337
|
-
rb_funcall(local_error, rb_intern("copy_ruby_stack_to_deck"), 0);
|
338
|
-
|
339
|
-
VALUE rb_runtime = (VALUE)JS_GetRuntimePrivate(runtime->js);
|
340
|
-
rb_iv_set(local_error, "@js_stack", rb_funcall(rb_runtime, rb_intern("current_stack"), 0));
|
341
|
-
|
342
|
-
jsval js_error;
|
343
|
-
convert_to_js(runtime, local_error, &js_error);
|
344
|
-
JS_SetPendingException(context, js_error);
|
345
|
-
|
346
|
-
return JS_FALSE ;
|
347
|
-
}
|
348
|
-
|
349
|
-
case TAG_THROW:
|
350
|
-
// FIXME: This should be propagated to JS... as an exception?
|
351
|
-
|
352
|
-
default:
|
353
|
-
{
|
354
|
-
JSString* str = JS_NewStringCopyZ(context, "Unexpected longjmp from ruby!");
|
355
|
-
if (str)
|
356
|
-
JS_SetPendingException(context, STRING_TO_JSVAL(str));
|
357
|
-
return JS_FALSE;
|
358
|
-
}
|
359
|
-
}
|
360
|
-
}
|
361
|
-
|