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,399 @@
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
+ /* Code for throwing errors into JavaScript. */
42
+
43
+ #include "xpcprivate.h"
44
+ #include "XPCWrapper.h"
45
+
46
+ JSBool XPCThrower::sVerbose = JS_TRUE;
47
+
48
+ // static
49
+ void
50
+ XPCThrower::Throw(nsresult rv, JSContext* cx)
51
+ {
52
+ const char* format;
53
+ if(JS_IsExceptionPending(cx))
54
+ return;
55
+ if(!nsXPCException::NameAndFormatForNSResult(rv, nsnull, &format))
56
+ format = "";
57
+ BuildAndThrowException(cx, rv, format);
58
+ }
59
+
60
+ /*
61
+ * If there has already been an exception thrown, see if we're throwing the
62
+ * same sort of exception, and if we are, don't clobber the old one. ccx
63
+ * should be the current call context.
64
+ */
65
+ // static
66
+ JSBool
67
+ XPCThrower::CheckForPendingException(nsresult result, JSContext *cx)
68
+ {
69
+ nsXPConnect* xpc = nsXPConnect::GetXPConnect();
70
+ if(!xpc)
71
+ return JS_FALSE;
72
+
73
+ nsCOMPtr<nsIException> e;
74
+ xpc->GetPendingException(getter_AddRefs(e));
75
+ if(!e)
76
+ return JS_FALSE;
77
+ xpc->SetPendingException(nsnull);
78
+
79
+ nsresult e_result;
80
+ if(NS_FAILED(e->GetResult(&e_result)) || e_result != result)
81
+ return JS_FALSE;
82
+
83
+ if(!ThrowExceptionObject(cx, e))
84
+ JS_ReportOutOfMemory(cx);
85
+ return JS_TRUE;
86
+ }
87
+
88
+ // static
89
+ void
90
+ XPCThrower::Throw(nsresult rv, XPCCallContext& ccx)
91
+ {
92
+ char* sz;
93
+ const char* format;
94
+
95
+ if(CheckForPendingException(rv, ccx))
96
+ return;
97
+
98
+ if(!nsXPCException::NameAndFormatForNSResult(rv, nsnull, &format))
99
+ format = "";
100
+
101
+ sz = (char*) format;
102
+
103
+ if(sz && sVerbose)
104
+ Verbosify(ccx, &sz, PR_FALSE);
105
+
106
+ BuildAndThrowException(ccx, rv, sz);
107
+
108
+ if(sz && sz != format)
109
+ JS_smprintf_free(sz);
110
+ }
111
+
112
+
113
+ // static
114
+ void
115
+ XPCThrower::ThrowBadResult(nsresult rv, nsresult result, XPCCallContext& ccx)
116
+ {
117
+ char* sz;
118
+ const char* format;
119
+ const char* name;
120
+
121
+ /*
122
+ * If there is a pending exception when the native call returns and
123
+ * it has the same error result as returned by the native call, then
124
+ * the native call may be passing through an error from a previous JS
125
+ * call. So we'll just throw that exception into our JS.
126
+ */
127
+
128
+ if(CheckForPendingException(result, ccx))
129
+ return;
130
+
131
+ // else...
132
+
133
+ if(!nsXPCException::NameAndFormatForNSResult(rv, nsnull, &format) || !format)
134
+ format = "";
135
+
136
+ if(nsXPCException::NameAndFormatForNSResult(result, &name, nsnull) && name)
137
+ sz = JS_smprintf("%s 0x%x (%s)", format, result, name);
138
+ else
139
+ sz = JS_smprintf("%s 0x%x", format, result);
140
+
141
+ if(sz && sVerbose)
142
+ Verbosify(ccx, &sz, PR_TRUE);
143
+
144
+ BuildAndThrowException(ccx, result, sz);
145
+
146
+ if(sz)
147
+ JS_smprintf_free(sz);
148
+ }
149
+
150
+ // static
151
+ void
152
+ XPCThrower::ThrowBadParam(nsresult rv, uintN paramNum, XPCCallContext& ccx)
153
+ {
154
+ char* sz;
155
+ const char* format;
156
+
157
+ if(!nsXPCException::NameAndFormatForNSResult(rv, nsnull, &format))
158
+ format = "";
159
+
160
+ sz = JS_smprintf("%s arg %d", format, paramNum);
161
+
162
+ if(sz && sVerbose)
163
+ Verbosify(ccx, &sz, PR_TRUE);
164
+
165
+ BuildAndThrowException(ccx, rv, sz);
166
+
167
+ if(sz)
168
+ JS_smprintf_free(sz);
169
+ }
170
+
171
+
172
+ // static
173
+ void
174
+ XPCThrower::Verbosify(XPCCallContext& ccx,
175
+ char** psz, PRBool own)
176
+ {
177
+ char* sz = nsnull;
178
+
179
+ if(ccx.HasInterfaceAndMember())
180
+ {
181
+ XPCNativeInterface* iface = ccx.GetInterface();
182
+ #ifdef XPC_IDISPATCH_SUPPORT
183
+ NS_ASSERTION(ccx.GetIDispatchMember() == nsnull ||
184
+ ccx.GetMember() == nsnull,
185
+ "Both IDispatch member and regular XPCOM member "
186
+ "were set in XPCCallContext");
187
+ char const * name;
188
+ if(ccx.GetIDispatchMember())
189
+ {
190
+ XPCDispInterface::Member * member =
191
+ reinterpret_cast<XPCDispInterface::Member*>(ccx.GetIDispatchMember());
192
+ if(member && JSVAL_IS_STRING(member->GetName()))
193
+ {
194
+ name = JS_GetStringBytes(JSVAL_TO_STRING(member->GetName()));
195
+ }
196
+ else
197
+ name = "Unknown";
198
+ }
199
+ else
200
+ name = iface->GetMemberName(ccx, ccx.GetMember());
201
+ sz = JS_smprintf("%s [%s.%s]",
202
+ *psz,
203
+ iface->GetNameString(),
204
+ name);
205
+ #else
206
+ sz = JS_smprintf("%s [%s.%s]",
207
+ *psz,
208
+ iface->GetNameString(),
209
+ iface->GetMemberName(ccx, ccx.GetMember()));
210
+ #endif
211
+ }
212
+
213
+ if(sz)
214
+ {
215
+ if(own)
216
+ JS_smprintf_free(*psz);
217
+ *psz = sz;
218
+ }
219
+ }
220
+
221
+ // static
222
+ void
223
+ XPCThrower::BuildAndThrowException(JSContext* cx, nsresult rv, const char* sz)
224
+ {
225
+ JSBool success = JS_FALSE;
226
+
227
+ /* no need to set an expection if the security manager already has */
228
+ if(rv == NS_ERROR_XPC_SECURITY_MANAGER_VETO && JS_IsExceptionPending(cx))
229
+ return;
230
+ nsCOMPtr<nsIException> finalException;
231
+ nsCOMPtr<nsIException> defaultException;
232
+ nsXPCException::NewException(sz, rv, nsnull, nsnull, getter_AddRefs(defaultException));
233
+ XPCPerThreadData* tls = XPCPerThreadData::GetData(cx);
234
+ if(tls)
235
+ {
236
+ nsIExceptionManager * exceptionManager = tls->GetExceptionManager();
237
+ if(exceptionManager)
238
+ {
239
+ // Ask the provider for the exception, if there is no provider
240
+ // we expect it to set e to null
241
+ exceptionManager->GetExceptionFromProvider(
242
+ rv,
243
+ defaultException,
244
+ getter_AddRefs(finalException));
245
+ // We should get at least the defaultException back,
246
+ // but just in case
247
+ if(finalException == nsnull)
248
+ {
249
+ finalException = defaultException;
250
+ }
251
+ }
252
+ }
253
+ // XXX Should we put the following test and call to JS_ReportOutOfMemory
254
+ // inside this test?
255
+ if(finalException)
256
+ success = ThrowExceptionObject(cx, finalException);
257
+ // If we weren't able to build or throw an exception we're
258
+ // most likely out of memory
259
+ if(!success)
260
+ JS_ReportOutOfMemory(cx);
261
+ }
262
+
263
+ static PRBool
264
+ IsCallerChrome(JSContext* cx)
265
+ {
266
+ nsresult rv;
267
+
268
+ nsCOMPtr<nsIScriptSecurityManager> secMan;
269
+ if(XPCPerThreadData::IsMainThread(cx))
270
+ {
271
+ secMan = XPCWrapper::GetSecurityManager();
272
+ }
273
+ else
274
+ {
275
+ nsXPConnect* xpc = nsXPConnect::GetXPConnect();
276
+ if(!xpc)
277
+ return PR_FALSE;
278
+
279
+ nsCOMPtr<nsIXPCSecurityManager> xpcSecMan;
280
+ PRUint16 flags = 0;
281
+ rv = xpc->GetSecurityManagerForJSContext(cx, getter_AddRefs(xpcSecMan),
282
+ &flags);
283
+ if(NS_FAILED(rv) || !xpcSecMan)
284
+ return PR_FALSE;
285
+
286
+ secMan = do_QueryInterface(xpcSecMan);
287
+ }
288
+
289
+ if(!secMan)
290
+ return PR_FALSE;
291
+
292
+ PRBool isChrome;
293
+ rv = secMan->SubjectPrincipalIsSystem(&isChrome);
294
+ return NS_SUCCEEDED(rv) && isChrome;
295
+ }
296
+
297
+ // static
298
+ JSBool
299
+ XPCThrower::ThrowExceptionObject(JSContext* cx, nsIException* e)
300
+ {
301
+ JSBool success = JS_FALSE;
302
+ if(e)
303
+ {
304
+ nsCOMPtr<nsXPCException> xpcEx;
305
+ jsval thrown;
306
+ nsXPConnect* xpc;
307
+
308
+ // If we stored the original thrown JS value in the exception
309
+ // (see XPCConvert::ConstructException) and we are in a web
310
+ // context (i.e., not chrome), rethrow the original value.
311
+ if(!IsCallerChrome(cx) &&
312
+ (xpcEx = do_QueryInterface(e)) &&
313
+ xpcEx->StealThrownJSVal(&thrown))
314
+ {
315
+ JS_SetPendingException(cx, thrown);
316
+ success = JS_TRUE;
317
+ }
318
+ else if((xpc = nsXPConnect::GetXPConnect()))
319
+ {
320
+ JSObject* glob = JS_GetScopeChain(cx);
321
+ if(!glob)
322
+ return JS_FALSE;
323
+ glob = JS_GetGlobalForObject(cx, glob);
324
+
325
+ nsCOMPtr<nsIXPConnectJSObjectHolder> holder;
326
+ nsresult rv = xpc->WrapNative(cx, glob, e,
327
+ NS_GET_IID(nsIException),
328
+ getter_AddRefs(holder));
329
+ if(NS_SUCCEEDED(rv) && holder)
330
+ {
331
+ JSObject* obj;
332
+ if(NS_SUCCEEDED(holder->GetJSObject(&obj)))
333
+ {
334
+ JS_SetPendingException(cx, OBJECT_TO_JSVAL(obj));
335
+ success = JS_TRUE;
336
+ }
337
+ }
338
+ }
339
+ }
340
+ return success;
341
+ }
342
+
343
+ #ifdef XPC_IDISPATCH_SUPPORT
344
+ // static
345
+ void
346
+ XPCThrower::ThrowCOMError(JSContext* cx, unsigned long COMErrorCode,
347
+ nsresult rv, const EXCEPINFO * exception)
348
+ {
349
+ nsCAutoString msg;
350
+ IErrorInfo * pError;
351
+ const char * format;
352
+ if(!nsXPCException::NameAndFormatForNSResult(rv, nsnull, &format))
353
+ format = "";
354
+ msg = format;
355
+ if(exception)
356
+ {
357
+ msg += static_cast<const char *>
358
+ (_bstr_t(exception->bstrSource, false));
359
+ msg += " : ";
360
+ msg.AppendInt(static_cast<PRUint32>(COMErrorCode));
361
+ msg += " - ";
362
+ msg += static_cast<const char *>
363
+ (_bstr_t(exception->bstrDescription, false));
364
+ }
365
+ else
366
+ {
367
+ // Get the current COM error object
368
+ unsigned long result = GetErrorInfo(0, &pError);
369
+ if(SUCCEEDED(result) && pError)
370
+ {
371
+ // Build an error message from the COM error object
372
+ BSTR bstrSource = NULL;
373
+ if(SUCCEEDED(pError->GetSource(&bstrSource)) && bstrSource)
374
+ {
375
+ _bstr_t src(bstrSource, false);
376
+ msg += static_cast<const char *>(src);
377
+ msg += " : ";
378
+ }
379
+ msg.AppendInt(static_cast<PRUint32>(COMErrorCode), 16);
380
+ BSTR bstrDesc = NULL;
381
+ if(SUCCEEDED(pError->GetDescription(&bstrDesc)) && bstrDesc)
382
+ {
383
+ msg += " - ";
384
+ _bstr_t desc(bstrDesc, false);
385
+ msg += static_cast<const char *>(desc);
386
+ }
387
+ }
388
+ else
389
+ {
390
+ // No error object, so just report the result
391
+ msg += "COM Error Result = ";
392
+ msg.AppendInt(static_cast<PRUint32>(COMErrorCode), 16);
393
+ }
394
+ }
395
+
396
+ XPCThrower::BuildAndThrowException(cx, rv, msg.get());
397
+ }
398
+
399
+ #endif
@@ -0,0 +1,850 @@
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
+ /* nsIVariant implementation for xpconnect. */
42
+
43
+ #include "xpcprivate.h"
44
+
45
+ NS_IMPL_CYCLE_COLLECTION_CLASS(XPCVariant)
46
+
47
+ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(XPCVariant)
48
+ NS_INTERFACE_MAP_ENTRY(XPCVariant)
49
+ NS_INTERFACE_MAP_ENTRY(nsIVariant)
50
+ NS_INTERFACE_MAP_ENTRY(nsISupports)
51
+ NS_IMPL_QUERY_CLASSINFO(XPCVariant)
52
+ NS_INTERFACE_MAP_END
53
+ NS_IMPL_CI_INTERFACE_GETTER2(XPCVariant, XPCVariant, nsIVariant)
54
+
55
+ NS_IMPL_CYCLE_COLLECTING_ADDREF(XPCVariant)
56
+ NS_IMPL_CYCLE_COLLECTING_RELEASE(XPCVariant)
57
+
58
+ XPCVariant::XPCVariant(XPCCallContext& ccx, jsval aJSVal)
59
+ : mJSVal(aJSVal)
60
+ {
61
+ nsVariant::Initialize(&mData);
62
+ if(!JSVAL_IS_PRIMITIVE(mJSVal))
63
+ {
64
+ // If the incoming object is an XPCWrappedNative, then it could be a
65
+ // double-wrapped object, and we should return the double-wrapped
66
+ // object back out to script.
67
+
68
+ JSObject* proto;
69
+ XPCWrappedNative* wn =
70
+ XPCWrappedNative::GetWrappedNativeOfJSObject(ccx,
71
+ JSVAL_TO_OBJECT(mJSVal),
72
+ nsnull,
73
+ &proto);
74
+ mReturnRawObject = !wn && !proto;
75
+ }
76
+ else
77
+ mReturnRawObject = JS_FALSE;
78
+ }
79
+
80
+ XPCTraceableVariant::~XPCTraceableVariant()
81
+ {
82
+ NS_ASSERTION(JSVAL_IS_GCTHING(mJSVal), "Must be traceable or unlinked");
83
+
84
+ // If mJSVal is JSVAL_STRING, we don't need to clean anything up;
85
+ // simply removing the string from the root set is good.
86
+ if(!JSVAL_IS_STRING(mJSVal))
87
+ nsVariant::Cleanup(&mData);
88
+
89
+ if(!JSVAL_IS_NULL(mJSVal))
90
+ RemoveFromRootSet(nsXPConnect::GetRuntimeInstance()->GetJSRuntime());
91
+ }
92
+
93
+ void XPCTraceableVariant::TraceJS(JSTracer* trc)
94
+ {
95
+ NS_ASSERTION(JSVAL_IS_TRACEABLE(mJSVal), "Must be traceable");
96
+ JS_SET_TRACING_DETAILS(trc, PrintTraceName, this, 0);
97
+ JS_CallTracer(trc, JSVAL_TO_TRACEABLE(mJSVal), JSVAL_TRACE_KIND(mJSVal));
98
+ }
99
+
100
+ #ifdef DEBUG
101
+ // static
102
+ void
103
+ XPCTraceableVariant::PrintTraceName(JSTracer* trc, char *buf, size_t bufsize)
104
+ {
105
+ JS_snprintf(buf, bufsize, "XPCVariant[0x%p].mJSVal", trc->debugPrintArg);
106
+ }
107
+ #endif
108
+
109
+ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(XPCVariant)
110
+ if(JSVAL_IS_OBJECT(tmp->mJSVal))
111
+ cb.NoteScriptChild(nsIProgrammingLanguage::JAVASCRIPT,
112
+ JSVAL_TO_OBJECT(tmp->mJSVal));
113
+
114
+ nsVariant::Traverse(tmp->mData, cb);
115
+ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
116
+
117
+ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(XPCVariant)
118
+ // We're sharing mJSVal's buffer, clear the pointer to it
119
+ // so Cleanup() won't try to delete it
120
+ if(JSVAL_IS_STRING(tmp->mJSVal))
121
+ tmp->mData.u.wstr.mWStringValue = nsnull;
122
+ nsVariant::Cleanup(&tmp->mData);
123
+
124
+ if(JSVAL_IS_TRACEABLE(tmp->mJSVal))
125
+ {
126
+ XPCTraceableVariant *v = static_cast<XPCTraceableVariant*>(tmp);
127
+ v->RemoveFromRootSet(nsXPConnect::GetRuntimeInstance()->GetJSRuntime());
128
+ }
129
+ tmp->mJSVal = JSVAL_NULL;
130
+ NS_IMPL_CYCLE_COLLECTION_UNLINK_END
131
+
132
+ // static
133
+ XPCVariant* XPCVariant::newVariant(XPCCallContext& ccx, jsval aJSVal)
134
+ {
135
+ XPCVariant* variant;
136
+
137
+ if(!JSVAL_IS_TRACEABLE(aJSVal))
138
+ variant = new XPCVariant(ccx, aJSVal);
139
+ else
140
+ variant = new XPCTraceableVariant(ccx, aJSVal);
141
+
142
+ if(!variant)
143
+ return nsnull;
144
+ NS_ADDREF(variant);
145
+
146
+ if(!variant->InitializeData(ccx))
147
+ NS_RELEASE(variant); // Also sets variant to nsnull.
148
+
149
+ return variant;
150
+ }
151
+
152
+ // Helper class to give us a namespace for the table based code below.
153
+ class XPCArrayHomogenizer
154
+ {
155
+ private:
156
+ enum Type
157
+ {
158
+ tNull = 0 , // null value
159
+ tInt , // Integer
160
+ tDbl , // Double
161
+ tBool , // Boolean
162
+ tStr , // String
163
+ tID , // ID
164
+ tArr , // Array
165
+ tISup , // nsISupports (really just a plain JSObject)
166
+ tUnk , // Unknown. Used only for initial state.
167
+
168
+ tTypeCount , // Just a count for table dimensioning.
169
+
170
+ tVar , // nsVariant - last ditch if no other common type found.
171
+ tErr // No valid state or type has this value.
172
+ };
173
+
174
+ // Table has tUnk as a state (column) but not as a type (row).
175
+ static Type StateTable[tTypeCount][tTypeCount-1];
176
+
177
+ public:
178
+ static JSBool GetTypeForArray(XPCCallContext& ccx, JSObject* array,
179
+ jsuint length,
180
+ nsXPTType* resultType, nsID* resultID);
181
+ };
182
+
183
+
184
+ // Current state is the column down the side.
185
+ // Current type is the row along the top.
186
+ // New state is in the box at the intersection.
187
+
188
+ XPCArrayHomogenizer::Type
189
+ XPCArrayHomogenizer::StateTable[tTypeCount][tTypeCount-1] = {
190
+ /* tNull,tInt ,tDbl ,tBool,tStr ,tID ,tArr ,tISup */
191
+ /* tNull */{tNull,tVar ,tVar ,tVar ,tStr ,tID ,tVar ,tISup },
192
+ /* tInt */{tVar ,tInt ,tDbl ,tVar ,tVar ,tVar ,tVar ,tVar },
193
+ /* tDbl */{tVar ,tDbl ,tDbl ,tVar ,tVar ,tVar ,tVar ,tVar },
194
+ /* tBool */{tVar ,tVar ,tVar ,tBool,tVar ,tVar ,tVar ,tVar },
195
+ /* tStr */{tStr ,tVar ,tVar ,tVar ,tStr ,tVar ,tVar ,tVar },
196
+ /* tID */{tID ,tVar ,tVar ,tVar ,tVar ,tID ,tVar ,tVar },
197
+ /* tArr */{tErr ,tErr ,tErr ,tErr ,tErr ,tErr ,tErr ,tErr },
198
+ /* tISup */{tISup,tVar ,tVar ,tVar ,tVar ,tVar ,tVar ,tISup },
199
+ /* tUnk */{tNull,tInt ,tDbl ,tBool,tStr ,tID ,tVar ,tISup }};
200
+
201
+ // static
202
+ JSBool
203
+ XPCArrayHomogenizer::GetTypeForArray(XPCCallContext& ccx, JSObject* array,
204
+ jsuint length,
205
+ nsXPTType* resultType, nsID* resultID)
206
+ {
207
+ Type state = tUnk;
208
+ Type type;
209
+
210
+ for(jsuint i = 0; i < length; i++)
211
+ {
212
+ jsval val;
213
+ if(!JS_GetElement(ccx, array, i, &val))
214
+ return JS_FALSE;
215
+
216
+ if(JSVAL_IS_INT(val))
217
+ type = tInt;
218
+ else if(JSVAL_IS_DOUBLE(val))
219
+ type = tDbl;
220
+ else if(JSVAL_IS_BOOLEAN(val))
221
+ type = tBool;
222
+ else if(JSVAL_IS_VOID(val))
223
+ {
224
+ state = tVar;
225
+ break;
226
+ }
227
+ else if(JSVAL_IS_NULL(val))
228
+ type = tNull;
229
+ else if(JSVAL_IS_STRING(val))
230
+ type = tStr;
231
+ else
232
+ {
233
+ NS_ASSERTION(JSVAL_IS_OBJECT(val), "invalid type of jsval!");
234
+ JSObject* jsobj = JSVAL_TO_OBJECT(val);
235
+ if(JS_IsArrayObject(ccx, jsobj))
236
+ type = tArr;
237
+ else if(xpc_JSObjectIsID(ccx, jsobj))
238
+ type = tID;
239
+ else
240
+ type = tISup;
241
+ }
242
+
243
+ NS_ASSERTION(state != tErr, "bad state table!");
244
+ NS_ASSERTION(type != tErr, "bad type!");
245
+ NS_ASSERTION(type != tVar, "bad type!");
246
+ NS_ASSERTION(type != tUnk, "bad type!");
247
+
248
+ state = StateTable[state][type];
249
+
250
+ NS_ASSERTION(state != tErr, "bad state table!");
251
+ NS_ASSERTION(state != tUnk, "bad state table!");
252
+
253
+ if(state == tVar)
254
+ break;
255
+ }
256
+
257
+ switch(state)
258
+ {
259
+ case tInt :
260
+ *resultType = nsXPTType((uint8)TD_INT32);
261
+ break;
262
+ case tDbl :
263
+ *resultType = nsXPTType((uint8)TD_DOUBLE);
264
+ break;
265
+ case tBool:
266
+ *resultType = nsXPTType((uint8)TD_BOOL);
267
+ break;
268
+ case tStr :
269
+ *resultType = nsXPTType((uint8)(TD_PWSTRING | XPT_TDP_POINTER));
270
+ break;
271
+ case tID :
272
+ *resultType = nsXPTType((uint8)(TD_PNSIID | XPT_TDP_POINTER));
273
+ break;
274
+ case tISup:
275
+ *resultType = nsXPTType((uint8)(TD_INTERFACE_IS_TYPE | XPT_TDP_POINTER));
276
+ *resultID = NS_GET_IID(nsISupports);
277
+ break;
278
+ case tNull:
279
+ // FALL THROUGH
280
+ case tVar :
281
+ *resultType = nsXPTType((uint8)(TD_INTERFACE_IS_TYPE | XPT_TDP_POINTER));
282
+ *resultID = NS_GET_IID(nsIVariant);
283
+ break;
284
+ case tArr :
285
+ // FALL THROUGH
286
+ case tUnk :
287
+ // FALL THROUGH
288
+ case tErr :
289
+ // FALL THROUGH
290
+ default:
291
+ NS_ERROR("bad state");
292
+ return JS_FALSE;
293
+ }
294
+ return JS_TRUE;
295
+ }
296
+
297
+ JSBool XPCVariant::InitializeData(XPCCallContext& ccx)
298
+ {
299
+ if(JSVAL_IS_INT(mJSVal))
300
+ return NS_SUCCEEDED(nsVariant::SetFromInt32(&mData,
301
+ JSVAL_TO_INT(mJSVal)));
302
+ if(JSVAL_IS_DOUBLE(mJSVal))
303
+ return NS_SUCCEEDED(nsVariant::SetFromDouble(&mData,
304
+ *JSVAL_TO_DOUBLE(mJSVal)));
305
+ if(JSVAL_IS_BOOLEAN(mJSVal))
306
+ return NS_SUCCEEDED(nsVariant::SetFromBool(&mData,
307
+ JSVAL_TO_BOOLEAN(mJSVal)));
308
+ if(JSVAL_IS_VOID(mJSVal))
309
+ return NS_SUCCEEDED(nsVariant::SetToVoid(&mData));
310
+ if(JSVAL_IS_NULL(mJSVal))
311
+ return NS_SUCCEEDED(nsVariant::SetToEmpty(&mData));
312
+ if(JSVAL_IS_STRING(mJSVal))
313
+ {
314
+ // Make our string immutable. This will also ensure null-termination,
315
+ // which nsVariant assumes for its PRUnichar* stuff.
316
+ JSString* str = JSVAL_TO_STRING(mJSVal);
317
+ if(!JS_MakeStringImmutable(ccx, str))
318
+ return JS_FALSE;
319
+
320
+ // Don't use nsVariant::SetFromWStringWithSize, because that will copy
321
+ // the data. Just handle this ourselves. Note that it's ok to not
322
+ // copy because we added mJSVal as a GC root.
323
+ NS_ASSERTION(mData.mType == nsIDataType::VTYPE_EMPTY,
324
+ "Why do we already have data?");
325
+
326
+ mData.u.wstr.mWStringValue =
327
+ reinterpret_cast<PRUnichar*>(JS_GetStringChars(str));
328
+ // Use C-style cast, because reinterpret cast from size_t to
329
+ // PRUint32 is not valid on some platforms.
330
+ mData.u.wstr.mWStringLength = (PRUint32)JS_GetStringLength(str);
331
+ mData.mType = nsIDataType::VTYPE_WSTRING_SIZE_IS;
332
+
333
+ return JS_TRUE;
334
+ }
335
+
336
+ // leaving only JSObject...
337
+ NS_ASSERTION(JSVAL_IS_OBJECT(mJSVal), "invalid type of jsval!");
338
+
339
+ JSObject* jsobj = JSVAL_TO_OBJECT(mJSVal);
340
+
341
+ // Let's see if it is a xpcJSID.
342
+
343
+ const nsID* id = xpc_JSObjectToID(ccx, jsobj);
344
+ if(id)
345
+ return NS_SUCCEEDED(nsVariant::SetFromID(&mData, *id));
346
+
347
+ // Let's see if it is a js array object.
348
+
349
+ jsuint len;
350
+
351
+ if(JS_IsArrayObject(ccx, jsobj) && JS_GetArrayLength(ccx, jsobj, &len))
352
+ {
353
+ if(!len)
354
+ {
355
+ // Zero length array
356
+ nsVariant::SetToEmptyArray(&mData);
357
+ return JS_TRUE;
358
+ }
359
+
360
+ nsXPTType type;
361
+ nsID id;
362
+
363
+ if(!XPCArrayHomogenizer::GetTypeForArray(ccx, jsobj, len, &type, &id))
364
+ return JS_FALSE;
365
+
366
+ if(!XPCConvert::JSArray2Native(ccx, &mData.u.array.mArrayValue,
367
+ mJSVal, len, len,
368
+ type, type.IsPointer(),
369
+ &id, nsnull))
370
+ return JS_FALSE;
371
+
372
+ mData.mType = nsIDataType::VTYPE_ARRAY;
373
+ if(type.IsInterfacePointer())
374
+ mData.u.array.mArrayInterfaceID = id;
375
+ mData.u.array.mArrayCount = len;
376
+ mData.u.array.mArrayType = type.TagPart();
377
+
378
+ return JS_TRUE;
379
+ }
380
+
381
+ // XXX This could be smarter and pick some more interesting iface.
382
+
383
+ nsXPConnect* xpc;
384
+ nsCOMPtr<nsISupports> wrapper;
385
+ const nsIID& iid = NS_GET_IID(nsISupports);
386
+
387
+ return nsnull != (xpc = nsXPConnect::GetXPConnect()) &&
388
+ NS_SUCCEEDED(xpc->WrapJS(ccx, jsobj,
389
+ iid, getter_AddRefs(wrapper))) &&
390
+ NS_SUCCEEDED(nsVariant::SetFromInterface(&mData, iid, wrapper));
391
+ }
392
+
393
+ // static
394
+ JSBool
395
+ XPCVariant::VariantDataToJS(XPCCallContext& ccx,
396
+ nsIVariant* variant,
397
+ JSObject* scope, nsresult* pErr,
398
+ jsval* pJSVal)
399
+ {
400
+ // Get the type early because we might need to spoof it below.
401
+ PRUint16 type;
402
+ if(NS_FAILED(variant->GetDataType(&type)))
403
+ return JS_FALSE;
404
+
405
+ nsCOMPtr<XPCVariant> xpcvariant = do_QueryInterface(variant);
406
+ if(xpcvariant)
407
+ {
408
+ jsval realVal = xpcvariant->GetJSVal();
409
+ if(JSVAL_IS_PRIMITIVE(realVal) ||
410
+ type == nsIDataType::VTYPE_ARRAY ||
411
+ type == nsIDataType::VTYPE_EMPTY_ARRAY ||
412
+ type == nsIDataType::VTYPE_ID)
413
+ {
414
+ // Not a JSObject (or is a JSArray or is a JSObject representing
415
+ // an nsID),.
416
+ // So, just pass through the underlying data.
417
+ *pJSVal = realVal;
418
+ return JS_TRUE;
419
+ }
420
+
421
+ if(xpcvariant->mReturnRawObject)
422
+ {
423
+ NS_ASSERTION(type == nsIDataType::VTYPE_INTERFACE ||
424
+ type == nsIDataType::VTYPE_INTERFACE_IS,
425
+ "Weird variant");
426
+ *pJSVal = realVal;
427
+ return JS_TRUE;
428
+ }
429
+
430
+ // else, it's an object and we really need to double wrap it if we've
431
+ // already decided that its 'natural' type is as some sort of interface.
432
+
433
+ // We just fall through to the code below and let it do what it does.
434
+ }
435
+
436
+ // The nsIVariant is not a XPCVariant (or we act like it isn't).
437
+ // So we extract the data and do the Right Thing.
438
+
439
+ // We ASSUME that the variant implementation can do these conversions...
440
+
441
+ nsXPTCVariant xpctvar;
442
+ nsID iid;
443
+ nsAutoString astring;
444
+ nsCAutoString cString;
445
+ nsUTF8String utf8String;
446
+ PRUint32 size;
447
+ xpctvar.flags = 0;
448
+ JSBool success;
449
+
450
+ switch(type)
451
+ {
452
+ case nsIDataType::VTYPE_INT8:
453
+ case nsIDataType::VTYPE_INT16:
454
+ case nsIDataType::VTYPE_INT32:
455
+ case nsIDataType::VTYPE_INT64:
456
+ case nsIDataType::VTYPE_UINT8:
457
+ case nsIDataType::VTYPE_UINT16:
458
+ case nsIDataType::VTYPE_UINT32:
459
+ case nsIDataType::VTYPE_UINT64:
460
+ case nsIDataType::VTYPE_FLOAT:
461
+ case nsIDataType::VTYPE_DOUBLE:
462
+ {
463
+ // Easy. Handle inline.
464
+ if(NS_FAILED(variant->GetAsDouble(&xpctvar.val.d)))
465
+ return JS_FALSE;
466
+ return JS_NewNumberValue(ccx, xpctvar.val.d, pJSVal);
467
+ }
468
+ case nsIDataType::VTYPE_BOOL:
469
+ {
470
+ // Easy. Handle inline.
471
+ if(NS_FAILED(variant->GetAsBool(&xpctvar.val.b)))
472
+ return JS_FALSE;
473
+ *pJSVal = BOOLEAN_TO_JSVAL(xpctvar.val.b);
474
+ return JS_TRUE;
475
+ }
476
+ case nsIDataType::VTYPE_CHAR:
477
+ if(NS_FAILED(variant->GetAsChar(&xpctvar.val.c)))
478
+ return JS_FALSE;
479
+ xpctvar.type = (uint8)TD_CHAR;
480
+ break;
481
+ case nsIDataType::VTYPE_WCHAR:
482
+ if(NS_FAILED(variant->GetAsWChar(&xpctvar.val.wc)))
483
+ return JS_FALSE;
484
+ xpctvar.type = (uint8)TD_WCHAR;
485
+ break;
486
+ case nsIDataType::VTYPE_ID:
487
+ if(NS_FAILED(variant->GetAsID(&iid)))
488
+ return JS_FALSE;
489
+ xpctvar.type = (uint8)(TD_PNSIID | XPT_TDP_POINTER);
490
+ xpctvar.val.p = &iid;
491
+ break;
492
+ case nsIDataType::VTYPE_ASTRING:
493
+ if(NS_FAILED(variant->GetAsAString(astring)))
494
+ return JS_FALSE;
495
+ xpctvar.type = (uint8)(TD_ASTRING | XPT_TDP_POINTER);
496
+ xpctvar.val.p = &astring;
497
+ break;
498
+ case nsIDataType::VTYPE_DOMSTRING:
499
+ if(NS_FAILED(variant->GetAsAString(astring)))
500
+ return JS_FALSE;
501
+ xpctvar.type = (uint8)(TD_DOMSTRING | XPT_TDP_POINTER);
502
+ xpctvar.val.p = &astring;
503
+ break;
504
+ case nsIDataType::VTYPE_CSTRING:
505
+ if(NS_FAILED(variant->GetAsACString(cString)))
506
+ return JS_FALSE;
507
+ xpctvar.type = (uint8)(TD_CSTRING | XPT_TDP_POINTER);
508
+ xpctvar.val.p = &cString;
509
+ break;
510
+ case nsIDataType::VTYPE_UTF8STRING:
511
+ if(NS_FAILED(variant->GetAsAUTF8String(utf8String)))
512
+ return JS_FALSE;
513
+ xpctvar.type = (uint8)(TD_UTF8STRING | XPT_TDP_POINTER);
514
+ xpctvar.val.p = &utf8String;
515
+ break;
516
+ case nsIDataType::VTYPE_CHAR_STR:
517
+ if(NS_FAILED(variant->GetAsString((char**)&xpctvar.val.p)))
518
+ return JS_FALSE;
519
+ xpctvar.type = (uint8)(TD_PSTRING | XPT_TDP_POINTER);
520
+ xpctvar.SetValIsAllocated();
521
+ break;
522
+ case nsIDataType::VTYPE_STRING_SIZE_IS:
523
+ if(NS_FAILED(variant->GetAsStringWithSize(&size,
524
+ (char**)&xpctvar.val.p)))
525
+ return JS_FALSE;
526
+ xpctvar.type = (uint8)(TD_PSTRING_SIZE_IS | XPT_TDP_POINTER);
527
+ xpctvar.SetValIsAllocated();
528
+ break;
529
+ case nsIDataType::VTYPE_WCHAR_STR:
530
+ if(NS_FAILED(variant->GetAsWString((PRUnichar**)&xpctvar.val.p)))
531
+ return JS_FALSE;
532
+ xpctvar.type = (uint8)(TD_PWSTRING | XPT_TDP_POINTER);
533
+ xpctvar.SetValIsAllocated();
534
+ break;
535
+ case nsIDataType::VTYPE_WSTRING_SIZE_IS:
536
+ if(NS_FAILED(variant->GetAsWStringWithSize(&size,
537
+ (PRUnichar**)&xpctvar.val.p)))
538
+ return JS_FALSE;
539
+ xpctvar.type = (uint8)(TD_PWSTRING_SIZE_IS | XPT_TDP_POINTER);
540
+ xpctvar.SetValIsAllocated();
541
+ break;
542
+ case nsIDataType::VTYPE_INTERFACE:
543
+ case nsIDataType::VTYPE_INTERFACE_IS:
544
+ {
545
+ nsID* piid;
546
+ if(NS_FAILED(variant->GetAsInterface(&piid, &xpctvar.val.p)))
547
+ return JS_FALSE;
548
+
549
+ iid = *piid;
550
+ nsMemory::Free((char*)piid);
551
+
552
+ xpctvar.type = (uint8)(TD_INTERFACE_IS_TYPE | XPT_TDP_POINTER);
553
+ if(xpctvar.val.p)
554
+ xpctvar.SetValIsInterface();
555
+ break;
556
+ }
557
+ case nsIDataType::VTYPE_ARRAY:
558
+ {
559
+ nsDiscriminatedUnion du;
560
+ nsVariant::Initialize(&du);
561
+ nsresult rv;
562
+
563
+ rv = variant->GetAsArray(&du.u.array.mArrayType,
564
+ &du.u.array.mArrayInterfaceID,
565
+ &du.u.array.mArrayCount,
566
+ &du.u.array.mArrayValue);
567
+ if(NS_FAILED(rv))
568
+ return JS_FALSE;
569
+
570
+ // must exit via VARIANT_DONE from here on...
571
+ du.mType = nsIDataType::VTYPE_ARRAY;
572
+ success = JS_FALSE;
573
+
574
+ nsXPTType conversionType;
575
+ PRUint16 elementType = du.u.array.mArrayType;
576
+ const nsID* pid = nsnull;
577
+
578
+ switch(elementType)
579
+ {
580
+ case nsIDataType::VTYPE_INT8:
581
+ case nsIDataType::VTYPE_INT16:
582
+ case nsIDataType::VTYPE_INT32:
583
+ case nsIDataType::VTYPE_INT64:
584
+ case nsIDataType::VTYPE_UINT8:
585
+ case nsIDataType::VTYPE_UINT16:
586
+ case nsIDataType::VTYPE_UINT32:
587
+ case nsIDataType::VTYPE_UINT64:
588
+ case nsIDataType::VTYPE_FLOAT:
589
+ case nsIDataType::VTYPE_DOUBLE:
590
+ case nsIDataType::VTYPE_BOOL:
591
+ case nsIDataType::VTYPE_CHAR:
592
+ case nsIDataType::VTYPE_WCHAR:
593
+ conversionType = nsXPTType((uint8)elementType);
594
+ break;
595
+
596
+ case nsIDataType::VTYPE_ID:
597
+ case nsIDataType::VTYPE_CHAR_STR:
598
+ case nsIDataType::VTYPE_WCHAR_STR:
599
+ conversionType = nsXPTType((uint8)elementType | XPT_TDP_POINTER);
600
+ break;
601
+
602
+ case nsIDataType::VTYPE_INTERFACE:
603
+ pid = &NS_GET_IID(nsISupports);
604
+ conversionType = nsXPTType((uint8)elementType | XPT_TDP_POINTER);
605
+ break;
606
+
607
+ case nsIDataType::VTYPE_INTERFACE_IS:
608
+ pid = &du.u.array.mArrayInterfaceID;
609
+ conversionType = nsXPTType((uint8)elementType | XPT_TDP_POINTER);
610
+ break;
611
+
612
+ // The rest are illegal.
613
+ case nsIDataType::VTYPE_VOID:
614
+ case nsIDataType::VTYPE_ASTRING:
615
+ case nsIDataType::VTYPE_DOMSTRING:
616
+ case nsIDataType::VTYPE_CSTRING:
617
+ case nsIDataType::VTYPE_UTF8STRING:
618
+ case nsIDataType::VTYPE_WSTRING_SIZE_IS:
619
+ case nsIDataType::VTYPE_STRING_SIZE_IS:
620
+ case nsIDataType::VTYPE_ARRAY:
621
+ case nsIDataType::VTYPE_EMPTY_ARRAY:
622
+ case nsIDataType::VTYPE_EMPTY:
623
+ default:
624
+ NS_ERROR("bad type in array!");
625
+ goto VARIANT_DONE;
626
+ }
627
+
628
+ success =
629
+ XPCConvert::NativeArray2JS(ccx, pJSVal,
630
+ (const void**)&du.u.array.mArrayValue,
631
+ conversionType, pid,
632
+ du.u.array.mArrayCount,
633
+ scope, pErr);
634
+
635
+ VARIANT_DONE:
636
+ nsVariant::Cleanup(&du);
637
+ return success;
638
+ }
639
+ case nsIDataType::VTYPE_EMPTY_ARRAY:
640
+ {
641
+ JSObject* array = JS_NewArrayObject(ccx, 0, nsnull);
642
+ if(!array)
643
+ return JS_FALSE;
644
+ *pJSVal = OBJECT_TO_JSVAL(array);
645
+ return JS_TRUE;
646
+ }
647
+ case nsIDataType::VTYPE_VOID:
648
+ *pJSVal = JSVAL_VOID;
649
+ return JS_TRUE;
650
+ case nsIDataType::VTYPE_EMPTY:
651
+ *pJSVal = JSVAL_NULL;
652
+ return JS_TRUE;
653
+ default:
654
+ NS_ERROR("bad type in variant!");
655
+ return JS_FALSE;
656
+ }
657
+
658
+ // If we are here then we need to convert the data in the xpctvar.
659
+
660
+ if(xpctvar.type.TagPart() == TD_PSTRING_SIZE_IS ||
661
+ xpctvar.type.TagPart() == TD_PWSTRING_SIZE_IS)
662
+ {
663
+ success = XPCConvert::NativeStringWithSize2JS(ccx, pJSVal,
664
+ (const void*)&xpctvar.val,
665
+ xpctvar.type,
666
+ size, pErr);
667
+ }
668
+ else
669
+ {
670
+ success = XPCConvert::NativeData2JS(ccx, pJSVal,
671
+ (const void*)&xpctvar.val,
672
+ xpctvar.type,
673
+ &iid, scope, pErr);
674
+ }
675
+
676
+ if(xpctvar.IsValAllocated())
677
+ nsMemory::Free((char*)xpctvar.val.p);
678
+ else if(xpctvar.IsValInterface())
679
+ ((nsISupports*)xpctvar.val.p)->Release();
680
+
681
+ return success;
682
+ }
683
+
684
+ /***************************************************************************/
685
+ /***************************************************************************/
686
+ // XXX These default implementations need to be improved to allow for
687
+ // some more interesting conversions.
688
+
689
+
690
+ /* readonly attribute PRUint16 dataType; */
691
+ NS_IMETHODIMP XPCVariant::GetDataType(PRUint16 *aDataType)
692
+ {
693
+ *aDataType = mData.mType;
694
+ return NS_OK;
695
+ }
696
+
697
+ /* PRUint8 getAsInt8 (); */
698
+ NS_IMETHODIMP XPCVariant::GetAsInt8(PRUint8 *_retval)
699
+ {
700
+ return nsVariant::ConvertToInt8(mData, _retval);
701
+ }
702
+
703
+ /* PRInt16 getAsInt16 (); */
704
+ NS_IMETHODIMP XPCVariant::GetAsInt16(PRInt16 *_retval)
705
+ {
706
+ return nsVariant::ConvertToInt16(mData, _retval);
707
+ }
708
+
709
+ /* PRInt32 getAsInt32 (); */
710
+ NS_IMETHODIMP XPCVariant::GetAsInt32(PRInt32 *_retval)
711
+ {
712
+ return nsVariant::ConvertToInt32(mData, _retval);
713
+ }
714
+
715
+ /* PRInt64 getAsInt64 (); */
716
+ NS_IMETHODIMP XPCVariant::GetAsInt64(PRInt64 *_retval)
717
+ {
718
+ return nsVariant::ConvertToInt64(mData, _retval);
719
+ }
720
+
721
+ /* PRUint8 getAsUint8 (); */
722
+ NS_IMETHODIMP XPCVariant::GetAsUint8(PRUint8 *_retval)
723
+ {
724
+ return nsVariant::ConvertToUint8(mData, _retval);
725
+ }
726
+
727
+ /* PRUint16 getAsUint16 (); */
728
+ NS_IMETHODIMP XPCVariant::GetAsUint16(PRUint16 *_retval)
729
+ {
730
+ return nsVariant::ConvertToUint16(mData, _retval);
731
+ }
732
+
733
+ /* PRUint32 getAsUint32 (); */
734
+ NS_IMETHODIMP XPCVariant::GetAsUint32(PRUint32 *_retval)
735
+ {
736
+ return nsVariant::ConvertToUint32(mData, _retval);
737
+ }
738
+
739
+ /* PRUint64 getAsUint64 (); */
740
+ NS_IMETHODIMP XPCVariant::GetAsUint64(PRUint64 *_retval)
741
+ {
742
+ return nsVariant::ConvertToUint64(mData, _retval);
743
+ }
744
+
745
+ /* float getAsFloat (); */
746
+ NS_IMETHODIMP XPCVariant::GetAsFloat(float *_retval)
747
+ {
748
+ return nsVariant::ConvertToFloat(mData, _retval);
749
+ }
750
+
751
+ /* double getAsDouble (); */
752
+ NS_IMETHODIMP XPCVariant::GetAsDouble(double *_retval)
753
+ {
754
+ return nsVariant::ConvertToDouble(mData, _retval);
755
+ }
756
+
757
+ /* PRBool getAsBool (); */
758
+ NS_IMETHODIMP XPCVariant::GetAsBool(PRBool *_retval)
759
+ {
760
+ return nsVariant::ConvertToBool(mData, _retval);
761
+ }
762
+
763
+ /* char getAsChar (); */
764
+ NS_IMETHODIMP XPCVariant::GetAsChar(char *_retval)
765
+ {
766
+ return nsVariant::ConvertToChar(mData, _retval);
767
+ }
768
+
769
+ /* wchar getAsWChar (); */
770
+ NS_IMETHODIMP XPCVariant::GetAsWChar(PRUnichar *_retval)
771
+ {
772
+ return nsVariant::ConvertToWChar(mData, _retval);
773
+ }
774
+
775
+ /* [notxpcom] nsresult getAsID (out nsID retval); */
776
+ NS_IMETHODIMP_(nsresult) XPCVariant::GetAsID(nsID *retval)
777
+ {
778
+ return nsVariant::ConvertToID(mData, retval);
779
+ }
780
+
781
+ /* AString getAsAString (); */
782
+ NS_IMETHODIMP XPCVariant::GetAsAString(nsAString & _retval)
783
+ {
784
+ return nsVariant::ConvertToAString(mData, _retval);
785
+ }
786
+
787
+ /* DOMString getAsDOMString (); */
788
+ NS_IMETHODIMP XPCVariant::GetAsDOMString(nsAString & _retval)
789
+ {
790
+ // A DOMString maps to an AString internally, so we can re-use
791
+ // ConvertToAString here.
792
+ return nsVariant::ConvertToAString(mData, _retval);
793
+ }
794
+
795
+ /* ACString getAsACString (); */
796
+ NS_IMETHODIMP XPCVariant::GetAsACString(nsACString & _retval)
797
+ {
798
+ return nsVariant::ConvertToACString(mData, _retval);
799
+ }
800
+
801
+ /* AUTF8String getAsAUTF8String (); */
802
+ NS_IMETHODIMP XPCVariant::GetAsAUTF8String(nsAUTF8String & _retval)
803
+ {
804
+ return nsVariant::ConvertToAUTF8String(mData, _retval);
805
+ }
806
+
807
+ /* string getAsString (); */
808
+ NS_IMETHODIMP XPCVariant::GetAsString(char **_retval)
809
+ {
810
+ return nsVariant::ConvertToString(mData, _retval);
811
+ }
812
+
813
+ /* wstring getAsWString (); */
814
+ NS_IMETHODIMP XPCVariant::GetAsWString(PRUnichar **_retval)
815
+ {
816
+ return nsVariant::ConvertToWString(mData, _retval);
817
+ }
818
+
819
+ /* nsISupports getAsISupports (); */
820
+ NS_IMETHODIMP XPCVariant::GetAsISupports(nsISupports **_retval)
821
+ {
822
+ return nsVariant::ConvertToISupports(mData, _retval);
823
+ }
824
+
825
+ /* void getAsInterface (out nsIIDPtr iid, [iid_is (iid), retval] out nsQIResult iface); */
826
+ NS_IMETHODIMP XPCVariant::GetAsInterface(nsIID * *iid, void * *iface)
827
+ {
828
+ return nsVariant::ConvertToInterface(mData, iid, iface);
829
+ }
830
+
831
+
832
+ /* [notxpcom] nsresult getAsArray (out PRUint16 type, out nsIID iid, out PRUint32 count, out voidPtr ptr); */
833
+ NS_IMETHODIMP_(nsresult) XPCVariant::GetAsArray(PRUint16 *type, nsIID *iid, PRUint32 *count, void * *ptr)
834
+ {
835
+ return nsVariant::ConvertToArray(mData, type, iid, count, ptr);
836
+ }
837
+
838
+ /* void getAsStringWithSize (out PRUint32 size, [size_is (size), retval] out string str); */
839
+ NS_IMETHODIMP XPCVariant::GetAsStringWithSize(PRUint32 *size, char **str)
840
+ {
841
+ return nsVariant::ConvertToStringWithSize(mData, size, str);
842
+ }
843
+
844
+ /* void getAsWStringWithSize (out PRUint32 size, [size_is (size), retval] out wstring str); */
845
+ NS_IMETHODIMP XPCVariant::GetAsWStringWithSize(PRUint32 *size, PRUnichar **str)
846
+ {
847
+ return nsVariant::ConvertToWStringWithSize(mData, size, str);
848
+ }
849
+
850
+