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,1128 @@
|
|
|
1
|
+
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
|
2
|
+
*
|
|
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
|
+
* Mozilla Foundation
|
|
20
|
+
* Portions created by the Initial Developer are Copyright (C) 2008
|
|
21
|
+
* the Initial Developer. All Rights Reserved.
|
|
22
|
+
*
|
|
23
|
+
* Contributor(s):
|
|
24
|
+
* Jason Orendorff <jorendorff@mozilla.com>
|
|
25
|
+
*
|
|
26
|
+
* Alternatively, the contents of this file may be used under the terms of
|
|
27
|
+
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
|
28
|
+
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
29
|
+
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
30
|
+
* of those above. If you wish to allow use of your version of this file only
|
|
31
|
+
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
32
|
+
* use your version of this file under the terms of the MPL, indicate your
|
|
33
|
+
* decision by deleting the provisions above and replace them with the notice
|
|
34
|
+
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
35
|
+
* the provisions above, a recipient may use your version of this file under
|
|
36
|
+
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
37
|
+
*
|
|
38
|
+
* ***** END LICENSE BLOCK ***** */
|
|
39
|
+
|
|
40
|
+
#include "jsapi.h"
|
|
41
|
+
#include "jsstr.h"
|
|
42
|
+
#include "jscntxt.h" /* for error messages */
|
|
43
|
+
#include "nsCOMPtr.h"
|
|
44
|
+
#include "xpcprivate.h"
|
|
45
|
+
#include "xpcinlines.h"
|
|
46
|
+
#include "xpcquickstubs.h"
|
|
47
|
+
#include "XPCWrapper.h"
|
|
48
|
+
#include "XPCNativeWrapper.h"
|
|
49
|
+
|
|
50
|
+
static const xpc_qsHashEntry *
|
|
51
|
+
LookupEntry(PRUint32 tableSize, const xpc_qsHashEntry *table, const nsID &iid)
|
|
52
|
+
{
|
|
53
|
+
size_t i;
|
|
54
|
+
const xpc_qsHashEntry *p;
|
|
55
|
+
|
|
56
|
+
i = iid.m0 % tableSize;
|
|
57
|
+
do
|
|
58
|
+
{
|
|
59
|
+
p = table + i;
|
|
60
|
+
if(p->iid.Equals(iid))
|
|
61
|
+
return p;
|
|
62
|
+
i = p->chain;
|
|
63
|
+
} while(i != XPC_QS_NULL_INDEX);
|
|
64
|
+
return nsnull;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
static const xpc_qsHashEntry *
|
|
68
|
+
LookupInterfaceOrAncestor(PRUint32 tableSize, const xpc_qsHashEntry *table,
|
|
69
|
+
const nsID &iid)
|
|
70
|
+
{
|
|
71
|
+
const xpc_qsHashEntry *entry = LookupEntry(tableSize, table, iid);
|
|
72
|
+
if(!entry)
|
|
73
|
+
{
|
|
74
|
+
/*
|
|
75
|
+
* On a miss, we have to search for every interface the object
|
|
76
|
+
* supports, including ancestors.
|
|
77
|
+
*/
|
|
78
|
+
nsCOMPtr<nsIInterfaceInfo> info;
|
|
79
|
+
if(NS_FAILED(nsXPConnect::GetXPConnect()->GetInfoForIID(
|
|
80
|
+
&iid, getter_AddRefs(info))))
|
|
81
|
+
return nsnull;
|
|
82
|
+
|
|
83
|
+
const nsIID *piid;
|
|
84
|
+
for(;;)
|
|
85
|
+
{
|
|
86
|
+
nsCOMPtr<nsIInterfaceInfo> parent;
|
|
87
|
+
if(NS_FAILED(info->GetParent(getter_AddRefs(parent))) ||
|
|
88
|
+
!parent ||
|
|
89
|
+
NS_FAILED(parent->GetIIDShared(&piid)))
|
|
90
|
+
{
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
entry = LookupEntry(tableSize, table, *piid);
|
|
94
|
+
if(entry)
|
|
95
|
+
break;
|
|
96
|
+
info.swap(parent);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return entry;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
static JSBool
|
|
103
|
+
PropertyOpForwarder(JSContext *cx, uintN argc, jsval *vp)
|
|
104
|
+
{
|
|
105
|
+
// Layout:
|
|
106
|
+
// this = our this
|
|
107
|
+
// property op to call = callee reserved slot 0
|
|
108
|
+
// name of the property = callee reserved slot 1
|
|
109
|
+
|
|
110
|
+
JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
|
|
111
|
+
JSObject *obj = JS_THIS_OBJECT(cx, vp);
|
|
112
|
+
jsval v;
|
|
113
|
+
|
|
114
|
+
if(!JS_GetReservedSlot(cx, callee, 0, &v))
|
|
115
|
+
return JS_FALSE;
|
|
116
|
+
JSObject *ptrobj = JSVAL_TO_OBJECT(v);
|
|
117
|
+
JSPropertyOp *popp = static_cast<JSPropertyOp *>(JS_GetPrivate(cx, ptrobj));
|
|
118
|
+
|
|
119
|
+
if(!JS_GetReservedSlot(cx, callee, 1, &v))
|
|
120
|
+
return JS_FALSE;
|
|
121
|
+
|
|
122
|
+
jsval argval = (argc > 0) ? JS_ARGV(cx, vp)[0] : JSVAL_VOID;
|
|
123
|
+
JS_SET_RVAL(cx, vp, argval);
|
|
124
|
+
return (*popp)(cx, obj, v, vp);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
static void
|
|
128
|
+
PointerFinalize(JSContext *cx, JSObject *obj)
|
|
129
|
+
{
|
|
130
|
+
JSPropertyOp *popp = static_cast<JSPropertyOp *>(JS_GetPrivate(cx, obj));
|
|
131
|
+
delete popp;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
static JSClass
|
|
135
|
+
PointerHolderClass = {
|
|
136
|
+
"Pointer", JSCLASS_HAS_PRIVATE,
|
|
137
|
+
JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub,
|
|
138
|
+
JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, PointerFinalize,
|
|
139
|
+
JSCLASS_NO_OPTIONAL_MEMBERS
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
static JSObject *
|
|
143
|
+
GeneratePropertyOp(JSContext *cx, JSObject *obj, jsval idval, uintN argc,
|
|
144
|
+
const char *name, JSPropertyOp pop)
|
|
145
|
+
{
|
|
146
|
+
// The JS engine provides two reserved slots on function objects for
|
|
147
|
+
// XPConnect to use. Use them to stick the necessary info here.
|
|
148
|
+
JSFunction *fun =
|
|
149
|
+
JS_NewFunction(cx, reinterpret_cast<JSNative>(PropertyOpForwarder),
|
|
150
|
+
argc, JSFUN_FAST_NATIVE, obj, name);
|
|
151
|
+
if(!fun)
|
|
152
|
+
return JS_FALSE;
|
|
153
|
+
|
|
154
|
+
JSObject *funobj = JS_GetFunctionObject(fun);
|
|
155
|
+
|
|
156
|
+
JSAutoTempValueRooter tvr(cx, OBJECT_TO_JSVAL(funobj));
|
|
157
|
+
|
|
158
|
+
// Unfortunately, we cannot guarantee that JSPropertyOp is aligned. Use a
|
|
159
|
+
// second object to work around this.
|
|
160
|
+
JSObject *ptrobj = JS_NewObject(cx, &PointerHolderClass, nsnull, funobj);
|
|
161
|
+
if(!ptrobj)
|
|
162
|
+
return JS_FALSE;
|
|
163
|
+
JSPropertyOp *popp = new JSPropertyOp;
|
|
164
|
+
if(!popp)
|
|
165
|
+
return JS_FALSE;
|
|
166
|
+
*popp = pop;
|
|
167
|
+
JS_SetPrivate(cx, ptrobj, popp);
|
|
168
|
+
|
|
169
|
+
JS_SetReservedSlot(cx, funobj, 0, OBJECT_TO_JSVAL(ptrobj));
|
|
170
|
+
JS_SetReservedSlot(cx, funobj, 1, idval);
|
|
171
|
+
return funobj;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
static JSBool
|
|
175
|
+
ReifyPropertyOps(JSContext *cx, JSObject *obj, jsval idval, jsid interned_id,
|
|
176
|
+
const char *name, JSPropertyOp getter, JSPropertyOp setter,
|
|
177
|
+
JSObject **getterobjp, JSObject **setterobjp)
|
|
178
|
+
{
|
|
179
|
+
// Generate both getter and setter and stash them in the prototype.
|
|
180
|
+
jsval roots[2] = { JSVAL_NULL, JSVAL_NULL };
|
|
181
|
+
JSAutoTempValueRooter tvr(cx, 2, roots);
|
|
182
|
+
|
|
183
|
+
uintN attrs = JSPROP_SHARED;
|
|
184
|
+
JSObject *getterobj;
|
|
185
|
+
if(getter)
|
|
186
|
+
{
|
|
187
|
+
getterobj = GeneratePropertyOp(cx, obj, idval, 0, name, getter);
|
|
188
|
+
if(!getterobj)
|
|
189
|
+
return JS_FALSE;
|
|
190
|
+
roots[0] = OBJECT_TO_JSVAL(getterobj);
|
|
191
|
+
attrs |= JSPROP_GETTER;
|
|
192
|
+
}
|
|
193
|
+
else
|
|
194
|
+
getterobj = nsnull;
|
|
195
|
+
|
|
196
|
+
JSObject *setterobj;
|
|
197
|
+
if (setter)
|
|
198
|
+
{
|
|
199
|
+
setterobj = GeneratePropertyOp(cx, obj, idval, 1, name, setter);
|
|
200
|
+
if(!setterobj)
|
|
201
|
+
return JS_FALSE;
|
|
202
|
+
roots[1] = OBJECT_TO_JSVAL(setterobj);
|
|
203
|
+
attrs |= JSPROP_SETTER;
|
|
204
|
+
}
|
|
205
|
+
else
|
|
206
|
+
setterobj = nsnull;
|
|
207
|
+
|
|
208
|
+
if(getterobjp)
|
|
209
|
+
*getterobjp = getterobj;
|
|
210
|
+
if(setterobjp)
|
|
211
|
+
*setterobjp = setterobj;
|
|
212
|
+
return JS_DefinePropertyById(cx, obj, interned_id, JSVAL_VOID,
|
|
213
|
+
JS_DATA_TO_FUNC_PTR(JSPropertyOp, getterobj),
|
|
214
|
+
JS_DATA_TO_FUNC_PTR(JSPropertyOp, setterobj),
|
|
215
|
+
attrs);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
static JSBool
|
|
219
|
+
LookupGetterOrSetter(JSContext *cx, JSBool wantGetter, jsval *vp)
|
|
220
|
+
{
|
|
221
|
+
uintN attrs;
|
|
222
|
+
JSBool found;
|
|
223
|
+
JSPropertyOp getter, setter;
|
|
224
|
+
JSObject *obj2;
|
|
225
|
+
jsid interned_id;
|
|
226
|
+
jsval v;
|
|
227
|
+
|
|
228
|
+
XPC_QS_ASSERT_CONTEXT_OK(cx);
|
|
229
|
+
JSObject *obj = JS_THIS_OBJECT(cx, vp);
|
|
230
|
+
if (!obj)
|
|
231
|
+
return JS_FALSE;
|
|
232
|
+
jsval idval = JS_ARGV(cx, vp)[0];
|
|
233
|
+
|
|
234
|
+
const char *name = JSVAL_IS_STRING(idval)
|
|
235
|
+
? JS_GetStringBytes(JSVAL_TO_STRING(idval))
|
|
236
|
+
: nsnull;
|
|
237
|
+
if(!JS_ValueToId(cx, idval, &interned_id) ||
|
|
238
|
+
!JS_LookupPropertyWithFlagsById(cx, obj, interned_id,
|
|
239
|
+
JSRESOLVE_QUALIFIED, &obj2, &v) ||
|
|
240
|
+
(obj2 &&
|
|
241
|
+
!JS_GetPropertyAttrsGetterAndSetterById(cx, obj2, interned_id, &attrs,
|
|
242
|
+
&found, &getter, &setter)))
|
|
243
|
+
return JS_FALSE;
|
|
244
|
+
|
|
245
|
+
// No property at all means no getters or setters possible.
|
|
246
|
+
if(!obj2 || !found)
|
|
247
|
+
{
|
|
248
|
+
JS_SET_RVAL(cx, vp, JSVAL_VOID);
|
|
249
|
+
return JS_TRUE;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
// Inline obj_lookup[GS]etter here.
|
|
253
|
+
if(wantGetter)
|
|
254
|
+
{
|
|
255
|
+
if(attrs & JSPROP_GETTER)
|
|
256
|
+
{
|
|
257
|
+
JS_SET_RVAL(cx, vp,
|
|
258
|
+
OBJECT_TO_JSVAL(JS_FUNC_TO_DATA_PTR(JSObject *, getter)));
|
|
259
|
+
return JS_TRUE;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
else
|
|
263
|
+
{
|
|
264
|
+
if(attrs & JSPROP_SETTER)
|
|
265
|
+
{
|
|
266
|
+
JS_SET_RVAL(cx, vp,
|
|
267
|
+
OBJECT_TO_JSVAL(JS_FUNC_TO_DATA_PTR(JSObject *, setter)));
|
|
268
|
+
return JS_TRUE;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// Since XPConnect doesn't use JSPropertyOps in any other contexts,
|
|
273
|
+
// ensuring that we have an XPConnect prototype object ensures that
|
|
274
|
+
// we are only going to expose quickstubbed properties to script.
|
|
275
|
+
// Also be careful not to overwrite existing properties!
|
|
276
|
+
if(!name ||
|
|
277
|
+
!IS_PROTO_CLASS(STOBJ_GET_CLASS(obj2)) ||
|
|
278
|
+
(attrs & (JSPROP_GETTER | JSPROP_SETTER)) ||
|
|
279
|
+
!(getter || setter))
|
|
280
|
+
{
|
|
281
|
+
JS_SET_RVAL(cx, vp, JSVAL_VOID);
|
|
282
|
+
return JS_TRUE;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
JSObject *getterobj, *setterobj;
|
|
286
|
+
if(!ReifyPropertyOps(cx, obj, idval, interned_id, name, getter, setter,
|
|
287
|
+
&getterobj, &setterobj))
|
|
288
|
+
return JS_FALSE;
|
|
289
|
+
|
|
290
|
+
JSObject *wantedobj = wantGetter ? getterobj : setterobj;
|
|
291
|
+
v = wantedobj ? OBJECT_TO_JSVAL(wantedobj) : JSVAL_VOID;
|
|
292
|
+
JS_SET_RVAL(cx, vp, v);
|
|
293
|
+
return JS_TRUE;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
static JSBool
|
|
297
|
+
SharedLookupGetter(JSContext *cx, uintN argc, jsval *vp)
|
|
298
|
+
{
|
|
299
|
+
return LookupGetterOrSetter(cx, PR_TRUE, vp);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
static JSBool
|
|
303
|
+
SharedLookupSetter(JSContext *cx, uintN argc, jsval *vp)
|
|
304
|
+
{
|
|
305
|
+
return LookupGetterOrSetter(cx, PR_FALSE, vp);
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
// XXX Hack! :-/
|
|
309
|
+
JS_FRIEND_API(JSBool) js_obj_defineGetter(JSContext *cx, uintN argc, jsval *vp);
|
|
310
|
+
JS_FRIEND_API(JSBool) js_obj_defineSetter(JSContext *cx, uintN argc, jsval *vp);
|
|
311
|
+
|
|
312
|
+
static JSBool
|
|
313
|
+
DefineGetterOrSetter(JSContext *cx, uintN argc, JSBool wantGetter, jsval *vp)
|
|
314
|
+
{
|
|
315
|
+
uintN attrs;
|
|
316
|
+
JSBool found;
|
|
317
|
+
JSPropertyOp getter, setter;
|
|
318
|
+
JSObject *obj2;
|
|
319
|
+
jsval v;
|
|
320
|
+
jsid interned_id;
|
|
321
|
+
|
|
322
|
+
XPC_QS_ASSERT_CONTEXT_OK(cx);
|
|
323
|
+
JSObject *obj = JS_THIS_OBJECT(cx, vp);
|
|
324
|
+
if (!obj)
|
|
325
|
+
return JS_FALSE;
|
|
326
|
+
JSFastNative forward = wantGetter ? js_obj_defineGetter : js_obj_defineSetter;
|
|
327
|
+
jsval id = (argc >= 1) ? JS_ARGV(cx, vp)[0] : JSVAL_VOID;
|
|
328
|
+
if(!JSVAL_IS_STRING(id))
|
|
329
|
+
return forward(cx, argc, vp);
|
|
330
|
+
JSString *str = JSVAL_TO_STRING(id);
|
|
331
|
+
|
|
332
|
+
const char *name = JS_GetStringBytes(str);
|
|
333
|
+
if(!JS_ValueToId(cx, id, &interned_id) ||
|
|
334
|
+
!JS_LookupPropertyWithFlagsById(cx, obj, interned_id,
|
|
335
|
+
JSRESOLVE_QUALIFIED, &obj2, &v) ||
|
|
336
|
+
(obj2 &&
|
|
337
|
+
!JS_GetPropertyAttrsGetterAndSetterById(cx, obj2, interned_id, &attrs,
|
|
338
|
+
&found, &getter, &setter)))
|
|
339
|
+
return JS_FALSE;
|
|
340
|
+
|
|
341
|
+
// The property didn't exist, already has a getter or setter, or is not
|
|
342
|
+
// our property, then just forward now.
|
|
343
|
+
if(!obj2 ||
|
|
344
|
+
(attrs & (JSPROP_GETTER | JSPROP_SETTER)) ||
|
|
345
|
+
!(getter || setter) ||
|
|
346
|
+
!IS_PROTO_CLASS(STOBJ_GET_CLASS(obj2)))
|
|
347
|
+
return forward(cx, argc, vp);
|
|
348
|
+
|
|
349
|
+
// Reify the getter and setter...
|
|
350
|
+
if(!ReifyPropertyOps(cx, obj, id, interned_id, name, getter, setter,
|
|
351
|
+
nsnull, nsnull))
|
|
352
|
+
return JS_FALSE;
|
|
353
|
+
|
|
354
|
+
return forward(cx, argc, vp);
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
static JSBool
|
|
358
|
+
SharedDefineGetter(JSContext *cx, uintN argc, jsval *vp)
|
|
359
|
+
{
|
|
360
|
+
return DefineGetterOrSetter(cx, argc, PR_TRUE, vp);
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
static JSBool
|
|
364
|
+
SharedDefineSetter(JSContext *cx, uintN argc, jsval *vp)
|
|
365
|
+
{
|
|
366
|
+
return DefineGetterOrSetter(cx, argc, PR_FALSE, vp);
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
JSBool
|
|
371
|
+
xpc_qsDefineQuickStubs(JSContext *cx, JSObject *proto, uintN flags,
|
|
372
|
+
PRUint32 ifacec, const nsIID **interfaces,
|
|
373
|
+
PRUint32 tableSize, const xpc_qsHashEntry *table)
|
|
374
|
+
{
|
|
375
|
+
/*
|
|
376
|
+
* Walk interfaces in reverse order to behave like XPConnect when a
|
|
377
|
+
* feature is defined in more than one of the interfaces.
|
|
378
|
+
*
|
|
379
|
+
* XPCNativeSet::FindMethod returns the first matching feature it finds,
|
|
380
|
+
* searching the interfaces forward. Here, definitions toward the
|
|
381
|
+
* front of 'interfaces' overwrite those toward the back.
|
|
382
|
+
*/
|
|
383
|
+
PRBool definedProperty = PR_FALSE;
|
|
384
|
+
for(uint32 i = ifacec; i-- != 0;)
|
|
385
|
+
{
|
|
386
|
+
const nsID &iid = *interfaces[i];
|
|
387
|
+
const xpc_qsHashEntry *entry =
|
|
388
|
+
LookupInterfaceOrAncestor(tableSize, table, iid);
|
|
389
|
+
|
|
390
|
+
if(entry)
|
|
391
|
+
{
|
|
392
|
+
for(;;)
|
|
393
|
+
{
|
|
394
|
+
// Define quick stubs for attributes.
|
|
395
|
+
const xpc_qsPropertySpec *ps = entry->properties;
|
|
396
|
+
if(ps)
|
|
397
|
+
{
|
|
398
|
+
for(; ps->name; ps++)
|
|
399
|
+
{
|
|
400
|
+
definedProperty = PR_TRUE;
|
|
401
|
+
if(!JS_DefineProperty(cx, proto, ps->name, JSVAL_VOID,
|
|
402
|
+
ps->getter, ps->setter,
|
|
403
|
+
flags | JSPROP_SHARED))
|
|
404
|
+
return JS_FALSE;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
// Define quick stubs for methods.
|
|
409
|
+
const xpc_qsFunctionSpec *fs = entry->functions;
|
|
410
|
+
if(fs)
|
|
411
|
+
{
|
|
412
|
+
for(; fs->name; fs++)
|
|
413
|
+
{
|
|
414
|
+
if(!JS_DefineFunction(
|
|
415
|
+
cx, proto, fs->name,
|
|
416
|
+
reinterpret_cast<JSNative>(fs->native),
|
|
417
|
+
fs->arity, flags | JSFUN_FAST_NATIVE))
|
|
418
|
+
return JS_FALSE;
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
const xpc_qsTraceableSpec *ts = entry->traceables;
|
|
423
|
+
if(ts)
|
|
424
|
+
{
|
|
425
|
+
for(; ts->name; ts++)
|
|
426
|
+
{
|
|
427
|
+
if(!JS_DefineFunction(
|
|
428
|
+
cx, proto, ts->name, ts->native, ts->arity,
|
|
429
|
+
flags | JSFUN_FAST_NATIVE | JSFUN_STUB_GSOPS |
|
|
430
|
+
JSFUN_TRACEABLE))
|
|
431
|
+
return JS_FALSE;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
// Next.
|
|
436
|
+
size_t j = entry->parentInterface;
|
|
437
|
+
if(j == XPC_QS_NULL_INDEX)
|
|
438
|
+
break;
|
|
439
|
+
entry = table + j;
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
static JSFunctionSpec getterfns[] = {
|
|
445
|
+
JS_FN("__lookupGetter__", SharedLookupGetter, 1, 0),
|
|
446
|
+
JS_FN("__lookupSetter__", SharedLookupSetter, 1, 0),
|
|
447
|
+
JS_FN("__defineGetter__", SharedDefineGetter, 2, 0),
|
|
448
|
+
JS_FN("__defineSetter__", SharedDefineSetter, 2, 0),
|
|
449
|
+
JS_FS_END
|
|
450
|
+
};
|
|
451
|
+
|
|
452
|
+
if(definedProperty && !JS_DefineFunctions(cx, proto, getterfns))
|
|
453
|
+
return JS_FALSE;
|
|
454
|
+
|
|
455
|
+
return JS_TRUE;
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
JSBool
|
|
459
|
+
xpc_qsThrow(JSContext *cx, nsresult rv)
|
|
460
|
+
{
|
|
461
|
+
XPCThrower::Throw(rv, cx);
|
|
462
|
+
return JS_FALSE;
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
/**
|
|
466
|
+
* Get the interface name and member name (for error messages).
|
|
467
|
+
*
|
|
468
|
+
* We could instead have each quick stub pass its name to the error-handling
|
|
469
|
+
* functions, as that name is statically known. But that would be redundant;
|
|
470
|
+
* the information is handy at runtime anyway. Also, this code often produces
|
|
471
|
+
* a more specific error message, e.g. "[nsIDOMHTMLDocument.appendChild]"
|
|
472
|
+
* rather than "[nsIDOMNode.appendChild]".
|
|
473
|
+
*/
|
|
474
|
+
static void
|
|
475
|
+
GetMemberInfo(JSObject *obj,
|
|
476
|
+
jsval memberId,
|
|
477
|
+
const char **ifaceName,
|
|
478
|
+
const char **memberName)
|
|
479
|
+
{
|
|
480
|
+
// Get the interface name. From DefinePropertyIfFound (in
|
|
481
|
+
// xpcwrappednativejsops.cpp) and XPCThrower::Verbosify.
|
|
482
|
+
//
|
|
483
|
+
// We could instead make the quick stub could pass in its interface name,
|
|
484
|
+
// but this code often produces a more specific error message, e.g.
|
|
485
|
+
*ifaceName = "Unknown";
|
|
486
|
+
|
|
487
|
+
NS_ASSERTION(IS_WRAPPER_CLASS(STOBJ_GET_CLASS(obj)) ||
|
|
488
|
+
STOBJ_GET_CLASS(obj) == &XPC_WN_Tearoff_JSClass,
|
|
489
|
+
"obj must be an XPCWrappedNative");
|
|
490
|
+
XPCWrappedNative *wrapper = (XPCWrappedNative *) STOBJ_GET_PRIVATE(obj);
|
|
491
|
+
XPCWrappedNativeProto *proto = wrapper->GetProto();
|
|
492
|
+
if(proto)
|
|
493
|
+
{
|
|
494
|
+
XPCNativeSet *set = proto->GetSet();
|
|
495
|
+
if(set)
|
|
496
|
+
{
|
|
497
|
+
XPCNativeMember *member;
|
|
498
|
+
XPCNativeInterface *iface;
|
|
499
|
+
|
|
500
|
+
if(set->FindMember(memberId, &member, &iface))
|
|
501
|
+
*ifaceName = iface->GetNameString();
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
*memberName = (JSVAL_IS_STRING(memberId)
|
|
506
|
+
? JS_GetStringBytes(JSVAL_TO_STRING(memberId))
|
|
507
|
+
: "unknown");
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
static void
|
|
511
|
+
GetMethodInfo(JSContext *cx,
|
|
512
|
+
jsval *vp,
|
|
513
|
+
const char **ifaceName,
|
|
514
|
+
const char **memberName)
|
|
515
|
+
{
|
|
516
|
+
JSObject *funobj = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
|
|
517
|
+
NS_ASSERTION(JS_ObjectIsFunction(cx, funobj),
|
|
518
|
+
"JSFastNative callee should be Function object");
|
|
519
|
+
JSString *str = JS_GetFunctionId((JSFunction *) JS_GetPrivate(cx, funobj));
|
|
520
|
+
jsval methodId = str ? STRING_TO_JSVAL(str) : JSVAL_NULL;
|
|
521
|
+
|
|
522
|
+
GetMemberInfo(JSVAL_TO_OBJECT(vp[1]), methodId, ifaceName, memberName);
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
static JSBool
|
|
526
|
+
ThrowCallFailed(JSContext *cx, nsresult rv,
|
|
527
|
+
const char *ifaceName, const char *memberName)
|
|
528
|
+
{
|
|
529
|
+
// From XPCThrower::ThrowBadResult.
|
|
530
|
+
char* sz;
|
|
531
|
+
const char* format;
|
|
532
|
+
const char* name;
|
|
533
|
+
|
|
534
|
+
/*
|
|
535
|
+
* If there is a pending exception when the native call returns and
|
|
536
|
+
* it has the same error result as returned by the native call, then
|
|
537
|
+
* the native call may be passing through an error from a previous JS
|
|
538
|
+
* call. So we'll just throw that exception into our JS.
|
|
539
|
+
*/
|
|
540
|
+
if(XPCThrower::CheckForPendingException(rv, cx))
|
|
541
|
+
return JS_FALSE;
|
|
542
|
+
|
|
543
|
+
// else...
|
|
544
|
+
|
|
545
|
+
if(!nsXPCException::NameAndFormatForNSResult(
|
|
546
|
+
NS_ERROR_XPC_NATIVE_RETURNED_FAILURE, nsnull, &format) ||
|
|
547
|
+
!format)
|
|
548
|
+
{
|
|
549
|
+
format = "";
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
if(nsXPCException::NameAndFormatForNSResult(rv, &name, nsnull)
|
|
553
|
+
&& name)
|
|
554
|
+
{
|
|
555
|
+
sz = JS_smprintf("%s 0x%x (%s) [%s.%s]",
|
|
556
|
+
format, rv, name, ifaceName, memberName);
|
|
557
|
+
}
|
|
558
|
+
else
|
|
559
|
+
{
|
|
560
|
+
sz = JS_smprintf("%s 0x%x [%s.%s]",
|
|
561
|
+
format, rv, ifaceName, memberName);
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
XPCThrower::BuildAndThrowException(cx, rv, sz);
|
|
565
|
+
|
|
566
|
+
if(sz)
|
|
567
|
+
JS_smprintf_free(sz);
|
|
568
|
+
|
|
569
|
+
return JS_FALSE;
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
JSBool
|
|
573
|
+
xpc_qsThrowGetterSetterFailed(JSContext *cx, nsresult rv, JSObject *obj,
|
|
574
|
+
jsval memberId)
|
|
575
|
+
{
|
|
576
|
+
const char *ifaceName, *memberName;
|
|
577
|
+
GetMemberInfo(obj, memberId, &ifaceName, &memberName);
|
|
578
|
+
return ThrowCallFailed(cx, rv, ifaceName, memberName);
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
JSBool
|
|
582
|
+
xpc_qsThrowMethodFailed(JSContext *cx, nsresult rv, jsval *vp)
|
|
583
|
+
{
|
|
584
|
+
const char *ifaceName, *memberName;
|
|
585
|
+
GetMethodInfo(cx, vp, &ifaceName, &memberName);
|
|
586
|
+
return ThrowCallFailed(cx, rv, ifaceName, memberName);
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
JSBool
|
|
590
|
+
xpc_qsThrowMethodFailedWithCcx(XPCCallContext &ccx, nsresult rv)
|
|
591
|
+
{
|
|
592
|
+
ThrowBadResult(rv, ccx);
|
|
593
|
+
return JS_FALSE;
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
void
|
|
597
|
+
xpc_qsThrowMethodFailedWithDetails(JSContext *cx, nsresult rv,
|
|
598
|
+
const char *ifaceName,
|
|
599
|
+
const char *memberName)
|
|
600
|
+
{
|
|
601
|
+
ThrowCallFailed(cx, rv, ifaceName, memberName);
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
static void
|
|
605
|
+
ThrowBadArg(JSContext *cx, nsresult rv,
|
|
606
|
+
const char *ifaceName, const char *memberName, uintN paramnum)
|
|
607
|
+
{
|
|
608
|
+
// From XPCThrower::ThrowBadParam.
|
|
609
|
+
char* sz;
|
|
610
|
+
const char* format;
|
|
611
|
+
|
|
612
|
+
if(!nsXPCException::NameAndFormatForNSResult(rv, nsnull, &format))
|
|
613
|
+
format = "";
|
|
614
|
+
|
|
615
|
+
sz = JS_smprintf("%s arg %u [%s.%s]",
|
|
616
|
+
format, (unsigned int) paramnum, ifaceName, memberName);
|
|
617
|
+
|
|
618
|
+
XPCThrower::BuildAndThrowException(cx, rv, sz);
|
|
619
|
+
|
|
620
|
+
if(sz)
|
|
621
|
+
JS_smprintf_free(sz);
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
void
|
|
625
|
+
xpc_qsThrowBadArg(JSContext *cx, nsresult rv, jsval *vp, uintN paramnum)
|
|
626
|
+
{
|
|
627
|
+
const char *ifaceName, *memberName;
|
|
628
|
+
GetMethodInfo(cx, vp, &ifaceName, &memberName);
|
|
629
|
+
ThrowBadArg(cx, rv, ifaceName, memberName, paramnum);
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
void
|
|
633
|
+
xpc_qsThrowBadArgWithCcx(XPCCallContext &ccx, nsresult rv, uintN paramnum)
|
|
634
|
+
{
|
|
635
|
+
XPCThrower::ThrowBadParam(rv, paramnum, ccx);
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
void
|
|
639
|
+
xpc_qsThrowBadArgWithDetails(JSContext *cx, nsresult rv, uintN paramnum,
|
|
640
|
+
const char *ifaceName, const char *memberName)
|
|
641
|
+
{
|
|
642
|
+
ThrowBadArg(cx, rv, ifaceName, memberName, paramnum);
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
void
|
|
646
|
+
xpc_qsThrowBadSetterValue(JSContext *cx, nsresult rv,
|
|
647
|
+
JSObject *obj, jsval propId)
|
|
648
|
+
{
|
|
649
|
+
const char *ifaceName, *memberName;
|
|
650
|
+
GetMemberInfo(obj, propId, &ifaceName, &memberName);
|
|
651
|
+
ThrowBadArg(cx, rv, ifaceName, memberName, 0);
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
xpc_qsDOMString::xpc_qsDOMString(JSContext *cx, jsval *pval)
|
|
655
|
+
{
|
|
656
|
+
// From the T_DOMSTRING case in XPCConvert::JSData2Native.
|
|
657
|
+
typedef implementation_type::char_traits traits;
|
|
658
|
+
jsval v;
|
|
659
|
+
JSString *s;
|
|
660
|
+
const jschar *chars;
|
|
661
|
+
size_t len;
|
|
662
|
+
|
|
663
|
+
v = *pval;
|
|
664
|
+
if(JSVAL_IS_STRING(v))
|
|
665
|
+
{
|
|
666
|
+
s = JSVAL_TO_STRING(v);
|
|
667
|
+
}
|
|
668
|
+
else
|
|
669
|
+
{
|
|
670
|
+
if(JSVAL_IS_NULL(v))
|
|
671
|
+
{
|
|
672
|
+
(new(mBuf) implementation_type(
|
|
673
|
+
traits::sEmptyBuffer, PRUint32(0)))->SetIsVoid(PR_TRUE);
|
|
674
|
+
mValid = JS_TRUE;
|
|
675
|
+
return;
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
s = JS_ValueToString(cx, v);
|
|
679
|
+
if(!s)
|
|
680
|
+
{
|
|
681
|
+
mValid = JS_FALSE;
|
|
682
|
+
return;
|
|
683
|
+
}
|
|
684
|
+
*pval = STRING_TO_JSVAL(s); // Root the new string.
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
len = JS_GetStringLength(s);
|
|
688
|
+
chars = (len == 0 ? traits::sEmptyBuffer : JS_GetStringChars(s));
|
|
689
|
+
new(mBuf) implementation_type(chars, len);
|
|
690
|
+
mValid = JS_TRUE;
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
xpc_qsAString::xpc_qsAString(JSContext *cx, jsval *pval)
|
|
694
|
+
{
|
|
695
|
+
// From the T_ASTRING case in XPCConvert::JSData2Native.
|
|
696
|
+
typedef implementation_type::char_traits traits;
|
|
697
|
+
jsval v;
|
|
698
|
+
JSString *s;
|
|
699
|
+
const jschar *chars;
|
|
700
|
+
size_t len;
|
|
701
|
+
|
|
702
|
+
v = *pval;
|
|
703
|
+
if(JSVAL_IS_STRING(v))
|
|
704
|
+
{
|
|
705
|
+
s = JSVAL_TO_STRING(v);
|
|
706
|
+
}
|
|
707
|
+
else
|
|
708
|
+
{
|
|
709
|
+
if(JSVAL_IS_NULL(v) || JSVAL_IS_VOID(v))
|
|
710
|
+
{
|
|
711
|
+
(new(mBuf) implementation_type(
|
|
712
|
+
traits::sEmptyBuffer, PRUint32(0)))->SetIsVoid(PR_TRUE);
|
|
713
|
+
mValid = JS_TRUE;
|
|
714
|
+
return;
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
s = JS_ValueToString(cx, v);
|
|
718
|
+
if(!s)
|
|
719
|
+
{
|
|
720
|
+
mValid = JS_FALSE;
|
|
721
|
+
return;
|
|
722
|
+
}
|
|
723
|
+
*pval = STRING_TO_JSVAL(s); // Root the new string.
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
len = JS_GetStringLength(s);
|
|
727
|
+
chars = (len == 0 ? traits::sEmptyBuffer : JS_GetStringChars(s));
|
|
728
|
+
new(mBuf) implementation_type(chars, len);
|
|
729
|
+
mValid = JS_TRUE;
|
|
730
|
+
}
|
|
731
|
+
|
|
732
|
+
xpc_qsACString::xpc_qsACString(JSContext *cx, jsval *pval)
|
|
733
|
+
{
|
|
734
|
+
// From the T_CSTRING case in XPCConvert::JSData2Native.
|
|
735
|
+
jsval v;
|
|
736
|
+
JSString *s;
|
|
737
|
+
|
|
738
|
+
v = *pval;
|
|
739
|
+
if(JSVAL_IS_STRING(v))
|
|
740
|
+
{
|
|
741
|
+
s = JSVAL_TO_STRING(v);
|
|
742
|
+
}
|
|
743
|
+
else
|
|
744
|
+
{
|
|
745
|
+
if(JSVAL_IS_NULL(v) || JSVAL_IS_VOID(v))
|
|
746
|
+
{
|
|
747
|
+
(new(mBuf) implementation_type())->SetIsVoid(PR_TRUE);
|
|
748
|
+
mValid = JS_TRUE;
|
|
749
|
+
return;
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
s = JS_ValueToString(cx, v);
|
|
753
|
+
if(!s)
|
|
754
|
+
{
|
|
755
|
+
mValid = JS_FALSE;
|
|
756
|
+
return;
|
|
757
|
+
}
|
|
758
|
+
*pval = STRING_TO_JSVAL(s); // Root the new string.
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
const char *bytes = JS_GetStringBytes(s);
|
|
762
|
+
size_t len = JS_GetStringLength(s);
|
|
763
|
+
new(mBuf) implementation_type(bytes, len);
|
|
764
|
+
mValid = JS_TRUE;
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
static nsresult
|
|
768
|
+
getNativeFromWrapper(XPCWrappedNative *wrapper,
|
|
769
|
+
const nsIID &iid,
|
|
770
|
+
void **ppThis,
|
|
771
|
+
nsISupports **pThisRef,
|
|
772
|
+
jsval *vp)
|
|
773
|
+
{
|
|
774
|
+
nsISupports *idobj = wrapper->GetIdentityObject();
|
|
775
|
+
|
|
776
|
+
// Try using the QITableEntry to avoid the extra AddRef and Release.
|
|
777
|
+
QITableEntry* entries = wrapper->GetOffsets();
|
|
778
|
+
if(entries)
|
|
779
|
+
{
|
|
780
|
+
for(QITableEntry* e = entries; e->iid; e++)
|
|
781
|
+
{
|
|
782
|
+
if(e->iid->Equals(iid))
|
|
783
|
+
{
|
|
784
|
+
*ppThis = (char*) idobj + e->offset - entries[0].offset;
|
|
785
|
+
*vp = OBJECT_TO_JSVAL(wrapper->GetFlatJSObject());
|
|
786
|
+
*pThisRef = nsnull;
|
|
787
|
+
return NS_OK;
|
|
788
|
+
}
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
nsresult rv = idobj->QueryInterface(iid, ppThis);
|
|
793
|
+
*pThisRef = static_cast<nsISupports*>(*ppThis);
|
|
794
|
+
if(NS_SUCCEEDED(rv))
|
|
795
|
+
*vp = OBJECT_TO_JSVAL(wrapper->GetFlatJSObject());
|
|
796
|
+
return rv;
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
JSBool
|
|
800
|
+
xpc_qsUnwrapThisImpl(JSContext *cx,
|
|
801
|
+
JSObject *obj,
|
|
802
|
+
const nsIID &iid,
|
|
803
|
+
void **ppThis,
|
|
804
|
+
nsISupports **pThisRef,
|
|
805
|
+
jsval *vp)
|
|
806
|
+
{
|
|
807
|
+
// From XPCWrappedNative::GetWrappedNativeOfJSObject.
|
|
808
|
+
//
|
|
809
|
+
// Usually IS_WRAPPER_CLASS is true the first time through the while loop,
|
|
810
|
+
// and the QueryInterface then succeeds.
|
|
811
|
+
|
|
812
|
+
NS_ASSERTION(obj, "this == null");
|
|
813
|
+
|
|
814
|
+
JSObject *cur = obj;
|
|
815
|
+
while(cur)
|
|
816
|
+
{
|
|
817
|
+
JSClass *clazz;
|
|
818
|
+
XPCWrappedNative *wrapper;
|
|
819
|
+
nsresult rv;
|
|
820
|
+
|
|
821
|
+
clazz = STOBJ_GET_CLASS(cur);
|
|
822
|
+
if(IS_WRAPPER_CLASS(clazz))
|
|
823
|
+
{
|
|
824
|
+
wrapper = (XPCWrappedNative*) xpc_GetJSPrivate(cur);
|
|
825
|
+
NS_ASSERTION(wrapper, "XPCWN wrapping nothing");
|
|
826
|
+
}
|
|
827
|
+
else if(clazz == &XPC_WN_Tearoff_JSClass)
|
|
828
|
+
{
|
|
829
|
+
wrapper = (XPCWrappedNative*) xpc_GetJSPrivate(STOBJ_GET_PARENT(cur));
|
|
830
|
+
NS_ASSERTION(wrapper, "XPCWN wrapping nothing");
|
|
831
|
+
}
|
|
832
|
+
else
|
|
833
|
+
{
|
|
834
|
+
JSObject *unsafeObj = XPCWrapper::Unwrap(cx, cur);
|
|
835
|
+
if(unsafeObj)
|
|
836
|
+
{
|
|
837
|
+
cur = unsafeObj;
|
|
838
|
+
continue;
|
|
839
|
+
}
|
|
840
|
+
|
|
841
|
+
// This goto is a bug, dutifully copied from
|
|
842
|
+
// XPCWrappedNative::GetWrappedNativeOfJSObject.
|
|
843
|
+
goto next;
|
|
844
|
+
}
|
|
845
|
+
|
|
846
|
+
rv = getNativeFromWrapper(wrapper, iid, ppThis, pThisRef, vp);
|
|
847
|
+
if(NS_SUCCEEDED(rv))
|
|
848
|
+
return JS_TRUE;
|
|
849
|
+
if(rv != NS_ERROR_NO_INTERFACE)
|
|
850
|
+
return xpc_qsThrow(cx, rv);
|
|
851
|
+
|
|
852
|
+
next:
|
|
853
|
+
cur = STOBJ_GET_PROTO(cur);
|
|
854
|
+
}
|
|
855
|
+
|
|
856
|
+
// If we didn't find a wrapper using the given obj, try again with obj's
|
|
857
|
+
// outer object, if it's got one.
|
|
858
|
+
|
|
859
|
+
JSClass *clazz = STOBJ_GET_CLASS(obj);
|
|
860
|
+
|
|
861
|
+
if((clazz->flags & JSCLASS_IS_EXTENDED) &&
|
|
862
|
+
((JSExtendedClass*)clazz)->outerObject)
|
|
863
|
+
{
|
|
864
|
+
JSObject *outer = ((JSExtendedClass*)clazz)->outerObject(cx, obj);
|
|
865
|
+
|
|
866
|
+
// Protect against infinite recursion through XOWs.
|
|
867
|
+
JSObject *unsafeObj;
|
|
868
|
+
clazz = STOBJ_GET_CLASS(outer);
|
|
869
|
+
if(clazz == &sXPC_XOW_JSClass.base &&
|
|
870
|
+
(unsafeObj = XPCWrapper::Unwrap(cx, outer)))
|
|
871
|
+
{
|
|
872
|
+
outer = unsafeObj;
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
if(outer && outer != obj)
|
|
876
|
+
return xpc_qsUnwrapThisImpl(cx, outer, iid, ppThis, pThisRef, vp);
|
|
877
|
+
}
|
|
878
|
+
|
|
879
|
+
*pThisRef = nsnull;
|
|
880
|
+
return xpc_qsThrow(cx, NS_ERROR_XPC_BAD_OP_ON_WN_PROTO);
|
|
881
|
+
}
|
|
882
|
+
|
|
883
|
+
JSBool
|
|
884
|
+
xpc_qsUnwrapThisFromCcxImpl(XPCCallContext &ccx,
|
|
885
|
+
const nsIID &iid,
|
|
886
|
+
void **ppThis,
|
|
887
|
+
nsISupports **pThisRef,
|
|
888
|
+
jsval *vp)
|
|
889
|
+
{
|
|
890
|
+
XPCWrappedNative *wrapper = ccx.GetWrapper();
|
|
891
|
+
if(!wrapper)
|
|
892
|
+
return xpc_qsThrow(ccx.GetJSContext(), NS_ERROR_XPC_BAD_OP_ON_WN_PROTO);
|
|
893
|
+
if(!wrapper->IsValid())
|
|
894
|
+
return xpc_qsThrow(ccx.GetJSContext(), NS_ERROR_XPC_HAS_BEEN_SHUTDOWN);
|
|
895
|
+
|
|
896
|
+
nsresult rv = getNativeFromWrapper(wrapper, iid, ppThis, pThisRef, vp);
|
|
897
|
+
if(NS_FAILED(rv))
|
|
898
|
+
return xpc_qsThrow(ccx.GetJSContext(), rv);
|
|
899
|
+
return JS_TRUE;
|
|
900
|
+
}
|
|
901
|
+
|
|
902
|
+
nsresult
|
|
903
|
+
xpc_qsUnwrapArgImpl(JSContext *cx,
|
|
904
|
+
jsval v,
|
|
905
|
+
const nsIID &iid,
|
|
906
|
+
void **ppArg)
|
|
907
|
+
{
|
|
908
|
+
// From XPCConvert::JSData2Native
|
|
909
|
+
if(JSVAL_IS_VOID(v) || JSVAL_IS_NULL(v))
|
|
910
|
+
return NS_OK;
|
|
911
|
+
|
|
912
|
+
if(!JSVAL_IS_OBJECT(v))
|
|
913
|
+
{
|
|
914
|
+
return ((JSVAL_IS_INT(v) && JSVAL_TO_INT(v) == 0)
|
|
915
|
+
? NS_ERROR_XPC_BAD_CONVERT_JS_ZERO_ISNOT_NULL
|
|
916
|
+
: NS_ERROR_XPC_BAD_CONVERT_JS);
|
|
917
|
+
}
|
|
918
|
+
JSObject *src = JSVAL_TO_OBJECT(v);
|
|
919
|
+
|
|
920
|
+
// From XPCConvert::JSObject2NativeInterface
|
|
921
|
+
XPCWrappedNative* wrappedNative =
|
|
922
|
+
XPCWrappedNative::GetWrappedNativeOfJSObject(cx, src);
|
|
923
|
+
nsISupports *iface;
|
|
924
|
+
if(wrappedNative)
|
|
925
|
+
{
|
|
926
|
+
iface = wrappedNative->GetIdentityObject();
|
|
927
|
+
if(NS_FAILED(iface->QueryInterface(iid, ppArg)))
|
|
928
|
+
return NS_ERROR_XPC_BAD_CONVERT_JS;
|
|
929
|
+
return NS_OK;
|
|
930
|
+
}
|
|
931
|
+
// else...
|
|
932
|
+
// Slow path.
|
|
933
|
+
|
|
934
|
+
// XXX E4X breaks the world. Don't try wrapping E4X objects!
|
|
935
|
+
// This hack can be removed (or changed accordingly) when the
|
|
936
|
+
// DOM <-> E4X bindings are complete, see bug 270553
|
|
937
|
+
if(JS_TypeOfValue(cx, OBJECT_TO_JSVAL(src)) == JSTYPE_XML)
|
|
938
|
+
return NS_ERROR_XPC_BAD_CONVERT_JS;
|
|
939
|
+
|
|
940
|
+
// Does the JSObject have 'nsISupportness'?
|
|
941
|
+
// XXX hmm, I wonder if this matters anymore with no
|
|
942
|
+
// oldstyle DOM objects around.
|
|
943
|
+
if(XPCConvert::GetISupportsFromJSObject(src, &iface))
|
|
944
|
+
{
|
|
945
|
+
if(!iface || NS_FAILED(iface->QueryInterface(iid, ppArg)))
|
|
946
|
+
return NS_ERROR_XPC_BAD_CONVERT_JS;
|
|
947
|
+
return NS_OK;
|
|
948
|
+
}
|
|
949
|
+
|
|
950
|
+
// Create the ccx needed for quick stubs.
|
|
951
|
+
XPCCallContext ccx(JS_CALLER, cx);
|
|
952
|
+
if(!ccx.IsValid())
|
|
953
|
+
return NS_ERROR_XPC_BAD_CONVERT_JS;
|
|
954
|
+
|
|
955
|
+
nsXPCWrappedJS *wrapper;
|
|
956
|
+
nsresult rv =
|
|
957
|
+
nsXPCWrappedJS::GetNewOrUsed(ccx, src, iid, nsnull, &wrapper);
|
|
958
|
+
if(NS_FAILED(rv) || !wrapper)
|
|
959
|
+
return rv;
|
|
960
|
+
|
|
961
|
+
// We need to go through the QueryInterface logic to make this return
|
|
962
|
+
// the right thing for the various 'special' interfaces; e.g.
|
|
963
|
+
// nsIPropertyBag. We must use AggregatedQueryInterface in cases where
|
|
964
|
+
// there is an outer to avoid nasty recursion.
|
|
965
|
+
rv = wrapper->QueryInterface(iid, ppArg);
|
|
966
|
+
NS_RELEASE(wrapper);
|
|
967
|
+
return rv;
|
|
968
|
+
}
|
|
969
|
+
|
|
970
|
+
JSBool
|
|
971
|
+
xpc_qsJsvalToCharStr(JSContext *cx, jsval *pval, char **pstr)
|
|
972
|
+
{
|
|
973
|
+
jsval v = *pval;
|
|
974
|
+
JSString *str;
|
|
975
|
+
|
|
976
|
+
if(JSVAL_IS_STRING(v))
|
|
977
|
+
{
|
|
978
|
+
str = JSVAL_TO_STRING(v);
|
|
979
|
+
}
|
|
980
|
+
else if(JSVAL_IS_VOID(v) || JSVAL_IS_NULL(v))
|
|
981
|
+
{
|
|
982
|
+
*pstr = NULL;
|
|
983
|
+
return JS_TRUE;
|
|
984
|
+
}
|
|
985
|
+
else
|
|
986
|
+
{
|
|
987
|
+
if(!(str = JS_ValueToString(cx, v)))
|
|
988
|
+
return JS_FALSE;
|
|
989
|
+
*pval = STRING_TO_JSVAL(str); // Root the new string.
|
|
990
|
+
}
|
|
991
|
+
|
|
992
|
+
*pstr = JS_GetStringBytes(str);
|
|
993
|
+
return JS_TRUE;
|
|
994
|
+
}
|
|
995
|
+
|
|
996
|
+
JSBool
|
|
997
|
+
xpc_qsJsvalToWcharStr(JSContext *cx, jsval *pval, PRUnichar **pstr)
|
|
998
|
+
{
|
|
999
|
+
jsval v = *pval;
|
|
1000
|
+
JSString *str;
|
|
1001
|
+
|
|
1002
|
+
if(JSVAL_IS_STRING(v))
|
|
1003
|
+
{
|
|
1004
|
+
str = JSVAL_TO_STRING(v);
|
|
1005
|
+
}
|
|
1006
|
+
else if(JSVAL_IS_VOID(v) || JSVAL_IS_NULL(v))
|
|
1007
|
+
{
|
|
1008
|
+
*pstr = NULL;
|
|
1009
|
+
return JS_TRUE;
|
|
1010
|
+
}
|
|
1011
|
+
else
|
|
1012
|
+
{
|
|
1013
|
+
if(!(str = JS_ValueToString(cx, v)))
|
|
1014
|
+
return JS_FALSE;
|
|
1015
|
+
*pval = STRING_TO_JSVAL(str); // Root the new string.
|
|
1016
|
+
}
|
|
1017
|
+
|
|
1018
|
+
*pstr = JS_GetStringChars(str);
|
|
1019
|
+
return JS_TRUE;
|
|
1020
|
+
}
|
|
1021
|
+
|
|
1022
|
+
JSBool
|
|
1023
|
+
xpc_qsStringToJsval(JSContext *cx, const nsAString &str, jsval *rval)
|
|
1024
|
+
{
|
|
1025
|
+
// From the T_DOMSTRING case in XPCConvert::NativeData2JS.
|
|
1026
|
+
if(str.IsVoid())
|
|
1027
|
+
{
|
|
1028
|
+
*rval = JSVAL_NULL;
|
|
1029
|
+
return JS_TRUE;
|
|
1030
|
+
}
|
|
1031
|
+
|
|
1032
|
+
JSString *jsstr = XPCStringConvert::ReadableToJSString(cx, str);
|
|
1033
|
+
if(!jsstr)
|
|
1034
|
+
return JS_FALSE;
|
|
1035
|
+
*rval = STRING_TO_JSVAL(jsstr);
|
|
1036
|
+
return JS_TRUE;
|
|
1037
|
+
}
|
|
1038
|
+
|
|
1039
|
+
JSBool
|
|
1040
|
+
xpc_qsXPCOMObjectToJsval(XPCCallContext &ccx, nsISupports *p,
|
|
1041
|
+
nsWrapperCache *cache, XPCNativeInterface *iface,
|
|
1042
|
+
jsval *rval)
|
|
1043
|
+
{
|
|
1044
|
+
// From the T_INTERFACE case in XPCConvert::NativeData2JS.
|
|
1045
|
+
// This is one of the slowest things quick stubs do.
|
|
1046
|
+
|
|
1047
|
+
JSObject *scope = ccx.GetCurrentJSObject();
|
|
1048
|
+
NS_ASSERTION(scope, "bad ccx");
|
|
1049
|
+
|
|
1050
|
+
if(!iface)
|
|
1051
|
+
return xpc_qsThrow(ccx, NS_ERROR_XPC_BAD_CONVERT_NATIVE);
|
|
1052
|
+
|
|
1053
|
+
// XXX The OBJ_IS_NOT_GLOBAL here is not really right. In
|
|
1054
|
+
// fact, this code is depending on the fact that the
|
|
1055
|
+
// global object will not have been collected, and
|
|
1056
|
+
// therefore this NativeInterface2JSObject will not end up
|
|
1057
|
+
// creating a new XPCNativeScriptableShared.
|
|
1058
|
+
nsresult rv;
|
|
1059
|
+
if(!XPCConvert::NativeInterface2JSObject(ccx, rval, nsnull, p, nsnull,
|
|
1060
|
+
iface, cache, scope, PR_TRUE,
|
|
1061
|
+
OBJ_IS_NOT_GLOBAL, &rv))
|
|
1062
|
+
{
|
|
1063
|
+
// I can't tell if NativeInterface2JSObject throws JS exceptions
|
|
1064
|
+
// or not. This is a sloppy stab at the right semantics; the
|
|
1065
|
+
// method really ought to be fixed to behave consistently.
|
|
1066
|
+
if(!JS_IsExceptionPending(ccx))
|
|
1067
|
+
xpc_qsThrow(ccx, NS_FAILED(rv) ? rv : NS_ERROR_UNEXPECTED);
|
|
1068
|
+
return JS_FALSE;
|
|
1069
|
+
}
|
|
1070
|
+
|
|
1071
|
+
#ifdef DEBUG
|
|
1072
|
+
JSObject* jsobj = JSVAL_TO_OBJECT(*rval);
|
|
1073
|
+
if(jsobj && !STOBJ_GET_PARENT(jsobj))
|
|
1074
|
+
NS_ASSERTION(STOBJ_GET_CLASS(jsobj)->flags & JSCLASS_IS_GLOBAL,
|
|
1075
|
+
"Why did we recreate this wrapper?");
|
|
1076
|
+
#endif
|
|
1077
|
+
|
|
1078
|
+
return JS_TRUE;
|
|
1079
|
+
}
|
|
1080
|
+
|
|
1081
|
+
JSBool
|
|
1082
|
+
xpc_qsVariantToJsval(XPCCallContext &ccx,
|
|
1083
|
+
nsIVariant *p,
|
|
1084
|
+
uintN paramNum,
|
|
1085
|
+
jsval *rval)
|
|
1086
|
+
{
|
|
1087
|
+
// From the T_INTERFACE case in XPCConvert::NativeData2JS.
|
|
1088
|
+
// Error handling is in XPCWrappedNative::CallMethod.
|
|
1089
|
+
if(p)
|
|
1090
|
+
{
|
|
1091
|
+
nsresult rv;
|
|
1092
|
+
JSBool ok = XPCVariant::VariantDataToJS(ccx, p,
|
|
1093
|
+
ccx.GetCurrentJSObject(),
|
|
1094
|
+
&rv, rval);
|
|
1095
|
+
if (!ok)
|
|
1096
|
+
XPCThrower::ThrowBadParam(rv, 0, ccx);
|
|
1097
|
+
return ok;
|
|
1098
|
+
}
|
|
1099
|
+
*rval = JSVAL_NULL;
|
|
1100
|
+
return JS_TRUE;
|
|
1101
|
+
}
|
|
1102
|
+
|
|
1103
|
+
JSBool
|
|
1104
|
+
xpc_qsReadOnlySetter(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
|
|
1105
|
+
{
|
|
1106
|
+
JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,
|
|
1107
|
+
JSMSG_GETTER_ONLY, NULL);
|
|
1108
|
+
return JS_FALSE;
|
|
1109
|
+
}
|
|
1110
|
+
|
|
1111
|
+
#ifdef DEBUG
|
|
1112
|
+
void
|
|
1113
|
+
xpc_qsAssertContextOK(JSContext *cx)
|
|
1114
|
+
{
|
|
1115
|
+
XPCPerThreadData *thread = XPCPerThreadData::GetData(cx);
|
|
1116
|
+
XPCJSContextStack* stack = thread->GetJSContextStack();
|
|
1117
|
+
|
|
1118
|
+
JSContext* topJSContext = nsnull;
|
|
1119
|
+
nsresult rv = stack->Peek(&topJSContext);
|
|
1120
|
+
NS_ASSERTION(NS_SUCCEEDED(rv), "XPCJSContextStack::Peek failed");
|
|
1121
|
+
|
|
1122
|
+
// This is what we're actually trying to assert here.
|
|
1123
|
+
NS_ASSERTION(cx == topJSContext, "wrong context on XPCJSContextStack!");
|
|
1124
|
+
|
|
1125
|
+
NS_ASSERTION(XPCPerThreadData::IsMainThread(cx),
|
|
1126
|
+
"XPConnect quick stub called on non-main thread");
|
|
1127
|
+
}
|
|
1128
|
+
#endif
|