johnson 1.2.0 → 2.0.0.pre0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (782) hide show
  1. data/CHANGELOG.rdoc +8 -0
  2. data/Manifest.txt +762 -48
  3. data/README.rdoc +2 -1
  4. data/Rakefile +90 -18
  5. data/ext/spidermonkey/conversions.c +9 -2
  6. data/ext/spidermonkey/ruby_land_proxy.c +1 -1
  7. data/ext/spidermonkey/runtime.h +1 -1
  8. data/ext/tracemonkey/context.cc +125 -0
  9. data/ext/tracemonkey/context.h +19 -0
  10. data/ext/tracemonkey/conversions.cc +365 -0
  11. data/ext/tracemonkey/conversions.h +32 -0
  12. data/ext/tracemonkey/debugger.cc +234 -0
  13. data/ext/tracemonkey/debugger.h +10 -0
  14. data/ext/tracemonkey/extconf.rb +37 -0
  15. data/ext/tracemonkey/extensions.cc +37 -0
  16. data/ext/tracemonkey/extensions.h +12 -0
  17. data/ext/tracemonkey/global.cc +40 -0
  18. data/ext/tracemonkey/global.h +11 -0
  19. data/ext/tracemonkey/idhash.cc +16 -0
  20. data/ext/tracemonkey/idhash.h +8 -0
  21. data/ext/tracemonkey/immutable_node.cc +1199 -0
  22. data/ext/tracemonkey/immutable_node.cc.erb +559 -0
  23. data/ext/tracemonkey/immutable_node.h +22 -0
  24. data/ext/tracemonkey/jroot.h +215 -0
  25. data/ext/tracemonkey/js_land_proxy.cc +620 -0
  26. data/ext/tracemonkey/js_land_proxy.h +20 -0
  27. data/ext/tracemonkey/ruby_land_proxy.cc +618 -0
  28. data/ext/tracemonkey/ruby_land_proxy.h +38 -0
  29. data/ext/tracemonkey/runtime.cc +454 -0
  30. data/ext/tracemonkey/runtime.h +27 -0
  31. data/ext/tracemonkey/split_global.cc +392 -0
  32. data/ext/tracemonkey/split_global.h +11 -0
  33. data/ext/tracemonkey/tracemonkey.cc +23 -0
  34. data/ext/tracemonkey/tracemonkey.h +32 -0
  35. data/lib/johnson.rb +12 -4
  36. data/lib/johnson/error.rb +5 -0
  37. data/lib/johnson/js/prelude.js +16 -1
  38. data/lib/johnson/parser.rb +2 -1
  39. data/lib/johnson/runtime.rb +87 -26
  40. data/lib/johnson/spidermonkey/runtime.rb +7 -16
  41. data/lib/johnson/tracemonkey.rb +13 -0
  42. data/lib/johnson/tracemonkey/context.rb +10 -0
  43. data/lib/johnson/tracemonkey/debugger.rb +67 -0
  44. data/lib/johnson/tracemonkey/immutable_node.rb +282 -0
  45. data/lib/johnson/tracemonkey/js_land_proxy.rb +64 -0
  46. data/lib/johnson/tracemonkey/mutable_tree_visitor.rb +242 -0
  47. data/lib/johnson/tracemonkey/ruby_land_proxy.rb +17 -0
  48. data/lib/johnson/tracemonkey/runtime.rb +80 -0
  49. data/test/{johnson_test.rb → generic/johnson_test.rb} +1 -1
  50. data/test/{parser_test.rb → generic/parser_test.rb} +1 -1
  51. data/test/helper.rb +23 -4
  52. data/test/johnson/{browser_test.rb → generic/browser_test.rb} +1 -1
  53. data/test/johnson/{conversions → generic/conversions}/array_test.rb +1 -1
  54. data/test/johnson/{conversions → generic/conversions}/boolean_test.rb +1 -1
  55. data/test/johnson/{conversions → generic/conversions}/callable_test.rb +1 -1
  56. data/test/johnson/{conversions → generic/conversions}/file_test.rb +1 -1
  57. data/test/johnson/generic/conversions/helper.rb +1 -0
  58. data/test/johnson/{conversions → generic/conversions}/nil_test.rb +1 -1
  59. data/test/johnson/{conversions → generic/conversions}/number_test.rb +1 -1
  60. data/test/johnson/{conversions → generic/conversions}/regexp_test.rb +1 -1
  61. data/test/johnson/{conversions → generic/conversions}/string_test.rb +1 -1
  62. data/test/johnson/{conversions → generic/conversions}/struct_test.rb +1 -1
  63. data/test/johnson/{conversions → generic/conversions}/symbol_test.rb +1 -1
  64. data/test/johnson/{conversions → generic/conversions}/thread_test.rb +1 -1
  65. data/test/johnson/{custom_conversions_test.rb → generic/custom_conversions_test.rb} +1 -1
  66. data/test/johnson/generic/default_test.rb +12 -0
  67. data/test/johnson/{error_test.rb → generic/error_test.rb} +1 -1
  68. data/test/johnson/{extensions_test.rb → generic/extensions_test.rb} +1 -1
  69. data/test/johnson/generic/helper.rb +1 -0
  70. data/test/johnson/{nodes → generic/nodes}/array_literal_test.rb +1 -1
  71. data/test/johnson/{nodes → generic/nodes}/array_node_test.rb +1 -1
  72. data/test/johnson/{nodes → generic/nodes}/binary_node_test.rb +1 -1
  73. data/test/johnson/{nodes → generic/nodes}/bracket_access_test.rb +1 -1
  74. data/test/johnson/{nodes → generic/nodes}/delete_test.rb +1 -1
  75. data/test/johnson/{nodes → generic/nodes}/do_while_test.rb +1 -1
  76. data/test/johnson/{nodes → generic/nodes}/dot_accessor_test.rb +1 -1
  77. data/test/johnson/generic/nodes/export_test.rb +11 -0
  78. data/test/johnson/{nodes → generic/nodes}/for_test.rb +1 -1
  79. data/test/johnson/{nodes → generic/nodes}/function_test.rb +1 -1
  80. data/test/johnson/generic/nodes/helper.rb +1 -0
  81. data/test/johnson/{nodes → generic/nodes}/if_test.rb +16 -6
  82. data/test/johnson/generic/nodes/import_test.rb +15 -0
  83. data/test/johnson/{nodes → generic/nodes}/label_test.rb +1 -1
  84. data/test/johnson/{nodes → generic/nodes}/let_test.rb +1 -1
  85. data/test/johnson/{nodes → generic/nodes}/object_literal_test.rb +1 -1
  86. data/test/johnson/{nodes → generic/nodes}/return_test.rb +1 -1
  87. data/test/johnson/{nodes → generic/nodes}/semi_test.rb +1 -1
  88. data/test/johnson/{nodes → generic/nodes}/switch_test.rb +1 -1
  89. data/test/johnson/{nodes → generic/nodes}/ternary_test.rb +1 -1
  90. data/test/johnson/{nodes → generic/nodes}/throw_test.rb +1 -1
  91. data/test/johnson/{nodes → generic/nodes}/try_node_test.rb +36 -6
  92. data/test/johnson/{nodes → generic/nodes}/typeof_test.rb +1 -1
  93. data/test/johnson/{nodes → generic/nodes}/unary_node_test.rb +1 -1
  94. data/test/johnson/{nodes → generic/nodes}/void_test.rb +1 -1
  95. data/test/johnson/{nodes → generic/nodes}/while_test.rb +1 -1
  96. data/test/johnson/{nodes → generic/nodes}/with_test.rb +1 -1
  97. data/test/johnson/{prelude_test.rb → generic/prelude_test.rb} +1 -1
  98. data/test/johnson/{runtime_test.rb → generic/runtime_test.rb} +3 -6
  99. data/test/johnson/generic/version_test.rb +13 -0
  100. data/test/johnson/{visitors → generic/visitors}/dot_visitor_test.rb +1 -1
  101. data/test/johnson/{visitors → generic/visitors}/enumerating_visitor_test.rb +1 -1
  102. data/test/johnson/generic/visitors/helper.rb +1 -0
  103. data/test/johnson/spidermonkey/js_land_proxy_test.rb +1 -5
  104. data/test/johnson/spidermonkey/ruby_land_proxy_test.rb +11 -7
  105. data/test/johnson/tracemonkey/context_test.rb +21 -0
  106. data/test/johnson/tracemonkey/immutable_node_test.rb +34 -0
  107. data/test/johnson/tracemonkey/js_land_proxy_test.rb +273 -0
  108. data/test/johnson/tracemonkey/ruby_land_proxy_test.rb +274 -0
  109. data/test/johnson/tracemonkey/runtime_test.rb +41 -0
  110. data/test/johnson/tracemonkey/split_global_test.rb +32 -0
  111. data/vendor/spidermonkey/js.pkg +2 -0
  112. data/vendor/tracemonkey/Makefile.in +668 -0
  113. data/vendor/tracemonkey/Makefile.ref +483 -0
  114. data/vendor/tracemonkey/README.html +54 -0
  115. data/vendor/tracemonkey/SpiderMonkey.rsp +11 -0
  116. data/vendor/tracemonkey/Y.js +19 -0
  117. data/vendor/tracemonkey/aclocal.m4 +9 -0
  118. data/vendor/tracemonkey/bench.sh +5 -0
  119. data/vendor/tracemonkey/build/autoconf/acoutput-fast.pl +202 -0
  120. data/vendor/tracemonkey/build/autoconf/altoptions.m4 +154 -0
  121. data/vendor/tracemonkey/build/autoconf/config.guess +1537 -0
  122. data/vendor/tracemonkey/build/autoconf/config.sub +1595 -0
  123. data/vendor/tracemonkey/build/autoconf/install-sh +119 -0
  124. data/vendor/tracemonkey/build/autoconf/make-makefile +315 -0
  125. data/vendor/tracemonkey/build/autoconf/match-dir.sh +101 -0
  126. data/vendor/tracemonkey/build/autoconf/moznbytetype.m4 +136 -0
  127. data/vendor/tracemonkey/build/autoconf/nspr.m4 +82 -0
  128. data/vendor/tracemonkey/build/autoconf/pkg.m4 +59 -0
  129. data/vendor/tracemonkey/build/autoconf/update-makefile.sh +118 -0
  130. data/vendor/tracemonkey/build/cygwin-wrapper +75 -0
  131. data/vendor/tracemonkey/build/hcc +111 -0
  132. data/vendor/tracemonkey/build/hcpp +155 -0
  133. data/vendor/tracemonkey/build/unix/mddepend.pl +165 -0
  134. data/vendor/tracemonkey/build/unix/uniq.pl +63 -0
  135. data/vendor/tracemonkey/build/win32/pgomerge.py +40 -0
  136. data/vendor/tracemonkey/builtins.tbl +91 -0
  137. data/vendor/tracemonkey/call.js +13 -0
  138. data/vendor/tracemonkey/config.mk +206 -0
  139. data/vendor/tracemonkey/config/Makefile.in +106 -0
  140. data/vendor/tracemonkey/config/Moz/Milestone.pm +232 -0
  141. data/vendor/tracemonkey/config/autoconf.mk.in +362 -0
  142. data/vendor/tracemonkey/config/check-sync-dirs.py +103 -0
  143. data/vendor/tracemonkey/config/check-sync-exceptions +7 -0
  144. data/vendor/tracemonkey/config/config.mk +881 -0
  145. data/vendor/tracemonkey/config/fastcwd.pl +66 -0
  146. data/vendor/tracemonkey/config/gcc_hidden.h +2 -0
  147. data/vendor/tracemonkey/config/insure.mk +53 -0
  148. data/vendor/tracemonkey/config/make-system-wrappers.pl +59 -0
  149. data/vendor/tracemonkey/config/milestone.pl +112 -0
  150. data/vendor/tracemonkey/config/milestone.txt +13 -0
  151. data/vendor/tracemonkey/config/mkdepend/Makefile.in +84 -0
  152. data/vendor/tracemonkey/config/mkdepend/cppsetup.c +233 -0
  153. data/vendor/tracemonkey/config/mkdepend/def.h +184 -0
  154. data/vendor/tracemonkey/config/mkdepend/ifparser.c +551 -0
  155. data/vendor/tracemonkey/config/mkdepend/ifparser.h +83 -0
  156. data/vendor/tracemonkey/config/mkdepend/imakemdep.h +733 -0
  157. data/vendor/tracemonkey/config/mkdepend/include.c +337 -0
  158. data/vendor/tracemonkey/config/mkdepend/main.c +860 -0
  159. data/vendor/tracemonkey/config/mkdepend/mkdepend.man +382 -0
  160. data/vendor/tracemonkey/config/mkdepend/parse.c +686 -0
  161. data/vendor/tracemonkey/config/mkdepend/pr.c +124 -0
  162. data/vendor/tracemonkey/config/nfspwd.pl +50 -0
  163. data/vendor/tracemonkey/config/nsinstall.c +481 -0
  164. data/vendor/tracemonkey/config/nsinstall.py +155 -0
  165. data/vendor/tracemonkey/config/pathsub.c +247 -0
  166. data/vendor/tracemonkey/config/pathsub.h +74 -0
  167. data/vendor/tracemonkey/config/preprocessor.pl +671 -0
  168. data/vendor/tracemonkey/config/revdepth-nt.pl +48 -0
  169. data/vendor/tracemonkey/config/revdepth.pl +51 -0
  170. data/vendor/tracemonkey/config/rules.mk +2310 -0
  171. data/vendor/tracemonkey/config/static-checking-config.mk +21 -0
  172. data/vendor/tracemonkey/config/static-checking.js +92 -0
  173. data/vendor/tracemonkey/config/string-format.js +61 -0
  174. data/vendor/tracemonkey/config/system-headers +1035 -0
  175. data/vendor/tracemonkey/config/version.mk +85 -0
  176. data/vendor/tracemonkey/config/version_win.pl +442 -0
  177. data/vendor/tracemonkey/configure +14183 -0
  178. data/vendor/tracemonkey/configure.in +5363 -0
  179. data/vendor/tracemonkey/correct.sh +23 -0
  180. data/vendor/tracemonkey/correct/check-3d-morph.js +55 -0
  181. data/vendor/tracemonkey/correct/check-3d-raytrace.js +445 -0
  182. data/vendor/tracemonkey/correct/check-access-binary-trees.js +52 -0
  183. data/vendor/tracemonkey/correct/check-access-fannkuch.js +66 -0
  184. data/vendor/tracemonkey/correct/check-access-nbody.js +171 -0
  185. data/vendor/tracemonkey/correct/check-access-nsieve.js +40 -0
  186. data/vendor/tracemonkey/correct/check-bitops-3bit-bits-in-byte.js +35 -0
  187. data/vendor/tracemonkey/correct/check-bitops-bits-in-byte.js +24 -0
  188. data/vendor/tracemonkey/correct/check-bitops-bitwise-and.js +29 -0
  189. data/vendor/tracemonkey/correct/check-bitops-nsieve-bits.js +40 -0
  190. data/vendor/tracemonkey/correct/check-controlflow-recursive.js +27 -0
  191. data/vendor/tracemonkey/correct/check-date-format-tofte.js +302 -0
  192. data/vendor/tracemonkey/correct/check-date-format-xparb.js +421 -0
  193. data/vendor/tracemonkey/correct/check-mont.js +119 -0
  194. data/vendor/tracemonkey/dtoa.c +3335 -0
  195. data/vendor/tracemonkey/editline/Makefile.in +55 -0
  196. data/vendor/tracemonkey/editline/Makefile.ref +143 -0
  197. data/vendor/tracemonkey/editline/README +83 -0
  198. data/vendor/tracemonkey/editline/editline.3 +175 -0
  199. data/vendor/tracemonkey/editline/editline.c +1371 -0
  200. data/vendor/tracemonkey/editline/editline.h +135 -0
  201. data/vendor/tracemonkey/editline/sysunix.c +182 -0
  202. data/vendor/tracemonkey/editline/unix.h +82 -0
  203. data/vendor/tracemonkey/if.js +13 -0
  204. data/vendor/tracemonkey/imacro_asm.js.in +396 -0
  205. data/vendor/tracemonkey/imacros.c.out +1034 -0
  206. data/vendor/tracemonkey/imacros.jsasm +770 -0
  207. data/vendor/tracemonkey/javascript-trace.d +73 -0
  208. data/vendor/tracemonkey/jitstats.tbl +55 -0
  209. data/vendor/tracemonkey/js-config.h.in +82 -0
  210. data/vendor/tracemonkey/js-config.in +111 -0
  211. data/vendor/tracemonkey/js.mdp +0 -0
  212. data/vendor/tracemonkey/js.msg +312 -0
  213. data/vendor/tracemonkey/js3240.rc +79 -0
  214. data/vendor/tracemonkey/jsOS240.def +654 -0
  215. data/vendor/tracemonkey/jsapi.cpp +6005 -0
  216. data/vendor/tracemonkey/jsapi.h +2727 -0
  217. data/vendor/tracemonkey/jsarena.cpp +450 -0
  218. data/vendor/tracemonkey/jsarena.h +318 -0
  219. data/vendor/tracemonkey/jsarray.cpp +3664 -0
  220. data/vendor/tracemonkey/jsarray.h +238 -0
  221. data/vendor/tracemonkey/jsatom.cpp +1244 -0
  222. data/vendor/tracemonkey/jsatom.h +493 -0
  223. data/vendor/tracemonkey/jsbit.h +249 -0
  224. data/vendor/tracemonkey/jsbool.cpp +184 -0
  225. data/vendor/tracemonkey/jsbool.h +88 -0
  226. data/vendor/tracemonkey/jsbuiltins.cpp +415 -0
  227. data/vendor/tracemonkey/jsbuiltins.h +456 -0
  228. data/vendor/tracemonkey/jsclist.h +139 -0
  229. data/vendor/tracemonkey/jscntxt.cpp +1816 -0
  230. data/vendor/tracemonkey/jscntxt.h +1541 -0
  231. data/vendor/tracemonkey/jscompat.h +57 -0
  232. data/vendor/tracemonkey/jsconfig.mk +181 -0
  233. data/vendor/tracemonkey/jscpucfg.cpp +194 -0
  234. data/vendor/tracemonkey/jscpucfg.h +91 -0
  235. data/vendor/tracemonkey/jsdate.cpp +2465 -0
  236. data/vendor/tracemonkey/jsdate.h +129 -0
  237. data/vendor/tracemonkey/jsdbgapi.cpp +2017 -0
  238. data/vendor/tracemonkey/jsdbgapi.h +500 -0
  239. data/vendor/tracemonkey/jsdhash.cpp +876 -0
  240. data/vendor/tracemonkey/jsdhash.h +588 -0
  241. data/vendor/tracemonkey/jsdtoa.cpp +572 -0
  242. data/vendor/tracemonkey/jsdtoa.h +131 -0
  243. data/vendor/tracemonkey/jsdtracef.c +318 -0
  244. data/vendor/tracemonkey/jsdtracef.h +81 -0
  245. data/vendor/tracemonkey/jsemit.cpp +7292 -0
  246. data/vendor/tracemonkey/jsemit.h +802 -0
  247. data/vendor/tracemonkey/jsexn.cpp +1337 -0
  248. data/vendor/tracemonkey/jsexn.h +96 -0
  249. data/vendor/tracemonkey/jsfile.cpp +2747 -0
  250. data/vendor/tracemonkey/jsfile.h +56 -0
  251. data/vendor/tracemonkey/jsfile.msg +90 -0
  252. data/vendor/tracemonkey/jsfun.cpp +3089 -0
  253. data/vendor/tracemonkey/jsfun.h +366 -0
  254. data/vendor/tracemonkey/jsgc.cpp +3816 -0
  255. data/vendor/tracemonkey/jsgc.h +429 -0
  256. data/vendor/tracemonkey/jshash.cpp +477 -0
  257. data/vendor/tracemonkey/jshash.h +151 -0
  258. data/vendor/tracemonkey/jsify.pl +483 -0
  259. data/vendor/tracemonkey/jsinterp.cpp +7441 -0
  260. data/vendor/tracemonkey/jsinterp.h +666 -0
  261. data/vendor/tracemonkey/jsinvoke.cpp +42 -0
  262. data/vendor/tracemonkey/jsiter.cpp +1040 -0
  263. data/vendor/tracemonkey/jsiter.h +140 -0
  264. data/vendor/tracemonkey/jskeyword.tbl +124 -0
  265. data/vendor/tracemonkey/jskwgen.cpp +460 -0
  266. data/vendor/tracemonkey/jslibmath.h +69 -0
  267. data/vendor/tracemonkey/jslock.cpp +1512 -0
  268. data/vendor/tracemonkey/jslock.h +325 -0
  269. data/vendor/tracemonkey/jslocko.asm +60 -0
  270. data/vendor/tracemonkey/jslog2.cpp +111 -0
  271. data/vendor/tracemonkey/jslong.h +167 -0
  272. data/vendor/tracemonkey/jsmath.cpp +806 -0
  273. data/vendor/tracemonkey/jsmath.h +63 -0
  274. data/vendor/tracemonkey/jsnum.cpp +1374 -0
  275. data/vendor/tracemonkey/jsnum.h +280 -0
  276. data/vendor/tracemonkey/jsobj.cpp +6165 -0
  277. data/vendor/tracemonkey/jsobj.h +870 -0
  278. data/vendor/tracemonkey/json.cpp +1338 -0
  279. data/vendor/tracemonkey/json.h +108 -0
  280. data/vendor/tracemonkey/jsopcode.cpp +5484 -0
  281. data/vendor/tracemonkey/jsopcode.h +434 -0
  282. data/vendor/tracemonkey/jsopcode.tbl +591 -0
  283. data/vendor/tracemonkey/jsoplengen.cpp +121 -0
  284. data/vendor/tracemonkey/jsotypes.h +202 -0
  285. data/vendor/tracemonkey/jsparse.cpp +9257 -0
  286. data/vendor/tracemonkey/jsparse.h +900 -0
  287. data/vendor/tracemonkey/jsprf.cpp +1262 -0
  288. data/vendor/tracemonkey/jsprf.h +150 -0
  289. data/vendor/tracemonkey/jsproto.tbl +117 -0
  290. data/vendor/tracemonkey/jsprvtd.h +366 -0
  291. data/vendor/tracemonkey/jspubtd.h +585 -0
  292. data/vendor/tracemonkey/jsregexp.cpp +5051 -0
  293. data/vendor/tracemonkey/jsregexp.h +199 -0
  294. data/vendor/tracemonkey/jsreops.tbl +145 -0
  295. data/vendor/tracemonkey/jsscan.cpp +2040 -0
  296. data/vendor/tracemonkey/jsscan.h +467 -0
  297. data/vendor/tracemonkey/jsscope.cpp +1966 -0
  298. data/vendor/tracemonkey/jsscope.h +487 -0
  299. data/vendor/tracemonkey/jsscript.cpp +1932 -0
  300. data/vendor/tracemonkey/jsscript.h +345 -0
  301. data/vendor/tracemonkey/jsshell.msg +54 -0
  302. data/vendor/tracemonkey/jsstack.js +167 -0
  303. data/vendor/tracemonkey/jsstaticcheck.h +69 -0
  304. data/vendor/tracemonkey/jsstddef.h +87 -0
  305. data/vendor/tracemonkey/jsstdint.h +96 -0
  306. data/vendor/tracemonkey/jsstr.cpp +5277 -0
  307. data/vendor/tracemonkey/jsstr.h +702 -0
  308. data/vendor/tracemonkey/jstracer.cpp +10991 -0
  309. data/vendor/tracemonkey/jstracer.h +794 -0
  310. data/vendor/tracemonkey/jstypes.h +481 -0
  311. data/vendor/tracemonkey/jsutil.cpp +361 -0
  312. data/vendor/tracemonkey/jsutil.h +178 -0
  313. data/vendor/tracemonkey/jsversion.h +243 -0
  314. data/vendor/tracemonkey/jswince.asm +44 -0
  315. data/vendor/tracemonkey/jsxdrapi.cpp +800 -0
  316. data/vendor/tracemonkey/jsxdrapi.h +220 -0
  317. data/vendor/tracemonkey/jsxml.cpp +8327 -0
  318. data/vendor/tracemonkey/jsxml.h +305 -0
  319. data/vendor/tracemonkey/liveconnect/LiveConnect.dsp +157 -0
  320. data/vendor/tracemonkey/liveconnect/LiveConnectShell.dsp +120 -0
  321. data/vendor/tracemonkey/liveconnect/LiveConnectShell.dsw +44 -0
  322. data/vendor/tracemonkey/liveconnect/Makefile.in +105 -0
  323. data/vendor/tracemonkey/liveconnect/Makefile.ref +169 -0
  324. data/vendor/tracemonkey/liveconnect/README.html +712 -0
  325. data/vendor/tracemonkey/liveconnect/_jni/netscape_javascript_JSException.h +14 -0
  326. data/vendor/tracemonkey/liveconnect/_jni/netscape_javascript_JSObject.h +155 -0
  327. data/vendor/tracemonkey/liveconnect/classes/Makefile.in +89 -0
  328. data/vendor/tracemonkey/liveconnect/classes/Makefile.ref +57 -0
  329. data/vendor/tracemonkey/liveconnect/classes/netscape/Makefile.ref +47 -0
  330. data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/JSException.java +140 -0
  331. data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/JSObject.java +183 -0
  332. data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/JSProxy.java +58 -0
  333. data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/JSRunnable.java +70 -0
  334. data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/JSUtil.java +59 -0
  335. data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/Makefile.ref +53 -0
  336. data/vendor/tracemonkey/liveconnect/config/AIX4.1.mk +45 -0
  337. data/vendor/tracemonkey/liveconnect/config/AIX4.2.mk +45 -0
  338. data/vendor/tracemonkey/liveconnect/config/AIX4.3.mk +50 -0
  339. data/vendor/tracemonkey/liveconnect/config/HP-UXB.10.10.mk +43 -0
  340. data/vendor/tracemonkey/liveconnect/config/HP-UXB.10.20.mk +43 -0
  341. data/vendor/tracemonkey/liveconnect/config/HP-UXB.11.00.mk +43 -0
  342. data/vendor/tracemonkey/liveconnect/config/IRIX6.2.mk +43 -0
  343. data/vendor/tracemonkey/liveconnect/config/IRIX6.3.mk +43 -0
  344. data/vendor/tracemonkey/liveconnect/config/IRIX6.5.mk +43 -0
  345. data/vendor/tracemonkey/liveconnect/config/Linux_All.mk +73 -0
  346. data/vendor/tracemonkey/liveconnect/config/OSF1V4.0.mk +65 -0
  347. data/vendor/tracemonkey/liveconnect/config/OSF1V5.0.mk +62 -0
  348. data/vendor/tracemonkey/liveconnect/config/SunOS5.5.1.mk +55 -0
  349. data/vendor/tracemonkey/liveconnect/config/SunOS5.6.mk +39 -0
  350. data/vendor/tracemonkey/liveconnect/config/SunOS5.7.mk +39 -0
  351. data/vendor/tracemonkey/liveconnect/config/SunOS5.8.mk +39 -0
  352. data/vendor/tracemonkey/liveconnect/config/WINNT4.0.mk +53 -0
  353. data/vendor/tracemonkey/liveconnect/jsj.c +886 -0
  354. data/vendor/tracemonkey/liveconnect/jsj.msg +98 -0
  355. data/vendor/tracemonkey/liveconnect/jsj_JSObject.c +1377 -0
  356. data/vendor/tracemonkey/liveconnect/jsj_JavaArray.c +474 -0
  357. data/vendor/tracemonkey/liveconnect/jsj_JavaClass.c +737 -0
  358. data/vendor/tracemonkey/liveconnect/jsj_JavaMember.c +191 -0
  359. data/vendor/tracemonkey/liveconnect/jsj_JavaObject.c +1079 -0
  360. data/vendor/tracemonkey/liveconnect/jsj_JavaPackage.c +569 -0
  361. data/vendor/tracemonkey/liveconnect/jsj_array.c +207 -0
  362. data/vendor/tracemonkey/liveconnect/jsj_class.c +770 -0
  363. data/vendor/tracemonkey/liveconnect/jsj_convert.c +902 -0
  364. data/vendor/tracemonkey/liveconnect/jsj_field.c +421 -0
  365. data/vendor/tracemonkey/liveconnect/jsj_hash.c +488 -0
  366. data/vendor/tracemonkey/liveconnect/jsj_hash.h +161 -0
  367. data/vendor/tracemonkey/liveconnect/jsj_method.c +1825 -0
  368. data/vendor/tracemonkey/liveconnect/jsj_nodl.c +1 -0
  369. data/vendor/tracemonkey/liveconnect/jsj_private.h +677 -0
  370. data/vendor/tracemonkey/liveconnect/jsj_simpleapi.c +219 -0
  371. data/vendor/tracemonkey/liveconnect/jsj_utils.c +513 -0
  372. data/vendor/tracemonkey/liveconnect/jsjava.h +316 -0
  373. data/vendor/tracemonkey/liveconnect/netscape_javascript_JSObject.h +155 -0
  374. data/vendor/tracemonkey/liveconnect/nsCLiveconnect.cpp +785 -0
  375. data/vendor/tracemonkey/liveconnect/nsCLiveconnect.h +197 -0
  376. data/vendor/tracemonkey/liveconnect/nsCLiveconnectFactory.cpp +118 -0
  377. data/vendor/tracemonkey/liveconnect/nsCLiveconnectFactory.h +76 -0
  378. data/vendor/tracemonkey/liveconnect/nsILiveconnect.h +197 -0
  379. data/vendor/tracemonkey/liveconnect/nsISecureLiveconnect.h +94 -0
  380. data/vendor/tracemonkey/liveconnect/nsISecurityContext.h +136 -0
  381. data/vendor/tracemonkey/lock_SunOS.s +119 -0
  382. data/vendor/tracemonkey/mandelbrot-results.js +3 -0
  383. data/vendor/tracemonkey/math-partial-sums.js +32 -0
  384. data/vendor/tracemonkey/math-trace-tests.js +507 -0
  385. data/vendor/tracemonkey/md5.js +289 -0
  386. data/vendor/tracemonkey/nanojit/Assembler.cpp +1984 -0
  387. data/vendor/tracemonkey/nanojit/Assembler.h +375 -0
  388. data/vendor/tracemonkey/nanojit/Fragmento.cpp +651 -0
  389. data/vendor/tracemonkey/nanojit/Fragmento.h +237 -0
  390. data/vendor/tracemonkey/nanojit/LIR.cpp +2314 -0
  391. data/vendor/tracemonkey/nanojit/LIR.h +879 -0
  392. data/vendor/tracemonkey/nanojit/LIRopcode.tbl +252 -0
  393. data/vendor/tracemonkey/nanojit/Native.h +127 -0
  394. data/vendor/tracemonkey/nanojit/NativeARM.cpp +1742 -0
  395. data/vendor/tracemonkey/nanojit/NativeARM.h +844 -0
  396. data/vendor/tracemonkey/nanojit/NativeSparc.cpp +1130 -0
  397. data/vendor/tracemonkey/nanojit/NativeSparc.h +948 -0
  398. data/vendor/tracemonkey/nanojit/NativeThumb.cpp +1322 -0
  399. data/vendor/tracemonkey/nanojit/NativeThumb.h +525 -0
  400. data/vendor/tracemonkey/nanojit/Nativei386.cpp +1748 -0
  401. data/vendor/tracemonkey/nanojit/Nativei386.h +857 -0
  402. data/vendor/tracemonkey/nanojit/RegAlloc.cpp +183 -0
  403. data/vendor/tracemonkey/nanojit/RegAlloc.h +95 -0
  404. data/vendor/tracemonkey/nanojit/TraceTreeDrawer.cpp +306 -0
  405. data/vendor/tracemonkey/nanojit/TraceTreeDrawer.h +88 -0
  406. data/vendor/tracemonkey/nanojit/avmplus.cpp +56 -0
  407. data/vendor/tracemonkey/nanojit/avmplus.h +1016 -0
  408. data/vendor/tracemonkey/nanojit/nanojit.h +253 -0
  409. data/vendor/tracemonkey/perfect.js +39 -0
  410. data/vendor/tracemonkey/plify_jsdhash.sed +35 -0
  411. data/vendor/tracemonkey/prmjtime.cpp +869 -0
  412. data/vendor/tracemonkey/prmjtime.h +103 -0
  413. data/vendor/tracemonkey/ref-config/AIX4.1.mk +65 -0
  414. data/vendor/tracemonkey/ref-config/AIX4.2.mk +64 -0
  415. data/vendor/tracemonkey/ref-config/AIX4.3.mk +65 -0
  416. data/vendor/tracemonkey/ref-config/Darwin.mk +85 -0
  417. data/vendor/tracemonkey/ref-config/Darwin1.3.mk +81 -0
  418. data/vendor/tracemonkey/ref-config/Darwin1.4.mk +41 -0
  419. data/vendor/tracemonkey/ref-config/Darwin5.2.mk +81 -0
  420. data/vendor/tracemonkey/ref-config/Darwin5.3.mk +81 -0
  421. data/vendor/tracemonkey/ref-config/Darwin64.mk +72 -0
  422. data/vendor/tracemonkey/ref-config/HP-UXB.10.10.mk +77 -0
  423. data/vendor/tracemonkey/ref-config/HP-UXB.10.20.mk +77 -0
  424. data/vendor/tracemonkey/ref-config/HP-UXB.11.00.mk +80 -0
  425. data/vendor/tracemonkey/ref-config/IRIX.mk +87 -0
  426. data/vendor/tracemonkey/ref-config/IRIX5.3.mk +44 -0
  427. data/vendor/tracemonkey/ref-config/IRIX6.1.mk +44 -0
  428. data/vendor/tracemonkey/ref-config/IRIX6.2.mk +44 -0
  429. data/vendor/tracemonkey/ref-config/IRIX6.3.mk +44 -0
  430. data/vendor/tracemonkey/ref-config/IRIX6.5.mk +44 -0
  431. data/vendor/tracemonkey/ref-config/Linux_All.mk +105 -0
  432. data/vendor/tracemonkey/ref-config/Mac_OS10.0.mk +82 -0
  433. data/vendor/tracemonkey/ref-config/OSF1V4.0.mk +72 -0
  434. data/vendor/tracemonkey/ref-config/OSF1V5.0.mk +69 -0
  435. data/vendor/tracemonkey/ref-config/SunOS4.1.4.mk +101 -0
  436. data/vendor/tracemonkey/ref-config/SunOS5.10.mk +50 -0
  437. data/vendor/tracemonkey/ref-config/SunOS5.3.mk +91 -0
  438. data/vendor/tracemonkey/ref-config/SunOS5.4.mk +92 -0
  439. data/vendor/tracemonkey/ref-config/SunOS5.5.1.mk +44 -0
  440. data/vendor/tracemonkey/ref-config/SunOS5.5.mk +87 -0
  441. data/vendor/tracemonkey/ref-config/SunOS5.6.mk +89 -0
  442. data/vendor/tracemonkey/ref-config/SunOS5.7.mk +44 -0
  443. data/vendor/tracemonkey/ref-config/SunOS5.8.mk +44 -0
  444. data/vendor/tracemonkey/ref-config/SunOS5.9.mk +44 -0
  445. data/vendor/tracemonkey/ref-config/WINNT4.0.mk +118 -0
  446. data/vendor/tracemonkey/ref-config/WINNT5.0.mk +118 -0
  447. data/vendor/tracemonkey/ref-config/WINNT5.1.mk +118 -0
  448. data/vendor/tracemonkey/ref-config/WINNT5.2.mk +118 -0
  449. data/vendor/tracemonkey/ref-config/WINNT6.0.mk +118 -0
  450. data/vendor/tracemonkey/ref-config/dgux.mk +64 -0
  451. data/vendor/tracemonkey/resource.h +15 -0
  452. data/vendor/tracemonkey/rules.mk +206 -0
  453. data/vendor/tracemonkey/shell/Makefile.in +72 -0
  454. data/vendor/tracemonkey/shell/js.cpp +4719 -0
  455. data/vendor/tracemonkey/t/3d-cube.js +337 -0
  456. data/vendor/tracemonkey/t/3d-morph.js +54 -0
  457. data/vendor/tracemonkey/t/3d-raytrace.js +441 -0
  458. data/vendor/tracemonkey/t/access-binary-trees.js +50 -0
  459. data/vendor/tracemonkey/t/access-fannkuch.js +66 -0
  460. data/vendor/tracemonkey/t/access-nbody.js +169 -0
  461. data/vendor/tracemonkey/t/access-nsieve.js +38 -0
  462. data/vendor/tracemonkey/t/bitops-3bit-bits-in-byte.js +32 -0
  463. data/vendor/tracemonkey/t/bitops-bits-in-byte.js +21 -0
  464. data/vendor/tracemonkey/t/bitops-bitwise-and.js +28 -0
  465. data/vendor/tracemonkey/t/bitops-nsieve-bits.js +32 -0
  466. data/vendor/tracemonkey/t/controlflow-recursive.js +25 -0
  467. data/vendor/tracemonkey/t/crypto-aes.js +422 -0
  468. data/vendor/tracemonkey/t/crypto-md5.js +286 -0
  469. data/vendor/tracemonkey/t/crypto-sha1.js +224 -0
  470. data/vendor/tracemonkey/t/date-format-tofte.js +299 -0
  471. data/vendor/tracemonkey/t/date-format-xparb.js +417 -0
  472. data/vendor/tracemonkey/t/math-cordic.js +95 -0
  473. data/vendor/tracemonkey/t/math-partial-sums.js +33 -0
  474. data/vendor/tracemonkey/t/math-spectral-norm.js +51 -0
  475. data/vendor/tracemonkey/t/regexp-dna.js +1712 -0
  476. data/vendor/tracemonkey/t/string-base64.js +135 -0
  477. data/vendor/tracemonkey/t/string-fasta.js +85 -0
  478. data/vendor/tracemonkey/t/string-tagcloud.js +265 -0
  479. data/vendor/tracemonkey/t/string-unpack-code.js +68 -0
  480. data/vendor/tracemonkey/t/string-validate-input.js +89 -0
  481. data/vendor/tracemonkey/time.sh +13 -0
  482. data/vendor/tracemonkey/trace-test.js +5564 -0
  483. data/vendor/tracemonkey/v8/base.js +187 -0
  484. data/vendor/tracemonkey/v8/crypto.js +1689 -0
  485. data/vendor/tracemonkey/v8/deltablue.js +880 -0
  486. data/vendor/tracemonkey/v8/earley-boyer.js +4682 -0
  487. data/vendor/tracemonkey/v8/raytrace.js +3418 -0
  488. data/vendor/tracemonkey/v8/richards.js +539 -0
  489. data/vendor/tracemonkey/v8/run-crypto.js +44 -0
  490. data/vendor/tracemonkey/v8/run-deltablue.js +44 -0
  491. data/vendor/tracemonkey/v8/run-earley-boyer.js +44 -0
  492. data/vendor/tracemonkey/v8/run-raytrace.js +44 -0
  493. data/vendor/tracemonkey/v8/run-richards.js +44 -0
  494. data/vendor/tracemonkey/v8/run.js +49 -0
  495. data/vendor/tracemonkey/vprof/readme.txt +93 -0
  496. data/vendor/tracemonkey/vprof/vprof.cpp +360 -0
  497. data/vendor/tracemonkey/vprof/vprof.h +245 -0
  498. data/vendor/tracemonkey/xpconnect/Makefile.in +67 -0
  499. data/vendor/tracemonkey/xpconnect/crashtests/117307-1.html +20 -0
  500. data/vendor/tracemonkey/xpconnect/crashtests/193710.html +11 -0
  501. data/vendor/tracemonkey/xpconnect/crashtests/290162-1.html +5 -0
  502. data/vendor/tracemonkey/xpconnect/crashtests/326615-1.html +16 -0
  503. data/vendor/tracemonkey/xpconnect/crashtests/328553-1.html +13 -0
  504. data/vendor/tracemonkey/xpconnect/crashtests/346258-1.html +12 -0
  505. data/vendor/tracemonkey/xpconnect/crashtests/346512-1-frame1.xhtml +16 -0
  506. data/vendor/tracemonkey/xpconnect/crashtests/346512-1-frame2.xhtml +15 -0
  507. data/vendor/tracemonkey/xpconnect/crashtests/346512-1.xhtml +30 -0
  508. data/vendor/tracemonkey/xpconnect/crashtests/382133-1.html +3 -0
  509. data/vendor/tracemonkey/xpconnect/crashtests/386680-1.html +22 -0
  510. data/vendor/tracemonkey/xpconnect/crashtests/394810-1.html +4 -0
  511. data/vendor/tracemonkey/xpconnect/crashtests/400349-1.html +20 -0
  512. data/vendor/tracemonkey/xpconnect/crashtests/403356-1.html +13 -0
  513. data/vendor/tracemonkey/xpconnect/crashtests/418139-1.svg +22 -0
  514. data/vendor/tracemonkey/xpconnect/crashtests/420513-1.html +11 -0
  515. data/vendor/tracemonkey/xpconnect/crashtests/453935-1.html +37 -0
  516. data/vendor/tracemonkey/xpconnect/crashtests/462926.html +12 -0
  517. data/vendor/tracemonkey/xpconnect/crashtests/468552-1.html +18 -0
  518. data/vendor/tracemonkey/xpconnect/crashtests/471366-1.html +12 -0
  519. data/vendor/tracemonkey/xpconnect/crashtests/475185-1.html +13 -0
  520. data/vendor/tracemonkey/xpconnect/crashtests/475291-1.html +14 -0
  521. data/vendor/tracemonkey/xpconnect/crashtests/503286-1.html +23 -0
  522. data/vendor/tracemonkey/xpconnect/crashtests/crashtests.list +21 -0
  523. data/vendor/tracemonkey/xpconnect/idl/Makefile.in +78 -0
  524. data/vendor/tracemonkey/xpconnect/idl/XPCIDispatch.idl +51 -0
  525. data/vendor/tracemonkey/xpconnect/idl/mozIJSSubScriptLoader.idl +64 -0
  526. data/vendor/tracemonkey/xpconnect/idl/nsIActiveXSecurityPolicy.idl +67 -0
  527. data/vendor/tracemonkey/xpconnect/idl/nsIDispatchSupport.idl +119 -0
  528. data/vendor/tracemonkey/xpconnect/idl/nsIJSContextStack.idl +85 -0
  529. data/vendor/tracemonkey/xpconnect/idl/nsIJSRuntimeService.idl +51 -0
  530. data/vendor/tracemonkey/xpconnect/idl/nsIScriptError.idl +102 -0
  531. data/vendor/tracemonkey/xpconnect/idl/nsIScriptableInterfaces.idl +67 -0
  532. data/vendor/tracemonkey/xpconnect/idl/nsIXPCScriptNotify.idl +66 -0
  533. data/vendor/tracemonkey/xpconnect/idl/nsIXPCScriptable.idl +183 -0
  534. data/vendor/tracemonkey/xpconnect/idl/nsIXPCSecurityManager.idl +114 -0
  535. data/vendor/tracemonkey/xpconnect/idl/nsIXPConnect.idl +819 -0
  536. data/vendor/tracemonkey/xpconnect/idl/xpcIJSModuleLoader.idl +95 -0
  537. data/vendor/tracemonkey/xpconnect/idl/xpcIJSWeakReference.idl +49 -0
  538. data/vendor/tracemonkey/xpconnect/idl/xpccomponents.idl +254 -0
  539. data/vendor/tracemonkey/xpconnect/idl/xpcexception.idl +66 -0
  540. data/vendor/tracemonkey/xpconnect/idl/xpcjsid.idl +83 -0
  541. data/vendor/tracemonkey/xpconnect/loader/ISO8601DateUtils.jsm +176 -0
  542. data/vendor/tracemonkey/xpconnect/loader/Makefile.in +63 -0
  543. data/vendor/tracemonkey/xpconnect/loader/XPCOMUtils.jsm +267 -0
  544. data/vendor/tracemonkey/xpconnect/loader/mozJSComponentLoader.cpp +1717 -0
  545. data/vendor/tracemonkey/xpconnect/loader/mozJSComponentLoader.h +172 -0
  546. data/vendor/tracemonkey/xpconnect/loader/mozJSLoaderConstructors.h +101 -0
  547. data/vendor/tracemonkey/xpconnect/loader/mozJSSubScriptLoader.cpp +360 -0
  548. data/vendor/tracemonkey/xpconnect/loader/mozJSSubScriptLoader.h +66 -0
  549. data/vendor/tracemonkey/xpconnect/public/Makefile.in +54 -0
  550. data/vendor/tracemonkey/xpconnect/public/nsAXPCNativeCallContext.h +89 -0
  551. data/vendor/tracemonkey/xpconnect/public/nsAutoJSValHolder.h +168 -0
  552. data/vendor/tracemonkey/xpconnect/public/xpc_map_end.h +327 -0
  553. data/vendor/tracemonkey/xpconnect/sample/Makefile.in +71 -0
  554. data/vendor/tracemonkey/xpconnect/sample/README +39 -0
  555. data/vendor/tracemonkey/xpconnect/sample/xpcsample1.cpp +337 -0
  556. data/vendor/tracemonkey/xpconnect/sample/xpcsample1.idl +82 -0
  557. data/vendor/tracemonkey/xpconnect/sample/xpcsample1.js +21 -0
  558. data/vendor/tracemonkey/xpconnect/shell/Makefile.in +106 -0
  559. data/vendor/tracemonkey/xpconnect/shell/jsshell.msg +50 -0
  560. data/vendor/tracemonkey/xpconnect/shell/xpcshell.cpp +1817 -0
  561. data/vendor/tracemonkey/xpconnect/shell/xpcshellMacUtils.h +43 -0
  562. data/vendor/tracemonkey/xpconnect/shell/xpcshellMacUtils.mm +54 -0
  563. data/vendor/tracemonkey/xpconnect/src/Makefile.in +228 -0
  564. data/vendor/tracemonkey/xpconnect/src/README +3 -0
  565. data/vendor/tracemonkey/xpconnect/src/XPCCrossOriginWrapper.cpp +1186 -0
  566. data/vendor/tracemonkey/xpconnect/src/XPCDispConvert.cpp +593 -0
  567. data/vendor/tracemonkey/xpconnect/src/XPCDispInlines.h +667 -0
  568. data/vendor/tracemonkey/xpconnect/src/XPCDispInterface.cpp +383 -0
  569. data/vendor/tracemonkey/xpconnect/src/XPCDispObject.cpp +516 -0
  570. data/vendor/tracemonkey/xpconnect/src/XPCDispParamPropJSClass.cpp +223 -0
  571. data/vendor/tracemonkey/xpconnect/src/XPCDispParams.cpp +103 -0
  572. data/vendor/tracemonkey/xpconnect/src/XPCDispPrivate.h +1401 -0
  573. data/vendor/tracemonkey/xpconnect/src/XPCDispTearOff.cpp +547 -0
  574. data/vendor/tracemonkey/xpconnect/src/XPCDispTypeInfo.cpp +471 -0
  575. data/vendor/tracemonkey/xpconnect/src/XPCIDispatchClassInfo.cpp +139 -0
  576. data/vendor/tracemonkey/xpconnect/src/XPCIDispatchExtension.cpp +362 -0
  577. data/vendor/tracemonkey/xpconnect/src/XPCNativeWrapper.cpp +1350 -0
  578. data/vendor/tracemonkey/xpconnect/src/XPCNativeWrapper.h +88 -0
  579. data/vendor/tracemonkey/xpconnect/src/XPCSafeJSObjectWrapper.cpp +1148 -0
  580. data/vendor/tracemonkey/xpconnect/src/XPCSystemOnlyWrapper.cpp +718 -0
  581. data/vendor/tracemonkey/xpconnect/src/XPCWrapper.cpp +850 -0
  582. data/vendor/tracemonkey/xpconnect/src/XPCWrapper.h +394 -0
  583. data/vendor/tracemonkey/xpconnect/src/dom_quickstubs.qsconf +568 -0
  584. data/vendor/tracemonkey/xpconnect/src/nsDispatchSupport.cpp +348 -0
  585. data/vendor/tracemonkey/xpconnect/src/nsScriptError.cpp +201 -0
  586. data/vendor/tracemonkey/xpconnect/src/nsXPConnect.cpp +2609 -0
  587. data/vendor/tracemonkey/xpconnect/src/qsgen.py +1487 -0
  588. data/vendor/tracemonkey/xpconnect/src/xpc.msg +217 -0
  589. data/vendor/tracemonkey/xpconnect/src/xpcJSWeakReference.cpp +148 -0
  590. data/vendor/tracemonkey/xpconnect/src/xpcJSWeakReference.h +56 -0
  591. data/vendor/tracemonkey/xpconnect/src/xpccallcontext.cpp +579 -0
  592. data/vendor/tracemonkey/xpconnect/src/xpccomponents.cpp +4144 -0
  593. data/vendor/tracemonkey/xpconnect/src/xpccontext.cpp +115 -0
  594. data/vendor/tracemonkey/xpconnect/src/xpcconvert.cpp +2298 -0
  595. data/vendor/tracemonkey/xpconnect/src/xpcdebug.cpp +481 -0
  596. data/vendor/tracemonkey/xpconnect/src/xpcexception.cpp +502 -0
  597. data/vendor/tracemonkey/xpconnect/src/xpcforwards.h +114 -0
  598. data/vendor/tracemonkey/xpconnect/src/xpcinlines.h +772 -0
  599. data/vendor/tracemonkey/xpconnect/src/xpcjsid.cpp +1025 -0
  600. data/vendor/tracemonkey/xpconnect/src/xpcjsruntime.cpp +1342 -0
  601. data/vendor/tracemonkey/xpconnect/src/xpclog.cpp +128 -0
  602. data/vendor/tracemonkey/xpconnect/src/xpclog.h +101 -0
  603. data/vendor/tracemonkey/xpconnect/src/xpcmaps.cpp +761 -0
  604. data/vendor/tracemonkey/xpconnect/src/xpcmaps.h +713 -0
  605. data/vendor/tracemonkey/xpconnect/src/xpcmodule.cpp +136 -0
  606. data/vendor/tracemonkey/xpconnect/src/xpcprivate.h +4138 -0
  607. data/vendor/tracemonkey/xpconnect/src/xpcquickstubs.cpp +1128 -0
  608. data/vendor/tracemonkey/xpconnect/src/xpcquickstubs.h +480 -0
  609. data/vendor/tracemonkey/xpconnect/src/xpcruntimesvc.cpp +179 -0
  610. data/vendor/tracemonkey/xpconnect/src/xpcstack.cpp +342 -0
  611. data/vendor/tracemonkey/xpconnect/src/xpcstring.cpp +139 -0
  612. data/vendor/tracemonkey/xpconnect/src/xpcthreadcontext.cpp +599 -0
  613. data/vendor/tracemonkey/xpconnect/src/xpcthrower.cpp +399 -0
  614. data/vendor/tracemonkey/xpconnect/src/xpcvariant.cpp +850 -0
  615. data/vendor/tracemonkey/xpconnect/src/xpcwrappedjs.cpp +670 -0
  616. data/vendor/tracemonkey/xpconnect/src/xpcwrappedjsclass.cpp +2015 -0
  617. data/vendor/tracemonkey/xpconnect/src/xpcwrappednative.cpp +3482 -0
  618. data/vendor/tracemonkey/xpconnect/src/xpcwrappednativeinfo.cpp +945 -0
  619. data/vendor/tracemonkey/xpconnect/src/xpcwrappednativejsops.cpp +2003 -0
  620. data/vendor/tracemonkey/xpconnect/src/xpcwrappednativeproto.cpp +302 -0
  621. data/vendor/tracemonkey/xpconnect/src/xpcwrappednativescope.cpp +991 -0
  622. data/vendor/tracemonkey/xpconnect/tests/Makefile.in +75 -0
  623. data/vendor/tracemonkey/xpconnect/tests/TestXPC.cpp +785 -0
  624. data/vendor/tracemonkey/xpconnect/tests/chrome/Makefile.in +51 -0
  625. data/vendor/tracemonkey/xpconnect/tests/chrome/test_bug500931.xul +43 -0
  626. data/vendor/tracemonkey/xpconnect/tests/components/Makefile.in +85 -0
  627. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_array.cpp +388 -0
  628. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_attributes.cpp +305 -0
  629. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_calljs.cpp +135 -0
  630. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_child.cpp +225 -0
  631. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_const.cpp +76 -0
  632. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_domstring.cpp +118 -0
  633. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_echo.cpp +616 -0
  634. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_in.cpp +204 -0
  635. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_inout.cpp +171 -0
  636. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_module.cpp +77 -0
  637. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_multiple.cpp +554 -0
  638. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_noisy.cpp +154 -0
  639. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_out.cpp +335 -0
  640. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_overloaded.cpp +250 -0
  641. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_private.h +192 -0
  642. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_string.cpp +185 -0
  643. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_variant.cpp +355 -0
  644. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/StdAfx.cpp +12 -0
  645. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/StdAfx.h +28 -0
  646. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCDispUtilities.h +28 -0
  647. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.cpp +86 -0
  648. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.def +9 -0
  649. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.dsp +318 -0
  650. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.dsw +29 -0
  651. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.idl +454 -0
  652. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.rc +145 -0
  653. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispSimple.cpp +44 -0
  654. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispSimple.h +56 -0
  655. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispSimple.rgs +23 -0
  656. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestArrays.cpp +221 -0
  657. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestArrays.h +53 -0
  658. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestArrays.rgs +23 -0
  659. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestMethods.cpp +699 -0
  660. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestMethods.h +138 -0
  661. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestMethods.rgs +23 -0
  662. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestNoIDispatch.cpp +23 -0
  663. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestNoIDispatch.h +41 -0
  664. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestNoIDispatch.rgs +23 -0
  665. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestProperties.cpp +256 -0
  666. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestProperties.h +88 -0
  667. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestProperties.rgs +23 -0
  668. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOff.cpp +23 -0
  669. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOff.h +43 -0
  670. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOff.rgs +23 -0
  671. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOn.cpp +29 -0
  672. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOn.h +45 -0
  673. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOn.rgs +23 -0
  674. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestWrappedJS.cpp +177 -0
  675. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestWrappedJS.h +50 -0
  676. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestWrappedJS.rgs +23 -0
  677. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/resource.h +36 -0
  678. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/Arrays/XPCIDispatchArrayTests.js +54 -0
  679. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/Attributes/XPCIDispatchAttributeTests.js +150 -0
  680. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/General/XPCIDispatchInstantiations.js +122 -0
  681. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/General/XPCStress.js +58 -0
  682. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/Methods/XPCIDispatchMethodTests.js +376 -0
  683. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/shell.js +377 -0
  684. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedJS/General/XPCIDispatchTestWrappedJS.js +76 -0
  685. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedJS/shell.js +377 -0
  686. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/exectests.cmd +1 -0
  687. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/jsDriver.pl +1288 -0
  688. data/vendor/tracemonkey/xpconnect/tests/idl/Makefile.in +61 -0
  689. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest.idl +312 -0
  690. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest2.idl +51 -0
  691. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_attributes.idl +67 -0
  692. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_calljs.idl +59 -0
  693. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_const.idl +61 -0
  694. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_domstring.idl +59 -0
  695. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_in.idl +88 -0
  696. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_inout.idl +86 -0
  697. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_multiple.idl +77 -0
  698. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_out.idl +142 -0
  699. data/vendor/tracemonkey/xpconnect/tests/js/checkid.js +82 -0
  700. data/vendor/tracemonkey/xpconnect/tests/js/evaluate.js +311 -0
  701. data/vendor/tracemonkey/xpconnect/tests/js/exceptions-2.js +153 -0
  702. data/vendor/tracemonkey/xpconnect/tests/js/exceptions-3.js +194 -0
  703. data/vendor/tracemonkey/xpconnect/tests/js/exceptions-4.js +297 -0
  704. data/vendor/tracemonkey/xpconnect/tests/js/exceptions-5.js +343 -0
  705. data/vendor/tracemonkey/xpconnect/tests/js/exceptions.js +230 -0
  706. data/vendor/tracemonkey/xpconnect/tests/js/javascript.js +96 -0
  707. data/vendor/tracemonkey/xpconnect/tests/js/multiple-2.js +151 -0
  708. data/vendor/tracemonkey/xpconnect/tests/js/multiple-3.js +148 -0
  709. data/vendor/tracemonkey/xpconnect/tests/js/multiple-4.js +152 -0
  710. data/vendor/tracemonkey/xpconnect/tests/js/multiple.js +137 -0
  711. data/vendor/tracemonkey/xpconnect/tests/js/notscriptable.js +104 -0
  712. data/vendor/tracemonkey/xpconnect/tests/js/old/simpletest.js +36 -0
  713. data/vendor/tracemonkey/xpconnect/tests/js/old/speed.js +60 -0
  714. data/vendor/tracemonkey/xpconnect/tests/js/old/testxpc.js +464 -0
  715. data/vendor/tracemonkey/xpconnect/tests/js/old/threads.js +74 -0
  716. data/vendor/tracemonkey/xpconnect/tests/js/old/try.js +27 -0
  717. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_array.js +308 -0
  718. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_callcontext.js +68 -0
  719. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_echo.js +636 -0
  720. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_enum_and_sort.js +28 -0
  721. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_enum_constants.js +15 -0
  722. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_enum_create.js +200 -0
  723. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_exceptions.js +167 -0
  724. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_ids.js +135 -0
  725. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_observer.js +36 -0
  726. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_overloaded.js +14 -0
  727. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_primitives.js +141 -0
  728. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_propertybag.js +36 -0
  729. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_variant.js +339 -0
  730. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_variant_array.js +30 -0
  731. data/vendor/tracemonkey/xpconnect/tests/js/readonlyattributes.js +74 -0
  732. data/vendor/tracemonkey/xpconnect/tests/js/readwriteattributes.js +101 -0
  733. data/vendor/tracemonkey/xpconnect/tests/js/scriptable.js +120 -0
  734. data/vendor/tracemonkey/xpconnect/tests/js/testin.js +203 -0
  735. data/vendor/tracemonkey/xpconnect/tests/js/xpcfun.js +234 -0
  736. data/vendor/tracemonkey/xpconnect/tests/js/xpctest_primitives.js +200 -0
  737. data/vendor/tracemonkey/xpconnect/tests/mochitest/Makefile.in +66 -0
  738. data/vendor/tracemonkey/xpconnect/tests/mochitest/bug500931_helper.html +7 -0
  739. data/vendor/tracemonkey/xpconnect/tests/mochitest/inner.html +7 -0
  740. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug361111.xul +29 -0
  741. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug384632.html +32 -0
  742. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug390488.html +65 -0
  743. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug393269.html +46 -0
  744. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug396851.html +43 -0
  745. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug428021.html +41 -0
  746. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug446584.html +49 -0
  747. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug448587.html +31 -0
  748. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug462428.html +42 -0
  749. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug478438.html +66 -0
  750. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug484107.html +100 -0
  751. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug484459.html +36 -0
  752. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug500691.html +28 -0
  753. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_wrappers.html +116 -0
  754. data/vendor/tracemonkey/xpconnect/tests/unit/bogus_element_type.jsm +1 -0
  755. data/vendor/tracemonkey/xpconnect/tests/unit/bogus_exports_type.jsm +1 -0
  756. data/vendor/tracemonkey/xpconnect/tests/unit/bug451678_subscript.js +2 -0
  757. data/vendor/tracemonkey/xpconnect/tests/unit/component_import.js +144 -0
  758. data/vendor/tracemonkey/xpconnect/tests/unit/recursive_importA.jsm +44 -0
  759. data/vendor/tracemonkey/xpconnect/tests/unit/recursive_importB.jsm +45 -0
  760. data/vendor/tracemonkey/xpconnect/tests/unit/syntax_error.jsm +1 -0
  761. data/vendor/tracemonkey/xpconnect/tests/unit/test_bogus_files.js +88 -0
  762. data/vendor/tracemonkey/xpconnect/tests/unit/test_bug408412.js +51 -0
  763. data/vendor/tracemonkey/xpconnect/tests/unit/test_bug451678.js +52 -0
  764. data/vendor/tracemonkey/xpconnect/tests/unit/test_bug_442086.js +68 -0
  765. data/vendor/tracemonkey/xpconnect/tests/unit/test_import.js +127 -0
  766. data/vendor/tracemonkey/xpconnect/tests/unit/test_js_weak_references.js +63 -0
  767. data/vendor/tracemonkey/xpconnect/tests/unit/test_recursive_import.js +62 -0
  768. data/vendor/tracemonkey/xpconnect/tools/Makefile.in +49 -0
  769. data/vendor/tracemonkey/xpconnect/tools/idl/Makefile.in +53 -0
  770. data/vendor/tracemonkey/xpconnect/tools/idl/nsIXPCToolsCompiler.idl +60 -0
  771. data/vendor/tracemonkey/xpconnect/tools/idl/nsIXPCToolsProfiler.idl +57 -0
  772. data/vendor/tracemonkey/xpconnect/tools/js/CompileJSFiles.js +28 -0
  773. data/vendor/tracemonkey/xpconnect/tools/js/ListJSFiles.js +18 -0
  774. data/vendor/tracemonkey/xpconnect/tools/src/Makefile.in +76 -0
  775. data/vendor/tracemonkey/xpconnect/tools/src/nsXPCToolsCompiler.cpp +161 -0
  776. data/vendor/tracemonkey/xpconnect/tools/src/nsXPCToolsModule.cpp +65 -0
  777. data/vendor/tracemonkey/xpconnect/tools/src/nsXPCToolsProfiler.cpp +370 -0
  778. data/vendor/tracemonkey/xpconnect/tools/src/xpctools_private.h +236 -0
  779. metadata +782 -107
  780. data/test/johnson/nodes/export_test.rb +0 -9
  781. data/test/johnson/nodes/import_test.rb +0 -13
  782. data/test/johnson/version_test.rb +0 -13
