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,1025 @@
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
+ * Pierre Phaneuf <pp@ludusdesign.com>
27
+ *
28
+ * Alternatively, the contents of this file may be used under the terms of
29
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
30
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
31
+ * in which case the provisions of the GPL or the LGPL are applicable instead
32
+ * of those above. If you wish to allow use of your version of this file only
33
+ * under the terms of either the GPL or the LGPL, and not to allow others to
34
+ * use your version of this file under the terms of the MPL, indicate your
35
+ * decision by deleting the provisions above and replace them with the notice
36
+ * and other provisions required by the GPL or the LGPL. If you do not delete
37
+ * the provisions above, a recipient may use your version of this file under
38
+ * the terms of any one of the MPL, the GPL or the LGPL.
39
+ *
40
+ * ***** END LICENSE BLOCK ***** */
41
+
42
+ /* An xpcom implementation of the JavaScript nsIID and nsCID objects. */
43
+
44
+ #include "xpcprivate.h"
45
+
46
+ /***************************************************************************/
47
+ // nsJSID
48
+
49
+ NS_IMPL_THREADSAFE_ISUPPORTS1(nsJSID, nsIJSID)
50
+
51
+ char nsJSID::gNoString[] = "";
52
+
53
+ nsJSID::nsJSID()
54
+ : mID(GetInvalidIID()), mNumber(gNoString), mName(gNoString)
55
+ {
56
+ }
57
+
58
+ nsJSID::~nsJSID()
59
+ {
60
+ if(mNumber && mNumber != gNoString)
61
+ PR_Free(mNumber);
62
+ if(mName && mName != gNoString)
63
+ PR_Free(mName);
64
+ }
65
+
66
+ void nsJSID::Reset()
67
+ {
68
+ mID = GetInvalidIID();
69
+
70
+ if(mNumber && mNumber != gNoString)
71
+ PR_Free(mNumber);
72
+ if(mName && mName != gNoString)
73
+ PR_Free(mName);
74
+
75
+ mNumber = mName = nsnull;
76
+ }
77
+
78
+ PRBool
79
+ nsJSID::SetName(const char* name)
80
+ {
81
+ NS_ASSERTION(!mName || mName == gNoString ,"name already set");
82
+ NS_ASSERTION(name,"null name");
83
+ int len = strlen(name)+1;
84
+ mName = (char*)PR_Malloc(len);
85
+ if(!mName)
86
+ return PR_FALSE;
87
+ memcpy(mName, name, len);
88
+ return PR_TRUE;
89
+ }
90
+
91
+ NS_IMETHODIMP
92
+ nsJSID::GetName(char * *aName)
93
+ {
94
+ if(!aName)
95
+ return NS_ERROR_NULL_POINTER;
96
+
97
+ if(!NameIsSet())
98
+ SetNameToNoString();
99
+ NS_ASSERTION(mName, "name not set");
100
+ *aName = (char*) nsMemory::Clone(mName, strlen(mName)+1);
101
+ return *aName ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
102
+ }
103
+
104
+ NS_IMETHODIMP
105
+ nsJSID::GetNumber(char * *aNumber)
106
+ {
107
+ if(!aNumber)
108
+ return NS_ERROR_NULL_POINTER;
109
+
110
+ if(!mNumber)
111
+ {
112
+ if(!(mNumber = mID.ToString()))
113
+ mNumber = gNoString;
114
+ }
115
+
116
+ *aNumber = (char*) nsMemory::Clone(mNumber, strlen(mNumber)+1);
117
+ return *aNumber ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
118
+ }
119
+
120
+ NS_IMETHODIMP_(const nsID*)
121
+ nsJSID::GetID()
122
+ {
123
+ return &mID;
124
+ }
125
+
126
+ NS_IMETHODIMP
127
+ nsJSID::GetValid(PRBool *aValid)
128
+ {
129
+ if(!aValid)
130
+ return NS_ERROR_NULL_POINTER;
131
+
132
+ *aValid = IsValid();
133
+ return NS_OK;
134
+ }
135
+
136
+ NS_IMETHODIMP
137
+ nsJSID::Equals(nsIJSID *other, PRBool *_retval)
138
+ {
139
+ if(!_retval)
140
+ return NS_ERROR_NULL_POINTER;
141
+
142
+ if(!other || mID.Equals(GetInvalidIID()))
143
+ {
144
+ *_retval = PR_FALSE;
145
+ return NS_OK;
146
+ }
147
+
148
+ *_retval = other->GetID()->Equals(mID);
149
+ return NS_OK;
150
+ }
151
+
152
+ NS_IMETHODIMP
153
+ nsJSID::Initialize(const char *idString)
154
+ {
155
+ if(!idString)
156
+ return NS_ERROR_NULL_POINTER;
157
+
158
+ if(*idString != '\0' && mID.Equals(GetInvalidIID()))
159
+ {
160
+ Reset();
161
+
162
+ if(idString[0] == '{')
163
+ {
164
+ if(mID.Parse(idString))
165
+ {
166
+ return NS_OK;
167
+ }
168
+
169
+ // error - reset to invalid state
170
+ mID = GetInvalidIID();
171
+ }
172
+ }
173
+ return NS_ERROR_FAILURE;
174
+ }
175
+
176
+ PRBool
177
+ nsJSID::InitWithName(const nsID& id, const char *nameString)
178
+ {
179
+ NS_ASSERTION(nameString, "no name");
180
+ Reset();
181
+ mID = id;
182
+ return SetName(nameString);
183
+ }
184
+
185
+ // try to use the name, if no name, then use the number
186
+ NS_IMETHODIMP
187
+ nsJSID::ToString(char **_retval)
188
+ {
189
+ if(mName != gNoString)
190
+ {
191
+ char* str;
192
+ if(NS_SUCCEEDED(GetName(&str)))
193
+ {
194
+ if(mName != gNoString)
195
+ {
196
+ *_retval = str;
197
+ return NS_OK;
198
+ }
199
+ else
200
+ nsMemory::Free(str);
201
+ }
202
+ }
203
+ return GetNumber(_retval);
204
+ }
205
+
206
+ const nsID&
207
+ nsJSID::GetInvalidIID() const
208
+ {
209
+ // {BB1F47B0-D137-11d2-9841-006008962422}
210
+ static nsID invalid = {0xbb1f47b0, 0xd137, 0x11d2,
211
+ {0x98, 0x41, 0x0, 0x60, 0x8, 0x96, 0x24, 0x22}};
212
+ return invalid;
213
+ }
214
+
215
+ //static
216
+ nsJSID*
217
+ nsJSID::NewID(const char* str)
218
+ {
219
+ if(!str)
220
+ {
221
+ NS_ASSERTION(0,"no string");
222
+ return nsnull;
223
+ }
224
+
225
+ nsJSID* idObj = new nsJSID();
226
+ if(idObj)
227
+ {
228
+ NS_ADDREF(idObj);
229
+ if(NS_FAILED(idObj->Initialize(str)))
230
+ NS_RELEASE(idObj);
231
+ }
232
+ return idObj;
233
+ }
234
+
235
+ //static
236
+ nsJSID*
237
+ nsJSID::NewID(const nsID& id)
238
+ {
239
+ nsJSID* idObj = new nsJSID();
240
+ if(idObj)
241
+ {
242
+ NS_ADDREF(idObj);
243
+ idObj->mID = id;
244
+ idObj->mName = nsnull;
245
+ idObj->mNumber = nsnull;
246
+ }
247
+ return idObj;
248
+ }
249
+
250
+
251
+ /***************************************************************************/
252
+ // Class object support so that we can share prototypes of wrapper
253
+
254
+ // This class exists just so we can have a shared scriptable helper for
255
+ // the nsJSIID class. The instances implement their own helpers. But we
256
+ // needed to be able to indicate to the shared prototypes this single flag:
257
+ // nsIXPCScriptable::DONT_ENUM_STATIC_PROPS. And having a class to do it is
258
+ // the only means we have. Setting this flag on any given instance scriptable
259
+ // helper is not sufficient to convey the information that we don't want
260
+ // static properties enumerated on the shared proto.
261
+
262
+ class SharedScriptableHelperForJSIID : public nsIXPCScriptable
263
+ {
264
+ public:
265
+ NS_DECL_ISUPPORTS
266
+ NS_DECL_NSIXPCSCRIPTABLE
267
+ SharedScriptableHelperForJSIID() {}
268
+ };
269
+
270
+ NS_INTERFACE_MAP_BEGIN(SharedScriptableHelperForJSIID)
271
+ NS_INTERFACE_MAP_ENTRY(nsIXPCScriptable)
272
+ NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIXPCScriptable)
273
+ NS_INTERFACE_MAP_END_THREADSAFE
274
+
275
+ NS_IMPL_THREADSAFE_ADDREF(SharedScriptableHelperForJSIID)
276
+ NS_IMPL_THREADSAFE_RELEASE(SharedScriptableHelperForJSIID)
277
+
278
+ // The nsIXPCScriptable map declaration that will generate stubs for us...
279
+ #define XPC_MAP_CLASSNAME SharedScriptableHelperForJSIID
280
+ #define XPC_MAP_QUOTED_CLASSNAME "JSIID"
281
+ #define XPC_MAP_FLAGS nsIXPCScriptable::DONT_ENUM_STATIC_PROPS |\
282
+ nsIXPCScriptable::ALLOW_PROP_MODS_DURING_RESOLVE
283
+ #include "xpc_map_end.h" /* This will #undef the above */
284
+
285
+ static nsIXPCScriptable* gSharedScriptableHelperForJSIID;
286
+
287
+ NS_METHOD GetSharedScriptableHelperForJSIID(PRUint32 language,
288
+ nsISupports **helper)
289
+ {
290
+ if(language == nsIProgrammingLanguage::JAVASCRIPT)
291
+ {
292
+ NS_IF_ADDREF(gSharedScriptableHelperForJSIID);
293
+ *helper = gSharedScriptableHelperForJSIID;
294
+ }
295
+ else
296
+ *helper = nsnull;
297
+ return NS_OK;
298
+ }
299
+
300
+ /******************************************************/
301
+
302
+ static JSBool gClassObjectsWereInited = JS_FALSE;
303
+
304
+ NS_DECL_CI_INTERFACE_GETTER(nsJSIID)
305
+ // Can't make this static. http://bugzilla.mozilla.org/show_bug.cgi?id=81436
306
+ nsIClassInfo* NS_CLASSINFO_NAME(nsJSIID);
307
+
308
+ static const nsModuleComponentInfo CI_nsJSIID =
309
+ {"JSIID",
310
+ {0x26ecb8d0, 0x35c9, 0x11d5, { 0x90, 0xb2, 0x0, 0x10, 0xa4, 0xe7, 0x3d, 0x9a }},
311
+ nsnull, nsnull, nsnull,nsnull, nsnull,
312
+ NS_CI_INTERFACE_GETTER_NAME(nsJSIID),
313
+ GetSharedScriptableHelperForJSIID,
314
+ &NS_CLASSINFO_NAME(nsJSIID), nsIClassInfo::THREADSAFE};
315
+
316
+ NS_DECL_CI_INTERFACE_GETTER(nsJSCID)
317
+ // Can't make this static. http://bugzilla.mozilla.org/show_bug.cgi?id=81436
318
+ nsIClassInfo* NS_CLASSINFO_NAME(nsJSCID);
319
+
320
+ static const nsModuleComponentInfo CI_nsJSCID =
321
+ {"JSCID",
322
+ {0x9255b5b0, 0x35cf, 0x11d5, { 0x90, 0xb2, 0x0, 0x10, 0xa4, 0xe7, 0x3d, 0x9a }},
323
+ nsnull, nsnull, nsnull,nsnull, nsnull,
324
+ NS_CI_INTERFACE_GETTER_NAME(nsJSCID), nsnull,
325
+ &NS_CLASSINFO_NAME(nsJSCID), nsIClassInfo::THREADSAFE};
326
+
327
+ JSBool xpc_InitJSxIDClassObjects()
328
+ {
329
+ if(gClassObjectsWereInited)
330
+ return JS_TRUE;
331
+
332
+ nsresult rv = NS_OK;
333
+
334
+ if(!NS_CLASSINFO_NAME(nsJSIID))
335
+ {
336
+ nsCOMPtr<nsIGenericFactory> factory;
337
+ rv = NS_NewGenericFactory(getter_AddRefs(factory), &CI_nsJSIID);
338
+ if(NS_FAILED(rv))
339
+ goto return_failure;
340
+ rv = factory->QueryInterface(NS_GET_IID(nsIClassInfo),
341
+ (void**)&NS_CLASSINFO_NAME(nsJSIID));
342
+ if(NS_FAILED(rv))
343
+ goto return_failure;
344
+ }
345
+
346
+ if(!NS_CLASSINFO_NAME(nsJSCID))
347
+ {
348
+ nsCOMPtr<nsIGenericFactory> factory;
349
+ rv = NS_NewGenericFactory(getter_AddRefs(factory), &CI_nsJSCID);
350
+ if(NS_FAILED(rv))
351
+ goto return_failure;
352
+ rv = factory->QueryInterface(NS_GET_IID(nsIClassInfo),
353
+ (void**)&NS_CLASSINFO_NAME(nsJSCID));
354
+ if(NS_FAILED(rv))
355
+ goto return_failure;
356
+ }
357
+
358
+ gSharedScriptableHelperForJSIID = new SharedScriptableHelperForJSIID();
359
+ if(!gSharedScriptableHelperForJSIID)
360
+ goto return_failure;
361
+ NS_ADDREF(gSharedScriptableHelperForJSIID);
362
+
363
+ gClassObjectsWereInited = JS_TRUE;
364
+ return JS_TRUE;
365
+ return_failure:
366
+ return JS_FALSE;
367
+ }
368
+
369
+ void xpc_DestroyJSxIDClassObjects()
370
+ {
371
+ NS_IF_RELEASE(NS_CLASSINFO_NAME(nsJSIID));
372
+ NS_IF_RELEASE(NS_CLASSINFO_NAME(nsJSCID));
373
+ NS_IF_RELEASE(gSharedScriptableHelperForJSIID);
374
+
375
+ gClassObjectsWereInited = JS_FALSE;
376
+ }
377
+
378
+ /***************************************************************************/
379
+
380
+ NS_INTERFACE_MAP_BEGIN(nsJSIID)
381
+ NS_INTERFACE_MAP_ENTRY(nsIJSID)
382
+ NS_INTERFACE_MAP_ENTRY(nsIJSIID)
383
+ NS_INTERFACE_MAP_ENTRY(nsIXPCScriptable)
384
+ #ifdef XPC_USE_SECURITY_CHECKED_COMPONENT
385
+ NS_INTERFACE_MAP_ENTRY(nsISecurityCheckedComponent)
386
+ #endif
387
+ NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIJSID)
388
+ NS_IMPL_QUERY_CLASSINFO(nsJSIID)
389
+ NS_INTERFACE_MAP_END_THREADSAFE
390
+
391
+ NS_IMPL_THREADSAFE_ADDREF(nsJSIID)
392
+ NS_IMPL_THREADSAFE_RELEASE(nsJSIID)
393
+ NS_IMPL_CI_INTERFACE_GETTER2(nsJSIID, nsIJSID, nsIJSIID)
394
+
395
+ // The nsIXPCScriptable map declaration that will generate stubs for us...
396
+ #define XPC_MAP_CLASSNAME nsJSIID
397
+ #define XPC_MAP_QUOTED_CLASSNAME "nsJSIID"
398
+ #define XPC_MAP_WANT_NEWRESOLVE
399
+ #define XPC_MAP_WANT_ENUMERATE
400
+ #define XPC_MAP_WANT_HASINSTANCE
401
+ #define XPC_MAP_FLAGS nsIXPCScriptable::DONT_ENUM_STATIC_PROPS |\
402
+ nsIXPCScriptable::ALLOW_PROP_MODS_DURING_RESOLVE
403
+ #include "xpc_map_end.h" /* This will #undef the above */
404
+
405
+
406
+ nsJSIID::nsJSIID(nsIInterfaceInfo* aInfo)
407
+ : mInfo(aInfo)
408
+ {
409
+ }
410
+
411
+ nsJSIID::~nsJSIID() {}
412
+
413
+ // If mInfo is present we use it and ignore mDetails, else we use mDetails.
414
+
415
+ NS_IMETHODIMP nsJSIID::GetName(char * *aName)
416
+ {
417
+ return mInfo->GetName(aName);
418
+ }
419
+
420
+ NS_IMETHODIMP nsJSIID::GetNumber(char * *aNumber)
421
+ {
422
+ char str[NSID_LENGTH];
423
+ const nsIID* id;
424
+ mInfo->GetIIDShared(&id);
425
+ id->ToProvidedString(str);
426
+ *aNumber = (char*) nsMemory::Clone(str, NSID_LENGTH);
427
+ return *aNumber ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
428
+ }
429
+
430
+ NS_IMETHODIMP_(const nsID*) nsJSIID::GetID()
431
+ {
432
+ const nsIID* id;
433
+ mInfo->GetIIDShared(&id);
434
+ return id;
435
+ }
436
+
437
+ NS_IMETHODIMP nsJSIID::GetValid(PRBool *aValid)
438
+ {
439
+ *aValid = PR_TRUE;
440
+ return NS_OK;
441
+ }
442
+
443
+ NS_IMETHODIMP nsJSIID::Equals(nsIJSID *other, PRBool *_retval)
444
+ {
445
+ if(!_retval)
446
+ return NS_ERROR_NULL_POINTER;
447
+
448
+ if(!other)
449
+ {
450
+ *_retval = PR_FALSE;
451
+ return NS_OK;
452
+ }
453
+
454
+ mInfo->IsIID(other->GetID(), _retval);
455
+ return NS_OK;
456
+ }
457
+
458
+ NS_IMETHODIMP nsJSIID::Initialize(const char *idString)
459
+ {
460
+ return NS_ERROR_FAILURE;
461
+ }
462
+
463
+ NS_IMETHODIMP nsJSIID::ToString(char **_retval)
464
+ {
465
+ return mInfo->GetName(_retval);
466
+ }
467
+
468
+ // static
469
+ nsJSIID*
470
+ nsJSIID::NewID(nsIInterfaceInfo* aInfo)
471
+ {
472
+ if(!aInfo)
473
+ {
474
+ NS_ERROR("no info");
475
+ return nsnull;
476
+ }
477
+
478
+ PRBool canScript;
479
+ if(NS_FAILED(aInfo->IsScriptable(&canScript)) || !canScript)
480
+ return nsnull;
481
+
482
+ nsJSIID* idObj = new nsJSIID(aInfo);
483
+ NS_IF_ADDREF(idObj);
484
+ return idObj;
485
+ }
486
+
487
+
488
+ /* PRBool resolve (in nsIXPConnectWrappedNative wrapper, in JSContextPtr cx, in JSObjectPtr obj, in JSVal id); */
489
+ NS_IMETHODIMP
490
+ nsJSIID::NewResolve(nsIXPConnectWrappedNative *wrapper,
491
+ JSContext * cx, JSObject * obj,
492
+ jsval id, PRUint32 flags,
493
+ JSObject * *objp, PRBool *_retval)
494
+ {
495
+ XPCCallContext ccx(JS_CALLER, cx);
496
+
497
+ AutoMarkingNativeInterfacePtr iface(ccx);
498
+
499
+ const nsIID* iid;
500
+ mInfo->GetIIDShared(&iid);
501
+
502
+ iface = XPCNativeInterface::GetNewOrUsed(ccx, iid);
503
+
504
+ if(!iface)
505
+ return NS_OK;
506
+
507
+ XPCNativeMember* member = iface->FindMember(id);
508
+ if(member && member->IsConstant())
509
+ {
510
+ jsval val;
511
+ if(!member->GetConstantValue(ccx, iface, &val))
512
+ return NS_ERROR_OUT_OF_MEMORY;
513
+
514
+ jsid idid;
515
+ if(!JS_ValueToId(cx, id, &idid))
516
+ return NS_ERROR_OUT_OF_MEMORY;
517
+
518
+ *objp = obj;
519
+ *_retval = JS_DefinePropertyById(cx, obj, idid, val, nsnull, nsnull,
520
+ JSPROP_ENUMERATE | JSPROP_READONLY |
521
+ JSPROP_PERMANENT);
522
+ }
523
+
524
+ return NS_OK;
525
+ }
526
+
527
+ /* PRBool enumerate (in nsIXPConnectWrappedNative wrapper, in JSContextPtr cx, in JSObjectPtr obj); */
528
+ NS_IMETHODIMP
529
+ nsJSIID::Enumerate(nsIXPConnectWrappedNative *wrapper,
530
+ JSContext * cx, JSObject * obj, PRBool *_retval)
531
+ {
532
+ // In this case, let's just eagerly resolve...
533
+
534
+ XPCCallContext ccx(JS_CALLER, cx);
535
+
536
+ AutoMarkingNativeInterfacePtr iface(ccx);
537
+
538
+ const nsIID* iid;
539
+ mInfo->GetIIDShared(&iid);
540
+
541
+ iface = XPCNativeInterface::GetNewOrUsed(ccx, iid);
542
+
543
+ if(!iface)
544
+ return NS_OK;
545
+
546
+ PRUint16 count = iface->GetMemberCount();
547
+ for(PRUint16 i = 0; i < count; i++)
548
+ {
549
+ XPCNativeMember* member = iface->GetMemberAt(i);
550
+ if(member && member->IsConstant() &&
551
+ !xpc_ForcePropertyResolve(cx, obj, member->GetName()))
552
+ {
553
+ return NS_ERROR_UNEXPECTED;
554
+ }
555
+ }
556
+ return NS_OK;
557
+ }
558
+
559
+ /* PRBool hasInstance (in nsIXPConnectWrappedNative wrapper, in JSContextPtr cx, in JSObjectPtr obj, in JSVal val, out PRBool bp); */
560
+ NS_IMETHODIMP
561
+ nsJSIID::HasInstance(nsIXPConnectWrappedNative *wrapper,
562
+ JSContext * cx, JSObject * obj,
563
+ jsval val, PRBool *bp, PRBool *_retval)
564
+ {
565
+ *bp = JS_FALSE;
566
+ nsresult rv = NS_OK;
567
+
568
+ if(!JSVAL_IS_PRIMITIVE(val))
569
+ {
570
+ // we have a JSObject
571
+ JSObject* obj = JSVAL_TO_OBJECT(val);
572
+
573
+ NS_ASSERTION(obj, "when is an object not an object?");
574
+
575
+ // is this really a native xpcom object with a wrapper?
576
+ XPCWrappedNative* other_wrapper =
577
+ XPCWrappedNative::GetWrappedNativeOfJSObject(cx, obj);
578
+
579
+ if(!other_wrapper)
580
+ return NS_OK;
581
+
582
+ const nsIID* iid;
583
+ mInfo->GetIIDShared(&iid);
584
+
585
+ // We'll trust the interface set of the wrapper if this is known
586
+ // to be an interface that the objects *expects* to be able to
587
+ // handle.
588
+ if(other_wrapper->HasInterfaceNoQI(*iid))
589
+ {
590
+ *bp = JS_TRUE;
591
+ return NS_OK;
592
+ }
593
+
594
+ // Otherwise, we'll end up Querying the native object to be sure.
595
+ XPCCallContext ccx(JS_CALLER, cx);
596
+
597
+ AutoMarkingNativeInterfacePtr iface(ccx);
598
+ iface = XPCNativeInterface::GetNewOrUsed(ccx, iid);
599
+
600
+ if(iface && other_wrapper->FindTearOff(ccx, iface))
601
+ *bp = JS_TRUE;
602
+ }
603
+ return rv;
604
+ }
605
+
606
+ #ifdef XPC_USE_SECURITY_CHECKED_COMPONENT
607
+ /* string canCreateWrapper (in nsIIDPtr iid); */
608
+ NS_IMETHODIMP
609
+ nsJSIID::CanCreateWrapper(const nsIID * iid, char **_retval)
610
+ {
611
+ // We let anyone do this...
612
+ *_retval = xpc_CloneAllAccess();
613
+ return NS_OK;
614
+ }
615
+
616
+ /* string canCallMethod (in nsIIDPtr iid, in wstring methodName); */
617
+ NS_IMETHODIMP
618
+ nsJSIID::CanCallMethod(const nsIID * iid, const PRUnichar *methodName, char **_retval)
619
+ {
620
+ static const char* allowed[] = {"equals", "toString", nsnull};
621
+
622
+ *_retval = xpc_CheckAccessList(methodName, allowed);
623
+ return NS_OK;
624
+ }
625
+
626
+ /* string canGetProperty (in nsIIDPtr iid, in wstring propertyName); */
627
+ NS_IMETHODIMP
628
+ nsJSIID::CanGetProperty(const nsIID * iid, const PRUnichar *propertyName, char **_retval)
629
+ {
630
+ static const char* allowed[] = {"name", "number", "valid", nsnull};
631
+ *_retval = xpc_CheckAccessList(propertyName, allowed);
632
+ return NS_OK;
633
+ }
634
+
635
+ /* string canSetProperty (in nsIIDPtr iid, in wstring propertyName); */
636
+ NS_IMETHODIMP
637
+ nsJSIID::CanSetProperty(const nsIID * iid, const PRUnichar *propertyName, char **_retval)
638
+ {
639
+ // If you have to ask, then the answer is NO
640
+ *_retval = nsnull;
641
+ return NS_OK;
642
+ }
643
+ #endif
644
+
645
+ /***************************************************************************/
646
+
647
+ NS_INTERFACE_MAP_BEGIN(nsJSCID)
648
+ NS_INTERFACE_MAP_ENTRY(nsIJSID)
649
+ NS_INTERFACE_MAP_ENTRY(nsIJSCID)
650
+ NS_INTERFACE_MAP_ENTRY(nsIXPCScriptable)
651
+ NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIJSID)
652
+ NS_IMPL_QUERY_CLASSINFO(nsJSCID)
653
+ NS_INTERFACE_MAP_END_THREADSAFE
654
+
655
+ NS_IMPL_THREADSAFE_ADDREF(nsJSCID)
656
+ NS_IMPL_THREADSAFE_RELEASE(nsJSCID)
657
+ NS_IMPL_CI_INTERFACE_GETTER2(nsJSCID, nsIJSID, nsIJSCID)
658
+
659
+ // The nsIXPCScriptable map declaration that will generate stubs for us...
660
+ #define XPC_MAP_CLASSNAME nsJSCID
661
+ #define XPC_MAP_QUOTED_CLASSNAME "nsJSCID"
662
+ #define XPC_MAP_WANT_CONSTRUCT
663
+ #define XPC_MAP_WANT_HASINSTANCE
664
+ #define XPC_MAP_FLAGS 0
665
+ #include "xpc_map_end.h" /* This will #undef the above */
666
+
667
+ nsJSCID::nsJSCID() {}
668
+ nsJSCID::~nsJSCID() {}
669
+
670
+ NS_IMETHODIMP nsJSCID::GetName(char * *aName)
671
+ {ResolveName(); return mDetails.GetName(aName);}
672
+
673
+ NS_IMETHODIMP nsJSCID::GetNumber(char * *aNumber)
674
+ {return mDetails.GetNumber(aNumber);}
675
+
676
+ NS_IMETHODIMP_(const nsID*) nsJSCID::GetID()
677
+ {return &mDetails.ID();}
678
+
679
+ NS_IMETHODIMP nsJSCID::GetValid(PRBool *aValid)
680
+ {return mDetails.GetValid(aValid);}
681
+
682
+ NS_IMETHODIMP nsJSCID::Equals(nsIJSID *other, PRBool *_retval)
683
+ {return mDetails.Equals(other, _retval);}
684
+
685
+ NS_IMETHODIMP nsJSCID::Initialize(const char *idString)
686
+ {return mDetails.Initialize(idString);}
687
+
688
+ NS_IMETHODIMP nsJSCID::ToString(char **_retval)
689
+ {ResolveName(); return mDetails.ToString(_retval);}
690
+
691
+ void
692
+ nsJSCID::ResolveName()
693
+ {
694
+ if(!mDetails.NameIsSet())
695
+ mDetails.SetNameToNoString();
696
+ }
697
+
698
+ //static
699
+ nsJSCID*
700
+ nsJSCID::NewID(const char* str)
701
+ {
702
+ if(!str)
703
+ {
704
+ NS_ASSERTION(0,"no string");
705
+ return nsnull;
706
+ }
707
+
708
+ nsJSCID* idObj = new nsJSCID();
709
+ if(idObj)
710
+ {
711
+ PRBool success = PR_FALSE;
712
+ NS_ADDREF(idObj);
713
+
714
+ if(str[0] == '{')
715
+ {
716
+ if(NS_SUCCEEDED(idObj->Initialize(str)))
717
+ success = PR_TRUE;
718
+ }
719
+ else
720
+ {
721
+ nsCOMPtr<nsIComponentRegistrar> registrar;
722
+ NS_GetComponentRegistrar(getter_AddRefs(registrar));
723
+ if (registrar)
724
+ {
725
+ nsCID *cid;
726
+ if(NS_SUCCEEDED(registrar->ContractIDToCID(str, &cid)))
727
+ {
728
+ success = idObj->mDetails.InitWithName(*cid, str);
729
+ nsMemory::Free(cid);
730
+ }
731
+ }
732
+ }
733
+ if(!success)
734
+ NS_RELEASE(idObj);
735
+ }
736
+ return idObj;
737
+ }
738
+
739
+ static const nsID*
740
+ GetIIDArg(PRUint32 argc, jsval* argv, JSContext* cx)
741
+ {
742
+ const nsID* iid;
743
+
744
+ // If an IID was passed in then use it
745
+ if(argc)
746
+ {
747
+ JSObject* iidobj;
748
+ jsval val = *argv;
749
+ if(JSVAL_IS_PRIMITIVE(val) ||
750
+ !(iidobj = JSVAL_TO_OBJECT(val)) ||
751
+ !(iid = xpc_JSObjectToID(cx, iidobj)))
752
+ {
753
+ return nsnull;
754
+ }
755
+ }
756
+ else
757
+ iid = &NS_GET_IID(nsISupports);
758
+
759
+ return iid;
760
+ }
761
+
762
+ /* nsISupports createInstance (); */
763
+ NS_IMETHODIMP
764
+ nsJSCID::CreateInstance(nsISupports **_retval)
765
+ {
766
+ if(!mDetails.IsValid())
767
+ return NS_ERROR_XPC_BAD_CID;
768
+
769
+ nsXPConnect* xpc = nsXPConnect::GetXPConnect();
770
+ if(!xpc)
771
+ return NS_ERROR_UNEXPECTED;
772
+
773
+ nsAXPCNativeCallContext *ccxp = nsnull;
774
+ xpc->GetCurrentNativeCallContext(&ccxp);
775
+ if(!ccxp)
776
+ return NS_ERROR_UNEXPECTED;
777
+
778
+ PRUint32 argc;
779
+ jsval * argv;
780
+ jsval * vp;
781
+ JSContext* cx;
782
+ JSObject* obj;
783
+
784
+ ccxp->GetJSContext(&cx);
785
+ ccxp->GetArgc(&argc);
786
+ ccxp->GetArgvPtr(&argv);
787
+ ccxp->GetRetValPtr(&vp);
788
+
789
+ nsCOMPtr<nsIXPConnectWrappedNative> wrapper;
790
+ ccxp->GetCalleeWrapper(getter_AddRefs(wrapper));
791
+ wrapper->GetJSObject(&obj);
792
+
793
+ // Do the security check if necessary
794
+
795
+ XPCContext* xpcc = XPCContext::GetXPCContext(cx);
796
+
797
+ nsIXPCSecurityManager* sm;
798
+ sm = xpcc->GetAppropriateSecurityManager(
799
+ nsIXPCSecurityManager::HOOK_CREATE_INSTANCE);
800
+ if(sm && NS_FAILED(sm->CanCreateInstance(cx, mDetails.ID())))
801
+ {
802
+ NS_ASSERTION(JS_IsExceptionPending(cx),
803
+ "security manager vetoed CreateInstance without setting exception");
804
+ return NS_OK;
805
+ }
806
+
807
+ // If an IID was passed in then use it
808
+ const nsID* iid = GetIIDArg(argc, argv, cx);
809
+ if (!iid)
810
+ return NS_ERROR_XPC_BAD_IID;
811
+
812
+ nsCOMPtr<nsIComponentManager> compMgr;
813
+ nsresult rv = NS_GetComponentManager(getter_AddRefs(compMgr));
814
+ if (NS_FAILED(rv))
815
+ return NS_ERROR_UNEXPECTED;
816
+
817
+ nsCOMPtr<nsISupports> inst;
818
+ rv = compMgr->CreateInstance(mDetails.ID(), nsnull, *iid, getter_AddRefs(inst));
819
+ NS_ASSERTION(NS_FAILED(rv) || inst, "component manager returned success, but instance is null!");
820
+
821
+ if(NS_FAILED(rv) || !inst)
822
+ return NS_ERROR_XPC_CI_RETURNED_FAILURE;
823
+
824
+ JSObject* instJSObj;
825
+ nsCOMPtr<nsIXPConnectJSObjectHolder> holder;
826
+ rv = xpc->WrapNative(cx, obj, inst, *iid, getter_AddRefs(holder));
827
+ if(NS_FAILED(rv) || !holder || NS_FAILED(holder->GetJSObject(&instJSObj)))
828
+ return NS_ERROR_XPC_CANT_CREATE_WN;
829
+
830
+ *vp = OBJECT_TO_JSVAL(instJSObj);
831
+ ccxp->SetReturnValueWasSet(JS_TRUE);
832
+ return NS_OK;
833
+ }
834
+
835
+ /* nsISupports getService (); */
836
+ NS_IMETHODIMP
837
+ nsJSCID::GetService(nsISupports **_retval)
838
+ {
839
+ if(!mDetails.IsValid())
840
+ return NS_ERROR_XPC_BAD_CID;
841
+
842
+ nsXPConnect* xpc = nsXPConnect::GetXPConnect();
843
+ if(!xpc)
844
+ return NS_ERROR_UNEXPECTED;
845
+
846
+ nsAXPCNativeCallContext *ccxp = nsnull;
847
+ xpc->GetCurrentNativeCallContext(&ccxp);
848
+ if(!ccxp)
849
+ return NS_ERROR_UNEXPECTED;
850
+
851
+ PRUint32 argc;
852
+ jsval * argv;
853
+ jsval * vp;
854
+ JSContext* cx;
855
+ JSObject* obj;
856
+
857
+ ccxp->GetJSContext(&cx);
858
+ ccxp->GetArgc(&argc);
859
+ ccxp->GetArgvPtr(&argv);
860
+ ccxp->GetRetValPtr(&vp);
861
+
862
+ nsCOMPtr<nsIXPConnectWrappedNative> wrapper;
863
+ ccxp->GetCalleeWrapper(getter_AddRefs(wrapper));
864
+ wrapper->GetJSObject(&obj);
865
+
866
+ // Do the security check if necessary
867
+
868
+ XPCContext* xpcc = XPCContext::GetXPCContext(cx);
869
+
870
+ nsIXPCSecurityManager* sm;
871
+ sm = xpcc->GetAppropriateSecurityManager(
872
+ nsIXPCSecurityManager::HOOK_GET_SERVICE);
873
+ if(sm && NS_FAILED(sm->CanCreateInstance(cx, mDetails.ID())))
874
+ {
875
+ NS_ASSERTION(JS_IsExceptionPending(cx),
876
+ "security manager vetoed GetService without setting exception");
877
+ return NS_OK;
878
+ }
879
+
880
+ // If an IID was passed in then use it
881
+ const nsID* iid = GetIIDArg(argc, argv, cx);
882
+ if (!iid)
883
+ return NS_ERROR_XPC_BAD_IID;
884
+
885
+ nsCOMPtr<nsIServiceManager> svcMgr;
886
+ nsresult rv = NS_GetServiceManager(getter_AddRefs(svcMgr));
887
+ if (NS_FAILED(rv))
888
+ return rv;
889
+
890
+ nsCOMPtr<nsISupports> srvc;
891
+ rv = svcMgr->GetService(mDetails.ID(), *iid, getter_AddRefs(srvc));
892
+ NS_ASSERTION(NS_FAILED(rv) || srvc, "service manager returned success, but service is null!");
893
+ if(NS_FAILED(rv) || !srvc)
894
+ return NS_ERROR_XPC_GS_RETURNED_FAILURE;
895
+
896
+ JSObject* instJSObj;
897
+ nsCOMPtr<nsIXPConnectJSObjectHolder> holder;
898
+ rv = xpc->WrapNative(cx, obj, srvc, *iid, getter_AddRefs(holder));
899
+ if(NS_FAILED(rv) || !holder || NS_FAILED(holder->GetJSObject(&instJSObj)))
900
+ return NS_ERROR_XPC_CANT_CREATE_WN;
901
+
902
+ *vp = OBJECT_TO_JSVAL(instJSObj);
903
+ ccxp->SetReturnValueWasSet(JS_TRUE);
904
+ return NS_OK;
905
+ }
906
+
907
+ /* PRBool construct (in nsIXPConnectWrappedNative wrapper, in JSContextPtr cx, in JSObjectPtr obj, in PRUint32 argc, in JSValPtr argv, in JSValPtr vp); */
908
+ NS_IMETHODIMP
909
+ nsJSCID::Construct(nsIXPConnectWrappedNative *wrapper,
910
+ JSContext * cx, JSObject * obj,
911
+ PRUint32 argc, jsval * argv, jsval * vp,
912
+ PRBool *_retval)
913
+ {
914
+ XPCJSRuntime* rt = nsXPConnect::GetRuntimeInstance();
915
+ if(!rt)
916
+ return NS_ERROR_FAILURE;
917
+
918
+ // 'push' a call context and call on it
919
+ XPCCallContext ccx(JS_CALLER, cx, obj, nsnull,
920
+ rt->GetStringJSVal(XPCJSRuntime::IDX_CREATE_INSTANCE),
921
+ argc, argv, vp);
922
+
923
+ *_retval = XPCWrappedNative::CallMethod(ccx);
924
+ return NS_OK;
925
+ }
926
+
927
+ /* PRBool hasInstance (in nsIXPConnectWrappedNative wrapper, in JSContextPtr cx, in JSObjectPtr obj, in JSVal val, out PRBool bp); */
928
+ NS_IMETHODIMP
929
+ nsJSCID::HasInstance(nsIXPConnectWrappedNative *wrapper,
930
+ JSContext * cx, JSObject * obj,
931
+ jsval val, PRBool *bp, PRBool *_retval)
932
+ {
933
+ *bp = JS_FALSE;
934
+ nsresult rv = NS_OK;
935
+
936
+ if(!JSVAL_IS_PRIMITIVE(val))
937
+ {
938
+ // we have a JSObject
939
+ JSObject* obj = JSVAL_TO_OBJECT(val);
940
+
941
+ NS_ASSERTION(obj, "when is an object not an object?");
942
+
943
+ // is this really a native xpcom object with a wrapper?
944
+ XPCWrappedNative* other_wrapper =
945
+ XPCWrappedNative::GetWrappedNativeOfJSObject(cx, obj);
946
+
947
+ if(!other_wrapper)
948
+ return NS_OK;
949
+
950
+ // We consider CID equality to be the thing that matters here.
951
+ // This is perhaps debatable.
952
+ nsIClassInfo* ci = other_wrapper->GetClassInfo();
953
+ if(ci)
954
+ {
955
+ nsID cid;
956
+ if(NS_SUCCEEDED(ci->GetClassIDNoAlloc(&cid)))
957
+ *bp = cid.Equals(mDetails.ID());
958
+ }
959
+ }
960
+ return rv;
961
+ }
962
+
963
+ /***************************************************************************/
964
+ // additional utilities...
965
+
966
+ JSObject *
967
+ xpc_NewIDObject(JSContext *cx, JSObject* jsobj, const nsID& aID)
968
+ {
969
+ JSObject *obj = nsnull;
970
+
971
+ nsCOMPtr<nsIJSID> iid =
972
+ dont_AddRef(static_cast<nsIJSID*>(nsJSID::NewID(aID)));
973
+ if(iid)
974
+ {
975
+ nsXPConnect* xpc = nsXPConnect::GetXPConnect();
976
+ if(xpc)
977
+ {
978
+ nsCOMPtr<nsIXPConnectJSObjectHolder> holder;
979
+ nsresult rv = xpc->WrapNative(cx, jsobj,
980
+ static_cast<nsISupports*>(iid),
981
+ NS_GET_IID(nsIJSID),
982
+ getter_AddRefs(holder));
983
+ if(NS_SUCCEEDED(rv) && holder)
984
+ {
985
+ holder->GetJSObject(&obj);
986
+ }
987
+ }
988
+ }
989
+ return obj;
990
+ }
991
+
992
+ // note: returned pointer is only valid while |obj| remains alive!
993
+ const nsID*
994
+ xpc_JSObjectToID(JSContext *cx, JSObject* obj)
995
+ {
996
+ if(!cx || !obj)
997
+ return nsnull;
998
+
999
+ // NOTE: this call does NOT addref
1000
+ XPCWrappedNative* wrapper =
1001
+ XPCWrappedNative::GetWrappedNativeOfJSObject(cx, obj);
1002
+ if(wrapper &&
1003
+ (wrapper->HasInterfaceNoQI(NS_GET_IID(nsIJSID)) ||
1004
+ wrapper->HasInterfaceNoQI(NS_GET_IID(nsIJSIID)) ||
1005
+ wrapper->HasInterfaceNoQI(NS_GET_IID(nsIJSCID))))
1006
+ {
1007
+ return ((nsIJSID*)wrapper->GetIdentityObject())->GetID();
1008
+ }
1009
+ return nsnull;
1010
+ }
1011
+
1012
+ JSBool
1013
+ xpc_JSObjectIsID(JSContext *cx, JSObject* obj)
1014
+ {
1015
+ NS_ASSERTION(cx && obj, "bad param");
1016
+ // NOTE: this call does NOT addref
1017
+ XPCWrappedNative* wrapper =
1018
+ XPCWrappedNative::GetWrappedNativeOfJSObject(cx, obj);
1019
+ return wrapper &&
1020
+ (wrapper->HasInterfaceNoQI(NS_GET_IID(nsIJSID)) ||
1021
+ wrapper->HasInterfaceNoQI(NS_GET_IID(nsIJSIID)) ||
1022
+ wrapper->HasInterfaceNoQI(NS_GET_IID(nsIJSCID)));
1023
+ }
1024
+
1025
+