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
@@ -1,31 +0,0 @@
|
|
1
|
-
#ifndef JOHNSON_SPIDERMONKEY_CONVERSIONS_H
|
2
|
-
#define JOHNSON_SPIDERMONKEY_CONVERSIONS_H
|
3
|
-
|
4
|
-
#include "spidermonkey.h"
|
5
|
-
#include "context.h"
|
6
|
-
#include "runtime.h"
|
7
|
-
|
8
|
-
DECLARE_RUBY_WRAPPER(convert_to_ruby, JohnsonRuntime* runtime; jsval js_value)
|
9
|
-
#define CONVERT_TO_RUBY(runtime, js) CALL_RUBY_WRAPPER(convert_to_ruby, runtime, js)
|
10
|
-
|
11
|
-
DECLARE_RUBY_WRAPPER(convert_js_string_to_ruby, JohnsonRuntime* runtime; JSString* str)
|
12
|
-
#define CONVERT_JS_STRING_TO_RUBY(runtime, js) CALL_RUBY_WRAPPER(convert_js_string_to_ruby, runtime, js)
|
13
|
-
|
14
|
-
DECLARE_RUBY_WRAPPER(rb_funcall_0, VALUE obj; ID sym; int argc)
|
15
|
-
#define RB_FUNCALL_0(obj, sym) CALL_RUBY_WRAPPER(rb_funcall_0, obj, sym, 0)
|
16
|
-
DECLARE_RUBY_WRAPPER(rb_funcall_1, VALUE obj; ID sym; int argc; VALUE a)
|
17
|
-
#define RB_FUNCALL_1(obj, sym, a) CALL_RUBY_WRAPPER(rb_funcall_1, obj, sym, 1, a)
|
18
|
-
DECLARE_RUBY_WRAPPER(rb_funcall_2, VALUE obj; ID sym; int argc; VALUE a; VALUE b)
|
19
|
-
#define RB_FUNCALL_2(obj, sym, a, b) CALL_RUBY_WRAPPER(rb_funcall_2, obj, sym, 2, a, b)
|
20
|
-
|
21
|
-
DECLARE_RUBY_WRAPPER(rb_intern, const char* name)
|
22
|
-
#define RB_INTERN(name) CALL_RUBY_WRAPPER(rb_intern, name)
|
23
|
-
|
24
|
-
JSBool convert_to_js(JohnsonRuntime* runtime, VALUE ruby, jsval* retval);
|
25
|
-
VALUE convert_to_ruby(JohnsonRuntime* runtime, jsval js);
|
26
|
-
VALUE convert_js_string_to_ruby(JohnsonRuntime* runtime, JSString* str);
|
27
|
-
|
28
|
-
NORETURN(void raise_js_error_in_ruby(JohnsonRuntime* runtime));
|
29
|
-
JSBool report_ruby_error_in_js(JohnsonRuntime* runtime, int state, VALUE old_errinfo);
|
30
|
-
|
31
|
-
#endif
|
data/ext/spidermonkey/debugger.c
DELETED
@@ -1,234 +0,0 @@
|
|
1
|
-
#include "debugger.h"
|
2
|
-
#include "context.h"
|
3
|
-
#include "conversions.h"
|
4
|
-
#include "immutable_node.h"
|
5
|
-
|
6
|
-
static VALUE debugger_class = Qnil;
|
7
|
-
|
8
|
-
bool ruby_value_is_debugger(VALUE maybe_debugger)
|
9
|
-
{
|
10
|
-
VALUE klass = CLASS_OF(maybe_debugger);
|
11
|
-
return (klass == debugger_class);
|
12
|
-
}
|
13
|
-
|
14
|
-
/*
|
15
|
-
* call-seq:
|
16
|
-
* frame_pc(context, frame)
|
17
|
-
*
|
18
|
-
* Get the frame parse context
|
19
|
-
*/
|
20
|
-
static VALUE frame_pc(VALUE UNUSED(self), VALUE context, VALUE frame)
|
21
|
-
{
|
22
|
-
JSContext * js = NULL;
|
23
|
-
JSStackFrame * fp = NULL;
|
24
|
-
Data_Get_Struct(context, JSContext, js);
|
25
|
-
Data_Get_Struct(frame, JSStackFrame, fp);
|
26
|
-
return Data_Wrap_Struct(rb_cObject, NULL, NULL, JS_GetFramePC(js, fp));
|
27
|
-
}
|
28
|
-
|
29
|
-
/*
|
30
|
-
* call-seq:
|
31
|
-
* line_number(context, script, bytecode)
|
32
|
-
*
|
33
|
-
* Get the line number of the +bytecode+ given +context+ and +script+
|
34
|
-
*/
|
35
|
-
static VALUE line_number(VALUE UNUSED(self), VALUE context, VALUE script, VALUE bytecode)
|
36
|
-
{
|
37
|
-
JSContext * js = NULL;
|
38
|
-
JSScript * js_script = NULL;
|
39
|
-
jsbytecode * js_bytecode = NULL;
|
40
|
-
|
41
|
-
Data_Get_Struct(context, JSContext, js);
|
42
|
-
Data_Get_Struct(script, JSScript, js_script);
|
43
|
-
Data_Get_Struct(bytecode, jsbytecode, js_bytecode);
|
44
|
-
|
45
|
-
return INT2NUM((long)JS_PCToLineNumber(js, js_script, js_bytecode));
|
46
|
-
}
|
47
|
-
|
48
|
-
/*
|
49
|
-
* call-seq:
|
50
|
-
* file_name(context, script)
|
51
|
-
*
|
52
|
-
* Get the file name of the +script+ given +context+
|
53
|
-
*/
|
54
|
-
static VALUE file_name(VALUE UNUSED(self), VALUE context, VALUE script)
|
55
|
-
{
|
56
|
-
JSContext * js = NULL;
|
57
|
-
JSScript * js_script = NULL;
|
58
|
-
|
59
|
-
Data_Get_Struct(context, JSContext, js);
|
60
|
-
Data_Get_Struct(script, JSScript, js_script);
|
61
|
-
|
62
|
-
return rb_str_new2(JS_GetScriptFilename(js, js_script));
|
63
|
-
}
|
64
|
-
|
65
|
-
static JSTrapStatus interrupt_handler(JSContext *js, JSScript *script,
|
66
|
-
jsbytecode *pc, jsval *UNUSED(rval), void *rb)
|
67
|
-
{
|
68
|
-
assert(js);
|
69
|
-
assert(rb);
|
70
|
-
assert(pc);
|
71
|
-
|
72
|
-
VALUE self = (VALUE)rb;
|
73
|
-
VALUE rb_cx = Data_Wrap_Struct(rb_cObject, NULL, NULL, js);
|
74
|
-
VALUE rb_script = Data_Wrap_Struct(rb_cObject, NULL, NULL, script);
|
75
|
-
VALUE rb_pc = Data_Wrap_Struct(rb_cObject, NULL, NULL, pc);
|
76
|
-
|
77
|
-
return NUM2INT(rb_funcall(self, rb_intern("interrupt_handler"), 3,
|
78
|
-
rb_cx,
|
79
|
-
rb_script,
|
80
|
-
rb_pc
|
81
|
-
));
|
82
|
-
}
|
83
|
-
|
84
|
-
static void new_script_hook(JSContext *UNUSED(js),
|
85
|
-
const char *filename,
|
86
|
-
uintN lineno,
|
87
|
-
JSScript *UNUSED(script),
|
88
|
-
JSFunction *UNUSED(fun),
|
89
|
-
void *rb)
|
90
|
-
{
|
91
|
-
VALUE self = (VALUE)rb;
|
92
|
-
VALUE rb_filename = rb_str_new2(filename);
|
93
|
-
VALUE rb_linenum = UINT2NUM((unsigned long)lineno);
|
94
|
-
|
95
|
-
/* FIXME: Pass the rest of this crap to the debugger? */
|
96
|
-
rb_funcall(self, rb_intern("new_script_hook"), 2, rb_filename, rb_linenum);
|
97
|
-
}
|
98
|
-
|
99
|
-
static void destroy_script_hook(JSContext *UNUSED(js),
|
100
|
-
JSScript *UNUSED(script),
|
101
|
-
void *rb)
|
102
|
-
{
|
103
|
-
VALUE self = (VALUE)rb;
|
104
|
-
rb_funcall(self, rb_intern("destroy_script_hook"), 0);
|
105
|
-
}
|
106
|
-
|
107
|
-
static JSTrapStatus debugger_handler(JSContext *js, JSScript *script,
|
108
|
-
jsbytecode *pc, jsval *UNUSED(rval), void *rb)
|
109
|
-
{
|
110
|
-
assert(js);
|
111
|
-
assert(rb);
|
112
|
-
assert(pc);
|
113
|
-
|
114
|
-
VALUE self = (VALUE)rb;
|
115
|
-
VALUE rb_cx = Data_Wrap_Struct(rb_cObject, NULL, NULL, js);
|
116
|
-
VALUE rb_script = Data_Wrap_Struct(rb_cObject, NULL, NULL, script);
|
117
|
-
VALUE rb_pc = Data_Wrap_Struct(rb_cObject, NULL, NULL, pc);
|
118
|
-
|
119
|
-
return NUM2INT(rb_funcall(self, rb_intern("debugger_handler"), 3,
|
120
|
-
rb_cx,
|
121
|
-
rb_script,
|
122
|
-
rb_pc
|
123
|
-
));
|
124
|
-
}
|
125
|
-
|
126
|
-
static void source_handler(const char *filename, uintN lineno,
|
127
|
-
jschar *str, size_t length,
|
128
|
-
void **UNUSED(listenerTSData), void *rb)
|
129
|
-
{
|
130
|
-
VALUE self = (VALUE)rb;
|
131
|
-
VALUE rb_filename = rb_str_new2(filename);
|
132
|
-
VALUE rb_lineno = ULONG2NUM((unsigned long)lineno);
|
133
|
-
VALUE rb_str = rb_str_new((char *)str, (signed long)(length * sizeof(jschar)));
|
134
|
-
|
135
|
-
rb_funcall(self, rb_intern("source_handler"), 3, rb_filename, rb_lineno, rb_str);
|
136
|
-
}
|
137
|
-
|
138
|
-
static void * execute_hook(JSContext *js, JSStackFrame *fp, JSBool before,
|
139
|
-
JSBool *ok, void *rb)
|
140
|
-
{
|
141
|
-
VALUE self = (VALUE)rb;
|
142
|
-
VALUE rb_before = JS_TRUE == before ? Qtrue : Qfalse;
|
143
|
-
VALUE rb_ok = ok ? Qtrue : Qfalse;
|
144
|
-
VALUE rb_js = Data_Wrap_Struct(rb_cObject, NULL, NULL, (void *)js);
|
145
|
-
VALUE rb_fp = Data_Wrap_Struct(rb_cObject, NULL, NULL, (void *)fp);
|
146
|
-
|
147
|
-
rb_funcall(self, rb_intern("execute_hook"), 4, rb_js,rb_fp,rb_before,rb_ok);
|
148
|
-
return rb;
|
149
|
-
}
|
150
|
-
|
151
|
-
static void * call_hook(JSContext *UNUSED(js), JSStackFrame *UNUSED(fp), JSBool before,
|
152
|
-
JSBool *ok, void *rb)
|
153
|
-
{
|
154
|
-
VALUE self = (VALUE)rb;
|
155
|
-
VALUE rb_before = before ? Qtrue : Qfalse;
|
156
|
-
VALUE rb_ok = ok ? Qtrue : Qfalse;
|
157
|
-
|
158
|
-
rb_funcall(self, rb_intern("call_hook"), 2, rb_before, rb_ok);
|
159
|
-
return rb;
|
160
|
-
}
|
161
|
-
|
162
|
-
static void object_hook(JSContext *js, JSObject *obj, JSBool isNew, void *rb)
|
163
|
-
{
|
164
|
-
assert(rb);
|
165
|
-
assert(js);
|
166
|
-
assert(obj);
|
167
|
-
VALUE self = (VALUE)rb;
|
168
|
-
|
169
|
-
VALUE rb_is_new = isNew ? Qtrue : Qfalse;
|
170
|
-
|
171
|
-
rb_funcall(self, rb_intern("object_hook"), 1, rb_is_new);
|
172
|
-
}
|
173
|
-
|
174
|
-
static JSTrapStatus throw_hook(JSContext *UNUSED(js), JSScript *UNUSED(script),
|
175
|
-
jsbytecode *pc, jsval *UNUSED(rval), void *rb)
|
176
|
-
{
|
177
|
-
VALUE self = (VALUE)rb;
|
178
|
-
VALUE rb_bytecode = jsop_to_symbol(*pc);
|
179
|
-
return NUM2INT(rb_funcall(self, rb_intern("throw_hook"), 1, rb_bytecode));
|
180
|
-
}
|
181
|
-
|
182
|
-
static JSBool debug_error_hook(JSContext *UNUSED(js), const char *message,
|
183
|
-
JSErrorReport *UNUSED(report), void *rb)
|
184
|
-
{
|
185
|
-
VALUE self = (VALUE)rb;
|
186
|
-
VALUE rb_message = rb_str_new2(message);
|
187
|
-
rb_funcall(self, rb_intern("debug_error_hook"), 1, rb_message);
|
188
|
-
return JS_TRUE;
|
189
|
-
}
|
190
|
-
|
191
|
-
static VALUE allocate(VALUE klass)
|
192
|
-
{
|
193
|
-
JSDebugHooks* debug = calloc(1L, sizeof(JSDebugHooks));
|
194
|
-
VALUE self = Data_Wrap_Struct(klass, 0, 0, debug);
|
195
|
-
|
196
|
-
debug->interruptHandler = interrupt_handler;
|
197
|
-
debug->interruptHandlerData = (void *)self;
|
198
|
-
debug->newScriptHook = new_script_hook;
|
199
|
-
debug->newScriptHookData = (void *)self;
|
200
|
-
debug->destroyScriptHook = destroy_script_hook;
|
201
|
-
debug->destroyScriptHookData = (void *)self;
|
202
|
-
debug->debuggerHandler = debugger_handler;
|
203
|
-
debug->debuggerHandlerData = (void *)self;
|
204
|
-
debug->sourceHandler = source_handler;
|
205
|
-
debug->sourceHandlerData = (void *)self;
|
206
|
-
debug->executeHook = execute_hook;
|
207
|
-
debug->executeHookData = (void *)self;
|
208
|
-
debug->callHook = call_hook;
|
209
|
-
debug->callHookData = (void *)self;
|
210
|
-
debug->objectHook = object_hook;
|
211
|
-
debug->objectHookData = (void *)self;
|
212
|
-
debug->throwHook = throw_hook;
|
213
|
-
debug->throwHookData = (void *)self;
|
214
|
-
debug->debugErrorHook = debug_error_hook;
|
215
|
-
debug->debugErrorHookData = (void *)self;
|
216
|
-
|
217
|
-
return self;
|
218
|
-
}
|
219
|
-
|
220
|
-
void init_Johnson_SpiderMonkey_Debugger(VALUE spidermonkey)
|
221
|
-
{
|
222
|
-
/* HACK: These comments are *only* to make RDoc happy.
|
223
|
-
VALUE johnson = rb_define_module("Johnson");
|
224
|
-
VALUE spidermonkey = rb_define_module_under(johnson, "SpiderMonkey");
|
225
|
-
*/
|
226
|
-
|
227
|
-
/* This is the debugging hooks used with SpiderMonkey. */
|
228
|
-
debugger_class = rb_define_class_under(spidermonkey, "Debugger", rb_cObject);
|
229
|
-
rb_define_private_method(debugger_class, "frame_pc", frame_pc, 2);
|
230
|
-
rb_define_private_method(debugger_class, "line_number", line_number, 3);
|
231
|
-
rb_define_private_method(debugger_class, "file_name", file_name, 2);
|
232
|
-
|
233
|
-
rb_define_alloc_func(debugger_class, allocate);
|
234
|
-
}
|
data/ext/spidermonkey/debugger.h
DELETED
@@ -1,10 +0,0 @@
|
|
1
|
-
#ifndef JOHNSON_SPIDERMONKEY_DEBUGGER_H
|
2
|
-
#define JOHNSON_SPIDERMONKEY_DEBUGGER_H
|
3
|
-
|
4
|
-
#include "spidermonkey.h"
|
5
|
-
#include "jsdbgapi.h"
|
6
|
-
|
7
|
-
void init_Johnson_SpiderMonkey_Debugger(VALUE spidermonkey);
|
8
|
-
bool ruby_value_is_debugger(VALUE maybe_debugger);
|
9
|
-
|
10
|
-
#endif
|
data/ext/spidermonkey/extconf.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
ENV["RC_ARCHS"] = "" if RUBY_PLATFORM =~ /darwin/
|
2
|
-
|
3
|
-
require "find"
|
4
|
-
require "mkmf"
|
5
|
-
|
6
|
-
cflags = %w(g)
|
7
|
-
defines = %w(XP_UNIX)
|
8
|
-
|
9
|
-
warnings = %w(all extra cast-qual write-strings conversion missing-noreturn)
|
10
|
-
warnings << "inline"
|
11
|
-
|
12
|
-
cflags.concat warnings.collect { |w| "W#{w}" }
|
13
|
-
cflags.concat defines.collect { |d| "D#{d}" }
|
14
|
-
|
15
|
-
$CFLAGS << cflags.collect { |f| " -#{f}" }.join(" ")
|
16
|
-
|
17
|
-
spidermonkey_dir = File.expand_path File.dirname(__FILE__) +
|
18
|
-
"/../../vendor/spidermonkey"
|
19
|
-
|
20
|
-
Dir.chdir spidermonkey_dir do
|
21
|
-
system "make -f Makefile.ref" if Dir["**/libjs.a"].empty?
|
22
|
-
end
|
23
|
-
|
24
|
-
libjs = Dir[spidermonkey_dir + "/**/libjs.a"].first
|
25
|
-
$LOCAL_LIBS << libjs
|
26
|
-
|
27
|
-
dir_config "johnson/spidermonkey"
|
28
|
-
|
29
|
-
find_header "jsautocfg.h", File.dirname(libjs)
|
30
|
-
find_header "jsapi.h", spidermonkey_dir
|
31
|
-
|
32
|
-
create_makefile "johnson/spidermonkey/spidermonkey"
|
@@ -1,37 +0,0 @@
|
|
1
|
-
#include "extensions.h"
|
2
|
-
|
3
|
-
static JSBool /* Object.defineProperty(target, name, value, flags) */
|
4
|
-
define_property(JSContext *js_context, JSObject* UNUSED(obj), uintN argc, jsval *argv, jsval *retval) {
|
5
|
-
assert(argc > 1);
|
6
|
-
char *name = JS_GetStringBytes(JSVAL_TO_STRING(argv[1]));
|
7
|
-
|
8
|
-
// READ_ONLY | ITERABLE | NON_DELETABLE
|
9
|
-
jsuint flags = argc > 3 ? (unsigned) JSVAL_TO_INT(argv[3]) : 0;
|
10
|
-
|
11
|
-
*retval = JSVAL_VOID;
|
12
|
-
return JS_DefineProperty(js_context, JSVAL_TO_OBJECT(argv[0]), name, argc > 2 ? argv[2] : JSVAL_VOID, NULL, NULL, flags);
|
13
|
-
}
|
14
|
-
|
15
|
-
VALUE init_spidermonkey_extensions(JohnsonContext* context, VALUE self)
|
16
|
-
{
|
17
|
-
PREPARE_RUBY_JROOTS(context->js, 1);
|
18
|
-
|
19
|
-
jsval Object;
|
20
|
-
JSObject * global = JS_GetGlobalObject(context->js);
|
21
|
-
JCHECK(JS_GetProperty(context->js, global, "Object", &Object));
|
22
|
-
JROOT(Object);
|
23
|
-
|
24
|
-
JCHECK(JS_DefineFunction(context->js, JSVAL_TO_OBJECT(Object),
|
25
|
-
"defineProperty", define_property, 4, 0));
|
26
|
-
|
27
|
-
JCHECK(JS_DefineProperty(context->js, JSVAL_TO_OBJECT(Object), "READ_ONLY",
|
28
|
-
INT_TO_JSVAL(0x02), NULL, NULL, JSPROP_READONLY));
|
29
|
-
|
30
|
-
JCHECK(JS_DefineProperty(context->js, JSVAL_TO_OBJECT(Object), "ITERABLE",
|
31
|
-
INT_TO_JSVAL(0x01), NULL, NULL, JSPROP_READONLY));
|
32
|
-
|
33
|
-
JCHECK(JS_DefineProperty(context->js, JSVAL_TO_OBJECT(Object), "NON_DELETABLE",
|
34
|
-
INT_TO_JSVAL(0x04), NULL, NULL, JSPROP_READONLY));
|
35
|
-
|
36
|
-
JRETURN_RUBY(self);
|
37
|
-
}
|
@@ -1,12 +0,0 @@
|
|
1
|
-
#ifndef JOHNSON_SPIDERMONKEY_EXTENSIONS_H
|
2
|
-
#define JOHNSON_SPIDERMONKEY_EXTENSIONS_H
|
3
|
-
|
4
|
-
#include "spidermonkey.h"
|
5
|
-
#include "context.h"
|
6
|
-
#include "conversions.h"
|
7
|
-
|
8
|
-
// A context is passed here because there might not be a current context
|
9
|
-
// for the runtime when the function is called.
|
10
|
-
VALUE init_spidermonkey_extensions(JohnsonContext* context, VALUE self);
|
11
|
-
|
12
|
-
#endif
|
data/ext/spidermonkey/global.c
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
#include "global.h"
|
2
|
-
|
3
|
-
static JSBool enumerate(JSContext *js_context, JSObject *obj)
|
4
|
-
{
|
5
|
-
return JS_EnumerateStandardClasses(js_context, obj);
|
6
|
-
}
|
7
|
-
|
8
|
-
static JSBool resolve(JSContext *js_context, JSObject *obj, jsval id, uintN flags, JSObject **objp)
|
9
|
-
{
|
10
|
-
if ((flags & JSRESOLVE_ASSIGNING) == 0)
|
11
|
-
{
|
12
|
-
JSBool resolved_p;
|
13
|
-
|
14
|
-
if (!JS_ResolveStandardClass(js_context, obj, id, &resolved_p))
|
15
|
-
return JS_FALSE;
|
16
|
-
|
17
|
-
if (resolved_p)
|
18
|
-
*objp = obj;
|
19
|
-
}
|
20
|
-
|
21
|
-
return JS_TRUE;
|
22
|
-
}
|
23
|
-
|
24
|
-
static JSClass OurGlobalClass = {
|
25
|
-
"global", JSCLASS_NEW_RESOLVE | JSCLASS_GLOBAL_FLAGS,
|
26
|
-
JS_PropertyStub, // addProperty
|
27
|
-
JS_PropertyStub, // delProperty
|
28
|
-
JS_PropertyStub, // getProperty
|
29
|
-
JS_PropertyStub, // setProperty
|
30
|
-
enumerate,
|
31
|
-
(JSResolveOp) resolve,
|
32
|
-
JS_ConvertStub,
|
33
|
-
JS_FinalizeStub,
|
34
|
-
JSCLASS_NO_OPTIONAL_MEMBERS
|
35
|
-
};
|
36
|
-
|
37
|
-
JSObject* johnson_create_global_object(JSContext* context)
|
38
|
-
{
|
39
|
-
return JS_NewObject(context, &OurGlobalClass, NULL, NULL);
|
40
|
-
}
|
data/ext/spidermonkey/global.h
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
#ifndef JOHNSON_SPIDERMONKEY_GLOBAL_H
|
2
|
-
#define JOHNSON_SPIDERMONKEY_GLOBAL_H
|
3
|
-
|
4
|
-
#include "spidermonkey.h"
|
5
|
-
#include "context.h"
|
6
|
-
#include "runtime.h"
|
7
|
-
|
8
|
-
// NOTE: one of the FEW places a context should be passed around
|
9
|
-
JSObject* johnson_create_global_object(JSContext* context);
|
10
|
-
|
11
|
-
#endif
|
data/ext/spidermonkey/idhash.c
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
#include "idhash.h"
|
2
|
-
|
3
|
-
static JSHashNumber key_hash(const void *key)
|
4
|
-
{
|
5
|
-
return (JSHashNumber)key;
|
6
|
-
}
|
7
|
-
|
8
|
-
static intN comparator(const void *v1, const void *v2)
|
9
|
-
{
|
10
|
-
return v1 == v2;
|
11
|
-
}
|
12
|
-
|
13
|
-
JSHashTable* create_id_hash()
|
14
|
-
{
|
15
|
-
return JS_NewHashTable(0, key_hash, comparator, comparator, NULL, NULL);
|
16
|
-
}
|
data/ext/spidermonkey/idhash.h
DELETED
@@ -1,1153 +0,0 @@
|
|
1
|
-
#include "immutable_node.h"
|
2
|
-
|
3
|
-
static VALUE cNode;
|
4
|
-
|
5
|
-
static void deallocate(ImmutableNodeContext* context)
|
6
|
-
{
|
7
|
-
if (context->pc)
|
8
|
-
{
|
9
|
-
js_FinishParseContext(context->js, context->pc);
|
10
|
-
free(context->pc);
|
11
|
-
}
|
12
|
-
|
13
|
-
JS_DestroyContext(context->js);
|
14
|
-
JS_DestroyRuntime(context->runtime);
|
15
|
-
free(context);
|
16
|
-
}
|
17
|
-
|
18
|
-
static VALUE allocate(VALUE klass)
|
19
|
-
{
|
20
|
-
ImmutableNodeContext * context = calloc(1L, sizeof(ImmutableNodeContext));
|
21
|
-
|
22
|
-
VALUE self = Data_Wrap_Struct(klass, 0, deallocate, context);
|
23
|
-
|
24
|
-
assert(context->runtime = JS_NewRuntime(0x100000));
|
25
|
-
assert(context->js = JS_NewContext(context->runtime, 8192L));
|
26
|
-
|
27
|
-
return self;
|
28
|
-
}
|
29
|
-
|
30
|
-
/*
|
31
|
-
* call-seq:
|
32
|
-
* parse_io(stream, filename=nil, line_number=0)
|
33
|
-
*
|
34
|
-
* Parses an IO object, returning a native spidermonkey parse tree.
|
35
|
-
*/
|
36
|
-
static VALUE parse_io(int argc, VALUE *argv, VALUE klass) {
|
37
|
-
VALUE self = allocate(klass);
|
38
|
-
VALUE stream, filename, linenum;
|
39
|
-
|
40
|
-
ImmutableNodeContext* context;
|
41
|
-
Data_Get_Struct(self, ImmutableNodeContext, context);
|
42
|
-
|
43
|
-
assert(context->pc = calloc(1L, sizeof(JSParseContext)));
|
44
|
-
|
45
|
-
rb_scan_args( argc, argv, "12", &stream, &filename, &linenum );
|
46
|
-
|
47
|
-
VALUE file_contents = rb_funcall(stream, rb_intern("read"), 0);
|
48
|
-
size_t length = NUM2INT(rb_funcall(file_contents, rb_intern("length"), 0));
|
49
|
-
|
50
|
-
jschar* chars;
|
51
|
-
assert(chars = js_InflateString(context->js, StringValuePtr(file_contents), &length));
|
52
|
-
|
53
|
-
if(!filename && rb_respond_to(stream, rb_intern("path"))) {
|
54
|
-
filename = rb_funcall(stream, rb_intern("path"), 0);
|
55
|
-
}
|
56
|
-
char* filenamez = RTEST(filename) ? StringValueCStr(filename) : NULL;
|
57
|
-
int linenumi = RTEST(linenum) ? NUM2INT(linenum) : 1;
|
58
|
-
|
59
|
-
assert(js_InitParseContext(context->js, context->pc,
|
60
|
-
NULL,
|
61
|
-
chars,
|
62
|
-
length,
|
63
|
-
NULL, filenamez, (unsigned)linenumi));
|
64
|
-
JS_SetVersion(context->js, JSVERSION_LATEST);
|
65
|
-
|
66
|
-
context->node = js_ParseScript(context->js,
|
67
|
-
JS_NewObject(context->js, NULL, NULL, NULL),
|
68
|
-
context->pc);
|
69
|
-
if(JS_IsExceptionPending(context->js)) {
|
70
|
-
jsval exception, message, file_name, line_number;
|
71
|
-
JS_GetPendingException(context->js, &exception);
|
72
|
-
JS_GetProperty(context->js, JSVAL_TO_OBJECT(exception), "message",&message);
|
73
|
-
JS_GetProperty(context->js, JSVAL_TO_OBJECT(exception), "fileName",&file_name);
|
74
|
-
JS_GetProperty(context->js, JSVAL_TO_OBJECT(exception), "lineNumber",&line_number);
|
75
|
-
JS_ClearPendingException(context->js);
|
76
|
-
|
77
|
-
rb_funcall( self,
|
78
|
-
rb_intern("raise_parse_error"),
|
79
|
-
3,
|
80
|
-
message == JSVAL_NULL ?
|
81
|
-
Qnil :
|
82
|
-
rb_str_new2(JS_GetStringBytes(JSVAL_TO_STRING(message))),
|
83
|
-
rb_str_new2(JS_GetStringBytes(JSVAL_TO_STRING(file_name))),
|
84
|
-
INT2NUM((long)JSVAL_TO_INT(line_number))
|
85
|
-
);
|
86
|
-
|
87
|
-
}
|
88
|
-
return self;
|
89
|
-
}
|
90
|
-
|
91
|
-
/*
|
92
|
-
* call-seq:
|
93
|
-
* line
|
94
|
-
*
|
95
|
-
* Returns the line number of the node.
|
96
|
-
*/
|
97
|
-
static VALUE line(VALUE self) {
|
98
|
-
ImmutableNodeContext * ctx;
|
99
|
-
|
100
|
-
Data_Get_Struct(self, ImmutableNodeContext, ctx);
|
101
|
-
return INT2NUM((long)(ctx->node->pn_pos.begin.lineno));
|
102
|
-
}
|
103
|
-
|
104
|
-
/*
|
105
|
-
* call-seq:
|
106
|
-
* index
|
107
|
-
*
|
108
|
-
* Returns the column number of the node.
|
109
|
-
*/
|
110
|
-
static VALUE begin_index(VALUE self) {
|
111
|
-
ImmutableNodeContext * ctx;
|
112
|
-
|
113
|
-
Data_Get_Struct(self, ImmutableNodeContext, ctx);
|
114
|
-
return INT2NUM((long)(ctx->node->pn_pos.begin.index));
|
115
|
-
}
|
116
|
-
|
117
|
-
/*
|
118
|
-
* call-seq:
|
119
|
-
* pn_arity
|
120
|
-
*
|
121
|
-
* Returns the arity of the node as a symbol.
|
122
|
-
*/
|
123
|
-
static VALUE pn_arity(VALUE self) {
|
124
|
-
ImmutableNodeContext * ctx;
|
125
|
-
|
126
|
-
Data_Get_Struct(self, ImmutableNodeContext, ctx);
|
127
|
-
switch(ctx->node->pn_arity) {
|
128
|
-
case PN_FUNC:
|
129
|
-
return ID2SYM(rb_intern("pn_func"));
|
130
|
-
case PN_LIST:
|
131
|
-
return ID2SYM(rb_intern("pn_list"));
|
132
|
-
case PN_TERNARY:
|
133
|
-
return ID2SYM(rb_intern("pn_ternary"));
|
134
|
-
case PN_BINARY:
|
135
|
-
return ID2SYM(rb_intern("pn_binary"));
|
136
|
-
case PN_UNARY:
|
137
|
-
return ID2SYM(rb_intern("pn_unary"));
|
138
|
-
case PN_NAME:
|
139
|
-
return ID2SYM(rb_intern("pn_name"));
|
140
|
-
case PN_NULLARY:
|
141
|
-
return ID2SYM(rb_intern("pn_nullary"));
|
142
|
-
}
|
143
|
-
return Qnil;
|
144
|
-
}
|
145
|
-
|
146
|
-
/*
|
147
|
-
* call-seq:
|
148
|
-
* pn_type
|
149
|
-
*
|
150
|
-
* Returns the type of the node as a symbol.
|
151
|
-
*/
|
152
|
-
static VALUE pn_type(VALUE self) {
|
153
|
-
ImmutableNodeContext * ctx;
|
154
|
-
|
155
|
-
Data_Get_Struct(self, ImmutableNodeContext, ctx);
|
156
|
-
switch(ctx->node->pn_type) {
|
157
|
-
|
158
|
-
case TOK_EOF: return ID2SYM(rb_intern("tok_eof"));
|
159
|
-
|
160
|
-
case TOK_EOL: return ID2SYM(rb_intern("tok_eol"));
|
161
|
-
|
162
|
-
case TOK_SEMI: return ID2SYM(rb_intern("tok_semi"));
|
163
|
-
|
164
|
-
case TOK_COMMA: return ID2SYM(rb_intern("tok_comma"));
|
165
|
-
|
166
|
-
case TOK_ASSIGN: return ID2SYM(rb_intern("tok_assign"));
|
167
|
-
|
168
|
-
case TOK_HOOK: return ID2SYM(rb_intern("tok_hook"));
|
169
|
-
|
170
|
-
case TOK_COLON: return ID2SYM(rb_intern("tok_colon"));
|
171
|
-
|
172
|
-
case TOK_OR: return ID2SYM(rb_intern("tok_or"));
|
173
|
-
|
174
|
-
case TOK_AND: return ID2SYM(rb_intern("tok_and"));
|
175
|
-
|
176
|
-
case TOK_BITOR: return ID2SYM(rb_intern("tok_bitor"));
|
177
|
-
|
178
|
-
case TOK_BITXOR: return ID2SYM(rb_intern("tok_bitxor"));
|
179
|
-
|
180
|
-
case TOK_BITAND: return ID2SYM(rb_intern("tok_bitand"));
|
181
|
-
|
182
|
-
case TOK_EQOP: return ID2SYM(rb_intern("tok_eqop"));
|
183
|
-
|
184
|
-
case TOK_RELOP: return ID2SYM(rb_intern("tok_relop"));
|
185
|
-
|
186
|
-
case TOK_SHOP: return ID2SYM(rb_intern("tok_shop"));
|
187
|
-
|
188
|
-
case TOK_PLUS: return ID2SYM(rb_intern("tok_plus"));
|
189
|
-
|
190
|
-
case TOK_MINUS: return ID2SYM(rb_intern("tok_minus"));
|
191
|
-
|
192
|
-
case TOK_STAR: return ID2SYM(rb_intern("tok_star"));
|
193
|
-
|
194
|
-
case TOK_DIVOP: return ID2SYM(rb_intern("tok_divop"));
|
195
|
-
|
196
|
-
case TOK_UNARYOP: return ID2SYM(rb_intern("tok_unaryop"));
|
197
|
-
|
198
|
-
case TOK_INC: return ID2SYM(rb_intern("tok_inc"));
|
199
|
-
|
200
|
-
case TOK_DEC: return ID2SYM(rb_intern("tok_dec"));
|
201
|
-
|
202
|
-
case TOK_DOT: return ID2SYM(rb_intern("tok_dot"));
|
203
|
-
|
204
|
-
case TOK_LB: return ID2SYM(rb_intern("tok_lb"));
|
205
|
-
|
206
|
-
case TOK_RB: return ID2SYM(rb_intern("tok_rb"));
|
207
|
-
|
208
|
-
case TOK_LC: return ID2SYM(rb_intern("tok_lc"));
|
209
|
-
|
210
|
-
case TOK_RC: return ID2SYM(rb_intern("tok_rc"));
|
211
|
-
|
212
|
-
case TOK_LP: return ID2SYM(rb_intern("tok_lp"));
|
213
|
-
|
214
|
-
case TOK_RP: return ID2SYM(rb_intern("tok_rp"));
|
215
|
-
|
216
|
-
case TOK_NAME: return ID2SYM(rb_intern("tok_name"));
|
217
|
-
|
218
|
-
case TOK_NUMBER: return ID2SYM(rb_intern("tok_number"));
|
219
|
-
|
220
|
-
case TOK_STRING: return ID2SYM(rb_intern("tok_string"));
|
221
|
-
|
222
|
-
case TOK_REGEXP: return ID2SYM(rb_intern("tok_regexp"));
|
223
|
-
|
224
|
-
case TOK_PRIMARY: return ID2SYM(rb_intern("tok_primary"));
|
225
|
-
|
226
|
-
case TOK_FUNCTION: return ID2SYM(rb_intern("tok_function"));
|
227
|
-
|
228
|
-
case TOK_EXPORT: return ID2SYM(rb_intern("tok_export"));
|
229
|
-
|
230
|
-
case TOK_IMPORT: return ID2SYM(rb_intern("tok_import"));
|
231
|
-
|
232
|
-
case TOK_IF: return ID2SYM(rb_intern("tok_if"));
|
233
|
-
|
234
|
-
case TOK_ELSE: return ID2SYM(rb_intern("tok_else"));
|
235
|
-
|
236
|
-
case TOK_SWITCH: return ID2SYM(rb_intern("tok_switch"));
|
237
|
-
|
238
|
-
case TOK_CASE: return ID2SYM(rb_intern("tok_case"));
|
239
|
-
|
240
|
-
case TOK_DEFAULT: return ID2SYM(rb_intern("tok_default"));
|
241
|
-
|
242
|
-
case TOK_WHILE: return ID2SYM(rb_intern("tok_while"));
|
243
|
-
|
244
|
-
case TOK_DO: return ID2SYM(rb_intern("tok_do"));
|
245
|
-
|
246
|
-
case TOK_FOR: return ID2SYM(rb_intern("tok_for"));
|
247
|
-
|
248
|
-
case TOK_BREAK: return ID2SYM(rb_intern("tok_break"));
|
249
|
-
|
250
|
-
case TOK_CONTINUE: return ID2SYM(rb_intern("tok_continue"));
|
251
|
-
|
252
|
-
case TOK_IN: return ID2SYM(rb_intern("tok_in"));
|
253
|
-
|
254
|
-
case TOK_VAR: return ID2SYM(rb_intern("tok_var"));
|
255
|
-
|
256
|
-
case TOK_WITH: return ID2SYM(rb_intern("tok_with"));
|
257
|
-
|
258
|
-
case TOK_RETURN: return ID2SYM(rb_intern("tok_return"));
|
259
|
-
|
260
|
-
case TOK_NEW: return ID2SYM(rb_intern("tok_new"));
|
261
|
-
|
262
|
-
case TOK_DELETE: return ID2SYM(rb_intern("tok_delete"));
|
263
|
-
|
264
|
-
case TOK_DEFSHARP: return ID2SYM(rb_intern("tok_defsharp"));
|
265
|
-
|
266
|
-
case TOK_USESHARP: return ID2SYM(rb_intern("tok_usesharp"));
|
267
|
-
|
268
|
-
case TOK_TRY: return ID2SYM(rb_intern("tok_try"));
|
269
|
-
|
270
|
-
case TOK_CATCH: return ID2SYM(rb_intern("tok_catch"));
|
271
|
-
|
272
|
-
case TOK_FINALLY: return ID2SYM(rb_intern("tok_finally"));
|
273
|
-
|
274
|
-
case TOK_THROW: return ID2SYM(rb_intern("tok_throw"));
|
275
|
-
|
276
|
-
case TOK_INSTANCEOF: return ID2SYM(rb_intern("tok_instanceof"));
|
277
|
-
|
278
|
-
case TOK_DEBUGGER: return ID2SYM(rb_intern("tok_debugger"));
|
279
|
-
|
280
|
-
case TOK_XMLSTAGO: return ID2SYM(rb_intern("tok_xmlstago"));
|
281
|
-
|
282
|
-
case TOK_XMLETAGO: return ID2SYM(rb_intern("tok_xmletago"));
|
283
|
-
|
284
|
-
case TOK_XMLPTAGC: return ID2SYM(rb_intern("tok_xmlptagc"));
|
285
|
-
|
286
|
-
case TOK_XMLTAGC: return ID2SYM(rb_intern("tok_xmltagc"));
|
287
|
-
|
288
|
-
case TOK_XMLNAME: return ID2SYM(rb_intern("tok_xmlname"));
|
289
|
-
|
290
|
-
case TOK_XMLATTR: return ID2SYM(rb_intern("tok_xmlattr"));
|
291
|
-
|
292
|
-
case TOK_XMLSPACE: return ID2SYM(rb_intern("tok_xmlspace"));
|
293
|
-
|
294
|
-
case TOK_XMLTEXT: return ID2SYM(rb_intern("tok_xmltext"));
|
295
|
-
|
296
|
-
case TOK_XMLCOMMENT: return ID2SYM(rb_intern("tok_xmlcomment"));
|
297
|
-
|
298
|
-
case TOK_XMLCDATA: return ID2SYM(rb_intern("tok_xmlcdata"));
|
299
|
-
|
300
|
-
case TOK_XMLPI: return ID2SYM(rb_intern("tok_xmlpi"));
|
301
|
-
|
302
|
-
case TOK_AT: return ID2SYM(rb_intern("tok_at"));
|
303
|
-
|
304
|
-
case TOK_DBLCOLON: return ID2SYM(rb_intern("tok_dblcolon"));
|
305
|
-
|
306
|
-
case TOK_ANYNAME: return ID2SYM(rb_intern("tok_anyname"));
|
307
|
-
|
308
|
-
case TOK_DBLDOT: return ID2SYM(rb_intern("tok_dbldot"));
|
309
|
-
|
310
|
-
case TOK_FILTER: return ID2SYM(rb_intern("tok_filter"));
|
311
|
-
|
312
|
-
case TOK_XMLELEM: return ID2SYM(rb_intern("tok_xmlelem"));
|
313
|
-
|
314
|
-
case TOK_XMLLIST: return ID2SYM(rb_intern("tok_xmllist"));
|
315
|
-
|
316
|
-
case TOK_YIELD: return ID2SYM(rb_intern("tok_yield"));
|
317
|
-
|
318
|
-
case TOK_ARRAYCOMP: return ID2SYM(rb_intern("tok_arraycomp"));
|
319
|
-
|
320
|
-
case TOK_ARRAYPUSH: return ID2SYM(rb_intern("tok_arraypush"));
|
321
|
-
|
322
|
-
case TOK_LEXICALSCOPE: return ID2SYM(rb_intern("tok_lexicalscope"));
|
323
|
-
|
324
|
-
case TOK_LET: return ID2SYM(rb_intern("tok_let"));
|
325
|
-
|
326
|
-
case TOK_BODY: return ID2SYM(rb_intern("tok_body"));
|
327
|
-
|
328
|
-
case TOK_RESERVED: return ID2SYM(rb_intern("tok_reserved"));
|
329
|
-
|
330
|
-
case TOK_LIMIT: return ID2SYM(rb_intern("tok_limit"));
|
331
|
-
|
332
|
-
}
|
333
|
-
return INT2NUM((long)(ctx->node->pn_type));
|
334
|
-
}
|
335
|
-
|
336
|
-
/*
|
337
|
-
* call-seq:
|
338
|
-
* pn_expr
|
339
|
-
*
|
340
|
-
* Returns the parse node expression as an ImmutableNode.
|
341
|
-
*/
|
342
|
-
static VALUE data_pn_expr(VALUE self) {
|
343
|
-
ImmutableNodeContext * ctx;
|
344
|
-
|
345
|
-
Data_Get_Struct(self, ImmutableNodeContext, ctx);
|
346
|
-
if(ctx->node->pn_expr) {
|
347
|
-
ImmutableNodeContext *roc;
|
348
|
-
VALUE node = Data_Make_Struct(cNode, ImmutableNodeContext, NULL, NULL, roc);
|
349
|
-
roc->js = ctx->js;
|
350
|
-
roc->node = ctx->node->pn_expr;
|
351
|
-
return node;
|
352
|
-
}
|
353
|
-
return Qnil;
|
354
|
-
}
|
355
|
-
|
356
|
-
/*
|
357
|
-
* call-seq:
|
358
|
-
* pn_kid
|
359
|
-
*
|
360
|
-
* Returns the child ImmutableNode.
|
361
|
-
*/
|
362
|
-
static VALUE data_pn_kid(VALUE self) {
|
363
|
-
ImmutableNodeContext * ctx;
|
364
|
-
|
365
|
-
Data_Get_Struct(self, ImmutableNodeContext, ctx);
|
366
|
-
if(ctx->node->pn_kid) {
|
367
|
-
ImmutableNodeContext *roc;
|
368
|
-
VALUE node = Data_Make_Struct(cNode, ImmutableNodeContext, NULL, NULL, roc);
|
369
|
-
roc->js = ctx->js;
|
370
|
-
roc->node = ctx->node->pn_kid;
|
371
|
-
return node;
|
372
|
-
}
|
373
|
-
return Qnil;
|
374
|
-
}
|
375
|
-
|
376
|
-
/*
|
377
|
-
* call-seq:
|
378
|
-
* pn_kid1
|
379
|
-
*
|
380
|
-
* Returns the first child ImmutableNode.
|
381
|
-
*/
|
382
|
-
static VALUE data_pn_kid1(VALUE self) {
|
383
|
-
ImmutableNodeContext * ctx;
|
384
|
-
|
385
|
-
Data_Get_Struct(self, ImmutableNodeContext, ctx);
|
386
|
-
if(ctx->node->pn_kid1) {
|
387
|
-
ImmutableNodeContext *roc;
|
388
|
-
VALUE node = Data_Make_Struct(cNode, ImmutableNodeContext, NULL, NULL, roc);
|
389
|
-
roc->js = ctx->js;
|
390
|
-
roc->node = ctx->node->pn_kid1;
|
391
|
-
return node;
|
392
|
-
}
|
393
|
-
return Qnil;
|
394
|
-
}
|
395
|
-
|
396
|
-
/*
|
397
|
-
* call-seq:
|
398
|
-
* pn_kid2
|
399
|
-
*
|
400
|
-
* Returns the second child ImmutableNode.
|
401
|
-
*/
|
402
|
-
static VALUE data_pn_kid2(VALUE self) {
|
403
|
-
ImmutableNodeContext * ctx;
|
404
|
-
|
405
|
-
Data_Get_Struct(self, ImmutableNodeContext, ctx);
|
406
|
-
if(ctx->node->pn_kid2) {
|
407
|
-
ImmutableNodeContext *roc;
|
408
|
-
VALUE node = Data_Make_Struct(cNode, ImmutableNodeContext, NULL, NULL, roc);
|
409
|
-
roc->js = ctx->js;
|
410
|
-
roc->node = ctx->node->pn_kid2;
|
411
|
-
return node;
|
412
|
-
}
|
413
|
-
return Qnil;
|
414
|
-
}
|
415
|
-
|
416
|
-
/*
|
417
|
-
* call-seq:
|
418
|
-
* pn_kid3
|
419
|
-
*
|
420
|
-
* Returns the third child ImmutableNode.
|
421
|
-
*/
|
422
|
-
static VALUE data_pn_kid3(VALUE self) {
|
423
|
-
ImmutableNodeContext * ctx;
|
424
|
-
|
425
|
-
Data_Get_Struct(self, ImmutableNodeContext, ctx);
|
426
|
-
if(ctx->node->pn_kid3) {
|
427
|
-
ImmutableNodeContext *roc;
|
428
|
-
VALUE node = Data_Make_Struct(cNode, ImmutableNodeContext, NULL, NULL, roc);
|
429
|
-
roc->js = ctx->js;
|
430
|
-
roc->node = ctx->node->pn_kid3;
|
431
|
-
return node;
|
432
|
-
}
|
433
|
-
return Qnil;
|
434
|
-
}
|
435
|
-
|
436
|
-
/*
|
437
|
-
* call-seq:
|
438
|
-
* pn_dval
|
439
|
-
*
|
440
|
-
* Returns the numeric value of the node.
|
441
|
-
*/
|
442
|
-
static VALUE data_pn_dval(VALUE self) {
|
443
|
-
ImmutableNodeContext * ctx;
|
444
|
-
|
445
|
-
Data_Get_Struct(self, ImmutableNodeContext, ctx);
|
446
|
-
if(JSVAL_IS_NUMBER(ATOM_KEY(ctx->node->pn_atom))) {
|
447
|
-
return rb_float_new(ctx->node->pn_dval);
|
448
|
-
} else {
|
449
|
-
return INT2NUM((long)(ctx->node->pn_dval));
|
450
|
-
}
|
451
|
-
}
|
452
|
-
|
453
|
-
/*
|
454
|
-
* call-seq:
|
455
|
-
* pn_op
|
456
|
-
*
|
457
|
-
* Returns the op code for the node as a symbol.
|
458
|
-
*/
|
459
|
-
static VALUE data_pn_op(VALUE self) {
|
460
|
-
ImmutableNodeContext * ctx;
|
461
|
-
|
462
|
-
Data_Get_Struct(self, ImmutableNodeContext, ctx);
|
463
|
-
return jsop_to_symbol(ctx->node->pn_op);
|
464
|
-
}
|
465
|
-
|
466
|
-
/*
|
467
|
-
* call-seq:
|
468
|
-
* pn_left
|
469
|
-
*
|
470
|
-
* Returns the left side ImmutableNode.
|
471
|
-
*/
|
472
|
-
static VALUE data_pn_left(VALUE self) {
|
473
|
-
ImmutableNodeContext * ctx;
|
474
|
-
|
475
|
-
Data_Get_Struct(self, ImmutableNodeContext, ctx);
|
476
|
-
|
477
|
-
if(ctx->node->pn_left) {
|
478
|
-
ImmutableNodeContext *roc;
|
479
|
-
VALUE node = Data_Make_Struct(cNode, ImmutableNodeContext, NULL, NULL, roc);
|
480
|
-
roc->js = ctx->js;
|
481
|
-
roc->node = ctx->node->pn_left;
|
482
|
-
return node;
|
483
|
-
}
|
484
|
-
return Qnil;
|
485
|
-
}
|
486
|
-
|
487
|
-
/*
|
488
|
-
* call-seq:
|
489
|
-
* pn_extra
|
490
|
-
*
|
491
|
-
* Returns extra informaton about the node as an Integer.
|
492
|
-
*/
|
493
|
-
static VALUE data_pn_extra(VALUE self) {
|
494
|
-
ImmutableNodeContext * ctx;
|
495
|
-
|
496
|
-
Data_Get_Struct(self, ImmutableNodeContext, ctx);
|
497
|
-
|
498
|
-
return UINT2NUM((unsigned long)(ctx->node->pn_extra));
|
499
|
-
}
|
500
|
-
|
501
|
-
/*
|
502
|
-
* call-seq:
|
503
|
-
* name
|
504
|
-
*
|
505
|
-
* Returns the name of the node.
|
506
|
-
*/
|
507
|
-
static VALUE name(VALUE self) {
|
508
|
-
ImmutableNodeContext * ctx;
|
509
|
-
|
510
|
-
Data_Get_Struct(self, ImmutableNodeContext, ctx);
|
511
|
-
return rb_str_new2(JS_GetStringBytes(ATOM_TO_STRING(ctx->node->pn_atom)));
|
512
|
-
}
|
513
|
-
|
514
|
-
/*
|
515
|
-
* call-seq:
|
516
|
-
* regexp
|
517
|
-
*
|
518
|
-
* Returns the regexp value as a String.
|
519
|
-
*/
|
520
|
-
static VALUE regexp(VALUE self) {
|
521
|
-
ImmutableNodeContext * ctx;
|
522
|
-
jsval result;
|
523
|
-
|
524
|
-
Data_Get_Struct(self, ImmutableNodeContext, ctx);
|
525
|
-
js_regexp_toString(ctx->js, ctx->node->pn_pob->object, &result);
|
526
|
-
return rb_str_new2(JS_GetStringBytes(JSVAL_TO_STRING(result)));
|
527
|
-
}
|
528
|
-
|
529
|
-
/*
|
530
|
-
* call-seq:
|
531
|
-
* function_name
|
532
|
-
*
|
533
|
-
* Returns the function name as a String.
|
534
|
-
*/
|
535
|
-
static VALUE function_name(VALUE self) {
|
536
|
-
ImmutableNodeContext * ctx;
|
537
|
-
JSFunction * f;
|
538
|
-
JSObject * object;
|
539
|
-
|
540
|
-
Data_Get_Struct(self, ImmutableNodeContext, ctx);
|
541
|
-
object = ctx->node->pn_funpob->object;
|
542
|
-
f = (JSFunction *)JS_GetPrivate(ctx->js, ctx->node->pn_funpob->object);
|
543
|
-
|
544
|
-
if(f->atom) {
|
545
|
-
return rb_str_new2(JS_GetStringBytes(ATOM_TO_STRING(f->atom)));
|
546
|
-
} else {
|
547
|
-
return Qnil;
|
548
|
-
}
|
549
|
-
}
|
550
|
-
|
551
|
-
/*
|
552
|
-
* call-seq:
|
553
|
-
* function_args
|
554
|
-
*
|
555
|
-
* Returns the function argument names as an Array of String.
|
556
|
-
*/
|
557
|
-
static VALUE function_args(VALUE self) {
|
558
|
-
ImmutableNodeContext * ctx;
|
559
|
-
JSFunction * f;
|
560
|
-
JSObject * object;
|
561
|
-
jsuword* names;
|
562
|
-
VALUE func_args;
|
563
|
-
int i;
|
564
|
-
|
565
|
-
Data_Get_Struct(self, ImmutableNodeContext, ctx);
|
566
|
-
object = ctx->node->pn_funpob->object;
|
567
|
-
f = (JSFunction *)JS_GetPrivate(ctx->js, ctx->node->pn_funpob->object);
|
568
|
-
|
569
|
-
func_args = rb_ary_new2((long)f->nargs);
|
570
|
-
if(f->nargs > 0) {
|
571
|
-
names = js_GetLocalNameArray(ctx->js, f, &ctx->js->tempPool);
|
572
|
-
for(i = 0; i < f->nargs; i++) {
|
573
|
-
rb_ary_push(func_args,
|
574
|
-
rb_str_new2(JS_GetStringBytes(ATOM_TO_STRING(names[i])))
|
575
|
-
);
|
576
|
-
}
|
577
|
-
}
|
578
|
-
return func_args;
|
579
|
-
}
|
580
|
-
|
581
|
-
/*
|
582
|
-
* call-seq:
|
583
|
-
* function_body
|
584
|
-
*
|
585
|
-
* Returns the function body as an ImmutableNode.
|
586
|
-
*/
|
587
|
-
static VALUE function_body(VALUE self) {
|
588
|
-
ImmutableNodeContext * ctx;
|
589
|
-
JSFunction * f;
|
590
|
-
JSObject * object;
|
591
|
-
|
592
|
-
Data_Get_Struct(self, ImmutableNodeContext, ctx);
|
593
|
-
object = ctx->node->pn_funpob->object;
|
594
|
-
f = (JSFunction *)JS_GetPrivate(ctx->js, ctx->node->pn_funpob->object);
|
595
|
-
|
596
|
-
if(ctx->node->pn_body) {
|
597
|
-
ImmutableNodeContext *roc;
|
598
|
-
VALUE node = Data_Make_Struct(cNode, ImmutableNodeContext, NULL, NULL, roc);
|
599
|
-
roc->js = ctx->js;
|
600
|
-
roc->node = ctx->node->pn_body;
|
601
|
-
return node;
|
602
|
-
}
|
603
|
-
return Qnil;
|
604
|
-
}
|
605
|
-
|
606
|
-
/*
|
607
|
-
* call-seq:
|
608
|
-
* pn_right
|
609
|
-
*
|
610
|
-
* Returns right side as an ImmutableNode.
|
611
|
-
*/
|
612
|
-
static VALUE data_pn_right(VALUE self)
|
613
|
-
{
|
614
|
-
ImmutableNodeContext * ctx;
|
615
|
-
|
616
|
-
Data_Get_Struct(self, ImmutableNodeContext, ctx);
|
617
|
-
|
618
|
-
if(ctx->node->pn_right) {
|
619
|
-
ImmutableNodeContext *roc;
|
620
|
-
VALUE node = Data_Make_Struct(cNode, ImmutableNodeContext, NULL, NULL, roc);
|
621
|
-
roc->js = ctx->js;
|
622
|
-
roc->node = ctx->node->pn_right;
|
623
|
-
return node;
|
624
|
-
}
|
625
|
-
return Qnil;
|
626
|
-
}
|
627
|
-
|
628
|
-
/*
|
629
|
-
* call-seq:
|
630
|
-
* children
|
631
|
-
*
|
632
|
-
* Returns children as an Array of ImmutableNode.
|
633
|
-
*/
|
634
|
-
static VALUE children(VALUE self) {
|
635
|
-
ImmutableNodeContext * ctx;
|
636
|
-
JSParseNode * p;
|
637
|
-
VALUE children;
|
638
|
-
|
639
|
-
Data_Get_Struct(self, ImmutableNodeContext, ctx);
|
640
|
-
children = rb_ary_new();
|
641
|
-
for(p = ctx->node->pn_head; p != NULL; p = p->pn_next) {
|
642
|
-
ImmutableNodeContext *roc;
|
643
|
-
VALUE node = Data_Make_Struct(cNode, ImmutableNodeContext, NULL, NULL, roc);
|
644
|
-
roc->js = ctx->js;
|
645
|
-
roc->node = p;
|
646
|
-
|
647
|
-
rb_ary_push(children, node);
|
648
|
-
}
|
649
|
-
|
650
|
-
return children;
|
651
|
-
}
|
652
|
-
|
653
|
-
VALUE jsop_to_symbol(JSUint32 jsop)
|
654
|
-
{
|
655
|
-
switch(jsop) {
|
656
|
-
|
657
|
-
case JSOP_NOP: return ID2SYM(rb_intern("jsop_nop"));
|
658
|
-
|
659
|
-
case JSOP_PUSH: return ID2SYM(rb_intern("jsop_push"));
|
660
|
-
|
661
|
-
case JSOP_POPV: return ID2SYM(rb_intern("jsop_popv"));
|
662
|
-
|
663
|
-
case JSOP_ENTERWITH: return ID2SYM(rb_intern("jsop_enterwith"));
|
664
|
-
|
665
|
-
case JSOP_LEAVEWITH: return ID2SYM(rb_intern("jsop_leavewith"));
|
666
|
-
|
667
|
-
case JSOP_RETURN: return ID2SYM(rb_intern("jsop_return"));
|
668
|
-
|
669
|
-
case JSOP_GOTO: return ID2SYM(rb_intern("jsop_goto"));
|
670
|
-
|
671
|
-
case JSOP_IFEQ: return ID2SYM(rb_intern("jsop_ifeq"));
|
672
|
-
|
673
|
-
case JSOP_IFNE: return ID2SYM(rb_intern("jsop_ifne"));
|
674
|
-
|
675
|
-
case JSOP_ARGUMENTS: return ID2SYM(rb_intern("jsop_arguments"));
|
676
|
-
|
677
|
-
case JSOP_FORARG: return ID2SYM(rb_intern("jsop_forarg"));
|
678
|
-
|
679
|
-
case JSOP_FORVAR: return ID2SYM(rb_intern("jsop_forvar"));
|
680
|
-
|
681
|
-
case JSOP_DUP: return ID2SYM(rb_intern("jsop_dup"));
|
682
|
-
|
683
|
-
case JSOP_DUP2: return ID2SYM(rb_intern("jsop_dup2"));
|
684
|
-
|
685
|
-
case JSOP_SETCONST: return ID2SYM(rb_intern("jsop_setconst"));
|
686
|
-
|
687
|
-
case JSOP_BITOR: return ID2SYM(rb_intern("jsop_bitor"));
|
688
|
-
|
689
|
-
case JSOP_BITXOR: return ID2SYM(rb_intern("jsop_bitxor"));
|
690
|
-
|
691
|
-
case JSOP_BITAND: return ID2SYM(rb_intern("jsop_bitand"));
|
692
|
-
|
693
|
-
case JSOP_EQ: return ID2SYM(rb_intern("jsop_eq"));
|
694
|
-
|
695
|
-
case JSOP_NE: return ID2SYM(rb_intern("jsop_ne"));
|
696
|
-
|
697
|
-
case JSOP_LT: return ID2SYM(rb_intern("jsop_lt"));
|
698
|
-
|
699
|
-
case JSOP_LE: return ID2SYM(rb_intern("jsop_le"));
|
700
|
-
|
701
|
-
case JSOP_GT: return ID2SYM(rb_intern("jsop_gt"));
|
702
|
-
|
703
|
-
case JSOP_GE: return ID2SYM(rb_intern("jsop_ge"));
|
704
|
-
|
705
|
-
case JSOP_LSH: return ID2SYM(rb_intern("jsop_lsh"));
|
706
|
-
|
707
|
-
case JSOP_RSH: return ID2SYM(rb_intern("jsop_rsh"));
|
708
|
-
|
709
|
-
case JSOP_URSH: return ID2SYM(rb_intern("jsop_ursh"));
|
710
|
-
|
711
|
-
case JSOP_ADD: return ID2SYM(rb_intern("jsop_add"));
|
712
|
-
|
713
|
-
case JSOP_SUB: return ID2SYM(rb_intern("jsop_sub"));
|
714
|
-
|
715
|
-
case JSOP_MUL: return ID2SYM(rb_intern("jsop_mul"));
|
716
|
-
|
717
|
-
case JSOP_DIV: return ID2SYM(rb_intern("jsop_div"));
|
718
|
-
|
719
|
-
case JSOP_MOD: return ID2SYM(rb_intern("jsop_mod"));
|
720
|
-
|
721
|
-
case JSOP_NOT: return ID2SYM(rb_intern("jsop_not"));
|
722
|
-
|
723
|
-
case JSOP_BITNOT: return ID2SYM(rb_intern("jsop_bitnot"));
|
724
|
-
|
725
|
-
case JSOP_NEG: return ID2SYM(rb_intern("jsop_neg"));
|
726
|
-
|
727
|
-
case JSOP_NEW: return ID2SYM(rb_intern("jsop_new"));
|
728
|
-
|
729
|
-
case JSOP_DELNAME: return ID2SYM(rb_intern("jsop_delname"));
|
730
|
-
|
731
|
-
case JSOP_DELPROP: return ID2SYM(rb_intern("jsop_delprop"));
|
732
|
-
|
733
|
-
case JSOP_DELELEM: return ID2SYM(rb_intern("jsop_delelem"));
|
734
|
-
|
735
|
-
case JSOP_TYPEOF: return ID2SYM(rb_intern("jsop_typeof"));
|
736
|
-
|
737
|
-
case JSOP_VOID: return ID2SYM(rb_intern("jsop_void"));
|
738
|
-
|
739
|
-
case JSOP_INCNAME: return ID2SYM(rb_intern("jsop_incname"));
|
740
|
-
|
741
|
-
case JSOP_INCPROP: return ID2SYM(rb_intern("jsop_incprop"));
|
742
|
-
|
743
|
-
case JSOP_INCELEM: return ID2SYM(rb_intern("jsop_incelem"));
|
744
|
-
|
745
|
-
case JSOP_DECNAME: return ID2SYM(rb_intern("jsop_decname"));
|
746
|
-
|
747
|
-
case JSOP_DECPROP: return ID2SYM(rb_intern("jsop_decprop"));
|
748
|
-
|
749
|
-
case JSOP_DECELEM: return ID2SYM(rb_intern("jsop_decelem"));
|
750
|
-
|
751
|
-
case JSOP_NAMEINC: return ID2SYM(rb_intern("jsop_nameinc"));
|
752
|
-
|
753
|
-
case JSOP_PROPINC: return ID2SYM(rb_intern("jsop_propinc"));
|
754
|
-
|
755
|
-
case JSOP_ELEMINC: return ID2SYM(rb_intern("jsop_eleminc"));
|
756
|
-
|
757
|
-
case JSOP_NAMEDEC: return ID2SYM(rb_intern("jsop_namedec"));
|
758
|
-
|
759
|
-
case JSOP_PROPDEC: return ID2SYM(rb_intern("jsop_propdec"));
|
760
|
-
|
761
|
-
case JSOP_ELEMDEC: return ID2SYM(rb_intern("jsop_elemdec"));
|
762
|
-
|
763
|
-
case JSOP_GETPROP: return ID2SYM(rb_intern("jsop_getprop"));
|
764
|
-
|
765
|
-
case JSOP_SETPROP: return ID2SYM(rb_intern("jsop_setprop"));
|
766
|
-
|
767
|
-
case JSOP_GETELEM: return ID2SYM(rb_intern("jsop_getelem"));
|
768
|
-
|
769
|
-
case JSOP_SETELEM: return ID2SYM(rb_intern("jsop_setelem"));
|
770
|
-
|
771
|
-
case JSOP_CALLNAME: return ID2SYM(rb_intern("jsop_callname"));
|
772
|
-
|
773
|
-
case JSOP_CALL: return ID2SYM(rb_intern("jsop_call"));
|
774
|
-
|
775
|
-
case JSOP_NAME: return ID2SYM(rb_intern("jsop_name"));
|
776
|
-
|
777
|
-
case JSOP_DOUBLE: return ID2SYM(rb_intern("jsop_double"));
|
778
|
-
|
779
|
-
case JSOP_STRING: return ID2SYM(rb_intern("jsop_string"));
|
780
|
-
|
781
|
-
case JSOP_ZERO: return ID2SYM(rb_intern("jsop_zero"));
|
782
|
-
|
783
|
-
case JSOP_ONE: return ID2SYM(rb_intern("jsop_one"));
|
784
|
-
|
785
|
-
case JSOP_NULL: return ID2SYM(rb_intern("jsop_null"));
|
786
|
-
|
787
|
-
case JSOP_THIS: return ID2SYM(rb_intern("jsop_this"));
|
788
|
-
|
789
|
-
case JSOP_FALSE: return ID2SYM(rb_intern("jsop_false"));
|
790
|
-
|
791
|
-
case JSOP_TRUE: return ID2SYM(rb_intern("jsop_true"));
|
792
|
-
|
793
|
-
case JSOP_OR: return ID2SYM(rb_intern("jsop_or"));
|
794
|
-
|
795
|
-
case JSOP_AND: return ID2SYM(rb_intern("jsop_and"));
|
796
|
-
|
797
|
-
case JSOP_TABLESWITCH: return ID2SYM(rb_intern("jsop_tableswitch"));
|
798
|
-
|
799
|
-
case JSOP_LOOKUPSWITCH: return ID2SYM(rb_intern("jsop_lookupswitch"));
|
800
|
-
|
801
|
-
case JSOP_STRICTEQ: return ID2SYM(rb_intern("jsop_stricteq"));
|
802
|
-
|
803
|
-
case JSOP_STRICTNE: return ID2SYM(rb_intern("jsop_strictne"));
|
804
|
-
|
805
|
-
case JSOP_CLOSURE: return ID2SYM(rb_intern("jsop_closure"));
|
806
|
-
|
807
|
-
case JSOP_EXPORTALL: return ID2SYM(rb_intern("jsop_exportall"));
|
808
|
-
|
809
|
-
case JSOP_EXPORTNAME: return ID2SYM(rb_intern("jsop_exportname"));
|
810
|
-
|
811
|
-
case JSOP_IMPORTALL: return ID2SYM(rb_intern("jsop_importall"));
|
812
|
-
|
813
|
-
case JSOP_IMPORTPROP: return ID2SYM(rb_intern("jsop_importprop"));
|
814
|
-
|
815
|
-
case JSOP_IMPORTELEM: return ID2SYM(rb_intern("jsop_importelem"));
|
816
|
-
|
817
|
-
case JSOP_OBJECT: return ID2SYM(rb_intern("jsop_object"));
|
818
|
-
|
819
|
-
case JSOP_POP: return ID2SYM(rb_intern("jsop_pop"));
|
820
|
-
|
821
|
-
case JSOP_POS: return ID2SYM(rb_intern("jsop_pos"));
|
822
|
-
|
823
|
-
case JSOP_TRAP: return ID2SYM(rb_intern("jsop_trap"));
|
824
|
-
|
825
|
-
case JSOP_GETARG: return ID2SYM(rb_intern("jsop_getarg"));
|
826
|
-
|
827
|
-
case JSOP_SETARG: return ID2SYM(rb_intern("jsop_setarg"));
|
828
|
-
|
829
|
-
case JSOP_GETVAR: return ID2SYM(rb_intern("jsop_getvar"));
|
830
|
-
|
831
|
-
case JSOP_SETVAR: return ID2SYM(rb_intern("jsop_setvar"));
|
832
|
-
|
833
|
-
case JSOP_UINT16: return ID2SYM(rb_intern("jsop_uint16"));
|
834
|
-
|
835
|
-
case JSOP_NEWINIT: return ID2SYM(rb_intern("jsop_newinit"));
|
836
|
-
|
837
|
-
case JSOP_ENDINIT: return ID2SYM(rb_intern("jsop_endinit"));
|
838
|
-
|
839
|
-
case JSOP_INITPROP: return ID2SYM(rb_intern("jsop_initprop"));
|
840
|
-
|
841
|
-
case JSOP_INITELEM: return ID2SYM(rb_intern("jsop_initelem"));
|
842
|
-
|
843
|
-
case JSOP_DEFSHARP: return ID2SYM(rb_intern("jsop_defsharp"));
|
844
|
-
|
845
|
-
case JSOP_USESHARP: return ID2SYM(rb_intern("jsop_usesharp"));
|
846
|
-
|
847
|
-
case JSOP_INCARG: return ID2SYM(rb_intern("jsop_incarg"));
|
848
|
-
|
849
|
-
case JSOP_INCVAR: return ID2SYM(rb_intern("jsop_incvar"));
|
850
|
-
|
851
|
-
case JSOP_DECARG: return ID2SYM(rb_intern("jsop_decarg"));
|
852
|
-
|
853
|
-
case JSOP_DECVAR: return ID2SYM(rb_intern("jsop_decvar"));
|
854
|
-
|
855
|
-
case JSOP_ARGINC: return ID2SYM(rb_intern("jsop_arginc"));
|
856
|
-
|
857
|
-
case JSOP_VARINC: return ID2SYM(rb_intern("jsop_varinc"));
|
858
|
-
|
859
|
-
case JSOP_ARGDEC: return ID2SYM(rb_intern("jsop_argdec"));
|
860
|
-
|
861
|
-
case JSOP_VARDEC: return ID2SYM(rb_intern("jsop_vardec"));
|
862
|
-
|
863
|
-
case JSOP_FORIN: return ID2SYM(rb_intern("jsop_forin"));
|
864
|
-
|
865
|
-
case JSOP_FORNAME: return ID2SYM(rb_intern("jsop_forname"));
|
866
|
-
|
867
|
-
case JSOP_FORPROP: return ID2SYM(rb_intern("jsop_forprop"));
|
868
|
-
|
869
|
-
case JSOP_FORELEM: return ID2SYM(rb_intern("jsop_forelem"));
|
870
|
-
|
871
|
-
case JSOP_POPN: return ID2SYM(rb_intern("jsop_popn"));
|
872
|
-
|
873
|
-
case JSOP_BINDNAME: return ID2SYM(rb_intern("jsop_bindname"));
|
874
|
-
|
875
|
-
case JSOP_SETNAME: return ID2SYM(rb_intern("jsop_setname"));
|
876
|
-
|
877
|
-
case JSOP_THROW: return ID2SYM(rb_intern("jsop_throw"));
|
878
|
-
|
879
|
-
case JSOP_IN: return ID2SYM(rb_intern("jsop_in"));
|
880
|
-
|
881
|
-
case JSOP_INSTANCEOF: return ID2SYM(rb_intern("jsop_instanceof"));
|
882
|
-
|
883
|
-
case JSOP_DEBUGGER: return ID2SYM(rb_intern("jsop_debugger"));
|
884
|
-
|
885
|
-
case JSOP_GOSUB: return ID2SYM(rb_intern("jsop_gosub"));
|
886
|
-
|
887
|
-
case JSOP_RETSUB: return ID2SYM(rb_intern("jsop_retsub"));
|
888
|
-
|
889
|
-
case JSOP_EXCEPTION: return ID2SYM(rb_intern("jsop_exception"));
|
890
|
-
|
891
|
-
case JSOP_LINENO: return ID2SYM(rb_intern("jsop_lineno"));
|
892
|
-
|
893
|
-
case JSOP_CONDSWITCH: return ID2SYM(rb_intern("jsop_condswitch"));
|
894
|
-
|
895
|
-
case JSOP_CASE: return ID2SYM(rb_intern("jsop_case"));
|
896
|
-
|
897
|
-
case JSOP_DEFAULT: return ID2SYM(rb_intern("jsop_default"));
|
898
|
-
|
899
|
-
case JSOP_EVAL: return ID2SYM(rb_intern("jsop_eval"));
|
900
|
-
|
901
|
-
case JSOP_ENUMELEM: return ID2SYM(rb_intern("jsop_enumelem"));
|
902
|
-
|
903
|
-
case JSOP_GETTER: return ID2SYM(rb_intern("jsop_getter"));
|
904
|
-
|
905
|
-
case JSOP_SETTER: return ID2SYM(rb_intern("jsop_setter"));
|
906
|
-
|
907
|
-
case JSOP_DEFFUN: return ID2SYM(rb_intern("jsop_deffun"));
|
908
|
-
|
909
|
-
case JSOP_DEFCONST: return ID2SYM(rb_intern("jsop_defconst"));
|
910
|
-
|
911
|
-
case JSOP_DEFVAR: return ID2SYM(rb_intern("jsop_defvar"));
|
912
|
-
|
913
|
-
case JSOP_ANONFUNOBJ: return ID2SYM(rb_intern("jsop_anonfunobj"));
|
914
|
-
|
915
|
-
case JSOP_NAMEDFUNOBJ: return ID2SYM(rb_intern("jsop_namedfunobj"));
|
916
|
-
|
917
|
-
case JSOP_SETLOCALPOP: return ID2SYM(rb_intern("jsop_setlocalpop"));
|
918
|
-
|
919
|
-
case JSOP_GROUP: return ID2SYM(rb_intern("jsop_group"));
|
920
|
-
|
921
|
-
case JSOP_SETCALL: return ID2SYM(rb_intern("jsop_setcall"));
|
922
|
-
|
923
|
-
case JSOP_TRY: return ID2SYM(rb_intern("jsop_try"));
|
924
|
-
|
925
|
-
case JSOP_FINALLY: return ID2SYM(rb_intern("jsop_finally"));
|
926
|
-
|
927
|
-
case JSOP_SWAP: return ID2SYM(rb_intern("jsop_swap"));
|
928
|
-
|
929
|
-
case JSOP_ARGSUB: return ID2SYM(rb_intern("jsop_argsub"));
|
930
|
-
|
931
|
-
case JSOP_ARGCNT: return ID2SYM(rb_intern("jsop_argcnt"));
|
932
|
-
|
933
|
-
case JSOP_DEFLOCALFUN: return ID2SYM(rb_intern("jsop_deflocalfun"));
|
934
|
-
|
935
|
-
case JSOP_GOTOX: return ID2SYM(rb_intern("jsop_gotox"));
|
936
|
-
|
937
|
-
case JSOP_IFEQX: return ID2SYM(rb_intern("jsop_ifeqx"));
|
938
|
-
|
939
|
-
case JSOP_IFNEX: return ID2SYM(rb_intern("jsop_ifnex"));
|
940
|
-
|
941
|
-
case JSOP_ORX: return ID2SYM(rb_intern("jsop_orx"));
|
942
|
-
|
943
|
-
case JSOP_ANDX: return ID2SYM(rb_intern("jsop_andx"));
|
944
|
-
|
945
|
-
case JSOP_GOSUBX: return ID2SYM(rb_intern("jsop_gosubx"));
|
946
|
-
|
947
|
-
case JSOP_CASEX: return ID2SYM(rb_intern("jsop_casex"));
|
948
|
-
|
949
|
-
case JSOP_DEFAULTX: return ID2SYM(rb_intern("jsop_defaultx"));
|
950
|
-
|
951
|
-
case JSOP_TABLESWITCHX: return ID2SYM(rb_intern("jsop_tableswitchx"));
|
952
|
-
|
953
|
-
case JSOP_LOOKUPSWITCHX: return ID2SYM(rb_intern("jsop_lookupswitchx"));
|
954
|
-
|
955
|
-
case JSOP_BACKPATCH: return ID2SYM(rb_intern("jsop_backpatch"));
|
956
|
-
|
957
|
-
case JSOP_BACKPATCH_POP: return ID2SYM(rb_intern("jsop_backpatch_pop"));
|
958
|
-
|
959
|
-
case JSOP_THROWING: return ID2SYM(rb_intern("jsop_throwing"));
|
960
|
-
|
961
|
-
case JSOP_SETRVAL: return ID2SYM(rb_intern("jsop_setrval"));
|
962
|
-
|
963
|
-
case JSOP_RETRVAL: return ID2SYM(rb_intern("jsop_retrval"));
|
964
|
-
|
965
|
-
case JSOP_GETGVAR: return ID2SYM(rb_intern("jsop_getgvar"));
|
966
|
-
|
967
|
-
case JSOP_SETGVAR: return ID2SYM(rb_intern("jsop_setgvar"));
|
968
|
-
|
969
|
-
case JSOP_INCGVAR: return ID2SYM(rb_intern("jsop_incgvar"));
|
970
|
-
|
971
|
-
case JSOP_DECGVAR: return ID2SYM(rb_intern("jsop_decgvar"));
|
972
|
-
|
973
|
-
case JSOP_GVARINC: return ID2SYM(rb_intern("jsop_gvarinc"));
|
974
|
-
|
975
|
-
case JSOP_GVARDEC: return ID2SYM(rb_intern("jsop_gvardec"));
|
976
|
-
|
977
|
-
case JSOP_REGEXP: return ID2SYM(rb_intern("jsop_regexp"));
|
978
|
-
|
979
|
-
case JSOP_DEFXMLNS: return ID2SYM(rb_intern("jsop_defxmlns"));
|
980
|
-
|
981
|
-
case JSOP_ANYNAME: return ID2SYM(rb_intern("jsop_anyname"));
|
982
|
-
|
983
|
-
case JSOP_QNAMEPART: return ID2SYM(rb_intern("jsop_qnamepart"));
|
984
|
-
|
985
|
-
case JSOP_QNAMECONST: return ID2SYM(rb_intern("jsop_qnameconst"));
|
986
|
-
|
987
|
-
case JSOP_QNAME: return ID2SYM(rb_intern("jsop_qname"));
|
988
|
-
|
989
|
-
case JSOP_TOATTRNAME: return ID2SYM(rb_intern("jsop_toattrname"));
|
990
|
-
|
991
|
-
case JSOP_TOATTRVAL: return ID2SYM(rb_intern("jsop_toattrval"));
|
992
|
-
|
993
|
-
case JSOP_ADDATTRNAME: return ID2SYM(rb_intern("jsop_addattrname"));
|
994
|
-
|
995
|
-
case JSOP_ADDATTRVAL: return ID2SYM(rb_intern("jsop_addattrval"));
|
996
|
-
|
997
|
-
case JSOP_BINDXMLNAME: return ID2SYM(rb_intern("jsop_bindxmlname"));
|
998
|
-
|
999
|
-
case JSOP_SETXMLNAME: return ID2SYM(rb_intern("jsop_setxmlname"));
|
1000
|
-
|
1001
|
-
case JSOP_XMLNAME: return ID2SYM(rb_intern("jsop_xmlname"));
|
1002
|
-
|
1003
|
-
case JSOP_DESCENDANTS: return ID2SYM(rb_intern("jsop_descendants"));
|
1004
|
-
|
1005
|
-
case JSOP_FILTER: return ID2SYM(rb_intern("jsop_filter"));
|
1006
|
-
|
1007
|
-
case JSOP_ENDFILTER: return ID2SYM(rb_intern("jsop_endfilter"));
|
1008
|
-
|
1009
|
-
case JSOP_TOXML: return ID2SYM(rb_intern("jsop_toxml"));
|
1010
|
-
|
1011
|
-
case JSOP_TOXMLLIST: return ID2SYM(rb_intern("jsop_toxmllist"));
|
1012
|
-
|
1013
|
-
case JSOP_XMLTAGEXPR: return ID2SYM(rb_intern("jsop_xmltagexpr"));
|
1014
|
-
|
1015
|
-
case JSOP_XMLELTEXPR: return ID2SYM(rb_intern("jsop_xmleltexpr"));
|
1016
|
-
|
1017
|
-
case JSOP_XMLOBJECT: return ID2SYM(rb_intern("jsop_xmlobject"));
|
1018
|
-
|
1019
|
-
case JSOP_XMLCDATA: return ID2SYM(rb_intern("jsop_xmlcdata"));
|
1020
|
-
|
1021
|
-
case JSOP_XMLCOMMENT: return ID2SYM(rb_intern("jsop_xmlcomment"));
|
1022
|
-
|
1023
|
-
case JSOP_XMLPI: return ID2SYM(rb_intern("jsop_xmlpi"));
|
1024
|
-
|
1025
|
-
case JSOP_CALLPROP: return ID2SYM(rb_intern("jsop_callprop"));
|
1026
|
-
|
1027
|
-
case JSOP_GETFUNNS: return ID2SYM(rb_intern("jsop_getfunns"));
|
1028
|
-
|
1029
|
-
case JSOP_FOREACH: return ID2SYM(rb_intern("jsop_foreach"));
|
1030
|
-
|
1031
|
-
case JSOP_DELDESC: return ID2SYM(rb_intern("jsop_deldesc"));
|
1032
|
-
|
1033
|
-
case JSOP_UINT24: return ID2SYM(rb_intern("jsop_uint24"));
|
1034
|
-
|
1035
|
-
case JSOP_INDEXBASE: return ID2SYM(rb_intern("jsop_indexbase"));
|
1036
|
-
|
1037
|
-
case JSOP_RESETBASE: return ID2SYM(rb_intern("jsop_resetbase"));
|
1038
|
-
|
1039
|
-
case JSOP_RESETBASE0: return ID2SYM(rb_intern("jsop_resetbase0"));
|
1040
|
-
|
1041
|
-
case JSOP_STARTXML: return ID2SYM(rb_intern("jsop_startxml"));
|
1042
|
-
|
1043
|
-
case JSOP_STARTXMLEXPR: return ID2SYM(rb_intern("jsop_startxmlexpr"));
|
1044
|
-
|
1045
|
-
case JSOP_CALLELEM: return ID2SYM(rb_intern("jsop_callelem"));
|
1046
|
-
|
1047
|
-
case JSOP_STOP: return ID2SYM(rb_intern("jsop_stop"));
|
1048
|
-
|
1049
|
-
case JSOP_GETXPROP: return ID2SYM(rb_intern("jsop_getxprop"));
|
1050
|
-
|
1051
|
-
case JSOP_CALLXMLNAME: return ID2SYM(rb_intern("jsop_callxmlname"));
|
1052
|
-
|
1053
|
-
case JSOP_TYPEOFEXPR: return ID2SYM(rb_intern("jsop_typeofexpr"));
|
1054
|
-
|
1055
|
-
case JSOP_ENTERBLOCK: return ID2SYM(rb_intern("jsop_enterblock"));
|
1056
|
-
|
1057
|
-
case JSOP_LEAVEBLOCK: return ID2SYM(rb_intern("jsop_leaveblock"));
|
1058
|
-
|
1059
|
-
case JSOP_GETLOCAL: return ID2SYM(rb_intern("jsop_getlocal"));
|
1060
|
-
|
1061
|
-
case JSOP_SETLOCAL: return ID2SYM(rb_intern("jsop_setlocal"));
|
1062
|
-
|
1063
|
-
case JSOP_INCLOCAL: return ID2SYM(rb_intern("jsop_inclocal"));
|
1064
|
-
|
1065
|
-
case JSOP_DECLOCAL: return ID2SYM(rb_intern("jsop_declocal"));
|
1066
|
-
|
1067
|
-
case JSOP_LOCALINC: return ID2SYM(rb_intern("jsop_localinc"));
|
1068
|
-
|
1069
|
-
case JSOP_LOCALDEC: return ID2SYM(rb_intern("jsop_localdec"));
|
1070
|
-
|
1071
|
-
case JSOP_FORLOCAL: return ID2SYM(rb_intern("jsop_forlocal"));
|
1072
|
-
|
1073
|
-
case JSOP_FORCONST: return ID2SYM(rb_intern("jsop_forconst"));
|
1074
|
-
|
1075
|
-
case JSOP_ENDITER: return ID2SYM(rb_intern("jsop_enditer"));
|
1076
|
-
|
1077
|
-
case JSOP_GENERATOR: return ID2SYM(rb_intern("jsop_generator"));
|
1078
|
-
|
1079
|
-
case JSOP_YIELD: return ID2SYM(rb_intern("jsop_yield"));
|
1080
|
-
|
1081
|
-
case JSOP_ARRAYPUSH: return ID2SYM(rb_intern("jsop_arraypush"));
|
1082
|
-
|
1083
|
-
case JSOP_FOREACHKEYVAL: return ID2SYM(rb_intern("jsop_foreachkeyval"));
|
1084
|
-
|
1085
|
-
case JSOP_ENUMCONSTELEM: return ID2SYM(rb_intern("jsop_enumconstelem"));
|
1086
|
-
|
1087
|
-
case JSOP_LEAVEBLOCKEXPR: return ID2SYM(rb_intern("jsop_leaveblockexpr"));
|
1088
|
-
|
1089
|
-
case JSOP_GETTHISPROP: return ID2SYM(rb_intern("jsop_getthisprop"));
|
1090
|
-
|
1091
|
-
case JSOP_GETARGPROP: return ID2SYM(rb_intern("jsop_getargprop"));
|
1092
|
-
|
1093
|
-
case JSOP_GETVARPROP: return ID2SYM(rb_intern("jsop_getvarprop"));
|
1094
|
-
|
1095
|
-
case JSOP_GETLOCALPROP: return ID2SYM(rb_intern("jsop_getlocalprop"));
|
1096
|
-
|
1097
|
-
case JSOP_INDEXBASE1: return ID2SYM(rb_intern("jsop_indexbase1"));
|
1098
|
-
|
1099
|
-
case JSOP_INDEXBASE2: return ID2SYM(rb_intern("jsop_indexbase2"));
|
1100
|
-
|
1101
|
-
case JSOP_INDEXBASE3: return ID2SYM(rb_intern("jsop_indexbase3"));
|
1102
|
-
|
1103
|
-
case JSOP_CALLGVAR: return ID2SYM(rb_intern("jsop_callgvar"));
|
1104
|
-
|
1105
|
-
case JSOP_CALLVAR: return ID2SYM(rb_intern("jsop_callvar"));
|
1106
|
-
|
1107
|
-
case JSOP_CALLARG: return ID2SYM(rb_intern("jsop_callarg"));
|
1108
|
-
|
1109
|
-
case JSOP_CALLLOCAL: return ID2SYM(rb_intern("jsop_calllocal"));
|
1110
|
-
|
1111
|
-
case JSOP_INT8: return ID2SYM(rb_intern("jsop_int8"));
|
1112
|
-
|
1113
|
-
case JSOP_INT32: return ID2SYM(rb_intern("jsop_int32"));
|
1114
|
-
|
1115
|
-
case JSOP_LENGTH: return ID2SYM(rb_intern("jsop_length"));
|
1116
|
-
|
1117
|
-
}
|
1118
|
-
return UINT2NUM((unsigned long)(jsop));
|
1119
|
-
}
|
1120
|
-
|
1121
|
-
void init_Johnson_SpiderMonkey_Immutable_Node(VALUE spidermonkey)
|
1122
|
-
{
|
1123
|
-
/* HACK: These comments are *only* to make RDoc happy.
|
1124
|
-
VALUE johnson = rb_define_module("Johnson");
|
1125
|
-
VALUE spidermonkey = rb_define_module_under(johnson, "SpiderMonkey");
|
1126
|
-
*/
|
1127
|
-
|
1128
|
-
/* ImmutableNode class. */
|
1129
|
-
cNode = rb_define_class_under(spidermonkey, "ImmutableNode", rb_cObject);
|
1130
|
-
|
1131
|
-
rb_define_alloc_func(cNode, allocate);
|
1132
|
-
rb_define_singleton_method(cNode, "parse_io", parse_io, -1);
|
1133
|
-
rb_define_method(cNode, "line", line, 0);
|
1134
|
-
rb_define_method(cNode, "index", begin_index, 0);
|
1135
|
-
rb_define_method(cNode, "pn_arity", pn_arity, 0);
|
1136
|
-
rb_define_method(cNode, "pn_type", pn_type, 0);
|
1137
|
-
rb_define_method(cNode, "pn_expr", data_pn_expr, 0);
|
1138
|
-
rb_define_method(cNode, "pn_kid", data_pn_kid, 0);
|
1139
|
-
rb_define_method(cNode, "pn_kid1", data_pn_kid1, 0);
|
1140
|
-
rb_define_method(cNode, "pn_kid2", data_pn_kid2, 0);
|
1141
|
-
rb_define_method(cNode, "pn_kid3", data_pn_kid3, 0);
|
1142
|
-
rb_define_method(cNode, "pn_dval", data_pn_dval, 0);
|
1143
|
-
rb_define_method(cNode, "pn_op", data_pn_op, 0);
|
1144
|
-
rb_define_method(cNode, "pn_left", data_pn_left, 0);
|
1145
|
-
rb_define_method(cNode, "pn_extra", data_pn_extra, 0);
|
1146
|
-
rb_define_method(cNode, "name", name, 0);
|
1147
|
-
rb_define_method(cNode, "regexp", regexp, 0);
|
1148
|
-
rb_define_method(cNode, "function_name", function_name, 0);
|
1149
|
-
rb_define_method(cNode, "function_args", function_args, 0);
|
1150
|
-
rb_define_method(cNode, "function_body", function_body, 0);
|
1151
|
-
rb_define_method(cNode, "pn_right", data_pn_right, 0);
|
1152
|
-
rb_define_method(cNode, "children", children, 0);
|
1153
|
-
}
|