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,21 @@
|
|
|
1
|
+
|
|
2
|
+
var clazz = Components.classes["xpc.sample_hookerupper.1"];
|
|
3
|
+
var iface = Components.interfaces.nsIXPCSample_HookerUpper;
|
|
4
|
+
var hookerupper = clazz.createInstance(iface);
|
|
5
|
+
hookerupper.createSampleObjectAtGlobalScope("A",5);
|
|
6
|
+
|
|
7
|
+
dump("A = "+A+"\n");
|
|
8
|
+
dump("A.someValue = "+A.someValue+"\n");
|
|
9
|
+
A.someValue++ ;
|
|
10
|
+
dump("A.someValue = "+A.someValue+"\n");
|
|
11
|
+
|
|
12
|
+
dump("A.B = "+A.B+"\n");
|
|
13
|
+
dump("A.B.someValue = "+A.B.someValue+"\n");
|
|
14
|
+
A.B.someValue++ ;
|
|
15
|
+
dump("A.B.someValue = "+A.B.someValue+"\n");
|
|
16
|
+
|
|
17
|
+
dump("A.B.C = "+A.B.C+"\n");
|
|
18
|
+
dump("A.B.C.someValue = "+A.B.C.someValue+"\n");
|
|
19
|
+
A.B.C.someValue++ ;
|
|
20
|
+
dump("A.B.C.someValue = "+A.B.C.someValue+"\n");
|
|
21
|
+
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
#
|
|
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 Mozilla Communicator client code, released
|
|
16
|
+
# March 31, 1998.
|
|
17
|
+
#
|
|
18
|
+
# The Initial Developer of the Original Code is
|
|
19
|
+
# Netscape Communications Corporation.
|
|
20
|
+
# Portions created by the Initial Developer are Copyright (C) 1998
|
|
21
|
+
# the Initial Developer. All Rights Reserved.
|
|
22
|
+
#
|
|
23
|
+
# Contributor(s):
|
|
24
|
+
#
|
|
25
|
+
# Alternatively, the contents of this file may be used under the terms of
|
|
26
|
+
# either of the GNU General Public License Version 2 or later (the "GPL"),
|
|
27
|
+
# or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
28
|
+
# in which case the provisions of the GPL or the LGPL are applicable instead
|
|
29
|
+
# of those above. If you wish to allow use of your version of this file only
|
|
30
|
+
# under the terms of either the GPL or the LGPL, and not to allow others to
|
|
31
|
+
# use your version of this file under the terms of the MPL, indicate your
|
|
32
|
+
# decision by deleting the provisions above and replace them with the notice
|
|
33
|
+
# and other provisions required by the GPL or the LGPL. If you do not delete
|
|
34
|
+
# the provisions above, a recipient may use your version of this file under
|
|
35
|
+
# the terms of any one of the MPL, the GPL or the LGPL.
|
|
36
|
+
#
|
|
37
|
+
# ***** END LICENSE BLOCK *****
|
|
38
|
+
|
|
39
|
+
DEPTH = ../../../..
|
|
40
|
+
topsrcdir = @top_srcdir@
|
|
41
|
+
srcdir = @srcdir@
|
|
42
|
+
VPATH = @srcdir@
|
|
43
|
+
|
|
44
|
+
include $(DEPTH)/config/autoconf.mk
|
|
45
|
+
|
|
46
|
+
MODULE = xpcshell
|
|
47
|
+
PROGRAM = xpcshell$(BIN_SUFFIX)
|
|
48
|
+
|
|
49
|
+
REQUIRES = xpconnect \
|
|
50
|
+
xpcom \
|
|
51
|
+
js \
|
|
52
|
+
caps \
|
|
53
|
+
xulapp \
|
|
54
|
+
$(NULL)
|
|
55
|
+
|
|
56
|
+
CPPSRCS = xpcshell.cpp
|
|
57
|
+
|
|
58
|
+
ifneq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT)))
|
|
59
|
+
CMMSRCS += xpcshellMacUtils.mm
|
|
60
|
+
endif
|
|
61
|
+
|
|
62
|
+
LIBS = \
|
|
63
|
+
$(DIST)/lib/$(LIB_PREFIX)xpcomglue_s.$(LIB_SUFFIX) \
|
|
64
|
+
$(LIBXUL_LIBS) \
|
|
65
|
+
$(MOZ_JS_LIBS) \
|
|
66
|
+
$(NSPR_LIBS) \
|
|
67
|
+
$(NULL)
|
|
68
|
+
|
|
69
|
+
NSDISTMODE = copy
|
|
70
|
+
|
|
71
|
+
ifdef _MSC_VER
|
|
72
|
+
ifdef WINCE
|
|
73
|
+
WIN32_EXE_LDFLAGS += -ENTRY:mainACRTStartup
|
|
74
|
+
endif
|
|
75
|
+
endif
|
|
76
|
+
|
|
77
|
+
include $(topsrcdir)/config/rules.mk
|
|
78
|
+
|
|
79
|
+
DEFINES += -DJS_THREADSAFE
|
|
80
|
+
|
|
81
|
+
ifdef MOZ_SHARK
|
|
82
|
+
DEFINES += -DMOZ_SHARK
|
|
83
|
+
CFLAGS += -F/System/Library/PrivateFrameworks
|
|
84
|
+
LDFLAGS += -F/System/Library/PrivateFrameworks -framework CHUD
|
|
85
|
+
endif
|
|
86
|
+
ifdef MOZ_CALLGRIND
|
|
87
|
+
DEFINES += -DMOZ_CALLGRIND
|
|
88
|
+
endif
|
|
89
|
+
ifdef MOZ_VTUNE
|
|
90
|
+
DEFINES += -DMOZ_VTUNE
|
|
91
|
+
CXXFLAGS += -IC:/Program\ Files/Intel/VTune/Analyzer/Include
|
|
92
|
+
LIBS += C:/Program\ Files/Intel/VTune/Analyzer/Lib/VtuneApi.lib
|
|
93
|
+
endif
|
|
94
|
+
#
|
|
95
|
+
# Line editing support. If your OS supplies the readline library, define
|
|
96
|
+
# JS_READLINE to get line editing in the xpcshell.
|
|
97
|
+
#
|
|
98
|
+
# If you can't link against readline because of GPL licensing issues
|
|
99
|
+
# (which may not apply, as xpcshell.c has the dual license) you might
|
|
100
|
+
# look at mozilla/js/src/editline, which is license-free (but not part
|
|
101
|
+
# of the mozilla build.)
|
|
102
|
+
#
|
|
103
|
+
ifdef JS_READLINE
|
|
104
|
+
DEFINES += -DEDITLINE
|
|
105
|
+
LIBS += -lreadline $(JS_READLINE_EXTRA_LIBS)
|
|
106
|
+
endif
|
|
@@ -0,0 +1,50 @@
|
|
|
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
|
+
*
|
|
26
|
+
* Alternatively, the contents of this file may be used under the terms of
|
|
27
|
+
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
|
28
|
+
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
29
|
+
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
30
|
+
* of those above. If you wish to allow use of your version of this file only
|
|
31
|
+
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
32
|
+
* use your version of this file under the terms of the MPL, indicate your
|
|
33
|
+
* decision by deleting the provisions above and replace them with the notice
|
|
34
|
+
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
35
|
+
* the provisions above, a recipient may use your version of this file under
|
|
36
|
+
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
37
|
+
*
|
|
38
|
+
* ***** END LICENSE BLOCK ***** */
|
|
39
|
+
|
|
40
|
+
/*
|
|
41
|
+
Error messages for JSShell. See js.msg for format.
|
|
42
|
+
*/
|
|
43
|
+
|
|
44
|
+
MSG_DEF(JSSMSG_NOT_AN_ERROR, 0, 0, JSEXN_NONE, "<Error #0 is reserved>")
|
|
45
|
+
MSG_DEF(JSSMSG_CANT_OPEN, 1, 2, JSEXN_NONE, "can't open {0}: {1}")
|
|
46
|
+
MSG_DEF(JSSMSG_TRAP_USAGE, 2, 0, JSEXN_NONE, "usage: trap [fun] [pc] expr")
|
|
47
|
+
MSG_DEF(JSSMSG_LINE2PC_USAGE, 3, 0, JSEXN_NONE, "usage: line2pc [fun] line")
|
|
48
|
+
MSG_DEF(JSSMSG_FILE_SCRIPTS_ONLY, 4, 0, JSEXN_NONE, "only works on JS scripts read from files")
|
|
49
|
+
MSG_DEF(JSSMSG_UNEXPECTED_EOF, 5, 1, JSEXN_NONE, "unexpected EOF in {0}")
|
|
50
|
+
MSG_DEF(JSSMSG_DOEXP_USAGE, 6, 0, JSEXN_NONE, "usage: doexp obj id")
|
|
@@ -0,0 +1,1817 @@
|
|
|
1
|
+
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
|
2
|
+
* vim: set ts=2 sw=4 et tw=80:
|
|
3
|
+
*
|
|
4
|
+
* ***** BEGIN LICENSE BLOCK *****
|
|
5
|
+
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
6
|
+
*
|
|
7
|
+
* The contents of this file are subject to the Mozilla Public License Version
|
|
8
|
+
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
9
|
+
* the License. You may obtain a copy of the License at
|
|
10
|
+
* http://www.mozilla.org/MPL/
|
|
11
|
+
*
|
|
12
|
+
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
13
|
+
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
14
|
+
* for the specific language governing rights and limitations under the
|
|
15
|
+
* License.
|
|
16
|
+
*
|
|
17
|
+
* The Original Code is Mozilla Communicator client code, released
|
|
18
|
+
* March 31, 1998.
|
|
19
|
+
*
|
|
20
|
+
* The Initial Developer of the Original Code is
|
|
21
|
+
* Netscape Communications Corporation.
|
|
22
|
+
* Portions created by the Initial Developer are Copyright (C) 1998
|
|
23
|
+
* the Initial Developer. All Rights Reserved.
|
|
24
|
+
*
|
|
25
|
+
* Contributor(s):
|
|
26
|
+
* John Bandhauer <jband@netscape.com>
|
|
27
|
+
* Pierre Phaneuf <pp@ludusdesign.com>
|
|
28
|
+
* IBM Corp.
|
|
29
|
+
* Dan Mosedale <dan.mosedale@oracle.com>
|
|
30
|
+
*
|
|
31
|
+
* Alternatively, the contents of this file may be used under the terms of
|
|
32
|
+
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
|
33
|
+
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
34
|
+
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
35
|
+
* of those above. If you wish to allow use of your version of this file only
|
|
36
|
+
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
37
|
+
* use your version of this file under the terms of the MPL, indicate your
|
|
38
|
+
* decision by deleting the provisions above and replace them with the notice
|
|
39
|
+
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
40
|
+
* the provisions above, a recipient may use your version of this file under
|
|
41
|
+
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
42
|
+
*
|
|
43
|
+
* ***** END LICENSE BLOCK ***** */
|
|
44
|
+
|
|
45
|
+
/* XPConnect JavaScript interactive shell. */
|
|
46
|
+
|
|
47
|
+
#include <stdio.h>
|
|
48
|
+
#include "nsXULAppAPI.h"
|
|
49
|
+
#include "nsServiceManagerUtils.h"
|
|
50
|
+
#include "nsComponentManagerUtils.h"
|
|
51
|
+
#include "nsStringAPI.h"
|
|
52
|
+
#include "nsIXPConnect.h"
|
|
53
|
+
#include "nsIXPCScriptable.h"
|
|
54
|
+
#include "nsIInterfaceInfo.h"
|
|
55
|
+
#include "nsIInterfaceInfoManager.h"
|
|
56
|
+
#include "nsIXPCScriptable.h"
|
|
57
|
+
#include "nsIServiceManager.h"
|
|
58
|
+
#include "nsIComponentManager.h"
|
|
59
|
+
#include "nsIComponentRegistrar.h"
|
|
60
|
+
#include "nsILocalFile.h"
|
|
61
|
+
#include "nsStringAPI.h"
|
|
62
|
+
#include "nsIDirectoryService.h"
|
|
63
|
+
#include "nsILocalFile.h"
|
|
64
|
+
#include "nsDirectoryServiceDefs.h"
|
|
65
|
+
#include "jsapi.h"
|
|
66
|
+
#include "jsdbgapi.h"
|
|
67
|
+
#include "jsprf.h"
|
|
68
|
+
#include "nscore.h"
|
|
69
|
+
#include "nsMemory.h"
|
|
70
|
+
#include "nsIGenericFactory.h"
|
|
71
|
+
#include "nsISupportsImpl.h"
|
|
72
|
+
#include "nsIJSRuntimeService.h"
|
|
73
|
+
#include "nsCOMPtr.h"
|
|
74
|
+
#include "nsAutoPtr.h"
|
|
75
|
+
#include "nsIXPCSecurityManager.h"
|
|
76
|
+
#ifdef XP_MACOSX
|
|
77
|
+
#include "xpcshellMacUtils.h"
|
|
78
|
+
#endif
|
|
79
|
+
#ifdef XP_WIN
|
|
80
|
+
#include <windows.h>
|
|
81
|
+
#endif
|
|
82
|
+
|
|
83
|
+
#ifndef XPCONNECT_STANDALONE
|
|
84
|
+
#include "nsIScriptSecurityManager.h"
|
|
85
|
+
#include "nsIPrincipal.h"
|
|
86
|
+
#endif
|
|
87
|
+
|
|
88
|
+
// all this crap is needed to do the interactive shell stuff
|
|
89
|
+
#include <stdlib.h>
|
|
90
|
+
#include <errno.h>
|
|
91
|
+
#if defined(XP_WIN) || defined(XP_OS2)
|
|
92
|
+
#include <io.h> /* for isatty() */
|
|
93
|
+
#elif defined(XP_UNIX) || defined(XP_BEOS)
|
|
94
|
+
#include <unistd.h> /* for isatty() */
|
|
95
|
+
#endif
|
|
96
|
+
|
|
97
|
+
#include "nsIJSContextStack.h"
|
|
98
|
+
|
|
99
|
+
class XPCShellDirProvider : public nsIDirectoryServiceProvider
|
|
100
|
+
{
|
|
101
|
+
public:
|
|
102
|
+
NS_DECL_ISUPPORTS_INHERITED
|
|
103
|
+
NS_DECL_NSIDIRECTORYSERVICEPROVIDER
|
|
104
|
+
|
|
105
|
+
XPCShellDirProvider() { }
|
|
106
|
+
~XPCShellDirProvider() { }
|
|
107
|
+
|
|
108
|
+
PRBool SetGREDir(const char *dir);
|
|
109
|
+
void ClearGREDir() { mGREDir = nsnull; }
|
|
110
|
+
|
|
111
|
+
private:
|
|
112
|
+
nsCOMPtr<nsILocalFile> mGREDir;
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
/***************************************************************************/
|
|
116
|
+
|
|
117
|
+
#ifdef JS_THREADSAFE
|
|
118
|
+
#define DoBeginRequest(cx) JS_BeginRequest((cx))
|
|
119
|
+
#define DoEndRequest(cx) JS_EndRequest((cx))
|
|
120
|
+
#else
|
|
121
|
+
#define DoBeginRequest(cx) ((void)0)
|
|
122
|
+
#define DoEndRequest(cx) ((void)0)
|
|
123
|
+
#endif
|
|
124
|
+
|
|
125
|
+
/***************************************************************************/
|
|
126
|
+
|
|
127
|
+
static const char kXPConnectServiceContractID[] = "@mozilla.org/js/xpc/XPConnect;1";
|
|
128
|
+
|
|
129
|
+
#define EXITCODE_RUNTIME_ERROR 3
|
|
130
|
+
#define EXITCODE_FILE_NOT_FOUND 4
|
|
131
|
+
|
|
132
|
+
FILE *gOutFile = NULL;
|
|
133
|
+
FILE *gErrFile = NULL;
|
|
134
|
+
FILE *gInFile = NULL;
|
|
135
|
+
|
|
136
|
+
int gExitCode = 0;
|
|
137
|
+
JSBool gQuitting = JS_FALSE;
|
|
138
|
+
static JSBool reportWarnings = JS_TRUE;
|
|
139
|
+
static JSBool compileOnly = JS_FALSE;
|
|
140
|
+
|
|
141
|
+
JSPrincipals *gJSPrincipals = nsnull;
|
|
142
|
+
nsAutoString *gWorkingDirectory = nsnull;
|
|
143
|
+
|
|
144
|
+
static JSBool
|
|
145
|
+
GetLocationProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
|
|
146
|
+
{
|
|
147
|
+
#if (!defined(XP_WIN) && !defined(XP_UNIX)) || defined(WINCE)
|
|
148
|
+
//XXX: your platform should really implement this
|
|
149
|
+
return JS_FALSE;
|
|
150
|
+
#else
|
|
151
|
+
JSStackFrame *fp = JS_GetScriptedCaller(cx, NULL);
|
|
152
|
+
JSScript *script = JS_GetFrameScript(cx, fp);
|
|
153
|
+
const char *filename = JS_GetScriptFilename(cx, script);
|
|
154
|
+
|
|
155
|
+
if (filename) {
|
|
156
|
+
nsresult rv;
|
|
157
|
+
nsCOMPtr<nsIXPConnect> xpc =
|
|
158
|
+
do_GetService(kXPConnectServiceContractID, &rv);
|
|
159
|
+
|
|
160
|
+
#if defined(XP_WIN)
|
|
161
|
+
// convert from the system codepage to UTF-16
|
|
162
|
+
int bufferSize = MultiByteToWideChar(CP_ACP, 0, filename,
|
|
163
|
+
-1, NULL, 0);
|
|
164
|
+
nsAutoString filenameString;
|
|
165
|
+
filenameString.SetLength(bufferSize);
|
|
166
|
+
MultiByteToWideChar(CP_ACP, 0, filename,
|
|
167
|
+
-1, (LPWSTR)filenameString.BeginWriting(),
|
|
168
|
+
filenameString.Length());
|
|
169
|
+
// remove the null terminator
|
|
170
|
+
filenameString.SetLength(bufferSize - 1);
|
|
171
|
+
|
|
172
|
+
// replace forward slashes with backslashes,
|
|
173
|
+
// since nsLocalFileWin chokes on them
|
|
174
|
+
PRUnichar *start, *end;
|
|
175
|
+
|
|
176
|
+
filenameString.BeginWriting(&start, &end);
|
|
177
|
+
|
|
178
|
+
while (start != end) {
|
|
179
|
+
if (*start == L'/')
|
|
180
|
+
*start = L'\\';
|
|
181
|
+
start++;
|
|
182
|
+
}
|
|
183
|
+
#elif defined(XP_UNIX)
|
|
184
|
+
NS_ConvertUTF8toUTF16 filenameString(filename);
|
|
185
|
+
#endif
|
|
186
|
+
|
|
187
|
+
nsCOMPtr<nsILocalFile> location;
|
|
188
|
+
if (NS_SUCCEEDED(rv)) {
|
|
189
|
+
rv = NS_NewLocalFile(filenameString,
|
|
190
|
+
PR_FALSE, getter_AddRefs(location));
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
if (!location && gWorkingDirectory) {
|
|
194
|
+
// could be a relative path, try appending it to the cwd
|
|
195
|
+
// and then normalize
|
|
196
|
+
nsAutoString absolutePath(*gWorkingDirectory);
|
|
197
|
+
absolutePath.Append(filenameString);
|
|
198
|
+
|
|
199
|
+
rv = NS_NewLocalFile(absolutePath,
|
|
200
|
+
PR_FALSE, getter_AddRefs(location));
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
if (location) {
|
|
204
|
+
nsCOMPtr<nsIXPConnectJSObjectHolder> locationHolder;
|
|
205
|
+
JSObject *locationObj = NULL;
|
|
206
|
+
|
|
207
|
+
PRBool symlink;
|
|
208
|
+
// don't normalize symlinks, because that's kind of confusing
|
|
209
|
+
if (NS_SUCCEEDED(location->IsSymlink(&symlink)) &&
|
|
210
|
+
!symlink)
|
|
211
|
+
location->Normalize();
|
|
212
|
+
rv = xpc->WrapNative(cx, obj, location,
|
|
213
|
+
NS_GET_IID(nsILocalFile),
|
|
214
|
+
getter_AddRefs(locationHolder));
|
|
215
|
+
|
|
216
|
+
if (NS_SUCCEEDED(rv) &&
|
|
217
|
+
NS_SUCCEEDED(locationHolder->GetJSObject(&locationObj))) {
|
|
218
|
+
*vp = OBJECT_TO_JSVAL(locationObj);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
return JS_TRUE;
|
|
224
|
+
#endif
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
static JSBool
|
|
228
|
+
GetLine(JSContext *cx, char *bufp, FILE *file, const char *prompt) {
|
|
229
|
+
#ifdef EDITLINE
|
|
230
|
+
/*
|
|
231
|
+
* Use readline only if file is stdin, because there's no way to specify
|
|
232
|
+
* another handle. Are other filehandles interactive?
|
|
233
|
+
*/
|
|
234
|
+
if (file == stdin) {
|
|
235
|
+
char *linep = readline(prompt);
|
|
236
|
+
if (!linep)
|
|
237
|
+
return JS_FALSE;
|
|
238
|
+
if (*linep)
|
|
239
|
+
add_history(linep);
|
|
240
|
+
strcpy(bufp, linep);
|
|
241
|
+
JS_free(cx, linep);
|
|
242
|
+
bufp += strlen(bufp);
|
|
243
|
+
*bufp++ = '\n';
|
|
244
|
+
*bufp = '\0';
|
|
245
|
+
} else
|
|
246
|
+
#endif
|
|
247
|
+
{
|
|
248
|
+
char line[256];
|
|
249
|
+
fprintf(gOutFile, prompt);
|
|
250
|
+
fflush(gOutFile);
|
|
251
|
+
if (!fgets(line, sizeof line, file))
|
|
252
|
+
return JS_FALSE;
|
|
253
|
+
strcpy(bufp, line);
|
|
254
|
+
}
|
|
255
|
+
return JS_TRUE;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
static void
|
|
259
|
+
my_ErrorReporter(JSContext *cx, const char *message, JSErrorReport *report)
|
|
260
|
+
{
|
|
261
|
+
int i, j, k, n;
|
|
262
|
+
char *prefix = NULL, *tmp;
|
|
263
|
+
const char *ctmp;
|
|
264
|
+
JSStackFrame * fp = nsnull;
|
|
265
|
+
nsCOMPtr<nsIXPConnect> xpc;
|
|
266
|
+
|
|
267
|
+
// Don't report an exception from inner JS frames as the callers may intend
|
|
268
|
+
// to handle it.
|
|
269
|
+
while ((fp = JS_FrameIterator(cx, &fp))) {
|
|
270
|
+
if (!JS_IsNativeFrame(cx, fp)) {
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
// In some cases cx->fp is null here so use XPConnect to tell us about inner
|
|
276
|
+
// frames.
|
|
277
|
+
if ((xpc = do_GetService(nsIXPConnect::GetCID()))) {
|
|
278
|
+
nsAXPCNativeCallContext *cc = nsnull;
|
|
279
|
+
xpc->GetCurrentNativeCallContext(&cc);
|
|
280
|
+
if (cc) {
|
|
281
|
+
nsAXPCNativeCallContext *prev = cc;
|
|
282
|
+
while (NS_SUCCEEDED(prev->GetPreviousCallContext(&prev)) && prev) {
|
|
283
|
+
PRUint16 lang;
|
|
284
|
+
if (NS_SUCCEEDED(prev->GetLanguage(&lang)) &&
|
|
285
|
+
lang == nsAXPCNativeCallContext::LANG_JS) {
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
if (!report) {
|
|
293
|
+
fprintf(gErrFile, "%s\n", message);
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/* Conditionally ignore reported warnings. */
|
|
298
|
+
if (JSREPORT_IS_WARNING(report->flags) && !reportWarnings)
|
|
299
|
+
return;
|
|
300
|
+
|
|
301
|
+
if (report->filename)
|
|
302
|
+
prefix = JS_smprintf("%s:", report->filename);
|
|
303
|
+
if (report->lineno) {
|
|
304
|
+
tmp = prefix;
|
|
305
|
+
prefix = JS_smprintf("%s%u: ", tmp ? tmp : "", report->lineno);
|
|
306
|
+
JS_free(cx, tmp);
|
|
307
|
+
}
|
|
308
|
+
if (JSREPORT_IS_WARNING(report->flags)) {
|
|
309
|
+
tmp = prefix;
|
|
310
|
+
prefix = JS_smprintf("%s%swarning: ",
|
|
311
|
+
tmp ? tmp : "",
|
|
312
|
+
JSREPORT_IS_STRICT(report->flags) ? "strict " : "");
|
|
313
|
+
JS_free(cx, tmp);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/* embedded newlines -- argh! */
|
|
317
|
+
while ((ctmp = strchr(message, '\n')) != 0) {
|
|
318
|
+
ctmp++;
|
|
319
|
+
if (prefix) fputs(prefix, gErrFile);
|
|
320
|
+
fwrite(message, 1, ctmp - message, gErrFile);
|
|
321
|
+
message = ctmp;
|
|
322
|
+
}
|
|
323
|
+
/* If there were no filename or lineno, the prefix might be empty */
|
|
324
|
+
if (prefix)
|
|
325
|
+
fputs(prefix, gErrFile);
|
|
326
|
+
fputs(message, gErrFile);
|
|
327
|
+
|
|
328
|
+
if (!report->linebuf) {
|
|
329
|
+
fputc('\n', gErrFile);
|
|
330
|
+
goto out;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
fprintf(gErrFile, ":\n%s%s\n%s", prefix, report->linebuf, prefix);
|
|
334
|
+
n = report->tokenptr - report->linebuf;
|
|
335
|
+
for (i = j = 0; i < n; i++) {
|
|
336
|
+
if (report->linebuf[i] == '\t') {
|
|
337
|
+
for (k = (j + 8) & ~7; j < k; j++) {
|
|
338
|
+
fputc('.', gErrFile);
|
|
339
|
+
}
|
|
340
|
+
continue;
|
|
341
|
+
}
|
|
342
|
+
fputc('.', gErrFile);
|
|
343
|
+
j++;
|
|
344
|
+
}
|
|
345
|
+
fputs("^\n", gErrFile);
|
|
346
|
+
out:
|
|
347
|
+
if (!JSREPORT_IS_WARNING(report->flags))
|
|
348
|
+
gExitCode = EXITCODE_RUNTIME_ERROR;
|
|
349
|
+
JS_free(cx, prefix);
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
static JSBool
|
|
353
|
+
ReadLine(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
|
354
|
+
{
|
|
355
|
+
// While 4096 might be quite arbitrary, this is something to be fixed in
|
|
356
|
+
// bug 105707. It is also the same limit as in ProcessFile.
|
|
357
|
+
char buf[4096];
|
|
358
|
+
JSString *str;
|
|
359
|
+
|
|
360
|
+
/* If a prompt was specified, construct the string */
|
|
361
|
+
if (argc > 0) {
|
|
362
|
+
str = JS_ValueToString(cx, argv[0]);
|
|
363
|
+
if (!str)
|
|
364
|
+
return JS_FALSE;
|
|
365
|
+
argv[0] = STRING_TO_JSVAL(str);
|
|
366
|
+
} else {
|
|
367
|
+
str = JSVAL_TO_STRING(JS_GetEmptyStringValue(cx));
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
/* Get a line from the infile */
|
|
371
|
+
if (!GetLine(cx, buf, gInFile, JS_GetStringBytes(str)))
|
|
372
|
+
return JS_FALSE;
|
|
373
|
+
|
|
374
|
+
/* Strip newline character added by GetLine() */
|
|
375
|
+
unsigned int buflen = strlen(buf);
|
|
376
|
+
if (buflen == 0) {
|
|
377
|
+
if (feof(gInFile)) {
|
|
378
|
+
*rval = JSVAL_NULL;
|
|
379
|
+
return JS_TRUE;
|
|
380
|
+
}
|
|
381
|
+
} else if (buf[buflen - 1] == '\n') {
|
|
382
|
+
--buflen;
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
/* Turn buf into a JSString */
|
|
386
|
+
str = JS_NewStringCopyN(cx, buf, buflen);
|
|
387
|
+
if (!str)
|
|
388
|
+
return JS_FALSE;
|
|
389
|
+
|
|
390
|
+
*rval = STRING_TO_JSVAL(str);
|
|
391
|
+
return JS_TRUE;
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
static JSBool
|
|
395
|
+
Print(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
|
396
|
+
{
|
|
397
|
+
uintN i, n;
|
|
398
|
+
JSString *str;
|
|
399
|
+
|
|
400
|
+
for (i = n = 0; i < argc; i++) {
|
|
401
|
+
str = JS_ValueToString(cx, argv[i]);
|
|
402
|
+
if (!str)
|
|
403
|
+
return JS_FALSE;
|
|
404
|
+
fprintf(gOutFile, "%s%s", i ? " " : "", JS_GetStringBytes(str));
|
|
405
|
+
}
|
|
406
|
+
n++;
|
|
407
|
+
if (n)
|
|
408
|
+
fputc('\n', gOutFile);
|
|
409
|
+
return JS_TRUE;
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
static JSBool
|
|
413
|
+
Dump(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
|
414
|
+
{
|
|
415
|
+
JSString *str;
|
|
416
|
+
if (!argc)
|
|
417
|
+
return JS_TRUE;
|
|
418
|
+
|
|
419
|
+
str = JS_ValueToString(cx, argv[0]);
|
|
420
|
+
if (!str)
|
|
421
|
+
return JS_FALSE;
|
|
422
|
+
|
|
423
|
+
char *bytes = JS_GetStringBytes(str);
|
|
424
|
+
bytes = strdup(bytes);
|
|
425
|
+
|
|
426
|
+
fputs(bytes, gOutFile);
|
|
427
|
+
free(bytes);
|
|
428
|
+
return JS_TRUE;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
static JSBool
|
|
432
|
+
Load(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
|
433
|
+
{
|
|
434
|
+
uintN i;
|
|
435
|
+
JSString *str;
|
|
436
|
+
const char *filename;
|
|
437
|
+
JSScript *script;
|
|
438
|
+
JSBool ok;
|
|
439
|
+
jsval result;
|
|
440
|
+
FILE *file;
|
|
441
|
+
|
|
442
|
+
for (i = 0; i < argc; i++) {
|
|
443
|
+
str = JS_ValueToString(cx, argv[i]);
|
|
444
|
+
if (!str)
|
|
445
|
+
return JS_FALSE;
|
|
446
|
+
argv[i] = STRING_TO_JSVAL(str);
|
|
447
|
+
filename = JS_GetStringBytes(str);
|
|
448
|
+
file = fopen(filename, "r");
|
|
449
|
+
if (!file) {
|
|
450
|
+
JS_ReportError(cx, "cannot open file '%s' for reading", filename);
|
|
451
|
+
return JS_FALSE;
|
|
452
|
+
}
|
|
453
|
+
script = JS_CompileFileHandleForPrincipals(cx, obj, filename, file,
|
|
454
|
+
gJSPrincipals);
|
|
455
|
+
fclose(file);
|
|
456
|
+
if (!script)
|
|
457
|
+
return JS_FALSE;
|
|
458
|
+
|
|
459
|
+
ok = !compileOnly
|
|
460
|
+
? JS_ExecuteScript(cx, obj, script, &result)
|
|
461
|
+
: JS_TRUE;
|
|
462
|
+
JS_DestroyScript(cx, script);
|
|
463
|
+
if (!ok)
|
|
464
|
+
return JS_FALSE;
|
|
465
|
+
}
|
|
466
|
+
return JS_TRUE;
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
static JSBool
|
|
470
|
+
Version(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
|
471
|
+
{
|
|
472
|
+
if (argc > 0 && JSVAL_IS_INT(argv[0]))
|
|
473
|
+
*rval = INT_TO_JSVAL(JS_SetVersion(cx, JSVersion(JSVAL_TO_INT(argv[0]))));
|
|
474
|
+
else
|
|
475
|
+
*rval = INT_TO_JSVAL(JS_GetVersion(cx));
|
|
476
|
+
return JS_TRUE;
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
static JSBool
|
|
480
|
+
BuildDate(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
|
481
|
+
{
|
|
482
|
+
fprintf(gOutFile, "built on %s at %s\n", __DATE__, __TIME__);
|
|
483
|
+
return JS_TRUE;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
static JSBool
|
|
487
|
+
Quit(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
|
488
|
+
{
|
|
489
|
+
#ifdef LIVECONNECT
|
|
490
|
+
JSJ_SimpleShutdown();
|
|
491
|
+
#endif
|
|
492
|
+
|
|
493
|
+
gExitCode = 0;
|
|
494
|
+
JS_ConvertArguments(cx, argc, argv,"/ i", &gExitCode);
|
|
495
|
+
|
|
496
|
+
gQuitting = JS_TRUE;
|
|
497
|
+
// exit(0);
|
|
498
|
+
return JS_FALSE;
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
static JSBool
|
|
502
|
+
DumpXPC(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
|
503
|
+
{
|
|
504
|
+
int32 depth = 2;
|
|
505
|
+
|
|
506
|
+
if (argc > 0) {
|
|
507
|
+
if (!JS_ValueToInt32(cx, argv[0], &depth))
|
|
508
|
+
return JS_FALSE;
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
nsCOMPtr<nsIXPConnect> xpc = do_GetService(nsIXPConnect::GetCID());
|
|
512
|
+
if(xpc)
|
|
513
|
+
xpc->DebugDump((int16)depth);
|
|
514
|
+
return JS_TRUE;
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
/* XXX needed only by GC() */
|
|
518
|
+
#include "jscntxt.h"
|
|
519
|
+
|
|
520
|
+
static JSBool
|
|
521
|
+
GC(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
|
522
|
+
{
|
|
523
|
+
JSRuntime *rt;
|
|
524
|
+
uint32 preBytes;
|
|
525
|
+
|
|
526
|
+
rt = cx->runtime;
|
|
527
|
+
preBytes = rt->gcBytes;
|
|
528
|
+
JS_GC(cx);
|
|
529
|
+
fprintf(gOutFile, "before %lu, after %lu, break %08lx\n",
|
|
530
|
+
(unsigned long)preBytes, (unsigned long)rt->gcBytes,
|
|
531
|
+
#ifdef XP_UNIX
|
|
532
|
+
(unsigned long)sbrk(0)
|
|
533
|
+
#else
|
|
534
|
+
0
|
|
535
|
+
#endif
|
|
536
|
+
);
|
|
537
|
+
#ifdef JS_GCMETER
|
|
538
|
+
js_DumpGCStats(rt, stdout);
|
|
539
|
+
#endif
|
|
540
|
+
return JS_TRUE;
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
#ifdef DEBUG
|
|
544
|
+
|
|
545
|
+
static JSBool
|
|
546
|
+
DumpHeap(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
|
547
|
+
{
|
|
548
|
+
char *fileName = NULL;
|
|
549
|
+
void* startThing = NULL;
|
|
550
|
+
uint32 startTraceKind = 0;
|
|
551
|
+
void *thingToFind = NULL;
|
|
552
|
+
size_t maxDepth = (size_t)-1;
|
|
553
|
+
void *thingToIgnore = NULL;
|
|
554
|
+
jsval *vp;
|
|
555
|
+
FILE *dumpFile;
|
|
556
|
+
JSBool ok;
|
|
557
|
+
|
|
558
|
+
vp = &argv[0];
|
|
559
|
+
if (*vp != JSVAL_NULL && *vp != JSVAL_VOID) {
|
|
560
|
+
JSString *str;
|
|
561
|
+
|
|
562
|
+
str = JS_ValueToString(cx, *vp);
|
|
563
|
+
if (!str)
|
|
564
|
+
return JS_FALSE;
|
|
565
|
+
*vp = STRING_TO_JSVAL(str);
|
|
566
|
+
fileName = JS_GetStringBytes(str);
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
vp = &argv[1];
|
|
570
|
+
if (*vp != JSVAL_NULL && *vp != JSVAL_VOID) {
|
|
571
|
+
if (!JSVAL_IS_TRACEABLE(*vp))
|
|
572
|
+
goto not_traceable_arg;
|
|
573
|
+
startThing = JSVAL_TO_TRACEABLE(*vp);
|
|
574
|
+
startTraceKind = JSVAL_TRACE_KIND(*vp);
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
vp = &argv[2];
|
|
578
|
+
if (*vp != JSVAL_NULL && *vp != JSVAL_VOID) {
|
|
579
|
+
if (!JSVAL_IS_TRACEABLE(*vp))
|
|
580
|
+
goto not_traceable_arg;
|
|
581
|
+
thingToFind = JSVAL_TO_TRACEABLE(*vp);
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
vp = &argv[3];
|
|
585
|
+
if (*vp != JSVAL_NULL && *vp != JSVAL_VOID) {
|
|
586
|
+
uint32 depth;
|
|
587
|
+
|
|
588
|
+
if (!JS_ValueToECMAUint32(cx, *vp, &depth))
|
|
589
|
+
return JS_FALSE;
|
|
590
|
+
maxDepth = depth;
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
vp = &argv[4];
|
|
594
|
+
if (*vp != JSVAL_NULL && *vp != JSVAL_VOID) {
|
|
595
|
+
if (!JSVAL_IS_TRACEABLE(*vp))
|
|
596
|
+
goto not_traceable_arg;
|
|
597
|
+
thingToIgnore = JSVAL_TO_TRACEABLE(*vp);
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
if (!fileName) {
|
|
601
|
+
dumpFile = gOutFile;
|
|
602
|
+
} else {
|
|
603
|
+
dumpFile = fopen(fileName, "w");
|
|
604
|
+
if (!dumpFile) {
|
|
605
|
+
fprintf(gErrFile, "dumpHeap: can't open %s: %s\n",
|
|
606
|
+
fileName, strerror(errno));
|
|
607
|
+
return JS_FALSE;
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
ok = JS_DumpHeap(cx, dumpFile, startThing, startTraceKind, thingToFind,
|
|
612
|
+
maxDepth, thingToIgnore);
|
|
613
|
+
if (dumpFile != gOutFile)
|
|
614
|
+
fclose(dumpFile);
|
|
615
|
+
return ok;
|
|
616
|
+
|
|
617
|
+
not_traceable_arg:
|
|
618
|
+
fprintf(gErrFile,
|
|
619
|
+
"dumpHeap: argument %u is not null or a heap-allocated thing\n",
|
|
620
|
+
(unsigned)(vp - argv));
|
|
621
|
+
return JS_FALSE;
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
#endif /* DEBUG */
|
|
625
|
+
|
|
626
|
+
static JSBool
|
|
627
|
+
Clear(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
|
628
|
+
{
|
|
629
|
+
if (argc > 0 && !JSVAL_IS_PRIMITIVE(argv[0])) {
|
|
630
|
+
JS_ClearScope(cx, JSVAL_TO_OBJECT(argv[0]));
|
|
631
|
+
} else {
|
|
632
|
+
JS_ReportError(cx, "'clear' requires an object");
|
|
633
|
+
return JS_FALSE;
|
|
634
|
+
}
|
|
635
|
+
return JS_TRUE;
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
static JSFunctionSpec glob_functions[] = {
|
|
639
|
+
{"print", Print, 0,0,0},
|
|
640
|
+
{"readline", ReadLine, 1,0,0},
|
|
641
|
+
{"load", Load, 1,0,0},
|
|
642
|
+
{"quit", Quit, 0,0,0},
|
|
643
|
+
{"version", Version, 1,0,0},
|
|
644
|
+
{"build", BuildDate, 0,0,0},
|
|
645
|
+
{"dumpXPC", DumpXPC, 1,0,0},
|
|
646
|
+
{"dump", Dump, 1,0,0},
|
|
647
|
+
{"gc", GC, 0,0,0},
|
|
648
|
+
{"clear", Clear, 1,0,0},
|
|
649
|
+
#ifdef DEBUG
|
|
650
|
+
{"dumpHeap", DumpHeap, 5,0,0},
|
|
651
|
+
#endif
|
|
652
|
+
#ifdef MOZ_SHARK
|
|
653
|
+
{"startShark", js_StartShark, 0,0,0},
|
|
654
|
+
{"stopShark", js_StopShark, 0,0,0},
|
|
655
|
+
{"connectShark", js_ConnectShark, 0,0,0},
|
|
656
|
+
{"disconnectShark", js_DisconnectShark, 0,0,0},
|
|
657
|
+
#endif
|
|
658
|
+
#ifdef MOZ_CALLGRIND
|
|
659
|
+
{"startCallgrind", js_StartCallgrind, 0,0,0},
|
|
660
|
+
{"stopCallgrind", js_StopCallgrind, 0,0,0},
|
|
661
|
+
{"dumpCallgrind", js_DumpCallgrind, 1,0,0},
|
|
662
|
+
#endif
|
|
663
|
+
{nsnull,nsnull,0,0,0}
|
|
664
|
+
};
|
|
665
|
+
|
|
666
|
+
JSClass global_class = {
|
|
667
|
+
"global", 0,
|
|
668
|
+
JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub,
|
|
669
|
+
JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub
|
|
670
|
+
};
|
|
671
|
+
|
|
672
|
+
static JSBool
|
|
673
|
+
env_setProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
|
|
674
|
+
{
|
|
675
|
+
/* XXX porting may be easy, but these don't seem to supply setenv by default */
|
|
676
|
+
#if !defined XP_BEOS && !defined XP_OS2 && !defined SOLARIS
|
|
677
|
+
JSString *idstr, *valstr;
|
|
678
|
+
const char *name, *value;
|
|
679
|
+
int rv;
|
|
680
|
+
|
|
681
|
+
idstr = JS_ValueToString(cx, id);
|
|
682
|
+
valstr = JS_ValueToString(cx, *vp);
|
|
683
|
+
if (!idstr || !valstr)
|
|
684
|
+
return JS_FALSE;
|
|
685
|
+
name = JS_GetStringBytes(idstr);
|
|
686
|
+
value = JS_GetStringBytes(valstr);
|
|
687
|
+
#if defined XP_WIN || defined HPUX || defined OSF1 || defined IRIX \
|
|
688
|
+
|| defined SCO
|
|
689
|
+
{
|
|
690
|
+
char *waste = JS_smprintf("%s=%s", name, value);
|
|
691
|
+
if (!waste) {
|
|
692
|
+
JS_ReportOutOfMemory(cx);
|
|
693
|
+
return JS_FALSE;
|
|
694
|
+
}
|
|
695
|
+
rv = putenv(waste);
|
|
696
|
+
#ifdef XP_WIN
|
|
697
|
+
/*
|
|
698
|
+
* HPUX9 at least still has the bad old non-copying putenv.
|
|
699
|
+
*
|
|
700
|
+
* Per mail from <s.shanmuganathan@digital.com>, OSF1 also has a putenv
|
|
701
|
+
* that will crash if you pass it an auto char array (so it must place
|
|
702
|
+
* its argument directly in the char *environ[] array).
|
|
703
|
+
*/
|
|
704
|
+
free(waste);
|
|
705
|
+
#endif
|
|
706
|
+
}
|
|
707
|
+
#else
|
|
708
|
+
rv = setenv(name, value, 1);
|
|
709
|
+
#endif
|
|
710
|
+
if (rv < 0) {
|
|
711
|
+
JS_ReportError(cx, "can't set envariable %s to %s", name, value);
|
|
712
|
+
return JS_FALSE;
|
|
713
|
+
}
|
|
714
|
+
*vp = STRING_TO_JSVAL(valstr);
|
|
715
|
+
#endif /* !defined XP_BEOS && !defined XP_OS2 && !defined SOLARIS */
|
|
716
|
+
return JS_TRUE;
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
static JSBool
|
|
720
|
+
env_enumerate(JSContext *cx, JSObject *obj)
|
|
721
|
+
{
|
|
722
|
+
static JSBool reflected;
|
|
723
|
+
char **evp, *name, *value;
|
|
724
|
+
JSString *valstr;
|
|
725
|
+
JSBool ok;
|
|
726
|
+
|
|
727
|
+
if (reflected)
|
|
728
|
+
return JS_TRUE;
|
|
729
|
+
|
|
730
|
+
for (evp = (char **)JS_GetPrivate(cx, obj); (name = *evp) != NULL; evp++) {
|
|
731
|
+
value = strchr(name, '=');
|
|
732
|
+
if (!value)
|
|
733
|
+
continue;
|
|
734
|
+
*value++ = '\0';
|
|
735
|
+
valstr = JS_NewStringCopyZ(cx, value);
|
|
736
|
+
if (!valstr) {
|
|
737
|
+
ok = JS_FALSE;
|
|
738
|
+
} else {
|
|
739
|
+
ok = JS_DefineProperty(cx, obj, name, STRING_TO_JSVAL(valstr),
|
|
740
|
+
NULL, NULL, JSPROP_ENUMERATE);
|
|
741
|
+
}
|
|
742
|
+
value[-1] = '=';
|
|
743
|
+
if (!ok)
|
|
744
|
+
return JS_FALSE;
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
reflected = JS_TRUE;
|
|
748
|
+
return JS_TRUE;
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
static JSBool
|
|
752
|
+
env_resolve(JSContext *cx, JSObject *obj, jsval id, uintN flags,
|
|
753
|
+
JSObject **objp)
|
|
754
|
+
{
|
|
755
|
+
JSString *idstr, *valstr;
|
|
756
|
+
const char *name, *value;
|
|
757
|
+
|
|
758
|
+
if (flags & JSRESOLVE_ASSIGNING)
|
|
759
|
+
return JS_TRUE;
|
|
760
|
+
|
|
761
|
+
idstr = JS_ValueToString(cx, id);
|
|
762
|
+
if (!idstr)
|
|
763
|
+
return JS_FALSE;
|
|
764
|
+
name = JS_GetStringBytes(idstr);
|
|
765
|
+
value = getenv(name);
|
|
766
|
+
if (value) {
|
|
767
|
+
valstr = JS_NewStringCopyZ(cx, value);
|
|
768
|
+
if (!valstr)
|
|
769
|
+
return JS_FALSE;
|
|
770
|
+
if (!JS_DefineProperty(cx, obj, name, STRING_TO_JSVAL(valstr),
|
|
771
|
+
NULL, NULL, JSPROP_ENUMERATE)) {
|
|
772
|
+
return JS_FALSE;
|
|
773
|
+
}
|
|
774
|
+
*objp = obj;
|
|
775
|
+
}
|
|
776
|
+
return JS_TRUE;
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
static JSClass env_class = {
|
|
780
|
+
"environment", JSCLASS_HAS_PRIVATE | JSCLASS_NEW_RESOLVE,
|
|
781
|
+
JS_PropertyStub, JS_PropertyStub,
|
|
782
|
+
JS_PropertyStub, env_setProperty,
|
|
783
|
+
env_enumerate, (JSResolveOp) env_resolve,
|
|
784
|
+
JS_ConvertStub, JS_FinalizeStub
|
|
785
|
+
};
|
|
786
|
+
|
|
787
|
+
/***************************************************************************/
|
|
788
|
+
|
|
789
|
+
typedef enum JSShellErrNum {
|
|
790
|
+
#define MSG_DEF(name, number, count, exception, format) \
|
|
791
|
+
name = number,
|
|
792
|
+
#include "jsshell.msg"
|
|
793
|
+
#undef MSG_DEF
|
|
794
|
+
JSShellErr_Limit
|
|
795
|
+
#undef MSGDEF
|
|
796
|
+
} JSShellErrNum;
|
|
797
|
+
|
|
798
|
+
JSErrorFormatString jsShell_ErrorFormatString[JSErr_Limit] = {
|
|
799
|
+
#define MSG_DEF(name, number, count, exception, format) \
|
|
800
|
+
{ format, count } ,
|
|
801
|
+
#include "jsshell.msg"
|
|
802
|
+
#undef MSG_DEF
|
|
803
|
+
};
|
|
804
|
+
|
|
805
|
+
static const JSErrorFormatString *
|
|
806
|
+
my_GetErrorMessage(void *userRef, const char *locale, const uintN errorNumber)
|
|
807
|
+
{
|
|
808
|
+
if ((errorNumber > 0) && (errorNumber < JSShellErr_Limit))
|
|
809
|
+
return &jsShell_ErrorFormatString[errorNumber];
|
|
810
|
+
else
|
|
811
|
+
return NULL;
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
#ifdef EDITLINE
|
|
815
|
+
extern "C" {
|
|
816
|
+
extern char *readline(const char *prompt);
|
|
817
|
+
extern void add_history(char *line);
|
|
818
|
+
}
|
|
819
|
+
#endif
|
|
820
|
+
|
|
821
|
+
static void
|
|
822
|
+
ProcessFile(JSContext *cx, JSObject *obj, const char *filename, FILE *file,
|
|
823
|
+
JSBool forceTTY)
|
|
824
|
+
{
|
|
825
|
+
JSScript *script;
|
|
826
|
+
jsval result;
|
|
827
|
+
int lineno, startline;
|
|
828
|
+
JSBool ok, hitEOF;
|
|
829
|
+
char *bufp, buffer[4096];
|
|
830
|
+
JSString *str;
|
|
831
|
+
|
|
832
|
+
if (forceTTY) {
|
|
833
|
+
file = stdin;
|
|
834
|
+
} else if (!isatty(fileno(file))) {
|
|
835
|
+
/*
|
|
836
|
+
* It's not interactive - just execute it.
|
|
837
|
+
*
|
|
838
|
+
* Support the UNIX #! shell hack; gobble the first line if it starts
|
|
839
|
+
* with '#'. TODO - this isn't quite compatible with sharp variables,
|
|
840
|
+
* as a legal js program (using sharp variables) might start with '#'.
|
|
841
|
+
* But that would require multi-character lookahead.
|
|
842
|
+
*/
|
|
843
|
+
int ch = fgetc(file);
|
|
844
|
+
if (ch == '#') {
|
|
845
|
+
while((ch = fgetc(file)) != EOF) {
|
|
846
|
+
if(ch == '\n' || ch == '\r')
|
|
847
|
+
break;
|
|
848
|
+
}
|
|
849
|
+
}
|
|
850
|
+
ungetc(ch, file);
|
|
851
|
+
DoBeginRequest(cx);
|
|
852
|
+
|
|
853
|
+
script = JS_CompileFileHandleForPrincipals(cx, obj, filename, file,
|
|
854
|
+
gJSPrincipals);
|
|
855
|
+
|
|
856
|
+
if (script) {
|
|
857
|
+
if (!compileOnly)
|
|
858
|
+
(void)JS_ExecuteScript(cx, obj, script, &result);
|
|
859
|
+
JS_DestroyScript(cx, script);
|
|
860
|
+
}
|
|
861
|
+
DoEndRequest(cx);
|
|
862
|
+
|
|
863
|
+
return;
|
|
864
|
+
}
|
|
865
|
+
|
|
866
|
+
/* It's an interactive filehandle; drop into read-eval-print loop. */
|
|
867
|
+
lineno = 1;
|
|
868
|
+
hitEOF = JS_FALSE;
|
|
869
|
+
do {
|
|
870
|
+
bufp = buffer;
|
|
871
|
+
*bufp = '\0';
|
|
872
|
+
|
|
873
|
+
/*
|
|
874
|
+
* Accumulate lines until we get a 'compilable unit' - one that either
|
|
875
|
+
* generates an error (before running out of source) or that compiles
|
|
876
|
+
* cleanly. This should be whenever we get a complete statement that
|
|
877
|
+
* coincides with the end of a line.
|
|
878
|
+
*/
|
|
879
|
+
startline = lineno;
|
|
880
|
+
do {
|
|
881
|
+
if (!GetLine(cx, bufp, file, startline == lineno ? "js> " : "")) {
|
|
882
|
+
hitEOF = JS_TRUE;
|
|
883
|
+
break;
|
|
884
|
+
}
|
|
885
|
+
bufp += strlen(bufp);
|
|
886
|
+
lineno++;
|
|
887
|
+
} while (!JS_BufferIsCompilableUnit(cx, obj, buffer, strlen(buffer)));
|
|
888
|
+
|
|
889
|
+
DoBeginRequest(cx);
|
|
890
|
+
/* Clear any pending exception from previous failed compiles. */
|
|
891
|
+
JS_ClearPendingException(cx);
|
|
892
|
+
script = JS_CompileScriptForPrincipals(cx, obj, gJSPrincipals, buffer,
|
|
893
|
+
strlen(buffer), "typein", startline);
|
|
894
|
+
if (script) {
|
|
895
|
+
JSErrorReporter older;
|
|
896
|
+
|
|
897
|
+
if (!compileOnly) {
|
|
898
|
+
ok = JS_ExecuteScript(cx, obj, script, &result);
|
|
899
|
+
if (ok && result != JSVAL_VOID) {
|
|
900
|
+
/* Suppress error reports from JS_ValueToString(). */
|
|
901
|
+
older = JS_SetErrorReporter(cx, NULL);
|
|
902
|
+
str = JS_ValueToString(cx, result);
|
|
903
|
+
JS_SetErrorReporter(cx, older);
|
|
904
|
+
|
|
905
|
+
if (str)
|
|
906
|
+
fprintf(gOutFile, "%s\n", JS_GetStringBytes(str));
|
|
907
|
+
else
|
|
908
|
+
ok = JS_FALSE;
|
|
909
|
+
}
|
|
910
|
+
}
|
|
911
|
+
JS_DestroyScript(cx, script);
|
|
912
|
+
}
|
|
913
|
+
DoEndRequest(cx);
|
|
914
|
+
} while (!hitEOF && !gQuitting);
|
|
915
|
+
|
|
916
|
+
fprintf(gOutFile, "\n");
|
|
917
|
+
}
|
|
918
|
+
|
|
919
|
+
static void
|
|
920
|
+
Process(JSContext *cx, JSObject *obj, const char *filename, JSBool forceTTY)
|
|
921
|
+
{
|
|
922
|
+
FILE *file;
|
|
923
|
+
|
|
924
|
+
if (forceTTY || !filename || strcmp(filename, "-") == 0) {
|
|
925
|
+
file = stdin;
|
|
926
|
+
} else {
|
|
927
|
+
file = fopen(filename, "r");
|
|
928
|
+
if (!file) {
|
|
929
|
+
JS_ReportErrorNumber(cx, my_GetErrorMessage, NULL,
|
|
930
|
+
JSSMSG_CANT_OPEN,
|
|
931
|
+
filename, strerror(errno));
|
|
932
|
+
gExitCode = EXITCODE_FILE_NOT_FOUND;
|
|
933
|
+
return;
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
ProcessFile(cx, obj, filename, file, forceTTY);
|
|
938
|
+
if (file != stdin)
|
|
939
|
+
fclose(file);
|
|
940
|
+
}
|
|
941
|
+
|
|
942
|
+
static int
|
|
943
|
+
usage(void)
|
|
944
|
+
{
|
|
945
|
+
fprintf(gErrFile, "%s\n", JS_GetImplementationVersion());
|
|
946
|
+
fprintf(gErrFile, "usage: xpcshell [-g gredir] [-PswWxCij] [-v version] [-f scriptfile] [-e script] [scriptfile] [scriptarg...]\n");
|
|
947
|
+
return 2;
|
|
948
|
+
}
|
|
949
|
+
|
|
950
|
+
extern JSClass global_class;
|
|
951
|
+
|
|
952
|
+
static int
|
|
953
|
+
ProcessArgs(JSContext *cx, JSObject *obj, char **argv, int argc)
|
|
954
|
+
{
|
|
955
|
+
const char rcfilename[] = "xpcshell.js";
|
|
956
|
+
FILE *rcfile;
|
|
957
|
+
int i, j, length;
|
|
958
|
+
JSObject *argsObj;
|
|
959
|
+
char *filename = NULL;
|
|
960
|
+
JSBool isInteractive = JS_TRUE;
|
|
961
|
+
JSBool forceTTY = JS_FALSE;
|
|
962
|
+
|
|
963
|
+
rcfile = fopen(rcfilename, "r");
|
|
964
|
+
if (rcfile) {
|
|
965
|
+
printf("[loading '%s'...]\n", rcfilename);
|
|
966
|
+
ProcessFile(cx, obj, rcfilename, rcfile, JS_FALSE);
|
|
967
|
+
fclose(rcfile);
|
|
968
|
+
}
|
|
969
|
+
|
|
970
|
+
/*
|
|
971
|
+
* Scan past all optional arguments so we can create the arguments object
|
|
972
|
+
* before processing any -f options, which must interleave properly with
|
|
973
|
+
* -v and -w options. This requires two passes, and without getopt, we'll
|
|
974
|
+
* have to keep the option logic here and in the second for loop in sync.
|
|
975
|
+
*/
|
|
976
|
+
for (i = 0; i < argc; i++) {
|
|
977
|
+
if (argv[i][0] != '-' || argv[i][1] == '\0') {
|
|
978
|
+
++i;
|
|
979
|
+
break;
|
|
980
|
+
}
|
|
981
|
+
switch (argv[i][1]) {
|
|
982
|
+
case 'v':
|
|
983
|
+
case 'f':
|
|
984
|
+
case 'e':
|
|
985
|
+
++i;
|
|
986
|
+
break;
|
|
987
|
+
default:;
|
|
988
|
+
}
|
|
989
|
+
}
|
|
990
|
+
|
|
991
|
+
/*
|
|
992
|
+
* Create arguments early and define it to root it, so it's safe from any
|
|
993
|
+
* GC calls nested below, and so it is available to -f <file> arguments.
|
|
994
|
+
*/
|
|
995
|
+
argsObj = JS_NewArrayObject(cx, 0, NULL);
|
|
996
|
+
if (!argsObj)
|
|
997
|
+
return 1;
|
|
998
|
+
if (!JS_DefineProperty(cx, obj, "arguments", OBJECT_TO_JSVAL(argsObj),
|
|
999
|
+
NULL, NULL, 0)) {
|
|
1000
|
+
return 1;
|
|
1001
|
+
}
|
|
1002
|
+
|
|
1003
|
+
length = argc - i;
|
|
1004
|
+
for (j = 0; j < length; j++) {
|
|
1005
|
+
JSString *str = JS_NewStringCopyZ(cx, argv[i++]);
|
|
1006
|
+
if (!str)
|
|
1007
|
+
return 1;
|
|
1008
|
+
if (!JS_DefineElement(cx, argsObj, j, STRING_TO_JSVAL(str),
|
|
1009
|
+
NULL, NULL, JSPROP_ENUMERATE)) {
|
|
1010
|
+
return 1;
|
|
1011
|
+
}
|
|
1012
|
+
}
|
|
1013
|
+
|
|
1014
|
+
for (i = 0; i < argc; i++) {
|
|
1015
|
+
if (argv[i][0] != '-' || argv[i][1] == '\0') {
|
|
1016
|
+
filename = argv[i++];
|
|
1017
|
+
isInteractive = JS_FALSE;
|
|
1018
|
+
break;
|
|
1019
|
+
}
|
|
1020
|
+
switch (argv[i][1]) {
|
|
1021
|
+
case 'v':
|
|
1022
|
+
if (++i == argc) {
|
|
1023
|
+
return usage();
|
|
1024
|
+
}
|
|
1025
|
+
JS_SetVersion(cx, JSVersion(atoi(argv[i])));
|
|
1026
|
+
break;
|
|
1027
|
+
case 'W':
|
|
1028
|
+
reportWarnings = JS_FALSE;
|
|
1029
|
+
break;
|
|
1030
|
+
case 'w':
|
|
1031
|
+
reportWarnings = JS_TRUE;
|
|
1032
|
+
break;
|
|
1033
|
+
case 's':
|
|
1034
|
+
JS_ToggleOptions(cx, JSOPTION_STRICT);
|
|
1035
|
+
break;
|
|
1036
|
+
case 'x':
|
|
1037
|
+
JS_ToggleOptions(cx, JSOPTION_XML);
|
|
1038
|
+
break;
|
|
1039
|
+
case 'P':
|
|
1040
|
+
if (JS_GET_CLASS(cx, JS_GetPrototype(cx, obj)) != &global_class) {
|
|
1041
|
+
JSObject *gobj;
|
|
1042
|
+
|
|
1043
|
+
if (!JS_SealObject(cx, obj, JS_TRUE))
|
|
1044
|
+
return JS_FALSE;
|
|
1045
|
+
gobj = JS_NewObject(cx, &global_class, NULL, NULL);
|
|
1046
|
+
if (!gobj)
|
|
1047
|
+
return JS_FALSE;
|
|
1048
|
+
if (!JS_SetPrototype(cx, gobj, obj))
|
|
1049
|
+
return JS_FALSE;
|
|
1050
|
+
JS_SetParent(cx, gobj, NULL);
|
|
1051
|
+
JS_SetGlobalObject(cx, gobj);
|
|
1052
|
+
obj = gobj;
|
|
1053
|
+
}
|
|
1054
|
+
break;
|
|
1055
|
+
case 'f':
|
|
1056
|
+
if (++i == argc) {
|
|
1057
|
+
return usage();
|
|
1058
|
+
}
|
|
1059
|
+
Process(cx, obj, argv[i], JS_FALSE);
|
|
1060
|
+
/*
|
|
1061
|
+
* XXX: js -f foo.js should interpret foo.js and then
|
|
1062
|
+
* drop into interactive mode, but that breaks test
|
|
1063
|
+
* harness. Just execute foo.js for now.
|
|
1064
|
+
*/
|
|
1065
|
+
isInteractive = JS_FALSE;
|
|
1066
|
+
break;
|
|
1067
|
+
case 'i':
|
|
1068
|
+
isInteractive = forceTTY = JS_TRUE;
|
|
1069
|
+
break;
|
|
1070
|
+
case 'e':
|
|
1071
|
+
{
|
|
1072
|
+
jsval rval;
|
|
1073
|
+
|
|
1074
|
+
if (++i == argc) {
|
|
1075
|
+
return usage();
|
|
1076
|
+
}
|
|
1077
|
+
|
|
1078
|
+
JS_EvaluateScriptForPrincipals(cx, obj, gJSPrincipals, argv[i],
|
|
1079
|
+
strlen(argv[i]), "-e", 1, &rval);
|
|
1080
|
+
|
|
1081
|
+
isInteractive = JS_FALSE;
|
|
1082
|
+
break;
|
|
1083
|
+
}
|
|
1084
|
+
case 'C':
|
|
1085
|
+
compileOnly = JS_TRUE;
|
|
1086
|
+
isInteractive = JS_FALSE;
|
|
1087
|
+
break;
|
|
1088
|
+
case 'j':
|
|
1089
|
+
JS_ToggleOptions(cx, JSOPTION_JIT);
|
|
1090
|
+
break;
|
|
1091
|
+
#ifdef MOZ_SHARK
|
|
1092
|
+
case 'k':
|
|
1093
|
+
JS_ConnectShark();
|
|
1094
|
+
break;
|
|
1095
|
+
#endif
|
|
1096
|
+
default:
|
|
1097
|
+
return usage();
|
|
1098
|
+
}
|
|
1099
|
+
}
|
|
1100
|
+
|
|
1101
|
+
if (filename || isInteractive)
|
|
1102
|
+
Process(cx, obj, filename, forceTTY);
|
|
1103
|
+
return gExitCode;
|
|
1104
|
+
}
|
|
1105
|
+
|
|
1106
|
+
/***************************************************************************/
|
|
1107
|
+
|
|
1108
|
+
class FullTrustSecMan
|
|
1109
|
+
#ifndef XPCONNECT_STANDALONE
|
|
1110
|
+
: public nsIScriptSecurityManager
|
|
1111
|
+
#else
|
|
1112
|
+
: public nsIXPCSecurityManager
|
|
1113
|
+
#endif
|
|
1114
|
+
{
|
|
1115
|
+
public:
|
|
1116
|
+
NS_DECL_ISUPPORTS
|
|
1117
|
+
NS_DECL_NSIXPCSECURITYMANAGER
|
|
1118
|
+
#ifndef XPCONNECT_STANDALONE
|
|
1119
|
+
NS_DECL_NSISCRIPTSECURITYMANAGER
|
|
1120
|
+
#endif
|
|
1121
|
+
|
|
1122
|
+
FullTrustSecMan();
|
|
1123
|
+
virtual ~FullTrustSecMan();
|
|
1124
|
+
|
|
1125
|
+
#ifndef XPCONNECT_STANDALONE
|
|
1126
|
+
void SetSystemPrincipal(nsIPrincipal *aPrincipal) {
|
|
1127
|
+
mSystemPrincipal = aPrincipal;
|
|
1128
|
+
}
|
|
1129
|
+
|
|
1130
|
+
private:
|
|
1131
|
+
nsCOMPtr<nsIPrincipal> mSystemPrincipal;
|
|
1132
|
+
#endif
|
|
1133
|
+
};
|
|
1134
|
+
|
|
1135
|
+
NS_INTERFACE_MAP_BEGIN(FullTrustSecMan)
|
|
1136
|
+
NS_INTERFACE_MAP_ENTRY(nsIXPCSecurityManager)
|
|
1137
|
+
#ifndef XPCONNECT_STANDALONE
|
|
1138
|
+
NS_INTERFACE_MAP_ENTRY(nsIScriptSecurityManager)
|
|
1139
|
+
#endif
|
|
1140
|
+
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIXPCSecurityManager)
|
|
1141
|
+
NS_INTERFACE_MAP_END
|
|
1142
|
+
|
|
1143
|
+
NS_IMPL_ADDREF(FullTrustSecMan)
|
|
1144
|
+
NS_IMPL_RELEASE(FullTrustSecMan)
|
|
1145
|
+
|
|
1146
|
+
FullTrustSecMan::FullTrustSecMan()
|
|
1147
|
+
{
|
|
1148
|
+
#ifndef XPCONNECT_STANDALONE
|
|
1149
|
+
mSystemPrincipal = nsnull;
|
|
1150
|
+
#endif
|
|
1151
|
+
}
|
|
1152
|
+
|
|
1153
|
+
FullTrustSecMan::~FullTrustSecMan()
|
|
1154
|
+
{
|
|
1155
|
+
}
|
|
1156
|
+
|
|
1157
|
+
NS_IMETHODIMP
|
|
1158
|
+
FullTrustSecMan::CanCreateWrapper(JSContext * aJSContext, const nsIID & aIID,
|
|
1159
|
+
nsISupports *aObj, nsIClassInfo *aClassInfo,
|
|
1160
|
+
void * *aPolicy)
|
|
1161
|
+
{
|
|
1162
|
+
return NS_OK;
|
|
1163
|
+
}
|
|
1164
|
+
|
|
1165
|
+
NS_IMETHODIMP
|
|
1166
|
+
FullTrustSecMan::CanCreateInstance(JSContext * aJSContext, const nsCID & aCID)
|
|
1167
|
+
{
|
|
1168
|
+
return NS_OK;
|
|
1169
|
+
}
|
|
1170
|
+
|
|
1171
|
+
NS_IMETHODIMP
|
|
1172
|
+
FullTrustSecMan::CanGetService(JSContext * aJSContext, const nsCID & aCID)
|
|
1173
|
+
{
|
|
1174
|
+
return NS_OK;
|
|
1175
|
+
}
|
|
1176
|
+
|
|
1177
|
+
#ifndef XPCONNECT_STANDALONE
|
|
1178
|
+
/* void CanAccess (in PRUint32 aAction, in nsIXPCNativeCallContext aCallContext, in JSContextPtr aJSContext, in JSObjectPtr aJSObject, in nsISupports aObj, in nsIClassInfo aClassInfo, in JSVal aName, inout voidPtr aPolicy); */
|
|
1179
|
+
NS_IMETHODIMP
|
|
1180
|
+
FullTrustSecMan::CanAccess(PRUint32 aAction,
|
|
1181
|
+
nsAXPCNativeCallContext *aCallContext,
|
|
1182
|
+
JSContext * aJSContext, JSObject * aJSObject,
|
|
1183
|
+
nsISupports *aObj, nsIClassInfo *aClassInfo,
|
|
1184
|
+
jsval aName, void * *aPolicy)
|
|
1185
|
+
{
|
|
1186
|
+
return NS_OK;
|
|
1187
|
+
}
|
|
1188
|
+
|
|
1189
|
+
/* [noscript] void checkPropertyAccess (in JSContextPtr aJSContext, in JSObjectPtr aJSObject, in string aClassName, in JSVal aProperty, in PRUint32 aAction); */
|
|
1190
|
+
NS_IMETHODIMP
|
|
1191
|
+
FullTrustSecMan::CheckPropertyAccess(JSContext * aJSContext,
|
|
1192
|
+
JSObject * aJSObject,
|
|
1193
|
+
const char *aClassName,
|
|
1194
|
+
jsval aProperty, PRUint32 aAction)
|
|
1195
|
+
{
|
|
1196
|
+
return NS_OK;
|
|
1197
|
+
}
|
|
1198
|
+
|
|
1199
|
+
/* [noscript] void checkConnect (in JSContextPtr aJSContext, in nsIURI aTargetURI, in string aClassName, in string aProperty); */
|
|
1200
|
+
NS_IMETHODIMP
|
|
1201
|
+
FullTrustSecMan::CheckConnect(JSContext * aJSContext, nsIURI *aTargetURI,
|
|
1202
|
+
const char *aClassName, const char *aProperty)
|
|
1203
|
+
{
|
|
1204
|
+
return NS_OK;
|
|
1205
|
+
}
|
|
1206
|
+
|
|
1207
|
+
/* [noscript] void checkLoadURIFromScript (in JSContextPtr cx, in nsIURI uri); */
|
|
1208
|
+
NS_IMETHODIMP
|
|
1209
|
+
FullTrustSecMan::CheckLoadURIFromScript(JSContext * cx, nsIURI *uri)
|
|
1210
|
+
{
|
|
1211
|
+
return NS_OK;
|
|
1212
|
+
}
|
|
1213
|
+
|
|
1214
|
+
/* void checkLoadURIWithPrincipal (in nsIPrincipal aPrincipal, in nsIURI uri, in unsigned long flags); */
|
|
1215
|
+
NS_IMETHODIMP
|
|
1216
|
+
FullTrustSecMan::CheckLoadURIWithPrincipal(nsIPrincipal *aPrincipal,
|
|
1217
|
+
nsIURI *uri, PRUint32 flags)
|
|
1218
|
+
{
|
|
1219
|
+
return NS_OK;
|
|
1220
|
+
}
|
|
1221
|
+
|
|
1222
|
+
/* void checkLoadURI (in nsIURI from, in nsIURI uri, in unsigned long flags); */
|
|
1223
|
+
NS_IMETHODIMP
|
|
1224
|
+
FullTrustSecMan::CheckLoadURI(nsIURI *from, nsIURI *uri, PRUint32 flags)
|
|
1225
|
+
{
|
|
1226
|
+
return NS_OK;
|
|
1227
|
+
}
|
|
1228
|
+
|
|
1229
|
+
/* void checkLoadURIStrWithPrincipal (in nsIPrincipal aPrincipal, in AUTF8String uri, in unsigned long flags); */
|
|
1230
|
+
NS_IMETHODIMP
|
|
1231
|
+
FullTrustSecMan::CheckLoadURIStrWithPrincipal(nsIPrincipal *aPrincipal,
|
|
1232
|
+
const nsACString & uri,
|
|
1233
|
+
PRUint32 flags)
|
|
1234
|
+
{
|
|
1235
|
+
return NS_OK;
|
|
1236
|
+
}
|
|
1237
|
+
|
|
1238
|
+
/* void checkLoadURIStr (in AUTF8String from, in AUTF8String uri, in unsigned long flags); */
|
|
1239
|
+
NS_IMETHODIMP
|
|
1240
|
+
FullTrustSecMan::CheckLoadURIStr(const nsACString & from,
|
|
1241
|
+
const nsACString & uri, PRUint32 flags)
|
|
1242
|
+
{
|
|
1243
|
+
return NS_OK;
|
|
1244
|
+
}
|
|
1245
|
+
|
|
1246
|
+
/* [noscript] void checkFunctionAccess (in JSContextPtr cx, in voidPtr funObj, in voidPtr targetObj); */
|
|
1247
|
+
NS_IMETHODIMP
|
|
1248
|
+
FullTrustSecMan::CheckFunctionAccess(JSContext * cx, void * funObj,
|
|
1249
|
+
void * targetObj)
|
|
1250
|
+
{
|
|
1251
|
+
return NS_OK;
|
|
1252
|
+
}
|
|
1253
|
+
|
|
1254
|
+
/* [noscript] boolean canExecuteScripts (in JSContextPtr cx, in nsIPrincipal principal); */
|
|
1255
|
+
NS_IMETHODIMP
|
|
1256
|
+
FullTrustSecMan::CanExecuteScripts(JSContext * cx, nsIPrincipal *principal,
|
|
1257
|
+
PRBool *_retval)
|
|
1258
|
+
{
|
|
1259
|
+
*_retval = PR_TRUE;
|
|
1260
|
+
return NS_OK;
|
|
1261
|
+
}
|
|
1262
|
+
|
|
1263
|
+
/* [noscript] nsIPrincipal getSubjectPrincipal (); */
|
|
1264
|
+
NS_IMETHODIMP
|
|
1265
|
+
FullTrustSecMan::GetSubjectPrincipal(nsIPrincipal **_retval)
|
|
1266
|
+
{
|
|
1267
|
+
NS_IF_ADDREF(*_retval = mSystemPrincipal);
|
|
1268
|
+
return *_retval ? NS_OK : NS_ERROR_FAILURE;
|
|
1269
|
+
}
|
|
1270
|
+
|
|
1271
|
+
/* [noscript] nsIPrincipal getSystemPrincipal (); */
|
|
1272
|
+
NS_IMETHODIMP
|
|
1273
|
+
FullTrustSecMan::GetSystemPrincipal(nsIPrincipal **_retval)
|
|
1274
|
+
{
|
|
1275
|
+
NS_IF_ADDREF(*_retval = mSystemPrincipal);
|
|
1276
|
+
return *_retval ? NS_OK : NS_ERROR_FAILURE;
|
|
1277
|
+
}
|
|
1278
|
+
|
|
1279
|
+
/* [noscript] nsIPrincipal getCertificatePrincipal (in AUTF8String aCertFingerprint, in AUTF8String aSubjectName, in AUTF8String aPrettyName, in nsISupports aCert, in nsIURI aURI); */
|
|
1280
|
+
NS_IMETHODIMP
|
|
1281
|
+
FullTrustSecMan::GetCertificatePrincipal(const nsACString & aCertFingerprint,
|
|
1282
|
+
const nsACString & aSubjectName,
|
|
1283
|
+
const nsACString & aPrettyName,
|
|
1284
|
+
nsISupports *aCert, nsIURI *aURI,
|
|
1285
|
+
nsIPrincipal **_retval)
|
|
1286
|
+
{
|
|
1287
|
+
NS_IF_ADDREF(*_retval = mSystemPrincipal);
|
|
1288
|
+
return *_retval ? NS_OK : NS_ERROR_FAILURE;
|
|
1289
|
+
}
|
|
1290
|
+
|
|
1291
|
+
/* [noscript] nsIPrincipal getCodebasePrincipal (in nsIURI aURI); */
|
|
1292
|
+
NS_IMETHODIMP
|
|
1293
|
+
FullTrustSecMan::GetCodebasePrincipal(nsIURI *aURI, nsIPrincipal **_retval)
|
|
1294
|
+
{
|
|
1295
|
+
NS_IF_ADDREF(*_retval = mSystemPrincipal);
|
|
1296
|
+
return *_retval ? NS_OK : NS_ERROR_FAILURE;
|
|
1297
|
+
}
|
|
1298
|
+
|
|
1299
|
+
/* [noscript] short requestCapability (in nsIPrincipal principal, in string capability); */
|
|
1300
|
+
NS_IMETHODIMP
|
|
1301
|
+
FullTrustSecMan::RequestCapability(nsIPrincipal *principal,
|
|
1302
|
+
const char *capability, PRInt16 *_retval)
|
|
1303
|
+
{
|
|
1304
|
+
*_retval = nsIPrincipal::ENABLE_GRANTED;
|
|
1305
|
+
return NS_OK;
|
|
1306
|
+
}
|
|
1307
|
+
|
|
1308
|
+
/* boolean isCapabilityEnabled (in string capability); */
|
|
1309
|
+
NS_IMETHODIMP
|
|
1310
|
+
FullTrustSecMan::IsCapabilityEnabled(const char *capability, PRBool *_retval)
|
|
1311
|
+
{
|
|
1312
|
+
*_retval = PR_TRUE;
|
|
1313
|
+
return NS_OK;
|
|
1314
|
+
}
|
|
1315
|
+
|
|
1316
|
+
/* void enableCapability (in string capability); */
|
|
1317
|
+
NS_IMETHODIMP
|
|
1318
|
+
FullTrustSecMan::EnableCapability(const char *capability)
|
|
1319
|
+
{
|
|
1320
|
+
return NS_OK;;
|
|
1321
|
+
}
|
|
1322
|
+
|
|
1323
|
+
/* void revertCapability (in string capability); */
|
|
1324
|
+
NS_IMETHODIMP
|
|
1325
|
+
FullTrustSecMan::RevertCapability(const char *capability)
|
|
1326
|
+
{
|
|
1327
|
+
return NS_OK;
|
|
1328
|
+
}
|
|
1329
|
+
|
|
1330
|
+
/* void disableCapability (in string capability); */
|
|
1331
|
+
NS_IMETHODIMP
|
|
1332
|
+
FullTrustSecMan::DisableCapability(const char *capability)
|
|
1333
|
+
{
|
|
1334
|
+
return NS_OK;
|
|
1335
|
+
}
|
|
1336
|
+
|
|
1337
|
+
/* void setCanEnableCapability (in AUTF8String certificateFingerprint, in string capability, in short canEnable); */
|
|
1338
|
+
NS_IMETHODIMP
|
|
1339
|
+
FullTrustSecMan::SetCanEnableCapability(const nsACString & certificateFingerprint,
|
|
1340
|
+
const char *capability,
|
|
1341
|
+
PRInt16 canEnable)
|
|
1342
|
+
{
|
|
1343
|
+
return NS_OK;
|
|
1344
|
+
}
|
|
1345
|
+
|
|
1346
|
+
/* [noscript] nsIPrincipal getObjectPrincipal (in JSContextPtr cx, in JSObjectPtr obj); */
|
|
1347
|
+
NS_IMETHODIMP
|
|
1348
|
+
FullTrustSecMan::GetObjectPrincipal(JSContext * cx, JSObject * obj,
|
|
1349
|
+
nsIPrincipal **_retval)
|
|
1350
|
+
{
|
|
1351
|
+
NS_IF_ADDREF(*_retval = mSystemPrincipal);
|
|
1352
|
+
return *_retval ? NS_OK : NS_ERROR_FAILURE;
|
|
1353
|
+
}
|
|
1354
|
+
|
|
1355
|
+
/* [noscript] boolean subjectPrincipalIsSystem (); */
|
|
1356
|
+
NS_IMETHODIMP
|
|
1357
|
+
FullTrustSecMan::SubjectPrincipalIsSystem(PRBool *_retval)
|
|
1358
|
+
{
|
|
1359
|
+
*_retval = PR_TRUE;
|
|
1360
|
+
return NS_OK;
|
|
1361
|
+
}
|
|
1362
|
+
|
|
1363
|
+
/* [noscript] void checkSameOrigin (in JSContextPtr aJSContext, in nsIURI aTargetURI); */
|
|
1364
|
+
NS_IMETHODIMP
|
|
1365
|
+
FullTrustSecMan::CheckSameOrigin(JSContext * aJSContext, nsIURI *aTargetURI)
|
|
1366
|
+
{
|
|
1367
|
+
return NS_OK;
|
|
1368
|
+
}
|
|
1369
|
+
|
|
1370
|
+
/* void checkSameOriginURI (in nsIURI aSourceURI, in nsIURI aTargetURI); */
|
|
1371
|
+
NS_IMETHODIMP
|
|
1372
|
+
FullTrustSecMan::CheckSameOriginURI(nsIURI *aSourceURI, nsIURI *aTargetURI,
|
|
1373
|
+
PRBool reportError)
|
|
1374
|
+
{
|
|
1375
|
+
return NS_OK;
|
|
1376
|
+
}
|
|
1377
|
+
|
|
1378
|
+
/* [noscript] nsIPrincipal getPrincipalFromContext (in JSContextPtr cx); */
|
|
1379
|
+
NS_IMETHODIMP
|
|
1380
|
+
FullTrustSecMan::GetPrincipalFromContext(JSContext * cx, nsIPrincipal **_retval)
|
|
1381
|
+
{
|
|
1382
|
+
NS_IF_ADDREF(*_retval = mSystemPrincipal);
|
|
1383
|
+
return *_retval ? NS_OK : NS_ERROR_FAILURE;
|
|
1384
|
+
}
|
|
1385
|
+
|
|
1386
|
+
/* [noscript] nsIPrincipal getChannelPrincipal (in nsIChannel aChannel); */
|
|
1387
|
+
NS_IMETHODIMP
|
|
1388
|
+
FullTrustSecMan::GetChannelPrincipal(nsIChannel *aChannel, nsIPrincipal **_retval)
|
|
1389
|
+
{
|
|
1390
|
+
NS_IF_ADDREF(*_retval = mSystemPrincipal);
|
|
1391
|
+
return *_retval ? NS_OK : NS_ERROR_FAILURE;
|
|
1392
|
+
}
|
|
1393
|
+
|
|
1394
|
+
/* boolean isSystemPrincipal (in nsIPrincipal aPrincipal); */
|
|
1395
|
+
NS_IMETHODIMP
|
|
1396
|
+
FullTrustSecMan::IsSystemPrincipal(nsIPrincipal *aPrincipal, PRBool *_retval)
|
|
1397
|
+
{
|
|
1398
|
+
*_retval = aPrincipal == mSystemPrincipal;
|
|
1399
|
+
return NS_OK;
|
|
1400
|
+
}
|
|
1401
|
+
|
|
1402
|
+
NS_IMETHODIMP_(nsIPrincipal *)
|
|
1403
|
+
FullTrustSecMan::GetCxSubjectPrincipal(JSContext *cx)
|
|
1404
|
+
{
|
|
1405
|
+
return mSystemPrincipal;
|
|
1406
|
+
}
|
|
1407
|
+
|
|
1408
|
+
NS_IMETHODIMP_(nsIPrincipal *)
|
|
1409
|
+
FullTrustSecMan::GetCxSubjectPrincipalAndFrame(JSContext *cx, JSStackFrame **fp)
|
|
1410
|
+
{
|
|
1411
|
+
*fp = nsnull;
|
|
1412
|
+
return mSystemPrincipal;
|
|
1413
|
+
}
|
|
1414
|
+
|
|
1415
|
+
#endif
|
|
1416
|
+
|
|
1417
|
+
/***************************************************************************/
|
|
1418
|
+
|
|
1419
|
+
// #define TEST_InitClassesWithNewWrappedGlobal
|
|
1420
|
+
|
|
1421
|
+
#ifdef TEST_InitClassesWithNewWrappedGlobal
|
|
1422
|
+
// XXX hacky test code...
|
|
1423
|
+
#include "xpctest.h"
|
|
1424
|
+
|
|
1425
|
+
class TestGlobal : public nsIXPCTestNoisy, public nsIXPCScriptable
|
|
1426
|
+
{
|
|
1427
|
+
public:
|
|
1428
|
+
NS_DECL_ISUPPORTS
|
|
1429
|
+
NS_DECL_NSIXPCTESTNOISY
|
|
1430
|
+
NS_DECL_NSIXPCSCRIPTABLE
|
|
1431
|
+
|
|
1432
|
+
TestGlobal(){}
|
|
1433
|
+
};
|
|
1434
|
+
|
|
1435
|
+
NS_IMPL_ISUPPORTS2(TestGlobal, nsIXPCTestNoisy, nsIXPCScriptable)
|
|
1436
|
+
|
|
1437
|
+
// The nsIXPCScriptable map declaration that will generate stubs for us...
|
|
1438
|
+
#define XPC_MAP_CLASSNAME TestGlobal
|
|
1439
|
+
#define XPC_MAP_QUOTED_CLASSNAME "TestGlobal"
|
|
1440
|
+
#define XPC_MAP_FLAGS nsIXPCScriptable::USE_JSSTUB_FOR_ADDPROPERTY |\
|
|
1441
|
+
nsIXPCScriptable::USE_JSSTUB_FOR_DELPROPERTY |\
|
|
1442
|
+
nsIXPCScriptable::USE_JSSTUB_FOR_SETPROPERTY
|
|
1443
|
+
#include "xpc_map_end.h" /* This will #undef the above */
|
|
1444
|
+
|
|
1445
|
+
NS_IMETHODIMP TestGlobal::Squawk() {return NS_OK;}
|
|
1446
|
+
|
|
1447
|
+
#endif
|
|
1448
|
+
|
|
1449
|
+
// uncomment to install the test 'this' translator
|
|
1450
|
+
// #define TEST_TranslateThis
|
|
1451
|
+
|
|
1452
|
+
#ifdef TEST_TranslateThis
|
|
1453
|
+
|
|
1454
|
+
#include "xpctest.h"
|
|
1455
|
+
|
|
1456
|
+
class nsXPCFunctionThisTranslator : public nsIXPCFunctionThisTranslator
|
|
1457
|
+
{
|
|
1458
|
+
public:
|
|
1459
|
+
NS_DECL_ISUPPORTS
|
|
1460
|
+
NS_DECL_NSIXPCFUNCTIONTHISTRANSLATOR
|
|
1461
|
+
|
|
1462
|
+
nsXPCFunctionThisTranslator();
|
|
1463
|
+
virtual ~nsXPCFunctionThisTranslator();
|
|
1464
|
+
/* additional members */
|
|
1465
|
+
};
|
|
1466
|
+
|
|
1467
|
+
/* Implementation file */
|
|
1468
|
+
NS_IMPL_ISUPPORTS1(nsXPCFunctionThisTranslator, nsIXPCFunctionThisTranslator)
|
|
1469
|
+
|
|
1470
|
+
nsXPCFunctionThisTranslator::nsXPCFunctionThisTranslator()
|
|
1471
|
+
{
|
|
1472
|
+
/* member initializers and constructor code */
|
|
1473
|
+
}
|
|
1474
|
+
|
|
1475
|
+
nsXPCFunctionThisTranslator::~nsXPCFunctionThisTranslator()
|
|
1476
|
+
{
|
|
1477
|
+
/* destructor code */
|
|
1478
|
+
#ifdef DEBUG_jband
|
|
1479
|
+
printf("destroying nsXPCFunctionThisTranslator\n");
|
|
1480
|
+
#endif
|
|
1481
|
+
}
|
|
1482
|
+
|
|
1483
|
+
/* nsISupports TranslateThis (in nsISupports aInitialThis, in nsIInterfaceInfo aInterfaceInfo, in PRUint16 aMethodIndex, out PRBool aHideFirstParamFromJS, out nsIIDPtr aIIDOfResult); */
|
|
1484
|
+
NS_IMETHODIMP
|
|
1485
|
+
nsXPCFunctionThisTranslator::TranslateThis(nsISupports *aInitialThis,
|
|
1486
|
+
nsIInterfaceInfo *aInterfaceInfo,
|
|
1487
|
+
PRUint16 aMethodIndex,
|
|
1488
|
+
PRBool *aHideFirstParamFromJS,
|
|
1489
|
+
nsIID * *aIIDOfResult,
|
|
1490
|
+
nsISupports **_retval)
|
|
1491
|
+
{
|
|
1492
|
+
NS_IF_ADDREF(aInitialThis);
|
|
1493
|
+
*_retval = aInitialThis;
|
|
1494
|
+
*aHideFirstParamFromJS = JS_FALSE;
|
|
1495
|
+
*aIIDOfResult = nsnull;
|
|
1496
|
+
return NS_OK;
|
|
1497
|
+
}
|
|
1498
|
+
|
|
1499
|
+
#endif
|
|
1500
|
+
|
|
1501
|
+
// ContextCallback calls are chained
|
|
1502
|
+
static JSContextCallback gOldJSContextCallback;
|
|
1503
|
+
|
|
1504
|
+
static JSBool
|
|
1505
|
+
ContextCallback(JSContext *cx, uintN contextOp)
|
|
1506
|
+
{
|
|
1507
|
+
if (gOldJSContextCallback && !gOldJSContextCallback(cx, contextOp))
|
|
1508
|
+
return JS_FALSE;
|
|
1509
|
+
|
|
1510
|
+
if (contextOp == JSCONTEXT_NEW) {
|
|
1511
|
+
JS_SetErrorReporter(cx, my_ErrorReporter);
|
|
1512
|
+
JS_SetVersion(cx, JSVERSION_LATEST);
|
|
1513
|
+
}
|
|
1514
|
+
return JS_TRUE;
|
|
1515
|
+
}
|
|
1516
|
+
|
|
1517
|
+
static bool
|
|
1518
|
+
GetCurrentWorkingDirectory(nsAString& workingDirectory)
|
|
1519
|
+
{
|
|
1520
|
+
#if (!defined(XP_WIN) && !defined(XP_UNIX)) || defined(WINCE)
|
|
1521
|
+
//XXX: your platform should really implement this
|
|
1522
|
+
return false;
|
|
1523
|
+
#elif XP_WIN
|
|
1524
|
+
DWORD requiredLength = GetCurrentDirectoryW(0, NULL);
|
|
1525
|
+
workingDirectory.SetLength(requiredLength);
|
|
1526
|
+
GetCurrentDirectoryW(workingDirectory.Length(),
|
|
1527
|
+
(LPWSTR)workingDirectory.BeginWriting());
|
|
1528
|
+
// we got a trailing null there
|
|
1529
|
+
workingDirectory.SetLength(requiredLength);
|
|
1530
|
+
workingDirectory.Replace(workingDirectory.Length() - 1, 1, L'\\');
|
|
1531
|
+
#elif defined(XP_UNIX)
|
|
1532
|
+
nsCAutoString cwd;
|
|
1533
|
+
// 1024 is just a guess at a sane starting value
|
|
1534
|
+
size_t bufsize = 1024;
|
|
1535
|
+
char* result = nsnull;
|
|
1536
|
+
while (result == nsnull) {
|
|
1537
|
+
if (!cwd.SetLength(bufsize))
|
|
1538
|
+
return false;
|
|
1539
|
+
result = getcwd(cwd.BeginWriting(), cwd.Length());
|
|
1540
|
+
if (!result) {
|
|
1541
|
+
if (errno != ERANGE)
|
|
1542
|
+
return false;
|
|
1543
|
+
// need to make the buffer bigger
|
|
1544
|
+
bufsize *= 2;
|
|
1545
|
+
}
|
|
1546
|
+
}
|
|
1547
|
+
// size back down to the actual string length
|
|
1548
|
+
cwd.SetLength(strlen(result) + 1);
|
|
1549
|
+
cwd.Replace(cwd.Length() - 1, 1, '/');
|
|
1550
|
+
workingDirectory = NS_ConvertUTF8toUTF16(cwd);
|
|
1551
|
+
#endif
|
|
1552
|
+
return true;
|
|
1553
|
+
}
|
|
1554
|
+
|
|
1555
|
+
int
|
|
1556
|
+
main(int argc, char **argv, char **envp)
|
|
1557
|
+
{
|
|
1558
|
+
#ifdef XP_MACOSX
|
|
1559
|
+
InitAutoreleasePool();
|
|
1560
|
+
#endif
|
|
1561
|
+
JSRuntime *rt;
|
|
1562
|
+
JSContext *cx;
|
|
1563
|
+
JSObject *glob, *envobj;
|
|
1564
|
+
int result;
|
|
1565
|
+
nsresult rv;
|
|
1566
|
+
|
|
1567
|
+
// unbuffer stdout so that output is in the correct order; note that stderr
|
|
1568
|
+
// is unbuffered by default
|
|
1569
|
+
setbuf(stdout, 0);
|
|
1570
|
+
|
|
1571
|
+
gErrFile = stderr;
|
|
1572
|
+
gOutFile = stdout;
|
|
1573
|
+
gInFile = stdin;
|
|
1574
|
+
|
|
1575
|
+
NS_LogInit();
|
|
1576
|
+
|
|
1577
|
+
nsCOMPtr<nsILocalFile> appFile;
|
|
1578
|
+
rv = XRE_GetBinaryPath(argv[0], getter_AddRefs(appFile));
|
|
1579
|
+
if (NS_FAILED(rv)) {
|
|
1580
|
+
printf("Couldn't find application file.\n");
|
|
1581
|
+
return 1;
|
|
1582
|
+
}
|
|
1583
|
+
nsCOMPtr<nsIFile> appDir;
|
|
1584
|
+
rv = appFile->GetParent(getter_AddRefs(appDir));
|
|
1585
|
+
if (NS_FAILED(rv)) {
|
|
1586
|
+
printf("Couldn't get application directory.\n");
|
|
1587
|
+
return 1;
|
|
1588
|
+
}
|
|
1589
|
+
|
|
1590
|
+
XPCShellDirProvider dirprovider;
|
|
1591
|
+
|
|
1592
|
+
if (argc > 1 && !strcmp(argv[1], "-g")) {
|
|
1593
|
+
if (argc < 3)
|
|
1594
|
+
return usage();
|
|
1595
|
+
|
|
1596
|
+
if (!dirprovider.SetGREDir(argv[2])) {
|
|
1597
|
+
printf("SetGREDir failed.\n");
|
|
1598
|
+
return 1;
|
|
1599
|
+
}
|
|
1600
|
+
argc -= 2;
|
|
1601
|
+
argv += 2;
|
|
1602
|
+
}
|
|
1603
|
+
|
|
1604
|
+
{
|
|
1605
|
+
nsCOMPtr<nsIServiceManager> servMan;
|
|
1606
|
+
rv = NS_InitXPCOM2(getter_AddRefs(servMan), appDir, &dirprovider);
|
|
1607
|
+
if (NS_FAILED(rv)) {
|
|
1608
|
+
printf("NS_InitXPCOM failed!\n");
|
|
1609
|
+
return 1;
|
|
1610
|
+
}
|
|
1611
|
+
{
|
|
1612
|
+
nsCOMPtr<nsIComponentRegistrar> registrar = do_QueryInterface(servMan);
|
|
1613
|
+
NS_ASSERTION(registrar, "Null nsIComponentRegistrar");
|
|
1614
|
+
if (registrar)
|
|
1615
|
+
registrar->AutoRegister(nsnull);
|
|
1616
|
+
}
|
|
1617
|
+
|
|
1618
|
+
nsCOMPtr<nsIJSRuntimeService> rtsvc = do_GetService("@mozilla.org/js/xpc/RuntimeService;1");
|
|
1619
|
+
// get the JSRuntime from the runtime svc
|
|
1620
|
+
if (!rtsvc) {
|
|
1621
|
+
printf("failed to get nsJSRuntimeService!\n");
|
|
1622
|
+
return 1;
|
|
1623
|
+
}
|
|
1624
|
+
|
|
1625
|
+
if (NS_FAILED(rtsvc->GetRuntime(&rt)) || !rt) {
|
|
1626
|
+
printf("failed to get JSRuntime from nsJSRuntimeService!\n");
|
|
1627
|
+
return 1;
|
|
1628
|
+
}
|
|
1629
|
+
|
|
1630
|
+
gOldJSContextCallback = JS_SetContextCallback(rt, ContextCallback);
|
|
1631
|
+
|
|
1632
|
+
cx = JS_NewContext(rt, 8192);
|
|
1633
|
+
if (!cx) {
|
|
1634
|
+
printf("JS_NewContext failed!\n");
|
|
1635
|
+
return 1;
|
|
1636
|
+
}
|
|
1637
|
+
|
|
1638
|
+
nsCOMPtr<nsIXPConnect> xpc = do_GetService(nsIXPConnect::GetCID());
|
|
1639
|
+
if (!xpc) {
|
|
1640
|
+
printf("failed to get nsXPConnect service!\n");
|
|
1641
|
+
return 1;
|
|
1642
|
+
}
|
|
1643
|
+
|
|
1644
|
+
// Since the caps security system might set a default security manager
|
|
1645
|
+
// we will be sure that the secman on this context gives full trust.
|
|
1646
|
+
nsRefPtr<FullTrustSecMan> secman = new FullTrustSecMan();
|
|
1647
|
+
xpc->SetSecurityManagerForJSContext(cx, secman, 0xFFFF);
|
|
1648
|
+
|
|
1649
|
+
#ifndef XPCONNECT_STANDALONE
|
|
1650
|
+
// Fetch the system principal and store it away in a global, to use for
|
|
1651
|
+
// script compilation in Load() and ProcessFile() (including interactive
|
|
1652
|
+
// eval loop)
|
|
1653
|
+
{
|
|
1654
|
+
nsCOMPtr<nsIPrincipal> princ;
|
|
1655
|
+
|
|
1656
|
+
nsCOMPtr<nsIScriptSecurityManager> securityManager =
|
|
1657
|
+
do_GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID, &rv);
|
|
1658
|
+
if (NS_SUCCEEDED(rv) && securityManager) {
|
|
1659
|
+
rv = securityManager->GetSystemPrincipal(getter_AddRefs(princ));
|
|
1660
|
+
if (NS_FAILED(rv)) {
|
|
1661
|
+
fprintf(gErrFile, "+++ Failed to obtain SystemPrincipal from ScriptSecurityManager service.\n");
|
|
1662
|
+
} else {
|
|
1663
|
+
// fetch the JS principals and stick in a global
|
|
1664
|
+
rv = princ->GetJSPrincipals(cx, &gJSPrincipals);
|
|
1665
|
+
if (NS_FAILED(rv)) {
|
|
1666
|
+
fprintf(gErrFile, "+++ Failed to obtain JS principals from SystemPrincipal.\n");
|
|
1667
|
+
}
|
|
1668
|
+
secman->SetSystemPrincipal(princ);
|
|
1669
|
+
}
|
|
1670
|
+
} else {
|
|
1671
|
+
fprintf(gErrFile, "+++ Failed to get ScriptSecurityManager service, running without principals");
|
|
1672
|
+
}
|
|
1673
|
+
}
|
|
1674
|
+
#endif
|
|
1675
|
+
|
|
1676
|
+
#ifdef TEST_TranslateThis
|
|
1677
|
+
nsCOMPtr<nsIXPCFunctionThisTranslator>
|
|
1678
|
+
translator(new nsXPCFunctionThisTranslator);
|
|
1679
|
+
xpc->SetFunctionThisTranslator(NS_GET_IID(nsITestXPCFunctionCallback), translator, nsnull);
|
|
1680
|
+
#endif
|
|
1681
|
+
|
|
1682
|
+
nsCOMPtr<nsIJSContextStack> cxstack = do_GetService("@mozilla.org/js/xpc/ContextStack;1");
|
|
1683
|
+
if (!cxstack) {
|
|
1684
|
+
printf("failed to get the nsThreadJSContextStack service!\n");
|
|
1685
|
+
return 1;
|
|
1686
|
+
}
|
|
1687
|
+
|
|
1688
|
+
if(NS_FAILED(cxstack->Push(cx))) {
|
|
1689
|
+
printf("failed to push the current JSContext on the nsThreadJSContextStack!\n");
|
|
1690
|
+
return 1;
|
|
1691
|
+
}
|
|
1692
|
+
|
|
1693
|
+
nsCOMPtr<nsIXPCScriptable> backstagePass;
|
|
1694
|
+
nsresult rv = rtsvc->GetBackstagePass(getter_AddRefs(backstagePass));
|
|
1695
|
+
if (NS_FAILED(rv)) {
|
|
1696
|
+
fprintf(gErrFile, "+++ Failed to get backstage pass from rtsvc: %8x\n",
|
|
1697
|
+
rv);
|
|
1698
|
+
return 1;
|
|
1699
|
+
}
|
|
1700
|
+
|
|
1701
|
+
nsCOMPtr<nsIXPConnectJSObjectHolder> holder;
|
|
1702
|
+
rv = xpc->InitClassesWithNewWrappedGlobal(cx, backstagePass,
|
|
1703
|
+
NS_GET_IID(nsISupports),
|
|
1704
|
+
nsIXPConnect::
|
|
1705
|
+
FLAG_SYSTEM_GLOBAL_OBJECT,
|
|
1706
|
+
getter_AddRefs(holder));
|
|
1707
|
+
if (NS_FAILED(rv))
|
|
1708
|
+
return 1;
|
|
1709
|
+
|
|
1710
|
+
rv = holder->GetJSObject(&glob);
|
|
1711
|
+
if (NS_FAILED(rv)) {
|
|
1712
|
+
NS_ASSERTION(glob == nsnull, "bad GetJSObject?");
|
|
1713
|
+
return 1;
|
|
1714
|
+
}
|
|
1715
|
+
|
|
1716
|
+
JS_BeginRequest(cx);
|
|
1717
|
+
|
|
1718
|
+
if (!JS_DefineFunctions(cx, glob, glob_functions)) {
|
|
1719
|
+
JS_EndRequest(cx);
|
|
1720
|
+
return 1;
|
|
1721
|
+
}
|
|
1722
|
+
|
|
1723
|
+
envobj = JS_DefineObject(cx, glob, "environment", &env_class, NULL, 0);
|
|
1724
|
+
if (!envobj || !JS_SetPrivate(cx, envobj, envp)) {
|
|
1725
|
+
JS_EndRequest(cx);
|
|
1726
|
+
return 1;
|
|
1727
|
+
}
|
|
1728
|
+
|
|
1729
|
+
nsAutoString workingDirectory;
|
|
1730
|
+
if (GetCurrentWorkingDirectory(workingDirectory))
|
|
1731
|
+
gWorkingDirectory = &workingDirectory;
|
|
1732
|
+
|
|
1733
|
+
JS_DefineProperty(cx, glob, "__LOCATION__", JSVAL_VOID,
|
|
1734
|
+
GetLocationProperty, NULL, 0);
|
|
1735
|
+
|
|
1736
|
+
argc--;
|
|
1737
|
+
argv++;
|
|
1738
|
+
|
|
1739
|
+
result = ProcessArgs(cx, glob, argv, argc);
|
|
1740
|
+
|
|
1741
|
+
|
|
1742
|
+
//#define TEST_CALL_ON_WRAPPED_JS_AFTER_SHUTDOWN 1
|
|
1743
|
+
|
|
1744
|
+
#ifdef TEST_CALL_ON_WRAPPED_JS_AFTER_SHUTDOWN
|
|
1745
|
+
// test of late call and release (see below)
|
|
1746
|
+
nsCOMPtr<nsIJSContextStack> bogus;
|
|
1747
|
+
xpc->WrapJS(cx, glob, NS_GET_IID(nsIJSContextStack),
|
|
1748
|
+
(void**) getter_AddRefs(bogus));
|
|
1749
|
+
#endif
|
|
1750
|
+
|
|
1751
|
+
JSPRINCIPALS_DROP(cx, gJSPrincipals);
|
|
1752
|
+
JS_ClearScope(cx, glob);
|
|
1753
|
+
JS_GC(cx);
|
|
1754
|
+
JSContext *oldcx;
|
|
1755
|
+
cxstack->Pop(&oldcx);
|
|
1756
|
+
NS_ASSERTION(oldcx == cx, "JS thread context push/pop mismatch");
|
|
1757
|
+
cxstack = nsnull;
|
|
1758
|
+
JS_GC(cx);
|
|
1759
|
+
JS_DestroyContext(cx);
|
|
1760
|
+
} // this scopes the nsCOMPtrs
|
|
1761
|
+
// no nsCOMPtrs are allowed to be alive when you call NS_ShutdownXPCOM
|
|
1762
|
+
rv = NS_ShutdownXPCOM( NULL );
|
|
1763
|
+
NS_ASSERTION(NS_SUCCEEDED(rv), "NS_ShutdownXPCOM failed");
|
|
1764
|
+
|
|
1765
|
+
#ifdef TEST_CALL_ON_WRAPPED_JS_AFTER_SHUTDOWN
|
|
1766
|
+
// test of late call and release (see above)
|
|
1767
|
+
JSContext* bogusCX;
|
|
1768
|
+
bogus->Peek(&bogusCX);
|
|
1769
|
+
bogus = nsnull;
|
|
1770
|
+
#endif
|
|
1771
|
+
|
|
1772
|
+
appDir = nsnull;
|
|
1773
|
+
appFile = nsnull;
|
|
1774
|
+
dirprovider.ClearGREDir();
|
|
1775
|
+
|
|
1776
|
+
NS_LogTerm();
|
|
1777
|
+
|
|
1778
|
+
#ifdef XP_MACOSX
|
|
1779
|
+
FinishAutoreleasePool();
|
|
1780
|
+
#endif
|
|
1781
|
+
|
|
1782
|
+
return result;
|
|
1783
|
+
}
|
|
1784
|
+
|
|
1785
|
+
PRBool
|
|
1786
|
+
XPCShellDirProvider::SetGREDir(const char *dir)
|
|
1787
|
+
{
|
|
1788
|
+
nsresult rv = XRE_GetFileFromPath(dir, getter_AddRefs(mGREDir));
|
|
1789
|
+
return NS_SUCCEEDED(rv);
|
|
1790
|
+
}
|
|
1791
|
+
|
|
1792
|
+
NS_IMETHODIMP_(nsrefcnt)
|
|
1793
|
+
XPCShellDirProvider::AddRef()
|
|
1794
|
+
{
|
|
1795
|
+
return 2;
|
|
1796
|
+
}
|
|
1797
|
+
|
|
1798
|
+
NS_IMETHODIMP_(nsrefcnt)
|
|
1799
|
+
XPCShellDirProvider::Release()
|
|
1800
|
+
{
|
|
1801
|
+
return 1;
|
|
1802
|
+
}
|
|
1803
|
+
|
|
1804
|
+
NS_IMPL_QUERY_INTERFACE1(XPCShellDirProvider, nsIDirectoryServiceProvider)
|
|
1805
|
+
|
|
1806
|
+
NS_IMETHODIMP
|
|
1807
|
+
XPCShellDirProvider::GetFile(const char *prop, PRBool *persistent,
|
|
1808
|
+
nsIFile* *result)
|
|
1809
|
+
{
|
|
1810
|
+
if (mGREDir && !strcmp(prop, NS_GRE_DIR)) {
|
|
1811
|
+
*persistent = PR_TRUE;
|
|
1812
|
+
NS_ADDREF(*result = mGREDir);
|
|
1813
|
+
return NS_OK;
|
|
1814
|
+
}
|
|
1815
|
+
|
|
1816
|
+
return NS_ERROR_FAILURE;
|
|
1817
|
+
}
|