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,383 @@
|
|
|
1
|
+
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
|
2
|
+
* ***** BEGIN LICENSE BLOCK *****
|
|
3
|
+
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
4
|
+
*
|
|
5
|
+
* The contents of this file are subject to the Mozilla Public License Version
|
|
6
|
+
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
7
|
+
* the License. You may obtain a copy of the License at
|
|
8
|
+
* http://www.mozilla.org/MPL/
|
|
9
|
+
*
|
|
10
|
+
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
11
|
+
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
12
|
+
* for the specific language governing rights and limitations under the
|
|
13
|
+
* License.
|
|
14
|
+
*
|
|
15
|
+
* The Original Code is the IDispatch implementation for XPConnect.
|
|
16
|
+
*
|
|
17
|
+
* The Initial Developer of the Original Code is
|
|
18
|
+
* David Bradley.
|
|
19
|
+
* Portions created by the Initial Developer are Copyright (C) 2002
|
|
20
|
+
* the Initial Developer. All Rights Reserved.
|
|
21
|
+
*
|
|
22
|
+
* Contributor(s):
|
|
23
|
+
*
|
|
24
|
+
* Alternatively, the contents of this file may be used under the terms of
|
|
25
|
+
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
|
26
|
+
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
27
|
+
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
28
|
+
* of those above. If you wish to allow use of your version of this file only
|
|
29
|
+
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
30
|
+
* use your version of this file under the terms of the MPL, indicate your
|
|
31
|
+
* decision by deleting the provisions above and replace them with the notice
|
|
32
|
+
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
33
|
+
* the provisions above, a recipient may use your version of this file under
|
|
34
|
+
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
35
|
+
*
|
|
36
|
+
* ***** END LICENSE BLOCK ***** */
|
|
37
|
+
|
|
38
|
+
/** \file XPCDispInterface.cpp
|
|
39
|
+
* XPCDispInterface implementation
|
|
40
|
+
* This file contains the implementation of the XPCDispInterface class
|
|
41
|
+
*/
|
|
42
|
+
|
|
43
|
+
#include "xpcprivate.h"
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Is this function reflectable
|
|
47
|
+
* This function determines if we should reflect a particular method of an
|
|
48
|
+
* interface
|
|
49
|
+
*/
|
|
50
|
+
inline
|
|
51
|
+
PRBool IsReflectable(FUNCDESC * pFuncDesc)
|
|
52
|
+
{
|
|
53
|
+
return (pFuncDesc->wFuncFlags&FUNCFLAG_FRESTRICTED) == 0 &&
|
|
54
|
+
pFuncDesc->funckind == FUNC_DISPATCH ||
|
|
55
|
+
pFuncDesc->funckind == FUNC_PUREVIRTUAL ||
|
|
56
|
+
pFuncDesc->funckind == FUNC_VIRTUAL;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
XPCDispInterface::Allocator::Allocator(JSContext * cx, ITypeInfo * pTypeInfo) :
|
|
60
|
+
mMemIDs(nsnull), mCount(0), mIDispatchMembers(0), mCX(cx),
|
|
61
|
+
mTypeInfo(pTypeInfo)
|
|
62
|
+
{
|
|
63
|
+
TYPEATTR * attr;
|
|
64
|
+
HRESULT hr = pTypeInfo->GetTypeAttr(&attr);
|
|
65
|
+
if(SUCCEEDED(hr))
|
|
66
|
+
{
|
|
67
|
+
mIDispatchMembers = attr->cFuncs;
|
|
68
|
+
mMemIDs = new DISPID[mIDispatchMembers];
|
|
69
|
+
pTypeInfo->ReleaseTypeAttr(attr);
|
|
70
|
+
// Bail if we couldn't create the buffer
|
|
71
|
+
if(!mMemIDs)
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
for(UINT iMethod = 0; iMethod < mIDispatchMembers; iMethod++ )
|
|
75
|
+
{
|
|
76
|
+
FUNCDESC* pFuncDesc;
|
|
77
|
+
if(SUCCEEDED(pTypeInfo->GetFuncDesc(iMethod, &pFuncDesc)))
|
|
78
|
+
{
|
|
79
|
+
// Only add the function to our list if it is at least at nesting level
|
|
80
|
+
// 2 (i.e. defined in an interface derived from IDispatch).
|
|
81
|
+
if(IsReflectable(pFuncDesc))
|
|
82
|
+
Add(pFuncDesc->memid);
|
|
83
|
+
pTypeInfo->ReleaseFuncDesc(pFuncDesc);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
void XPCDispInterface::Allocator::Add(DISPID memID)
|
|
89
|
+
{
|
|
90
|
+
NS_ASSERTION(Valid(), "Add should never be called if out of memory");
|
|
91
|
+
// Start from the end and work backwards, the last item is the most
|
|
92
|
+
// likely to match
|
|
93
|
+
PRUint32 index = mCount;
|
|
94
|
+
while(index > 0)
|
|
95
|
+
{
|
|
96
|
+
if(mMemIDs[--index] == memID)
|
|
97
|
+
return;
|
|
98
|
+
};
|
|
99
|
+
NS_ASSERTION(Count() < mIDispatchMembers, "mCount should always be less "
|
|
100
|
+
"than the IDispatch member count "
|
|
101
|
+
"here");
|
|
102
|
+
mMemIDs[mCount++] = memID;
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
inline
|
|
107
|
+
PRUint32 XPCDispInterface::Allocator::Count() const
|
|
108
|
+
{
|
|
109
|
+
return mCount;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
XPCDispInterface*
|
|
113
|
+
XPCDispInterface::NewInstance(JSContext* cx, nsISupports * pIface)
|
|
114
|
+
{
|
|
115
|
+
CComQIPtr<IDispatch> pDispatch(reinterpret_cast<IUnknown*>(pIface));
|
|
116
|
+
|
|
117
|
+
if(pDispatch)
|
|
118
|
+
{
|
|
119
|
+
unsigned int count;
|
|
120
|
+
HRESULT hr = pDispatch->GetTypeInfoCount(&count);
|
|
121
|
+
if(SUCCEEDED(hr) && count > 0)
|
|
122
|
+
{
|
|
123
|
+
CComPtr<ITypeInfo> pTypeInfo;
|
|
124
|
+
hr = pDispatch->GetTypeInfo(0,LOCALE_SYSTEM_DEFAULT, &pTypeInfo);
|
|
125
|
+
if(SUCCEEDED(hr))
|
|
126
|
+
{
|
|
127
|
+
Allocator allocator(cx, pTypeInfo);
|
|
128
|
+
return allocator.Allocate();
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return nsnull;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Sets a members type based on COM's INVOKEKIND
|
|
137
|
+
*/
|
|
138
|
+
static
|
|
139
|
+
void ConvertInvokeKind(INVOKEKIND invokeKind, XPCDispInterface::Member & member)
|
|
140
|
+
{
|
|
141
|
+
switch (invokeKind)
|
|
142
|
+
{
|
|
143
|
+
case INVOKE_FUNC:
|
|
144
|
+
{
|
|
145
|
+
member.SetFunction();
|
|
146
|
+
}
|
|
147
|
+
break;
|
|
148
|
+
case INVOKE_PROPERTYGET:
|
|
149
|
+
{
|
|
150
|
+
member.MakeGetter();
|
|
151
|
+
}
|
|
152
|
+
break;
|
|
153
|
+
case INVOKE_PROPERTYPUT:
|
|
154
|
+
{
|
|
155
|
+
member.MakeSetter();
|
|
156
|
+
}
|
|
157
|
+
break;
|
|
158
|
+
// TODO: Handle putref
|
|
159
|
+
default:
|
|
160
|
+
{
|
|
161
|
+
NS_ERROR("Invalid invoke kind found in COM type info");
|
|
162
|
+
}
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
static
|
|
168
|
+
PRBool InitializeMember(JSContext * cx, ITypeInfo * pTypeInfo,
|
|
169
|
+
FUNCDESC * pFuncDesc,
|
|
170
|
+
XPCDispInterface::Member * pInfo)
|
|
171
|
+
{
|
|
172
|
+
pInfo->SetMemID(pFuncDesc->memid);
|
|
173
|
+
BSTR name;
|
|
174
|
+
UINT nameCount;
|
|
175
|
+
if(FAILED(pTypeInfo->GetNames(
|
|
176
|
+
pFuncDesc->memid,
|
|
177
|
+
&name,
|
|
178
|
+
1,
|
|
179
|
+
&nameCount)))
|
|
180
|
+
return PR_FALSE;
|
|
181
|
+
if(nameCount != 1)
|
|
182
|
+
return PR_FALSE;
|
|
183
|
+
JSString* str = JS_InternUCStringN(cx,
|
|
184
|
+
reinterpret_cast<const jschar *>(name),
|
|
185
|
+
::SysStringLen(name));
|
|
186
|
+
::SysFreeString(name);
|
|
187
|
+
if(!str)
|
|
188
|
+
return PR_FALSE;
|
|
189
|
+
// Initialize
|
|
190
|
+
pInfo = new (pInfo) XPCDispInterface::Member;
|
|
191
|
+
if(!pInfo)
|
|
192
|
+
return PR_FALSE;
|
|
193
|
+
pInfo->SetName(STRING_TO_JSVAL(str));
|
|
194
|
+
pInfo->ResetType();
|
|
195
|
+
ConvertInvokeKind(pFuncDesc->invkind, *pInfo);
|
|
196
|
+
pInfo->SetTypeInfo(pFuncDesc->memid, pTypeInfo, pFuncDesc);
|
|
197
|
+
return PR_TRUE;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
static
|
|
201
|
+
XPCDispInterface::Member * FindExistingMember(XPCDispInterface::Member * first,
|
|
202
|
+
XPCDispInterface::Member * last,
|
|
203
|
+
MEMBERID memberID)
|
|
204
|
+
{
|
|
205
|
+
// Iterate backward since the last one in is the most likely match
|
|
206
|
+
XPCDispInterface::Member * cur = last;
|
|
207
|
+
if (cur != first)
|
|
208
|
+
{
|
|
209
|
+
do
|
|
210
|
+
{
|
|
211
|
+
--cur;
|
|
212
|
+
if(cur->GetMemID() == memberID)
|
|
213
|
+
return cur;
|
|
214
|
+
} while(cur != first);
|
|
215
|
+
}
|
|
216
|
+
// no existing property, return the new one
|
|
217
|
+
return last;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
PRBool XPCDispInterface::InspectIDispatch(JSContext * cx, ITypeInfo * pTypeInfo, PRUint32 members)
|
|
221
|
+
{
|
|
222
|
+
HRESULT hResult;
|
|
223
|
+
|
|
224
|
+
XPCDispInterface::Member * pInfo = mMembers;
|
|
225
|
+
mMemberCount = 0;
|
|
226
|
+
for(PRUint32 index = 0; index < members; index++ )
|
|
227
|
+
{
|
|
228
|
+
FUNCDESC* pFuncDesc;
|
|
229
|
+
hResult = pTypeInfo->GetFuncDesc(index, &pFuncDesc );
|
|
230
|
+
if(FAILED(hResult))
|
|
231
|
+
continue;
|
|
232
|
+
if(IsReflectable(pFuncDesc))
|
|
233
|
+
{
|
|
234
|
+
switch(pFuncDesc->invkind)
|
|
235
|
+
{
|
|
236
|
+
case INVOKE_PROPERTYPUT:
|
|
237
|
+
case INVOKE_PROPERTYPUTREF:
|
|
238
|
+
case INVOKE_PROPERTYGET:
|
|
239
|
+
{
|
|
240
|
+
XPCDispInterface::Member * pExisting = FindExistingMember(mMembers, pInfo, pFuncDesc->memid);
|
|
241
|
+
if(pExisting == pInfo)
|
|
242
|
+
{
|
|
243
|
+
if(InitializeMember(cx, pTypeInfo, pFuncDesc, pInfo))
|
|
244
|
+
{
|
|
245
|
+
++pInfo;
|
|
246
|
+
++mMemberCount;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
else
|
|
250
|
+
{
|
|
251
|
+
ConvertInvokeKind(pFuncDesc->invkind, *pExisting);
|
|
252
|
+
}
|
|
253
|
+
if(pFuncDesc->invkind == INVOKE_PROPERTYGET)
|
|
254
|
+
{
|
|
255
|
+
pExisting->SetGetterFuncDesc(pFuncDesc);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
break;
|
|
259
|
+
case INVOKE_FUNC:
|
|
260
|
+
{
|
|
261
|
+
if(InitializeMember(cx, pTypeInfo, pFuncDesc, pInfo))
|
|
262
|
+
{
|
|
263
|
+
++pInfo;
|
|
264
|
+
++mMemberCount;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
break;
|
|
268
|
+
default:
|
|
269
|
+
pTypeInfo->ReleaseFuncDesc(pFuncDesc);
|
|
270
|
+
break;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
else
|
|
274
|
+
{
|
|
275
|
+
pTypeInfo->ReleaseFuncDesc(pFuncDesc);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
return PR_TRUE;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* Compares a PRUnichar and a JS string ignoring case
|
|
283
|
+
* @param ccx an XPConnect call context
|
|
284
|
+
* @param lhr the PRUnichar string to be compared
|
|
285
|
+
* @param lhsLength the length of the PRUnichar string
|
|
286
|
+
* @param rhs the JS value that is the other string to compare
|
|
287
|
+
* @return true if the strings are equal
|
|
288
|
+
*/
|
|
289
|
+
inline
|
|
290
|
+
PRBool CaseInsensitiveCompare(XPCCallContext& ccx, const PRUnichar* lhs, size_t lhsLength, jsval rhs)
|
|
291
|
+
{
|
|
292
|
+
if(lhsLength == 0)
|
|
293
|
+
return PR_FALSE;
|
|
294
|
+
size_t rhsLength;
|
|
295
|
+
PRUnichar* rhsString = xpc_JSString2PRUnichar(ccx, rhs, &rhsLength);
|
|
296
|
+
return rhsString &&
|
|
297
|
+
lhsLength == rhsLength &&
|
|
298
|
+
_wcsnicmp(lhs, rhsString, lhsLength) == 0;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
const XPCDispInterface::Member* XPCDispInterface::FindMemberCI(XPCCallContext& ccx, jsval name) const
|
|
302
|
+
{
|
|
303
|
+
size_t nameLength;
|
|
304
|
+
PRUnichar* sName = xpc_JSString2PRUnichar(ccx, name, &nameLength);
|
|
305
|
+
if(!sName)
|
|
306
|
+
return nsnull;
|
|
307
|
+
// Iterate backwards over the members array (more efficient)
|
|
308
|
+
const Member* member = mMembers + mMemberCount;
|
|
309
|
+
while(member > mMembers)
|
|
310
|
+
{
|
|
311
|
+
--member;
|
|
312
|
+
if(CaseInsensitiveCompare(ccx, sName, nameLength, member->GetName()))
|
|
313
|
+
{
|
|
314
|
+
return member;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
return nsnull;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
JSBool XPCDispInterface::Member::GetValue(XPCCallContext& ccx,
|
|
321
|
+
XPCNativeInterface * iface,
|
|
322
|
+
jsval * retval) const
|
|
323
|
+
{
|
|
324
|
+
// This is a method or attribute - we'll be needing a function object
|
|
325
|
+
|
|
326
|
+
// We need to use the safe context for this thread because we don't want
|
|
327
|
+
// to parent the new (and cached forever!) function object to the current
|
|
328
|
+
// JSContext's global object. That would be bad!
|
|
329
|
+
if((mType & RESOLVED) == 0)
|
|
330
|
+
{
|
|
331
|
+
JSContext* cx = ccx.GetSafeJSContext();
|
|
332
|
+
if(!cx)
|
|
333
|
+
return JS_FALSE;
|
|
334
|
+
|
|
335
|
+
intN argc;
|
|
336
|
+
intN flags;
|
|
337
|
+
JSNative callback;
|
|
338
|
+
// Is this a function or a parameterized getter/setter
|
|
339
|
+
if(IsFunction() || IsParameterizedProperty())
|
|
340
|
+
{
|
|
341
|
+
argc = GetParamCount();
|
|
342
|
+
flags = 0;
|
|
343
|
+
callback = XPC_IDispatch_CallMethod;
|
|
344
|
+
}
|
|
345
|
+
else
|
|
346
|
+
{
|
|
347
|
+
if(IsSetter())
|
|
348
|
+
{
|
|
349
|
+
flags = JSFUN_GETTER | JSFUN_SETTER;
|
|
350
|
+
}
|
|
351
|
+
else
|
|
352
|
+
{
|
|
353
|
+
flags = JSFUN_GETTER;
|
|
354
|
+
}
|
|
355
|
+
argc = 0;
|
|
356
|
+
callback = XPC_IDispatch_GetterSetter;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
JSFunction *fun = JS_NewFunction(cx, callback, argc, flags, nsnull,
|
|
360
|
+
JS_GetStringBytes(JSVAL_TO_STRING(mName)));
|
|
361
|
+
if(!fun)
|
|
362
|
+
return JS_FALSE;
|
|
363
|
+
|
|
364
|
+
JSObject* funobj = JS_GetFunctionObject(fun);
|
|
365
|
+
if(!funobj)
|
|
366
|
+
return JS_FALSE;
|
|
367
|
+
|
|
368
|
+
// Store ourselves and our native interface within the JSObject
|
|
369
|
+
if(!JS_SetReservedSlot(ccx, funobj, 0, PRIVATE_TO_JSVAL(this)))
|
|
370
|
+
return JS_FALSE;
|
|
371
|
+
|
|
372
|
+
if(!JS_SetReservedSlot(ccx, funobj, 1, PRIVATE_TO_JSVAL(iface)))
|
|
373
|
+
return JS_FALSE;
|
|
374
|
+
|
|
375
|
+
{ // scoped lock
|
|
376
|
+
XPCAutoLock lock(ccx.GetRuntime()->GetMapLock());
|
|
377
|
+
const_cast<Member*>(this)->mVal = OBJECT_TO_JSVAL(funobj);
|
|
378
|
+
const_cast<Member*>(this)->mType |= RESOLVED;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
*retval = mVal;
|
|
382
|
+
return JS_TRUE;
|
|
383
|
+
}
|
|
@@ -0,0 +1,516 @@
|
|
|
1
|
+
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
|
2
|
+
* ***** BEGIN LICENSE BLOCK *****
|
|
3
|
+
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
4
|
+
*
|
|
5
|
+
* The contents of this file are subject to the Mozilla Public License Version
|
|
6
|
+
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
7
|
+
* the License. You may obtain a copy of the License at
|
|
8
|
+
* http://www.mozilla.org/MPL/
|
|
9
|
+
*
|
|
10
|
+
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
11
|
+
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
12
|
+
* for the specific language governing rights and limitations under the
|
|
13
|
+
* License.
|
|
14
|
+
*
|
|
15
|
+
* The Original Code is the IDispatch implementation for XPConnect.
|
|
16
|
+
*
|
|
17
|
+
* The Initial Developer of the Original Code is
|
|
18
|
+
* David Bradley.
|
|
19
|
+
* Portions created by the Initial Developer are Copyright (C) 2002
|
|
20
|
+
* the Initial Developer. All Rights Reserved.
|
|
21
|
+
*
|
|
22
|
+
* Contributor(s):
|
|
23
|
+
*
|
|
24
|
+
* Alternatively, the contents of this file may be used under the terms of
|
|
25
|
+
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
|
26
|
+
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
27
|
+
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
28
|
+
* of those above. If you wish to allow use of your version of this file only
|
|
29
|
+
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
30
|
+
* use your version of this file under the terms of the MPL, indicate your
|
|
31
|
+
* decision by deleting the provisions above and replace them with the notice
|
|
32
|
+
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
33
|
+
* the provisions above, a recipient may use your version of this file under
|
|
34
|
+
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
35
|
+
*
|
|
36
|
+
* ***** END LICENSE BLOCK ***** */
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* \file XPCDispObject.cpp
|
|
40
|
+
* Contains the XPCDispObject class implementation,
|
|
41
|
+
* XPC_IDispatch_GetterSetter, and XPC_IDispatch_CallMethod
|
|
42
|
+
*/
|
|
43
|
+
#include "xpcprivate.h"
|
|
44
|
+
#include "nsIActiveXSecurityPolicy.h"
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* This is COM's IDispatch IID, but in XPCOM's nsID type
|
|
48
|
+
*/
|
|
49
|
+
const nsID NSID_IDISPATCH = { 0x00020400, 0x0000, 0x0000, { 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46 } };
|
|
50
|
+
|
|
51
|
+
PRBool
|
|
52
|
+
XPCDispObject::WrapIDispatch(IDispatch *pDispatch, XPCCallContext &ccx,
|
|
53
|
+
JSObject *obj, jsval *rval)
|
|
54
|
+
{
|
|
55
|
+
if(!pDispatch)
|
|
56
|
+
{
|
|
57
|
+
return PR_FALSE;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Wrap the desired COM object
|
|
61
|
+
nsCOMPtr<nsIXPConnectJSObjectHolder> holder;
|
|
62
|
+
nsresult rv = ccx.GetXPConnect()->WrapNative(
|
|
63
|
+
ccx, obj, reinterpret_cast<nsISupports*>(pDispatch), NSID_IDISPATCH,
|
|
64
|
+
getter_AddRefs(holder));
|
|
65
|
+
if(NS_FAILED(rv) || !holder)
|
|
66
|
+
{
|
|
67
|
+
return PR_FALSE;
|
|
68
|
+
}
|
|
69
|
+
JSObject * jsobj;
|
|
70
|
+
if(NS_FAILED(holder->GetJSObject(&jsobj)))
|
|
71
|
+
return PR_FALSE;
|
|
72
|
+
*rval = OBJECT_TO_JSVAL(jsobj);
|
|
73
|
+
return PR_TRUE;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
HRESULT XPCDispObject::SecurityCheck(XPCCallContext & ccx, const CLSID & aCID,
|
|
77
|
+
IDispatch ** createdObject)
|
|
78
|
+
{
|
|
79
|
+
nsresult rv;
|
|
80
|
+
nsCOMPtr<nsIDispatchSupport> dispSupport = do_GetService(NS_IDISPATCH_SUPPORT_CONTRACTID, &rv);
|
|
81
|
+
if(NS_FAILED(rv)) return E_UNEXPECTED;
|
|
82
|
+
|
|
83
|
+
PRUint32 hostingFlags = nsIActiveXSecurityPolicy::HOSTING_FLAGS_HOST_NOTHING;
|
|
84
|
+
dispSupport->GetHostingFlags(nsnull, &hostingFlags);
|
|
85
|
+
PRBool allowSafeObjects;
|
|
86
|
+
if(hostingFlags & (nsIActiveXSecurityPolicy::HOSTING_FLAGS_SCRIPT_SAFE_OBJECTS))
|
|
87
|
+
allowSafeObjects = PR_TRUE;
|
|
88
|
+
else
|
|
89
|
+
allowSafeObjects = PR_FALSE;
|
|
90
|
+
PRBool allowAnyObjects;
|
|
91
|
+
if(hostingFlags & (nsIActiveXSecurityPolicy::HOSTING_FLAGS_SCRIPT_ALL_OBJECTS))
|
|
92
|
+
allowAnyObjects = PR_TRUE;
|
|
93
|
+
else
|
|
94
|
+
allowAnyObjects = PR_FALSE;
|
|
95
|
+
if(!allowSafeObjects && !allowAnyObjects)
|
|
96
|
+
return E_FAIL;
|
|
97
|
+
|
|
98
|
+
PRBool classExists = PR_FALSE;
|
|
99
|
+
PRBool ok = PR_FALSE;
|
|
100
|
+
const nsCID & ourCID = XPCDispCLSID2nsCID(aCID);
|
|
101
|
+
dispSupport->IsClassSafeToHost(ccx, ourCID, PR_FALSE, &classExists, &ok);
|
|
102
|
+
if(classExists && !ok)
|
|
103
|
+
return E_FAIL;
|
|
104
|
+
|
|
105
|
+
// Test if the object is scriptable
|
|
106
|
+
PRBool isScriptable = PR_FALSE;
|
|
107
|
+
if(!allowAnyObjects)
|
|
108
|
+
{
|
|
109
|
+
PRBool classExists = PR_FALSE;
|
|
110
|
+
dispSupport->IsClassMarkedSafeForScripting(ourCID, &classExists, &isScriptable);
|
|
111
|
+
if(!classExists)
|
|
112
|
+
return REGDB_E_CLASSNOTREG;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// Create the object
|
|
116
|
+
CComPtr<IDispatch> disp;
|
|
117
|
+
// If createdObject isn't null we need to create the object
|
|
118
|
+
if (createdObject)
|
|
119
|
+
{
|
|
120
|
+
HRESULT hr = disp.CoCreateInstance(aCID);
|
|
121
|
+
if(FAILED(hr))
|
|
122
|
+
return hr;
|
|
123
|
+
// if we don't allow just any object, and it wasn't marked
|
|
124
|
+
// safe for scripting then ask the object (MS idea of security)
|
|
125
|
+
if (!allowAnyObjects && !isScriptable)
|
|
126
|
+
{
|
|
127
|
+
dispSupport->IsObjectSafeForScripting(disp, NSID_IDISPATCH, &isScriptable);
|
|
128
|
+
if(!isScriptable)
|
|
129
|
+
return E_FAIL;
|
|
130
|
+
}
|
|
131
|
+
disp.CopyTo(createdObject);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
return S_OK;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
HRESULT XPCDispObject::COMCreateInstance(XPCCallContext & ccx, BSTR className,
|
|
138
|
+
PRBool enforceSecurity,
|
|
139
|
+
IDispatch ** result)
|
|
140
|
+
{
|
|
141
|
+
NS_ENSURE_ARG_POINTER(result);
|
|
142
|
+
// Turn the string into a CLSID
|
|
143
|
+
_bstr_t bstrName(className);
|
|
144
|
+
CLSID classID = CLSID_NULL;
|
|
145
|
+
HRESULT hr = CLSIDFromString(bstrName, &classID);
|
|
146
|
+
if(FAILED(hr))
|
|
147
|
+
hr = CLSIDFromProgID(bstrName, &classID);
|
|
148
|
+
if(FAILED(hr) || ::IsEqualCLSID(classID, CLSID_NULL))
|
|
149
|
+
return hr;
|
|
150
|
+
|
|
151
|
+
// If the caller cares about security do the necessary checks
|
|
152
|
+
// This results in the object being instantiated, so we'll use
|
|
153
|
+
// it
|
|
154
|
+
if(enforceSecurity)
|
|
155
|
+
return SecurityCheck(ccx, classID, result);
|
|
156
|
+
|
|
157
|
+
CComPtr<IDispatch> disp;
|
|
158
|
+
hr = disp.CoCreateInstance(classID);
|
|
159
|
+
if(FAILED(hr))
|
|
160
|
+
return hr;
|
|
161
|
+
|
|
162
|
+
disp.CopyTo(result);
|
|
163
|
+
|
|
164
|
+
return S_OK;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// static
|
|
168
|
+
JSBool XPCDispObject::Dispatch(XPCCallContext& ccx, IDispatch * disp,
|
|
169
|
+
DISPID dispID, CallMode mode,
|
|
170
|
+
XPCDispParams * params,
|
|
171
|
+
jsval* retval,
|
|
172
|
+
XPCDispInterface::Member * member,
|
|
173
|
+
XPCJSRuntime* rt)
|
|
174
|
+
{
|
|
175
|
+
_variant_t dispResult;
|
|
176
|
+
jsval val;
|
|
177
|
+
uintN err;
|
|
178
|
+
uintN argc = params->GetParamCount();
|
|
179
|
+
// Figure out what we're doing (getter/setter/method)
|
|
180
|
+
WORD dispFlags;
|
|
181
|
+
if(mode == CALL_SETTER)
|
|
182
|
+
{
|
|
183
|
+
dispFlags = DISPATCH_PROPERTYPUT;
|
|
184
|
+
}
|
|
185
|
+
else if(mode == CALL_GETTER)
|
|
186
|
+
{
|
|
187
|
+
dispFlags = DISPATCH_PROPERTYGET;
|
|
188
|
+
}
|
|
189
|
+
else
|
|
190
|
+
{
|
|
191
|
+
dispFlags = DISPATCH_METHOD;
|
|
192
|
+
}
|
|
193
|
+
HRESULT invokeResult;
|
|
194
|
+
EXCEPINFO exception;
|
|
195
|
+
// Scope the lock
|
|
196
|
+
{
|
|
197
|
+
// avoid deadlock in case the native method blocks somehow
|
|
198
|
+
AutoJSSuspendRequest req(ccx); // scoped suspend of request
|
|
199
|
+
// call IDispatch's invoke
|
|
200
|
+
invokeResult= disp->Invoke(
|
|
201
|
+
dispID, // IDispatch ID
|
|
202
|
+
IID_NULL, // Reserved must be IID_NULL
|
|
203
|
+
LOCALE_SYSTEM_DEFAULT, // The locale context, use the system's
|
|
204
|
+
dispFlags, // Type of Invoke call
|
|
205
|
+
params->GetDispParams(), // Parameters
|
|
206
|
+
&dispResult, // Where the result is stored
|
|
207
|
+
&exception, // Exception information
|
|
208
|
+
0); // Index of an argument error
|
|
209
|
+
}
|
|
210
|
+
if(SUCCEEDED(invokeResult))
|
|
211
|
+
{
|
|
212
|
+
*retval = JSVAL_VOID;
|
|
213
|
+
if(mode == CALL_METHOD)
|
|
214
|
+
{
|
|
215
|
+
NS_ASSERTION(member, "member must not be null if this is a method");
|
|
216
|
+
for(PRUint32 index = 0; index < argc; ++index)
|
|
217
|
+
{
|
|
218
|
+
const XPCDispInterface::Member::ParamInfo & paramInfo = member->GetParamInfo(index);
|
|
219
|
+
if(paramInfo.IsOut())
|
|
220
|
+
{
|
|
221
|
+
if(!XPCDispConvert::COMToJS(ccx, params->GetParamRef(index), val, err))
|
|
222
|
+
return ThrowBadParam(err, index, ccx);
|
|
223
|
+
|
|
224
|
+
if(paramInfo.IsRetVal())
|
|
225
|
+
{
|
|
226
|
+
*retval = val;
|
|
227
|
+
}
|
|
228
|
+
else
|
|
229
|
+
{
|
|
230
|
+
jsval * argv = ccx.GetArgv();
|
|
231
|
+
// Out, in/out parameters must be objects
|
|
232
|
+
if(!JSVAL_IS_OBJECT(argv[index]) ||
|
|
233
|
+
!JS_SetPropertyById(ccx, JSVAL_TO_OBJECT(argv[index]),
|
|
234
|
+
rt->GetStringID(XPCJSRuntime::IDX_VALUE), &val))
|
|
235
|
+
return ThrowBadParam(NS_ERROR_XPC_CANT_SET_OUT_VAL, index, ccx);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
if(dispResult.vt != VT_EMPTY)
|
|
241
|
+
{
|
|
242
|
+
if(!XPCDispConvert::COMToJS(ccx, dispResult, val, err))
|
|
243
|
+
{
|
|
244
|
+
ThrowBadParam(err, 0, ccx);
|
|
245
|
+
}
|
|
246
|
+
*retval = val;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
// Set the result and throw the error if one occured
|
|
250
|
+
ccx.GetXPCContext()->SetLastResult(invokeResult);
|
|
251
|
+
|
|
252
|
+
if(NS_FAILED(invokeResult))
|
|
253
|
+
{
|
|
254
|
+
XPCThrower::ThrowCOMError(ccx, invokeResult, NS_ERROR_XPC_COM_ERROR,
|
|
255
|
+
invokeResult == DISP_E_EXCEPTION ?
|
|
256
|
+
&exception : nsnull);
|
|
257
|
+
return JS_FALSE;
|
|
258
|
+
}
|
|
259
|
+
return JS_TRUE;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
JSBool XPCDispObject::Invoke(XPCCallContext & ccx, CallMode mode)
|
|
263
|
+
{
|
|
264
|
+
nsresult rv = ccx.CanCallNow();
|
|
265
|
+
if(NS_FAILED(rv))
|
|
266
|
+
{
|
|
267
|
+
// If the security manager is complaining then this is not really an
|
|
268
|
+
// internal error in xpconnect. So, no reason to botch the assertion.
|
|
269
|
+
NS_ASSERTION(rv == NS_ERROR_XPC_SECURITY_MANAGER_VETO,
|
|
270
|
+
"hmm? CanCallNow failed in XPCDispObject::Invoke. "
|
|
271
|
+
"We are finding out about this late!");
|
|
272
|
+
XPCThrower::Throw(rv, ccx);
|
|
273
|
+
return JS_FALSE;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
// TODO: Remove type cast and change GetIDispatchMember to use the correct type
|
|
277
|
+
XPCDispInterface::Member* member = reinterpret_cast<XPCDispInterface::Member*>(ccx.GetIDispatchMember());
|
|
278
|
+
XPCJSRuntime* rt = ccx.GetRuntime();
|
|
279
|
+
XPCContext* xpcc = ccx.GetXPCContext();
|
|
280
|
+
XPCPerThreadData* tls = ccx.GetThreadData();
|
|
281
|
+
|
|
282
|
+
jsval* argv = ccx.GetArgv();
|
|
283
|
+
uintN argc = ccx.GetArgc();
|
|
284
|
+
|
|
285
|
+
tls->SetException(nsnull);
|
|
286
|
+
xpcc->SetLastResult(NS_ERROR_UNEXPECTED);
|
|
287
|
+
|
|
288
|
+
// set up the method index and do the security check if needed
|
|
289
|
+
|
|
290
|
+
PRUint32 secFlag;
|
|
291
|
+
PRUint32 secAction;
|
|
292
|
+
|
|
293
|
+
switch(mode)
|
|
294
|
+
{
|
|
295
|
+
case CALL_METHOD:
|
|
296
|
+
secFlag = nsIXPCSecurityManager::HOOK_CALL_METHOD;
|
|
297
|
+
secAction = nsIXPCSecurityManager::ACCESS_CALL_METHOD;
|
|
298
|
+
break;
|
|
299
|
+
case CALL_GETTER:
|
|
300
|
+
secFlag = nsIXPCSecurityManager::HOOK_GET_PROPERTY;
|
|
301
|
+
secAction = nsIXPCSecurityManager::ACCESS_GET_PROPERTY;
|
|
302
|
+
break;
|
|
303
|
+
case CALL_SETTER:
|
|
304
|
+
secFlag = nsIXPCSecurityManager::HOOK_SET_PROPERTY;
|
|
305
|
+
secAction = nsIXPCSecurityManager::ACCESS_SET_PROPERTY;
|
|
306
|
+
break;
|
|
307
|
+
default:
|
|
308
|
+
NS_ASSERTION(0,"bad value");
|
|
309
|
+
return JS_FALSE;
|
|
310
|
+
}
|
|
311
|
+
jsval name = member->GetName();
|
|
312
|
+
|
|
313
|
+
nsIXPCSecurityManager* sm = xpcc->GetAppropriateSecurityManager(secFlag);
|
|
314
|
+
XPCWrappedNative* wrapper = ccx.GetWrapper();
|
|
315
|
+
if(sm && NS_FAILED(sm->CanAccess(secAction, &ccx, ccx,
|
|
316
|
+
ccx.GetFlattenedJSObject(),
|
|
317
|
+
wrapper->GetIdentityObject(),
|
|
318
|
+
wrapper->GetClassInfo(), name,
|
|
319
|
+
wrapper->GetSecurityInfoAddr())))
|
|
320
|
+
{
|
|
321
|
+
// the security manager vetoed. It should have set an exception.
|
|
322
|
+
return JS_FALSE;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
IDispatch * pObj = reinterpret_cast<IDispatch*>
|
|
326
|
+
(ccx.GetTearOff()->GetNative());
|
|
327
|
+
PRUint32 args = member->GetParamCount();
|
|
328
|
+
uintN err;
|
|
329
|
+
// Make sure setter has one argument
|
|
330
|
+
if(mode == CALL_SETTER)
|
|
331
|
+
args = 1;
|
|
332
|
+
// Allow for optional parameters. We'll let COM handle the error if there
|
|
333
|
+
// are not enough parameters
|
|
334
|
+
if(argc < args)
|
|
335
|
+
args = argc;
|
|
336
|
+
XPCDispParams * params = new XPCDispParams(args);
|
|
337
|
+
jsval val;
|
|
338
|
+
// If this is a setter, we just need to convert the first parameter
|
|
339
|
+
if(mode == CALL_SETTER)
|
|
340
|
+
{
|
|
341
|
+
params->SetNamedPropID();
|
|
342
|
+
if(!XPCDispConvert::JSToCOM(ccx, argv[0], params->GetParamRef(0), err))
|
|
343
|
+
{
|
|
344
|
+
delete params;
|
|
345
|
+
return ThrowBadParam(err, 0, ccx);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
else if(mode != CALL_GETTER) // This is a function
|
|
349
|
+
{
|
|
350
|
+
// Convert the arguments to the function
|
|
351
|
+
for(PRUint32 index = 0; index < args; ++index)
|
|
352
|
+
{
|
|
353
|
+
const XPCDispInterface::Member::ParamInfo & paramInfo = member->GetParamInfo(index);
|
|
354
|
+
if(paramInfo.IsIn())
|
|
355
|
+
{
|
|
356
|
+
val = argv[index];
|
|
357
|
+
if(paramInfo.IsOut())
|
|
358
|
+
{
|
|
359
|
+
if(JSVAL_IS_PRIMITIVE(val) ||
|
|
360
|
+
!JS_GetPropertyById(ccx, JSVAL_TO_OBJECT(val),
|
|
361
|
+
rt->GetStringID(XPCJSRuntime::IDX_VALUE), &val))
|
|
362
|
+
{
|
|
363
|
+
delete params;
|
|
364
|
+
return ThrowBadParam(NS_ERROR_XPC_NEED_OUT_OBJECT, index, ccx);
|
|
365
|
+
}
|
|
366
|
+
paramInfo.InitializeOutputParam(params->GetOutputBuffer(index), params->GetParamRef(index));
|
|
367
|
+
}
|
|
368
|
+
if(!XPCDispConvert::JSToCOM(ccx, val, params->GetParamRef(index), err, paramInfo.IsOut()))
|
|
369
|
+
{
|
|
370
|
+
delete params;
|
|
371
|
+
return ThrowBadParam(err, index, ccx);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
else
|
|
375
|
+
{
|
|
376
|
+
paramInfo.InitializeOutputParam(params->GetOutputBuffer(index), params->GetParamRef(index));
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
// If this is a parameterized property
|
|
381
|
+
if(member->IsParameterizedProperty())
|
|
382
|
+
{
|
|
383
|
+
// We need to get a parameterized property object to return to JS
|
|
384
|
+
// NewInstance takes ownership of params
|
|
385
|
+
if(XPCDispParamPropJSClass::NewInstance(ccx, wrapper,
|
|
386
|
+
member->GetDispID(),
|
|
387
|
+
params, &val))
|
|
388
|
+
{
|
|
389
|
+
ccx.SetRetVal(val);
|
|
390
|
+
if(!JS_IdToValue(ccx, 1, &val))
|
|
391
|
+
{
|
|
392
|
+
// This shouldn't fail
|
|
393
|
+
NS_ERROR("JS_IdToValue failed in XPCDispParamPropJSClass::NewInstance");
|
|
394
|
+
return JS_FALSE;
|
|
395
|
+
}
|
|
396
|
+
JS_SetCallReturnValue2(ccx, val);
|
|
397
|
+
return JS_TRUE;
|
|
398
|
+
}
|
|
399
|
+
// NewInstance would only fail if there was an out of memory problem
|
|
400
|
+
JS_ReportOutOfMemory(ccx);
|
|
401
|
+
delete params;
|
|
402
|
+
return JS_FALSE;
|
|
403
|
+
}
|
|
404
|
+
JSBool retval = Dispatch(ccx, pObj, member->GetDispID(), mode, params, &val, member, rt);
|
|
405
|
+
if(retval && mode == CALL_SETTER)
|
|
406
|
+
{
|
|
407
|
+
ccx.SetRetVal(argv[0]);
|
|
408
|
+
}
|
|
409
|
+
else
|
|
410
|
+
{
|
|
411
|
+
ccx.SetRetVal(val);
|
|
412
|
+
}
|
|
413
|
+
delete params;
|
|
414
|
+
return retval;
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
static
|
|
418
|
+
JSBool GetMember(XPCCallContext& ccx, JSObject* funobj, XPCNativeInterface*& iface, XPCDispInterface::Member*& member)
|
|
419
|
+
{
|
|
420
|
+
jsval val;
|
|
421
|
+
if(!JS_GetReservedSlot(ccx, funobj, 1, &val))
|
|
422
|
+
return JS_FALSE;
|
|
423
|
+
if(!JSVAL_IS_INT(val))
|
|
424
|
+
return JS_FALSE;
|
|
425
|
+
iface = reinterpret_cast<XPCNativeInterface*>(JSVAL_TO_PRIVATE(val));
|
|
426
|
+
if(!JS_GetReservedSlot(ccx, funobj, 0, &val))
|
|
427
|
+
return JS_FALSE;
|
|
428
|
+
if(!JSVAL_IS_INT(val))
|
|
429
|
+
return JS_FALSE;
|
|
430
|
+
member = reinterpret_cast<XPCDispInterface::Member*>(JSVAL_TO_PRIVATE(val));
|
|
431
|
+
return JS_TRUE;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
// Handy macro used in callbacks below.
|
|
435
|
+
#define THROW_AND_RETURN_IF_BAD_WRAPPER(cx, wrapper) \
|
|
436
|
+
PR_BEGIN_MACRO \
|
|
437
|
+
if(!wrapper) \
|
|
438
|
+
{ \
|
|
439
|
+
XPCThrower::Throw(NS_ERROR_XPC_BAD_OP_ON_WN_PROTO, cx); \
|
|
440
|
+
return JS_FALSE; \
|
|
441
|
+
} \
|
|
442
|
+
if(!wrapper->IsValid()) \
|
|
443
|
+
{ \
|
|
444
|
+
XPCThrower::Throw(NS_ERROR_XPC_HAS_BEEN_SHUTDOWN, cx); \
|
|
445
|
+
return JS_FALSE; \
|
|
446
|
+
} \
|
|
447
|
+
PR_END_MACRO
|
|
448
|
+
|
|
449
|
+
/**
|
|
450
|
+
* Callback for functions
|
|
451
|
+
* This callback is called by JS when a function on a JSObject proxying
|
|
452
|
+
* for an IDispatch instance
|
|
453
|
+
* @param cx A pointer to a JS context
|
|
454
|
+
* @param obj JS object that the parameterized property is on
|
|
455
|
+
* @param argc Number of arguments in this call
|
|
456
|
+
* @param argv The parameters passed in if any
|
|
457
|
+
* @param vp The return value
|
|
458
|
+
* @return Returns JS_TRUE if the operation succeeded
|
|
459
|
+
*/
|
|
460
|
+
JSBool
|
|
461
|
+
XPC_IDispatch_CallMethod(JSContext* cx, JSObject* obj, uintN argc,
|
|
462
|
+
jsval* argv, jsval* vp)
|
|
463
|
+
{
|
|
464
|
+
NS_ASSERTION(JS_TypeOfValue(cx, argv[-2]) == JSTYPE_FUNCTION, "bad function");
|
|
465
|
+
JSObject* funobj = JSVAL_TO_OBJECT(argv[-2]);
|
|
466
|
+
XPCCallContext ccx(JS_CALLER, cx, obj, funobj, 0, argc, argv, vp);
|
|
467
|
+
XPCWrappedNative* wrapper = ccx.GetWrapper();
|
|
468
|
+
THROW_AND_RETURN_IF_BAD_WRAPPER(cx, wrapper);
|
|
469
|
+
ccx.SetArgsAndResultPtr(argc, argv, vp);
|
|
470
|
+
|
|
471
|
+
XPCDispInterface::Member* member;
|
|
472
|
+
XPCNativeInterface* iface;
|
|
473
|
+
#ifdef DEBUG
|
|
474
|
+
PRBool ok =
|
|
475
|
+
#endif
|
|
476
|
+
GetMember(ccx, funobj, iface, member);
|
|
477
|
+
NS_ASSERTION(ok, "GetMember faild in XPC_IDispatch_CallMethod");
|
|
478
|
+
ccx.SetIDispatchInfo(iface, member);
|
|
479
|
+
|
|
480
|
+
return XPCDispObject::Invoke(ccx, XPCDispObject::CALL_METHOD);
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
/**
|
|
484
|
+
* Callback for properties
|
|
485
|
+
* This callback is called by JS when a property is set or retrieved on a
|
|
486
|
+
* JSObject proxying for an IDispatch instance
|
|
487
|
+
* @param cx A pointer to a JS context
|
|
488
|
+
* @param obj JS object that the parameterized property is on
|
|
489
|
+
* @param argc Number of arguments in this call
|
|
490
|
+
* @param argv The parameters passed in if any
|
|
491
|
+
* @param vp The return value
|
|
492
|
+
* @return Returns JS_TRUE if the operation succeeded
|
|
493
|
+
*/
|
|
494
|
+
JSBool
|
|
495
|
+
XPC_IDispatch_GetterSetter(JSContext *cx, JSObject *obj, uintN argc,
|
|
496
|
+
jsval *argv, jsval *vp)
|
|
497
|
+
{
|
|
498
|
+
NS_ASSERTION(JS_TypeOfValue(cx, argv[-2]) == JSTYPE_FUNCTION, "bad function");
|
|
499
|
+
JSObject* funobj = JSVAL_TO_OBJECT(argv[-2]);
|
|
500
|
+
|
|
501
|
+
XPCCallContext ccx(JS_CALLER, cx, obj, funobj);
|
|
502
|
+
XPCWrappedNative* wrapper = ccx.GetWrapper();
|
|
503
|
+
THROW_AND_RETURN_IF_BAD_WRAPPER(cx, wrapper);
|
|
504
|
+
|
|
505
|
+
ccx.SetArgsAndResultPtr(argc, argv, vp);
|
|
506
|
+
XPCDispInterface::Member* member;
|
|
507
|
+
XPCNativeInterface* iface;
|
|
508
|
+
#ifdef DEBUG
|
|
509
|
+
PRBool ok =
|
|
510
|
+
#endif
|
|
511
|
+
GetMember(ccx, funobj, iface, member);
|
|
512
|
+
NS_ASSERTION(ok, "GetMember faild in XPC_IDispatch_CallMethod");
|
|
513
|
+
|
|
514
|
+
ccx.SetIDispatchInfo(iface, member);
|
|
515
|
+
return XPCDispObject::Invoke(ccx, argc != 0 ? XPCDispObject::CALL_SETTER : XPCDispObject::CALL_GETTER);
|
|
516
|
+
}
|