johnson 1.2.0 → 2.0.0.pre0
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 +8 -0
- data/Manifest.txt +762 -48
- data/README.rdoc +2 -1
- data/Rakefile +90 -18
- data/ext/spidermonkey/conversions.c +9 -2
- data/ext/spidermonkey/ruby_land_proxy.c +1 -1
- data/ext/spidermonkey/runtime.h +1 -1
- data/ext/tracemonkey/context.cc +125 -0
- data/ext/tracemonkey/context.h +19 -0
- data/ext/tracemonkey/conversions.cc +365 -0
- data/ext/tracemonkey/conversions.h +32 -0
- data/ext/tracemonkey/debugger.cc +234 -0
- data/ext/tracemonkey/debugger.h +10 -0
- data/ext/tracemonkey/extconf.rb +37 -0
- data/ext/tracemonkey/extensions.cc +37 -0
- data/ext/tracemonkey/extensions.h +12 -0
- data/ext/tracemonkey/global.cc +40 -0
- data/ext/tracemonkey/global.h +11 -0
- data/ext/tracemonkey/idhash.cc +16 -0
- data/ext/tracemonkey/idhash.h +8 -0
- data/ext/tracemonkey/immutable_node.cc +1199 -0
- data/ext/tracemonkey/immutable_node.cc.erb +559 -0
- data/ext/tracemonkey/immutable_node.h +22 -0
- data/ext/tracemonkey/jroot.h +215 -0
- data/ext/tracemonkey/js_land_proxy.cc +620 -0
- data/ext/tracemonkey/js_land_proxy.h +20 -0
- data/ext/tracemonkey/ruby_land_proxy.cc +618 -0
- data/ext/tracemonkey/ruby_land_proxy.h +38 -0
- data/ext/tracemonkey/runtime.cc +454 -0
- data/ext/tracemonkey/runtime.h +27 -0
- data/ext/tracemonkey/split_global.cc +392 -0
- data/ext/tracemonkey/split_global.h +11 -0
- data/ext/tracemonkey/tracemonkey.cc +23 -0
- data/ext/tracemonkey/tracemonkey.h +32 -0
- data/lib/johnson.rb +12 -4
- data/lib/johnson/error.rb +5 -0
- data/lib/johnson/js/prelude.js +16 -1
- data/lib/johnson/parser.rb +2 -1
- data/lib/johnson/runtime.rb +87 -26
- data/lib/johnson/spidermonkey/runtime.rb +7 -16
- data/lib/johnson/tracemonkey.rb +13 -0
- data/lib/johnson/tracemonkey/context.rb +10 -0
- data/lib/johnson/tracemonkey/debugger.rb +67 -0
- data/lib/johnson/tracemonkey/immutable_node.rb +282 -0
- data/lib/johnson/tracemonkey/js_land_proxy.rb +64 -0
- data/lib/johnson/tracemonkey/mutable_tree_visitor.rb +242 -0
- data/lib/johnson/tracemonkey/ruby_land_proxy.rb +17 -0
- data/lib/johnson/tracemonkey/runtime.rb +80 -0
- data/test/{johnson_test.rb → generic/johnson_test.rb} +1 -1
- data/test/{parser_test.rb → generic/parser_test.rb} +1 -1
- data/test/helper.rb +23 -4
- data/test/johnson/{browser_test.rb → generic/browser_test.rb} +1 -1
- data/test/johnson/{conversions → generic/conversions}/array_test.rb +1 -1
- data/test/johnson/{conversions → generic/conversions}/boolean_test.rb +1 -1
- data/test/johnson/{conversions → generic/conversions}/callable_test.rb +1 -1
- data/test/johnson/{conversions → generic/conversions}/file_test.rb +1 -1
- data/test/johnson/generic/conversions/helper.rb +1 -0
- data/test/johnson/{conversions → generic/conversions}/nil_test.rb +1 -1
- data/test/johnson/{conversions → generic/conversions}/number_test.rb +1 -1
- data/test/johnson/{conversions → generic/conversions}/regexp_test.rb +1 -1
- data/test/johnson/{conversions → generic/conversions}/string_test.rb +1 -1
- data/test/johnson/{conversions → generic/conversions}/struct_test.rb +1 -1
- data/test/johnson/{conversions → generic/conversions}/symbol_test.rb +1 -1
- data/test/johnson/{conversions → generic/conversions}/thread_test.rb +1 -1
- data/test/johnson/{custom_conversions_test.rb → generic/custom_conversions_test.rb} +1 -1
- data/test/johnson/generic/default_test.rb +12 -0
- data/test/johnson/{error_test.rb → generic/error_test.rb} +1 -1
- data/test/johnson/{extensions_test.rb → generic/extensions_test.rb} +1 -1
- data/test/johnson/generic/helper.rb +1 -0
- data/test/johnson/{nodes → generic/nodes}/array_literal_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/array_node_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/binary_node_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/bracket_access_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/delete_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/do_while_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/dot_accessor_test.rb +1 -1
- data/test/johnson/generic/nodes/export_test.rb +11 -0
- data/test/johnson/{nodes → generic/nodes}/for_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/function_test.rb +1 -1
- data/test/johnson/generic/nodes/helper.rb +1 -0
- data/test/johnson/{nodes → generic/nodes}/if_test.rb +16 -6
- data/test/johnson/generic/nodes/import_test.rb +15 -0
- data/test/johnson/{nodes → generic/nodes}/label_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/let_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/object_literal_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/return_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/semi_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/switch_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/ternary_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/throw_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/try_node_test.rb +36 -6
- data/test/johnson/{nodes → generic/nodes}/typeof_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/unary_node_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/void_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/while_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/with_test.rb +1 -1
- data/test/johnson/{prelude_test.rb → generic/prelude_test.rb} +1 -1
- data/test/johnson/{runtime_test.rb → generic/runtime_test.rb} +3 -6
- data/test/johnson/generic/version_test.rb +13 -0
- data/test/johnson/{visitors → generic/visitors}/dot_visitor_test.rb +1 -1
- data/test/johnson/{visitors → generic/visitors}/enumerating_visitor_test.rb +1 -1
- data/test/johnson/generic/visitors/helper.rb +1 -0
- data/test/johnson/spidermonkey/js_land_proxy_test.rb +1 -5
- data/test/johnson/spidermonkey/ruby_land_proxy_test.rb +11 -7
- data/test/johnson/tracemonkey/context_test.rb +21 -0
- data/test/johnson/tracemonkey/immutable_node_test.rb +34 -0
- data/test/johnson/tracemonkey/js_land_proxy_test.rb +273 -0
- data/test/johnson/tracemonkey/ruby_land_proxy_test.rb +274 -0
- data/test/johnson/tracemonkey/runtime_test.rb +41 -0
- data/test/johnson/tracemonkey/split_global_test.rb +32 -0
- data/vendor/spidermonkey/js.pkg +2 -0
- data/vendor/tracemonkey/Makefile.in +668 -0
- data/vendor/tracemonkey/Makefile.ref +483 -0
- data/vendor/tracemonkey/README.html +54 -0
- data/vendor/tracemonkey/SpiderMonkey.rsp +11 -0
- data/vendor/tracemonkey/Y.js +19 -0
- data/vendor/tracemonkey/aclocal.m4 +9 -0
- data/vendor/tracemonkey/bench.sh +5 -0
- data/vendor/tracemonkey/build/autoconf/acoutput-fast.pl +202 -0
- data/vendor/tracemonkey/build/autoconf/altoptions.m4 +154 -0
- data/vendor/tracemonkey/build/autoconf/config.guess +1537 -0
- data/vendor/tracemonkey/build/autoconf/config.sub +1595 -0
- data/vendor/tracemonkey/build/autoconf/install-sh +119 -0
- data/vendor/tracemonkey/build/autoconf/make-makefile +315 -0
- data/vendor/tracemonkey/build/autoconf/match-dir.sh +101 -0
- data/vendor/tracemonkey/build/autoconf/moznbytetype.m4 +136 -0
- data/vendor/tracemonkey/build/autoconf/nspr.m4 +82 -0
- data/vendor/tracemonkey/build/autoconf/pkg.m4 +59 -0
- data/vendor/tracemonkey/build/autoconf/update-makefile.sh +118 -0
- data/vendor/tracemonkey/build/cygwin-wrapper +75 -0
- data/vendor/tracemonkey/build/hcc +111 -0
- data/vendor/tracemonkey/build/hcpp +155 -0
- data/vendor/tracemonkey/build/unix/mddepend.pl +165 -0
- data/vendor/tracemonkey/build/unix/uniq.pl +63 -0
- data/vendor/tracemonkey/build/win32/pgomerge.py +40 -0
- data/vendor/tracemonkey/builtins.tbl +91 -0
- data/vendor/tracemonkey/call.js +13 -0
- data/vendor/tracemonkey/config.mk +206 -0
- data/vendor/tracemonkey/config/Makefile.in +106 -0
- data/vendor/tracemonkey/config/Moz/Milestone.pm +232 -0
- data/vendor/tracemonkey/config/autoconf.mk.in +362 -0
- data/vendor/tracemonkey/config/check-sync-dirs.py +103 -0
- data/vendor/tracemonkey/config/check-sync-exceptions +7 -0
- data/vendor/tracemonkey/config/config.mk +881 -0
- data/vendor/tracemonkey/config/fastcwd.pl +66 -0
- data/vendor/tracemonkey/config/gcc_hidden.h +2 -0
- data/vendor/tracemonkey/config/insure.mk +53 -0
- data/vendor/tracemonkey/config/make-system-wrappers.pl +59 -0
- data/vendor/tracemonkey/config/milestone.pl +112 -0
- data/vendor/tracemonkey/config/milestone.txt +13 -0
- data/vendor/tracemonkey/config/mkdepend/Makefile.in +84 -0
- data/vendor/tracemonkey/config/mkdepend/cppsetup.c +233 -0
- data/vendor/tracemonkey/config/mkdepend/def.h +184 -0
- data/vendor/tracemonkey/config/mkdepend/ifparser.c +551 -0
- data/vendor/tracemonkey/config/mkdepend/ifparser.h +83 -0
- data/vendor/tracemonkey/config/mkdepend/imakemdep.h +733 -0
- data/vendor/tracemonkey/config/mkdepend/include.c +337 -0
- data/vendor/tracemonkey/config/mkdepend/main.c +860 -0
- data/vendor/tracemonkey/config/mkdepend/mkdepend.man +382 -0
- data/vendor/tracemonkey/config/mkdepend/parse.c +686 -0
- data/vendor/tracemonkey/config/mkdepend/pr.c +124 -0
- data/vendor/tracemonkey/config/nfspwd.pl +50 -0
- data/vendor/tracemonkey/config/nsinstall.c +481 -0
- data/vendor/tracemonkey/config/nsinstall.py +155 -0
- data/vendor/tracemonkey/config/pathsub.c +247 -0
- data/vendor/tracemonkey/config/pathsub.h +74 -0
- data/vendor/tracemonkey/config/preprocessor.pl +671 -0
- data/vendor/tracemonkey/config/revdepth-nt.pl +48 -0
- data/vendor/tracemonkey/config/revdepth.pl +51 -0
- data/vendor/tracemonkey/config/rules.mk +2310 -0
- data/vendor/tracemonkey/config/static-checking-config.mk +21 -0
- data/vendor/tracemonkey/config/static-checking.js +92 -0
- data/vendor/tracemonkey/config/string-format.js +61 -0
- data/vendor/tracemonkey/config/system-headers +1035 -0
- data/vendor/tracemonkey/config/version.mk +85 -0
- data/vendor/tracemonkey/config/version_win.pl +442 -0
- data/vendor/tracemonkey/configure +14183 -0
- data/vendor/tracemonkey/configure.in +5363 -0
- data/vendor/tracemonkey/correct.sh +23 -0
- data/vendor/tracemonkey/correct/check-3d-morph.js +55 -0
- data/vendor/tracemonkey/correct/check-3d-raytrace.js +445 -0
- data/vendor/tracemonkey/correct/check-access-binary-trees.js +52 -0
- data/vendor/tracemonkey/correct/check-access-fannkuch.js +66 -0
- data/vendor/tracemonkey/correct/check-access-nbody.js +171 -0
- data/vendor/tracemonkey/correct/check-access-nsieve.js +40 -0
- data/vendor/tracemonkey/correct/check-bitops-3bit-bits-in-byte.js +35 -0
- data/vendor/tracemonkey/correct/check-bitops-bits-in-byte.js +24 -0
- data/vendor/tracemonkey/correct/check-bitops-bitwise-and.js +29 -0
- data/vendor/tracemonkey/correct/check-bitops-nsieve-bits.js +40 -0
- data/vendor/tracemonkey/correct/check-controlflow-recursive.js +27 -0
- data/vendor/tracemonkey/correct/check-date-format-tofte.js +302 -0
- data/vendor/tracemonkey/correct/check-date-format-xparb.js +421 -0
- data/vendor/tracemonkey/correct/check-mont.js +119 -0
- data/vendor/tracemonkey/dtoa.c +3335 -0
- data/vendor/tracemonkey/editline/Makefile.in +55 -0
- data/vendor/tracemonkey/editline/Makefile.ref +143 -0
- data/vendor/tracemonkey/editline/README +83 -0
- data/vendor/tracemonkey/editline/editline.3 +175 -0
- data/vendor/tracemonkey/editline/editline.c +1371 -0
- data/vendor/tracemonkey/editline/editline.h +135 -0
- data/vendor/tracemonkey/editline/sysunix.c +182 -0
- data/vendor/tracemonkey/editline/unix.h +82 -0
- data/vendor/tracemonkey/if.js +13 -0
- data/vendor/tracemonkey/imacro_asm.js.in +396 -0
- data/vendor/tracemonkey/imacros.c.out +1034 -0
- data/vendor/tracemonkey/imacros.jsasm +770 -0
- data/vendor/tracemonkey/javascript-trace.d +73 -0
- data/vendor/tracemonkey/jitstats.tbl +55 -0
- data/vendor/tracemonkey/js-config.h.in +82 -0
- data/vendor/tracemonkey/js-config.in +111 -0
- data/vendor/tracemonkey/js.mdp +0 -0
- data/vendor/tracemonkey/js.msg +312 -0
- data/vendor/tracemonkey/js3240.rc +79 -0
- data/vendor/tracemonkey/jsOS240.def +654 -0
- data/vendor/tracemonkey/jsapi.cpp +6005 -0
- data/vendor/tracemonkey/jsapi.h +2727 -0
- data/vendor/tracemonkey/jsarena.cpp +450 -0
- data/vendor/tracemonkey/jsarena.h +318 -0
- data/vendor/tracemonkey/jsarray.cpp +3664 -0
- data/vendor/tracemonkey/jsarray.h +238 -0
- data/vendor/tracemonkey/jsatom.cpp +1244 -0
- data/vendor/tracemonkey/jsatom.h +493 -0
- data/vendor/tracemonkey/jsbit.h +249 -0
- data/vendor/tracemonkey/jsbool.cpp +184 -0
- data/vendor/tracemonkey/jsbool.h +88 -0
- data/vendor/tracemonkey/jsbuiltins.cpp +415 -0
- data/vendor/tracemonkey/jsbuiltins.h +456 -0
- data/vendor/tracemonkey/jsclist.h +139 -0
- data/vendor/tracemonkey/jscntxt.cpp +1816 -0
- data/vendor/tracemonkey/jscntxt.h +1541 -0
- data/vendor/tracemonkey/jscompat.h +57 -0
- data/vendor/tracemonkey/jsconfig.mk +181 -0
- data/vendor/tracemonkey/jscpucfg.cpp +194 -0
- data/vendor/tracemonkey/jscpucfg.h +91 -0
- data/vendor/tracemonkey/jsdate.cpp +2465 -0
- data/vendor/tracemonkey/jsdate.h +129 -0
- data/vendor/tracemonkey/jsdbgapi.cpp +2017 -0
- data/vendor/tracemonkey/jsdbgapi.h +500 -0
- data/vendor/tracemonkey/jsdhash.cpp +876 -0
- data/vendor/tracemonkey/jsdhash.h +588 -0
- data/vendor/tracemonkey/jsdtoa.cpp +572 -0
- data/vendor/tracemonkey/jsdtoa.h +131 -0
- data/vendor/tracemonkey/jsdtracef.c +318 -0
- data/vendor/tracemonkey/jsdtracef.h +81 -0
- data/vendor/tracemonkey/jsemit.cpp +7292 -0
- data/vendor/tracemonkey/jsemit.h +802 -0
- data/vendor/tracemonkey/jsexn.cpp +1337 -0
- data/vendor/tracemonkey/jsexn.h +96 -0
- data/vendor/tracemonkey/jsfile.cpp +2747 -0
- data/vendor/tracemonkey/jsfile.h +56 -0
- data/vendor/tracemonkey/jsfile.msg +90 -0
- data/vendor/tracemonkey/jsfun.cpp +3089 -0
- data/vendor/tracemonkey/jsfun.h +366 -0
- data/vendor/tracemonkey/jsgc.cpp +3816 -0
- data/vendor/tracemonkey/jsgc.h +429 -0
- data/vendor/tracemonkey/jshash.cpp +477 -0
- data/vendor/tracemonkey/jshash.h +151 -0
- data/vendor/tracemonkey/jsify.pl +483 -0
- data/vendor/tracemonkey/jsinterp.cpp +7441 -0
- data/vendor/tracemonkey/jsinterp.h +666 -0
- data/vendor/tracemonkey/jsinvoke.cpp +42 -0
- data/vendor/tracemonkey/jsiter.cpp +1040 -0
- data/vendor/tracemonkey/jsiter.h +140 -0
- data/vendor/tracemonkey/jskeyword.tbl +124 -0
- data/vendor/tracemonkey/jskwgen.cpp +460 -0
- data/vendor/tracemonkey/jslibmath.h +69 -0
- data/vendor/tracemonkey/jslock.cpp +1512 -0
- data/vendor/tracemonkey/jslock.h +325 -0
- data/vendor/tracemonkey/jslocko.asm +60 -0
- data/vendor/tracemonkey/jslog2.cpp +111 -0
- data/vendor/tracemonkey/jslong.h +167 -0
- data/vendor/tracemonkey/jsmath.cpp +806 -0
- data/vendor/tracemonkey/jsmath.h +63 -0
- data/vendor/tracemonkey/jsnum.cpp +1374 -0
- data/vendor/tracemonkey/jsnum.h +280 -0
- data/vendor/tracemonkey/jsobj.cpp +6165 -0
- data/vendor/tracemonkey/jsobj.h +870 -0
- data/vendor/tracemonkey/json.cpp +1338 -0
- data/vendor/tracemonkey/json.h +108 -0
- data/vendor/tracemonkey/jsopcode.cpp +5484 -0
- data/vendor/tracemonkey/jsopcode.h +434 -0
- data/vendor/tracemonkey/jsopcode.tbl +591 -0
- data/vendor/tracemonkey/jsoplengen.cpp +121 -0
- data/vendor/tracemonkey/jsotypes.h +202 -0
- data/vendor/tracemonkey/jsparse.cpp +9257 -0
- data/vendor/tracemonkey/jsparse.h +900 -0
- data/vendor/tracemonkey/jsprf.cpp +1262 -0
- data/vendor/tracemonkey/jsprf.h +150 -0
- data/vendor/tracemonkey/jsproto.tbl +117 -0
- data/vendor/tracemonkey/jsprvtd.h +366 -0
- data/vendor/tracemonkey/jspubtd.h +585 -0
- data/vendor/tracemonkey/jsregexp.cpp +5051 -0
- data/vendor/tracemonkey/jsregexp.h +199 -0
- data/vendor/tracemonkey/jsreops.tbl +145 -0
- data/vendor/tracemonkey/jsscan.cpp +2040 -0
- data/vendor/tracemonkey/jsscan.h +467 -0
- data/vendor/tracemonkey/jsscope.cpp +1966 -0
- data/vendor/tracemonkey/jsscope.h +487 -0
- data/vendor/tracemonkey/jsscript.cpp +1932 -0
- data/vendor/tracemonkey/jsscript.h +345 -0
- data/vendor/tracemonkey/jsshell.msg +54 -0
- data/vendor/tracemonkey/jsstack.js +167 -0
- data/vendor/tracemonkey/jsstaticcheck.h +69 -0
- data/vendor/tracemonkey/jsstddef.h +87 -0
- data/vendor/tracemonkey/jsstdint.h +96 -0
- data/vendor/tracemonkey/jsstr.cpp +5277 -0
- data/vendor/tracemonkey/jsstr.h +702 -0
- data/vendor/tracemonkey/jstracer.cpp +10991 -0
- data/vendor/tracemonkey/jstracer.h +794 -0
- data/vendor/tracemonkey/jstypes.h +481 -0
- data/vendor/tracemonkey/jsutil.cpp +361 -0
- data/vendor/tracemonkey/jsutil.h +178 -0
- data/vendor/tracemonkey/jsversion.h +243 -0
- data/vendor/tracemonkey/jswince.asm +44 -0
- data/vendor/tracemonkey/jsxdrapi.cpp +800 -0
- data/vendor/tracemonkey/jsxdrapi.h +220 -0
- data/vendor/tracemonkey/jsxml.cpp +8327 -0
- data/vendor/tracemonkey/jsxml.h +305 -0
- data/vendor/tracemonkey/liveconnect/LiveConnect.dsp +157 -0
- data/vendor/tracemonkey/liveconnect/LiveConnectShell.dsp +120 -0
- data/vendor/tracemonkey/liveconnect/LiveConnectShell.dsw +44 -0
- data/vendor/tracemonkey/liveconnect/Makefile.in +105 -0
- data/vendor/tracemonkey/liveconnect/Makefile.ref +169 -0
- data/vendor/tracemonkey/liveconnect/README.html +712 -0
- data/vendor/tracemonkey/liveconnect/_jni/netscape_javascript_JSException.h +14 -0
- data/vendor/tracemonkey/liveconnect/_jni/netscape_javascript_JSObject.h +155 -0
- data/vendor/tracemonkey/liveconnect/classes/Makefile.in +89 -0
- data/vendor/tracemonkey/liveconnect/classes/Makefile.ref +57 -0
- data/vendor/tracemonkey/liveconnect/classes/netscape/Makefile.ref +47 -0
- data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/JSException.java +140 -0
- data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/JSObject.java +183 -0
- data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/JSProxy.java +58 -0
- data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/JSRunnable.java +70 -0
- data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/JSUtil.java +59 -0
- data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/Makefile.ref +53 -0
- data/vendor/tracemonkey/liveconnect/config/AIX4.1.mk +45 -0
- data/vendor/tracemonkey/liveconnect/config/AIX4.2.mk +45 -0
- data/vendor/tracemonkey/liveconnect/config/AIX4.3.mk +50 -0
- data/vendor/tracemonkey/liveconnect/config/HP-UXB.10.10.mk +43 -0
- data/vendor/tracemonkey/liveconnect/config/HP-UXB.10.20.mk +43 -0
- data/vendor/tracemonkey/liveconnect/config/HP-UXB.11.00.mk +43 -0
- data/vendor/tracemonkey/liveconnect/config/IRIX6.2.mk +43 -0
- data/vendor/tracemonkey/liveconnect/config/IRIX6.3.mk +43 -0
- data/vendor/tracemonkey/liveconnect/config/IRIX6.5.mk +43 -0
- data/vendor/tracemonkey/liveconnect/config/Linux_All.mk +73 -0
- data/vendor/tracemonkey/liveconnect/config/OSF1V4.0.mk +65 -0
- data/vendor/tracemonkey/liveconnect/config/OSF1V5.0.mk +62 -0
- data/vendor/tracemonkey/liveconnect/config/SunOS5.5.1.mk +55 -0
- data/vendor/tracemonkey/liveconnect/config/SunOS5.6.mk +39 -0
- data/vendor/tracemonkey/liveconnect/config/SunOS5.7.mk +39 -0
- data/vendor/tracemonkey/liveconnect/config/SunOS5.8.mk +39 -0
- data/vendor/tracemonkey/liveconnect/config/WINNT4.0.mk +53 -0
- data/vendor/tracemonkey/liveconnect/jsj.c +886 -0
- data/vendor/tracemonkey/liveconnect/jsj.msg +98 -0
- data/vendor/tracemonkey/liveconnect/jsj_JSObject.c +1377 -0
- data/vendor/tracemonkey/liveconnect/jsj_JavaArray.c +474 -0
- data/vendor/tracemonkey/liveconnect/jsj_JavaClass.c +737 -0
- data/vendor/tracemonkey/liveconnect/jsj_JavaMember.c +191 -0
- data/vendor/tracemonkey/liveconnect/jsj_JavaObject.c +1079 -0
- data/vendor/tracemonkey/liveconnect/jsj_JavaPackage.c +569 -0
- data/vendor/tracemonkey/liveconnect/jsj_array.c +207 -0
- data/vendor/tracemonkey/liveconnect/jsj_class.c +770 -0
- data/vendor/tracemonkey/liveconnect/jsj_convert.c +902 -0
- data/vendor/tracemonkey/liveconnect/jsj_field.c +421 -0
- data/vendor/tracemonkey/liveconnect/jsj_hash.c +488 -0
- data/vendor/tracemonkey/liveconnect/jsj_hash.h +161 -0
- data/vendor/tracemonkey/liveconnect/jsj_method.c +1825 -0
- data/vendor/tracemonkey/liveconnect/jsj_nodl.c +1 -0
- data/vendor/tracemonkey/liveconnect/jsj_private.h +677 -0
- data/vendor/tracemonkey/liveconnect/jsj_simpleapi.c +219 -0
- data/vendor/tracemonkey/liveconnect/jsj_utils.c +513 -0
- data/vendor/tracemonkey/liveconnect/jsjava.h +316 -0
- data/vendor/tracemonkey/liveconnect/netscape_javascript_JSObject.h +155 -0
- data/vendor/tracemonkey/liveconnect/nsCLiveconnect.cpp +785 -0
- data/vendor/tracemonkey/liveconnect/nsCLiveconnect.h +197 -0
- data/vendor/tracemonkey/liveconnect/nsCLiveconnectFactory.cpp +118 -0
- data/vendor/tracemonkey/liveconnect/nsCLiveconnectFactory.h +76 -0
- data/vendor/tracemonkey/liveconnect/nsILiveconnect.h +197 -0
- data/vendor/tracemonkey/liveconnect/nsISecureLiveconnect.h +94 -0
- data/vendor/tracemonkey/liveconnect/nsISecurityContext.h +136 -0
- data/vendor/tracemonkey/lock_SunOS.s +119 -0
- data/vendor/tracemonkey/mandelbrot-results.js +3 -0
- data/vendor/tracemonkey/math-partial-sums.js +32 -0
- data/vendor/tracemonkey/math-trace-tests.js +507 -0
- data/vendor/tracemonkey/md5.js +289 -0
- data/vendor/tracemonkey/nanojit/Assembler.cpp +1984 -0
- data/vendor/tracemonkey/nanojit/Assembler.h +375 -0
- data/vendor/tracemonkey/nanojit/Fragmento.cpp +651 -0
- data/vendor/tracemonkey/nanojit/Fragmento.h +237 -0
- data/vendor/tracemonkey/nanojit/LIR.cpp +2314 -0
- data/vendor/tracemonkey/nanojit/LIR.h +879 -0
- data/vendor/tracemonkey/nanojit/LIRopcode.tbl +252 -0
- data/vendor/tracemonkey/nanojit/Native.h +127 -0
- data/vendor/tracemonkey/nanojit/NativeARM.cpp +1742 -0
- data/vendor/tracemonkey/nanojit/NativeARM.h +844 -0
- data/vendor/tracemonkey/nanojit/NativeSparc.cpp +1130 -0
- data/vendor/tracemonkey/nanojit/NativeSparc.h +948 -0
- data/vendor/tracemonkey/nanojit/NativeThumb.cpp +1322 -0
- data/vendor/tracemonkey/nanojit/NativeThumb.h +525 -0
- data/vendor/tracemonkey/nanojit/Nativei386.cpp +1748 -0
- data/vendor/tracemonkey/nanojit/Nativei386.h +857 -0
- data/vendor/tracemonkey/nanojit/RegAlloc.cpp +183 -0
- data/vendor/tracemonkey/nanojit/RegAlloc.h +95 -0
- data/vendor/tracemonkey/nanojit/TraceTreeDrawer.cpp +306 -0
- data/vendor/tracemonkey/nanojit/TraceTreeDrawer.h +88 -0
- data/vendor/tracemonkey/nanojit/avmplus.cpp +56 -0
- data/vendor/tracemonkey/nanojit/avmplus.h +1016 -0
- data/vendor/tracemonkey/nanojit/nanojit.h +253 -0
- data/vendor/tracemonkey/perfect.js +39 -0
- data/vendor/tracemonkey/plify_jsdhash.sed +35 -0
- data/vendor/tracemonkey/prmjtime.cpp +869 -0
- data/vendor/tracemonkey/prmjtime.h +103 -0
- data/vendor/tracemonkey/ref-config/AIX4.1.mk +65 -0
- data/vendor/tracemonkey/ref-config/AIX4.2.mk +64 -0
- data/vendor/tracemonkey/ref-config/AIX4.3.mk +65 -0
- data/vendor/tracemonkey/ref-config/Darwin.mk +85 -0
- data/vendor/tracemonkey/ref-config/Darwin1.3.mk +81 -0
- data/vendor/tracemonkey/ref-config/Darwin1.4.mk +41 -0
- data/vendor/tracemonkey/ref-config/Darwin5.2.mk +81 -0
- data/vendor/tracemonkey/ref-config/Darwin5.3.mk +81 -0
- data/vendor/tracemonkey/ref-config/Darwin64.mk +72 -0
- data/vendor/tracemonkey/ref-config/HP-UXB.10.10.mk +77 -0
- data/vendor/tracemonkey/ref-config/HP-UXB.10.20.mk +77 -0
- data/vendor/tracemonkey/ref-config/HP-UXB.11.00.mk +80 -0
- data/vendor/tracemonkey/ref-config/IRIX.mk +87 -0
- data/vendor/tracemonkey/ref-config/IRIX5.3.mk +44 -0
- data/vendor/tracemonkey/ref-config/IRIX6.1.mk +44 -0
- data/vendor/tracemonkey/ref-config/IRIX6.2.mk +44 -0
- data/vendor/tracemonkey/ref-config/IRIX6.3.mk +44 -0
- data/vendor/tracemonkey/ref-config/IRIX6.5.mk +44 -0
- data/vendor/tracemonkey/ref-config/Linux_All.mk +105 -0
- data/vendor/tracemonkey/ref-config/Mac_OS10.0.mk +82 -0
- data/vendor/tracemonkey/ref-config/OSF1V4.0.mk +72 -0
- data/vendor/tracemonkey/ref-config/OSF1V5.0.mk +69 -0
- data/vendor/tracemonkey/ref-config/SunOS4.1.4.mk +101 -0
- data/vendor/tracemonkey/ref-config/SunOS5.10.mk +50 -0
- data/vendor/tracemonkey/ref-config/SunOS5.3.mk +91 -0
- data/vendor/tracemonkey/ref-config/SunOS5.4.mk +92 -0
- data/vendor/tracemonkey/ref-config/SunOS5.5.1.mk +44 -0
- data/vendor/tracemonkey/ref-config/SunOS5.5.mk +87 -0
- data/vendor/tracemonkey/ref-config/SunOS5.6.mk +89 -0
- data/vendor/tracemonkey/ref-config/SunOS5.7.mk +44 -0
- data/vendor/tracemonkey/ref-config/SunOS5.8.mk +44 -0
- data/vendor/tracemonkey/ref-config/SunOS5.9.mk +44 -0
- data/vendor/tracemonkey/ref-config/WINNT4.0.mk +118 -0
- data/vendor/tracemonkey/ref-config/WINNT5.0.mk +118 -0
- data/vendor/tracemonkey/ref-config/WINNT5.1.mk +118 -0
- data/vendor/tracemonkey/ref-config/WINNT5.2.mk +118 -0
- data/vendor/tracemonkey/ref-config/WINNT6.0.mk +118 -0
- data/vendor/tracemonkey/ref-config/dgux.mk +64 -0
- data/vendor/tracemonkey/resource.h +15 -0
- data/vendor/tracemonkey/rules.mk +206 -0
- data/vendor/tracemonkey/shell/Makefile.in +72 -0
- data/vendor/tracemonkey/shell/js.cpp +4719 -0
- data/vendor/tracemonkey/t/3d-cube.js +337 -0
- data/vendor/tracemonkey/t/3d-morph.js +54 -0
- data/vendor/tracemonkey/t/3d-raytrace.js +441 -0
- data/vendor/tracemonkey/t/access-binary-trees.js +50 -0
- data/vendor/tracemonkey/t/access-fannkuch.js +66 -0
- data/vendor/tracemonkey/t/access-nbody.js +169 -0
- data/vendor/tracemonkey/t/access-nsieve.js +38 -0
- data/vendor/tracemonkey/t/bitops-3bit-bits-in-byte.js +32 -0
- data/vendor/tracemonkey/t/bitops-bits-in-byte.js +21 -0
- data/vendor/tracemonkey/t/bitops-bitwise-and.js +28 -0
- data/vendor/tracemonkey/t/bitops-nsieve-bits.js +32 -0
- data/vendor/tracemonkey/t/controlflow-recursive.js +25 -0
- data/vendor/tracemonkey/t/crypto-aes.js +422 -0
- data/vendor/tracemonkey/t/crypto-md5.js +286 -0
- data/vendor/tracemonkey/t/crypto-sha1.js +224 -0
- data/vendor/tracemonkey/t/date-format-tofte.js +299 -0
- data/vendor/tracemonkey/t/date-format-xparb.js +417 -0
- data/vendor/tracemonkey/t/math-cordic.js +95 -0
- data/vendor/tracemonkey/t/math-partial-sums.js +33 -0
- data/vendor/tracemonkey/t/math-spectral-norm.js +51 -0
- data/vendor/tracemonkey/t/regexp-dna.js +1712 -0
- data/vendor/tracemonkey/t/string-base64.js +135 -0
- data/vendor/tracemonkey/t/string-fasta.js +85 -0
- data/vendor/tracemonkey/t/string-tagcloud.js +265 -0
- data/vendor/tracemonkey/t/string-unpack-code.js +68 -0
- data/vendor/tracemonkey/t/string-validate-input.js +89 -0
- data/vendor/tracemonkey/time.sh +13 -0
- data/vendor/tracemonkey/trace-test.js +5564 -0
- data/vendor/tracemonkey/v8/base.js +187 -0
- data/vendor/tracemonkey/v8/crypto.js +1689 -0
- data/vendor/tracemonkey/v8/deltablue.js +880 -0
- data/vendor/tracemonkey/v8/earley-boyer.js +4682 -0
- data/vendor/tracemonkey/v8/raytrace.js +3418 -0
- data/vendor/tracemonkey/v8/richards.js +539 -0
- data/vendor/tracemonkey/v8/run-crypto.js +44 -0
- data/vendor/tracemonkey/v8/run-deltablue.js +44 -0
- data/vendor/tracemonkey/v8/run-earley-boyer.js +44 -0
- data/vendor/tracemonkey/v8/run-raytrace.js +44 -0
- data/vendor/tracemonkey/v8/run-richards.js +44 -0
- data/vendor/tracemonkey/v8/run.js +49 -0
- data/vendor/tracemonkey/vprof/readme.txt +93 -0
- data/vendor/tracemonkey/vprof/vprof.cpp +360 -0
- data/vendor/tracemonkey/vprof/vprof.h +245 -0
- data/vendor/tracemonkey/xpconnect/Makefile.in +67 -0
- data/vendor/tracemonkey/xpconnect/crashtests/117307-1.html +20 -0
- data/vendor/tracemonkey/xpconnect/crashtests/193710.html +11 -0
- data/vendor/tracemonkey/xpconnect/crashtests/290162-1.html +5 -0
- data/vendor/tracemonkey/xpconnect/crashtests/326615-1.html +16 -0
- data/vendor/tracemonkey/xpconnect/crashtests/328553-1.html +13 -0
- data/vendor/tracemonkey/xpconnect/crashtests/346258-1.html +12 -0
- data/vendor/tracemonkey/xpconnect/crashtests/346512-1-frame1.xhtml +16 -0
- data/vendor/tracemonkey/xpconnect/crashtests/346512-1-frame2.xhtml +15 -0
- data/vendor/tracemonkey/xpconnect/crashtests/346512-1.xhtml +30 -0
- data/vendor/tracemonkey/xpconnect/crashtests/382133-1.html +3 -0
- data/vendor/tracemonkey/xpconnect/crashtests/386680-1.html +22 -0
- data/vendor/tracemonkey/xpconnect/crashtests/394810-1.html +4 -0
- data/vendor/tracemonkey/xpconnect/crashtests/400349-1.html +20 -0
- data/vendor/tracemonkey/xpconnect/crashtests/403356-1.html +13 -0
- data/vendor/tracemonkey/xpconnect/crashtests/418139-1.svg +22 -0
- data/vendor/tracemonkey/xpconnect/crashtests/420513-1.html +11 -0
- data/vendor/tracemonkey/xpconnect/crashtests/453935-1.html +37 -0
- data/vendor/tracemonkey/xpconnect/crashtests/462926.html +12 -0
- data/vendor/tracemonkey/xpconnect/crashtests/468552-1.html +18 -0
- data/vendor/tracemonkey/xpconnect/crashtests/471366-1.html +12 -0
- data/vendor/tracemonkey/xpconnect/crashtests/475185-1.html +13 -0
- data/vendor/tracemonkey/xpconnect/crashtests/475291-1.html +14 -0
- data/vendor/tracemonkey/xpconnect/crashtests/503286-1.html +23 -0
- data/vendor/tracemonkey/xpconnect/crashtests/crashtests.list +21 -0
- data/vendor/tracemonkey/xpconnect/idl/Makefile.in +78 -0
- data/vendor/tracemonkey/xpconnect/idl/XPCIDispatch.idl +51 -0
- data/vendor/tracemonkey/xpconnect/idl/mozIJSSubScriptLoader.idl +64 -0
- data/vendor/tracemonkey/xpconnect/idl/nsIActiveXSecurityPolicy.idl +67 -0
- data/vendor/tracemonkey/xpconnect/idl/nsIDispatchSupport.idl +119 -0
- data/vendor/tracemonkey/xpconnect/idl/nsIJSContextStack.idl +85 -0
- data/vendor/tracemonkey/xpconnect/idl/nsIJSRuntimeService.idl +51 -0
- data/vendor/tracemonkey/xpconnect/idl/nsIScriptError.idl +102 -0
- data/vendor/tracemonkey/xpconnect/idl/nsIScriptableInterfaces.idl +67 -0
- data/vendor/tracemonkey/xpconnect/idl/nsIXPCScriptNotify.idl +66 -0
- data/vendor/tracemonkey/xpconnect/idl/nsIXPCScriptable.idl +183 -0
- data/vendor/tracemonkey/xpconnect/idl/nsIXPCSecurityManager.idl +114 -0
- data/vendor/tracemonkey/xpconnect/idl/nsIXPConnect.idl +819 -0
- data/vendor/tracemonkey/xpconnect/idl/xpcIJSModuleLoader.idl +95 -0
- data/vendor/tracemonkey/xpconnect/idl/xpcIJSWeakReference.idl +49 -0
- data/vendor/tracemonkey/xpconnect/idl/xpccomponents.idl +254 -0
- data/vendor/tracemonkey/xpconnect/idl/xpcexception.idl +66 -0
- data/vendor/tracemonkey/xpconnect/idl/xpcjsid.idl +83 -0
- data/vendor/tracemonkey/xpconnect/loader/ISO8601DateUtils.jsm +176 -0
- data/vendor/tracemonkey/xpconnect/loader/Makefile.in +63 -0
- data/vendor/tracemonkey/xpconnect/loader/XPCOMUtils.jsm +267 -0
- data/vendor/tracemonkey/xpconnect/loader/mozJSComponentLoader.cpp +1717 -0
- data/vendor/tracemonkey/xpconnect/loader/mozJSComponentLoader.h +172 -0
- data/vendor/tracemonkey/xpconnect/loader/mozJSLoaderConstructors.h +101 -0
- data/vendor/tracemonkey/xpconnect/loader/mozJSSubScriptLoader.cpp +360 -0
- data/vendor/tracemonkey/xpconnect/loader/mozJSSubScriptLoader.h +66 -0
- data/vendor/tracemonkey/xpconnect/public/Makefile.in +54 -0
- data/vendor/tracemonkey/xpconnect/public/nsAXPCNativeCallContext.h +89 -0
- data/vendor/tracemonkey/xpconnect/public/nsAutoJSValHolder.h +168 -0
- data/vendor/tracemonkey/xpconnect/public/xpc_map_end.h +327 -0
- data/vendor/tracemonkey/xpconnect/sample/Makefile.in +71 -0
- data/vendor/tracemonkey/xpconnect/sample/README +39 -0
- data/vendor/tracemonkey/xpconnect/sample/xpcsample1.cpp +337 -0
- data/vendor/tracemonkey/xpconnect/sample/xpcsample1.idl +82 -0
- data/vendor/tracemonkey/xpconnect/sample/xpcsample1.js +21 -0
- data/vendor/tracemonkey/xpconnect/shell/Makefile.in +106 -0
- data/vendor/tracemonkey/xpconnect/shell/jsshell.msg +50 -0
- data/vendor/tracemonkey/xpconnect/shell/xpcshell.cpp +1817 -0
- data/vendor/tracemonkey/xpconnect/shell/xpcshellMacUtils.h +43 -0
- data/vendor/tracemonkey/xpconnect/shell/xpcshellMacUtils.mm +54 -0
- data/vendor/tracemonkey/xpconnect/src/Makefile.in +228 -0
- data/vendor/tracemonkey/xpconnect/src/README +3 -0
- data/vendor/tracemonkey/xpconnect/src/XPCCrossOriginWrapper.cpp +1186 -0
- data/vendor/tracemonkey/xpconnect/src/XPCDispConvert.cpp +593 -0
- data/vendor/tracemonkey/xpconnect/src/XPCDispInlines.h +667 -0
- data/vendor/tracemonkey/xpconnect/src/XPCDispInterface.cpp +383 -0
- data/vendor/tracemonkey/xpconnect/src/XPCDispObject.cpp +516 -0
- data/vendor/tracemonkey/xpconnect/src/XPCDispParamPropJSClass.cpp +223 -0
- data/vendor/tracemonkey/xpconnect/src/XPCDispParams.cpp +103 -0
- data/vendor/tracemonkey/xpconnect/src/XPCDispPrivate.h +1401 -0
- data/vendor/tracemonkey/xpconnect/src/XPCDispTearOff.cpp +547 -0
- data/vendor/tracemonkey/xpconnect/src/XPCDispTypeInfo.cpp +471 -0
- data/vendor/tracemonkey/xpconnect/src/XPCIDispatchClassInfo.cpp +139 -0
- data/vendor/tracemonkey/xpconnect/src/XPCIDispatchExtension.cpp +362 -0
- data/vendor/tracemonkey/xpconnect/src/XPCNativeWrapper.cpp +1350 -0
- data/vendor/tracemonkey/xpconnect/src/XPCNativeWrapper.h +88 -0
- data/vendor/tracemonkey/xpconnect/src/XPCSafeJSObjectWrapper.cpp +1148 -0
- data/vendor/tracemonkey/xpconnect/src/XPCSystemOnlyWrapper.cpp +718 -0
- data/vendor/tracemonkey/xpconnect/src/XPCWrapper.cpp +850 -0
- data/vendor/tracemonkey/xpconnect/src/XPCWrapper.h +394 -0
- data/vendor/tracemonkey/xpconnect/src/dom_quickstubs.qsconf +568 -0
- data/vendor/tracemonkey/xpconnect/src/nsDispatchSupport.cpp +348 -0
- data/vendor/tracemonkey/xpconnect/src/nsScriptError.cpp +201 -0
- data/vendor/tracemonkey/xpconnect/src/nsXPConnect.cpp +2609 -0
- data/vendor/tracemonkey/xpconnect/src/qsgen.py +1487 -0
- data/vendor/tracemonkey/xpconnect/src/xpc.msg +217 -0
- data/vendor/tracemonkey/xpconnect/src/xpcJSWeakReference.cpp +148 -0
- data/vendor/tracemonkey/xpconnect/src/xpcJSWeakReference.h +56 -0
- data/vendor/tracemonkey/xpconnect/src/xpccallcontext.cpp +579 -0
- data/vendor/tracemonkey/xpconnect/src/xpccomponents.cpp +4144 -0
- data/vendor/tracemonkey/xpconnect/src/xpccontext.cpp +115 -0
- data/vendor/tracemonkey/xpconnect/src/xpcconvert.cpp +2298 -0
- data/vendor/tracemonkey/xpconnect/src/xpcdebug.cpp +481 -0
- data/vendor/tracemonkey/xpconnect/src/xpcexception.cpp +502 -0
- data/vendor/tracemonkey/xpconnect/src/xpcforwards.h +114 -0
- data/vendor/tracemonkey/xpconnect/src/xpcinlines.h +772 -0
- data/vendor/tracemonkey/xpconnect/src/xpcjsid.cpp +1025 -0
- data/vendor/tracemonkey/xpconnect/src/xpcjsruntime.cpp +1342 -0
- data/vendor/tracemonkey/xpconnect/src/xpclog.cpp +128 -0
- data/vendor/tracemonkey/xpconnect/src/xpclog.h +101 -0
- data/vendor/tracemonkey/xpconnect/src/xpcmaps.cpp +761 -0
- data/vendor/tracemonkey/xpconnect/src/xpcmaps.h +713 -0
- data/vendor/tracemonkey/xpconnect/src/xpcmodule.cpp +136 -0
- data/vendor/tracemonkey/xpconnect/src/xpcprivate.h +4138 -0
- data/vendor/tracemonkey/xpconnect/src/xpcquickstubs.cpp +1128 -0
- data/vendor/tracemonkey/xpconnect/src/xpcquickstubs.h +480 -0
- data/vendor/tracemonkey/xpconnect/src/xpcruntimesvc.cpp +179 -0
- data/vendor/tracemonkey/xpconnect/src/xpcstack.cpp +342 -0
- data/vendor/tracemonkey/xpconnect/src/xpcstring.cpp +139 -0
- data/vendor/tracemonkey/xpconnect/src/xpcthreadcontext.cpp +599 -0
- data/vendor/tracemonkey/xpconnect/src/xpcthrower.cpp +399 -0
- data/vendor/tracemonkey/xpconnect/src/xpcvariant.cpp +850 -0
- data/vendor/tracemonkey/xpconnect/src/xpcwrappedjs.cpp +670 -0
- data/vendor/tracemonkey/xpconnect/src/xpcwrappedjsclass.cpp +2015 -0
- data/vendor/tracemonkey/xpconnect/src/xpcwrappednative.cpp +3482 -0
- data/vendor/tracemonkey/xpconnect/src/xpcwrappednativeinfo.cpp +945 -0
- data/vendor/tracemonkey/xpconnect/src/xpcwrappednativejsops.cpp +2003 -0
- data/vendor/tracemonkey/xpconnect/src/xpcwrappednativeproto.cpp +302 -0
- data/vendor/tracemonkey/xpconnect/src/xpcwrappednativescope.cpp +991 -0
- data/vendor/tracemonkey/xpconnect/tests/Makefile.in +75 -0
- data/vendor/tracemonkey/xpconnect/tests/TestXPC.cpp +785 -0
- data/vendor/tracemonkey/xpconnect/tests/chrome/Makefile.in +51 -0
- data/vendor/tracemonkey/xpconnect/tests/chrome/test_bug500931.xul +43 -0
- data/vendor/tracemonkey/xpconnect/tests/components/Makefile.in +85 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_array.cpp +388 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_attributes.cpp +305 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_calljs.cpp +135 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_child.cpp +225 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_const.cpp +76 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_domstring.cpp +118 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_echo.cpp +616 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_in.cpp +204 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_inout.cpp +171 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_module.cpp +77 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_multiple.cpp +554 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_noisy.cpp +154 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_out.cpp +335 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_overloaded.cpp +250 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_private.h +192 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_string.cpp +185 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_variant.cpp +355 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/StdAfx.cpp +12 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/StdAfx.h +28 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCDispUtilities.h +28 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.cpp +86 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.def +9 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.dsp +318 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.dsw +29 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.idl +454 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.rc +145 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispSimple.cpp +44 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispSimple.h +56 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispSimple.rgs +23 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestArrays.cpp +221 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestArrays.h +53 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestArrays.rgs +23 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestMethods.cpp +699 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestMethods.h +138 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestMethods.rgs +23 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestNoIDispatch.cpp +23 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestNoIDispatch.h +41 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestNoIDispatch.rgs +23 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestProperties.cpp +256 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestProperties.h +88 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestProperties.rgs +23 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOff.cpp +23 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOff.h +43 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOff.rgs +23 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOn.cpp +29 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOn.h +45 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOn.rgs +23 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestWrappedJS.cpp +177 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestWrappedJS.h +50 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestWrappedJS.rgs +23 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/resource.h +36 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/Arrays/XPCIDispatchArrayTests.js +54 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/Attributes/XPCIDispatchAttributeTests.js +150 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/General/XPCIDispatchInstantiations.js +122 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/General/XPCStress.js +58 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/Methods/XPCIDispatchMethodTests.js +376 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/shell.js +377 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedJS/General/XPCIDispatchTestWrappedJS.js +76 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedJS/shell.js +377 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/exectests.cmd +1 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/jsDriver.pl +1288 -0
- data/vendor/tracemonkey/xpconnect/tests/idl/Makefile.in +61 -0
- data/vendor/tracemonkey/xpconnect/tests/idl/xpctest.idl +312 -0
- data/vendor/tracemonkey/xpconnect/tests/idl/xpctest2.idl +51 -0
- data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_attributes.idl +67 -0
- data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_calljs.idl +59 -0
- data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_const.idl +61 -0
- data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_domstring.idl +59 -0
- data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_in.idl +88 -0
- data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_inout.idl +86 -0
- data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_multiple.idl +77 -0
- data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_out.idl +142 -0
- data/vendor/tracemonkey/xpconnect/tests/js/checkid.js +82 -0
- data/vendor/tracemonkey/xpconnect/tests/js/evaluate.js +311 -0
- data/vendor/tracemonkey/xpconnect/tests/js/exceptions-2.js +153 -0
- data/vendor/tracemonkey/xpconnect/tests/js/exceptions-3.js +194 -0
- data/vendor/tracemonkey/xpconnect/tests/js/exceptions-4.js +297 -0
- data/vendor/tracemonkey/xpconnect/tests/js/exceptions-5.js +343 -0
- data/vendor/tracemonkey/xpconnect/tests/js/exceptions.js +230 -0
- data/vendor/tracemonkey/xpconnect/tests/js/javascript.js +96 -0
- data/vendor/tracemonkey/xpconnect/tests/js/multiple-2.js +151 -0
- data/vendor/tracemonkey/xpconnect/tests/js/multiple-3.js +148 -0
- data/vendor/tracemonkey/xpconnect/tests/js/multiple-4.js +152 -0
- data/vendor/tracemonkey/xpconnect/tests/js/multiple.js +137 -0
- data/vendor/tracemonkey/xpconnect/tests/js/notscriptable.js +104 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/simpletest.js +36 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/speed.js +60 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/testxpc.js +464 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/threads.js +74 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/try.js +27 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_array.js +308 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_callcontext.js +68 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_echo.js +636 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_enum_and_sort.js +28 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_enum_constants.js +15 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_enum_create.js +200 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_exceptions.js +167 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_ids.js +135 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_observer.js +36 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_overloaded.js +14 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_primitives.js +141 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_propertybag.js +36 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_variant.js +339 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_variant_array.js +30 -0
- data/vendor/tracemonkey/xpconnect/tests/js/readonlyattributes.js +74 -0
- data/vendor/tracemonkey/xpconnect/tests/js/readwriteattributes.js +101 -0
- data/vendor/tracemonkey/xpconnect/tests/js/scriptable.js +120 -0
- data/vendor/tracemonkey/xpconnect/tests/js/testin.js +203 -0
- data/vendor/tracemonkey/xpconnect/tests/js/xpcfun.js +234 -0
- data/vendor/tracemonkey/xpconnect/tests/js/xpctest_primitives.js +200 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/Makefile.in +66 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/bug500931_helper.html +7 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/inner.html +7 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug361111.xul +29 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug384632.html +32 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug390488.html +65 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug393269.html +46 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug396851.html +43 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug428021.html +41 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug446584.html +49 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug448587.html +31 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug462428.html +42 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug478438.html +66 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug484107.html +100 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug484459.html +36 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug500691.html +28 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/test_wrappers.html +116 -0
- data/vendor/tracemonkey/xpconnect/tests/unit/bogus_element_type.jsm +1 -0
- data/vendor/tracemonkey/xpconnect/tests/unit/bogus_exports_type.jsm +1 -0
- data/vendor/tracemonkey/xpconnect/tests/unit/bug451678_subscript.js +2 -0
- data/vendor/tracemonkey/xpconnect/tests/unit/component_import.js +144 -0
- data/vendor/tracemonkey/xpconnect/tests/unit/recursive_importA.jsm +44 -0
- data/vendor/tracemonkey/xpconnect/tests/unit/recursive_importB.jsm +45 -0
- data/vendor/tracemonkey/xpconnect/tests/unit/syntax_error.jsm +1 -0
- data/vendor/tracemonkey/xpconnect/tests/unit/test_bogus_files.js +88 -0
- data/vendor/tracemonkey/xpconnect/tests/unit/test_bug408412.js +51 -0
- data/vendor/tracemonkey/xpconnect/tests/unit/test_bug451678.js +52 -0
- data/vendor/tracemonkey/xpconnect/tests/unit/test_bug_442086.js +68 -0
- data/vendor/tracemonkey/xpconnect/tests/unit/test_import.js +127 -0
- data/vendor/tracemonkey/xpconnect/tests/unit/test_js_weak_references.js +63 -0
- data/vendor/tracemonkey/xpconnect/tests/unit/test_recursive_import.js +62 -0
- data/vendor/tracemonkey/xpconnect/tools/Makefile.in +49 -0
- data/vendor/tracemonkey/xpconnect/tools/idl/Makefile.in +53 -0
- data/vendor/tracemonkey/xpconnect/tools/idl/nsIXPCToolsCompiler.idl +60 -0
- data/vendor/tracemonkey/xpconnect/tools/idl/nsIXPCToolsProfiler.idl +57 -0
- data/vendor/tracemonkey/xpconnect/tools/js/CompileJSFiles.js +28 -0
- data/vendor/tracemonkey/xpconnect/tools/js/ListJSFiles.js +18 -0
- data/vendor/tracemonkey/xpconnect/tools/src/Makefile.in +76 -0
- data/vendor/tracemonkey/xpconnect/tools/src/nsXPCToolsCompiler.cpp +161 -0
- data/vendor/tracemonkey/xpconnect/tools/src/nsXPCToolsModule.cpp +65 -0
- data/vendor/tracemonkey/xpconnect/tools/src/nsXPCToolsProfiler.cpp +370 -0
- data/vendor/tracemonkey/xpconnect/tools/src/xpctools_private.h +236 -0
- metadata +782 -107
- data/test/johnson/nodes/export_test.rb +0 -9
- data/test/johnson/nodes/import_test.rb +0 -13
- data/test/johnson/version_test.rb +0 -13
|
@@ -0,0 +1,850 @@
|
|
|
1
|
+
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
2
|
+
/* vim: set ts=2 sw=2 et tw=78: */
|
|
3
|
+
/* ***** BEGIN LICENSE BLOCK *****
|
|
4
|
+
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
5
|
+
*
|
|
6
|
+
* The contents of this file are subject to the Mozilla Public License Version
|
|
7
|
+
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
8
|
+
* the License. You may obtain a copy of the License at
|
|
9
|
+
* http://www.mozilla.org/MPL/
|
|
10
|
+
*
|
|
11
|
+
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
12
|
+
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
13
|
+
* for the specific language governing rights and limitations under the
|
|
14
|
+
* License.
|
|
15
|
+
*
|
|
16
|
+
* The Original Code is mozilla.org code.
|
|
17
|
+
*
|
|
18
|
+
* The Initial Developer of the Original Code is
|
|
19
|
+
* The Mozilla Foundation.
|
|
20
|
+
* Portions created by the Initial Developer are Copyright (C) 2005
|
|
21
|
+
* the Initial Developer. All Rights Reserved.
|
|
22
|
+
*
|
|
23
|
+
* Contributor(s):
|
|
24
|
+
* Johnny Stenback <jst@mozilla.org> (original author)
|
|
25
|
+
* Brendan Eich <brendan@mozilla.org>
|
|
26
|
+
* Boris Zbarsky <bzbarsky@mit.edu>
|
|
27
|
+
* Blake Kaplan <mrbkap@gmail.com>
|
|
28
|
+
*
|
|
29
|
+
* Alternatively, the contents of this file may be used under the terms of
|
|
30
|
+
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
|
31
|
+
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
32
|
+
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
33
|
+
* of those above. If you wish to allow use of your version of this file only
|
|
34
|
+
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
35
|
+
* use your version of this file under the terms of the MPL, indicate your
|
|
36
|
+
* decision by deleting the provisions above and replace them with the notice
|
|
37
|
+
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
38
|
+
* the provisions above, a recipient may use your version of this file under
|
|
39
|
+
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
40
|
+
*
|
|
41
|
+
* ***** END LICENSE BLOCK ***** */
|
|
42
|
+
|
|
43
|
+
#include "XPCWrapper.h"
|
|
44
|
+
#include "XPCNativeWrapper.h"
|
|
45
|
+
|
|
46
|
+
const PRUint32
|
|
47
|
+
XPCWrapper::sWrappedObjSlot = 1;
|
|
48
|
+
|
|
49
|
+
const PRUint32
|
|
50
|
+
XPCWrapper::sFlagsSlot = 0;
|
|
51
|
+
|
|
52
|
+
const PRUint32
|
|
53
|
+
XPCWrapper::sNumSlots = 2;
|
|
54
|
+
|
|
55
|
+
JSNative
|
|
56
|
+
XPCWrapper::sEvalNative = nsnull;
|
|
57
|
+
|
|
58
|
+
const PRUint32
|
|
59
|
+
XPCWrapper::sSecMgrSetProp = nsIXPCSecurityManager::ACCESS_SET_PROPERTY;
|
|
60
|
+
const PRUint32
|
|
61
|
+
XPCWrapper::sSecMgrGetProp = nsIXPCSecurityManager::ACCESS_GET_PROPERTY;
|
|
62
|
+
|
|
63
|
+
// static
|
|
64
|
+
JSObject *
|
|
65
|
+
XPCWrapper::Unwrap(JSContext *cx, JSObject *wrapper)
|
|
66
|
+
{
|
|
67
|
+
JSClass *clasp = STOBJ_GET_CLASS(wrapper);
|
|
68
|
+
if (clasp == &sXPC_XOW_JSClass.base) {
|
|
69
|
+
return UnwrapXOW(cx, wrapper);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (XPCNativeWrapper::IsNativeWrapperClass(clasp)) {
|
|
73
|
+
XPCWrappedNative *wrappedObj;
|
|
74
|
+
if (!XPCNativeWrapper::GetWrappedNative(cx, wrapper, &wrappedObj) ||
|
|
75
|
+
!wrappedObj) {
|
|
76
|
+
return nsnull;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return wrappedObj->GetFlatJSObject();
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
if (clasp == &sXPC_SJOW_JSClass.base) {
|
|
83
|
+
JSObject *wrappedObj = STOBJ_GET_PARENT(wrapper);
|
|
84
|
+
|
|
85
|
+
if (NS_FAILED(CanAccessWrapper(cx, wrappedObj))) {
|
|
86
|
+
JS_ClearPendingException(cx);
|
|
87
|
+
|
|
88
|
+
return nsnull;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return wrappedObj;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
if (clasp == &sXPC_SOW_JSClass.base) {
|
|
95
|
+
return UnwrapSOW(cx, wrapper);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return nsnull;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
static void
|
|
102
|
+
IteratorFinalize(JSContext *cx, JSObject *obj)
|
|
103
|
+
{
|
|
104
|
+
jsval v;
|
|
105
|
+
JS_GetReservedSlot(cx, obj, 0, &v);
|
|
106
|
+
|
|
107
|
+
JSIdArray *ida = reinterpret_cast<JSIdArray *>(JSVAL_TO_PRIVATE(v));
|
|
108
|
+
if (ida) {
|
|
109
|
+
JS_DestroyIdArray(cx, ida);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
static JSBool
|
|
114
|
+
IteratorNext(JSContext *cx, uintN argc, jsval *vp)
|
|
115
|
+
{
|
|
116
|
+
JSObject *obj;
|
|
117
|
+
jsval v;
|
|
118
|
+
|
|
119
|
+
obj = JS_THIS_OBJECT(cx, vp);
|
|
120
|
+
if (!obj)
|
|
121
|
+
return JS_FALSE;
|
|
122
|
+
|
|
123
|
+
JS_GetReservedSlot(cx, obj, 0, &v);
|
|
124
|
+
JSIdArray *ida = reinterpret_cast<JSIdArray *>(JSVAL_TO_PRIVATE(v));
|
|
125
|
+
|
|
126
|
+
JS_GetReservedSlot(cx, obj, 1, &v);
|
|
127
|
+
jsint idx = JSVAL_TO_INT(v);
|
|
128
|
+
|
|
129
|
+
if (idx == ida->length) {
|
|
130
|
+
return JS_ThrowStopIteration(cx);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
JS_GetReservedSlot(cx, obj, 2, &v);
|
|
134
|
+
jsid id = ida->vector[idx++];
|
|
135
|
+
if (JSVAL_TO_BOOLEAN(v)) {
|
|
136
|
+
JSString *str;
|
|
137
|
+
if (!JS_IdToValue(cx, id, &v) ||
|
|
138
|
+
!(str = JS_ValueToString(cx, v))) {
|
|
139
|
+
return JS_FALSE;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
*vp = STRING_TO_JSVAL(str);
|
|
143
|
+
} else {
|
|
144
|
+
// We need to return an [id, value] pair.
|
|
145
|
+
if (!JS_GetPropertyById(cx, STOBJ_GET_PARENT(obj), id, &v)) {
|
|
146
|
+
return JS_FALSE;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
jsval name;
|
|
150
|
+
JSString *str;
|
|
151
|
+
if (!JS_IdToValue(cx, id, &name) ||
|
|
152
|
+
!(str = JS_ValueToString(cx, name))) {
|
|
153
|
+
return JS_FALSE;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
jsval vec[2] = { STRING_TO_JSVAL(str), v };
|
|
157
|
+
JSAutoTempValueRooter tvr(cx, 2, vec);
|
|
158
|
+
JSObject *array = JS_NewArrayObject(cx, 2, vec);
|
|
159
|
+
if (!array) {
|
|
160
|
+
return JS_FALSE;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
*vp = OBJECT_TO_JSVAL(array);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
JS_SetReservedSlot(cx, obj, 1, INT_TO_JSVAL(idx));
|
|
167
|
+
return JS_TRUE;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
static JSClass IteratorClass = {
|
|
171
|
+
"XOW iterator", JSCLASS_HAS_RESERVED_SLOTS(3),
|
|
172
|
+
JS_PropertyStub, JS_PropertyStub,
|
|
173
|
+
JS_PropertyStub, JS_PropertyStub,
|
|
174
|
+
JS_EnumerateStub, JS_ResolveStub,
|
|
175
|
+
JS_ConvertStub, IteratorFinalize,
|
|
176
|
+
|
|
177
|
+
JSCLASS_NO_OPTIONAL_MEMBERS
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
// static
|
|
181
|
+
JSObject *
|
|
182
|
+
XPCWrapper::CreateIteratorObj(JSContext *cx, JSObject *tempWrapper,
|
|
183
|
+
JSObject *wrapperObj, JSObject *innerObj,
|
|
184
|
+
JSBool keysonly)
|
|
185
|
+
{
|
|
186
|
+
// This is rather ugly: we want to use the trick seen in Enumerate,
|
|
187
|
+
// where we use our wrapper's resolve hook to determine if we should
|
|
188
|
+
// enumerate a given property. However, we don't want to pollute the
|
|
189
|
+
// identifiers with a next method, so we create an object that
|
|
190
|
+
// delegates (via the __proto__ link) to the wrapper.
|
|
191
|
+
|
|
192
|
+
JSObject *iterObj = JS_NewObject(cx, &IteratorClass, tempWrapper, wrapperObj);
|
|
193
|
+
if (!iterObj) {
|
|
194
|
+
return nsnull;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
JSAutoTempValueRooter tvr(cx, OBJECT_TO_JSVAL(iterObj));
|
|
198
|
+
|
|
199
|
+
// Do this sooner rather than later to avoid complications in
|
|
200
|
+
// IteratorFinalize.
|
|
201
|
+
if (!JS_SetReservedSlot(cx, iterObj, 0, PRIVATE_TO_JSVAL(nsnull))) {
|
|
202
|
+
return nsnull;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
// Initialize iterObj.
|
|
206
|
+
if (!JS_DefineFunction(cx, iterObj, "next", (JSNative)IteratorNext, 0,
|
|
207
|
+
JSFUN_FAST_NATIVE)) {
|
|
208
|
+
return nsnull;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// Start enumerating over all of our properties.
|
|
212
|
+
do {
|
|
213
|
+
if (!XPCWrapper::Enumerate(cx, iterObj, innerObj)) {
|
|
214
|
+
return nsnull;
|
|
215
|
+
}
|
|
216
|
+
} while ((innerObj = STOBJ_GET_PROTO(innerObj)) != nsnull);
|
|
217
|
+
|
|
218
|
+
JSIdArray *ida = JS_Enumerate(cx, iterObj);
|
|
219
|
+
if (!ida) {
|
|
220
|
+
return nsnull;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
if (!JS_SetReservedSlot(cx, iterObj, 0, PRIVATE_TO_JSVAL(ida)) ||
|
|
224
|
+
!JS_SetReservedSlot(cx, iterObj, 1, JSVAL_ZERO) ||
|
|
225
|
+
!JS_SetReservedSlot(cx, iterObj, 2, BOOLEAN_TO_JSVAL(keysonly))) {
|
|
226
|
+
return nsnull;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
if (!JS_SetPrototype(cx, iterObj, nsnull)) {
|
|
230
|
+
return nsnull;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
return iterObj;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// static
|
|
237
|
+
JSBool
|
|
238
|
+
XPCWrapper::AddProperty(JSContext *cx, JSObject *wrapperObj,
|
|
239
|
+
JSBool wantGetterSetter, JSObject *innerObj, jsval id,
|
|
240
|
+
jsval *vp)
|
|
241
|
+
{
|
|
242
|
+
jsid interned_id;
|
|
243
|
+
if (!::JS_ValueToId(cx, id, &interned_id)) {
|
|
244
|
+
return JS_FALSE;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
JSPropertyDescriptor desc;
|
|
248
|
+
if (!GetPropertyAttrs(cx, wrapperObj, interned_id, JSRESOLVE_QUALIFIED,
|
|
249
|
+
wantGetterSetter, &desc)) {
|
|
250
|
+
return JS_FALSE;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
NS_ASSERTION(desc.obj == wrapperObj,
|
|
254
|
+
"What weird wrapper are we using?");
|
|
255
|
+
|
|
256
|
+
return JS_DefinePropertyById(cx, innerObj, interned_id, desc.value,
|
|
257
|
+
desc.getter, desc.setter, desc.attrs);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
// static
|
|
261
|
+
JSBool
|
|
262
|
+
XPCWrapper::DelProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
|
|
263
|
+
{
|
|
264
|
+
if (JSVAL_IS_STRING(id)) {
|
|
265
|
+
JSString *str = JSVAL_TO_STRING(id);
|
|
266
|
+
jschar *chars = ::JS_GetStringChars(str);
|
|
267
|
+
size_t length = ::JS_GetStringLength(str);
|
|
268
|
+
|
|
269
|
+
return ::JS_DeleteUCProperty2(cx, obj, chars, length, vp);
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
if (!JSVAL_IS_INT(id)) {
|
|
273
|
+
return ThrowException(NS_ERROR_NOT_IMPLEMENTED, cx);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
return ::JS_DeleteElement2(cx, obj, JSVAL_TO_INT(id), vp);
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
// static
|
|
280
|
+
JSBool
|
|
281
|
+
XPCWrapper::Enumerate(JSContext *cx, JSObject *wrapperObj, JSObject *innerObj)
|
|
282
|
+
{
|
|
283
|
+
// We are being notified of a for-in loop or similar operation on
|
|
284
|
+
// this wrapper. Forward to the correct high-level object hook,
|
|
285
|
+
// OBJ_ENUMERATE on the unsafe object, called via the JS_Enumerate API.
|
|
286
|
+
// Then reflect properties named by the enumerated identifiers from the
|
|
287
|
+
// unsafe object to the safe wrapper.
|
|
288
|
+
|
|
289
|
+
JSBool ok = JS_TRUE;
|
|
290
|
+
|
|
291
|
+
JSIdArray *ida = JS_Enumerate(cx, innerObj);
|
|
292
|
+
if (!ida) {
|
|
293
|
+
return JS_FALSE;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
for (jsint i = 0, n = ida->length; i < n; i++) {
|
|
297
|
+
JSObject *pobj;
|
|
298
|
+
|
|
299
|
+
// Note: v doesn't need to be rooted because it will be read out of a
|
|
300
|
+
// rooted object's slots.
|
|
301
|
+
jsval v = JSVAL_VOID;
|
|
302
|
+
|
|
303
|
+
// Let our NewResolve hook figure out whether this id should be reflected.
|
|
304
|
+
ok = JS_LookupPropertyWithFlagsById(cx, wrapperObj, ida->vector[i],
|
|
305
|
+
JSRESOLVE_QUALIFIED, &pobj, &v);
|
|
306
|
+
if (!ok) {
|
|
307
|
+
break;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
if (pobj && pobj != wrapperObj) {
|
|
311
|
+
// If the resolution actually happened on a different object, define the
|
|
312
|
+
// property here so that we're sure that enumeration picks it up.
|
|
313
|
+
ok = JS_DefinePropertyById(cx, wrapperObj, ida->vector[i], JSVAL_VOID,
|
|
314
|
+
nsnull, nsnull, JSPROP_ENUMERATE | JSPROP_SHARED);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
if (!ok) {
|
|
318
|
+
break;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
JS_DestroyIdArray(cx, ida);
|
|
323
|
+
|
|
324
|
+
return ok;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
// static
|
|
328
|
+
JSBool
|
|
329
|
+
XPCWrapper::NewResolve(JSContext *cx, JSObject *wrapperObj,
|
|
330
|
+
JSBool wantDetails, JSObject *innerObj, jsval id,
|
|
331
|
+
uintN flags, JSObject **objp)
|
|
332
|
+
{
|
|
333
|
+
jsid interned_id;
|
|
334
|
+
if (!::JS_ValueToId(cx, id, &interned_id)) {
|
|
335
|
+
return JS_FALSE;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
JSPropertyDescriptor desc;
|
|
339
|
+
if (!GetPropertyAttrs(cx, innerObj, interned_id, flags, wantDetails, &desc)) {
|
|
340
|
+
return JS_FALSE;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
if (!desc.obj) {
|
|
344
|
+
// Nothing to define.
|
|
345
|
+
return JS_TRUE;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
desc.value = JSVAL_VOID;
|
|
349
|
+
|
|
350
|
+
jsval oldFlags;
|
|
351
|
+
if (!::JS_GetReservedSlot(cx, wrapperObj, sFlagsSlot, &oldFlags) ||
|
|
352
|
+
!::JS_SetReservedSlot(cx, wrapperObj, sFlagsSlot,
|
|
353
|
+
INT_TO_JSVAL(JSVAL_TO_INT(oldFlags) |
|
|
354
|
+
FLAG_RESOLVING))) {
|
|
355
|
+
return JS_FALSE;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
JSBool ok = JS_DefinePropertyById(cx, wrapperObj, interned_id, desc.value,
|
|
359
|
+
desc.getter, desc.setter, desc.attrs);
|
|
360
|
+
|
|
361
|
+
JS_SetReservedSlot(cx, wrapperObj, sFlagsSlot, oldFlags);
|
|
362
|
+
|
|
363
|
+
if (ok) {
|
|
364
|
+
*objp = wrapperObj;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
return ok;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
// static
|
|
371
|
+
JSBool
|
|
372
|
+
XPCWrapper::ResolveNativeProperty(JSContext *cx, JSObject *wrapperObj,
|
|
373
|
+
JSObject *innerObj, XPCWrappedNative *wn,
|
|
374
|
+
jsval id, uintN flags, JSObject **objp,
|
|
375
|
+
JSBool isNativeWrapper)
|
|
376
|
+
{
|
|
377
|
+
// This will do verification and the method lookup for us.
|
|
378
|
+
XPCCallContext ccx(JS_CALLER, cx, innerObj, nsnull, id);
|
|
379
|
+
|
|
380
|
+
// For "constructor" we don't want to call into the resolve hooks on the
|
|
381
|
+
// wrapped native, since that would give the wrong constructor.
|
|
382
|
+
if (NATIVE_HAS_FLAG(wn, WantNewResolve) &&
|
|
383
|
+
id != GetRTStringByIndex(cx, XPCJSRuntime::IDX_CONSTRUCTOR)) {
|
|
384
|
+
|
|
385
|
+
// Mark ourselves as resolving so our AddProperty hook can do the
|
|
386
|
+
// right thing here.
|
|
387
|
+
jsval oldFlags;
|
|
388
|
+
if (!::JS_GetReservedSlot(cx, wrapperObj, sFlagsSlot, &oldFlags) ||
|
|
389
|
+
!::JS_SetReservedSlot(cx, wrapperObj, sFlagsSlot,
|
|
390
|
+
INT_TO_JSVAL(JSVAL_TO_INT(oldFlags) |
|
|
391
|
+
FLAG_RESOLVING))) {
|
|
392
|
+
return JS_FALSE;
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
XPCWrappedNative* oldResolvingWrapper = nsnull;
|
|
396
|
+
JSBool allowPropMods =
|
|
397
|
+
NATIVE_HAS_FLAG(wn, AllowPropModsDuringResolve);
|
|
398
|
+
if (allowPropMods) {
|
|
399
|
+
oldResolvingWrapper = ccx.SetResolvingWrapper(wn);
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
JSBool retval = JS_TRUE;
|
|
403
|
+
JSObject* newObj = nsnull;
|
|
404
|
+
nsresult rv = wn->GetScriptableInfo()->
|
|
405
|
+
GetCallback()->NewResolve(wn, cx, wrapperObj, id, flags,
|
|
406
|
+
&newObj, &retval);
|
|
407
|
+
|
|
408
|
+
if (allowPropMods) {
|
|
409
|
+
ccx.SetResolvingWrapper(oldResolvingWrapper);
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
if (!::JS_SetReservedSlot(cx, wrapperObj, sFlagsSlot, oldFlags)) {
|
|
413
|
+
return JS_FALSE;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
if (NS_FAILED(rv)) {
|
|
417
|
+
return ThrowException(rv, cx);
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
if (newObj) {
|
|
421
|
+
if (isNativeWrapper || newObj == wrapperObj) {
|
|
422
|
+
#ifdef DEBUG_XPCNativeWrapper
|
|
423
|
+
JSString* strId = ::JS_ValueToString(cx, id);
|
|
424
|
+
if (strId) {
|
|
425
|
+
NS_ConvertUTF16toUTF8 propName((PRUnichar*)::JS_GetStringChars(strId),
|
|
426
|
+
::JS_GetStringLength(strId));
|
|
427
|
+
printf("Resolved via scriptable hooks for '%s'\n", propName.get());
|
|
428
|
+
}
|
|
429
|
+
#endif
|
|
430
|
+
// Note that we don't need to preserve the wrapper here, since this is
|
|
431
|
+
// not an "expando" property if the scriptable newResolve hook found it.
|
|
432
|
+
*objp = newObj;
|
|
433
|
+
return retval;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
// The scriptable helper resolved this property to a *different* object.
|
|
437
|
+
// We don't know what to do for now (this can't currently happen in
|
|
438
|
+
// Mozilla) so throw.
|
|
439
|
+
// I suspect that we'd need to redo the security check on the new object
|
|
440
|
+
// (if it has a different class than the original object) and then call
|
|
441
|
+
// ResolveNativeProperty with *that* as the inner object.
|
|
442
|
+
return ThrowException(NS_ERROR_NOT_IMPLEMENTED, cx);
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
if (!JSVAL_IS_STRING(id)) {
|
|
447
|
+
// A non-string id is being resolved. Won't be found here, return
|
|
448
|
+
// early.
|
|
449
|
+
|
|
450
|
+
return MaybePreserveWrapper(cx, wn, flags);
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
// Verify that our jsobject really is a wrapped native.
|
|
454
|
+
XPCWrappedNative* wrapper = ccx.GetWrapper();
|
|
455
|
+
if (wrapper != wn || !wrapper->IsValid()) {
|
|
456
|
+
NS_ASSERTION(wrapper == wn, "Uh, how did this happen!");
|
|
457
|
+
return ThrowException(NS_ERROR_XPC_BAD_CONVERT_JS, cx);
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
// it would be a big surprise if there is a member without an
|
|
461
|
+
// interface :)
|
|
462
|
+
XPCNativeInterface* iface = ccx.GetInterface();
|
|
463
|
+
if (!iface) {
|
|
464
|
+
// No interface, nothing to resolve.
|
|
465
|
+
|
|
466
|
+
return MaybePreserveWrapper(cx, wn, flags);
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
// did we find a method/attribute by that name?
|
|
470
|
+
XPCNativeMember* member = ccx.GetMember();
|
|
471
|
+
NS_ASSERTION(member, "not doing IDispatch, how'd this happen?");
|
|
472
|
+
if (!member) {
|
|
473
|
+
// No member, nothing to resolve.
|
|
474
|
+
|
|
475
|
+
return MaybePreserveWrapper(cx, wn, flags);
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
JSString *str = JSVAL_TO_STRING(id);
|
|
479
|
+
if (!str) {
|
|
480
|
+
return ThrowException(NS_ERROR_UNEXPECTED, cx);
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
// Get (and perhaps lazily create) the member's value (commonly a
|
|
484
|
+
// cloneable function).
|
|
485
|
+
jsval v;
|
|
486
|
+
uintN attrs = JSPROP_ENUMERATE;
|
|
487
|
+
JSPropertyOp getter = nsnull;
|
|
488
|
+
JSPropertyOp setter = nsnull;
|
|
489
|
+
|
|
490
|
+
if (member->IsConstant()) {
|
|
491
|
+
if (!member->GetConstantValue(ccx, iface, &v)) {
|
|
492
|
+
return ThrowException(NS_ERROR_XPC_BAD_CONVERT_JS, cx);
|
|
493
|
+
}
|
|
494
|
+
} else if (member->IsAttribute()) {
|
|
495
|
+
// An attribute is being resolved. Define the property, the value
|
|
496
|
+
// will be dealt with in the get/set hooks. Use JSPROP_SHARED to
|
|
497
|
+
// avoid entraining last-got or last-set garbage beyond the life
|
|
498
|
+
// of the value in the getter or setter call site.
|
|
499
|
+
|
|
500
|
+
v = JSVAL_VOID;
|
|
501
|
+
attrs |= JSPROP_SHARED;
|
|
502
|
+
} else {
|
|
503
|
+
// We're dealing with a method member here. Clone a function we can
|
|
504
|
+
// use for this object. NB: cx's newborn roots will protect funobj
|
|
505
|
+
// and funWrapper and its object from GC.
|
|
506
|
+
|
|
507
|
+
jsval funval;
|
|
508
|
+
if (!member->NewFunctionObject(ccx, iface, wrapper->GetFlatJSObject(),
|
|
509
|
+
&funval)) {
|
|
510
|
+
return ThrowException(NS_ERROR_XPC_BAD_CONVERT_JS, cx);
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
AUTO_MARK_JSVAL(ccx, funval);
|
|
514
|
+
|
|
515
|
+
#ifdef DEBUG_XPCNativeWrapper
|
|
516
|
+
printf("Wrapping function object for %s\n",
|
|
517
|
+
::JS_GetStringBytes(JSVAL_TO_STRING(id)));
|
|
518
|
+
#endif
|
|
519
|
+
|
|
520
|
+
if (!WrapFunction(cx, wrapperObj, JSVAL_TO_OBJECT(funval), &v,
|
|
521
|
+
isNativeWrapper)) {
|
|
522
|
+
return JS_FALSE;
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
// Functions shouldn't have a getter or a setter. Without the wrappers,
|
|
526
|
+
// they would live on the prototype (and call its getter), since we don't
|
|
527
|
+
// have a prototype, and we need to avoid calling the scriptable helper's
|
|
528
|
+
// GetProperty method for this property, stub out the getters and setters
|
|
529
|
+
// explicitly.
|
|
530
|
+
getter = setter = JS_PropertyStub;
|
|
531
|
+
|
|
532
|
+
// Since the XPC_*_NewResolve functions ensure that the method's property
|
|
533
|
+
// name is accessible, we set the eAllAccessSlot bit, which indicates to
|
|
534
|
+
// XPC_NW_FunctionWrapper that the method is safe to unwrap and call, even
|
|
535
|
+
// if XPCNativeWrapper::GetWrappedNative disagrees.
|
|
536
|
+
JS_SetReservedSlot(cx, JSVAL_TO_OBJECT(v), eAllAccessSlot, JSVAL_TRUE);
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
// Make sure v doesn't go away while we mess with it.
|
|
540
|
+
AUTO_MARK_JSVAL(ccx, v);
|
|
541
|
+
|
|
542
|
+
// XPCNativeWrapper doesn't need to do this.
|
|
543
|
+
jsval oldFlags;
|
|
544
|
+
if (!isNativeWrapper &&
|
|
545
|
+
(!::JS_GetReservedSlot(cx, wrapperObj, sFlagsSlot, &oldFlags) ||
|
|
546
|
+
!::JS_SetReservedSlot(cx, wrapperObj, sFlagsSlot,
|
|
547
|
+
INT_TO_JSVAL(JSVAL_TO_INT(oldFlags) |
|
|
548
|
+
FLAG_RESOLVING)))) {
|
|
549
|
+
return JS_FALSE;
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
if (!::JS_DefineUCProperty(cx, wrapperObj, ::JS_GetStringChars(str),
|
|
553
|
+
::JS_GetStringLength(str), v, getter, setter,
|
|
554
|
+
attrs)) {
|
|
555
|
+
return JS_FALSE;
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
if (!isNativeWrapper &&
|
|
559
|
+
!::JS_SetReservedSlot(cx, wrapperObj, sFlagsSlot, oldFlags)) {
|
|
560
|
+
return JS_FALSE;
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
*objp = wrapperObj;
|
|
564
|
+
|
|
565
|
+
return JS_TRUE;
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
// static
|
|
569
|
+
JSBool
|
|
570
|
+
XPCWrapper::GetOrSetNativeProperty(JSContext *cx, JSObject *obj,
|
|
571
|
+
XPCWrappedNative *wrappedNative,
|
|
572
|
+
jsval id, jsval *vp, JSBool aIsSet,
|
|
573
|
+
JSBool isNativeWrapper)
|
|
574
|
+
{
|
|
575
|
+
// This will do verification and the method lookup for us.
|
|
576
|
+
JSObject *nativeObj = wrappedNative->GetFlatJSObject();
|
|
577
|
+
XPCCallContext ccx(JS_CALLER, cx, nativeObj, nsnull, id);
|
|
578
|
+
|
|
579
|
+
if (aIsSet ? NATIVE_HAS_FLAG(wrappedNative, WantSetProperty) :
|
|
580
|
+
NATIVE_HAS_FLAG(wrappedNative, WantGetProperty)) {
|
|
581
|
+
|
|
582
|
+
jsval v = *vp;
|
|
583
|
+
// Note that some sets return random DOM objects (setting
|
|
584
|
+
// document.location, say), so we want to rewrap for sets too if v != *vp.
|
|
585
|
+
JSBool retval = JS_TRUE;
|
|
586
|
+
nsresult rv;
|
|
587
|
+
if (aIsSet) {
|
|
588
|
+
rv = wrappedNative->GetScriptableCallback()->
|
|
589
|
+
SetProperty(wrappedNative, cx, obj, id, &v, &retval);
|
|
590
|
+
} else {
|
|
591
|
+
rv = wrappedNative->GetScriptableCallback()->
|
|
592
|
+
GetProperty(wrappedNative, cx, obj, id, &v, &retval);
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
if (NS_FAILED(rv)) {
|
|
596
|
+
return ThrowException(rv, cx);
|
|
597
|
+
}
|
|
598
|
+
if (!retval) {
|
|
599
|
+
return JS_FALSE;
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
if (rv == NS_SUCCESS_I_DID_SOMETHING) {
|
|
603
|
+
// Make sure v doesn't get collected while we're re-wrapping it.
|
|
604
|
+
AUTO_MARK_JSVAL(ccx, v);
|
|
605
|
+
|
|
606
|
+
#ifdef DEBUG_XPCNativeWrapper
|
|
607
|
+
JSString* strId = ::JS_ValueToString(cx, id);
|
|
608
|
+
if (strId) {
|
|
609
|
+
NS_ConvertUTF16toUTF8 propName((PRUnichar*)::JS_GetStringChars(strId),
|
|
610
|
+
::JS_GetStringLength(strId));
|
|
611
|
+
printf("%s via scriptable hooks for '%s'\n",
|
|
612
|
+
aIsSet ? "Set" : "Got", propName.get());
|
|
613
|
+
}
|
|
614
|
+
#endif
|
|
615
|
+
|
|
616
|
+
return RewrapIfDeepWrapper(cx, obj, v, vp, isNativeWrapper);
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
if (!JSVAL_IS_STRING(id)) {
|
|
621
|
+
// Not going to be found here
|
|
622
|
+
return JS_TRUE;
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
// Verify that our jsobject really is a wrapped native.
|
|
626
|
+
XPCWrappedNative* wrapper = ccx.GetWrapper();
|
|
627
|
+
if (wrapper != wrappedNative || !wrapper->IsValid()) {
|
|
628
|
+
NS_ASSERTION(wrapper == wrappedNative, "Uh, how did this happen!");
|
|
629
|
+
return ThrowException(NS_ERROR_XPC_BAD_CONVERT_JS, cx);
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
// it would be a big surprise if there is a member without an
|
|
633
|
+
// interface :)
|
|
634
|
+
XPCNativeInterface* iface = ccx.GetInterface();
|
|
635
|
+
if (!iface) {
|
|
636
|
+
|
|
637
|
+
return JS_TRUE;
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
// did we find a method/attribute by that name?
|
|
641
|
+
XPCNativeMember* member = ccx.GetMember();
|
|
642
|
+
NS_ASSERTION(member, "not doing IDispatch, how'd this happen?");
|
|
643
|
+
if (!member) {
|
|
644
|
+
// No member, no IDL property to expose.
|
|
645
|
+
|
|
646
|
+
return JS_TRUE;
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
if (member->IsConstant()) {
|
|
650
|
+
jsval memberval;
|
|
651
|
+
if (!member->GetConstantValue(ccx, iface, &memberval)) {
|
|
652
|
+
return ThrowException(NS_ERROR_XPC_BAD_CONVERT_JS, cx);
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
// Getting the value of constants is easy, just return the
|
|
656
|
+
// value. Setting is not supported (obviously).
|
|
657
|
+
if (aIsSet) {
|
|
658
|
+
return ThrowException(NS_ERROR_XPC_BAD_CONVERT_JS, cx);
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
*vp = memberval;
|
|
662
|
+
|
|
663
|
+
return JS_TRUE;
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
if (!member->IsAttribute()) {
|
|
667
|
+
// Getting the value of a method. Just return and let the value
|
|
668
|
+
// from XPC_NW_NewResolve() be used.
|
|
669
|
+
|
|
670
|
+
return JS_TRUE;
|
|
671
|
+
}
|
|
672
|
+
|
|
673
|
+
jsval funval;
|
|
674
|
+
if (!member->NewFunctionObject(ccx, iface, wrapper->GetFlatJSObject(),
|
|
675
|
+
&funval)) {
|
|
676
|
+
return ThrowException(NS_ERROR_XPC_BAD_CONVERT_JS, cx);
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
AUTO_MARK_JSVAL(ccx, funval);
|
|
680
|
+
|
|
681
|
+
jsval *argv = nsnull;
|
|
682
|
+
uintN argc = 0;
|
|
683
|
+
|
|
684
|
+
if (aIsSet) {
|
|
685
|
+
if (member->IsReadOnlyAttribute()) {
|
|
686
|
+
// Trying to set a property for which there is no setter!
|
|
687
|
+
return ThrowException(NS_ERROR_NOT_AVAILABLE, cx);
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
#ifdef DEBUG_XPCNativeWrapper
|
|
691
|
+
printf("Calling setter for %s\n",
|
|
692
|
+
::JS_GetStringBytes(JSVAL_TO_STRING(id)));
|
|
693
|
+
#endif
|
|
694
|
+
|
|
695
|
+
argv = vp;
|
|
696
|
+
argc = 1;
|
|
697
|
+
} else {
|
|
698
|
+
#ifdef DEBUG_XPCNativeWrapper
|
|
699
|
+
printf("Calling getter for %s\n",
|
|
700
|
+
::JS_GetStringBytes(JSVAL_TO_STRING(id)));
|
|
701
|
+
#endif
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
// Call the getter
|
|
705
|
+
jsval v;
|
|
706
|
+
if (!::JS_CallFunctionValue(cx, wrapper->GetFlatJSObject(), funval, argc,
|
|
707
|
+
argv, &v)) {
|
|
708
|
+
return JS_FALSE;
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
if (aIsSet) {
|
|
712
|
+
return JS_TRUE;
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
{
|
|
716
|
+
// Make sure v doesn't get collected while we're re-wrapping it.
|
|
717
|
+
AUTO_MARK_JSVAL(ccx, v);
|
|
718
|
+
|
|
719
|
+
return RewrapIfDeepWrapper(cx, obj, v, vp, isNativeWrapper);
|
|
720
|
+
}
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
// static
|
|
724
|
+
JSBool
|
|
725
|
+
XPCWrapper::NativeToString(JSContext *cx, XPCWrappedNative *wrappedNative,
|
|
726
|
+
uintN argc, jsval *argv, jsval *rval,
|
|
727
|
+
JSBool isNativeWrapper)
|
|
728
|
+
{
|
|
729
|
+
// Check whether toString was overridden in any object along
|
|
730
|
+
// the wrapped native's object's prototype chain.
|
|
731
|
+
XPCJSRuntime *rt = nsXPConnect::GetRuntimeInstance();
|
|
732
|
+
|
|
733
|
+
jsid id = rt->GetStringID(XPCJSRuntime::IDX_TO_STRING);
|
|
734
|
+
jsval idAsVal;
|
|
735
|
+
if (!::JS_IdToValue(cx, id, &idAsVal)) {
|
|
736
|
+
return JS_FALSE;
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
// Someone is trying to call toString on our wrapped object.
|
|
740
|
+
JSObject *wn_obj = wrappedNative->GetFlatJSObject();
|
|
741
|
+
XPCCallContext ccx(JS_CALLER, cx, wn_obj, nsnull, idAsVal);
|
|
742
|
+
if (!ccx.IsValid()) {
|
|
743
|
+
// Shouldn't really happen.
|
|
744
|
+
return ThrowException(NS_ERROR_FAILURE, cx);
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
XPCNativeInterface *iface = ccx.GetInterface();
|
|
748
|
+
XPCNativeMember *member = ccx.GetMember();
|
|
749
|
+
JSString* str = nsnull;
|
|
750
|
+
|
|
751
|
+
// First, try to see if the object declares a toString in its IDL. If it does,
|
|
752
|
+
// then we need to defer to that.
|
|
753
|
+
if (iface && member && member->IsMethod()) {
|
|
754
|
+
jsval toStringVal;
|
|
755
|
+
if (!member->NewFunctionObject(ccx, iface, wn_obj, &toStringVal)) {
|
|
756
|
+
return JS_FALSE;
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
// Defer to the IDL-declared toString.
|
|
760
|
+
|
|
761
|
+
AUTO_MARK_JSVAL(ccx, toStringVal);
|
|
762
|
+
|
|
763
|
+
jsval v;
|
|
764
|
+
if (!::JS_CallFunctionValue(cx, wn_obj, toStringVal, argc, argv, &v)) {
|
|
765
|
+
return JS_FALSE;
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
if (JSVAL_IS_STRING(v)) {
|
|
769
|
+
str = JSVAL_TO_STRING(v);
|
|
770
|
+
}
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
if (!str) {
|
|
774
|
+
// Ok, we do no damage, and add value, by returning our own idea
|
|
775
|
+
// of what toString() should be.
|
|
776
|
+
// Note: We can't just call JS_ValueToString on the wrapped object. Instead,
|
|
777
|
+
// we need to call the wrapper's ToString in order to safely convert our
|
|
778
|
+
// object to a string.
|
|
779
|
+
|
|
780
|
+
char *wrapperStr = nsnull;
|
|
781
|
+
nsAutoString resultString;
|
|
782
|
+
if (isNativeWrapper) {
|
|
783
|
+
resultString.AppendLiteral("[object XPCNativeWrapper ");
|
|
784
|
+
|
|
785
|
+
wrapperStr = wrappedNative->ToString(ccx);
|
|
786
|
+
if (!wrapperStr) {
|
|
787
|
+
return JS_FALSE;
|
|
788
|
+
}
|
|
789
|
+
} else {
|
|
790
|
+
wrapperStr = wrappedNative->ToString(ccx);
|
|
791
|
+
if (!wrapperStr) {
|
|
792
|
+
return JS_FALSE;
|
|
793
|
+
}
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
resultString.AppendASCII(wrapperStr);
|
|
797
|
+
JS_smprintf_free(wrapperStr);
|
|
798
|
+
|
|
799
|
+
if (isNativeWrapper) {
|
|
800
|
+
resultString.Append(']');
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
str = ::JS_NewUCStringCopyN(cx, reinterpret_cast<const jschar *>
|
|
804
|
+
(resultString.get()),
|
|
805
|
+
resultString.Length());
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
NS_ENSURE_TRUE(str, JS_FALSE);
|
|
809
|
+
|
|
810
|
+
*rval = STRING_TO_JSVAL(str);
|
|
811
|
+
return JS_TRUE;
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
// static
|
|
815
|
+
JSBool
|
|
816
|
+
XPCWrapper::GetPropertyAttrs(JSContext *cx, JSObject *obj, jsid interned_id,
|
|
817
|
+
uintN flags, JSBool wantDetails,
|
|
818
|
+
JSPropertyDescriptor *desc)
|
|
819
|
+
{
|
|
820
|
+
if (!JS_GetPropertyDescriptorById(cx, obj, interned_id, flags, desc)) {
|
|
821
|
+
return JS_FALSE;
|
|
822
|
+
}
|
|
823
|
+
|
|
824
|
+
const uintN interesting_attrs = wantDetails
|
|
825
|
+
? (JSPROP_ENUMERATE |
|
|
826
|
+
JSPROP_READONLY |
|
|
827
|
+
JSPROP_PERMANENT |
|
|
828
|
+
JSPROP_SHARED |
|
|
829
|
+
JSPROP_GETTER |
|
|
830
|
+
JSPROP_SETTER)
|
|
831
|
+
: JSPROP_ENUMERATE;
|
|
832
|
+
desc->attrs &= interesting_attrs;
|
|
833
|
+
|
|
834
|
+
if (wantDetails) {
|
|
835
|
+
// JS_GetPropertyDescriptorById returns non scripted getters and setters.
|
|
836
|
+
// If wantDetails is true, then we need to censor them.
|
|
837
|
+
if (!(desc->attrs & JSPROP_GETTER)) {
|
|
838
|
+
desc->getter = nsnull;
|
|
839
|
+
}
|
|
840
|
+
if (!(desc->attrs & JSPROP_SETTER)) {
|
|
841
|
+
desc->setter = nsnull;
|
|
842
|
+
}
|
|
843
|
+
} else {
|
|
844
|
+
// Clear out all but attrs and obj.
|
|
845
|
+
desc->getter = desc->setter = nsnull;
|
|
846
|
+
desc->value = JSVAL_VOID;
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
return JS_TRUE;
|
|
850
|
+
}
|