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,302 @@
1
+ /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2
+ *
3
+ * ***** BEGIN LICENSE BLOCK *****
4
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
5
+ *
6
+ * The contents of this file are subject to the Mozilla Public License Version
7
+ * 1.1 (the "License"); you may not use this file except in compliance with
8
+ * the License. You may obtain a copy of the License at
9
+ * http://www.mozilla.org/MPL/
10
+ *
11
+ * Software distributed under the License is distributed on an "AS IS" basis,
12
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13
+ * for the specific language governing rights and limitations under the
14
+ * License.
15
+ *
16
+ * The Original Code is Mozilla Communicator client code, released
17
+ * March 31, 1998.
18
+ *
19
+ * The Initial Developer of the Original Code is
20
+ * Netscape Communications Corporation.
21
+ * Portions created by the Initial Developer are Copyright (C) 1998
22
+ * the Initial Developer. All Rights Reserved.
23
+ *
24
+ * Contributor(s):
25
+ * John Bandhauer <jband@netscape.com> (original author)
26
+ *
27
+ * Alternatively, the contents of this file may be used under the terms of
28
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
29
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
30
+ * in which case the provisions of the GPL or the LGPL are applicable instead
31
+ * of those above. If you wish to allow use of your version of this file only
32
+ * under the terms of either the GPL or the LGPL, and not to allow others to
33
+ * use your version of this file under the terms of the MPL, indicate your
34
+ * decision by deleting the provisions above and replace them with the notice
35
+ * and other provisions required by the GPL or the LGPL. If you do not delete
36
+ * the provisions above, a recipient may use your version of this file under
37
+ * the terms of any one of the MPL, the GPL or the LGPL.
38
+ *
39
+ * ***** END LICENSE BLOCK ***** */
40
+
41
+ /* Possibly shared proto object for XPCWrappedNative. */
42
+
43
+ #include "xpcprivate.h"
44
+
45
+ #if defined(DEBUG_xpc_hacker) || defined(DEBUG)
46
+ PRInt32 XPCWrappedNativeProto::gDEBUG_LiveProtoCount = 0;
47
+ #endif
48
+
49
+ XPCWrappedNativeProto::XPCWrappedNativeProto(XPCWrappedNativeScope* Scope,
50
+ nsIClassInfo* ClassInfo,
51
+ PRUint32 ClassInfoFlags,
52
+ XPCNativeSet* Set,
53
+ QITableEntry* offsets)
54
+ : mScope(Scope),
55
+ mJSProtoObject(nsnull),
56
+ mClassInfo(ClassInfo),
57
+ mClassInfoFlags(ClassInfoFlags),
58
+ mSet(Set),
59
+ mSecurityInfo(nsnull),
60
+ mScriptableInfo(nsnull),
61
+ mOffsets(offsets)
62
+ {
63
+ // This native object lives as long as its associated JSObject - killed
64
+ // by finalization of the JSObject (or explicitly if Init fails).
65
+
66
+ MOZ_COUNT_CTOR(XPCWrappedNativeProto);
67
+
68
+ #ifdef DEBUG
69
+ PR_AtomicIncrement(&gDEBUG_LiveProtoCount);
70
+ #endif
71
+ }
72
+
73
+ XPCWrappedNativeProto::~XPCWrappedNativeProto()
74
+ {
75
+ NS_ASSERTION(!mJSProtoObject, "JSProtoObject still alive");
76
+
77
+ MOZ_COUNT_DTOR(XPCWrappedNativeProto);
78
+
79
+ #ifdef DEBUG
80
+ PR_AtomicDecrement(&gDEBUG_LiveProtoCount);
81
+ #endif
82
+
83
+ // Note that our weak ref to mScope is not to be trusted at this point.
84
+
85
+ XPCNativeSet::ClearCacheEntryForClassInfo(mClassInfo);
86
+
87
+ delete mScriptableInfo;
88
+ }
89
+
90
+ JSBool
91
+ XPCWrappedNativeProto::Init(
92
+ XPCCallContext& ccx,
93
+ JSBool isGlobal,
94
+ const XPCNativeScriptableCreateInfo* scriptableCreateInfo)
95
+ {
96
+ if(scriptableCreateInfo && scriptableCreateInfo->GetCallback())
97
+ {
98
+ mScriptableInfo =
99
+ XPCNativeScriptableInfo::Construct(ccx, isGlobal, scriptableCreateInfo);
100
+ if(!mScriptableInfo)
101
+ return JS_FALSE;
102
+ }
103
+
104
+ JSClass* jsclazz;
105
+
106
+
107
+ if(mScriptableInfo)
108
+ {
109
+ const XPCNativeScriptableFlags& flags(mScriptableInfo->GetFlags());
110
+
111
+ if(flags.AllowPropModsToPrototype())
112
+ {
113
+ jsclazz = flags.WantCall() ?
114
+ &XPC_WN_ModsAllowed_WithCall_Proto_JSClass :
115
+ &XPC_WN_ModsAllowed_NoCall_Proto_JSClass;
116
+ }
117
+ else
118
+ {
119
+ jsclazz = flags.WantCall() ?
120
+ &XPC_WN_NoMods_WithCall_Proto_JSClass :
121
+ &XPC_WN_NoMods_NoCall_Proto_JSClass;
122
+ }
123
+ }
124
+ else
125
+ {
126
+ jsclazz = &XPC_WN_NoMods_NoCall_Proto_JSClass;
127
+ }
128
+
129
+ JSObject *parent = mScope->GetGlobalJSObject();
130
+
131
+ mJSProtoObject =
132
+ xpc_NewSystemInheritingJSObject(ccx, jsclazz,
133
+ mScope->GetPrototypeJSObject(),
134
+ parent);
135
+
136
+ JSBool ok = mJSProtoObject && JS_SetPrivate(ccx, mJSProtoObject, this);
137
+
138
+ if(ok && scriptableCreateInfo)
139
+ {
140
+ nsIXPCScriptable *callback = scriptableCreateInfo->GetCallback();
141
+ if(callback)
142
+ {
143
+ nsresult rv = callback->PostCreatePrototype(ccx, mJSProtoObject);
144
+ if(NS_FAILED(rv))
145
+ {
146
+ XPCThrower::Throw(rv, ccx);
147
+ return JS_FALSE;
148
+ }
149
+ }
150
+ }
151
+
152
+ DEBUG_ReportShadowedMembers(mSet, nsnull, this);
153
+
154
+ return ok;
155
+ }
156
+
157
+ void
158
+ XPCWrappedNativeProto::JSProtoObjectFinalized(JSContext *cx, JSObject *obj)
159
+ {
160
+ NS_ASSERTION(obj == mJSProtoObject, "huh?");
161
+
162
+ // Map locking is not necessary since we are running gc.
163
+
164
+ if(IsShared())
165
+ {
166
+ // Only remove this proto from the map if it is the one in the map.
167
+ ClassInfo2WrappedNativeProtoMap* map =
168
+ GetScope()->GetWrappedNativeProtoMap();
169
+ if(map->Find(mClassInfo) == this)
170
+ map->Remove(mClassInfo);
171
+ }
172
+
173
+ GetRuntime()->GetDetachedWrappedNativeProtoMap()->Remove(this);
174
+ GetRuntime()->GetDyingWrappedNativeProtoMap()->Add(this);
175
+
176
+ mJSProtoObject = nsnull;
177
+ }
178
+
179
+ void
180
+ XPCWrappedNativeProto::SystemIsBeingShutDown(JSContext* cx)
181
+ {
182
+ // Note that the instance might receive this call multiple times
183
+ // as we walk to here from various places.
184
+
185
+ #ifdef XPC_TRACK_PROTO_STATS
186
+ static PRBool DEBUG_DumpedStats = PR_FALSE;
187
+ if(!DEBUG_DumpedStats)
188
+ {
189
+ printf("%d XPCWrappedNativeProto(s) alive at shutdown\n",
190
+ gDEBUG_LiveProtoCount);
191
+ DEBUG_DumpedStats = PR_TRUE;
192
+ }
193
+ #endif
194
+
195
+ if(mJSProtoObject)
196
+ {
197
+ // short circuit future finalization
198
+ JS_SetPrivate(cx, mJSProtoObject, nsnull);
199
+ mJSProtoObject = nsnull;
200
+ }
201
+ }
202
+
203
+ // static
204
+ XPCWrappedNativeProto*
205
+ XPCWrappedNativeProto::GetNewOrUsed(XPCCallContext& ccx,
206
+ XPCWrappedNativeScope* Scope,
207
+ nsIClassInfo* ClassInfo,
208
+ const XPCNativeScriptableCreateInfo* ScriptableCreateInfo,
209
+ JSBool ForceNoSharing,
210
+ JSBool isGlobal,
211
+ QITableEntry* offsets)
212
+ {
213
+ NS_ASSERTION(Scope, "bad param");
214
+ NS_ASSERTION(ClassInfo, "bad param");
215
+
216
+ AutoMarkingWrappedNativeProtoPtr proto(ccx);
217
+ ClassInfo2WrappedNativeProtoMap* map;
218
+ XPCLock* lock;
219
+ JSBool shared;
220
+
221
+ JSUint32 ciFlags;
222
+ if(NS_FAILED(ClassInfo->GetFlags(&ciFlags)))
223
+ ciFlags = 0;
224
+
225
+ if(ciFlags & XPC_PROTO_DONT_SHARE)
226
+ {
227
+ NS_ERROR("reserved flag set!");
228
+ ciFlags &= ~XPC_PROTO_DONT_SHARE;
229
+ }
230
+
231
+ if(ForceNoSharing || (ciFlags & nsIClassInfo::PLUGIN_OBJECT) ||
232
+ (ScriptableCreateInfo &&
233
+ ScriptableCreateInfo->GetFlags().DontSharePrototype()))
234
+ {
235
+ ciFlags |= XPC_PROTO_DONT_SHARE;
236
+ shared = JS_FALSE;
237
+ }
238
+ else
239
+ {
240
+ shared = JS_TRUE;
241
+ }
242
+
243
+ if(shared)
244
+ {
245
+ map = Scope->GetWrappedNativeProtoMap();
246
+ lock = Scope->GetRuntime()->GetMapLock();
247
+ { // scoped lock
248
+ XPCAutoLock al(lock);
249
+ proto = map->Find(ClassInfo);
250
+ if(proto)
251
+ return proto;
252
+ }
253
+ }
254
+
255
+ AutoMarkingNativeSetPtr set(ccx);
256
+ set = XPCNativeSet::GetNewOrUsed(ccx, ClassInfo);
257
+ if(!set)
258
+ return nsnull;
259
+
260
+ proto = new XPCWrappedNativeProto(Scope, ClassInfo, ciFlags, set, offsets);
261
+
262
+ if(!proto || !proto->Init(ccx, isGlobal, ScriptableCreateInfo))
263
+ {
264
+ delete proto.get();
265
+ return nsnull;
266
+ }
267
+
268
+ if(shared)
269
+ { // scoped lock
270
+ XPCAutoLock al(lock);
271
+ map->Add(ClassInfo, proto);
272
+ }
273
+
274
+ return proto;
275
+ }
276
+
277
+ void
278
+ XPCWrappedNativeProto::DebugDump(PRInt16 depth)
279
+ {
280
+ #ifdef DEBUG
281
+ depth-- ;
282
+ XPC_LOG_ALWAYS(("XPCWrappedNativeProto @ %x", this));
283
+ XPC_LOG_INDENT();
284
+ XPC_LOG_ALWAYS(("gDEBUG_LiveProtoCount is %d", gDEBUG_LiveProtoCount));
285
+ XPC_LOG_ALWAYS(("mScope @ %x", mScope));
286
+ XPC_LOG_ALWAYS(("mJSProtoObject @ %x", mJSProtoObject));
287
+ XPC_LOG_ALWAYS(("mSet @ %x", mSet));
288
+ XPC_LOG_ALWAYS(("mSecurityInfo of %x", mSecurityInfo));
289
+ XPC_LOG_ALWAYS(("mScriptableInfo @ %x", mScriptableInfo));
290
+ if(depth && mScriptableInfo)
291
+ {
292
+ XPC_LOG_INDENT();
293
+ XPC_LOG_ALWAYS(("mScriptable @ %x", mScriptableInfo->GetCallback()));
294
+ XPC_LOG_ALWAYS(("mFlags of %x", (PRUint32)mScriptableInfo->GetFlags()));
295
+ XPC_LOG_ALWAYS(("mJSClass @ %x", mScriptableInfo->GetJSClass()));
296
+ XPC_LOG_OUTDENT();
297
+ }
298
+ XPC_LOG_OUTDENT();
299
+ #endif
300
+ }
301
+
302
+
@@ -0,0 +1,991 @@
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) 1999
22
+ * the Initial Developer. All Rights Reserved.
23
+ *
24
+ * Contributor(s):
25
+ * John Bandhauer <jband@netscape.com> (original author)
26
+ *
27
+ * Alternatively, the contents of this file may be used under the terms of
28
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
29
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
30
+ * in which case the provisions of the GPL or the LGPL are applicable instead
31
+ * of those above. If you wish to allow use of your version of this file only
32
+ * under the terms of either the GPL or the LGPL, and not to allow others to
33
+ * use your version of this file under the terms of the MPL, indicate your
34
+ * decision by deleting the provisions above and replace them with the notice
35
+ * and other provisions required by the GPL or the LGPL. If you do not delete
36
+ * the provisions above, a recipient may use your version of this file under
37
+ * the terms of any one of the MPL, the GPL or the LGPL.
38
+ *
39
+ * ***** END LICENSE BLOCK ***** */
40
+
41
+ /* Class used to manage the wrapped native objects within a JS scope. */
42
+
43
+ #include "xpcprivate.h"
44
+ #ifdef DEBUG
45
+ #include "XPCNativeWrapper.h"
46
+ #endif
47
+
48
+ /***************************************************************************/
49
+
50
+ #ifdef XPC_TRACK_SCOPE_STATS
51
+ static int DEBUG_TotalScopeCount;
52
+ static int DEBUG_TotalLiveScopeCount;
53
+ static int DEBUG_TotalMaxScopeCount;
54
+ static int DEBUG_TotalScopeTraversalCount;
55
+ static PRBool DEBUG_DumpedStats;
56
+ #endif
57
+
58
+ #ifdef DEBUG
59
+ static void DEBUG_TrackNewScope(XPCWrappedNativeScope* scope)
60
+ {
61
+ #ifdef XPC_TRACK_SCOPE_STATS
62
+ DEBUG_TotalScopeCount++;
63
+ DEBUG_TotalLiveScopeCount++;
64
+ if(DEBUG_TotalMaxScopeCount < DEBUG_TotalLiveScopeCount)
65
+ DEBUG_TotalMaxScopeCount = DEBUG_TotalLiveScopeCount;
66
+ #endif
67
+ }
68
+
69
+ static void DEBUG_TrackDeleteScope(XPCWrappedNativeScope* scope)
70
+ {
71
+ #ifdef XPC_TRACK_SCOPE_STATS
72
+ DEBUG_TotalLiveScopeCount--;
73
+ #endif
74
+ }
75
+
76
+ static void DEBUG_TrackScopeTraversal()
77
+ {
78
+ #ifdef XPC_TRACK_SCOPE_STATS
79
+ DEBUG_TotalScopeTraversalCount++;
80
+ #endif
81
+ }
82
+
83
+ static void DEBUG_TrackScopeShutdown()
84
+ {
85
+ #ifdef XPC_TRACK_SCOPE_STATS
86
+ if(!DEBUG_DumpedStats)
87
+ {
88
+ DEBUG_DumpedStats = PR_TRUE;
89
+ printf("%d XPCWrappedNativeScope(s) were constructed.\n",
90
+ DEBUG_TotalScopeCount);
91
+
92
+ printf("%d XPCWrappedNativeScopes(s) max alive at one time.\n",
93
+ DEBUG_TotalMaxScopeCount);
94
+
95
+ printf("%d XPCWrappedNativeScope(s) alive now.\n" ,
96
+ DEBUG_TotalLiveScopeCount);
97
+
98
+ printf("%d traversals of Scope list.\n",
99
+ DEBUG_TotalScopeTraversalCount);
100
+ }
101
+ #endif
102
+ }
103
+ #else
104
+ #define DEBUG_TrackNewScope(scope) ((void)0)
105
+ #define DEBUG_TrackDeleteScope(scope) ((void)0)
106
+ #define DEBUG_TrackScopeTraversal() ((void)0)
107
+ #define DEBUG_TrackScopeShutdown() ((void)0)
108
+ #endif
109
+
110
+ /***************************************************************************/
111
+
112
+ XPCWrappedNativeScope* XPCWrappedNativeScope::gScopes = nsnull;
113
+ XPCWrappedNativeScope* XPCWrappedNativeScope::gDyingScopes = nsnull;
114
+
115
+ // static
116
+ XPCWrappedNativeScope*
117
+ XPCWrappedNativeScope::GetNewOrUsed(XPCCallContext& ccx, JSObject* aGlobal)
118
+ {
119
+
120
+ XPCWrappedNativeScope* scope = FindInJSObjectScope(ccx, aGlobal, JS_TRUE);
121
+ if(!scope)
122
+ scope = new XPCWrappedNativeScope(ccx, aGlobal);
123
+ else
124
+ {
125
+ // We need to call SetGlobal in order to refresh our cached
126
+ // mPrototypeJSObject and mPrototypeJSFunction and to clear
127
+ // mPrototypeNoHelper (so we get a new one if requested in the
128
+ // new scope) in the case where the global object is being
129
+ // reused (JS_ClearScope has been called). NOTE: We are only
130
+ // called by nsXPConnect::InitClasses.
131
+ scope->SetGlobal(ccx, aGlobal);
132
+ }
133
+ return scope;
134
+ }
135
+
136
+ XPCWrappedNativeScope::XPCWrappedNativeScope(XPCCallContext& ccx,
137
+ JSObject* aGlobal)
138
+ : mRuntime(ccx.GetRuntime()),
139
+ mWrappedNativeMap(Native2WrappedNativeMap::newMap(XPC_NATIVE_MAP_SIZE)),
140
+ mWrappedNativeProtoMap(ClassInfo2WrappedNativeProtoMap::newMap(XPC_NATIVE_PROTO_MAP_SIZE)),
141
+ mWrapperMap(WrappedNative2WrapperMap::newMap(XPC_WRAPPER_MAP_SIZE)),
142
+ mComponents(nsnull),
143
+ mNext(nsnull),
144
+ mGlobalJSObject(nsnull),
145
+ mPrototypeJSObject(nsnull),
146
+ mPrototypeJSFunction(nsnull),
147
+ mPrototypeNoHelper(nsnull)
148
+ {
149
+ // add ourselves to the scopes list
150
+ { // scoped lock
151
+ XPCAutoLock lock(mRuntime->GetMapLock());
152
+
153
+ #ifdef DEBUG
154
+ for(XPCWrappedNativeScope* cur = gScopes; cur; cur = cur->mNext)
155
+ NS_ASSERTION(aGlobal != cur->GetGlobalJSObject(), "dup object");
156
+ #endif
157
+
158
+ mNext = gScopes;
159
+ gScopes = this;
160
+
161
+ // Grab the XPCContext associated with our context.
162
+ mContext = XPCContext::GetXPCContext(ccx.GetJSContext());
163
+ mContext->AddScope(this);
164
+ }
165
+
166
+ if(aGlobal)
167
+ SetGlobal(ccx, aGlobal);
168
+
169
+ DEBUG_TrackNewScope(this);
170
+ MOZ_COUNT_CTOR(XPCWrappedNativeScope);
171
+ }
172
+
173
+ // static
174
+ JSBool
175
+ XPCWrappedNativeScope::IsDyingScope(XPCWrappedNativeScope *scope)
176
+ {
177
+ for(XPCWrappedNativeScope *cur = gDyingScopes; cur; cur = cur->mNext)
178
+ {
179
+ if(scope == cur)
180
+ return JS_TRUE;
181
+ }
182
+ return JS_FALSE;
183
+ }
184
+
185
+ void
186
+ XPCWrappedNativeScope::SetComponents(nsXPCComponents* aComponents)
187
+ {
188
+ NS_IF_ADDREF(aComponents);
189
+ NS_IF_RELEASE(mComponents);
190
+ mComponents = aComponents;
191
+ }
192
+
193
+ // Dummy JS class to let wrappers w/o an xpc prototype share
194
+ // scopes. By doing this we avoid allocating a new scope for every
195
+ // wrapper on creation of the wrapper, and most wrappers won't need
196
+ // their own scope at all for the lifetime of the wrapper.
197
+ // JSCLASS_HAS_PRIVATE is key here (even though there's never anything
198
+ // in the private data slot in these prototypes), as the number of
199
+ // reserved slots in this class needs to match that of the wrappers
200
+ // for the JS engine to share scopes.
201
+
202
+ JSClass XPC_WN_NoHelper_Proto_JSClass = {
203
+ "XPC_WN_NoHelper_Proto_JSClass",// name;
204
+ JSCLASS_HAS_PRIVATE, // flags;
205
+
206
+ /* Mandatory non-null function pointer members. */
207
+ JS_PropertyStub, // addProperty;
208
+ JS_PropertyStub, // delProperty;
209
+ JS_PropertyStub, // getProperty;
210
+ JS_PropertyStub, // setProperty;
211
+ JS_EnumerateStub, // enumerate;
212
+ JS_ResolveStub, // resolve;
213
+ JS_ConvertStub, // convert;
214
+ JS_FinalizeStub, // finalize;
215
+
216
+ /* Optionally non-null members start here. */
217
+ XPC_WN_Proto_GetObjectOps, // getObjectOps;
218
+ nsnull, // checkAccess;
219
+ nsnull, // call;
220
+ nsnull, // construct;
221
+ nsnull, // xdrObject;
222
+ nsnull, // hasInstance;
223
+ nsnull, // mark/trace;
224
+ nsnull // spare;
225
+ };
226
+
227
+
228
+ void
229
+ XPCWrappedNativeScope::SetGlobal(XPCCallContext& ccx, JSObject* aGlobal)
230
+ {
231
+ // We allow for calling this more than once. This feature is used by
232
+ // nsXPConnect::InitClassesWithNewWrappedGlobal.
233
+
234
+ mGlobalJSObject = aGlobal;
235
+ #ifndef XPCONNECT_STANDALONE
236
+ mScriptObjectPrincipal = nsnull;
237
+ // Now init our script object principal, if the new global has one
238
+
239
+ const JSClass* jsClass = STOBJ_GET_CLASS(aGlobal);
240
+ if(!(~jsClass->flags & (JSCLASS_HAS_PRIVATE |
241
+ JSCLASS_PRIVATE_IS_NSISUPPORTS)))
242
+ {
243
+ // Our global has an nsISupports native pointer. Let's
244
+ // see whether it's what we want.
245
+ nsISupports* priv = (nsISupports*)xpc_GetJSPrivate(aGlobal);
246
+ nsCOMPtr<nsIXPConnectWrappedNative> native =
247
+ do_QueryInterface(priv);
248
+ if(native)
249
+ {
250
+ mScriptObjectPrincipal = do_QueryWrappedNative(native);
251
+ }
252
+ if(!mScriptObjectPrincipal)
253
+ {
254
+ mScriptObjectPrincipal = do_QueryInterface(priv);
255
+ }
256
+ }
257
+ #endif
258
+
259
+ // Lookup 'globalObject.Object.prototype' for our wrapper's proto
260
+ {
261
+ AutoJSErrorAndExceptionEater eater(ccx); // scoped error eater
262
+
263
+ jsval val;
264
+ jsid idObj = mRuntime->GetStringID(XPCJSRuntime::IDX_OBJECT);
265
+ jsid idFun = mRuntime->GetStringID(XPCJSRuntime::IDX_FUNCTION);
266
+ jsid idProto = mRuntime->GetStringID(XPCJSRuntime::IDX_PROTOTYPE);
267
+
268
+ if(JS_GetPropertyById(ccx, aGlobal, idObj, &val) &&
269
+ !JSVAL_IS_PRIMITIVE(val) &&
270
+ JS_GetPropertyById(ccx, JSVAL_TO_OBJECT(val), idProto, &val) &&
271
+ !JSVAL_IS_PRIMITIVE(val))
272
+ {
273
+ mPrototypeJSObject = JSVAL_TO_OBJECT(val);
274
+ }
275
+ else
276
+ {
277
+ NS_ERROR("Can't get globalObject.Object.prototype");
278
+ }
279
+
280
+ if(JS_GetPropertyById(ccx, aGlobal, idFun, &val) &&
281
+ !JSVAL_IS_PRIMITIVE(val) &&
282
+ JS_GetPropertyById(ccx, JSVAL_TO_OBJECT(val), idProto, &val) &&
283
+ !JSVAL_IS_PRIMITIVE(val))
284
+ {
285
+ mPrototypeJSFunction = JSVAL_TO_OBJECT(val);
286
+ }
287
+ else
288
+ {
289
+ NS_ERROR("Can't get globalObject.Function.prototype");
290
+ }
291
+ }
292
+
293
+ // Clear the no helper wrapper prototype object so that a new one
294
+ // gets created if needed.
295
+ mPrototypeNoHelper = nsnull;
296
+ }
297
+
298
+ XPCWrappedNativeScope::~XPCWrappedNativeScope()
299
+ {
300
+ MOZ_COUNT_DTOR(XPCWrappedNativeScope);
301
+ DEBUG_TrackDeleteScope(this);
302
+
303
+ // We can do additional cleanup assertions here...
304
+
305
+ if(mWrappedNativeMap)
306
+ {
307
+ NS_ASSERTION(0 == mWrappedNativeMap->Count(), "scope has non-empty map");
308
+ delete mWrappedNativeMap;
309
+ }
310
+
311
+ if(mWrappedNativeProtoMap)
312
+ {
313
+ NS_ASSERTION(0 == mWrappedNativeProtoMap->Count(), "scope has non-empty map");
314
+ delete mWrappedNativeProtoMap;
315
+ }
316
+
317
+ if(mWrapperMap)
318
+ {
319
+ NS_ASSERTION(0 == mWrapperMap->Count(), "scope has non-empty map");
320
+ delete mWrapperMap;
321
+ }
322
+
323
+ if(mContext)
324
+ mContext->RemoveScope(this);
325
+
326
+ // XXX we should assert that we are dead or that xpconnect has shutdown
327
+ // XXX might not want to do this at xpconnect shutdown time???
328
+ NS_IF_RELEASE(mComponents);
329
+ }
330
+
331
+ JSObject *
332
+ XPCWrappedNativeScope::GetPrototypeNoHelper(XPCCallContext& ccx)
333
+ {
334
+ // We could create this prototype in SetGlobal(), but all scopes
335
+ // don't need one, so we save ourselves a bit of space if we
336
+ // create these when they're needed.
337
+ if(!mPrototypeNoHelper)
338
+ {
339
+ mPrototypeNoHelper =
340
+ xpc_NewSystemInheritingJSObject(ccx, &XPC_WN_NoHelper_Proto_JSClass,
341
+ mPrototypeJSObject,
342
+ mGlobalJSObject);
343
+
344
+ NS_ASSERTION(mPrototypeNoHelper,
345
+ "Failed to create prototype for wrappers w/o a helper");
346
+ }
347
+
348
+ return mPrototypeNoHelper;
349
+ }
350
+
351
+ static JSDHashOperator
352
+ WrappedNativeJSGCThingTracer(JSDHashTable *table, JSDHashEntryHdr *hdr,
353
+ uint32 number, void *arg)
354
+ {
355
+ XPCWrappedNative* wrapper = ((Native2WrappedNativeMap::Entry*)hdr)->value;
356
+ if(wrapper->HasExternalReference() && !wrapper->IsWrapperExpired())
357
+ {
358
+ JSTracer* trc = (JSTracer *)arg;
359
+ JS_CALL_OBJECT_TRACER(trc, wrapper->GetFlatJSObject(),
360
+ "XPCWrappedNative::mFlatJSObject");
361
+ }
362
+
363
+ return JS_DHASH_NEXT;
364
+ }
365
+
366
+ // static
367
+ void
368
+ XPCWrappedNativeScope::TraceJS(JSTracer* trc, XPCJSRuntime* rt)
369
+ {
370
+ // FIXME The lock may not be necessary during tracing as that serializes
371
+ // access to JS runtime. See bug 380139.
372
+ XPCAutoLock lock(rt->GetMapLock());
373
+
374
+ // Do JS_CallTracer for all wrapped natives with external references.
375
+ for(XPCWrappedNativeScope* cur = gScopes; cur; cur = cur->mNext)
376
+ {
377
+ cur->mWrappedNativeMap->Enumerate(WrappedNativeJSGCThingTracer, trc);
378
+ }
379
+ }
380
+
381
+ struct SuspectClosure
382
+ {
383
+ SuspectClosure(JSContext *aCx, nsCycleCollectionTraversalCallback& aCb)
384
+ : cx(aCx), cb(aCb)
385
+ {
386
+ }
387
+
388
+ JSContext* cx;
389
+ nsCycleCollectionTraversalCallback& cb;
390
+ };
391
+
392
+ static JSDHashOperator
393
+ WrappedNativeSuspecter(JSDHashTable *table, JSDHashEntryHdr *hdr,
394
+ uint32 number, void *arg)
395
+ {
396
+ SuspectClosure* closure = static_cast<SuspectClosure*>(arg);
397
+ XPCWrappedNative* wrapper = ((Native2WrappedNativeMap::Entry*)hdr)->value;
398
+ if(wrapper->IsValid())
399
+ {
400
+ NS_ASSERTION(NS_IsMainThread(),
401
+ "Suspecting wrapped natives from non-main thread");
402
+
403
+ #ifndef DEBUG_CC
404
+ // Only record objects that might be part of a cycle as roots.
405
+ if(!JS_IsAboutToBeFinalized(closure->cx, wrapper->GetFlatJSObject()))
406
+ return JS_DHASH_NEXT;
407
+ #endif
408
+
409
+ closure->cb.NoteRoot(nsIProgrammingLanguage::JAVASCRIPT,
410
+ wrapper->GetFlatJSObject(),
411
+ nsXPConnect::GetXPConnect());
412
+ }
413
+
414
+ return JS_DHASH_NEXT;
415
+ }
416
+
417
+ // static
418
+ void
419
+ XPCWrappedNativeScope::SuspectAllWrappers(XPCJSRuntime* rt, JSContext* cx,
420
+ nsCycleCollectionTraversalCallback& cb)
421
+ {
422
+ XPCAutoLock lock(rt->GetMapLock());
423
+
424
+ SuspectClosure closure(cx, cb);
425
+ for(XPCWrappedNativeScope* cur = gScopes; cur; cur = cur->mNext)
426
+ {
427
+ cur->mWrappedNativeMap->Enumerate(WrappedNativeSuspecter, &closure);
428
+ }
429
+ }
430
+
431
+ // static
432
+ void
433
+ XPCWrappedNativeScope::FinishedMarkPhaseOfGC(JSContext* cx, XPCJSRuntime* rt)
434
+ {
435
+ // FIXME The lock may not be necessary since we are inside JSGC_MARK_END
436
+ // callback and GX serializes access to JS runtime. See bug 380139.
437
+ XPCAutoLock lock(rt->GetMapLock());
438
+
439
+ // We are in JSGC_MARK_END and JSGC_FINALIZE_END must always follow it
440
+ // calling FinishedFinalizationPhaseOfGC and clearing gDyingScopes in
441
+ // KillDyingScopes.
442
+ NS_ASSERTION(gDyingScopes == nsnull,
443
+ "JSGC_MARK_END without JSGC_FINALIZE_END");
444
+
445
+ XPCWrappedNativeScope* prev = nsnull;
446
+ XPCWrappedNativeScope* cur = gScopes;
447
+
448
+ while(cur)
449
+ {
450
+ XPCWrappedNativeScope* next = cur->mNext;
451
+ if(cur->mGlobalJSObject &&
452
+ JS_IsAboutToBeFinalized(cx, cur->mGlobalJSObject))
453
+ {
454
+ cur->mGlobalJSObject = nsnull;
455
+
456
+ // Move this scope from the live list to the dying list.
457
+ if(prev)
458
+ prev->mNext = next;
459
+ else
460
+ gScopes = next;
461
+ cur->mNext = gDyingScopes;
462
+ gDyingScopes = cur;
463
+ cur = nsnull;
464
+ }
465
+ else
466
+ {
467
+ if(cur->mPrototypeJSObject &&
468
+ JS_IsAboutToBeFinalized(cx, cur->mPrototypeJSObject))
469
+ {
470
+ cur->mPrototypeJSObject = nsnull;
471
+ }
472
+ if(cur->mPrototypeJSFunction &&
473
+ JS_IsAboutToBeFinalized(cx, cur->mPrototypeJSFunction))
474
+ {
475
+ cur->mPrototypeJSFunction = nsnull;
476
+ }
477
+ if(cur->mPrototypeNoHelper &&
478
+ JS_IsAboutToBeFinalized(cx, cur->mPrototypeNoHelper))
479
+ {
480
+ cur->mPrototypeNoHelper = nsnull;
481
+ }
482
+ }
483
+ if(cur)
484
+ prev = cur;
485
+ cur = next;
486
+ }
487
+ }
488
+
489
+ // static
490
+ void
491
+ XPCWrappedNativeScope::FinishedFinalizationPhaseOfGC(JSContext* cx)
492
+ {
493
+ XPCJSRuntime* rt = nsXPConnect::GetRuntimeInstance();
494
+
495
+ // FIXME The lock may not be necessary since we are inside
496
+ // JSGC_FINALIZE_END callback and at this point GC still serializes access
497
+ // to JS runtime. See bug 380139.
498
+ XPCAutoLock lock(rt->GetMapLock());
499
+ KillDyingScopes();
500
+ }
501
+
502
+ static JSDHashOperator
503
+ WrappedNativeMarker(JSDHashTable *table, JSDHashEntryHdr *hdr,
504
+ uint32 number, void *arg)
505
+ {
506
+ ((Native2WrappedNativeMap::Entry*)hdr)->value->Mark();
507
+ return JS_DHASH_NEXT;
508
+ }
509
+
510
+ // We need to explicitly mark all the protos too because some protos may be
511
+ // alive in the hashtable but not currently in use by any wrapper
512
+ static JSDHashOperator
513
+ WrappedNativeProtoMarker(JSDHashTable *table, JSDHashEntryHdr *hdr,
514
+ uint32 number, void *arg)
515
+ {
516
+ ((ClassInfo2WrappedNativeProtoMap::Entry*)hdr)->value->Mark();
517
+ return JS_DHASH_NEXT;
518
+ }
519
+
520
+ // static
521
+ void
522
+ XPCWrappedNativeScope::MarkAllWrappedNativesAndProtos()
523
+ {
524
+ for(XPCWrappedNativeScope* cur = gScopes; cur; cur = cur->mNext)
525
+ {
526
+ cur->mWrappedNativeMap->Enumerate(WrappedNativeMarker, nsnull);
527
+ cur->mWrappedNativeProtoMap->Enumerate(WrappedNativeProtoMarker, nsnull);
528
+ }
529
+
530
+ DEBUG_TrackScopeTraversal();
531
+ }
532
+
533
+ #ifdef DEBUG
534
+ static JSDHashOperator
535
+ ASSERT_WrappedNativeSetNotMarked(JSDHashTable *table, JSDHashEntryHdr *hdr,
536
+ uint32 number, void *arg)
537
+ {
538
+ ((Native2WrappedNativeMap::Entry*)hdr)->value->ASSERT_SetsNotMarked();
539
+ return JS_DHASH_NEXT;
540
+ }
541
+
542
+ static JSDHashOperator
543
+ ASSERT_WrappedNativeProtoSetNotMarked(JSDHashTable *table, JSDHashEntryHdr *hdr,
544
+ uint32 number, void *arg)
545
+ {
546
+ ((ClassInfo2WrappedNativeProtoMap::Entry*)hdr)->value->ASSERT_SetNotMarked();
547
+ return JS_DHASH_NEXT;
548
+ }
549
+
550
+ // static
551
+ void
552
+ XPCWrappedNativeScope::ASSERT_NoInterfaceSetsAreMarked()
553
+ {
554
+ for(XPCWrappedNativeScope* cur = gScopes; cur; cur = cur->mNext)
555
+ {
556
+ cur->mWrappedNativeMap->Enumerate(
557
+ ASSERT_WrappedNativeSetNotMarked, nsnull);
558
+ cur->mWrappedNativeProtoMap->Enumerate(
559
+ ASSERT_WrappedNativeProtoSetNotMarked, nsnull);
560
+ }
561
+ }
562
+ #endif
563
+
564
+ static JSDHashOperator
565
+ WrappedNativeTearoffSweeper(JSDHashTable *table, JSDHashEntryHdr *hdr,
566
+ uint32 number, void *arg)
567
+ {
568
+ ((Native2WrappedNativeMap::Entry*)hdr)->value->SweepTearOffs();
569
+ return JS_DHASH_NEXT;
570
+ }
571
+
572
+ // static
573
+ void
574
+ XPCWrappedNativeScope::SweepAllWrappedNativeTearOffs()
575
+ {
576
+ for(XPCWrappedNativeScope* cur = gScopes; cur; cur = cur->mNext)
577
+ cur->mWrappedNativeMap->Enumerate(WrappedNativeTearoffSweeper, nsnull);
578
+
579
+ DEBUG_TrackScopeTraversal();
580
+ }
581
+
582
+ // static
583
+ void
584
+ XPCWrappedNativeScope::KillDyingScopes()
585
+ {
586
+ // always called inside the lock!
587
+ XPCWrappedNativeScope* cur = gDyingScopes;
588
+ while(cur)
589
+ {
590
+ XPCWrappedNativeScope* next = cur->mNext;
591
+ delete cur;
592
+ cur = next;
593
+ }
594
+ gDyingScopes = nsnull;
595
+ }
596
+
597
+ struct ShutdownData
598
+ {
599
+ ShutdownData(JSContext* acx)
600
+ : cx(acx), wrapperCount(0),
601
+ sharedProtoCount(0), nonSharedProtoCount(0) {}
602
+ JSContext* cx;
603
+ int wrapperCount;
604
+ int sharedProtoCount;
605
+ int nonSharedProtoCount;
606
+ };
607
+
608
+ static JSDHashOperator
609
+ WrappedNativeShutdownEnumerator(JSDHashTable *table, JSDHashEntryHdr *hdr,
610
+ uint32 number, void *arg)
611
+ {
612
+ ShutdownData* data = (ShutdownData*) arg;
613
+ XPCWrappedNative* wrapper = ((Native2WrappedNativeMap::Entry*)hdr)->value;
614
+
615
+ if(wrapper->IsValid())
616
+ {
617
+ if(wrapper->HasProto() && !wrapper->HasSharedProto())
618
+ data->nonSharedProtoCount++;
619
+ wrapper->SystemIsBeingShutDown(data->cx);
620
+ data->wrapperCount++;
621
+ }
622
+ return JS_DHASH_REMOVE;
623
+ }
624
+
625
+ static JSDHashOperator
626
+ WrappedNativeProtoShutdownEnumerator(JSDHashTable *table, JSDHashEntryHdr *hdr,
627
+ uint32 number, void *arg)
628
+ {
629
+ ShutdownData* data = (ShutdownData*) arg;
630
+ ((ClassInfo2WrappedNativeProtoMap::Entry*)hdr)->value->
631
+ SystemIsBeingShutDown(data->cx);
632
+ data->sharedProtoCount++;
633
+ return JS_DHASH_REMOVE;
634
+ }
635
+
636
+ //static
637
+ void
638
+ XPCWrappedNativeScope::SystemIsBeingShutDown(JSContext* cx)
639
+ {
640
+ DEBUG_TrackScopeTraversal();
641
+ DEBUG_TrackScopeShutdown();
642
+
643
+ int liveScopeCount = 0;
644
+
645
+ ShutdownData data(cx);
646
+
647
+ XPCWrappedNativeScope* cur;
648
+
649
+ // First move all the scopes to the dying list.
650
+
651
+ cur = gScopes;
652
+ while(cur)
653
+ {
654
+ XPCWrappedNativeScope* next = cur->mNext;
655
+ cur->mNext = gDyingScopes;
656
+ gDyingScopes = cur;
657
+ cur = next;
658
+ liveScopeCount++;
659
+ }
660
+ gScopes = nsnull;
661
+
662
+ // Walk the unified dying list and call shutdown on all wrappers and protos
663
+
664
+ for(cur = gDyingScopes; cur; cur = cur->mNext)
665
+ {
666
+ // Give the Components object a chance to try to clean up.
667
+ if(cur->mComponents)
668
+ cur->mComponents->SystemIsBeingShutDown();
669
+
670
+ // Walk the protos first. Wrapper shutdown can leave dangling
671
+ // proto pointers in the proto map.
672
+ cur->mWrappedNativeProtoMap->
673
+ Enumerate(WrappedNativeProtoShutdownEnumerator, &data);
674
+ cur->mWrappedNativeMap->
675
+ Enumerate(WrappedNativeShutdownEnumerator, &data);
676
+ }
677
+
678
+ // Now it is safe to kill all the scopes.
679
+ KillDyingScopes();
680
+
681
+ #ifdef XPC_DUMP_AT_SHUTDOWN
682
+ if(data.wrapperCount)
683
+ printf("deleting nsXPConnect with %d live XPCWrappedNatives\n",
684
+ data.wrapperCount);
685
+ if(data.sharedProtoCount + data.nonSharedProtoCount)
686
+ printf("deleting nsXPConnect with %d live XPCWrappedNativeProtos (%d shared)\n",
687
+ data.sharedProtoCount + data.nonSharedProtoCount,
688
+ data.sharedProtoCount);
689
+ if(liveScopeCount)
690
+ printf("deleting nsXPConnect with %d live XPCWrappedNativeScopes\n",
691
+ liveScopeCount);
692
+ #endif
693
+ }
694
+
695
+
696
+ /***************************************************************************/
697
+
698
+ static
699
+ XPCWrappedNativeScope*
700
+ GetScopeOfObject(JSObject* obj)
701
+ {
702
+ nsISupports* supports;
703
+ JSClass* clazz = STOBJ_GET_CLASS(obj);
704
+
705
+ if(!IS_WRAPPER_CLASS(clazz) ||
706
+ !(supports = (nsISupports*) xpc_GetJSPrivate(obj)))
707
+ {
708
+ #ifdef DEBUG
709
+ {
710
+ if(!(~clazz->flags & (JSCLASS_HAS_PRIVATE |
711
+ JSCLASS_PRIVATE_IS_NSISUPPORTS)) &&
712
+ (supports = (nsISupports*) xpc_GetJSPrivate(obj)) &&
713
+ !XPCNativeWrapper::IsNativeWrapperClass(clazz))
714
+ {
715
+ nsCOMPtr<nsIXPConnectWrappedNative> iface =
716
+ do_QueryInterface(supports);
717
+
718
+ NS_ASSERTION(!iface, "Uh, how'd this happen?");
719
+ }
720
+ }
721
+ #endif
722
+
723
+ return nsnull;
724
+ }
725
+
726
+ #ifdef DEBUG
727
+ {
728
+ nsCOMPtr<nsIXPConnectWrappedNative> iface = do_QueryInterface(supports);
729
+
730
+ NS_ASSERTION(iface, "Uh, how'd this happen?");
731
+ }
732
+ #endif
733
+
734
+ // obj is one of our nsXPConnectWrappedNative objects.
735
+ return ((XPCWrappedNative*)supports)->GetScope();
736
+ }
737
+
738
+
739
+ #ifdef DEBUG
740
+ void DEBUG_CheckForComponentsInScope(JSContext* cx, JSObject* obj,
741
+ JSBool OKIfNotInitialized,
742
+ XPCJSRuntime* runtime)
743
+ {
744
+ if(OKIfNotInitialized)
745
+ return;
746
+
747
+ if(!(JS_GetOptions(cx) & JSOPTION_PRIVATE_IS_NSISUPPORTS))
748
+ return;
749
+
750
+ const char* name = runtime->GetStringName(XPCJSRuntime::IDX_COMPONENTS);
751
+ jsval prop;
752
+ if(JS_LookupProperty(cx, obj, name, &prop) && !JSVAL_IS_PRIMITIVE(prop))
753
+ return;
754
+
755
+ // This is pretty much always bad. It usually means that native code is
756
+ // making a callback to an interface implemented in JavaScript, but the
757
+ // document where the JS object was created has already been cleared and the
758
+ // global properties of that document's window are *gone*. Generally this
759
+ // indicates a problem that should be addressed in the design and use of the
760
+ // callback code.
761
+ #ifdef I_FOOLISHLY_WANT_TO_IGNORE_THIS_LIKE_THE_OTHER_CRAP_WE_PRINTF
762
+ NS_WARNING("XPConnect is being called on a scope without a 'Components' property!");
763
+ #else
764
+ NS_ERROR("XPConnect is being called on a scope without a 'Components' property!");
765
+ #endif
766
+ }
767
+ #else
768
+ #define DEBUG_CheckForComponentsInScope(ccx, obj, OKIfNotInitialized, runtime) \
769
+ ((void)0)
770
+ #endif
771
+
772
+ // static
773
+ XPCWrappedNativeScope*
774
+ XPCWrappedNativeScope::FindInJSObjectScope(JSContext* cx, JSObject* obj,
775
+ JSBool OKIfNotInitialized,
776
+ XPCJSRuntime* runtime)
777
+ {
778
+ XPCWrappedNativeScope* scope;
779
+
780
+ if(!obj)
781
+ return nsnull;
782
+
783
+ // If this object is itself a wrapped native then we can get the
784
+ // scope directly.
785
+
786
+ scope = GetScopeOfObject(obj);
787
+ if(scope)
788
+ return scope;
789
+
790
+ // Else we'll have to look up the parent chain to get the scope
791
+
792
+ obj = JS_GetGlobalForObject(cx, obj);
793
+
794
+ if(!runtime)
795
+ {
796
+ runtime = nsXPConnect::GetRuntimeInstance();
797
+ NS_ASSERTION(runtime, "This should never be null!");
798
+ }
799
+
800
+ // XXX We are assuming that the scope count is low enough that traversing
801
+ // the linked list is more reasonable then doing a hashtable lookup.
802
+ XPCWrappedNativeScope* found = nsnull;
803
+ { // scoped lock
804
+ XPCAutoLock lock(runtime->GetMapLock());
805
+
806
+ DEBUG_TrackScopeTraversal();
807
+
808
+ for(XPCWrappedNativeScope* cur = gScopes; cur; cur = cur->mNext)
809
+ {
810
+ if(obj == cur->GetGlobalJSObject())
811
+ {
812
+ found = cur;
813
+ break;
814
+ }
815
+ }
816
+ }
817
+
818
+ if(found) {
819
+ // This cannot be called within the map lock!
820
+ DEBUG_CheckForComponentsInScope(cx, obj, OKIfNotInitialized, runtime);
821
+ return found;
822
+ }
823
+
824
+ // Failure to find the scope is only OK if the caller told us it might fail.
825
+ // This flag would only be set in the call from
826
+ // XPCWrappedNativeScope::GetNewOrUsed
827
+ NS_ASSERTION(OKIfNotInitialized, "No scope has this global object!");
828
+ return nsnull;
829
+ }
830
+
831
+ /***************************************************************************/
832
+
833
+ static JSDHashOperator
834
+ WNProtoSecPolicyClearer(JSDHashTable *table, JSDHashEntryHdr *hdr,
835
+ uint32 number, void *arg)
836
+ {
837
+ XPCWrappedNativeProto* proto =
838
+ ((ClassInfo2WrappedNativeProtoMap::Entry*)hdr)->value;
839
+ *(proto->GetSecurityInfoAddr()) = nsnull;
840
+ return JS_DHASH_NEXT;
841
+ }
842
+
843
+ static JSDHashOperator
844
+ WNSecPolicyClearer(JSDHashTable *table, JSDHashEntryHdr *hdr,
845
+ uint32 number, void *arg)
846
+ {
847
+ XPCWrappedNative* wrapper = ((Native2WrappedNativeMap::Entry*)hdr)->value;
848
+ if(wrapper->HasProto() && !wrapper->HasSharedProto())
849
+ *(wrapper->GetProto()->GetSecurityInfoAddr()) = nsnull;
850
+ return JS_DHASH_NEXT;
851
+ }
852
+
853
+ // static
854
+ nsresult
855
+ XPCWrappedNativeScope::ClearAllWrappedNativeSecurityPolicies(XPCCallContext& ccx)
856
+ {
857
+ // Hold the lock throughout.
858
+ XPCAutoLock lock(ccx.GetRuntime()->GetMapLock());
859
+
860
+ for(XPCWrappedNativeScope* cur = gScopes; cur; cur = cur->mNext)
861
+ {
862
+ cur->mWrappedNativeProtoMap->Enumerate(WNProtoSecPolicyClearer, nsnull);
863
+ cur->mWrappedNativeMap->Enumerate(WNSecPolicyClearer, nsnull);
864
+ }
865
+
866
+ DEBUG_TrackScopeTraversal();
867
+
868
+ return NS_OK;
869
+ }
870
+
871
+ static JSDHashOperator
872
+ WNProtoRemover(JSDHashTable *table, JSDHashEntryHdr *hdr,
873
+ uint32 number, void *arg)
874
+ {
875
+ XPCWrappedNativeProtoMap* detachedMap = (XPCWrappedNativeProtoMap*)arg;
876
+
877
+ XPCWrappedNativeProto* proto = (XPCWrappedNativeProto*)
878
+ ((ClassInfo2WrappedNativeProtoMap::Entry*)hdr)->value;
879
+
880
+ detachedMap->Add(proto);
881
+
882
+ return JS_DHASH_REMOVE;
883
+ }
884
+
885
+ void
886
+ XPCWrappedNativeScope::RemoveWrappedNativeProtos()
887
+ {
888
+ XPCAutoLock al(mRuntime->GetMapLock());
889
+
890
+ mWrappedNativeProtoMap->Enumerate(WNProtoRemover,
891
+ GetRuntime()->GetDetachedWrappedNativeProtoMap());
892
+ }
893
+
894
+ /***************************************************************************/
895
+
896
+ // static
897
+ void
898
+ XPCWrappedNativeScope::DebugDumpAllScopes(PRInt16 depth)
899
+ {
900
+ #ifdef DEBUG
901
+ depth-- ;
902
+
903
+ // get scope count.
904
+ int count = 0;
905
+ XPCWrappedNativeScope* cur;
906
+ for(cur = gScopes; cur; cur = cur->mNext)
907
+ count++ ;
908
+
909
+ XPC_LOG_ALWAYS(("chain of %d XPCWrappedNativeScope(s)", count));
910
+ XPC_LOG_INDENT();
911
+ XPC_LOG_ALWAYS(("gDyingScopes @ %x", gDyingScopes));
912
+ if(depth)
913
+ for(cur = gScopes; cur; cur = cur->mNext)
914
+ cur->DebugDump(depth);
915
+ XPC_LOG_OUTDENT();
916
+ #endif
917
+ }
918
+
919
+ #ifdef DEBUG
920
+ static JSDHashOperator
921
+ WrappedNativeMapDumpEnumerator(JSDHashTable *table, JSDHashEntryHdr *hdr,
922
+ uint32 number, void *arg)
923
+ {
924
+ ((Native2WrappedNativeMap::Entry*)hdr)->value->DebugDump(*(PRInt16*)arg);
925
+ return JS_DHASH_NEXT;
926
+ }
927
+ static JSDHashOperator
928
+ WrappedNativeProtoMapDumpEnumerator(JSDHashTable *table, JSDHashEntryHdr *hdr,
929
+ uint32 number, void *arg)
930
+ {
931
+ ((ClassInfo2WrappedNativeProtoMap::Entry*)hdr)->value->DebugDump(*(PRInt16*)arg);
932
+ return JS_DHASH_NEXT;
933
+ }
934
+ #endif
935
+
936
+ void
937
+ XPCWrappedNativeScope::DebugDump(PRInt16 depth)
938
+ {
939
+ #ifdef DEBUG
940
+ depth-- ;
941
+ XPC_LOG_ALWAYS(("XPCWrappedNativeScope @ %x", this));
942
+ XPC_LOG_INDENT();
943
+ XPC_LOG_ALWAYS(("mRuntime @ %x", mRuntime));
944
+ XPC_LOG_ALWAYS(("mNext @ %x", mNext));
945
+ XPC_LOG_ALWAYS(("mComponents @ %x", mComponents));
946
+ XPC_LOG_ALWAYS(("mGlobalJSObject @ %x", mGlobalJSObject));
947
+ XPC_LOG_ALWAYS(("mPrototypeJSObject @ %x", mPrototypeJSObject));
948
+ XPC_LOG_ALWAYS(("mPrototypeJSFunction @ %x", mPrototypeJSFunction));
949
+ XPC_LOG_ALWAYS(("mPrototypeNoHelper @ %x", mPrototypeNoHelper));
950
+
951
+ XPC_LOG_ALWAYS(("mWrappedNativeMap @ %x with %d wrappers(s)", \
952
+ mWrappedNativeMap, \
953
+ mWrappedNativeMap ? mWrappedNativeMap->Count() : 0));
954
+ // iterate contexts...
955
+ if(depth && mWrappedNativeMap && mWrappedNativeMap->Count())
956
+ {
957
+ XPC_LOG_INDENT();
958
+ mWrappedNativeMap->Enumerate(WrappedNativeMapDumpEnumerator, &depth);
959
+ XPC_LOG_OUTDENT();
960
+ }
961
+
962
+ XPC_LOG_ALWAYS(("mWrappedNativeProtoMap @ %x with %d protos(s)", \
963
+ mWrappedNativeProtoMap, \
964
+ mWrappedNativeProtoMap ? mWrappedNativeProtoMap->Count() : 0));
965
+ // iterate contexts...
966
+ if(depth && mWrappedNativeProtoMap && mWrappedNativeProtoMap->Count())
967
+ {
968
+ XPC_LOG_INDENT();
969
+ mWrappedNativeProtoMap->Enumerate(WrappedNativeProtoMapDumpEnumerator, &depth);
970
+ XPC_LOG_OUTDENT();
971
+ }
972
+ XPC_LOG_OUTDENT();
973
+ #endif
974
+ }
975
+
976
+ #ifndef XPCONNECT_STANDALONE
977
+ // static
978
+ void
979
+ XPCWrappedNativeScope::TraverseScopes(XPCCallContext& ccx)
980
+ {
981
+ // Hold the lock throughout.
982
+ XPCAutoLock lock(ccx.GetRuntime()->GetMapLock());
983
+
984
+ for(XPCWrappedNativeScope* cur = gScopes; cur; cur = cur->mNext)
985
+ if(cur->mGlobalJSObject && cur->mScriptObjectPrincipal)
986
+ {
987
+ ccx.GetXPConnect()->RecordTraversal(cur->mGlobalJSObject,
988
+ cur->mScriptObjectPrincipal);
989
+ }
990
+ }
991
+ #endif