johnson 1.2.0 → 2.0.0.pre0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,191 @@
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
+ * This file is part of the Java-vendor-neutral implementation of LiveConnect
44
+ *
45
+ * It contains the native code implementation of JS's JavaMember class.
46
+ * JavaMember's are a strange beast required only to handle the special case
47
+ * of a public field and a public method that appear in the same class and
48
+ * have the same name. When such a field/method is used in Java, the compiler
49
+ * can statically determine from context whether the field or the method is
50
+ * being referenced, but that is not possible with JavaScript. For example:
51
+ *
52
+ * ambiguousVal = javaObj.fieldOrMethod; // ambiguousVal is a JavaMember object
53
+ * a = ambiguousVal(); // ambiguousVal used as a method value
54
+ * b = ambiguousVal + 4; // ambiguousVal used as a field value
55
+ *
56
+ * A JavaMember instance carries both the captured value of the Java field and
57
+ * the method value until the context that the value is to be used in is known,
58
+ * at which point conversion forces the use of one or the other.
59
+ */
60
+
61
+ #include <stdlib.h>
62
+ #include <string.h>
63
+
64
+ #include "jsj_private.h" /* LiveConnect internals */
65
+
66
+ /* Private, native portion of a JavaMember */
67
+ typedef struct JavaMethodOrFieldValue {
68
+ jsval method_val;
69
+ jsval field_val;
70
+ } JavaMethodOrFieldValue;
71
+
72
+ JSObject *
73
+ jsj_CreateJavaMember(JSContext *cx, jsval method_val, jsval field_val)
74
+ {
75
+ JavaMethodOrFieldValue *member_val;
76
+ JSObject *JavaMember_obj;
77
+
78
+ member_val = (JavaMethodOrFieldValue *)JS_malloc(cx, sizeof(*member_val));
79
+ if (!member_val)
80
+ return NULL;
81
+
82
+ JavaMember_obj = JS_NewObject(cx, &JavaMember_class, 0, 0);
83
+ if (!JavaMember_obj) {
84
+ JS_free(cx, member_val);
85
+ return NULL;
86
+ }
87
+
88
+ member_val->method_val = method_val;
89
+ member_val->field_val = field_val;
90
+ JS_SetPrivate(cx, JavaMember_obj, (void *)member_val);
91
+
92
+ return JavaMember_obj;
93
+ }
94
+
95
+ static void
96
+ JavaMember_finalize(JSContext *cx, JSObject *obj)
97
+ {
98
+ JavaMethodOrFieldValue *member_val;
99
+
100
+ member_val = JS_GetPrivate(cx, obj);
101
+ if (!member_val)
102
+ return;
103
+ JS_free(cx, member_val);
104
+ }
105
+
106
+ static JSBool
107
+ JavaMember_convert(JSContext *cx, JSObject *obj, JSType type, jsval *vp)
108
+ {
109
+ JavaMethodOrFieldValue *member_val;
110
+
111
+ member_val = JS_GetPrivate(cx, obj);
112
+ if (!member_val) {
113
+ if (type == JSTYPE_OBJECT) {
114
+ *vp = OBJECT_TO_JSVAL(obj);
115
+ return JS_TRUE;
116
+ }
117
+
118
+ JS_ReportError(cx, "illegal operation on JavaObject prototype object");
119
+ return JS_FALSE;
120
+ }
121
+
122
+ switch (type) {
123
+ case JSTYPE_VOID:
124
+ case JSTYPE_STRING:
125
+ case JSTYPE_NUMBER:
126
+ case JSTYPE_BOOLEAN:
127
+ case JSTYPE_OBJECT:
128
+ *vp = member_val->field_val;
129
+ return JS_TRUE;
130
+
131
+ case JSTYPE_FUNCTION:
132
+ *vp = member_val->method_val;
133
+ return JS_TRUE;
134
+
135
+ default:
136
+ JS_ASSERT(0);
137
+ return JS_FALSE;
138
+ }
139
+ }
140
+
141
+ /*
142
+ * This function exists only to make JavaMember's Call'able. The way the JS
143
+ * engine is written now, it's never actually called because when a JavaMember
144
+ * is invoked, it's converted to a JS function via JavaMember_convert().
145
+ */
146
+ static JSBool
147
+ JavaMember_Call(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
148
+ {
149
+ JS_ASSERT(0);
150
+ return JS_TRUE;
151
+ }
152
+
153
+ static void
154
+ JavaMember_trace(JSTracer *trc, JSObject *obj)
155
+ {
156
+ JavaMethodOrFieldValue *member_val;
157
+
158
+ member_val = (JavaMethodOrFieldValue *)JS_GetPrivate(trc->context, obj);
159
+ if (member_val) {
160
+ JS_CALL_VALUE_TRACER(trc, member_val->method_val, "method_val");
161
+ JS_CALL_VALUE_TRACER(trc, member_val->field_val, "field_val");
162
+ }
163
+ }
164
+
165
+ JSClass JavaMember_class = {
166
+ "JavaMember", JSCLASS_HAS_PRIVATE | JSCLASS_MARK_IS_TRACE,
167
+ JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub,
168
+ JS_EnumerateStub, JS_ResolveStub,
169
+ JavaMember_convert, JavaMember_finalize,
170
+
171
+ NULL, /* getObjectOps */
172
+ NULL, /* checkAccess */
173
+ JavaMember_Call,
174
+ NULL, /* construct */
175
+ NULL, /* xdrObject */
176
+ NULL, /* hasInstance */
177
+ JS_CLASS_TRACE(JavaMember_trace), /* mark/trace */
178
+ 0, /* spare */
179
+ };
180
+
181
+ JSBool
182
+ jsj_init_JavaMember(JSContext *cx, JSObject *global_obj)
183
+ {
184
+ if (!JS_InitClass(cx, global_obj,
185
+ 0, &JavaMember_class, 0, 0,
186
+ 0, 0,
187
+ 0, 0))
188
+ return JS_FALSE;
189
+
190
+ return JS_TRUE;
191
+ }
@@ -0,0 +1,1079 @@
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
+ * This Original Code has been modified by IBM Corporation. Modifications made
39
+ * by IBM described herein are Copyright (c) International Business Machines
40
+ * Corporation, 2000.
41
+ * Modifications to Mozilla code or documentation identified per MPL Section 3.3
42
+ *
43
+ * Date Modified by Description of modification
44
+ * 04/20/2000 IBM Corp. OS/2 VisualAge build.
45
+ *
46
+ * ***** END LICENSE BLOCK ***** */
47
+
48
+ /*
49
+ * This file is part of the Java-vendor-neutral implementation of LiveConnect
50
+ *
51
+ * It contains the native code implementation of JS's JavaObject class.
52
+ *
53
+ * An instance of JavaObject is the JavaScript reflection of a Java object.
54
+ *
55
+ */
56
+
57
+ #include <stdlib.h>
58
+ #include <string.h>
59
+
60
+ #include "jsapi.h"
61
+ #include "jscntxt.h"
62
+ #include "jsobj.h"
63
+ #include "jsj_private.h" /* LiveConnect internals */
64
+ #include "jsj_hash.h" /* Hash table with Java object as key */
65
+
66
+ #ifdef JSJ_THREADSAFE
67
+ #include "prmon.h"
68
+ #endif
69
+
70
+ /*
71
+ * This is a hash table that maps from Java objects to JS objects.
72
+ * It is used to ensure that the same JS object is obtained when a Java
73
+ * object is reflected more than once, so that JS object equality tests
74
+ * work in the expected manner, i.e. the "==" and "===" operators.
75
+ *
76
+ * The table entry keys are Java objects (of type jobject) and the entry values
77
+ * are JSObject pointers. Because the jobject type is an opaque handle and
78
+ * not necessarily a pointer, the hashing and key comparison functions must
79
+ * invoke the appropriate JVM functions.
80
+ *
81
+ * When the corresponding JS object instance is finalized, the entry is
82
+ * removed from the table, and a Java GC root for the Java object is removed.
83
+ */
84
+ static JSJHashTable *java_obj_reflections = NULL;
85
+
86
+ #ifdef JSJ_THREADSAFE
87
+ static PRMonitor *java_obj_reflections_monitor = NULL;
88
+ static int java_obj_reflections_mutation_count = 0;
89
+ #endif
90
+
91
+ static JSBool installed_GC_callback = JS_FALSE;
92
+ static JSGCCallback old_GC_callback = NULL;
93
+ static JavaObjectWrapper* deferred_wrappers = NULL;
94
+
95
+ static JSBool jsj_GC_callback(JSContext *cx, JSGCStatus status)
96
+ {
97
+ if (status == JSGC_END && deferred_wrappers) {
98
+ JNIEnv *jEnv;
99
+ JSJavaThreadState *jsj_env = jsj_EnterJava(cx, &jEnv);
100
+ if (jEnv) {
101
+ JavaObjectWrapper* java_wrapper = deferred_wrappers;
102
+ while (java_wrapper) {
103
+ deferred_wrappers = java_wrapper->u.next;
104
+ if (java_wrapper->java_obj)
105
+ (*jEnv)->DeleteGlobalRef(jEnv, java_wrapper->java_obj);
106
+ jsj_ReleaseJavaClassDescriptor(cx, jEnv, java_wrapper->class_descriptor);
107
+ JS_free(cx, java_wrapper);
108
+ java_wrapper = deferred_wrappers;
109
+ }
110
+ jsj_ExitJava(jsj_env);
111
+ }
112
+ }
113
+ /* always chain to old GC callback if non-null. */
114
+ return old_GC_callback ? old_GC_callback(cx, status) : JS_TRUE;
115
+ }
116
+
117
+ JSBool
118
+ jsj_InitJavaObjReflectionsTable(void)
119
+ {
120
+ JS_ASSERT(!java_obj_reflections);
121
+
122
+ java_obj_reflections =
123
+ JSJ_NewHashTable(512, jsj_HashJavaObject, jsj_JavaObjectComparator,
124
+ NULL, NULL, NULL);
125
+ if (!java_obj_reflections)
126
+ return JS_FALSE;
127
+
128
+ #ifdef JSJ_THREADSAFE
129
+ java_obj_reflections_monitor = (struct PRMonitor *) PR_NewMonitor();
130
+ if (!java_obj_reflections_monitor) {
131
+ JSJ_HashTableDestroy(java_obj_reflections);
132
+ return JS_FALSE;
133
+ }
134
+ #endif
135
+
136
+ return JS_TRUE;
137
+ }
138
+
139
+ JSObject *
140
+ jsj_WrapJavaObject(JSContext *cx,
141
+ JNIEnv *jEnv,
142
+ jobject java_obj,
143
+ jclass java_class)
144
+ {
145
+ JSJHashNumber hash_code;
146
+ JSClass *js_class;
147
+ JSObject *js_wrapper_obj;
148
+ JavaObjectWrapper *java_wrapper;
149
+ JavaClassDescriptor *class_descriptor;
150
+ JSJHashEntry *he, **hep;
151
+
152
+ #ifdef JSJ_THREADSAFE
153
+ int mutation_count;
154
+ #endif
155
+
156
+ js_wrapper_obj = NULL;
157
+
158
+ hash_code = jsj_HashJavaObject((void*)java_obj, (void*)jEnv);
159
+
160
+ #ifdef JSJ_THREADSAFE
161
+ PR_EnterMonitor(java_obj_reflections_monitor);
162
+ #endif
163
+
164
+ if (!installed_GC_callback) {
165
+ /*
166
+ * Hook into GC callback mechanism, so we can defer deleting global
167
+ * references until it's safe.
168
+ */
169
+ old_GC_callback = JS_SetGCCallback(cx, jsj_GC_callback);
170
+ installed_GC_callback = JS_TRUE;
171
+ }
172
+
173
+ hep = JSJ_HashTableRawLookup(java_obj_reflections,
174
+ hash_code, java_obj, (void*)jEnv);
175
+ he = *hep;
176
+
177
+ #ifdef JSJ_THREADSAFE
178
+ /* Track mutations to hash table */
179
+ mutation_count = java_obj_reflections_mutation_count;
180
+
181
+ /* We must temporarily release this monitor so as to avoid
182
+ deadlocks with the JS GC. See Bugsplat #354852 */
183
+ PR_ExitMonitor(java_obj_reflections_monitor);
184
+ #endif
185
+
186
+ if (he) {
187
+ js_wrapper_obj = (JSObject *)he->value;
188
+ if (js_wrapper_obj)
189
+ return js_wrapper_obj;
190
+ }
191
+
192
+ /* No existing reflection found. Construct a new one */
193
+ class_descriptor = jsj_GetJavaClassDescriptor(cx, jEnv, java_class);
194
+ if (!class_descriptor)
195
+ return NULL;
196
+ if (class_descriptor->type == JAVA_SIGNATURE_ARRAY) {
197
+ js_class = &JavaArray_class;
198
+ } else {
199
+ JS_ASSERT(IS_OBJECT_TYPE(class_descriptor->type));
200
+ js_class = &JavaObject_class;
201
+ }
202
+
203
+ /* Create new JS object to reflect Java object */
204
+ js_wrapper_obj = JS_NewObject(cx, js_class, NULL, NULL);
205
+ if (!js_wrapper_obj)
206
+ return NULL;
207
+
208
+ /* Create private, native portion of JavaObject */
209
+ java_wrapper =
210
+ (JavaObjectWrapper *)JS_malloc(cx, sizeof(JavaObjectWrapper));
211
+ if (!java_wrapper) {
212
+ jsj_ReleaseJavaClassDescriptor(cx, jEnv, class_descriptor);
213
+ return NULL;
214
+ }
215
+ JS_SetPrivate(cx, js_wrapper_obj, java_wrapper);
216
+ java_wrapper->class_descriptor = class_descriptor;
217
+ java_wrapper->java_obj = NULL;
218
+
219
+ #ifdef JSJ_THREADSAFE
220
+ PR_EnterMonitor(java_obj_reflections_monitor);
221
+
222
+ /* We may need to do the hash table lookup again, since some other
223
+ thread may have updated it while the lock wasn't being held. */
224
+ if (mutation_count != java_obj_reflections_mutation_count) {
225
+ hep = JSJ_HashTableRawLookup(java_obj_reflections,
226
+ hash_code, java_obj, (void*)jEnv);
227
+ he = *hep;
228
+ if (he) {
229
+ js_wrapper_obj = (JSObject *)he->value;
230
+ if (js_wrapper_obj) {
231
+ PR_ExitMonitor(java_obj_reflections_monitor);
232
+ return js_wrapper_obj;
233
+ }
234
+ }
235
+ }
236
+
237
+ java_obj_reflections_mutation_count++;
238
+
239
+ #endif
240
+
241
+ java_obj = (*jEnv)->NewGlobalRef(jEnv, java_obj);
242
+ java_wrapper->java_obj = java_obj;
243
+ if (!java_obj)
244
+ goto out_of_memory;
245
+
246
+ /* cache the hash code for all time. */
247
+ java_wrapper->u.hash_code = hash_code;
248
+
249
+ /* Add the JavaObject to the hash table */
250
+ he = JSJ_HashTableRawAdd(java_obj_reflections, hep, hash_code,
251
+ java_obj, js_wrapper_obj, (void*)jEnv);
252
+ #ifdef JSJ_THREADSAFE
253
+ PR_ExitMonitor(java_obj_reflections_monitor);
254
+ #endif
255
+
256
+ if (!he) {
257
+ (*jEnv)->DeleteGlobalRef(jEnv, java_obj);
258
+ goto out_of_memory;
259
+ }
260
+
261
+ return js_wrapper_obj;
262
+
263
+ out_of_memory:
264
+ /* No need to free js_wrapper_obj, as it will be finalized by GC. */
265
+ JS_ReportOutOfMemory(cx);
266
+ return NULL;
267
+ }
268
+
269
+ static void
270
+ remove_java_obj_reflection_from_hashtable(jobject java_obj, JSJHashNumber hash_code)
271
+ {
272
+ JSJHashEntry *he, **hep;
273
+
274
+ #ifdef JSJ_THREADSAFE
275
+ PR_EnterMonitor(java_obj_reflections_monitor);
276
+ #endif
277
+
278
+ hep = JSJ_HashTableRawLookup(java_obj_reflections, hash_code,
279
+ java_obj, NULL);
280
+ he = *hep;
281
+
282
+ JS_ASSERT(he);
283
+ if (he)
284
+ JSJ_HashTableRawRemove(java_obj_reflections, hep, he, NULL);
285
+
286
+ #ifdef JSJ_THREADSAFE
287
+ java_obj_reflections_mutation_count++;
288
+
289
+ PR_ExitMonitor(java_obj_reflections_monitor);
290
+ #endif
291
+ }
292
+
293
+ JS_EXPORT_API(void)
294
+ JavaObject_finalize(JSContext *cx, JSObject *obj)
295
+ {
296
+ JavaObjectWrapper *java_wrapper;
297
+ jobject java_obj;
298
+ JNIEnv *jEnv;
299
+ JSJavaThreadState *jsj_env;
300
+
301
+ java_wrapper = JS_GetPrivate(cx, obj);
302
+ if (!java_wrapper)
303
+ return;
304
+ java_obj = java_wrapper->java_obj;
305
+
306
+ if (java_obj) {
307
+ remove_java_obj_reflection_from_hashtable(java_obj, java_wrapper->u.hash_code);
308
+
309
+ /* defer releasing global refs until it is safe to do so. */
310
+ java_wrapper->u.next = deferred_wrappers;
311
+ deferred_wrappers = java_wrapper;
312
+ } else {
313
+ jsj_env = jsj_EnterJava(cx, &jEnv);
314
+ if (jEnv) {
315
+ jsj_ReleaseJavaClassDescriptor(cx, jEnv, java_wrapper->class_descriptor);
316
+ JS_free(cx, java_wrapper);
317
+ jsj_ExitJava(jsj_env);
318
+ } else {
319
+ java_wrapper->u.next = deferred_wrappers;
320
+ deferred_wrappers = java_wrapper;
321
+ }
322
+ }
323
+ }
324
+
325
+ /* Trivial helper for jsj_DiscardJavaObjReflections(), below */
326
+ static JSIntn
327
+ enumerate_remove_java_obj(JSJHashEntry *he, JSIntn i, void *arg)
328
+ {
329
+ JSJavaThreadState *jsj_env = (JSJavaThreadState *)arg;
330
+ JNIEnv *jEnv = jsj_env->jEnv;
331
+ jobject java_obj;
332
+ JavaObjectWrapper *java_wrapper;
333
+ JSObject *java_wrapper_obj;
334
+
335
+ java_wrapper_obj = (JSObject *)he->value;
336
+
337
+ /* Warning: NULL argument may cause assertion in JS engine, but it's actually OK */
338
+ java_wrapper = JS_GetPrivate(jsj_env->cx, java_wrapper_obj);
339
+ java_obj = java_wrapper->java_obj;
340
+ (*jEnv)->DeleteGlobalRef(jEnv, java_obj);
341
+ java_wrapper->java_obj = NULL;
342
+ return HT_ENUMERATE_REMOVE;
343
+ }
344
+
345
+ /* This shutdown routine discards all JNI references to Java objects
346
+ that have been reflected into JS, even if there are still references
347
+ to them from JS. */
348
+ void
349
+ jsj_DiscardJavaObjReflections(JNIEnv *jEnv)
350
+ {
351
+ JSJavaThreadState *jsj_env;
352
+ char *err_msg;
353
+
354
+ /* Get the per-thread state corresponding to the current Java thread */
355
+ jsj_env = jsj_MapJavaThreadToJSJavaThreadState(jEnv, &err_msg);
356
+ JS_ASSERT(jsj_env);
357
+ if (!jsj_env) {
358
+ if (err_msg) {
359
+ jsj_LogError(err_msg);
360
+ JS_smprintf_free(err_msg);
361
+ }
362
+
363
+ return;
364
+ }
365
+
366
+ JS_ASSERT(!err_msg);
367
+
368
+ if (java_obj_reflections) {
369
+ JSJ_HashTableEnumerateEntries(java_obj_reflections,
370
+ enumerate_remove_java_obj,
371
+ (void*)jsj_env);
372
+ JSJ_HashTableDestroy(java_obj_reflections);
373
+ java_obj_reflections = NULL;
374
+ }
375
+ }
376
+
377
+ JSBool
378
+ JavaObject_convert(JSContext *cx, JSObject *obj, JSType type, jsval *vp)
379
+ {
380
+ JavaObjectWrapper *java_wrapper;
381
+ JavaClassDescriptor *class_descriptor;
382
+ jobject java_obj;
383
+ JNIEnv *jEnv;
384
+ JSJavaThreadState *jsj_env;
385
+ JSBool result;
386
+
387
+ java_wrapper = JS_GetPrivate(cx, obj);
388
+ if (!java_wrapper) {
389
+ if (type == JSTYPE_OBJECT) {
390
+ *vp = OBJECT_TO_JSVAL(obj);
391
+ return JS_TRUE;
392
+ }
393
+
394
+ JS_ReportErrorNumber(cx, jsj_GetErrorMessage, NULL,
395
+ JSJMSG_BAD_OP_JOBJECT);
396
+ return JS_FALSE;
397
+ }
398
+
399
+ java_obj = java_wrapper->java_obj;
400
+ class_descriptor = java_wrapper->class_descriptor;
401
+
402
+ switch (type) {
403
+ case JSTYPE_OBJECT:
404
+ *vp = OBJECT_TO_JSVAL(obj);
405
+ return JS_TRUE;
406
+
407
+ case JSTYPE_FUNCTION:
408
+ JS_ReportErrorNumber(cx, jsj_GetErrorMessage, NULL,
409
+ JSJMSG_CONVERT_TO_FUNC);
410
+ return JS_FALSE;
411
+
412
+ case JSTYPE_VOID:
413
+ case JSTYPE_STRING:
414
+ /* Get the Java per-thread environment pointer for this JSContext */
415
+ jsj_env = jsj_EnterJava(cx, &jEnv);
416
+ if (!jEnv)
417
+ return JS_FALSE;
418
+
419
+ /* Either extract a C-string from the java.lang.String object
420
+ or call the Java toString() method */
421
+ result = jsj_ConvertJavaObjectToJSString(cx, jEnv, class_descriptor, java_obj, vp);
422
+ jsj_ExitJava(jsj_env);
423
+ return result;
424
+
425
+ case JSTYPE_NUMBER:
426
+ /* Get the Java per-thread environment pointer for this JSContext */
427
+ jsj_env = jsj_EnterJava(cx, &jEnv);
428
+ if (!jEnv)
429
+ return JS_FALSE;
430
+
431
+ /* Call Java doubleValue() method, if applicable */
432
+ result = jsj_ConvertJavaObjectToJSNumber(cx, jEnv, class_descriptor, java_obj, vp);
433
+ jsj_ExitJava(jsj_env);
434
+ return result;
435
+
436
+ case JSTYPE_BOOLEAN:
437
+ /* Get the Java per-thread environment pointer for this JSContext */
438
+ jsj_env = jsj_EnterJava(cx, &jEnv);
439
+ if (!jEnv)
440
+ return JS_FALSE;
441
+
442
+ /* Call booleanValue() method, if applicable */
443
+ result = jsj_ConvertJavaObjectToJSBoolean(cx, jEnv, class_descriptor, java_obj, vp);
444
+ jsj_ExitJava(jsj_env);
445
+ return result;
446
+
447
+ default:
448
+ JS_ASSERT(0);
449
+ return JS_FALSE;
450
+ }
451
+ }
452
+
453
+ /*
454
+ * Get a property from the prototype object of a native ECMA object, i.e.
455
+ * return <js_constructor_name>.prototype.<member_name>
456
+ * This is used to allow Java objects to inherit methods from Array.prototype
457
+ * and String.prototype.
458
+ */
459
+ static JSBool
460
+ inherit_props_from_JS_natives(JSContext *cx, const char *js_constructor_name,
461
+ const char *member_name, jsval *vp)
462
+ {
463
+ JSObject *global_obj, *constructor_obj, *prototype_obj;
464
+ jsval constructor_val, prototype_val;
465
+
466
+ global_obj = JS_GetGlobalObject(cx);
467
+ JS_ASSERT(global_obj);
468
+ if (!global_obj)
469
+ return JS_FALSE;
470
+
471
+ JS_GetProperty(cx, global_obj, js_constructor_name, &constructor_val);
472
+ JS_ASSERT(JSVAL_IS_OBJECT(constructor_val));
473
+ constructor_obj = JSVAL_TO_OBJECT(constructor_val);
474
+
475
+ JS_GetProperty(cx, constructor_obj, "prototype", &prototype_val);
476
+ JS_ASSERT(JSVAL_IS_OBJECT(prototype_val));
477
+ prototype_obj = JSVAL_TO_OBJECT(prototype_val);
478
+
479
+ return JS_GetProperty(cx, prototype_obj, member_name, vp) && *vp != JSVAL_VOID;
480
+ }
481
+
482
+ struct JSJPropertyInfo {
483
+ JSBool wantProp; /* input param tells whether prop is returned */
484
+ const char* name; /* output param, name of property (XXX ASCII) */
485
+ uintN attributes; /* output param, attributes of property */
486
+ JSProperty *prop; /* output param, if wantProp, held pointer that
487
+ must be released via OBJ_DROP_PROPERTY */
488
+ };
489
+ typedef struct JSJPropertyInfo JSJPropertyInfo;
490
+
491
+ static JSBool
492
+ lookup_member_by_id(JSContext *cx, JNIEnv *jEnv, JSObject *obj,
493
+ JavaObjectWrapper **java_wrapperp, jsid id,
494
+ JavaMemberDescriptor **member_descriptorp,
495
+ jsval *vp, JSObject **proto_chainp,
496
+ JSJPropertyInfo *prop_infop)
497
+ {
498
+ jsval idval;
499
+ JavaObjectWrapper *java_wrapper;
500
+ JavaMemberDescriptor *member_descriptor;
501
+ const char *member_name;
502
+ JavaClassDescriptor *class_descriptor;
503
+ JSObject *proto_chain;
504
+ JSBool found_in_proto;
505
+
506
+ // This method accesses slots without using the JSAPI and these slots may
507
+ // be stale if running on trace. Must run in the interpreter here.
508
+ js_LeaveTrace(cx);
509
+
510
+ found_in_proto = JS_FALSE;
511
+ member_descriptor = NULL;
512
+ java_wrapper = JS_GetPrivate(cx, obj);
513
+
514
+ /* Handle accesses to prototype object */
515
+ if (!java_wrapper) {
516
+ if (JS_IdToValue(cx, id, &idval) && JSVAL_IS_STRING(idval) &&
517
+ (member_name = JS_GetStringBytes(JSVAL_TO_STRING(idval))) != NULL) {
518
+ if (!strcmp(member_name, "constructor"))
519
+ goto done;
520
+ }
521
+ JS_ReportErrorNumber(cx, jsj_GetErrorMessage, NULL, JSJMSG_BAD_OP_JOBJECT);
522
+ return JS_FALSE;
523
+ }
524
+
525
+ class_descriptor = java_wrapper->class_descriptor;
526
+ JS_ASSERT(IS_REFERENCE_TYPE(class_descriptor->type));
527
+
528
+ member_descriptor = jsj_LookupJavaMemberDescriptorById(cx, jEnv, class_descriptor, id);
529
+ if (member_descriptor)
530
+ goto done;
531
+
532
+ /* Instances can reference static methods and fields */
533
+ member_descriptor = jsj_LookupJavaStaticMemberDescriptorById(cx, jEnv, class_descriptor, id);
534
+ if (member_descriptor)
535
+ goto done;
536
+
537
+ /* Ensure that the property we're searching for is string-valued. */
538
+ JS_IdToValue(cx, id, &idval);
539
+ if (!JSVAL_IS_STRING(idval)) {
540
+ JS_ReportErrorNumber(cx, jsj_GetErrorMessage, NULL, JSJMSG_BAD_JOBJECT_EXPR);
541
+ return JS_FALSE;
542
+ }
543
+ member_name = JS_GetStringBytes(JSVAL_TO_STRING(idval));
544
+
545
+ /*
546
+ * A little LC3 feature magic:
547
+ * + Instances of java.lang.String "inherit" the standard ECMA string methods
548
+ * of String.prototype. All of the ECMA string methods convert the Java
549
+ * string to a JS string before performing the string operation. For example,
550
+ * s = new java.lang.String("foobar");
551
+ * return s.slice(2);
552
+ * + Similarly, instances of Java arrays "inherit" the standard ECMA array
553
+ * methods of Array.prototype. (Not all of these methods work properly
554
+ * on JavaArray objects, however, since the 'length' property is read-only.)
555
+ */
556
+ if (vp) {
557
+ if ((class_descriptor->type == JAVA_SIGNATURE_JAVA_LANG_STRING) &&
558
+ inherit_props_from_JS_natives(cx, "String", member_name, vp))
559
+ goto done;
560
+ if ((class_descriptor->type == JAVA_SIGNATURE_ARRAY) &&
561
+ inherit_props_from_JS_natives(cx, "Array", member_name, vp))
562
+ goto done;
563
+ }
564
+
565
+ /* Check for access to magic prototype chain property */
566
+ if (!strcmp(member_name, "__proto__")) {
567
+ proto_chain = JS_GetPrototype(cx, obj);
568
+ if (vp)
569
+ *vp = OBJECT_TO_JSVAL(proto_chain);
570
+ goto done;
571
+ }
572
+
573
+ /*
574
+ * See if the property looks like the explicit resolution of an
575
+ * overloaded method, e.g. "max(double,double)", first as an instance method,
576
+ * then as a static method. If we find such a method, it will be cached
577
+ * so future accesses won't run this code.
578
+ */
579
+ member_descriptor = jsj_ResolveExplicitMethod(cx, jEnv, class_descriptor, id, JS_FALSE);
580
+ if (member_descriptor)
581
+ goto done;
582
+ member_descriptor = jsj_ResolveExplicitMethod(cx, jEnv, class_descriptor, id, JS_TRUE);
583
+ if (member_descriptor)
584
+ goto done;
585
+
586
+ /* Is the property defined in the prototype chain? */
587
+ if (proto_chainp && prop_infop) {
588
+ /* If so, follow __proto__ link to search prototype chain */
589
+ proto_chain = JS_GetPrototype(cx, obj);
590
+
591
+ /* Use OBJ_LOOKUP_PROPERTY to determine if and where the property
592
+ actually exists in the prototype chain. */
593
+ if (proto_chain) {
594
+ if (!OBJ_LOOKUP_PROPERTY(cx, proto_chain, id, proto_chainp,
595
+ &prop_infop->prop)) {
596
+ return JS_FALSE;
597
+ }
598
+ if (prop_infop->prop) {
599
+ if (!OBJ_GET_ATTRIBUTES(cx, *proto_chainp, id, prop_infop->prop,
600
+ &prop_infop->attributes)) {
601
+ OBJ_DROP_PROPERTY(cx, *proto_chainp, prop_infop->prop);
602
+ return JS_FALSE;
603
+ }
604
+ if (!prop_infop->wantProp) {
605
+ OBJ_DROP_PROPERTY(cx, *proto_chainp, prop_infop->prop);
606
+ prop_infop->prop = NULL;
607
+ }
608
+ prop_infop->name = member_name;
609
+ found_in_proto = JS_TRUE;
610
+ goto done;
611
+ }
612
+ }
613
+ }
614
+
615
+ /* Report lack of Java member with the given property name */
616
+ JS_ReportErrorNumber(cx, jsj_GetErrorMessage, NULL, JSJMSG_NO_INSTANCE_NAME,
617
+ class_descriptor->name, member_name);
618
+ return JS_FALSE;
619
+
620
+ done:
621
+ /* Success. Handle the multiple return values */
622
+ if (java_wrapperp)
623
+ *java_wrapperp = java_wrapper;
624
+ if (member_descriptorp)
625
+ *member_descriptorp = member_descriptor;
626
+ if (proto_chainp && !found_in_proto)
627
+ *proto_chainp = NULL;
628
+ return JS_TRUE;
629
+ }
630
+
631
+ JS_EXPORT_API(JSBool)
632
+ JavaObject_getPropertyById(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
633
+ {
634
+ jobject java_obj;
635
+ JavaMemberDescriptor *member_descriptor;
636
+ JavaObjectWrapper *java_wrapper;
637
+ JNIEnv *jEnv;
638
+ JSObject *funobj;
639
+ jsval field_val, method_val;
640
+ JSBool success;
641
+ JSJavaThreadState *jsj_env;
642
+ JSObject *proto_chain;
643
+ JSJPropertyInfo prop_info;
644
+
645
+ /* printf("In JavaObject_getProperty\n"); */
646
+
647
+ /* Get the Java per-thread environment pointer for this JSContext */
648
+ jsj_env = jsj_EnterJava(cx, &jEnv);
649
+ if (!jEnv)
650
+ return JS_FALSE;
651
+
652
+ if (vp)
653
+ *vp = JSVAL_VOID;
654
+ prop_info.wantProp = JS_FALSE;
655
+ if (!lookup_member_by_id(cx, jEnv, obj, &java_wrapper, id, &member_descriptor, vp,
656
+ &proto_chain, &prop_info)) {
657
+ jsj_ExitJava(jsj_env);
658
+ return JS_FALSE;
659
+ }
660
+
661
+ /* Handle access to special, non-Java properties of JavaObjects, e.g. the
662
+ "constructor" property of the prototype object */
663
+ if (!member_descriptor) {
664
+ jsj_ExitJava(jsj_env);
665
+ if (proto_chain)
666
+ return JS_GetProperty(cx, proto_chain, prop_info.name, vp);
667
+ return JS_TRUE;
668
+ }
669
+
670
+ java_obj = java_wrapper->java_obj;
671
+ field_val = method_val = JSVAL_VOID;
672
+
673
+ if (jaApplet && (*jEnv)->IsInstanceOf(jEnv, java_obj, jaApplet)) {
674
+ jsj_JSIsCallingApplet = JS_TRUE;
675
+ }
676
+
677
+ /* If a field member, get the value of the field */
678
+ if (member_descriptor->field) {
679
+ success = jsj_GetJavaFieldValue(cx, jEnv, member_descriptor->field, java_obj, &field_val);
680
+ if (!success) {
681
+ jsj_ExitJava(jsj_env);
682
+ return JS_FALSE;
683
+ }
684
+ }
685
+
686
+ /* If a method member, build a wrapper around the Java method */
687
+ if (member_descriptor->methods) {
688
+ /* Create a function object with this JavaObject as its parent, so that
689
+ JSFUN_BOUND_METHOD binds it as the default 'this' for the function. */
690
+ funobj = JS_CloneFunctionObject(cx, member_descriptor->invoke_func_obj, obj);
691
+ if (!funobj) {
692
+ jsj_ExitJava(jsj_env);
693
+ return JS_FALSE;
694
+ }
695
+ method_val = OBJECT_TO_JSVAL(funobj);
696
+ }
697
+
698
+ #if TEST_JAVAMEMBER
699
+ /* Always create a JavaMember object, even though it's inefficient */
700
+ obj = jsj_CreateJavaMember(cx, method_val, field_val);
701
+ if (!obj) {
702
+ jsj_ExitJava(jsj_env);
703
+ return JS_FALSE;
704
+ }
705
+ *vp = OBJECT_TO_JSVAL(obj);
706
+ #else /* !TEST_JAVAMEMBER */
707
+
708
+ if (member_descriptor->field) {
709
+ if (!member_descriptor->methods) {
710
+ /* Return value of Java field */
711
+ *vp = field_val;
712
+ } else {
713
+ /* Handle special case of access to a property that could refer
714
+ to either a Java field or a method that share the same name.
715
+ In Java, such ambiguity is not possible because the compiler
716
+ can statically determine which is being accessed. */
717
+ obj = jsj_CreateJavaMember(cx, method_val, field_val);
718
+ if (!obj) {
719
+ jsj_ExitJava(jsj_env);
720
+ return JS_FALSE;
721
+ }
722
+ *vp = OBJECT_TO_JSVAL(obj);
723
+ }
724
+
725
+ } else {
726
+ /* Return wrapper around Java method */
727
+ *vp = method_val;
728
+ }
729
+
730
+ #endif /* !TEST_JAVAMEMBER */
731
+
732
+ jsj_ExitJava(jsj_env);
733
+ return JS_TRUE;
734
+ }
735
+
736
+ static JSBool
737
+ JavaObject_setPropertyById(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
738
+ {
739
+ jobject java_obj;
740
+ const char *member_name;
741
+ JavaObjectWrapper *java_wrapper;
742
+ JavaClassDescriptor *class_descriptor;
743
+ JavaMemberDescriptor *member_descriptor;
744
+ jsval idval;
745
+ JNIEnv *jEnv;
746
+ JSJavaThreadState *jsj_env;
747
+ JSObject *proto_chain;
748
+ JSJPropertyInfo prop_info;
749
+ JSBool result;
750
+
751
+ /* printf("In JavaObject_setProperty\n"); */
752
+
753
+ /* Get the Java per-thread environment pointer for this JSContext */
754
+ jsj_env = jsj_EnterJava(cx, &jEnv);
755
+ if (!jEnv)
756
+ return JS_FALSE;
757
+
758
+ prop_info.wantProp = JS_FALSE;
759
+ if (!lookup_member_by_id(cx, jEnv, obj, &java_wrapper, id, &member_descriptor, NULL,
760
+ &proto_chain, &prop_info)) {
761
+ jsj_ExitJava(jsj_env);
762
+ return JS_FALSE;
763
+ }
764
+
765
+ /* Could be assignment to magic JS __proto__ property rather than a Java field */
766
+ if (!member_descriptor) {
767
+ if (proto_chain && (prop_info.attributes & JSPROP_SHARED)) {
768
+ JS_SetProperty(cx, proto_chain, prop_info.name, vp);
769
+ } else {
770
+ JS_IdToValue(cx, id, &idval);
771
+ if (!JSVAL_IS_STRING(idval))
772
+ goto no_such_field;
773
+ member_name = JS_GetStringBytes(JSVAL_TO_STRING(idval));
774
+ if (strcmp(member_name, "__proto__"))
775
+ goto no_such_field;
776
+ if (!JSVAL_IS_OBJECT(*vp)) {
777
+ JS_ReportErrorNumber(cx, jsj_GetErrorMessage, NULL,
778
+ JSJMSG_BAD_PROTO_ASSIGNMENT);
779
+ jsj_ExitJava(jsj_env);
780
+ return JS_FALSE;
781
+ }
782
+ JS_SetPrototype(cx, obj, JSVAL_TO_OBJECT(*vp));
783
+ }
784
+ jsj_ExitJava(jsj_env);
785
+ return JS_TRUE;
786
+ }
787
+
788
+ /* Check for the case where there is a method with the given name, but no field
789
+ with that name */
790
+ if (!member_descriptor->field)
791
+ goto no_such_field;
792
+
793
+ /* Silently fail if field value is final (immutable), as required by ECMA spec */
794
+ if (member_descriptor->field->modifiers & ACC_FINAL) {
795
+ jsj_ExitJava(jsj_env);
796
+ return JS_TRUE;
797
+ }
798
+
799
+ java_obj = java_wrapper->java_obj;
800
+
801
+ if (jaApplet && (*jEnv)->IsInstanceOf(jEnv, java_obj, jaApplet)) {
802
+ jsj_JSIsCallingApplet = JS_TRUE;
803
+ }
804
+
805
+ result = jsj_SetJavaFieldValue(cx, jEnv, member_descriptor->field, java_obj, *vp);
806
+ jsj_ExitJava(jsj_env);
807
+ return result;
808
+
809
+ no_such_field:
810
+ JS_IdToValue(cx, id, &idval);
811
+ member_name = JS_GetStringBytes(JSVAL_TO_STRING(idval));
812
+ class_descriptor = java_wrapper->class_descriptor;
813
+ JS_ReportErrorNumber(cx, jsj_GetErrorMessage, NULL,
814
+ JSJMSG_NO_NAME_IN_CLASS,
815
+ member_name, class_descriptor->name);
816
+ jsj_ExitJava(jsj_env);
817
+ return JS_FALSE;
818
+ }
819
+
820
+ static JSBool
821
+ JavaObject_lookupProperty(JSContext *cx, JSObject *obj, jsid id,
822
+ JSObject **objp, JSProperty **propp)
823
+ {
824
+ JNIEnv *jEnv;
825
+ JSErrorReporter old_reporter;
826
+ jsval dummy_val;
827
+ JSObject *proto_chain;
828
+ JSJPropertyInfo prop_info;
829
+ JSJavaThreadState *jsj_env;
830
+
831
+ /* printf("In JavaObject_lookupProperty()\n"); */
832
+
833
+ /* Get the Java per-thread environment pointer for this JSContext */
834
+ jsj_env = jsj_EnterJava(cx, &jEnv);
835
+ if (!jEnv)
836
+ return JS_FALSE;
837
+
838
+ old_reporter = JS_SetErrorReporter(cx, NULL);
839
+ prop_info.wantProp = JS_TRUE;
840
+ if (lookup_member_by_id(cx, jEnv, obj, NULL, id, NULL, &dummy_val,
841
+ &proto_chain, &prop_info)) {
842
+ /* signify that the property is in the prototype chain or the object itself. */
843
+ if (proto_chain) {
844
+ *objp = proto_chain;
845
+ *propp = prop_info.prop;
846
+ } else {
847
+ *objp = obj;
848
+ *propp = (JSProperty*)1;
849
+ }
850
+ } else {
851
+ *objp = NULL;
852
+ *propp = NULL;
853
+ }
854
+
855
+ JS_SetErrorReporter(cx, old_reporter);
856
+ jsj_ExitJava(jsj_env);
857
+ return JS_TRUE;
858
+ }
859
+
860
+ static JSBool
861
+ JavaObject_defineProperty(JSContext *cx, JSObject *obj, jsid id, jsval value,
862
+ JSPropertyOp getter, JSPropertyOp setter,
863
+ uintN attrs, JSProperty **propp)
864
+ {
865
+ JS_ReportErrorNumber(cx, jsj_GetErrorMessage, NULL,
866
+ JSJMSG_JOBJECT_PROP_DEFINE);
867
+ return JS_FALSE;
868
+ }
869
+
870
+ static JSBool
871
+ JavaObject_getAttributes(JSContext *cx, JSObject *obj, jsid id,
872
+ JSProperty *prop, uintN *attrsp)
873
+ {
874
+ /* We don't maintain JS property attributes for Java class members */
875
+ *attrsp = JSPROP_PERMANENT|JSPROP_ENUMERATE;
876
+ return JS_TRUE;
877
+ }
878
+
879
+ static JSBool
880
+ JavaObject_setAttributes(JSContext *cx, JSObject *obj, jsid id,
881
+ JSProperty *prop, uintN *attrsp)
882
+ {
883
+ /* We don't maintain JS property attributes for Java class members */
884
+ if (*attrsp != (JSPROP_PERMANENT|JSPROP_ENUMERATE)) {
885
+ JS_ASSERT(0);
886
+ return JS_FALSE;
887
+ }
888
+
889
+ /* Silently ignore all setAttribute attempts */
890
+ return JS_TRUE;
891
+ }
892
+
893
+ static JSBool
894
+ JavaObject_deleteProperty(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
895
+ {
896
+ JSVersion version = JS_GetVersion(cx);
897
+
898
+ *vp = JSVAL_FALSE;
899
+
900
+ if (!JSVERSION_IS_ECMA(version)) {
901
+ JS_ReportErrorNumber(cx, jsj_GetErrorMessage, NULL,
902
+ JSJMSG_JOBJECT_PROP_DELETE);
903
+ return JS_FALSE;
904
+ } else {
905
+ /* Attempts to delete permanent properties are silently ignored
906
+ by ECMAScript. */
907
+ return JS_TRUE;
908
+ }
909
+ }
910
+
911
+ static JSBool
912
+ JavaObject_defaultValue(JSContext *cx, JSObject *obj, JSType type, jsval *vp)
913
+ {
914
+ /* printf("In JavaObject_defaultValue()\n"); */
915
+ return JavaObject_convert(cx, obj, type, vp);
916
+ }
917
+
918
+ static JSBool
919
+ JavaObject_newEnumerate(JSContext *cx, JSObject *obj, JSIterateOp enum_op,
920
+ jsval *statep, jsid *idp)
921
+ {
922
+ JavaObjectWrapper *java_wrapper;
923
+ JavaMemberDescriptor *member_descriptor;
924
+ JavaClassDescriptor *class_descriptor;
925
+ JNIEnv *jEnv;
926
+ JSJavaThreadState *jsj_env;
927
+
928
+ java_wrapper = JS_GetPrivate(cx, obj);
929
+ /* Check for prototype object */
930
+ if (!java_wrapper) {
931
+ *statep = JSVAL_NULL;
932
+ if (idp)
933
+ *idp = INT_TO_JSVAL(0);
934
+ return JS_TRUE;
935
+ }
936
+
937
+ class_descriptor = java_wrapper->class_descriptor;
938
+
939
+ switch(enum_op) {
940
+ case JSENUMERATE_INIT:
941
+
942
+ /* Get the Java per-thread environment pointer for this JSContext */
943
+ jsj_env = jsj_EnterJava(cx, &jEnv);
944
+ if (!jEnv)
945
+ return JS_FALSE;
946
+
947
+ member_descriptor = jsj_GetClassInstanceMembers(cx, jEnv, class_descriptor);
948
+ *statep = PRIVATE_TO_JSVAL(member_descriptor);
949
+ if (idp)
950
+ *idp = INT_TO_JSVAL(class_descriptor->num_instance_members);
951
+ jsj_ExitJava(jsj_env);
952
+ return JS_TRUE;
953
+
954
+ case JSENUMERATE_NEXT:
955
+ member_descriptor = JSVAL_TO_PRIVATE(*statep);
956
+ if (member_descriptor) {
957
+
958
+ /* Don't enumerate explicit-signature methods, i.e. enumerate toValue,
959
+ but not toValue(int), toValue(double), etc. */
960
+ while (member_descriptor->methods && member_descriptor->methods->is_alias) {
961
+ member_descriptor = member_descriptor->next;
962
+ if (!member_descriptor) {
963
+ *statep = JSVAL_NULL;
964
+ return JS_TRUE;
965
+ }
966
+ }
967
+
968
+ *idp = member_descriptor->id;
969
+ *statep = PRIVATE_TO_JSVAL(member_descriptor->next);
970
+ return JS_TRUE;
971
+ }
972
+
973
+ /* Fall through ... */
974
+
975
+ case JSENUMERATE_DESTROY:
976
+ *statep = JSVAL_NULL;
977
+ return JS_TRUE;
978
+
979
+ default:
980
+ JS_ASSERT(0);
981
+ return JS_FALSE;
982
+ }
983
+ }
984
+
985
+ static JSBool
986
+ JavaObject_checkAccess(JSContext *cx, JSObject *obj, jsid id,
987
+ JSAccessMode mode, jsval *vp, uintN *attrsp)
988
+ {
989
+ switch (mode) {
990
+ case JSACC_WATCH:
991
+ JS_ReportErrorNumber(cx, jsj_GetErrorMessage, NULL,
992
+ JSJMSG_JOBJECT_PROP_WATCH);
993
+ return JS_FALSE;
994
+
995
+ default:
996
+ return JS_TRUE;
997
+ }
998
+ }
999
+
1000
+ #define JSJ_SLOT_COUNT (JSSLOT_PRIVATE+1)
1001
+
1002
+ jsval
1003
+ jsj_wrapper_getRequiredSlot(JSContext *cx, JSObject *obj, uint32 slot)
1004
+ {
1005
+ JS_ASSERT(slot < JSJ_SLOT_COUNT);
1006
+ return STOBJ_GET_SLOT(obj, slot);
1007
+ }
1008
+
1009
+ JSBool
1010
+ jsj_wrapper_setRequiredSlot(JSContext *cx, JSObject *obj, uint32 slot, jsval v)
1011
+ {
1012
+ JS_ASSERT(slot < JSJ_SLOT_COUNT);
1013
+ STOBJ_SET_SLOT(obj, slot, v);
1014
+ return JS_TRUE;
1015
+ }
1016
+
1017
+ extern JSObjectOps JavaObject_ops;
1018
+
1019
+ static const JSObjectMap JavaObjectMap = { &JavaObject_ops };
1020
+
1021
+ JSObjectOps JavaObject_ops = {
1022
+ &JavaObjectMap, /* objectMap */
1023
+
1024
+ /* Mandatory non-null function pointer members. */
1025
+ JavaObject_lookupProperty,
1026
+ JavaObject_defineProperty,
1027
+ JavaObject_getPropertyById, /* getProperty */
1028
+ JavaObject_setPropertyById, /* setProperty */
1029
+ JavaObject_getAttributes,
1030
+ JavaObject_setAttributes,
1031
+ JavaObject_deleteProperty,
1032
+ JavaObject_defaultValue,
1033
+ JavaObject_newEnumerate,
1034
+ JavaObject_checkAccess,
1035
+
1036
+ /* Optionally non-null members start here. */
1037
+ NULL, /* thisObject */
1038
+ NULL, /* dropProperty */
1039
+ NULL, /* call */
1040
+ NULL, /* construct */
1041
+ NULL, /* hasInstance */
1042
+ NULL, /* trace */
1043
+ NULL, /* clear */
1044
+ jsj_wrapper_getRequiredSlot, /* getRequiredSlot */
1045
+ jsj_wrapper_setRequiredSlot /* setRequiredSlot */
1046
+ };
1047
+
1048
+ static JSObjectOps *
1049
+ JavaObject_getObjectOps(JSContext *cx, JSClass *clazz)
1050
+ {
1051
+ return &JavaObject_ops;
1052
+ }
1053
+
1054
+ JSClass JavaObject_class = {
1055
+ "JavaObject", JSCLASS_HAS_PRIVATE,
1056
+ NULL, NULL, NULL, NULL,
1057
+ NULL, NULL, JavaObject_convert, JavaObject_finalize,
1058
+
1059
+ /* Optionally non-null members start here. */
1060
+ JavaObject_getObjectOps,
1061
+ NULL, /* checkAccess */
1062
+ NULL, /* call */
1063
+ NULL, /* construct */
1064
+ NULL, /* xdrObject */
1065
+ NULL, /* hasInstance */
1066
+ NULL, /* mark */
1067
+ 0, /* spare */
1068
+ };
1069
+
1070
+ extern JS_IMPORT_DATA(JSObjectOps) js_ObjectOps;
1071
+
1072
+ JSBool
1073
+ jsj_init_JavaObject(JSContext *cx, JSObject *global_obj)
1074
+ {
1075
+ return JS_InitClass(cx, global_obj,
1076
+ 0, &JavaObject_class, 0, 0,
1077
+ 0, 0,
1078
+ 0, 0) != 0;
1079
+ }