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,399 @@
|
|
|
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 Communicator client code, released
|
|
17
|
+
* March 31, 1998.
|
|
18
|
+
*
|
|
19
|
+
* The Initial Developer of the Original Code is
|
|
20
|
+
* Netscape Communications Corporation.
|
|
21
|
+
* Portions created by the Initial Developer are Copyright (C) 1998
|
|
22
|
+
* the Initial Developer. All Rights Reserved.
|
|
23
|
+
*
|
|
24
|
+
* Contributor(s):
|
|
25
|
+
* John Bandhauer <jband@netscape.com> (original author)
|
|
26
|
+
*
|
|
27
|
+
* Alternatively, the contents of this file may be used under the terms of
|
|
28
|
+
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
|
29
|
+
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
30
|
+
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
31
|
+
* of those above. If you wish to allow use of your version of this file only
|
|
32
|
+
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
33
|
+
* use your version of this file under the terms of the MPL, indicate your
|
|
34
|
+
* decision by deleting the provisions above and replace them with the notice
|
|
35
|
+
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
36
|
+
* the provisions above, a recipient may use your version of this file under
|
|
37
|
+
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
38
|
+
*
|
|
39
|
+
* ***** END LICENSE BLOCK ***** */
|
|
40
|
+
|
|
41
|
+
/* Code for throwing errors into JavaScript. */
|
|
42
|
+
|
|
43
|
+
#include "xpcprivate.h"
|
|
44
|
+
#include "XPCWrapper.h"
|
|
45
|
+
|
|
46
|
+
JSBool XPCThrower::sVerbose = JS_TRUE;
|
|
47
|
+
|
|
48
|
+
// static
|
|
49
|
+
void
|
|
50
|
+
XPCThrower::Throw(nsresult rv, JSContext* cx)
|
|
51
|
+
{
|
|
52
|
+
const char* format;
|
|
53
|
+
if(JS_IsExceptionPending(cx))
|
|
54
|
+
return;
|
|
55
|
+
if(!nsXPCException::NameAndFormatForNSResult(rv, nsnull, &format))
|
|
56
|
+
format = "";
|
|
57
|
+
BuildAndThrowException(cx, rv, format);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/*
|
|
61
|
+
* If there has already been an exception thrown, see if we're throwing the
|
|
62
|
+
* same sort of exception, and if we are, don't clobber the old one. ccx
|
|
63
|
+
* should be the current call context.
|
|
64
|
+
*/
|
|
65
|
+
// static
|
|
66
|
+
JSBool
|
|
67
|
+
XPCThrower::CheckForPendingException(nsresult result, JSContext *cx)
|
|
68
|
+
{
|
|
69
|
+
nsXPConnect* xpc = nsXPConnect::GetXPConnect();
|
|
70
|
+
if(!xpc)
|
|
71
|
+
return JS_FALSE;
|
|
72
|
+
|
|
73
|
+
nsCOMPtr<nsIException> e;
|
|
74
|
+
xpc->GetPendingException(getter_AddRefs(e));
|
|
75
|
+
if(!e)
|
|
76
|
+
return JS_FALSE;
|
|
77
|
+
xpc->SetPendingException(nsnull);
|
|
78
|
+
|
|
79
|
+
nsresult e_result;
|
|
80
|
+
if(NS_FAILED(e->GetResult(&e_result)) || e_result != result)
|
|
81
|
+
return JS_FALSE;
|
|
82
|
+
|
|
83
|
+
if(!ThrowExceptionObject(cx, e))
|
|
84
|
+
JS_ReportOutOfMemory(cx);
|
|
85
|
+
return JS_TRUE;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// static
|
|
89
|
+
void
|
|
90
|
+
XPCThrower::Throw(nsresult rv, XPCCallContext& ccx)
|
|
91
|
+
{
|
|
92
|
+
char* sz;
|
|
93
|
+
const char* format;
|
|
94
|
+
|
|
95
|
+
if(CheckForPendingException(rv, ccx))
|
|
96
|
+
return;
|
|
97
|
+
|
|
98
|
+
if(!nsXPCException::NameAndFormatForNSResult(rv, nsnull, &format))
|
|
99
|
+
format = "";
|
|
100
|
+
|
|
101
|
+
sz = (char*) format;
|
|
102
|
+
|
|
103
|
+
if(sz && sVerbose)
|
|
104
|
+
Verbosify(ccx, &sz, PR_FALSE);
|
|
105
|
+
|
|
106
|
+
BuildAndThrowException(ccx, rv, sz);
|
|
107
|
+
|
|
108
|
+
if(sz && sz != format)
|
|
109
|
+
JS_smprintf_free(sz);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
// static
|
|
114
|
+
void
|
|
115
|
+
XPCThrower::ThrowBadResult(nsresult rv, nsresult result, XPCCallContext& ccx)
|
|
116
|
+
{
|
|
117
|
+
char* sz;
|
|
118
|
+
const char* format;
|
|
119
|
+
const char* name;
|
|
120
|
+
|
|
121
|
+
/*
|
|
122
|
+
* If there is a pending exception when the native call returns and
|
|
123
|
+
* it has the same error result as returned by the native call, then
|
|
124
|
+
* the native call may be passing through an error from a previous JS
|
|
125
|
+
* call. So we'll just throw that exception into our JS.
|
|
126
|
+
*/
|
|
127
|
+
|
|
128
|
+
if(CheckForPendingException(result, ccx))
|
|
129
|
+
return;
|
|
130
|
+
|
|
131
|
+
// else...
|
|
132
|
+
|
|
133
|
+
if(!nsXPCException::NameAndFormatForNSResult(rv, nsnull, &format) || !format)
|
|
134
|
+
format = "";
|
|
135
|
+
|
|
136
|
+
if(nsXPCException::NameAndFormatForNSResult(result, &name, nsnull) && name)
|
|
137
|
+
sz = JS_smprintf("%s 0x%x (%s)", format, result, name);
|
|
138
|
+
else
|
|
139
|
+
sz = JS_smprintf("%s 0x%x", format, result);
|
|
140
|
+
|
|
141
|
+
if(sz && sVerbose)
|
|
142
|
+
Verbosify(ccx, &sz, PR_TRUE);
|
|
143
|
+
|
|
144
|
+
BuildAndThrowException(ccx, result, sz);
|
|
145
|
+
|
|
146
|
+
if(sz)
|
|
147
|
+
JS_smprintf_free(sz);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// static
|
|
151
|
+
void
|
|
152
|
+
XPCThrower::ThrowBadParam(nsresult rv, uintN paramNum, XPCCallContext& ccx)
|
|
153
|
+
{
|
|
154
|
+
char* sz;
|
|
155
|
+
const char* format;
|
|
156
|
+
|
|
157
|
+
if(!nsXPCException::NameAndFormatForNSResult(rv, nsnull, &format))
|
|
158
|
+
format = "";
|
|
159
|
+
|
|
160
|
+
sz = JS_smprintf("%s arg %d", format, paramNum);
|
|
161
|
+
|
|
162
|
+
if(sz && sVerbose)
|
|
163
|
+
Verbosify(ccx, &sz, PR_TRUE);
|
|
164
|
+
|
|
165
|
+
BuildAndThrowException(ccx, rv, sz);
|
|
166
|
+
|
|
167
|
+
if(sz)
|
|
168
|
+
JS_smprintf_free(sz);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
// static
|
|
173
|
+
void
|
|
174
|
+
XPCThrower::Verbosify(XPCCallContext& ccx,
|
|
175
|
+
char** psz, PRBool own)
|
|
176
|
+
{
|
|
177
|
+
char* sz = nsnull;
|
|
178
|
+
|
|
179
|
+
if(ccx.HasInterfaceAndMember())
|
|
180
|
+
{
|
|
181
|
+
XPCNativeInterface* iface = ccx.GetInterface();
|
|
182
|
+
#ifdef XPC_IDISPATCH_SUPPORT
|
|
183
|
+
NS_ASSERTION(ccx.GetIDispatchMember() == nsnull ||
|
|
184
|
+
ccx.GetMember() == nsnull,
|
|
185
|
+
"Both IDispatch member and regular XPCOM member "
|
|
186
|
+
"were set in XPCCallContext");
|
|
187
|
+
char const * name;
|
|
188
|
+
if(ccx.GetIDispatchMember())
|
|
189
|
+
{
|
|
190
|
+
XPCDispInterface::Member * member =
|
|
191
|
+
reinterpret_cast<XPCDispInterface::Member*>(ccx.GetIDispatchMember());
|
|
192
|
+
if(member && JSVAL_IS_STRING(member->GetName()))
|
|
193
|
+
{
|
|
194
|
+
name = JS_GetStringBytes(JSVAL_TO_STRING(member->GetName()));
|
|
195
|
+
}
|
|
196
|
+
else
|
|
197
|
+
name = "Unknown";
|
|
198
|
+
}
|
|
199
|
+
else
|
|
200
|
+
name = iface->GetMemberName(ccx, ccx.GetMember());
|
|
201
|
+
sz = JS_smprintf("%s [%s.%s]",
|
|
202
|
+
*psz,
|
|
203
|
+
iface->GetNameString(),
|
|
204
|
+
name);
|
|
205
|
+
#else
|
|
206
|
+
sz = JS_smprintf("%s [%s.%s]",
|
|
207
|
+
*psz,
|
|
208
|
+
iface->GetNameString(),
|
|
209
|
+
iface->GetMemberName(ccx, ccx.GetMember()));
|
|
210
|
+
#endif
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
if(sz)
|
|
214
|
+
{
|
|
215
|
+
if(own)
|
|
216
|
+
JS_smprintf_free(*psz);
|
|
217
|
+
*psz = sz;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// static
|
|
222
|
+
void
|
|
223
|
+
XPCThrower::BuildAndThrowException(JSContext* cx, nsresult rv, const char* sz)
|
|
224
|
+
{
|
|
225
|
+
JSBool success = JS_FALSE;
|
|
226
|
+
|
|
227
|
+
/* no need to set an expection if the security manager already has */
|
|
228
|
+
if(rv == NS_ERROR_XPC_SECURITY_MANAGER_VETO && JS_IsExceptionPending(cx))
|
|
229
|
+
return;
|
|
230
|
+
nsCOMPtr<nsIException> finalException;
|
|
231
|
+
nsCOMPtr<nsIException> defaultException;
|
|
232
|
+
nsXPCException::NewException(sz, rv, nsnull, nsnull, getter_AddRefs(defaultException));
|
|
233
|
+
XPCPerThreadData* tls = XPCPerThreadData::GetData(cx);
|
|
234
|
+
if(tls)
|
|
235
|
+
{
|
|
236
|
+
nsIExceptionManager * exceptionManager = tls->GetExceptionManager();
|
|
237
|
+
if(exceptionManager)
|
|
238
|
+
{
|
|
239
|
+
// Ask the provider for the exception, if there is no provider
|
|
240
|
+
// we expect it to set e to null
|
|
241
|
+
exceptionManager->GetExceptionFromProvider(
|
|
242
|
+
rv,
|
|
243
|
+
defaultException,
|
|
244
|
+
getter_AddRefs(finalException));
|
|
245
|
+
// We should get at least the defaultException back,
|
|
246
|
+
// but just in case
|
|
247
|
+
if(finalException == nsnull)
|
|
248
|
+
{
|
|
249
|
+
finalException = defaultException;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
// XXX Should we put the following test and call to JS_ReportOutOfMemory
|
|
254
|
+
// inside this test?
|
|
255
|
+
if(finalException)
|
|
256
|
+
success = ThrowExceptionObject(cx, finalException);
|
|
257
|
+
// If we weren't able to build or throw an exception we're
|
|
258
|
+
// most likely out of memory
|
|
259
|
+
if(!success)
|
|
260
|
+
JS_ReportOutOfMemory(cx);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
static PRBool
|
|
264
|
+
IsCallerChrome(JSContext* cx)
|
|
265
|
+
{
|
|
266
|
+
nsresult rv;
|
|
267
|
+
|
|
268
|
+
nsCOMPtr<nsIScriptSecurityManager> secMan;
|
|
269
|
+
if(XPCPerThreadData::IsMainThread(cx))
|
|
270
|
+
{
|
|
271
|
+
secMan = XPCWrapper::GetSecurityManager();
|
|
272
|
+
}
|
|
273
|
+
else
|
|
274
|
+
{
|
|
275
|
+
nsXPConnect* xpc = nsXPConnect::GetXPConnect();
|
|
276
|
+
if(!xpc)
|
|
277
|
+
return PR_FALSE;
|
|
278
|
+
|
|
279
|
+
nsCOMPtr<nsIXPCSecurityManager> xpcSecMan;
|
|
280
|
+
PRUint16 flags = 0;
|
|
281
|
+
rv = xpc->GetSecurityManagerForJSContext(cx, getter_AddRefs(xpcSecMan),
|
|
282
|
+
&flags);
|
|
283
|
+
if(NS_FAILED(rv) || !xpcSecMan)
|
|
284
|
+
return PR_FALSE;
|
|
285
|
+
|
|
286
|
+
secMan = do_QueryInterface(xpcSecMan);
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
if(!secMan)
|
|
290
|
+
return PR_FALSE;
|
|
291
|
+
|
|
292
|
+
PRBool isChrome;
|
|
293
|
+
rv = secMan->SubjectPrincipalIsSystem(&isChrome);
|
|
294
|
+
return NS_SUCCEEDED(rv) && isChrome;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
// static
|
|
298
|
+
JSBool
|
|
299
|
+
XPCThrower::ThrowExceptionObject(JSContext* cx, nsIException* e)
|
|
300
|
+
{
|
|
301
|
+
JSBool success = JS_FALSE;
|
|
302
|
+
if(e)
|
|
303
|
+
{
|
|
304
|
+
nsCOMPtr<nsXPCException> xpcEx;
|
|
305
|
+
jsval thrown;
|
|
306
|
+
nsXPConnect* xpc;
|
|
307
|
+
|
|
308
|
+
// If we stored the original thrown JS value in the exception
|
|
309
|
+
// (see XPCConvert::ConstructException) and we are in a web
|
|
310
|
+
// context (i.e., not chrome), rethrow the original value.
|
|
311
|
+
if(!IsCallerChrome(cx) &&
|
|
312
|
+
(xpcEx = do_QueryInterface(e)) &&
|
|
313
|
+
xpcEx->StealThrownJSVal(&thrown))
|
|
314
|
+
{
|
|
315
|
+
JS_SetPendingException(cx, thrown);
|
|
316
|
+
success = JS_TRUE;
|
|
317
|
+
}
|
|
318
|
+
else if((xpc = nsXPConnect::GetXPConnect()))
|
|
319
|
+
{
|
|
320
|
+
JSObject* glob = JS_GetScopeChain(cx);
|
|
321
|
+
if(!glob)
|
|
322
|
+
return JS_FALSE;
|
|
323
|
+
glob = JS_GetGlobalForObject(cx, glob);
|
|
324
|
+
|
|
325
|
+
nsCOMPtr<nsIXPConnectJSObjectHolder> holder;
|
|
326
|
+
nsresult rv = xpc->WrapNative(cx, glob, e,
|
|
327
|
+
NS_GET_IID(nsIException),
|
|
328
|
+
getter_AddRefs(holder));
|
|
329
|
+
if(NS_SUCCEEDED(rv) && holder)
|
|
330
|
+
{
|
|
331
|
+
JSObject* obj;
|
|
332
|
+
if(NS_SUCCEEDED(holder->GetJSObject(&obj)))
|
|
333
|
+
{
|
|
334
|
+
JS_SetPendingException(cx, OBJECT_TO_JSVAL(obj));
|
|
335
|
+
success = JS_TRUE;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
return success;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
#ifdef XPC_IDISPATCH_SUPPORT
|
|
344
|
+
// static
|
|
345
|
+
void
|
|
346
|
+
XPCThrower::ThrowCOMError(JSContext* cx, unsigned long COMErrorCode,
|
|
347
|
+
nsresult rv, const EXCEPINFO * exception)
|
|
348
|
+
{
|
|
349
|
+
nsCAutoString msg;
|
|
350
|
+
IErrorInfo * pError;
|
|
351
|
+
const char * format;
|
|
352
|
+
if(!nsXPCException::NameAndFormatForNSResult(rv, nsnull, &format))
|
|
353
|
+
format = "";
|
|
354
|
+
msg = format;
|
|
355
|
+
if(exception)
|
|
356
|
+
{
|
|
357
|
+
msg += static_cast<const char *>
|
|
358
|
+
(_bstr_t(exception->bstrSource, false));
|
|
359
|
+
msg += " : ";
|
|
360
|
+
msg.AppendInt(static_cast<PRUint32>(COMErrorCode));
|
|
361
|
+
msg += " - ";
|
|
362
|
+
msg += static_cast<const char *>
|
|
363
|
+
(_bstr_t(exception->bstrDescription, false));
|
|
364
|
+
}
|
|
365
|
+
else
|
|
366
|
+
{
|
|
367
|
+
// Get the current COM error object
|
|
368
|
+
unsigned long result = GetErrorInfo(0, &pError);
|
|
369
|
+
if(SUCCEEDED(result) && pError)
|
|
370
|
+
{
|
|
371
|
+
// Build an error message from the COM error object
|
|
372
|
+
BSTR bstrSource = NULL;
|
|
373
|
+
if(SUCCEEDED(pError->GetSource(&bstrSource)) && bstrSource)
|
|
374
|
+
{
|
|
375
|
+
_bstr_t src(bstrSource, false);
|
|
376
|
+
msg += static_cast<const char *>(src);
|
|
377
|
+
msg += " : ";
|
|
378
|
+
}
|
|
379
|
+
msg.AppendInt(static_cast<PRUint32>(COMErrorCode), 16);
|
|
380
|
+
BSTR bstrDesc = NULL;
|
|
381
|
+
if(SUCCEEDED(pError->GetDescription(&bstrDesc)) && bstrDesc)
|
|
382
|
+
{
|
|
383
|
+
msg += " - ";
|
|
384
|
+
_bstr_t desc(bstrDesc, false);
|
|
385
|
+
msg += static_cast<const char *>(desc);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
else
|
|
389
|
+
{
|
|
390
|
+
// No error object, so just report the result
|
|
391
|
+
msg += "COM Error Result = ";
|
|
392
|
+
msg.AppendInt(static_cast<PRUint32>(COMErrorCode), 16);
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
XPCThrower::BuildAndThrowException(cx, rv, msg.get());
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
#endif
|
|
@@ -0,0 +1,850 @@
|
|
|
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 Communicator client code, released
|
|
17
|
+
* March 31, 1998.
|
|
18
|
+
*
|
|
19
|
+
* The Initial Developer of the Original Code is
|
|
20
|
+
* Netscape Communications Corporation.
|
|
21
|
+
* Portions created by the Initial Developer are Copyright (C) 1998
|
|
22
|
+
* the Initial Developer. All Rights Reserved.
|
|
23
|
+
*
|
|
24
|
+
* Contributor(s):
|
|
25
|
+
* John Bandhauer <jband@netscape.com> (original author)
|
|
26
|
+
*
|
|
27
|
+
* Alternatively, the contents of this file may be used under the terms of
|
|
28
|
+
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
|
29
|
+
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
30
|
+
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
31
|
+
* of those above. If you wish to allow use of your version of this file only
|
|
32
|
+
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
33
|
+
* use your version of this file under the terms of the MPL, indicate your
|
|
34
|
+
* decision by deleting the provisions above and replace them with the notice
|
|
35
|
+
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
36
|
+
* the provisions above, a recipient may use your version of this file under
|
|
37
|
+
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
38
|
+
*
|
|
39
|
+
* ***** END LICENSE BLOCK ***** */
|
|
40
|
+
|
|
41
|
+
/* nsIVariant implementation for xpconnect. */
|
|
42
|
+
|
|
43
|
+
#include "xpcprivate.h"
|
|
44
|
+
|
|
45
|
+
NS_IMPL_CYCLE_COLLECTION_CLASS(XPCVariant)
|
|
46
|
+
|
|
47
|
+
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(XPCVariant)
|
|
48
|
+
NS_INTERFACE_MAP_ENTRY(XPCVariant)
|
|
49
|
+
NS_INTERFACE_MAP_ENTRY(nsIVariant)
|
|
50
|
+
NS_INTERFACE_MAP_ENTRY(nsISupports)
|
|
51
|
+
NS_IMPL_QUERY_CLASSINFO(XPCVariant)
|
|
52
|
+
NS_INTERFACE_MAP_END
|
|
53
|
+
NS_IMPL_CI_INTERFACE_GETTER2(XPCVariant, XPCVariant, nsIVariant)
|
|
54
|
+
|
|
55
|
+
NS_IMPL_CYCLE_COLLECTING_ADDREF(XPCVariant)
|
|
56
|
+
NS_IMPL_CYCLE_COLLECTING_RELEASE(XPCVariant)
|
|
57
|
+
|
|
58
|
+
XPCVariant::XPCVariant(XPCCallContext& ccx, jsval aJSVal)
|
|
59
|
+
: mJSVal(aJSVal)
|
|
60
|
+
{
|
|
61
|
+
nsVariant::Initialize(&mData);
|
|
62
|
+
if(!JSVAL_IS_PRIMITIVE(mJSVal))
|
|
63
|
+
{
|
|
64
|
+
// If the incoming object is an XPCWrappedNative, then it could be a
|
|
65
|
+
// double-wrapped object, and we should return the double-wrapped
|
|
66
|
+
// object back out to script.
|
|
67
|
+
|
|
68
|
+
JSObject* proto;
|
|
69
|
+
XPCWrappedNative* wn =
|
|
70
|
+
XPCWrappedNative::GetWrappedNativeOfJSObject(ccx,
|
|
71
|
+
JSVAL_TO_OBJECT(mJSVal),
|
|
72
|
+
nsnull,
|
|
73
|
+
&proto);
|
|
74
|
+
mReturnRawObject = !wn && !proto;
|
|
75
|
+
}
|
|
76
|
+
else
|
|
77
|
+
mReturnRawObject = JS_FALSE;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
XPCTraceableVariant::~XPCTraceableVariant()
|
|
81
|
+
{
|
|
82
|
+
NS_ASSERTION(JSVAL_IS_GCTHING(mJSVal), "Must be traceable or unlinked");
|
|
83
|
+
|
|
84
|
+
// If mJSVal is JSVAL_STRING, we don't need to clean anything up;
|
|
85
|
+
// simply removing the string from the root set is good.
|
|
86
|
+
if(!JSVAL_IS_STRING(mJSVal))
|
|
87
|
+
nsVariant::Cleanup(&mData);
|
|
88
|
+
|
|
89
|
+
if(!JSVAL_IS_NULL(mJSVal))
|
|
90
|
+
RemoveFromRootSet(nsXPConnect::GetRuntimeInstance()->GetJSRuntime());
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
void XPCTraceableVariant::TraceJS(JSTracer* trc)
|
|
94
|
+
{
|
|
95
|
+
NS_ASSERTION(JSVAL_IS_TRACEABLE(mJSVal), "Must be traceable");
|
|
96
|
+
JS_SET_TRACING_DETAILS(trc, PrintTraceName, this, 0);
|
|
97
|
+
JS_CallTracer(trc, JSVAL_TO_TRACEABLE(mJSVal), JSVAL_TRACE_KIND(mJSVal));
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
#ifdef DEBUG
|
|
101
|
+
// static
|
|
102
|
+
void
|
|
103
|
+
XPCTraceableVariant::PrintTraceName(JSTracer* trc, char *buf, size_t bufsize)
|
|
104
|
+
{
|
|
105
|
+
JS_snprintf(buf, bufsize, "XPCVariant[0x%p].mJSVal", trc->debugPrintArg);
|
|
106
|
+
}
|
|
107
|
+
#endif
|
|
108
|
+
|
|
109
|
+
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(XPCVariant)
|
|
110
|
+
if(JSVAL_IS_OBJECT(tmp->mJSVal))
|
|
111
|
+
cb.NoteScriptChild(nsIProgrammingLanguage::JAVASCRIPT,
|
|
112
|
+
JSVAL_TO_OBJECT(tmp->mJSVal));
|
|
113
|
+
|
|
114
|
+
nsVariant::Traverse(tmp->mData, cb);
|
|
115
|
+
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
|
116
|
+
|
|
117
|
+
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(XPCVariant)
|
|
118
|
+
// We're sharing mJSVal's buffer, clear the pointer to it
|
|
119
|
+
// so Cleanup() won't try to delete it
|
|
120
|
+
if(JSVAL_IS_STRING(tmp->mJSVal))
|
|
121
|
+
tmp->mData.u.wstr.mWStringValue = nsnull;
|
|
122
|
+
nsVariant::Cleanup(&tmp->mData);
|
|
123
|
+
|
|
124
|
+
if(JSVAL_IS_TRACEABLE(tmp->mJSVal))
|
|
125
|
+
{
|
|
126
|
+
XPCTraceableVariant *v = static_cast<XPCTraceableVariant*>(tmp);
|
|
127
|
+
v->RemoveFromRootSet(nsXPConnect::GetRuntimeInstance()->GetJSRuntime());
|
|
128
|
+
}
|
|
129
|
+
tmp->mJSVal = JSVAL_NULL;
|
|
130
|
+
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
|
131
|
+
|
|
132
|
+
// static
|
|
133
|
+
XPCVariant* XPCVariant::newVariant(XPCCallContext& ccx, jsval aJSVal)
|
|
134
|
+
{
|
|
135
|
+
XPCVariant* variant;
|
|
136
|
+
|
|
137
|
+
if(!JSVAL_IS_TRACEABLE(aJSVal))
|
|
138
|
+
variant = new XPCVariant(ccx, aJSVal);
|
|
139
|
+
else
|
|
140
|
+
variant = new XPCTraceableVariant(ccx, aJSVal);
|
|
141
|
+
|
|
142
|
+
if(!variant)
|
|
143
|
+
return nsnull;
|
|
144
|
+
NS_ADDREF(variant);
|
|
145
|
+
|
|
146
|
+
if(!variant->InitializeData(ccx))
|
|
147
|
+
NS_RELEASE(variant); // Also sets variant to nsnull.
|
|
148
|
+
|
|
149
|
+
return variant;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// Helper class to give us a namespace for the table based code below.
|
|
153
|
+
class XPCArrayHomogenizer
|
|
154
|
+
{
|
|
155
|
+
private:
|
|
156
|
+
enum Type
|
|
157
|
+
{
|
|
158
|
+
tNull = 0 , // null value
|
|
159
|
+
tInt , // Integer
|
|
160
|
+
tDbl , // Double
|
|
161
|
+
tBool , // Boolean
|
|
162
|
+
tStr , // String
|
|
163
|
+
tID , // ID
|
|
164
|
+
tArr , // Array
|
|
165
|
+
tISup , // nsISupports (really just a plain JSObject)
|
|
166
|
+
tUnk , // Unknown. Used only for initial state.
|
|
167
|
+
|
|
168
|
+
tTypeCount , // Just a count for table dimensioning.
|
|
169
|
+
|
|
170
|
+
tVar , // nsVariant - last ditch if no other common type found.
|
|
171
|
+
tErr // No valid state or type has this value.
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
// Table has tUnk as a state (column) but not as a type (row).
|
|
175
|
+
static Type StateTable[tTypeCount][tTypeCount-1];
|
|
176
|
+
|
|
177
|
+
public:
|
|
178
|
+
static JSBool GetTypeForArray(XPCCallContext& ccx, JSObject* array,
|
|
179
|
+
jsuint length,
|
|
180
|
+
nsXPTType* resultType, nsID* resultID);
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
// Current state is the column down the side.
|
|
185
|
+
// Current type is the row along the top.
|
|
186
|
+
// New state is in the box at the intersection.
|
|
187
|
+
|
|
188
|
+
XPCArrayHomogenizer::Type
|
|
189
|
+
XPCArrayHomogenizer::StateTable[tTypeCount][tTypeCount-1] = {
|
|
190
|
+
/* tNull,tInt ,tDbl ,tBool,tStr ,tID ,tArr ,tISup */
|
|
191
|
+
/* tNull */{tNull,tVar ,tVar ,tVar ,tStr ,tID ,tVar ,tISup },
|
|
192
|
+
/* tInt */{tVar ,tInt ,tDbl ,tVar ,tVar ,tVar ,tVar ,tVar },
|
|
193
|
+
/* tDbl */{tVar ,tDbl ,tDbl ,tVar ,tVar ,tVar ,tVar ,tVar },
|
|
194
|
+
/* tBool */{tVar ,tVar ,tVar ,tBool,tVar ,tVar ,tVar ,tVar },
|
|
195
|
+
/* tStr */{tStr ,tVar ,tVar ,tVar ,tStr ,tVar ,tVar ,tVar },
|
|
196
|
+
/* tID */{tID ,tVar ,tVar ,tVar ,tVar ,tID ,tVar ,tVar },
|
|
197
|
+
/* tArr */{tErr ,tErr ,tErr ,tErr ,tErr ,tErr ,tErr ,tErr },
|
|
198
|
+
/* tISup */{tISup,tVar ,tVar ,tVar ,tVar ,tVar ,tVar ,tISup },
|
|
199
|
+
/* tUnk */{tNull,tInt ,tDbl ,tBool,tStr ,tID ,tVar ,tISup }};
|
|
200
|
+
|
|
201
|
+
// static
|
|
202
|
+
JSBool
|
|
203
|
+
XPCArrayHomogenizer::GetTypeForArray(XPCCallContext& ccx, JSObject* array,
|
|
204
|
+
jsuint length,
|
|
205
|
+
nsXPTType* resultType, nsID* resultID)
|
|
206
|
+
{
|
|
207
|
+
Type state = tUnk;
|
|
208
|
+
Type type;
|
|
209
|
+
|
|
210
|
+
for(jsuint i = 0; i < length; i++)
|
|
211
|
+
{
|
|
212
|
+
jsval val;
|
|
213
|
+
if(!JS_GetElement(ccx, array, i, &val))
|
|
214
|
+
return JS_FALSE;
|
|
215
|
+
|
|
216
|
+
if(JSVAL_IS_INT(val))
|
|
217
|
+
type = tInt;
|
|
218
|
+
else if(JSVAL_IS_DOUBLE(val))
|
|
219
|
+
type = tDbl;
|
|
220
|
+
else if(JSVAL_IS_BOOLEAN(val))
|
|
221
|
+
type = tBool;
|
|
222
|
+
else if(JSVAL_IS_VOID(val))
|
|
223
|
+
{
|
|
224
|
+
state = tVar;
|
|
225
|
+
break;
|
|
226
|
+
}
|
|
227
|
+
else if(JSVAL_IS_NULL(val))
|
|
228
|
+
type = tNull;
|
|
229
|
+
else if(JSVAL_IS_STRING(val))
|
|
230
|
+
type = tStr;
|
|
231
|
+
else
|
|
232
|
+
{
|
|
233
|
+
NS_ASSERTION(JSVAL_IS_OBJECT(val), "invalid type of jsval!");
|
|
234
|
+
JSObject* jsobj = JSVAL_TO_OBJECT(val);
|
|
235
|
+
if(JS_IsArrayObject(ccx, jsobj))
|
|
236
|
+
type = tArr;
|
|
237
|
+
else if(xpc_JSObjectIsID(ccx, jsobj))
|
|
238
|
+
type = tID;
|
|
239
|
+
else
|
|
240
|
+
type = tISup;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
NS_ASSERTION(state != tErr, "bad state table!");
|
|
244
|
+
NS_ASSERTION(type != tErr, "bad type!");
|
|
245
|
+
NS_ASSERTION(type != tVar, "bad type!");
|
|
246
|
+
NS_ASSERTION(type != tUnk, "bad type!");
|
|
247
|
+
|
|
248
|
+
state = StateTable[state][type];
|
|
249
|
+
|
|
250
|
+
NS_ASSERTION(state != tErr, "bad state table!");
|
|
251
|
+
NS_ASSERTION(state != tUnk, "bad state table!");
|
|
252
|
+
|
|
253
|
+
if(state == tVar)
|
|
254
|
+
break;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
switch(state)
|
|
258
|
+
{
|
|
259
|
+
case tInt :
|
|
260
|
+
*resultType = nsXPTType((uint8)TD_INT32);
|
|
261
|
+
break;
|
|
262
|
+
case tDbl :
|
|
263
|
+
*resultType = nsXPTType((uint8)TD_DOUBLE);
|
|
264
|
+
break;
|
|
265
|
+
case tBool:
|
|
266
|
+
*resultType = nsXPTType((uint8)TD_BOOL);
|
|
267
|
+
break;
|
|
268
|
+
case tStr :
|
|
269
|
+
*resultType = nsXPTType((uint8)(TD_PWSTRING | XPT_TDP_POINTER));
|
|
270
|
+
break;
|
|
271
|
+
case tID :
|
|
272
|
+
*resultType = nsXPTType((uint8)(TD_PNSIID | XPT_TDP_POINTER));
|
|
273
|
+
break;
|
|
274
|
+
case tISup:
|
|
275
|
+
*resultType = nsXPTType((uint8)(TD_INTERFACE_IS_TYPE | XPT_TDP_POINTER));
|
|
276
|
+
*resultID = NS_GET_IID(nsISupports);
|
|
277
|
+
break;
|
|
278
|
+
case tNull:
|
|
279
|
+
// FALL THROUGH
|
|
280
|
+
case tVar :
|
|
281
|
+
*resultType = nsXPTType((uint8)(TD_INTERFACE_IS_TYPE | XPT_TDP_POINTER));
|
|
282
|
+
*resultID = NS_GET_IID(nsIVariant);
|
|
283
|
+
break;
|
|
284
|
+
case tArr :
|
|
285
|
+
// FALL THROUGH
|
|
286
|
+
case tUnk :
|
|
287
|
+
// FALL THROUGH
|
|
288
|
+
case tErr :
|
|
289
|
+
// FALL THROUGH
|
|
290
|
+
default:
|
|
291
|
+
NS_ERROR("bad state");
|
|
292
|
+
return JS_FALSE;
|
|
293
|
+
}
|
|
294
|
+
return JS_TRUE;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
JSBool XPCVariant::InitializeData(XPCCallContext& ccx)
|
|
298
|
+
{
|
|
299
|
+
if(JSVAL_IS_INT(mJSVal))
|
|
300
|
+
return NS_SUCCEEDED(nsVariant::SetFromInt32(&mData,
|
|
301
|
+
JSVAL_TO_INT(mJSVal)));
|
|
302
|
+
if(JSVAL_IS_DOUBLE(mJSVal))
|
|
303
|
+
return NS_SUCCEEDED(nsVariant::SetFromDouble(&mData,
|
|
304
|
+
*JSVAL_TO_DOUBLE(mJSVal)));
|
|
305
|
+
if(JSVAL_IS_BOOLEAN(mJSVal))
|
|
306
|
+
return NS_SUCCEEDED(nsVariant::SetFromBool(&mData,
|
|
307
|
+
JSVAL_TO_BOOLEAN(mJSVal)));
|
|
308
|
+
if(JSVAL_IS_VOID(mJSVal))
|
|
309
|
+
return NS_SUCCEEDED(nsVariant::SetToVoid(&mData));
|
|
310
|
+
if(JSVAL_IS_NULL(mJSVal))
|
|
311
|
+
return NS_SUCCEEDED(nsVariant::SetToEmpty(&mData));
|
|
312
|
+
if(JSVAL_IS_STRING(mJSVal))
|
|
313
|
+
{
|
|
314
|
+
// Make our string immutable. This will also ensure null-termination,
|
|
315
|
+
// which nsVariant assumes for its PRUnichar* stuff.
|
|
316
|
+
JSString* str = JSVAL_TO_STRING(mJSVal);
|
|
317
|
+
if(!JS_MakeStringImmutable(ccx, str))
|
|
318
|
+
return JS_FALSE;
|
|
319
|
+
|
|
320
|
+
// Don't use nsVariant::SetFromWStringWithSize, because that will copy
|
|
321
|
+
// the data. Just handle this ourselves. Note that it's ok to not
|
|
322
|
+
// copy because we added mJSVal as a GC root.
|
|
323
|
+
NS_ASSERTION(mData.mType == nsIDataType::VTYPE_EMPTY,
|
|
324
|
+
"Why do we already have data?");
|
|
325
|
+
|
|
326
|
+
mData.u.wstr.mWStringValue =
|
|
327
|
+
reinterpret_cast<PRUnichar*>(JS_GetStringChars(str));
|
|
328
|
+
// Use C-style cast, because reinterpret cast from size_t to
|
|
329
|
+
// PRUint32 is not valid on some platforms.
|
|
330
|
+
mData.u.wstr.mWStringLength = (PRUint32)JS_GetStringLength(str);
|
|
331
|
+
mData.mType = nsIDataType::VTYPE_WSTRING_SIZE_IS;
|
|
332
|
+
|
|
333
|
+
return JS_TRUE;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
// leaving only JSObject...
|
|
337
|
+
NS_ASSERTION(JSVAL_IS_OBJECT(mJSVal), "invalid type of jsval!");
|
|
338
|
+
|
|
339
|
+
JSObject* jsobj = JSVAL_TO_OBJECT(mJSVal);
|
|
340
|
+
|
|
341
|
+
// Let's see if it is a xpcJSID.
|
|
342
|
+
|
|
343
|
+
const nsID* id = xpc_JSObjectToID(ccx, jsobj);
|
|
344
|
+
if(id)
|
|
345
|
+
return NS_SUCCEEDED(nsVariant::SetFromID(&mData, *id));
|
|
346
|
+
|
|
347
|
+
// Let's see if it is a js array object.
|
|
348
|
+
|
|
349
|
+
jsuint len;
|
|
350
|
+
|
|
351
|
+
if(JS_IsArrayObject(ccx, jsobj) && JS_GetArrayLength(ccx, jsobj, &len))
|
|
352
|
+
{
|
|
353
|
+
if(!len)
|
|
354
|
+
{
|
|
355
|
+
// Zero length array
|
|
356
|
+
nsVariant::SetToEmptyArray(&mData);
|
|
357
|
+
return JS_TRUE;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
nsXPTType type;
|
|
361
|
+
nsID id;
|
|
362
|
+
|
|
363
|
+
if(!XPCArrayHomogenizer::GetTypeForArray(ccx, jsobj, len, &type, &id))
|
|
364
|
+
return JS_FALSE;
|
|
365
|
+
|
|
366
|
+
if(!XPCConvert::JSArray2Native(ccx, &mData.u.array.mArrayValue,
|
|
367
|
+
mJSVal, len, len,
|
|
368
|
+
type, type.IsPointer(),
|
|
369
|
+
&id, nsnull))
|
|
370
|
+
return JS_FALSE;
|
|
371
|
+
|
|
372
|
+
mData.mType = nsIDataType::VTYPE_ARRAY;
|
|
373
|
+
if(type.IsInterfacePointer())
|
|
374
|
+
mData.u.array.mArrayInterfaceID = id;
|
|
375
|
+
mData.u.array.mArrayCount = len;
|
|
376
|
+
mData.u.array.mArrayType = type.TagPart();
|
|
377
|
+
|
|
378
|
+
return JS_TRUE;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
// XXX This could be smarter and pick some more interesting iface.
|
|
382
|
+
|
|
383
|
+
nsXPConnect* xpc;
|
|
384
|
+
nsCOMPtr<nsISupports> wrapper;
|
|
385
|
+
const nsIID& iid = NS_GET_IID(nsISupports);
|
|
386
|
+
|
|
387
|
+
return nsnull != (xpc = nsXPConnect::GetXPConnect()) &&
|
|
388
|
+
NS_SUCCEEDED(xpc->WrapJS(ccx, jsobj,
|
|
389
|
+
iid, getter_AddRefs(wrapper))) &&
|
|
390
|
+
NS_SUCCEEDED(nsVariant::SetFromInterface(&mData, iid, wrapper));
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
// static
|
|
394
|
+
JSBool
|
|
395
|
+
XPCVariant::VariantDataToJS(XPCCallContext& ccx,
|
|
396
|
+
nsIVariant* variant,
|
|
397
|
+
JSObject* scope, nsresult* pErr,
|
|
398
|
+
jsval* pJSVal)
|
|
399
|
+
{
|
|
400
|
+
// Get the type early because we might need to spoof it below.
|
|
401
|
+
PRUint16 type;
|
|
402
|
+
if(NS_FAILED(variant->GetDataType(&type)))
|
|
403
|
+
return JS_FALSE;
|
|
404
|
+
|
|
405
|
+
nsCOMPtr<XPCVariant> xpcvariant = do_QueryInterface(variant);
|
|
406
|
+
if(xpcvariant)
|
|
407
|
+
{
|
|
408
|
+
jsval realVal = xpcvariant->GetJSVal();
|
|
409
|
+
if(JSVAL_IS_PRIMITIVE(realVal) ||
|
|
410
|
+
type == nsIDataType::VTYPE_ARRAY ||
|
|
411
|
+
type == nsIDataType::VTYPE_EMPTY_ARRAY ||
|
|
412
|
+
type == nsIDataType::VTYPE_ID)
|
|
413
|
+
{
|
|
414
|
+
// Not a JSObject (or is a JSArray or is a JSObject representing
|
|
415
|
+
// an nsID),.
|
|
416
|
+
// So, just pass through the underlying data.
|
|
417
|
+
*pJSVal = realVal;
|
|
418
|
+
return JS_TRUE;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
if(xpcvariant->mReturnRawObject)
|
|
422
|
+
{
|
|
423
|
+
NS_ASSERTION(type == nsIDataType::VTYPE_INTERFACE ||
|
|
424
|
+
type == nsIDataType::VTYPE_INTERFACE_IS,
|
|
425
|
+
"Weird variant");
|
|
426
|
+
*pJSVal = realVal;
|
|
427
|
+
return JS_TRUE;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
// else, it's an object and we really need to double wrap it if we've
|
|
431
|
+
// already decided that its 'natural' type is as some sort of interface.
|
|
432
|
+
|
|
433
|
+
// We just fall through to the code below and let it do what it does.
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
// The nsIVariant is not a XPCVariant (or we act like it isn't).
|
|
437
|
+
// So we extract the data and do the Right Thing.
|
|
438
|
+
|
|
439
|
+
// We ASSUME that the variant implementation can do these conversions...
|
|
440
|
+
|
|
441
|
+
nsXPTCVariant xpctvar;
|
|
442
|
+
nsID iid;
|
|
443
|
+
nsAutoString astring;
|
|
444
|
+
nsCAutoString cString;
|
|
445
|
+
nsUTF8String utf8String;
|
|
446
|
+
PRUint32 size;
|
|
447
|
+
xpctvar.flags = 0;
|
|
448
|
+
JSBool success;
|
|
449
|
+
|
|
450
|
+
switch(type)
|
|
451
|
+
{
|
|
452
|
+
case nsIDataType::VTYPE_INT8:
|
|
453
|
+
case nsIDataType::VTYPE_INT16:
|
|
454
|
+
case nsIDataType::VTYPE_INT32:
|
|
455
|
+
case nsIDataType::VTYPE_INT64:
|
|
456
|
+
case nsIDataType::VTYPE_UINT8:
|
|
457
|
+
case nsIDataType::VTYPE_UINT16:
|
|
458
|
+
case nsIDataType::VTYPE_UINT32:
|
|
459
|
+
case nsIDataType::VTYPE_UINT64:
|
|
460
|
+
case nsIDataType::VTYPE_FLOAT:
|
|
461
|
+
case nsIDataType::VTYPE_DOUBLE:
|
|
462
|
+
{
|
|
463
|
+
// Easy. Handle inline.
|
|
464
|
+
if(NS_FAILED(variant->GetAsDouble(&xpctvar.val.d)))
|
|
465
|
+
return JS_FALSE;
|
|
466
|
+
return JS_NewNumberValue(ccx, xpctvar.val.d, pJSVal);
|
|
467
|
+
}
|
|
468
|
+
case nsIDataType::VTYPE_BOOL:
|
|
469
|
+
{
|
|
470
|
+
// Easy. Handle inline.
|
|
471
|
+
if(NS_FAILED(variant->GetAsBool(&xpctvar.val.b)))
|
|
472
|
+
return JS_FALSE;
|
|
473
|
+
*pJSVal = BOOLEAN_TO_JSVAL(xpctvar.val.b);
|
|
474
|
+
return JS_TRUE;
|
|
475
|
+
}
|
|
476
|
+
case nsIDataType::VTYPE_CHAR:
|
|
477
|
+
if(NS_FAILED(variant->GetAsChar(&xpctvar.val.c)))
|
|
478
|
+
return JS_FALSE;
|
|
479
|
+
xpctvar.type = (uint8)TD_CHAR;
|
|
480
|
+
break;
|
|
481
|
+
case nsIDataType::VTYPE_WCHAR:
|
|
482
|
+
if(NS_FAILED(variant->GetAsWChar(&xpctvar.val.wc)))
|
|
483
|
+
return JS_FALSE;
|
|
484
|
+
xpctvar.type = (uint8)TD_WCHAR;
|
|
485
|
+
break;
|
|
486
|
+
case nsIDataType::VTYPE_ID:
|
|
487
|
+
if(NS_FAILED(variant->GetAsID(&iid)))
|
|
488
|
+
return JS_FALSE;
|
|
489
|
+
xpctvar.type = (uint8)(TD_PNSIID | XPT_TDP_POINTER);
|
|
490
|
+
xpctvar.val.p = &iid;
|
|
491
|
+
break;
|
|
492
|
+
case nsIDataType::VTYPE_ASTRING:
|
|
493
|
+
if(NS_FAILED(variant->GetAsAString(astring)))
|
|
494
|
+
return JS_FALSE;
|
|
495
|
+
xpctvar.type = (uint8)(TD_ASTRING | XPT_TDP_POINTER);
|
|
496
|
+
xpctvar.val.p = &astring;
|
|
497
|
+
break;
|
|
498
|
+
case nsIDataType::VTYPE_DOMSTRING:
|
|
499
|
+
if(NS_FAILED(variant->GetAsAString(astring)))
|
|
500
|
+
return JS_FALSE;
|
|
501
|
+
xpctvar.type = (uint8)(TD_DOMSTRING | XPT_TDP_POINTER);
|
|
502
|
+
xpctvar.val.p = &astring;
|
|
503
|
+
break;
|
|
504
|
+
case nsIDataType::VTYPE_CSTRING:
|
|
505
|
+
if(NS_FAILED(variant->GetAsACString(cString)))
|
|
506
|
+
return JS_FALSE;
|
|
507
|
+
xpctvar.type = (uint8)(TD_CSTRING | XPT_TDP_POINTER);
|
|
508
|
+
xpctvar.val.p = &cString;
|
|
509
|
+
break;
|
|
510
|
+
case nsIDataType::VTYPE_UTF8STRING:
|
|
511
|
+
if(NS_FAILED(variant->GetAsAUTF8String(utf8String)))
|
|
512
|
+
return JS_FALSE;
|
|
513
|
+
xpctvar.type = (uint8)(TD_UTF8STRING | XPT_TDP_POINTER);
|
|
514
|
+
xpctvar.val.p = &utf8String;
|
|
515
|
+
break;
|
|
516
|
+
case nsIDataType::VTYPE_CHAR_STR:
|
|
517
|
+
if(NS_FAILED(variant->GetAsString((char**)&xpctvar.val.p)))
|
|
518
|
+
return JS_FALSE;
|
|
519
|
+
xpctvar.type = (uint8)(TD_PSTRING | XPT_TDP_POINTER);
|
|
520
|
+
xpctvar.SetValIsAllocated();
|
|
521
|
+
break;
|
|
522
|
+
case nsIDataType::VTYPE_STRING_SIZE_IS:
|
|
523
|
+
if(NS_FAILED(variant->GetAsStringWithSize(&size,
|
|
524
|
+
(char**)&xpctvar.val.p)))
|
|
525
|
+
return JS_FALSE;
|
|
526
|
+
xpctvar.type = (uint8)(TD_PSTRING_SIZE_IS | XPT_TDP_POINTER);
|
|
527
|
+
xpctvar.SetValIsAllocated();
|
|
528
|
+
break;
|
|
529
|
+
case nsIDataType::VTYPE_WCHAR_STR:
|
|
530
|
+
if(NS_FAILED(variant->GetAsWString((PRUnichar**)&xpctvar.val.p)))
|
|
531
|
+
return JS_FALSE;
|
|
532
|
+
xpctvar.type = (uint8)(TD_PWSTRING | XPT_TDP_POINTER);
|
|
533
|
+
xpctvar.SetValIsAllocated();
|
|
534
|
+
break;
|
|
535
|
+
case nsIDataType::VTYPE_WSTRING_SIZE_IS:
|
|
536
|
+
if(NS_FAILED(variant->GetAsWStringWithSize(&size,
|
|
537
|
+
(PRUnichar**)&xpctvar.val.p)))
|
|
538
|
+
return JS_FALSE;
|
|
539
|
+
xpctvar.type = (uint8)(TD_PWSTRING_SIZE_IS | XPT_TDP_POINTER);
|
|
540
|
+
xpctvar.SetValIsAllocated();
|
|
541
|
+
break;
|
|
542
|
+
case nsIDataType::VTYPE_INTERFACE:
|
|
543
|
+
case nsIDataType::VTYPE_INTERFACE_IS:
|
|
544
|
+
{
|
|
545
|
+
nsID* piid;
|
|
546
|
+
if(NS_FAILED(variant->GetAsInterface(&piid, &xpctvar.val.p)))
|
|
547
|
+
return JS_FALSE;
|
|
548
|
+
|
|
549
|
+
iid = *piid;
|
|
550
|
+
nsMemory::Free((char*)piid);
|
|
551
|
+
|
|
552
|
+
xpctvar.type = (uint8)(TD_INTERFACE_IS_TYPE | XPT_TDP_POINTER);
|
|
553
|
+
if(xpctvar.val.p)
|
|
554
|
+
xpctvar.SetValIsInterface();
|
|
555
|
+
break;
|
|
556
|
+
}
|
|
557
|
+
case nsIDataType::VTYPE_ARRAY:
|
|
558
|
+
{
|
|
559
|
+
nsDiscriminatedUnion du;
|
|
560
|
+
nsVariant::Initialize(&du);
|
|
561
|
+
nsresult rv;
|
|
562
|
+
|
|
563
|
+
rv = variant->GetAsArray(&du.u.array.mArrayType,
|
|
564
|
+
&du.u.array.mArrayInterfaceID,
|
|
565
|
+
&du.u.array.mArrayCount,
|
|
566
|
+
&du.u.array.mArrayValue);
|
|
567
|
+
if(NS_FAILED(rv))
|
|
568
|
+
return JS_FALSE;
|
|
569
|
+
|
|
570
|
+
// must exit via VARIANT_DONE from here on...
|
|
571
|
+
du.mType = nsIDataType::VTYPE_ARRAY;
|
|
572
|
+
success = JS_FALSE;
|
|
573
|
+
|
|
574
|
+
nsXPTType conversionType;
|
|
575
|
+
PRUint16 elementType = du.u.array.mArrayType;
|
|
576
|
+
const nsID* pid = nsnull;
|
|
577
|
+
|
|
578
|
+
switch(elementType)
|
|
579
|
+
{
|
|
580
|
+
case nsIDataType::VTYPE_INT8:
|
|
581
|
+
case nsIDataType::VTYPE_INT16:
|
|
582
|
+
case nsIDataType::VTYPE_INT32:
|
|
583
|
+
case nsIDataType::VTYPE_INT64:
|
|
584
|
+
case nsIDataType::VTYPE_UINT8:
|
|
585
|
+
case nsIDataType::VTYPE_UINT16:
|
|
586
|
+
case nsIDataType::VTYPE_UINT32:
|
|
587
|
+
case nsIDataType::VTYPE_UINT64:
|
|
588
|
+
case nsIDataType::VTYPE_FLOAT:
|
|
589
|
+
case nsIDataType::VTYPE_DOUBLE:
|
|
590
|
+
case nsIDataType::VTYPE_BOOL:
|
|
591
|
+
case nsIDataType::VTYPE_CHAR:
|
|
592
|
+
case nsIDataType::VTYPE_WCHAR:
|
|
593
|
+
conversionType = nsXPTType((uint8)elementType);
|
|
594
|
+
break;
|
|
595
|
+
|
|
596
|
+
case nsIDataType::VTYPE_ID:
|
|
597
|
+
case nsIDataType::VTYPE_CHAR_STR:
|
|
598
|
+
case nsIDataType::VTYPE_WCHAR_STR:
|
|
599
|
+
conversionType = nsXPTType((uint8)elementType | XPT_TDP_POINTER);
|
|
600
|
+
break;
|
|
601
|
+
|
|
602
|
+
case nsIDataType::VTYPE_INTERFACE:
|
|
603
|
+
pid = &NS_GET_IID(nsISupports);
|
|
604
|
+
conversionType = nsXPTType((uint8)elementType | XPT_TDP_POINTER);
|
|
605
|
+
break;
|
|
606
|
+
|
|
607
|
+
case nsIDataType::VTYPE_INTERFACE_IS:
|
|
608
|
+
pid = &du.u.array.mArrayInterfaceID;
|
|
609
|
+
conversionType = nsXPTType((uint8)elementType | XPT_TDP_POINTER);
|
|
610
|
+
break;
|
|
611
|
+
|
|
612
|
+
// The rest are illegal.
|
|
613
|
+
case nsIDataType::VTYPE_VOID:
|
|
614
|
+
case nsIDataType::VTYPE_ASTRING:
|
|
615
|
+
case nsIDataType::VTYPE_DOMSTRING:
|
|
616
|
+
case nsIDataType::VTYPE_CSTRING:
|
|
617
|
+
case nsIDataType::VTYPE_UTF8STRING:
|
|
618
|
+
case nsIDataType::VTYPE_WSTRING_SIZE_IS:
|
|
619
|
+
case nsIDataType::VTYPE_STRING_SIZE_IS:
|
|
620
|
+
case nsIDataType::VTYPE_ARRAY:
|
|
621
|
+
case nsIDataType::VTYPE_EMPTY_ARRAY:
|
|
622
|
+
case nsIDataType::VTYPE_EMPTY:
|
|
623
|
+
default:
|
|
624
|
+
NS_ERROR("bad type in array!");
|
|
625
|
+
goto VARIANT_DONE;
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
success =
|
|
629
|
+
XPCConvert::NativeArray2JS(ccx, pJSVal,
|
|
630
|
+
(const void**)&du.u.array.mArrayValue,
|
|
631
|
+
conversionType, pid,
|
|
632
|
+
du.u.array.mArrayCount,
|
|
633
|
+
scope, pErr);
|
|
634
|
+
|
|
635
|
+
VARIANT_DONE:
|
|
636
|
+
nsVariant::Cleanup(&du);
|
|
637
|
+
return success;
|
|
638
|
+
}
|
|
639
|
+
case nsIDataType::VTYPE_EMPTY_ARRAY:
|
|
640
|
+
{
|
|
641
|
+
JSObject* array = JS_NewArrayObject(ccx, 0, nsnull);
|
|
642
|
+
if(!array)
|
|
643
|
+
return JS_FALSE;
|
|
644
|
+
*pJSVal = OBJECT_TO_JSVAL(array);
|
|
645
|
+
return JS_TRUE;
|
|
646
|
+
}
|
|
647
|
+
case nsIDataType::VTYPE_VOID:
|
|
648
|
+
*pJSVal = JSVAL_VOID;
|
|
649
|
+
return JS_TRUE;
|
|
650
|
+
case nsIDataType::VTYPE_EMPTY:
|
|
651
|
+
*pJSVal = JSVAL_NULL;
|
|
652
|
+
return JS_TRUE;
|
|
653
|
+
default:
|
|
654
|
+
NS_ERROR("bad type in variant!");
|
|
655
|
+
return JS_FALSE;
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
// If we are here then we need to convert the data in the xpctvar.
|
|
659
|
+
|
|
660
|
+
if(xpctvar.type.TagPart() == TD_PSTRING_SIZE_IS ||
|
|
661
|
+
xpctvar.type.TagPart() == TD_PWSTRING_SIZE_IS)
|
|
662
|
+
{
|
|
663
|
+
success = XPCConvert::NativeStringWithSize2JS(ccx, pJSVal,
|
|
664
|
+
(const void*)&xpctvar.val,
|
|
665
|
+
xpctvar.type,
|
|
666
|
+
size, pErr);
|
|
667
|
+
}
|
|
668
|
+
else
|
|
669
|
+
{
|
|
670
|
+
success = XPCConvert::NativeData2JS(ccx, pJSVal,
|
|
671
|
+
(const void*)&xpctvar.val,
|
|
672
|
+
xpctvar.type,
|
|
673
|
+
&iid, scope, pErr);
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
if(xpctvar.IsValAllocated())
|
|
677
|
+
nsMemory::Free((char*)xpctvar.val.p);
|
|
678
|
+
else if(xpctvar.IsValInterface())
|
|
679
|
+
((nsISupports*)xpctvar.val.p)->Release();
|
|
680
|
+
|
|
681
|
+
return success;
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
/***************************************************************************/
|
|
685
|
+
/***************************************************************************/
|
|
686
|
+
// XXX These default implementations need to be improved to allow for
|
|
687
|
+
// some more interesting conversions.
|
|
688
|
+
|
|
689
|
+
|
|
690
|
+
/* readonly attribute PRUint16 dataType; */
|
|
691
|
+
NS_IMETHODIMP XPCVariant::GetDataType(PRUint16 *aDataType)
|
|
692
|
+
{
|
|
693
|
+
*aDataType = mData.mType;
|
|
694
|
+
return NS_OK;
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
/* PRUint8 getAsInt8 (); */
|
|
698
|
+
NS_IMETHODIMP XPCVariant::GetAsInt8(PRUint8 *_retval)
|
|
699
|
+
{
|
|
700
|
+
return nsVariant::ConvertToInt8(mData, _retval);
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
/* PRInt16 getAsInt16 (); */
|
|
704
|
+
NS_IMETHODIMP XPCVariant::GetAsInt16(PRInt16 *_retval)
|
|
705
|
+
{
|
|
706
|
+
return nsVariant::ConvertToInt16(mData, _retval);
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
/* PRInt32 getAsInt32 (); */
|
|
710
|
+
NS_IMETHODIMP XPCVariant::GetAsInt32(PRInt32 *_retval)
|
|
711
|
+
{
|
|
712
|
+
return nsVariant::ConvertToInt32(mData, _retval);
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
/* PRInt64 getAsInt64 (); */
|
|
716
|
+
NS_IMETHODIMP XPCVariant::GetAsInt64(PRInt64 *_retval)
|
|
717
|
+
{
|
|
718
|
+
return nsVariant::ConvertToInt64(mData, _retval);
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
/* PRUint8 getAsUint8 (); */
|
|
722
|
+
NS_IMETHODIMP XPCVariant::GetAsUint8(PRUint8 *_retval)
|
|
723
|
+
{
|
|
724
|
+
return nsVariant::ConvertToUint8(mData, _retval);
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
/* PRUint16 getAsUint16 (); */
|
|
728
|
+
NS_IMETHODIMP XPCVariant::GetAsUint16(PRUint16 *_retval)
|
|
729
|
+
{
|
|
730
|
+
return nsVariant::ConvertToUint16(mData, _retval);
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
/* PRUint32 getAsUint32 (); */
|
|
734
|
+
NS_IMETHODIMP XPCVariant::GetAsUint32(PRUint32 *_retval)
|
|
735
|
+
{
|
|
736
|
+
return nsVariant::ConvertToUint32(mData, _retval);
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
/* PRUint64 getAsUint64 (); */
|
|
740
|
+
NS_IMETHODIMP XPCVariant::GetAsUint64(PRUint64 *_retval)
|
|
741
|
+
{
|
|
742
|
+
return nsVariant::ConvertToUint64(mData, _retval);
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
/* float getAsFloat (); */
|
|
746
|
+
NS_IMETHODIMP XPCVariant::GetAsFloat(float *_retval)
|
|
747
|
+
{
|
|
748
|
+
return nsVariant::ConvertToFloat(mData, _retval);
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
/* double getAsDouble (); */
|
|
752
|
+
NS_IMETHODIMP XPCVariant::GetAsDouble(double *_retval)
|
|
753
|
+
{
|
|
754
|
+
return nsVariant::ConvertToDouble(mData, _retval);
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
/* PRBool getAsBool (); */
|
|
758
|
+
NS_IMETHODIMP XPCVariant::GetAsBool(PRBool *_retval)
|
|
759
|
+
{
|
|
760
|
+
return nsVariant::ConvertToBool(mData, _retval);
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
/* char getAsChar (); */
|
|
764
|
+
NS_IMETHODIMP XPCVariant::GetAsChar(char *_retval)
|
|
765
|
+
{
|
|
766
|
+
return nsVariant::ConvertToChar(mData, _retval);
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
/* wchar getAsWChar (); */
|
|
770
|
+
NS_IMETHODIMP XPCVariant::GetAsWChar(PRUnichar *_retval)
|
|
771
|
+
{
|
|
772
|
+
return nsVariant::ConvertToWChar(mData, _retval);
|
|
773
|
+
}
|
|
774
|
+
|
|
775
|
+
/* [notxpcom] nsresult getAsID (out nsID retval); */
|
|
776
|
+
NS_IMETHODIMP_(nsresult) XPCVariant::GetAsID(nsID *retval)
|
|
777
|
+
{
|
|
778
|
+
return nsVariant::ConvertToID(mData, retval);
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
/* AString getAsAString (); */
|
|
782
|
+
NS_IMETHODIMP XPCVariant::GetAsAString(nsAString & _retval)
|
|
783
|
+
{
|
|
784
|
+
return nsVariant::ConvertToAString(mData, _retval);
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
/* DOMString getAsDOMString (); */
|
|
788
|
+
NS_IMETHODIMP XPCVariant::GetAsDOMString(nsAString & _retval)
|
|
789
|
+
{
|
|
790
|
+
// A DOMString maps to an AString internally, so we can re-use
|
|
791
|
+
// ConvertToAString here.
|
|
792
|
+
return nsVariant::ConvertToAString(mData, _retval);
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
/* ACString getAsACString (); */
|
|
796
|
+
NS_IMETHODIMP XPCVariant::GetAsACString(nsACString & _retval)
|
|
797
|
+
{
|
|
798
|
+
return nsVariant::ConvertToACString(mData, _retval);
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
/* AUTF8String getAsAUTF8String (); */
|
|
802
|
+
NS_IMETHODIMP XPCVariant::GetAsAUTF8String(nsAUTF8String & _retval)
|
|
803
|
+
{
|
|
804
|
+
return nsVariant::ConvertToAUTF8String(mData, _retval);
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
/* string getAsString (); */
|
|
808
|
+
NS_IMETHODIMP XPCVariant::GetAsString(char **_retval)
|
|
809
|
+
{
|
|
810
|
+
return nsVariant::ConvertToString(mData, _retval);
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
/* wstring getAsWString (); */
|
|
814
|
+
NS_IMETHODIMP XPCVariant::GetAsWString(PRUnichar **_retval)
|
|
815
|
+
{
|
|
816
|
+
return nsVariant::ConvertToWString(mData, _retval);
|
|
817
|
+
}
|
|
818
|
+
|
|
819
|
+
/* nsISupports getAsISupports (); */
|
|
820
|
+
NS_IMETHODIMP XPCVariant::GetAsISupports(nsISupports **_retval)
|
|
821
|
+
{
|
|
822
|
+
return nsVariant::ConvertToISupports(mData, _retval);
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
/* void getAsInterface (out nsIIDPtr iid, [iid_is (iid), retval] out nsQIResult iface); */
|
|
826
|
+
NS_IMETHODIMP XPCVariant::GetAsInterface(nsIID * *iid, void * *iface)
|
|
827
|
+
{
|
|
828
|
+
return nsVariant::ConvertToInterface(mData, iid, iface);
|
|
829
|
+
}
|
|
830
|
+
|
|
831
|
+
|
|
832
|
+
/* [notxpcom] nsresult getAsArray (out PRUint16 type, out nsIID iid, out PRUint32 count, out voidPtr ptr); */
|
|
833
|
+
NS_IMETHODIMP_(nsresult) XPCVariant::GetAsArray(PRUint16 *type, nsIID *iid, PRUint32 *count, void * *ptr)
|
|
834
|
+
{
|
|
835
|
+
return nsVariant::ConvertToArray(mData, type, iid, count, ptr);
|
|
836
|
+
}
|
|
837
|
+
|
|
838
|
+
/* void getAsStringWithSize (out PRUint32 size, [size_is (size), retval] out string str); */
|
|
839
|
+
NS_IMETHODIMP XPCVariant::GetAsStringWithSize(PRUint32 *size, char **str)
|
|
840
|
+
{
|
|
841
|
+
return nsVariant::ConvertToStringWithSize(mData, size, str);
|
|
842
|
+
}
|
|
843
|
+
|
|
844
|
+
/* void getAsWStringWithSize (out PRUint32 size, [size_is (size), retval] out wstring str); */
|
|
845
|
+
NS_IMETHODIMP XPCVariant::GetAsWStringWithSize(PRUint32 *size, PRUnichar **str)
|
|
846
|
+
{
|
|
847
|
+
return nsVariant::ConvertToWStringWithSize(mData, size, str);
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
|