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,850 @@
1
+ /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2
+ /* vim: set ts=2 sw=2 et tw=78: */
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.org code.
17
+ *
18
+ * The Initial Developer of the Original Code is
19
+ * The Mozilla Foundation.
20
+ * Portions created by the Initial Developer are Copyright (C) 2005
21
+ * the Initial Developer. All Rights Reserved.
22
+ *
23
+ * Contributor(s):
24
+ * Johnny Stenback <jst@mozilla.org> (original author)
25
+ * Brendan Eich <brendan@mozilla.org>
26
+ * Boris Zbarsky <bzbarsky@mit.edu>
27
+ * Blake Kaplan <mrbkap@gmail.com>
28
+ *
29
+ * Alternatively, the contents of this file may be used under the terms of
30
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
31
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
32
+ * in which case the provisions of the GPL or the LGPL are applicable instead
33
+ * of those above. If you wish to allow use of your version of this file only
34
+ * under the terms of either the GPL or the LGPL, and not to allow others to
35
+ * use your version of this file under the terms of the MPL, indicate your
36
+ * decision by deleting the provisions above and replace them with the notice
37
+ * and other provisions required by the GPL or the LGPL. If you do not delete
38
+ * the provisions above, a recipient may use your version of this file under
39
+ * the terms of any one of the MPL, the GPL or the LGPL.
40
+ *
41
+ * ***** END LICENSE BLOCK ***** */
42
+
43
+ #include "XPCWrapper.h"
44
+ #include "XPCNativeWrapper.h"
45
+
46
+ const PRUint32
47
+ XPCWrapper::sWrappedObjSlot = 1;
48
+
49
+ const PRUint32
50
+ XPCWrapper::sFlagsSlot = 0;
51
+
52
+ const PRUint32
53
+ XPCWrapper::sNumSlots = 2;
54
+
55
+ JSNative
56
+ XPCWrapper::sEvalNative = nsnull;
57
+
58
+ const PRUint32
59
+ XPCWrapper::sSecMgrSetProp = nsIXPCSecurityManager::ACCESS_SET_PROPERTY;
60
+ const PRUint32
61
+ XPCWrapper::sSecMgrGetProp = nsIXPCSecurityManager::ACCESS_GET_PROPERTY;
62
+
63
+ // static
64
+ JSObject *
65
+ XPCWrapper::Unwrap(JSContext *cx, JSObject *wrapper)
66
+ {
67
+ JSClass *clasp = STOBJ_GET_CLASS(wrapper);
68
+ if (clasp == &sXPC_XOW_JSClass.base) {
69
+ return UnwrapXOW(cx, wrapper);
70
+ }
71
+
72
+ if (XPCNativeWrapper::IsNativeWrapperClass(clasp)) {
73
+ XPCWrappedNative *wrappedObj;
74
+ if (!XPCNativeWrapper::GetWrappedNative(cx, wrapper, &wrappedObj) ||
75
+ !wrappedObj) {
76
+ return nsnull;
77
+ }
78
+
79
+ return wrappedObj->GetFlatJSObject();
80
+ }
81
+
82
+ if (clasp == &sXPC_SJOW_JSClass.base) {
83
+ JSObject *wrappedObj = STOBJ_GET_PARENT(wrapper);
84
+
85
+ if (NS_FAILED(CanAccessWrapper(cx, wrappedObj))) {
86
+ JS_ClearPendingException(cx);
87
+
88
+ return nsnull;
89
+ }
90
+
91
+ return wrappedObj;
92
+ }
93
+
94
+ if (clasp == &sXPC_SOW_JSClass.base) {
95
+ return UnwrapSOW(cx, wrapper);
96
+ }
97
+
98
+ return nsnull;
99
+ }
100
+
101
+ static void
102
+ IteratorFinalize(JSContext *cx, JSObject *obj)
103
+ {
104
+ jsval v;
105
+ JS_GetReservedSlot(cx, obj, 0, &v);
106
+
107
+ JSIdArray *ida = reinterpret_cast<JSIdArray *>(JSVAL_TO_PRIVATE(v));
108
+ if (ida) {
109
+ JS_DestroyIdArray(cx, ida);
110
+ }
111
+ }
112
+
113
+ static JSBool
114
+ IteratorNext(JSContext *cx, uintN argc, jsval *vp)
115
+ {
116
+ JSObject *obj;
117
+ jsval v;
118
+
119
+ obj = JS_THIS_OBJECT(cx, vp);
120
+ if (!obj)
121
+ return JS_FALSE;
122
+
123
+ JS_GetReservedSlot(cx, obj, 0, &v);
124
+ JSIdArray *ida = reinterpret_cast<JSIdArray *>(JSVAL_TO_PRIVATE(v));
125
+
126
+ JS_GetReservedSlot(cx, obj, 1, &v);
127
+ jsint idx = JSVAL_TO_INT(v);
128
+
129
+ if (idx == ida->length) {
130
+ return JS_ThrowStopIteration(cx);
131
+ }
132
+
133
+ JS_GetReservedSlot(cx, obj, 2, &v);
134
+ jsid id = ida->vector[idx++];
135
+ if (JSVAL_TO_BOOLEAN(v)) {
136
+ JSString *str;
137
+ if (!JS_IdToValue(cx, id, &v) ||
138
+ !(str = JS_ValueToString(cx, v))) {
139
+ return JS_FALSE;
140
+ }
141
+
142
+ *vp = STRING_TO_JSVAL(str);
143
+ } else {
144
+ // We need to return an [id, value] pair.
145
+ if (!JS_GetPropertyById(cx, STOBJ_GET_PARENT(obj), id, &v)) {
146
+ return JS_FALSE;
147
+ }
148
+
149
+ jsval name;
150
+ JSString *str;
151
+ if (!JS_IdToValue(cx, id, &name) ||
152
+ !(str = JS_ValueToString(cx, name))) {
153
+ return JS_FALSE;
154
+ }
155
+
156
+ jsval vec[2] = { STRING_TO_JSVAL(str), v };
157
+ JSAutoTempValueRooter tvr(cx, 2, vec);
158
+ JSObject *array = JS_NewArrayObject(cx, 2, vec);
159
+ if (!array) {
160
+ return JS_FALSE;
161
+ }
162
+
163
+ *vp = OBJECT_TO_JSVAL(array);
164
+ }
165
+
166
+ JS_SetReservedSlot(cx, obj, 1, INT_TO_JSVAL(idx));
167
+ return JS_TRUE;
168
+ }
169
+
170
+ static JSClass IteratorClass = {
171
+ "XOW iterator", JSCLASS_HAS_RESERVED_SLOTS(3),
172
+ JS_PropertyStub, JS_PropertyStub,
173
+ JS_PropertyStub, JS_PropertyStub,
174
+ JS_EnumerateStub, JS_ResolveStub,
175
+ JS_ConvertStub, IteratorFinalize,
176
+
177
+ JSCLASS_NO_OPTIONAL_MEMBERS
178
+ };
179
+
180
+ // static
181
+ JSObject *
182
+ XPCWrapper::CreateIteratorObj(JSContext *cx, JSObject *tempWrapper,
183
+ JSObject *wrapperObj, JSObject *innerObj,
184
+ JSBool keysonly)
185
+ {
186
+ // This is rather ugly: we want to use the trick seen in Enumerate,
187
+ // where we use our wrapper's resolve hook to determine if we should
188
+ // enumerate a given property. However, we don't want to pollute the
189
+ // identifiers with a next method, so we create an object that
190
+ // delegates (via the __proto__ link) to the wrapper.
191
+
192
+ JSObject *iterObj = JS_NewObject(cx, &IteratorClass, tempWrapper, wrapperObj);
193
+ if (!iterObj) {
194
+ return nsnull;
195
+ }
196
+
197
+ JSAutoTempValueRooter tvr(cx, OBJECT_TO_JSVAL(iterObj));
198
+
199
+ // Do this sooner rather than later to avoid complications in
200
+ // IteratorFinalize.
201
+ if (!JS_SetReservedSlot(cx, iterObj, 0, PRIVATE_TO_JSVAL(nsnull))) {
202
+ return nsnull;
203
+ }
204
+
205
+ // Initialize iterObj.
206
+ if (!JS_DefineFunction(cx, iterObj, "next", (JSNative)IteratorNext, 0,
207
+ JSFUN_FAST_NATIVE)) {
208
+ return nsnull;
209
+ }
210
+
211
+ // Start enumerating over all of our properties.
212
+ do {
213
+ if (!XPCWrapper::Enumerate(cx, iterObj, innerObj)) {
214
+ return nsnull;
215
+ }
216
+ } while ((innerObj = STOBJ_GET_PROTO(innerObj)) != nsnull);
217
+
218
+ JSIdArray *ida = JS_Enumerate(cx, iterObj);
219
+ if (!ida) {
220
+ return nsnull;
221
+ }
222
+
223
+ if (!JS_SetReservedSlot(cx, iterObj, 0, PRIVATE_TO_JSVAL(ida)) ||
224
+ !JS_SetReservedSlot(cx, iterObj, 1, JSVAL_ZERO) ||
225
+ !JS_SetReservedSlot(cx, iterObj, 2, BOOLEAN_TO_JSVAL(keysonly))) {
226
+ return nsnull;
227
+ }
228
+
229
+ if (!JS_SetPrototype(cx, iterObj, nsnull)) {
230
+ return nsnull;
231
+ }
232
+
233
+ return iterObj;
234
+ }
235
+
236
+ // static
237
+ JSBool
238
+ XPCWrapper::AddProperty(JSContext *cx, JSObject *wrapperObj,
239
+ JSBool wantGetterSetter, JSObject *innerObj, jsval id,
240
+ jsval *vp)
241
+ {
242
+ jsid interned_id;
243
+ if (!::JS_ValueToId(cx, id, &interned_id)) {
244
+ return JS_FALSE;
245
+ }
246
+
247
+ JSPropertyDescriptor desc;
248
+ if (!GetPropertyAttrs(cx, wrapperObj, interned_id, JSRESOLVE_QUALIFIED,
249
+ wantGetterSetter, &desc)) {
250
+ return JS_FALSE;
251
+ }
252
+
253
+ NS_ASSERTION(desc.obj == wrapperObj,
254
+ "What weird wrapper are we using?");
255
+
256
+ return JS_DefinePropertyById(cx, innerObj, interned_id, desc.value,
257
+ desc.getter, desc.setter, desc.attrs);
258
+ }
259
+
260
+ // static
261
+ JSBool
262
+ XPCWrapper::DelProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
263
+ {
264
+ if (JSVAL_IS_STRING(id)) {
265
+ JSString *str = JSVAL_TO_STRING(id);
266
+ jschar *chars = ::JS_GetStringChars(str);
267
+ size_t length = ::JS_GetStringLength(str);
268
+
269
+ return ::JS_DeleteUCProperty2(cx, obj, chars, length, vp);
270
+ }
271
+
272
+ if (!JSVAL_IS_INT(id)) {
273
+ return ThrowException(NS_ERROR_NOT_IMPLEMENTED, cx);
274
+ }
275
+
276
+ return ::JS_DeleteElement2(cx, obj, JSVAL_TO_INT(id), vp);
277
+ }
278
+
279
+ // static
280
+ JSBool
281
+ XPCWrapper::Enumerate(JSContext *cx, JSObject *wrapperObj, JSObject *innerObj)
282
+ {
283
+ // We are being notified of a for-in loop or similar operation on
284
+ // this wrapper. Forward to the correct high-level object hook,
285
+ // OBJ_ENUMERATE on the unsafe object, called via the JS_Enumerate API.
286
+ // Then reflect properties named by the enumerated identifiers from the
287
+ // unsafe object to the safe wrapper.
288
+
289
+ JSBool ok = JS_TRUE;
290
+
291
+ JSIdArray *ida = JS_Enumerate(cx, innerObj);
292
+ if (!ida) {
293
+ return JS_FALSE;
294
+ }
295
+
296
+ for (jsint i = 0, n = ida->length; i < n; i++) {
297
+ JSObject *pobj;
298
+
299
+ // Note: v doesn't need to be rooted because it will be read out of a
300
+ // rooted object's slots.
301
+ jsval v = JSVAL_VOID;
302
+
303
+ // Let our NewResolve hook figure out whether this id should be reflected.
304
+ ok = JS_LookupPropertyWithFlagsById(cx, wrapperObj, ida->vector[i],
305
+ JSRESOLVE_QUALIFIED, &pobj, &v);
306
+ if (!ok) {
307
+ break;
308
+ }
309
+
310
+ if (pobj && pobj != wrapperObj) {
311
+ // If the resolution actually happened on a different object, define the
312
+ // property here so that we're sure that enumeration picks it up.
313
+ ok = JS_DefinePropertyById(cx, wrapperObj, ida->vector[i], JSVAL_VOID,
314
+ nsnull, nsnull, JSPROP_ENUMERATE | JSPROP_SHARED);
315
+ }
316
+
317
+ if (!ok) {
318
+ break;
319
+ }
320
+ }
321
+
322
+ JS_DestroyIdArray(cx, ida);
323
+
324
+ return ok;
325
+ }
326
+
327
+ // static
328
+ JSBool
329
+ XPCWrapper::NewResolve(JSContext *cx, JSObject *wrapperObj,
330
+ JSBool wantDetails, JSObject *innerObj, jsval id,
331
+ uintN flags, JSObject **objp)
332
+ {
333
+ jsid interned_id;
334
+ if (!::JS_ValueToId(cx, id, &interned_id)) {
335
+ return JS_FALSE;
336
+ }
337
+
338
+ JSPropertyDescriptor desc;
339
+ if (!GetPropertyAttrs(cx, innerObj, interned_id, flags, wantDetails, &desc)) {
340
+ return JS_FALSE;
341
+ }
342
+
343
+ if (!desc.obj) {
344
+ // Nothing to define.
345
+ return JS_TRUE;
346
+ }
347
+
348
+ desc.value = JSVAL_VOID;
349
+
350
+ jsval oldFlags;
351
+ if (!::JS_GetReservedSlot(cx, wrapperObj, sFlagsSlot, &oldFlags) ||
352
+ !::JS_SetReservedSlot(cx, wrapperObj, sFlagsSlot,
353
+ INT_TO_JSVAL(JSVAL_TO_INT(oldFlags) |
354
+ FLAG_RESOLVING))) {
355
+ return JS_FALSE;
356
+ }
357
+
358
+ JSBool ok = JS_DefinePropertyById(cx, wrapperObj, interned_id, desc.value,
359
+ desc.getter, desc.setter, desc.attrs);
360
+
361
+ JS_SetReservedSlot(cx, wrapperObj, sFlagsSlot, oldFlags);
362
+
363
+ if (ok) {
364
+ *objp = wrapperObj;
365
+ }
366
+
367
+ return ok;
368
+ }
369
+
370
+ // static
371
+ JSBool
372
+ XPCWrapper::ResolveNativeProperty(JSContext *cx, JSObject *wrapperObj,
373
+ JSObject *innerObj, XPCWrappedNative *wn,
374
+ jsval id, uintN flags, JSObject **objp,
375
+ JSBool isNativeWrapper)
376
+ {
377
+ // This will do verification and the method lookup for us.
378
+ XPCCallContext ccx(JS_CALLER, cx, innerObj, nsnull, id);
379
+
380
+ // For "constructor" we don't want to call into the resolve hooks on the
381
+ // wrapped native, since that would give the wrong constructor.
382
+ if (NATIVE_HAS_FLAG(wn, WantNewResolve) &&
383
+ id != GetRTStringByIndex(cx, XPCJSRuntime::IDX_CONSTRUCTOR)) {
384
+
385
+ // Mark ourselves as resolving so our AddProperty hook can do the
386
+ // right thing here.
387
+ jsval oldFlags;
388
+ if (!::JS_GetReservedSlot(cx, wrapperObj, sFlagsSlot, &oldFlags) ||
389
+ !::JS_SetReservedSlot(cx, wrapperObj, sFlagsSlot,
390
+ INT_TO_JSVAL(JSVAL_TO_INT(oldFlags) |
391
+ FLAG_RESOLVING))) {
392
+ return JS_FALSE;
393
+ }
394
+
395
+ XPCWrappedNative* oldResolvingWrapper = nsnull;
396
+ JSBool allowPropMods =
397
+ NATIVE_HAS_FLAG(wn, AllowPropModsDuringResolve);
398
+ if (allowPropMods) {
399
+ oldResolvingWrapper = ccx.SetResolvingWrapper(wn);
400
+ }
401
+
402
+ JSBool retval = JS_TRUE;
403
+ JSObject* newObj = nsnull;
404
+ nsresult rv = wn->GetScriptableInfo()->
405
+ GetCallback()->NewResolve(wn, cx, wrapperObj, id, flags,
406
+ &newObj, &retval);
407
+
408
+ if (allowPropMods) {
409
+ ccx.SetResolvingWrapper(oldResolvingWrapper);
410
+ }
411
+
412
+ if (!::JS_SetReservedSlot(cx, wrapperObj, sFlagsSlot, oldFlags)) {
413
+ return JS_FALSE;
414
+ }
415
+
416
+ if (NS_FAILED(rv)) {
417
+ return ThrowException(rv, cx);
418
+ }
419
+
420
+ if (newObj) {
421
+ if (isNativeWrapper || newObj == wrapperObj) {
422
+ #ifdef DEBUG_XPCNativeWrapper
423
+ JSString* strId = ::JS_ValueToString(cx, id);
424
+ if (strId) {
425
+ NS_ConvertUTF16toUTF8 propName((PRUnichar*)::JS_GetStringChars(strId),
426
+ ::JS_GetStringLength(strId));
427
+ printf("Resolved via scriptable hooks for '%s'\n", propName.get());
428
+ }
429
+ #endif
430
+ // Note that we don't need to preserve the wrapper here, since this is
431
+ // not an "expando" property if the scriptable newResolve hook found it.
432
+ *objp = newObj;
433
+ return retval;
434
+ }
435
+
436
+ // The scriptable helper resolved this property to a *different* object.
437
+ // We don't know what to do for now (this can't currently happen in
438
+ // Mozilla) so throw.
439
+ // I suspect that we'd need to redo the security check on the new object
440
+ // (if it has a different class than the original object) and then call
441
+ // ResolveNativeProperty with *that* as the inner object.
442
+ return ThrowException(NS_ERROR_NOT_IMPLEMENTED, cx);
443
+ }
444
+ }
445
+
446
+ if (!JSVAL_IS_STRING(id)) {
447
+ // A non-string id is being resolved. Won't be found here, return
448
+ // early.
449
+
450
+ return MaybePreserveWrapper(cx, wn, flags);
451
+ }
452
+
453
+ // Verify that our jsobject really is a wrapped native.
454
+ XPCWrappedNative* wrapper = ccx.GetWrapper();
455
+ if (wrapper != wn || !wrapper->IsValid()) {
456
+ NS_ASSERTION(wrapper == wn, "Uh, how did this happen!");
457
+ return ThrowException(NS_ERROR_XPC_BAD_CONVERT_JS, cx);
458
+ }
459
+
460
+ // it would be a big surprise if there is a member without an
461
+ // interface :)
462
+ XPCNativeInterface* iface = ccx.GetInterface();
463
+ if (!iface) {
464
+ // No interface, nothing to resolve.
465
+
466
+ return MaybePreserveWrapper(cx, wn, flags);
467
+ }
468
+
469
+ // did we find a method/attribute by that name?
470
+ XPCNativeMember* member = ccx.GetMember();
471
+ NS_ASSERTION(member, "not doing IDispatch, how'd this happen?");
472
+ if (!member) {
473
+ // No member, nothing to resolve.
474
+
475
+ return MaybePreserveWrapper(cx, wn, flags);
476
+ }
477
+
478
+ JSString *str = JSVAL_TO_STRING(id);
479
+ if (!str) {
480
+ return ThrowException(NS_ERROR_UNEXPECTED, cx);
481
+ }
482
+
483
+ // Get (and perhaps lazily create) the member's value (commonly a
484
+ // cloneable function).
485
+ jsval v;
486
+ uintN attrs = JSPROP_ENUMERATE;
487
+ JSPropertyOp getter = nsnull;
488
+ JSPropertyOp setter = nsnull;
489
+
490
+ if (member->IsConstant()) {
491
+ if (!member->GetConstantValue(ccx, iface, &v)) {
492
+ return ThrowException(NS_ERROR_XPC_BAD_CONVERT_JS, cx);
493
+ }
494
+ } else if (member->IsAttribute()) {
495
+ // An attribute is being resolved. Define the property, the value
496
+ // will be dealt with in the get/set hooks. Use JSPROP_SHARED to
497
+ // avoid entraining last-got or last-set garbage beyond the life
498
+ // of the value in the getter or setter call site.
499
+
500
+ v = JSVAL_VOID;
501
+ attrs |= JSPROP_SHARED;
502
+ } else {
503
+ // We're dealing with a method member here. Clone a function we can
504
+ // use for this object. NB: cx's newborn roots will protect funobj
505
+ // and funWrapper and its object from GC.
506
+
507
+ jsval funval;
508
+ if (!member->NewFunctionObject(ccx, iface, wrapper->GetFlatJSObject(),
509
+ &funval)) {
510
+ return ThrowException(NS_ERROR_XPC_BAD_CONVERT_JS, cx);
511
+ }
512
+
513
+ AUTO_MARK_JSVAL(ccx, funval);
514
+
515
+ #ifdef DEBUG_XPCNativeWrapper
516
+ printf("Wrapping function object for %s\n",
517
+ ::JS_GetStringBytes(JSVAL_TO_STRING(id)));
518
+ #endif
519
+
520
+ if (!WrapFunction(cx, wrapperObj, JSVAL_TO_OBJECT(funval), &v,
521
+ isNativeWrapper)) {
522
+ return JS_FALSE;
523
+ }
524
+
525
+ // Functions shouldn't have a getter or a setter. Without the wrappers,
526
+ // they would live on the prototype (and call its getter), since we don't
527
+ // have a prototype, and we need to avoid calling the scriptable helper's
528
+ // GetProperty method for this property, stub out the getters and setters
529
+ // explicitly.
530
+ getter = setter = JS_PropertyStub;
531
+
532
+ // Since the XPC_*_NewResolve functions ensure that the method's property
533
+ // name is accessible, we set the eAllAccessSlot bit, which indicates to
534
+ // XPC_NW_FunctionWrapper that the method is safe to unwrap and call, even
535
+ // if XPCNativeWrapper::GetWrappedNative disagrees.
536
+ JS_SetReservedSlot(cx, JSVAL_TO_OBJECT(v), eAllAccessSlot, JSVAL_TRUE);
537
+ }
538
+
539
+ // Make sure v doesn't go away while we mess with it.
540
+ AUTO_MARK_JSVAL(ccx, v);
541
+
542
+ // XPCNativeWrapper doesn't need to do this.
543
+ jsval oldFlags;
544
+ if (!isNativeWrapper &&
545
+ (!::JS_GetReservedSlot(cx, wrapperObj, sFlagsSlot, &oldFlags) ||
546
+ !::JS_SetReservedSlot(cx, wrapperObj, sFlagsSlot,
547
+ INT_TO_JSVAL(JSVAL_TO_INT(oldFlags) |
548
+ FLAG_RESOLVING)))) {
549
+ return JS_FALSE;
550
+ }
551
+
552
+ if (!::JS_DefineUCProperty(cx, wrapperObj, ::JS_GetStringChars(str),
553
+ ::JS_GetStringLength(str), v, getter, setter,
554
+ attrs)) {
555
+ return JS_FALSE;
556
+ }
557
+
558
+ if (!isNativeWrapper &&
559
+ !::JS_SetReservedSlot(cx, wrapperObj, sFlagsSlot, oldFlags)) {
560
+ return JS_FALSE;
561
+ }
562
+
563
+ *objp = wrapperObj;
564
+
565
+ return JS_TRUE;
566
+ }
567
+
568
+ // static
569
+ JSBool
570
+ XPCWrapper::GetOrSetNativeProperty(JSContext *cx, JSObject *obj,
571
+ XPCWrappedNative *wrappedNative,
572
+ jsval id, jsval *vp, JSBool aIsSet,
573
+ JSBool isNativeWrapper)
574
+ {
575
+ // This will do verification and the method lookup for us.
576
+ JSObject *nativeObj = wrappedNative->GetFlatJSObject();
577
+ XPCCallContext ccx(JS_CALLER, cx, nativeObj, nsnull, id);
578
+
579
+ if (aIsSet ? NATIVE_HAS_FLAG(wrappedNative, WantSetProperty) :
580
+ NATIVE_HAS_FLAG(wrappedNative, WantGetProperty)) {
581
+
582
+ jsval v = *vp;
583
+ // Note that some sets return random DOM objects (setting
584
+ // document.location, say), so we want to rewrap for sets too if v != *vp.
585
+ JSBool retval = JS_TRUE;
586
+ nsresult rv;
587
+ if (aIsSet) {
588
+ rv = wrappedNative->GetScriptableCallback()->
589
+ SetProperty(wrappedNative, cx, obj, id, &v, &retval);
590
+ } else {
591
+ rv = wrappedNative->GetScriptableCallback()->
592
+ GetProperty(wrappedNative, cx, obj, id, &v, &retval);
593
+ }
594
+
595
+ if (NS_FAILED(rv)) {
596
+ return ThrowException(rv, cx);
597
+ }
598
+ if (!retval) {
599
+ return JS_FALSE;
600
+ }
601
+
602
+ if (rv == NS_SUCCESS_I_DID_SOMETHING) {
603
+ // Make sure v doesn't get collected while we're re-wrapping it.
604
+ AUTO_MARK_JSVAL(ccx, v);
605
+
606
+ #ifdef DEBUG_XPCNativeWrapper
607
+ JSString* strId = ::JS_ValueToString(cx, id);
608
+ if (strId) {
609
+ NS_ConvertUTF16toUTF8 propName((PRUnichar*)::JS_GetStringChars(strId),
610
+ ::JS_GetStringLength(strId));
611
+ printf("%s via scriptable hooks for '%s'\n",
612
+ aIsSet ? "Set" : "Got", propName.get());
613
+ }
614
+ #endif
615
+
616
+ return RewrapIfDeepWrapper(cx, obj, v, vp, isNativeWrapper);
617
+ }
618
+ }
619
+
620
+ if (!JSVAL_IS_STRING(id)) {
621
+ // Not going to be found here
622
+ return JS_TRUE;
623
+ }
624
+
625
+ // Verify that our jsobject really is a wrapped native.
626
+ XPCWrappedNative* wrapper = ccx.GetWrapper();
627
+ if (wrapper != wrappedNative || !wrapper->IsValid()) {
628
+ NS_ASSERTION(wrapper == wrappedNative, "Uh, how did this happen!");
629
+ return ThrowException(NS_ERROR_XPC_BAD_CONVERT_JS, cx);
630
+ }
631
+
632
+ // it would be a big surprise if there is a member without an
633
+ // interface :)
634
+ XPCNativeInterface* iface = ccx.GetInterface();
635
+ if (!iface) {
636
+
637
+ return JS_TRUE;
638
+ }
639
+
640
+ // did we find a method/attribute by that name?
641
+ XPCNativeMember* member = ccx.GetMember();
642
+ NS_ASSERTION(member, "not doing IDispatch, how'd this happen?");
643
+ if (!member) {
644
+ // No member, no IDL property to expose.
645
+
646
+ return JS_TRUE;
647
+ }
648
+
649
+ if (member->IsConstant()) {
650
+ jsval memberval;
651
+ if (!member->GetConstantValue(ccx, iface, &memberval)) {
652
+ return ThrowException(NS_ERROR_XPC_BAD_CONVERT_JS, cx);
653
+ }
654
+
655
+ // Getting the value of constants is easy, just return the
656
+ // value. Setting is not supported (obviously).
657
+ if (aIsSet) {
658
+ return ThrowException(NS_ERROR_XPC_BAD_CONVERT_JS, cx);
659
+ }
660
+
661
+ *vp = memberval;
662
+
663
+ return JS_TRUE;
664
+ }
665
+
666
+ if (!member->IsAttribute()) {
667
+ // Getting the value of a method. Just return and let the value
668
+ // from XPC_NW_NewResolve() be used.
669
+
670
+ return JS_TRUE;
671
+ }
672
+
673
+ jsval funval;
674
+ if (!member->NewFunctionObject(ccx, iface, wrapper->GetFlatJSObject(),
675
+ &funval)) {
676
+ return ThrowException(NS_ERROR_XPC_BAD_CONVERT_JS, cx);
677
+ }
678
+
679
+ AUTO_MARK_JSVAL(ccx, funval);
680
+
681
+ jsval *argv = nsnull;
682
+ uintN argc = 0;
683
+
684
+ if (aIsSet) {
685
+ if (member->IsReadOnlyAttribute()) {
686
+ // Trying to set a property for which there is no setter!
687
+ return ThrowException(NS_ERROR_NOT_AVAILABLE, cx);
688
+ }
689
+
690
+ #ifdef DEBUG_XPCNativeWrapper
691
+ printf("Calling setter for %s\n",
692
+ ::JS_GetStringBytes(JSVAL_TO_STRING(id)));
693
+ #endif
694
+
695
+ argv = vp;
696
+ argc = 1;
697
+ } else {
698
+ #ifdef DEBUG_XPCNativeWrapper
699
+ printf("Calling getter for %s\n",
700
+ ::JS_GetStringBytes(JSVAL_TO_STRING(id)));
701
+ #endif
702
+ }
703
+
704
+ // Call the getter
705
+ jsval v;
706
+ if (!::JS_CallFunctionValue(cx, wrapper->GetFlatJSObject(), funval, argc,
707
+ argv, &v)) {
708
+ return JS_FALSE;
709
+ }
710
+
711
+ if (aIsSet) {
712
+ return JS_TRUE;
713
+ }
714
+
715
+ {
716
+ // Make sure v doesn't get collected while we're re-wrapping it.
717
+ AUTO_MARK_JSVAL(ccx, v);
718
+
719
+ return RewrapIfDeepWrapper(cx, obj, v, vp, isNativeWrapper);
720
+ }
721
+ }
722
+
723
+ // static
724
+ JSBool
725
+ XPCWrapper::NativeToString(JSContext *cx, XPCWrappedNative *wrappedNative,
726
+ uintN argc, jsval *argv, jsval *rval,
727
+ JSBool isNativeWrapper)
728
+ {
729
+ // Check whether toString was overridden in any object along
730
+ // the wrapped native's object's prototype chain.
731
+ XPCJSRuntime *rt = nsXPConnect::GetRuntimeInstance();
732
+
733
+ jsid id = rt->GetStringID(XPCJSRuntime::IDX_TO_STRING);
734
+ jsval idAsVal;
735
+ if (!::JS_IdToValue(cx, id, &idAsVal)) {
736
+ return JS_FALSE;
737
+ }
738
+
739
+ // Someone is trying to call toString on our wrapped object.
740
+ JSObject *wn_obj = wrappedNative->GetFlatJSObject();
741
+ XPCCallContext ccx(JS_CALLER, cx, wn_obj, nsnull, idAsVal);
742
+ if (!ccx.IsValid()) {
743
+ // Shouldn't really happen.
744
+ return ThrowException(NS_ERROR_FAILURE, cx);
745
+ }
746
+
747
+ XPCNativeInterface *iface = ccx.GetInterface();
748
+ XPCNativeMember *member = ccx.GetMember();
749
+ JSString* str = nsnull;
750
+
751
+ // First, try to see if the object declares a toString in its IDL. If it does,
752
+ // then we need to defer to that.
753
+ if (iface && member && member->IsMethod()) {
754
+ jsval toStringVal;
755
+ if (!member->NewFunctionObject(ccx, iface, wn_obj, &toStringVal)) {
756
+ return JS_FALSE;
757
+ }
758
+
759
+ // Defer to the IDL-declared toString.
760
+
761
+ AUTO_MARK_JSVAL(ccx, toStringVal);
762
+
763
+ jsval v;
764
+ if (!::JS_CallFunctionValue(cx, wn_obj, toStringVal, argc, argv, &v)) {
765
+ return JS_FALSE;
766
+ }
767
+
768
+ if (JSVAL_IS_STRING(v)) {
769
+ str = JSVAL_TO_STRING(v);
770
+ }
771
+ }
772
+
773
+ if (!str) {
774
+ // Ok, we do no damage, and add value, by returning our own idea
775
+ // of what toString() should be.
776
+ // Note: We can't just call JS_ValueToString on the wrapped object. Instead,
777
+ // we need to call the wrapper's ToString in order to safely convert our
778
+ // object to a string.
779
+
780
+ char *wrapperStr = nsnull;
781
+ nsAutoString resultString;
782
+ if (isNativeWrapper) {
783
+ resultString.AppendLiteral("[object XPCNativeWrapper ");
784
+
785
+ wrapperStr = wrappedNative->ToString(ccx);
786
+ if (!wrapperStr) {
787
+ return JS_FALSE;
788
+ }
789
+ } else {
790
+ wrapperStr = wrappedNative->ToString(ccx);
791
+ if (!wrapperStr) {
792
+ return JS_FALSE;
793
+ }
794
+ }
795
+
796
+ resultString.AppendASCII(wrapperStr);
797
+ JS_smprintf_free(wrapperStr);
798
+
799
+ if (isNativeWrapper) {
800
+ resultString.Append(']');
801
+ }
802
+
803
+ str = ::JS_NewUCStringCopyN(cx, reinterpret_cast<const jschar *>
804
+ (resultString.get()),
805
+ resultString.Length());
806
+ }
807
+
808
+ NS_ENSURE_TRUE(str, JS_FALSE);
809
+
810
+ *rval = STRING_TO_JSVAL(str);
811
+ return JS_TRUE;
812
+ }
813
+
814
+ // static
815
+ JSBool
816
+ XPCWrapper::GetPropertyAttrs(JSContext *cx, JSObject *obj, jsid interned_id,
817
+ uintN flags, JSBool wantDetails,
818
+ JSPropertyDescriptor *desc)
819
+ {
820
+ if (!JS_GetPropertyDescriptorById(cx, obj, interned_id, flags, desc)) {
821
+ return JS_FALSE;
822
+ }
823
+
824
+ const uintN interesting_attrs = wantDetails
825
+ ? (JSPROP_ENUMERATE |
826
+ JSPROP_READONLY |
827
+ JSPROP_PERMANENT |
828
+ JSPROP_SHARED |
829
+ JSPROP_GETTER |
830
+ JSPROP_SETTER)
831
+ : JSPROP_ENUMERATE;
832
+ desc->attrs &= interesting_attrs;
833
+
834
+ if (wantDetails) {
835
+ // JS_GetPropertyDescriptorById returns non scripted getters and setters.
836
+ // If wantDetails is true, then we need to censor them.
837
+ if (!(desc->attrs & JSPROP_GETTER)) {
838
+ desc->getter = nsnull;
839
+ }
840
+ if (!(desc->attrs & JSPROP_SETTER)) {
841
+ desc->setter = nsnull;
842
+ }
843
+ } else {
844
+ // Clear out all but attrs and obj.
845
+ desc->getter = desc->setter = nsnull;
846
+ desc->value = JSVAL_VOID;
847
+ }
848
+
849
+ return JS_TRUE;
850
+ }