@@ -0,0 +1,98 @@
1
+ /* ***** BEGIN LICENSE BLOCK *****
2
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
3
+ *
4
+ * The contents of this file are subject to the Mozilla Public License Version
5
+ * 1.1 (the "License"); you may not use this file except in compliance with
6
+ * the License. You may obtain a copy of the License at
7
+ * http://www.mozilla.org/MPL/
8
+ *
9
+ * Software distributed under the License is distributed on an "AS IS" basis,
10
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11
+ * for the specific language governing rights and limitations under the
12
+ * License.
13
+ *
14
+ * The Original Code is Mozilla Communicator client code, released
15
+ * March 31, 1998.
16
+ *
17
+ * The Initial Developer of the Original Code is
18
+ * Netscape Communications Corporation.
19
+ * Portions created by the Initial Developer are Copyright (C) 1998-1999
20
+ * the Initial Developer. All Rights Reserved.
21
+ *
22
+ * Contributor(s):
23
+ *
24
+ * Alternatively, the contents of this file may be used under the terms of
25
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
26
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
27
+ * in which case the provisions of the GPL or the LGPL are applicable instead
28
+ * of those above. If you wish to allow use of your version of this file only
29
+ * under the terms of either the GPL or the LGPL, and not to allow others to
30
+ * use your version of this file under the terms of the MPL, indicate your
31
+ * decision by deleting the provisions above and replace them with the notice
32
+ * and other provisions required by the GPL or the LGPL. If you do not delete
33
+ * the provisions above, a recipient may use your version of this file under
34
+ * the terms of any one of the MPL, the GPL or the LGPL.
35
+ *
36
+ * ***** END LICENSE BLOCK ***** */
37
+
38
+ /* -*- Mode: C; tab-width: 8 -*-
39
+ * Copyright (C) 1998-1999 Netscape Communications Corporation, All Rights Reserved.
40
+ */
41
+
42
+ /*
43
+ Error messages for LiveConnect. See JSJMSG.def for format.
44
+
45
+ */
46
+
47
+ MSG_DEF(JSJMSG_NOT_AN_ERROR, 0, 0, "<Error #0 is reserved>")
48
+ MSG_DEF(JSJMSG_CANT_LOAD_JSOBJECT, 1, 0, "Couldn't convert JavaScript object to an "
49
+ "instance of netscape.javascript.JSObject "
50
+ "because that class could not be loaded.")
51
+ MSG_DEF(JSJMSG_CANT_CONVERT_JS, 2, 2, "Unable to convert JavaScript value {0} to "
52
+ "Java value of type {1}")
53
+ MSG_DEF(JSJMSG_BAD_OP_JARRAY, 3, 0, "illegal operation on JavaArray prototype object")
54
+ MSG_DEF(JSJMSG_CANT_WRITE_JARRAY, 4, 1, "Attempt to write to invalid Java array element \"{0}\"")
55
+ MSG_DEF(JSJMSG_BAD_INDEX_EXPR, 5, 0, "invalid Java array index expression")
56
+ MSG_DEF(JSJMSG_BAD_JARRAY_INDEX, 6, 1, "Java array index {0} out of range")
57
+ MSG_DEF(JSJMSG_JARRAY_PROP_DEFINE, 7, 0, "Cannot define a new property in a JavaArray")
58
+ MSG_DEF(JSJMSG_JARRAY_PROP_DELETE, 8, 0, "Properties of JavaArray objects may not be deleted")
59
+ MSG_DEF(JSJMSG_JARRAY_PROP_WATCH, 9, 0, "Cannot place watchpoints on JavaArray object properties")
60
+ MSG_DEF(JSJMSG_JARRAY_PROP_EXPORT, 10, 0, "Cannot export a JavaArray object's properties")
61
+ MSG_DEF(JSJMSG_BAD_JCLASS_EXPR, 11, 0, "invalid JavaClass property expression. "
62
+ "(methods and fields of a JavaClass object can only be identified by their name)")
63
+ MSG_DEF(JSJMSG_MISSING_NAME, 12, 2, "Java class {0} has no public static field or method named \"{1}\"")
64
+ MSG_DEF(JSJMSG_MISSING_STATIC, 13, 2, "No static field named \"{0}\" in Java class {1}")
65
+ MSG_DEF(JSJMSG_JCLASS_PROP_DEFINE, 14, 0, "Cannot define a new property in a JavaClass")
66
+ MSG_DEF(JSJMSG_JCLASS_PROP_DELETE, 15, 0, "Properties of JavaClass objects may not be deleted")
67
+ MSG_DEF(JSJMSG_JCLASS_PROP_WATCH, 16, 0, "Cannot place watchpoints on JavaClass object properties")
68
+ MSG_DEF(JSJMSG_JCLASS_PROP_EXPORT, 17, 0, "Cannot export a JavaClass object's properties")
69
+ MSG_DEF(JSJMSG_BAD_OP_JCLASS, 18, 0, "illegal operation on JavaClass prototype object")
70
+ MSG_DEF(JSJMSG_BAD_OP_PROTO, 19, 0, "illegal operation on prototype object")
71
+ MSG_DEF(JSJMSG_NEED_JOBJECT_ARG, 20, 0, "getClass expects a Java object argument")
72
+ MSG_DEF(JSJMSG_PROTO_GETCLASS, 21, 0, "getClass called on prototype object")
73
+ MSG_DEF(JSJMSG_BAD_OP_JOBJECT, 22, 0, "illegal operation on JavaObject prototype object")
74
+ MSG_DEF(JSJMSG_BAD_JOBJECT_EXPR, 23, 0, "invalid JavaObject property expression. "
75
+ "(methods and field properties of a JavaObject object can only be strings)")
76
+ MSG_DEF(JSJMSG_NO_INSTANCE_NAME, 24, 2, "Java class {0} has no public field or method named \"{1}\"")
77
+ MSG_DEF(JSJMSG_NO_NAME_IN_CLASS, 25, 2, "No instance field named \"{0}\" in Java class {1}")
78
+ MSG_DEF(JSJMSG_JOBJECT_PROP_DEFINE, 26, 0, "Cannot define a new property in a JavaObject")
79
+ MSG_DEF(JSJMSG_JOBJECT_PROP_DELETE, 27, 0, "Properties of JavaObject objects may not be deleted")
80
+ MSG_DEF(JSJMSG_JOBJECT_PROP_WATCH, 28, 0, "Cannot place watchpoints on JavaObject object properties")
81
+ MSG_DEF(JSJMSG_JOBJECT_PROP_EXPORT, 29, 0, "Cannot export a JavaObject object's properties")
82
+ MSG_DEF(JSJMSG_CONVERT_TO_FUNC, 30, 0, "can't convert Java object to function")
83
+ MSG_DEF(JSJMSG_BAD_ADD_TO_PACKAGE, 31, 0, "illegal attempt to add property to JavaPackage prototype object")
84
+ MSG_DEF(JSJMSG_DONT_ADD_TO_PACKAGE, 32, 0, "You may not add properties to a JavaPackage object")
85
+ MSG_DEF(JSJMSG_MISSING_PACKAGE, 33, 1, "No Java system package with name \"{0}\" was identified "
86
+ "and no Java class with that name exists either")
87
+ MSG_DEF(JSJMSG_DOUBLE_SHIPPING, 34, 1, "Package {0} defined twice ?")
88
+ MSG_DEF(JSJMSG_BAD_PACKAGE_PREDEF, 35, 1, "Illegal predefined package definition for {0}")
89
+ MSG_DEF(JSJMSG_NULL_MEMBER_NAME, 36, 0, "illegal null member name")
90
+ MSG_DEF(JSJMSG_NULL_FUNCTION_NAME, 37, 0, "illegal null JavaScript function name")
91
+ MSG_DEF(JSJMSG_NULL_EVAL_ARG, 38, 0, "illegal null string eval argument")
92
+ MSG_DEF(JSJMSG_MULTIPLE_JTHREADS, 39, 0, "[Obsolete error message]")
93
+ MSG_DEF(JSJMSG_ABSTRACT_JCLASS, 40, 1, "Java class {0} is abstract and therefore may not be instantiated")
94
+ MSG_DEF(JSJMSG_IS_INTERFACE, 41, 1, "{0} is a Java interface and therefore may not be instantiated")
95
+ MSG_DEF(JSJMSG_NOT_PUBLIC, 42, 1, "Java class {0} is not public and therefore may not be instantiated")
96
+ MSG_DEF(JSJMSG_NO_CONSTRUCTORS, 43, 1, "No public constructors defined for Java class {0}")
97
+ MSG_DEF(JSJMSG_BAD_PROTO_ASSIGNMENT,44, 0, "Only objects can be assigned as the value of the __proto__ property")
98
+ MSG_DEF(JSJMSG_NEED_JCLASS_ARG, 45, 0, "The JavaClass constructor expects an instance of java.lang.Class as an argument")
@@ -0,0 +1,1377 @@
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
+ /* This file is part of the Java-vendor-neutral implementation of LiveConnect
41
+ *
42
+ * It contains the implementation of the native methods for the
43
+ * netscape.javascript.JSObject Java class, which are used for calling into
44
+ * JavaScript from Java. It also contains the code that handles propagation
45
+ * of exceptions both into and out of Java.
46
+ *
47
+ */
48
+
49
+ #include <stdlib.h>
50
+ #include <string.h>
51
+
52
+ #include "jsj_private.h"
53
+ #include "jsjava.h"
54
+
55
+ #include "jscntxt.h" /* For js_ReportErrorAgain().
56
+ TODO - get rid of private header */
57
+
58
+ #include "netscape_javascript_JSObject.h" /* javah-generated headers */
59
+
60
+
61
+ /* A captured JavaScript error, created when JS_ReportError() is called while
62
+ running JavaScript code that is itself called from Java. */
63
+ struct CapturedJSError {
64
+ char * message;
65
+ JSErrorReport report; /* Line # of error, etc. */
66
+ jthrowable java_exception; /* Java exception, error, or null */
67
+ CapturedJSError * next; /* Next oldest captured JS error */
68
+ };
69
+
70
+
71
+ /*********************** Reflection of JSObjects ****************************/
72
+
73
+ #ifdef PRESERVE_JSOBJECT_IDENTITY
74
+ /*
75
+ * This is a hash table that maps from JS objects to Java objects.
76
+ * It is used to ensure that the same Java object results when a JS
77
+ * object is reflected more than once, so that Java object equality
78
+ * tests work in the expected manner.
79
+ *
80
+ * The entry keys are JSObject pointers and the entry values are Java objects
81
+ * (of type jobject). When the corresponding Java instance is finalized,
82
+ * the entry is removed from the table, and a JavaScript GC root for the JS
83
+ * object is removed.
84
+ *
85
+ * This code is disabled because cycles in GC roots between the two systems
86
+ * cause every reflected JS object to become uncollectable. This can only
87
+ * be solved by using weak links, a feature not available in JDK1.1.
88
+ */
89
+ static JSHashTable *js_obj_reflections = NULL;
90
+
91
+ #ifdef JSJ_THREADSAFE
92
+ /*
93
+ * Used to protect the js_obj_reflections hashtable from simultaneous
94
+ * read/write or * write/write access.
95
+ */
96
+ static PRMonitor *js_obj_reflections_monitor = NULL;
97
+ #endif /* JSJ_THREADSAFE */
98
+ #endif /* PRESERVE_JSOBJECT_IDENTITY */
99
+
100
+ JSBool
101
+ jsj_init_js_obj_reflections_table()
102
+ {
103
+ #ifdef PRESERVE_JSOBJECT_IDENTITY
104
+ if(js_obj_reflections != NULL)
105
+ {
106
+ return JS_TRUE;
107
+ }
108
+ js_obj_reflections = JS_NewHashTable(128, NULL, JS_CompareValues,
109
+ JS_CompareValues, NULL, NULL);
110
+ if (!js_obj_reflections)
111
+ return JS_FALSE;
112
+
113
+ #ifdef JSJ_THREADSAFE
114
+ js_obj_reflections_monitor = PR_NewMonitor();
115
+ if (!js_obj_reflections_monitor) {
116
+ JS_HashTableDestroy(js_obj_reflections);
117
+ return JS_FALSE;
118
+ }
119
+ #endif /* JSJ_THREADSAFE */
120
+ #endif /* PRESERVE_JSOBJECT_IDENTITY */
121
+
122
+ return JS_TRUE;
123
+ }
124
+
125
+ /*
126
+ * Return a Java object that "wraps" a given JS object by storing the address
127
+ * of the JS object in a private field of the Java object. A hash table is
128
+ * used to ensure that the mapping of JS objects to Java objects is done on
129
+ * one-to-one basis.
130
+ *
131
+ * If an error occurs, returns NULL and reports an error.
132
+ */
133
+
134
+ #ifdef PRESERVE_JSOBJECT_IDENTITY
135
+
136
+ jobject
137
+ jsj_WrapJSObject(JSContext *cx, JNIEnv *jEnv, JSObject *js_obj)
138
+ {
139
+ jobject java_wrapper_obj;
140
+ JSHashEntry *he, **hep;
141
+
142
+ java_wrapper_obj = NULL;
143
+
144
+ #ifdef JSJ_THREADSAFE
145
+ PR_EnterMonitor(js_obj_reflections_monitor);
146
+ #endif
147
+
148
+ /* First, look in the hash table for an existing reflection of the same
149
+ JavaScript object. If one is found, return it. */
150
+ hep = JS_HashTableRawLookup(js_obj_reflections, (JSHashNumber)js_obj, js_obj);
151
+
152
+ /* If the same JSObject is reflected into Java more than once then we should
153
+ return the same Java object, both for efficiency and so that the '=='
154
+ operator works as expected in Java when comparing two JSObjects.
155
+ However, it is not possible to hold a reference to a Java object without
156
+ inhibiting GC of that object, at least not in a portable way, i.e.
157
+ a weak reference. So, for now, JSObject identity is broken. */
158
+
159
+ he = *hep;
160
+ if (he) {
161
+ java_wrapper_obj = (jobject)he->value;
162
+ JS_ASSERT(java_wrapper_obj);
163
+ if (java_wrapper_obj)
164
+ goto done;
165
+ }
166
+
167
+ /* No existing reflection found, so create a new Java object that wraps
168
+ the JavaScript object by storing its address in a private integer field. */
169
+ #ifndef OJI
170
+ java_wrapper_obj =
171
+ (*jEnv)->NewObject(jEnv, njJSObject, njJSObject_JSObject, (jint)js_obj);
172
+ #else
173
+ if (JSJ_callbacks && JSJ_callbacks->get_java_wrapper != NULL) {
174
+ java_wrapper_obj = JSJ_callbacks->get_java_wrapper(jEnv, (jint)handle);
175
+ }
176
+ #endif /*! OJI */
177
+
178
+ if (!java_wrapper_obj) {
179
+ jsj_UnexpectedJavaError(cx, jEnv, "Couldn't create new instance of "
180
+ "netscape.javascript.JSObject");
181
+ goto done;
182
+ }
183
+
184
+ /* Add the new reflection to the hash table. */
185
+ he = JS_HashTableRawAdd(js_obj_reflections, hep, (JSHashNumber)js_obj,
186
+ js_obj, java_wrapper_obj);
187
+ if (he) {
188
+ /* Tell the JavaScript GC about this object since the only reference
189
+ to it may be in Java-land. */
190
+ JS_AddNamedRoot(cx, (void*)&he->key, "&he->key");
191
+ } else {
192
+ JS_ReportOutOfMemory(cx);
193
+ /* No need to delete java_wrapper_obj because Java GC will reclaim it */
194
+ java_wrapper_obj = NULL;
195
+ }
196
+
197
+ /*
198
+ * Release local reference to wrapper object, since some JVMs seem reticent
199
+ * about collecting it otherwise.
200
+ */
201
+ /* FIXME -- beard: this seems to make calls into Java with JSObject's fail. */
202
+ /* We should really be creating a global ref if we are putting it in a hash table. */
203
+ /* (*jEnv)->DeleteLocalRef(jEnv, java_wrapper_obj); */
204
+
205
+ done:
206
+ #ifdef JSJ_THREADSAFE
207
+ PR_ExitMonitor(js_obj_reflections_monitor);
208
+ #endif
209
+
210
+ return java_wrapper_obj;
211
+ }
212
+
213
+ /*
214
+ * Remove the mapping of a JS object from the hash table that maps JS objects
215
+ * to Java objects. This is called from the finalizer of an instance of
216
+ * netscape.javascript.JSObject.
217
+ */
218
+ JSBool
219
+ jsj_remove_js_obj_reflection_from_hashtable(JSContext *cx, JSObject *js_obj)
220
+ {
221
+ JSHashEntry *he, **hep;
222
+ JSBool success = JS_FALSE;
223
+
224
+ #ifdef JSJ_THREADSAFE
225
+ PR_EnterMonitor(js_obj_reflections_monitor);
226
+ #endif
227
+
228
+ /* Get the hash-table entry for this wrapper object */
229
+ hep = JS_HashTableRawLookup(js_obj_reflections, (JSHashNumber)js_obj, js_obj);
230
+ he = *hep;
231
+
232
+ JS_ASSERT(he);
233
+ if (he) {
234
+ /* Tell the JS GC that Java no longer keeps a reference to this
235
+ JS object. */
236
+ success = JS_RemoveRoot(cx, (void *)&he->key);
237
+
238
+ JS_HashTableRawRemove(js_obj_reflections, hep, he);
239
+ }
240
+
241
+ #ifdef JSJ_THREADSAFE
242
+ PR_ExitMonitor(js_obj_reflections_monitor);
243
+ #endif
244
+
245
+ return success;
246
+ }
247
+
248
+ #else /* !PRESERVE_JSOBJECT_IDENTITY */
249
+
250
+
251
+ /*
252
+ * The caller must call DeleteLocalRef() on the returned object when no more
253
+ * references remain.
254
+ */
255
+ jobject
256
+ jsj_WrapJSObject(JSContext *cx, JNIEnv *jEnv, JSObject *js_obj)
257
+ {
258
+ jobject java_wrapper_obj;
259
+ JSObjectHandle *handle;
260
+
261
+ /* Create a tiny stub object to act as the GC root that points to the
262
+ JSObject from its netscape.javascript.JSObject counterpart. */
263
+ handle = (JSObjectHandle*)JS_malloc(cx, sizeof(JSObjectHandle));
264
+ if (!handle)
265
+ return NULL;
266
+ handle->js_obj = js_obj;
267
+ handle->rt = JS_GetRuntime(cx);
268
+
269
+ /* Create a new Java object that wraps the JavaScript object by storing its
270
+ address in a private integer field. */
271
+ #ifndef OJI
272
+ java_wrapper_obj =
273
+ (*jEnv)->NewObject(jEnv, njJSObject, njJSObject_JSObject, (lcjsobject)handle);
274
+ #else
275
+ if (JSJ_callbacks && JSJ_callbacks->get_java_wrapper != NULL) {
276
+ java_wrapper_obj = JSJ_callbacks->get_java_wrapper(jEnv, (lcjsobject)handle);
277
+ } else {
278
+ java_wrapper_obj = NULL;
279
+ }
280
+ #endif /*! OJI */
281
+ if (!java_wrapper_obj) {
282
+ jsj_UnexpectedJavaError(cx, jEnv, "Couldn't create new instance of "
283
+ "netscape.javascript.JSObject");
284
+ JS_free(cx, handle);
285
+ goto done;
286
+ }
287
+
288
+ JS_AddNamedRoot(cx, &handle->js_obj, "&handle->js_obj");
289
+
290
+ done:
291
+
292
+ return java_wrapper_obj;
293
+ }
294
+
295
+ JSObject *
296
+ jsj_UnwrapJSObjectWrapper(JNIEnv *jEnv, jobject java_wrapper_obj)
297
+ {
298
+ JSObjectHandle *handle;
299
+
300
+ #ifndef OJI
301
+ #if JS_BYTES_PER_LONG == 8 || JS_BYTES_PER_WORD == 8
302
+ handle = (JSObjectHandle*)((*jEnv)->GetLongField(jEnv, java_wrapper_obj, njJSObject_long_internal));
303
+ #else
304
+ handle = (JSObjectHandle*)((*jEnv)->GetIntField(jEnv, java_wrapper_obj, njJSObject_internal));
305
+ #endif
306
+ #else
307
+ /* Unwrapping this wrapper requires knowledge of the structure of the object. This is privileged
308
+ information that only the object implementor can know. In this case the object implementor
309
+ is the java plugin (such as the Sun plugin class sun.plugin.javascript.navig5.JSObject.
310
+ Since the plugin owns this structure, we defer to it to unwrap the object. If the plugin
311
+ does not implement this callback, then it should be set to null. In that case we try something
312
+ that works with Sun's plugin assuming that it has not yet been implemented yet. This 'else'
313
+ case should be removed as soon as the unwrap function is supported by the Sun JPI. */
314
+
315
+ if (JSJ_callbacks && JSJ_callbacks->unwrap_java_wrapper != NULL) {
316
+ handle = (JSObjectHandle*)JSJ_callbacks->unwrap_java_wrapper(jEnv, java_wrapper_obj);
317
+ }
318
+ else {
319
+ jclass cid = (*jEnv)->GetObjectClass(jEnv, java_wrapper_obj);
320
+ #if JS_BYTES_PER_LONG == 8 || JS_BYTES_PER_WORD == 8
321
+ jfieldID fid = (*jEnv)->GetFieldID(jEnv, cid, "nativeJSObject", "J");
322
+ handle = (JSObjectHandle*)((*jEnv)->GetLongField(jEnv, java_wrapper_obj, fid));
323
+ #else
324
+ jfieldID fid = (*jEnv)->GetFieldID(jEnv, cid, "nativeJSObject", "I");
325
+ handle = (JSObjectHandle*)((*jEnv)->GetIntField(jEnv, java_wrapper_obj, fid));
326
+ #endif
327
+ }
328
+ #endif
329
+
330
+ /* JNI returns a NULL handle for a Java 'null' */
331
+ if (!handle)
332
+ return NULL;
333
+
334
+ return handle->js_obj;
335
+
336
+ }
337
+
338
+ #endif /* !PRESERVE_JSOBJECT_IDENTITY */
339
+
340
+ /*************** Handling of Java exceptions in JavaScript ******************/
341
+
342
+ /*
343
+ * Free up a JavaScript error that has been stored by the
344
+ * capture_js_error_reports_for_java() function.
345
+ */
346
+ static CapturedJSError *
347
+ destroy_saved_js_error(JNIEnv *jEnv, CapturedJSError *error)
348
+ {
349
+ CapturedJSError *next_error;
350
+ if (!error)
351
+ return NULL;
352
+ next_error = error->next;
353
+
354
+ if (error->java_exception)
355
+ (*jEnv)->DeleteGlobalRef(jEnv, error->java_exception);
356
+ if (error->message)
357
+ free((char*)error->message);
358
+ if (error->report.filename)
359
+ free((char*)error->report.filename);
360
+ if (error->report.linebuf)
361
+ free((char*)error->report.linebuf);
362
+ free(error);
363
+
364
+ return next_error;
365
+ }
366
+
367
+ /*
368
+ * Capture a JS error that has been reported using JS_ReportError() by JS code
369
+ * that has itself been called from Java. A copy of the JS error data is made
370
+ * and hung off the JSJ environment. When JS completes and returns to its Java
371
+ * caller, this data is used to synthesize an instance of
372
+ * netscape.javascript.JSException. If the resulting JSException is not caught
373
+ * within Java, it may be propagated up the stack beyond the Java caller back
374
+ * into JavaScript, in which case the error will be re-reported as a JavaScript
375
+ * error.
376
+ */
377
+ static void
378
+ capture_js_error_reports_for_java(JSContext *cx, const char *message,
379
+ JSErrorReport *report)
380
+ {
381
+ CapturedJSError *new_error;
382
+ JSJavaThreadState *jsj_env;
383
+ jthrowable java_exception, tmp_exception;
384
+ JNIEnv *jEnv;
385
+
386
+ /* Warnings are not propagated as Java exceptions - they are simply
387
+ ignored. Ditto for exceptions that are duplicated in the form
388
+ of error reports. */
389
+ if (report && (report->flags & (JSREPORT_WARNING | JSREPORT_EXCEPTION)))
390
+ return;
391
+
392
+ /* Create an empty struct to hold the saved JS error state */
393
+ new_error = malloc(sizeof(CapturedJSError));
394
+ if (!new_error)
395
+ goto out_of_memory;
396
+ memset(new_error, 0, sizeof(CapturedJSError));
397
+
398
+ /* Copy all the error info out of the original report into a private copy */
399
+ if (message) {
400
+ new_error->message = strdup(message);
401
+ if (!new_error->message) {
402
+ free(new_error);
403
+ return;
404
+ }
405
+ }
406
+ if (report) {
407
+ new_error->report.lineno = report->lineno;
408
+
409
+ if (report->filename) {
410
+ new_error->report.filename = strdup(report->filename);
411
+ if (!new_error->report.filename)
412
+ goto out_of_memory;
413
+ }
414
+
415
+ if (report->linebuf) {
416
+ new_error->report.linebuf = strdup(report->linebuf);
417
+ if (!new_error->report.linebuf)
418
+ goto out_of_memory;
419
+ new_error->report.tokenptr =
420
+ new_error->report.linebuf + (report->tokenptr - report->linebuf);
421
+ }
422
+ }
423
+
424
+ /* Get the head of the list of pending JS errors */
425
+ jsj_env = jsj_EnterJava(cx, &jEnv);
426
+ if (!jsj_env)
427
+ goto abort;
428
+
429
+ /* If there's a Java exception associated with this error, save it too. */
430
+ java_exception = (*jEnv)->ExceptionOccurred(jEnv);
431
+ if (java_exception) {
432
+ (*jEnv)->ExceptionClear(jEnv);
433
+ tmp_exception = java_exception; /* Make a copy */
434
+ java_exception = (*jEnv)->NewGlobalRef(jEnv, java_exception);
435
+ new_error->java_exception = java_exception;
436
+ (*jEnv)->DeleteLocalRef(jEnv, tmp_exception);
437
+ }
438
+
439
+ /* Push this error onto the list of pending JS errors */
440
+ new_error->next = jsj_env->pending_js_errors;
441
+ jsj_env->pending_js_errors = new_error;
442
+ jsj_ExitJava(jsj_env);
443
+ return;
444
+
445
+ abort:
446
+ out_of_memory:
447
+ /* No recovery action possible */
448
+ JS_ASSERT(0);
449
+ destroy_saved_js_error(jEnv, new_error);
450
+ return;
451
+ }
452
+
453
+ void
454
+ jsj_ClearPendingJSErrors(JSJavaThreadState *jsj_env)
455
+ {
456
+ while (jsj_env->pending_js_errors)
457
+ jsj_env->pending_js_errors = destroy_saved_js_error(jsj_env->jEnv, jsj_env->pending_js_errors);
458
+ }
459
+
460
+ /*
461
+ * This is called upon returning from JS back into Java. Any JS errors
462
+ * reported during that time will be converted into Java exceptions. It's
463
+ * possible that a JS error was actually triggered by Java at some point, in
464
+ * which case the original Java exception is thrown.
465
+ */
466
+ static void
467
+ throw_any_pending_js_error_as_a_java_exception(JSJavaThreadState *jsj_env)
468
+ {
469
+ CapturedJSError *error;
470
+ JNIEnv *jEnv;
471
+ jstring message_jstr, linebuf_jstr, filename_jstr;
472
+ jint index, lineno;
473
+ JSErrorReport *report;
474
+ JSContext *cx;
475
+ jsval pending_exception;
476
+ jobject java_obj;
477
+ int dummy_cost;
478
+ JSBool is_local_refp;
479
+ JSType primitive_type;
480
+ jthrowable java_exception;
481
+
482
+ message_jstr = linebuf_jstr = filename_jstr = java_exception = NULL;
483
+
484
+ /* Get the Java JNI environment */
485
+ jEnv = jsj_env->jEnv;
486
+
487
+ cx = jsj_env->cx;
488
+ /* Get the pending JS exception if it exists */
489
+ if (cx&&JS_IsExceptionPending(cx)) {
490
+ if (!JS_GetPendingException(cx, &pending_exception))
491
+ goto out_of_memory;
492
+
493
+ /* Find out the JSTYPE of this jsval. */
494
+ primitive_type = JS_TypeOfValue(cx, pending_exception);
495
+
496
+ /* Convert jsval exception to a java object and then use it to
497
+ create an instance of JSException. */
498
+ if (!jsj_ConvertJSValueToJavaObject(cx, jEnv,
499
+ pending_exception,
500
+ jsj_get_jlObject_descriptor(cx, jEnv),
501
+ &dummy_cost, &java_obj,
502
+ &is_local_refp))
503
+ goto done;
504
+
505
+ java_exception = (*jEnv)->NewObject(jEnv, njJSException,
506
+ njJSException_JSException_wrap,
507
+ primitive_type, java_obj);
508
+ if (is_local_refp)
509
+ (*jEnv)->DeleteLocalRef(jEnv, java_obj);
510
+ if (!java_exception)
511
+ goto out_of_memory;
512
+
513
+ /* Throw the newly-created JSException */
514
+ if ((*jEnv)->Throw(jEnv, java_exception) < 0) {
515
+ JS_ASSERT(0);
516
+ jsj_LogError("Couldn't throw JSException\n");
517
+ goto done;
518
+ }
519
+ JS_ClearPendingException(cx);
520
+ return;
521
+ }
522
+ if (!jsj_env->pending_js_errors) {
523
+ #ifdef DEBUG
524
+ /* Any exception should be cleared as soon as it's detected, so there
525
+ shouldn't be any pending. */
526
+ if ((*jEnv)->ExceptionOccurred(jEnv)) {
527
+ /* A Java exception occurred, but nobody in JS-land noticed. */
528
+ JS_ASSERT(0);
529
+ (*jEnv)->ExceptionClear(jEnv);
530
+ }
531
+ #endif
532
+ return;
533
+ }
534
+
535
+ /* Get the deepest (oldest) saved JS error */
536
+ /* XXX - What's the right thing to do about newer errors ?
537
+ For now we just throw them away */
538
+ error = jsj_env->pending_js_errors;
539
+ while (error->next)
540
+ error = error->next;
541
+
542
+ /*
543
+ * If the JS error was originally the result of a Java exception, rethrow
544
+ * the original exception.
545
+ */
546
+ if (error->java_exception) {
547
+ (*jEnv)->Throw(jEnv, error->java_exception);
548
+ goto done;
549
+ }
550
+
551
+ /* Propagate any JS errors that did not originate as Java exceptions into
552
+ Java as an instance of netscape.javascript.JSException */
553
+
554
+ /* First, marshall the arguments to the JSException constructor */
555
+ message_jstr = NULL;
556
+ if (error->message) {
557
+ message_jstr = (*jEnv)->NewStringUTF(jEnv, error->message);
558
+ if (!message_jstr)
559
+ goto out_of_memory;
560
+ }
561
+
562
+ report = &error->report;
563
+
564
+ filename_jstr = NULL;
565
+ if (report->filename) {
566
+ filename_jstr = (*jEnv)->NewStringUTF(jEnv, report->filename);
567
+ if (!filename_jstr)
568
+ goto out_of_memory;
569
+ }
570
+
571
+ linebuf_jstr = NULL;
572
+ if (report->linebuf) {
573
+ linebuf_jstr = (*jEnv)->NewStringUTF(jEnv, report->linebuf);
574
+ if (!linebuf_jstr)
575
+ goto out_of_memory;
576
+ }
577
+
578
+ lineno = report->lineno;
579
+ index = report->linebuf ? report->tokenptr - report->linebuf : 0;
580
+
581
+ /* Call the JSException constructor */
582
+ java_exception = (*jEnv)->NewObject(jEnv, njJSException, njJSException_JSException,
583
+ message_jstr, filename_jstr, lineno, linebuf_jstr, index);
584
+ if (!java_exception)
585
+ goto out_of_memory;
586
+
587
+ /* Throw the newly-created JSException */
588
+ if ((*jEnv)->Throw(jEnv, java_exception) < 0) {
589
+ JS_ASSERT(0);
590
+ jsj_UnexpectedJavaError(cx, jEnv, "Couldn't throw JSException\n");
591
+ }
592
+ goto done;
593
+
594
+ out_of_memory:
595
+ /* No recovery possible */
596
+ JS_ASSERT(0);
597
+ jsj_LogError("Out of memory while attempting to throw JSException\n");
598
+
599
+ done:
600
+ jsj_ClearPendingJSErrors(jsj_env);
601
+ /*
602
+ * Release local references to Java objects, since some JVMs seem reticent
603
+ * about collecting them otherwise.
604
+ */
605
+ if (message_jstr)
606
+ (*jEnv)->DeleteLocalRef(jEnv, message_jstr);
607
+ if (filename_jstr)
608
+ (*jEnv)->DeleteLocalRef(jEnv, filename_jstr);
609
+ if (linebuf_jstr)
610
+ (*jEnv)->DeleteLocalRef(jEnv, linebuf_jstr);
611
+ if (java_exception)
612
+ (*jEnv)->DeleteLocalRef(jEnv, java_exception);
613
+ }
614
+
615
+ /*
616
+ * This function is called up returning from Java back into JS as a result of
617
+ * a thrown netscape.javascript.JSException, which itself must have been caused
618
+ * by a JS error when Java called into JS. The original JS error is
619
+ * reconstituted from the JSException and re-reported as a JS error.
620
+ *
621
+ * Returns JS_FALSE if an internal error occurs, JS_TRUE otherwise.
622
+ */
623
+ JSBool
624
+ jsj_ReportUncaughtJSException(JSContext *cx, JNIEnv *jEnv, jthrowable java_exception)
625
+ {
626
+ JSBool success;
627
+ JSErrorReport report;
628
+ const char *linebuf, *filename, *message, *tokenptr;
629
+ jint lineno, token_index;
630
+ jstring linebuf_jstr, filename_jstr, message_jstr;
631
+
632
+ /* Initialize everything to NULL */
633
+ memset(&report, 0, sizeof(JSErrorReport));
634
+ success = JS_FALSE;
635
+ filename_jstr = linebuf_jstr = message_jstr = NULL;
636
+ filename = message = linebuf = tokenptr = NULL;
637
+
638
+ lineno = (*jEnv)->GetIntField(jEnv, java_exception, njJSException_lineno);
639
+ report.lineno = lineno;
640
+
641
+ filename_jstr = (*jEnv)->GetObjectField(jEnv, java_exception, njJSException_filename);
642
+ if ((*jEnv)->ExceptionOccurred(jEnv)) {
643
+ jsj_UnexpectedJavaError(cx, jEnv, "Unable to access filename field of a JSException");
644
+ goto done;
645
+ }
646
+ if (filename_jstr)
647
+ filename = (*jEnv)->GetStringUTFChars(jEnv, filename_jstr, 0);
648
+ report.filename = filename;
649
+
650
+ linebuf_jstr = (*jEnv)->GetObjectField(jEnv, java_exception, njJSException_source);
651
+ if ((*jEnv)->ExceptionOccurred(jEnv)) {
652
+ jsj_UnexpectedJavaError(cx, jEnv, "Unable to access source field of a JSException");
653
+ goto done;
654
+ }
655
+ if (linebuf_jstr)
656
+ linebuf = (*jEnv)->GetStringUTFChars(jEnv, linebuf_jstr, 0);
657
+ report.linebuf = linebuf;
658
+
659
+ token_index = (*jEnv)->GetIntField(jEnv, java_exception, njJSException_lineno);
660
+ report.tokenptr = linebuf + token_index;
661
+
662
+ message_jstr = (*jEnv)->CallObjectMethod(jEnv, java_exception, jlThrowable_getMessage);
663
+ if ((*jEnv)->ExceptionOccurred(jEnv)) {
664
+ jsj_UnexpectedJavaError(cx, jEnv, "Unable to access message of a JSException");
665
+ goto done;
666
+ }
667
+ if (message_jstr)
668
+ message = (*jEnv)->GetStringUTFChars(jEnv, message_jstr, 0);
669
+
670
+ js_ReportErrorAgain(cx, message, &report);
671
+
672
+ success = JS_TRUE;
673
+
674
+ done:
675
+
676
+ if (filename_jstr && filename)
677
+ (*jEnv)->ReleaseStringUTFChars(jEnv, filename_jstr, filename);
678
+ if (linebuf_jstr && linebuf)
679
+ (*jEnv)->ReleaseStringUTFChars(jEnv, linebuf_jstr, linebuf);
680
+ if (message_jstr && message)
681
+ (*jEnv)->ReleaseStringUTFChars(jEnv, message_jstr, message);
682
+ return success;
683
+ }
684
+
685
+
686
+
687
+ /*************** Utilities for calling JavaScript from Java *****************/
688
+
689
+ /*
690
+ * This routine is called just prior to invoking any JS API function from
691
+ * Java. It performs a common set of chores, such as obtaining the LiveConnect
692
+ * state for the invoking Java thread and determining the JSContext to be
693
+ * used for this thread.
694
+ *
695
+ * Returns NULL on failure.
696
+ */
697
+
698
+
699
+ JSJavaThreadState *
700
+ jsj_enter_js(JNIEnv *jEnv, void* applet_obj, jobject java_wrapper_obj,
701
+ JSContext **cxp, JSObject **js_objp, JSErrorReporter *old_error_reporterp,
702
+ void **pNSIPrincipaArray, int numPrincipals, void *pNSISecurityContext)
703
+ {
704
+ JSContext *cx;
705
+ char *err_msg;
706
+ JSObject *js_obj;
707
+ JSJavaThreadState *jsj_env;
708
+
709
+ cx = NULL;
710
+ err_msg = NULL;
711
+
712
+ /* Invoke callback, presumably used to implement concurrency constraints */
713
+ if (JSJ_callbacks && JSJ_callbacks->enter_js_from_java) {
714
+ #ifdef OJI
715
+ if (!JSJ_callbacks->enter_js_from_java(jEnv, &err_msg, pNSIPrincipaArray, numPrincipals, pNSISecurityContext,applet_obj))
716
+ #else
717
+ if (!JSJ_callbacks->enter_js_from_java(jEnv, &err_msg))
718
+ #endif
719
+ goto entry_failure;
720
+ }
721
+
722
+ /* Check the JSObject pointer in the wrapper object. */
723
+ if (js_objp) {
724
+
725
+ #ifdef PRESERVE_JSOBJECT_IDENTITY
726
+ #if JS_BYTES_PER_LONG == 8
727
+ js_obj = (JSObject *)((*jEnv)->GetLongField(jEnv, java_wrapper_obj, njJSObject_long_internal));
728
+ #else
729
+ js_obj = (JSObject *)((*jEnv)->GetIntField(jEnv, java_wrapper_obj, njJSObject_internal));
730
+ #endif
731
+ #else /* !PRESERVE_JSOBJECT_IDENTITY */
732
+ js_obj = jsj_UnwrapJSObjectWrapper(jEnv, java_wrapper_obj);
733
+ #endif /* PRESERVE_JSOBJECT_IDENTITY */
734
+
735
+ JS_ASSERT(js_obj);
736
+ if (!js_obj)
737
+ goto error;
738
+ *js_objp = js_obj;
739
+ }
740
+
741
+ /* Get the per-thread state corresponding to the current Java thread */
742
+ jsj_env = jsj_MapJavaThreadToJSJavaThreadState(jEnv, &err_msg);
743
+ if (!jsj_env)
744
+ goto error;
745
+
746
+ /* Get the JSContext that we're supposed to use for this Java thread */
747
+ cx = jsj_env->cx;
748
+ if (!cx) {
749
+ /* We called spontaneously into JS from Java, rather than from JS into
750
+ Java and back into JS. Invoke a callback to obtain/create a
751
+ JSContext for us to use. */
752
+ if (JSJ_callbacks && JSJ_callbacks->map_jsj_thread_to_js_context) {
753
+ #ifdef OJI
754
+ cx = JSJ_callbacks->map_jsj_thread_to_js_context(jsj_env,
755
+ applet_obj,
756
+ jEnv, &err_msg);
757
+ #else
758
+ cx = JSJ_callbacks->map_jsj_thread_to_js_context(jsj_env,
759
+ jEnv, &err_msg);
760
+ #endif
761
+ if (!cx)
762
+ goto error;
763
+ } else {
764
+ err_msg = JS_smprintf("Unable to find/create JavaScript execution "
765
+ "context for JNI thread 0x%08x", jEnv);
766
+ goto error;
767
+ }
768
+ }
769
+ *cxp = cx;
770
+
771
+ /*
772
+ * Capture all JS error reports so that they can be thrown into the Java
773
+ * caller as an instance of netscape.javascript.JSException.
774
+ */
775
+ *old_error_reporterp =
776
+ JS_SetErrorReporter(cx, capture_js_error_reports_for_java);
777
+
778
+ #ifdef JSJ_THREADSAFE
779
+ JS_BeginRequest(cx);
780
+ #endif
781
+
782
+ return jsj_env;
783
+
784
+ error:
785
+ JS_ASSERT(!cx);
786
+ /* Invoke callback, presumably used to implement concurrency constraints */
787
+ if (JSJ_callbacks && JSJ_callbacks->exit_js)
788
+ JSJ_callbacks->exit_js(jEnv, cx);
789
+
790
+ entry_failure:
791
+ JS_ASSERT(!cx);
792
+ if (err_msg) {
793
+ jsj_LogError(err_msg);
794
+ JS_smprintf_free(err_msg);
795
+ }
796
+
797
+ return NULL;
798
+ }
799
+
800
+ /*
801
+ * This utility function is called just prior to returning into Java from JS.
802
+ */
803
+ JSBool
804
+ jsj_exit_js(JSContext *cx, JSJavaThreadState *jsj_env, JSErrorReporter original_reporter)
805
+ {
806
+ JNIEnv *jEnv;
807
+
808
+ #ifdef JSJ_THREADSAFE
809
+ JS_EndRequest(cx);
810
+ #endif
811
+
812
+ /* Restore the JS error reporter */
813
+ JS_SetErrorReporter(cx, original_reporter);
814
+
815
+ jEnv = jsj_env->jEnv;
816
+
817
+ #ifdef DEBUG
818
+ /* Any Java exceptions should have been noticed and reported already */
819
+ if ((*jEnv)->ExceptionOccurred(jEnv)) {
820
+ JS_ASSERT(0);
821
+ jsj_LogError("Unhandled Java exception detected");
822
+ return JS_FALSE;
823
+ }
824
+ #endif
825
+
826
+ /*
827
+ * Convert reported JS errors to JSExceptions, unless the errors were
828
+ * themselves the result of Java exceptions, in which case the original
829
+ * Java exception is simply propagated.
830
+ */
831
+ throw_any_pending_js_error_as_a_java_exception(jsj_env);
832
+
833
+ /* Invoke callback, presumably used to implement concurrency constraints */
834
+ if (JSJ_callbacks && JSJ_callbacks->exit_js)
835
+ JSJ_callbacks->exit_js(jEnv, cx);
836
+
837
+ return JS_TRUE;
838
+ }
839
+
840
+
841
+ /* Get the JavaClassDescriptor that corresponds to java.lang.Object */
842
+ JavaClassDescriptor *
843
+ jsj_get_jlObject_descriptor(JSContext *cx, JNIEnv *jEnv)
844
+ {
845
+ /* The JavaClassDescriptor for java.lang.Object */
846
+ static JavaClassDescriptor *jlObject_descriptor = NULL;
847
+
848
+ if (!jlObject_descriptor)
849
+ jlObject_descriptor = jsj_GetJavaClassDescriptor(cx, jEnv, jlObject);
850
+ return jlObject_descriptor;
851
+ }
852
+
853
+ /****************** Implementation of methods of JSObject *******************/
854
+
855
+ /*
856
+ * Class: netscape_javascript_JSObject
857
+ * Method: initClass
858
+ * Signature: ()V
859
+ */
860
+ JNIEXPORT void JNICALL
861
+ Java_netscape_javascript_JSObject_initClass(JNIEnv *jEnv, jclass java_class)
862
+ {
863
+ jsj_init_js_obj_reflections_table();
864
+ }
865
+
866
+ /*
867
+ * Class: netscape_javascript_JSObject
868
+ * Method: getMember
869
+ * Signature: (Ljava/lang/String;)Ljava/lang/Object;
870
+ */
871
+ JNIEXPORT jobject JNICALL
872
+ Java_netscape_javascript_JSObject_getMember(JNIEnv *jEnv,
873
+ jobject java_wrapper_obj,
874
+ jstring property_name_jstr)
875
+ {
876
+ JSContext *cx = NULL;
877
+ JSObject *js_obj;
878
+ jsval js_val;
879
+ int dummy_cost;
880
+ JSBool dummy_bool;
881
+ const jchar *property_name_ucs2;
882
+ jsize property_name_len;
883
+ JSErrorReporter saved_reporter;
884
+ jobject member;
885
+ jboolean is_copy;
886
+ JSJavaThreadState *jsj_env;
887
+
888
+ jsj_env = jsj_enter_js(jEnv, NULL, java_wrapper_obj, &cx, &js_obj, &saved_reporter, NULL, 0, NULL);
889
+ if (!jsj_env)
890
+ return NULL;
891
+
892
+ property_name_ucs2 = NULL;
893
+ if (!property_name_jstr) {
894
+ JS_ReportErrorNumber(cx, jsj_GetErrorMessage, NULL,
895
+ JSJMSG_NULL_MEMBER_NAME);
896
+ member = NULL;
897
+ goto done;
898
+ }
899
+
900
+ /* Get the Unicode string for the JS property name */
901
+ property_name_ucs2 = (*jEnv)->GetStringChars(jEnv, property_name_jstr, &is_copy);
902
+ if (!property_name_ucs2) {
903
+ JS_ASSERT(0);
904
+ goto done;
905
+ }
906
+ property_name_len = (*jEnv)->GetStringLength(jEnv, property_name_jstr);
907
+
908
+ if (!JS_GetUCProperty(cx, js_obj, property_name_ucs2, property_name_len, &js_val))
909
+ goto done;
910
+
911
+ jsj_ConvertJSValueToJavaObject(cx, jEnv, js_val,
912
+ jsj_get_jlObject_descriptor(cx, jEnv),
913
+ &dummy_cost, &member, &dummy_bool);
914
+
915
+ done:
916
+ if (property_name_ucs2)
917
+ (*jEnv)->ReleaseStringChars(jEnv, property_name_jstr, property_name_ucs2);
918
+ if (!jsj_exit_js(cx, jsj_env, saved_reporter))
919
+ return NULL;
920
+
921
+ return member;
922
+ }
923
+
924
+ /*
925
+ * Class: netscape_javascript_JSObject
926
+ * Method: getSlot
927
+ * Signature: (I)Ljava/lang/Object;
928
+ */
929
+ JNIEXPORT jobject JNICALL
930
+ Java_netscape_javascript_JSObject_getSlot(JNIEnv *jEnv,
931
+ jobject java_wrapper_obj,
932
+ jint slot)
933
+ {
934
+ JSContext *cx = NULL;
935
+ JSObject *js_obj;
936
+ jsval js_val;
937
+ int dummy_cost;
938
+ JSBool dummy_bool;
939
+ JSErrorReporter saved_reporter;
940
+ jobject member;
941
+ JSJavaThreadState *jsj_env;
942
+
943
+ jsj_env = jsj_enter_js(jEnv, NULL, java_wrapper_obj, &cx, &js_obj, &saved_reporter, NULL, 0, NULL);
944
+ if (!jsj_env)
945
+ return NULL;
946
+
947
+
948
+ if (!JS_GetElement(cx, js_obj, slot, &js_val))
949
+ goto done;
950
+ if (!jsj_ConvertJSValueToJavaObject(cx, jEnv, js_val, jsj_get_jlObject_descriptor(cx, jEnv),
951
+ &dummy_cost, &member, &dummy_bool))
952
+ goto done;
953
+
954
+ done:
955
+ if (!jsj_exit_js(cx, jsj_env, saved_reporter))
956
+ return NULL;
957
+
958
+ return member;
959
+ }
960
+
961
+ /*
962
+ * Class: netscape_javascript_JSObject
963
+ * Method: setMember
964
+ * Signature: (Ljava/lang/String;Ljava/lang/Object;)V
965
+ */
966
+ JNIEXPORT void JNICALL
967
+ Java_netscape_javascript_JSObject_setMember(JNIEnv *jEnv,
968
+ jobject java_wrapper_obj,
969
+ jstring property_name_jstr,
970
+ jobject java_obj)
971
+ {
972
+ JSContext *cx = NULL;
973
+ JSObject *js_obj;
974
+ jsval js_val;
975
+ const jchar *property_name_ucs2;
976
+ jsize property_name_len;
977
+ JSErrorReporter saved_reporter;
978
+ jboolean is_copy;
979
+ JSJavaThreadState *jsj_env;
980
+
981
+ jsj_env = jsj_enter_js(jEnv, NULL, java_wrapper_obj, &cx, &js_obj, &saved_reporter, NULL, 0, NULL);
982
+ if (!jsj_env)
983
+ return;
984
+
985
+ property_name_ucs2 = NULL;
986
+ if (!property_name_jstr) {
987
+ JS_ReportErrorNumber(cx, jsj_GetErrorMessage, NULL,
988
+ JSJMSG_NULL_MEMBER_NAME);
989
+ goto done;
990
+ }
991
+
992
+ /* Get the Unicode string for the JS property name */
993
+ property_name_ucs2 = (*jEnv)->GetStringChars(jEnv, property_name_jstr, &is_copy);
994
+ if (!property_name_ucs2) {
995
+ JS_ASSERT(0);
996
+ goto done;
997
+ }
998
+ property_name_len = (*jEnv)->GetStringLength(jEnv, property_name_jstr);
999
+
1000
+ if (!jsj_ConvertJavaObjectToJSValue(cx, jEnv, java_obj, &js_val))
1001
+ goto done;
1002
+
1003
+ JS_SetUCProperty(cx, js_obj, property_name_ucs2, property_name_len, &js_val);
1004
+
1005
+ done:
1006
+ if (property_name_ucs2)
1007
+ (*jEnv)->ReleaseStringChars(jEnv, property_name_jstr, property_name_ucs2);
1008
+ jsj_exit_js(cx, jsj_env, saved_reporter);
1009
+ }
1010
+
1011
+ /*
1012
+ * Class: netscape_javascript_JSObject
1013
+ * Method: setSlot
1014
+ * Signature: (ILjava/lang/Object;)V
1015
+ */
1016
+ JNIEXPORT void JNICALL
1017
+ Java_netscape_javascript_JSObject_setSlot(JNIEnv *jEnv,
1018
+ jobject java_wrapper_obj,
1019
+ jint slot,
1020
+ jobject java_obj)
1021
+ {
1022
+ JSContext *cx = NULL;
1023
+ JSObject *js_obj;
1024
+ jsval js_val;
1025
+ JSErrorReporter saved_reporter;
1026
+ JSJavaThreadState *jsj_env;
1027
+
1028
+ jsj_env = jsj_enter_js(jEnv, NULL, java_wrapper_obj, &cx, &js_obj, &saved_reporter, NULL, 0, NULL);
1029
+ if (!jsj_env)
1030
+ return;
1031
+
1032
+ if (!jsj_ConvertJavaObjectToJSValue(cx, jEnv, java_obj, &js_val))
1033
+ goto done;
1034
+ JS_SetElement(cx, js_obj, slot, &js_val);
1035
+
1036
+ done:
1037
+ jsj_exit_js(cx, jsj_env, saved_reporter);
1038
+ }
1039
+
1040
+ /*
1041
+ * Class: netscape_javascript_JSObject
1042
+ * Method: removeMember
1043
+ * Signature: (Ljava/lang/String;)V
1044
+ */
1045
+ JNIEXPORT void JNICALL
1046
+ Java_netscape_javascript_JSObject_removeMember(JNIEnv *jEnv,
1047
+ jobject java_wrapper_obj,
1048
+ jstring property_name_jstr)
1049
+ {
1050
+ JSContext *cx = NULL;
1051
+ JSObject *js_obj;
1052
+ jsval js_val;
1053
+ const jchar *property_name_ucs2;
1054
+ jsize property_name_len;
1055
+ JSErrorReporter saved_reporter;
1056
+ jboolean is_copy;
1057
+ JSJavaThreadState *jsj_env;
1058
+
1059
+ jsj_env = jsj_enter_js(jEnv, NULL, java_wrapper_obj, &cx, &js_obj, &saved_reporter, NULL, 0, NULL);
1060
+ if (!jsj_env)
1061
+ return;
1062
+
1063
+ if (!property_name_jstr) {
1064
+ JS_ReportErrorNumber(cx, jsj_GetErrorMessage, NULL,
1065
+ JSJMSG_NULL_MEMBER_NAME);
1066
+ goto done;
1067
+ }
1068
+ /* Get the Unicode string for the JS property name */
1069
+ property_name_ucs2 = (*jEnv)->GetStringChars(jEnv, property_name_jstr, &is_copy);
1070
+ if (!property_name_ucs2) {
1071
+ JS_ASSERT(0);
1072
+ goto done;
1073
+ }
1074
+ property_name_len = (*jEnv)->GetStringLength(jEnv, property_name_jstr);
1075
+
1076
+ JS_DeleteUCProperty2(cx, js_obj, property_name_ucs2, property_name_len, &js_val);
1077
+
1078
+ (*jEnv)->ReleaseStringChars(jEnv, property_name_jstr, property_name_ucs2);
1079
+
1080
+ done:
1081
+ jsj_exit_js(cx, jsj_env, saved_reporter);
1082
+ return;
1083
+ }
1084
+
1085
+ /*
1086
+ * Class: netscape_javascript_JSObject
1087
+ * Method: call
1088
+ * Signature: (Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;
1089
+ */
1090
+ JNIEXPORT jobject JNICALL
1091
+ Java_netscape_javascript_JSObject_call(JNIEnv *jEnv, jobject java_wrapper_obj,
1092
+ jstring function_name_jstr, jobjectArray java_args)
1093
+ {
1094
+ int i, argc, arg_num;
1095
+ jsval *argv;
1096
+ JSContext *cx = NULL;
1097
+ JSObject *js_obj;
1098
+ jsval js_val, function_val;
1099
+ int dummy_cost;
1100
+ JSBool dummy_bool;
1101
+ const jchar *function_name_ucs2;
1102
+ jsize function_name_len;
1103
+ JSErrorReporter saved_reporter;
1104
+ jboolean is_copy;
1105
+ jobject result;
1106
+ JSJavaThreadState *jsj_env;
1107
+
1108
+ jsj_env = jsj_enter_js(jEnv, NULL, java_wrapper_obj, &cx, &js_obj, &saved_reporter, NULL, 0, NULL);
1109
+ if (!jsj_env)
1110
+ return NULL;
1111
+
1112
+ function_name_ucs2 = NULL;
1113
+ result = NULL;
1114
+ if (!function_name_jstr) {
1115
+ JS_ReportErrorNumber(cx, jsj_GetErrorMessage, NULL,
1116
+ JSJMSG_NULL_FUNCTION_NAME);
1117
+ goto done;
1118
+ }
1119
+
1120
+ /* Get the function name to eval as raw Unicode characters */
1121
+ function_name_ucs2 = (*jEnv)->GetStringChars(jEnv, function_name_jstr, &is_copy);
1122
+ if (!function_name_ucs2) {
1123
+ JS_ASSERT(0);
1124
+ goto done;
1125
+ }
1126
+ function_name_len = (*jEnv)->GetStringLength(jEnv, function_name_jstr);
1127
+
1128
+ /* Allocate space for JS arguments */
1129
+ if (java_args) {
1130
+ argc = (*jEnv)->GetArrayLength(jEnv, java_args);
1131
+ argv = (jsval*)JS_malloc(cx, argc * sizeof(jsval));
1132
+ } else {
1133
+ argc = 0;
1134
+ argv = 0;
1135
+ }
1136
+
1137
+ /* Convert arguments from Java to JS values */
1138
+ for (arg_num = 0; arg_num < argc; arg_num++) {
1139
+ jobject arg = (*jEnv)->GetObjectArrayElement(jEnv, java_args, arg_num);
1140
+
1141
+ if (!jsj_ConvertJavaObjectToJSValue(cx, jEnv, arg, &argv[arg_num]))
1142
+ goto cleanup_argv;
1143
+ JS_AddNamedRoot(cx, &argv[arg_num], "&argv[arg_num]");
1144
+ }
1145
+
1146
+ if (!JS_GetUCProperty(cx, js_obj, function_name_ucs2, function_name_len,
1147
+ &function_val))
1148
+ goto cleanup_argv;
1149
+
1150
+ if (!JS_CallFunctionValue(cx, js_obj, function_val, argc, argv, &js_val))
1151
+ goto cleanup_argv;
1152
+
1153
+ jsj_ConvertJSValueToJavaObject(cx, jEnv, js_val, jsj_get_jlObject_descriptor(cx, jEnv),
1154
+ &dummy_cost, &result, &dummy_bool);
1155
+
1156
+ cleanup_argv:
1157
+ if (argv) {
1158
+ for (i = 0; i < arg_num; i++)
1159
+ JS_RemoveRoot(cx, &argv[i]);
1160
+ JS_free(cx, argv);
1161
+ }
1162
+
1163
+ done:
1164
+ if (function_name_ucs2)
1165
+ (*jEnv)->ReleaseStringChars(jEnv, function_name_jstr, function_name_ucs2);
1166
+ if (!jsj_exit_js(cx, jsj_env, saved_reporter))
1167
+ return NULL;
1168
+
1169
+ return result;
1170
+ }
1171
+
1172
+ /*
1173
+ * Class: netscape_javascript_JSObject
1174
+ * Method: eval
1175
+ * Signature: (Ljava/lang/String;)Ljava/lang/Object;
1176
+ */
1177
+ JNIEXPORT jobject JNICALL
1178
+ Java_netscape_javascript_JSObject_eval(JNIEnv *jEnv,
1179
+ jobject java_wrapper_obj,
1180
+ jstring eval_jstr)
1181
+ {
1182
+ const char *codebase;
1183
+ JSPrincipals *principals;
1184
+ JSContext *cx = NULL;
1185
+ JSBool eval_succeeded;
1186
+ JSObject *js_obj;
1187
+ jsval js_val;
1188
+ int dummy_cost;
1189
+ JSBool dummy_bool;
1190
+ const jchar *eval_ucs2;
1191
+ jsize eval_len;
1192
+ JSErrorReporter saved_reporter;
1193
+ jboolean is_copy;
1194
+ jobject result;
1195
+ JSJavaThreadState *jsj_env;
1196
+
1197
+ jsj_env = jsj_enter_js(jEnv, NULL, java_wrapper_obj, &cx, &js_obj, &saved_reporter, NULL, 0, NULL);
1198
+ if (!jsj_env)
1199
+ return NULL;
1200
+
1201
+ result = NULL;
1202
+ eval_ucs2 = NULL;
1203
+ if (!eval_jstr) {
1204
+ JS_ReportErrorNumber(cx, jsj_GetErrorMessage, NULL,
1205
+ JSJMSG_NULL_EVAL_ARG);
1206
+ goto done;
1207
+ }
1208
+
1209
+ /* Get the string to eval as raw Unicode characters */
1210
+ eval_ucs2 = (*jEnv)->GetStringChars(jEnv, eval_jstr, &is_copy);
1211
+ if (!eval_ucs2) {
1212
+ JS_ASSERT(0);
1213
+ goto done;
1214
+ }
1215
+ eval_len = (*jEnv)->GetStringLength(jEnv, eval_jstr);
1216
+
1217
+ /* Set up security stuff */
1218
+ principals = NULL;
1219
+ if (JSJ_callbacks && JSJ_callbacks->get_JSPrincipals_from_java_caller)
1220
+ principals = JSJ_callbacks->get_JSPrincipals_from_java_caller(jEnv, cx, NULL, 0, NULL);
1221
+ codebase = principals ? principals->codebase : NULL;
1222
+
1223
+ /* Have the JS engine evaluate the unicode string */
1224
+ eval_succeeded = JS_EvaluateUCScriptForPrincipals(cx, js_obj, principals,
1225
+ eval_ucs2, eval_len,
1226
+ codebase, 0, &js_val);
1227
+ if (!eval_succeeded)
1228
+ goto done;
1229
+
1230
+ /* Convert result to a subclass of java.lang.Object */
1231
+ jsj_ConvertJSValueToJavaObject(cx, jEnv, js_val, jsj_get_jlObject_descriptor(cx, jEnv),
1232
+ &dummy_cost, &result, &dummy_bool);
1233
+
1234
+ done:
1235
+ if (eval_ucs2)
1236
+ (*jEnv)->ReleaseStringChars(jEnv, eval_jstr, eval_ucs2);
1237
+ if (!jsj_exit_js(cx, jsj_env, saved_reporter))
1238
+ return NULL;
1239
+
1240
+ return result;
1241
+ }
1242
+
1243
+ /*
1244
+ * Class: netscape_javascript_JSObject
1245
+ * Method: toString
1246
+ * Signature: ()Ljava/lang/String;
1247
+ */
1248
+ JNIEXPORT jstring JNICALL
1249
+ Java_netscape_javascript_JSObject_toString(JNIEnv *jEnv,
1250
+ jobject java_wrapper_obj)
1251
+ {
1252
+ jstring result;
1253
+ JSContext *cx = NULL;
1254
+ JSObject *js_obj;
1255
+ JSString *jsstr;
1256
+ JSErrorReporter saved_reporter;
1257
+ JSJavaThreadState *jsj_env;
1258
+
1259
+ jsj_env = jsj_enter_js(jEnv, NULL, java_wrapper_obj, &cx, &js_obj, &saved_reporter, NULL, 0, NULL);
1260
+ if (!jsj_env)
1261
+ return NULL;
1262
+
1263
+ result = NULL;
1264
+ jsstr = JS_ValueToString(cx, OBJECT_TO_JSVAL(js_obj));
1265
+ if (jsstr)
1266
+ result = jsj_ConvertJSStringToJavaString(cx, jEnv, jsstr);
1267
+ if (!result)
1268
+ result = (*jEnv)->NewStringUTF(jEnv, "*JavaObject*");
1269
+
1270
+ if (!jsj_exit_js(cx, jsj_env, saved_reporter))
1271
+ return NULL;
1272
+
1273
+ return result;
1274
+ }
1275
+
1276
+ /*
1277
+ * Class: netscape_javascript_JSObject
1278
+ * Method: getWindow
1279
+ * Signature: (Ljava/applet/Applet;)Lnetscape/javascript/JSObject;
1280
+ */
1281
+ JNIEXPORT jobject JNICALL
1282
+ Java_netscape_javascript_JSObject_getWindow(JNIEnv *jEnv,
1283
+ jclass js_object_class,
1284
+ jobject java_applet_obj)
1285
+ {
1286
+ char *err_msg;
1287
+ JSContext *cx = NULL;
1288
+ JSObject *js_obj = NULL;
1289
+ jsval js_val;
1290
+ int dummy_cost;
1291
+ JSBool dummy_bool;
1292
+ JSErrorReporter saved_reporter;
1293
+ jobject java_obj;
1294
+ JSJavaThreadState *jsj_env;
1295
+
1296
+ jsj_env = jsj_enter_js(jEnv, java_applet_obj, NULL, &cx, NULL, &saved_reporter, NULL, 0, NULL);
1297
+ if (!jsj_env)
1298
+ return NULL;
1299
+
1300
+ err_msg = NULL;
1301
+ java_obj = NULL;
1302
+ if (JSJ_callbacks && JSJ_callbacks->map_java_object_to_js_object)
1303
+ js_obj = JSJ_callbacks->map_java_object_to_js_object(jEnv, java_applet_obj, &err_msg);
1304
+ if (!js_obj) {
1305
+ if (err_msg) {
1306
+ JS_ReportError(cx, err_msg);
1307
+ free(err_msg);
1308
+ }
1309
+ goto done;
1310
+ }
1311
+ js_val = OBJECT_TO_JSVAL(js_obj);
1312
+ jsj_ConvertJSValueToJavaObject(cx, jEnv, js_val, jsj_get_jlObject_descriptor(cx, jEnv),
1313
+ &dummy_cost, &java_obj, &dummy_bool);
1314
+ done:
1315
+ if (!jsj_exit_js(cx, jsj_env, saved_reporter))
1316
+ return NULL;
1317
+
1318
+ return java_obj;
1319
+ }
1320
+
1321
+ /*
1322
+ * Class: netscape_javascript_JSObject
1323
+ * Method: finalize
1324
+ * Signature: ()V
1325
+ */
1326
+ JNIEXPORT void JNICALL
1327
+ Java_netscape_javascript_JSObject_finalize(JNIEnv *jEnv, jobject java_wrapper_obj)
1328
+ {
1329
+ JSBool success;
1330
+ JSObjectHandle *handle;
1331
+
1332
+ success = JS_FALSE;
1333
+
1334
+ #if JS_BYTES_PER_LONG == 8 || JS_BYTES_PER_WORD == 8
1335
+ handle = (JSObjectHandle *)((*jEnv)->GetLongField(jEnv, java_wrapper_obj, njJSObject_long_internal));
1336
+ #else
1337
+ handle = (JSObjectHandle *)((*jEnv)->GetIntField(jEnv, java_wrapper_obj, njJSObject_internal));
1338
+ #endif
1339
+ JS_ASSERT(handle);
1340
+ if (!handle)
1341
+ return;
1342
+
1343
+ success = JS_RemoveRootRT(handle->rt, &handle->js_obj);
1344
+ free(handle);
1345
+
1346
+ JS_ASSERT(success);
1347
+ }
1348
+
1349
+ /*
1350
+ * Class: netscape_javascript_JSObject
1351
+ * Method: equals
1352
+ * Signature: (Ljava/lang/Object;)Z
1353
+ */
1354
+
1355
+ JNIEXPORT jboolean JNICALL
1356
+ Java_netscape_javascript_JSObject_equals(JNIEnv *jEnv,
1357
+ jobject java_wrapper_obj,
1358
+ jobject comparison_obj)
1359
+ {
1360
+ #ifdef PRESERVE_JSOBJECT_IDENTITY
1361
+ # error "Missing code should be added here"
1362
+ #else
1363
+ JSObject *js_obj1, *js_obj2;
1364
+
1365
+ /* Check that we're comparing with another netscape.javascript.JSObject */
1366
+ if (!comparison_obj)
1367
+ return 0;
1368
+ if (!(*jEnv)->IsInstanceOf(jEnv, comparison_obj, njJSObject))
1369
+ return 0;
1370
+
1371
+ js_obj1 = jsj_UnwrapJSObjectWrapper(jEnv, java_wrapper_obj);
1372
+ js_obj2 = jsj_UnwrapJSObjectWrapper(jEnv, comparison_obj);
1373
+
1374
+ return (js_obj1 == js_obj2);
1375
+ #endif /* PRESERVE_JSOBJECT_IDENTITY */
1376
+ }
1377
+