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,1541 @@
1
+ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2
+ * vim: set ts=8 sw=4 et tw=78:
3
+ *
4
+ * ***** BEGIN LICENSE BLOCK *****
5
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
6
+ *
7
+ * The contents of this file are subject to the Mozilla Public License Version
8
+ * 1.1 (the "License"); you may not use this file except in compliance with
9
+ * the License. You may obtain a copy of the License at
10
+ * http://www.mozilla.org/MPL/
11
+ *
12
+ * Software distributed under the License is distributed on an "AS IS" basis,
13
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
14
+ * for the specific language governing rights and limitations under the
15
+ * License.
16
+ *
17
+ * The Original Code is Mozilla Communicator client code, released
18
+ * March 31, 1998.
19
+ *
20
+ * The Initial Developer of the Original Code is
21
+ * Netscape Communications Corporation.
22
+ * Portions created by the Initial Developer are Copyright (C) 1998
23
+ * the Initial Developer. All Rights Reserved.
24
+ *
25
+ * Contributor(s):
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
+ #ifndef jscntxt_h___
42
+ #define jscntxt_h___
43
+ /*
44
+ * JS execution context.
45
+ */
46
+ #include "jsarena.h" /* Added by JSIFY */
47
+ #include "jsclist.h"
48
+ #include "jslong.h"
49
+ #include "jsatom.h"
50
+ #include "jsversion.h"
51
+ #include "jsdhash.h"
52
+ #include "jsgc.h"
53
+ #include "jsinterp.h"
54
+ #include "jsobj.h"
55
+ #include "jsprvtd.h"
56
+ #include "jspubtd.h"
57
+ #include "jsregexp.h"
58
+ #include "jsutil.h"
59
+
60
+ JS_BEGIN_EXTERN_C
61
+
62
+ /*
63
+ * js_GetSrcNote cache to avoid O(n^2) growth in finding a source note for a
64
+ * given pc in a script. We use the script->code pointer to tag the cache,
65
+ * instead of the script address itself, so that source notes are always found
66
+ * by offset from the bytecode with which they were generated.
67
+ */
68
+ typedef struct JSGSNCache {
69
+ jsbytecode *code;
70
+ JSDHashTable table;
71
+ #ifdef JS_GSNMETER
72
+ uint32 hits;
73
+ uint32 misses;
74
+ uint32 fills;
75
+ uint32 purges;
76
+ # define GSN_CACHE_METER(cache,cnt) (++(cache)->cnt)
77
+ #else
78
+ # define GSN_CACHE_METER(cache,cnt) /* nothing */
79
+ #endif
80
+ } JSGSNCache;
81
+
82
+ #define js_FinishGSNCache(cache) js_PurgeGSNCache(cache)
83
+
84
+ extern void
85
+ js_PurgeGSNCache(JSGSNCache *cache);
86
+
87
+ /* These helper macros take a cx as parameter and operate on its GSN cache. */
88
+ #define JS_PURGE_GSN_CACHE(cx) js_PurgeGSNCache(&JS_GSN_CACHE(cx))
89
+ #define JS_METER_GSN_CACHE(cx,cnt) GSN_CACHE_METER(&JS_GSN_CACHE(cx), cnt)
90
+
91
+ typedef struct InterpState InterpState;
92
+ typedef struct VMSideExit VMSideExit;
93
+
94
+ #ifdef __cplusplus
95
+ namespace nanojit {
96
+ class Fragment;
97
+ class Fragmento;
98
+ class LirBuffer;
99
+ }
100
+ class TraceRecorder;
101
+ extern "C++" { template<typename T> class Queue; }
102
+ typedef Queue<uint16> SlotList;
103
+
104
+ # define CLS(T) T*
105
+ #else
106
+ # define CLS(T) void*
107
+ #endif
108
+
109
+ #define FRAGMENT_TABLE_SIZE 512
110
+ struct VMFragment;
111
+
112
+ #define MONITOR_N_GLOBAL_STATES 4
113
+ struct GlobalState {
114
+ JSObject* globalObj;
115
+ uint32 globalShape;
116
+ CLS(SlotList) globalSlots;
117
+ };
118
+
119
+ /*
120
+ * Trace monitor. Every JSThread (if JS_THREADSAFE) or JSRuntime (if not
121
+ * JS_THREADSAFE) has an associated trace monitor that keeps track of loop
122
+ * frequencies for all JavaScript code loaded into that runtime.
123
+ */
124
+ struct JSTraceMonitor {
125
+ /*
126
+ * The context currently executing JIT-compiled code on this thread, or
127
+ * NULL if none. Among other things, this can in certain cases prevent
128
+ * last-ditch GC and suppress calls to JS_ReportOutOfMemory.
129
+ *
130
+ * !tracecx && !recorder: not on trace
131
+ * !tracecx && !recorder && prohibitFlush: deep-bailed
132
+ * !tracecx && recorder && !recorder->deepAborted: recording
133
+ * !tracecx && recorder && recorder->deepAborted: deep aborted
134
+ * tracecx && !recorder: executing a trace
135
+ * tracecx && recorder: executing inner loop, recording outer loop
136
+ */
137
+ JSContext *tracecx;
138
+
139
+ CLS(nanojit::LirBuffer) lirbuf;
140
+ CLS(nanojit::Fragmento) fragmento;
141
+ CLS(TraceRecorder) recorder;
142
+ jsval *reservedDoublePool;
143
+ jsval *reservedDoublePoolPtr;
144
+
145
+ struct GlobalState globalStates[MONITOR_N_GLOBAL_STATES];
146
+ struct VMFragment* vmfragments[FRAGMENT_TABLE_SIZE];
147
+ JSDHashTable recordAttempts;
148
+
149
+ /*
150
+ * Maximum size of the code cache before we start flushing. 1/16 of this
151
+ * size is used as threshold for the regular expression code cache.
152
+ */
153
+ uint32 maxCodeCacheBytes;
154
+
155
+ /*
156
+ * If nonzero, do not flush the JIT cache after a deep bail. That would
157
+ * free JITted code pages that we will later return to. Instead, set the
158
+ * needFlush flag so that it can be flushed later.
159
+ *
160
+ * NB: needFlush and useReservedObjects are packed together.
161
+ */
162
+ uintN prohibitFlush;
163
+ JSPackedBool needFlush;
164
+
165
+ /*
166
+ * reservedObjects is a linked list (via fslots[0]) of preallocated JSObjects.
167
+ * The JIT uses this to ensure that leaving a trace tree can't fail.
168
+ */
169
+ JSPackedBool useReservedObjects;
170
+ JSObject *reservedObjects;
171
+
172
+ /* Fragmento for the regular expression compiler. This is logically
173
+ * a distinct compiler but needs to be managed in exactly the same
174
+ * way as the real tracing Fragmento. */
175
+ CLS(nanojit::LirBuffer) reLirBuf;
176
+ CLS(nanojit::Fragmento) reFragmento;
177
+
178
+ /* Keep a list of recorders we need to abort on cache flush. */
179
+ CLS(TraceRecorder) abortStack;
180
+ };
181
+
182
+ typedef struct InterpStruct InterpStruct;
183
+
184
+ /*
185
+ * N.B. JS_ON_TRACE(cx) is true if JIT code is on the stack in the current
186
+ * thread, regardless of whether cx is the context in which that trace is
187
+ * executing. cx must be a context on the current thread.
188
+ */
189
+ #ifdef JS_TRACER
190
+ # define JS_ON_TRACE(cx) (JS_TRACE_MONITOR(cx).tracecx != NULL)
191
+ #else
192
+ # define JS_ON_TRACE(cx) JS_FALSE
193
+ #endif
194
+
195
+ #ifdef DEBUG
196
+ # define JS_EVAL_CACHE_METERING 1
197
+ # define JS_FUNCTION_METERING 1
198
+ #endif
199
+
200
+ /* Number of potentially reusable scriptsToGC to search for the eval cache. */
201
+ #ifndef JS_EVAL_CACHE_SHIFT
202
+ # define JS_EVAL_CACHE_SHIFT 6
203
+ #endif
204
+ #define JS_EVAL_CACHE_SIZE JS_BIT(JS_EVAL_CACHE_SHIFT)
205
+
206
+ #ifdef JS_EVAL_CACHE_METERING
207
+ # define EVAL_CACHE_METER_LIST(_) _(probe), _(hit), _(step), _(noscope)
208
+ # define identity(x) x
209
+
210
+ /* Have to typedef this for LiveConnect C code, which includes us. */
211
+ typedef struct JSEvalCacheMeter {
212
+ uint64 EVAL_CACHE_METER_LIST(identity);
213
+ } JSEvalCacheMeter;
214
+
215
+ # undef identity
216
+ #endif
217
+
218
+ #ifdef JS_FUNCTION_METERING
219
+ # define FUNCTION_KIND_METER_LIST(_) \
220
+ _(allfun), _(heavy), _(nofreeupvar), _(onlyfreevar), \
221
+ _(display), _(flat), _(setupvar), _(badfunarg)
222
+ # define identity(x) x
223
+
224
+ typedef struct JSFunctionMeter {
225
+ int32 FUNCTION_KIND_METER_LIST(identity);
226
+ } JSFunctionMeter;
227
+
228
+ # undef identity
229
+ #endif
230
+
231
+ struct JSThreadData {
232
+ /*
233
+ * The GSN cache is per thread since even multi-cx-per-thread embeddings
234
+ * do not interleave js_GetSrcNote calls.
235
+ */
236
+ JSGSNCache gsnCache;
237
+
238
+ /* Property cache for faster call/get/set invocation. */
239
+ JSPropertyCache propertyCache;
240
+
241
+ #ifdef JS_TRACER
242
+ /* Trace-tree JIT recorder/interpreter state. */
243
+ JSTraceMonitor traceMonitor;
244
+ #endif
245
+
246
+ /* Lock-free hashed lists of scripts created by eval to garbage-collect. */
247
+ JSScript *scriptsToGC[JS_EVAL_CACHE_SIZE];
248
+
249
+ #ifdef JS_EVAL_CACHE_METERING
250
+ JSEvalCacheMeter evalCacheMeter;
251
+ #endif
252
+ };
253
+
254
+ #ifdef JS_THREADSAFE
255
+
256
+ /*
257
+ * Structure uniquely representing a thread. It holds thread-private data
258
+ * that can be accessed without a global lock.
259
+ */
260
+ struct JSThread {
261
+ /* Linked list of all contexts in use on this thread. */
262
+ JSCList contextList;
263
+
264
+ /* Opaque thread-id, from NSPR's PR_GetCurrentThread(). */
265
+ jsword id;
266
+
267
+ /*
268
+ * Thread-local version of JSRuntime.gcMallocBytes to avoid taking
269
+ * locks on each JS_malloc.
270
+ */
271
+ uint32 gcMallocBytes;
272
+
273
+ /* Indicates that the thread is waiting in ClaimTitle from jslock.cpp. */
274
+ JSTitle *titleToShare;
275
+
276
+ /* Factored out of JSThread for !JS_THREADSAFE embedding in JSRuntime. */
277
+ JSThreadData data;
278
+ };
279
+
280
+ #define JS_THREAD_DATA(cx) (&(cx)->thread->data)
281
+
282
+ struct JSThreadsHashEntry {
283
+ JSDHashEntryHdr base;
284
+ JSThread *thread;
285
+ };
286
+
287
+ /*
288
+ * The function takes the GC lock and does not release in successful return.
289
+ * On error (out of memory) the function releases the lock but delegates
290
+ * the error reporting to the caller.
291
+ */
292
+ extern JSBool
293
+ js_InitContextThread(JSContext *cx);
294
+
295
+ /*
296
+ * On entrance the GC lock must be held and it will be held on exit.
297
+ */
298
+ extern void
299
+ js_ClearContextThread(JSContext *cx);
300
+
301
+ #endif /* JS_THREADSAFE */
302
+
303
+ typedef enum JSDestroyContextMode {
304
+ JSDCM_NO_GC,
305
+ JSDCM_MAYBE_GC,
306
+ JSDCM_FORCE_GC,
307
+ JSDCM_NEW_FAILED
308
+ } JSDestroyContextMode;
309
+
310
+ typedef enum JSRuntimeState {
311
+ JSRTS_DOWN,
312
+ JSRTS_LAUNCHING,
313
+ JSRTS_UP,
314
+ JSRTS_LANDING
315
+ } JSRuntimeState;
316
+
317
+ typedef enum JSBuiltinFunctionId {
318
+ JSBUILTIN_ObjectToIterator,
319
+ JSBUILTIN_CallIteratorNext,
320
+ JSBUILTIN_GetProperty,
321
+ JSBUILTIN_GetElement,
322
+ JSBUILTIN_SetProperty,
323
+ JSBUILTIN_SetElement,
324
+ JSBUILTIN_LIMIT
325
+ } JSBuiltinFunctionId;
326
+
327
+ typedef struct JSPropertyTreeEntry {
328
+ JSDHashEntryHdr hdr;
329
+ JSScopeProperty *child;
330
+ } JSPropertyTreeEntry;
331
+
332
+ typedef struct JSSetSlotRequest JSSetSlotRequest;
333
+
334
+ struct JSSetSlotRequest {
335
+ JSObject *obj; /* object containing slot to set */
336
+ JSObject *pobj; /* new proto or parent reference */
337
+ uint16 slot; /* which to set, proto or parent */
338
+ JSPackedBool cycle; /* true if a cycle was detected */
339
+ JSSetSlotRequest *next; /* next request in GC worklist */
340
+ };
341
+
342
+ struct JSRuntime {
343
+ /* Runtime state, synchronized by the stateChange/gcLock condvar/lock. */
344
+ JSRuntimeState state;
345
+
346
+ /* Context create/destroy callback. */
347
+ JSContextCallback cxCallback;
348
+
349
+ /*
350
+ * Shape regenerated whenever a prototype implicated by an "add property"
351
+ * property cache fill and induced trace guard has a readonly property or a
352
+ * setter defined on it. This number proxies for the shapes of all objects
353
+ * along the prototype chain of all objects in the runtime on which such an
354
+ * add-property result has been cached/traced.
355
+ *
356
+ * See bug 492355 for more details.
357
+ *
358
+ * This comes early in JSRuntime to minimize the immediate format used by
359
+ * trace-JITted code that reads it.
360
+ */
361
+ uint32 protoHazardShape;
362
+
363
+ /* Garbage collector state, used by jsgc.c. */
364
+ JSGCChunkInfo *gcChunkList;
365
+ JSGCArenaList gcArenaList[GC_NUM_FREELISTS];
366
+ JSGCDoubleArenaList gcDoubleArenaList;
367
+ JSGCFreeListSet *gcFreeListsPool;
368
+ JSDHashTable gcRootsHash;
369
+ JSDHashTable *gcLocksHash;
370
+ jsrefcount gcKeepAtoms;
371
+ uint32 gcBytes;
372
+ uint32 gcLastBytes;
373
+ uint32 gcMaxBytes;
374
+ uint32 gcMaxMallocBytes;
375
+ uint32 gcEmptyArenaPoolLifespan;
376
+ uint32 gcLevel;
377
+ uint32 gcNumber;
378
+ JSTracer *gcMarkingTracer;
379
+ uint32 gcTriggerFactor;
380
+ volatile JSBool gcIsNeeded;
381
+
382
+ /*
383
+ * NB: do not pack another flag here by claiming gcPadding unless the new
384
+ * flag is written only by the GC thread. Atomic updates to packed bytes
385
+ * are not guaranteed, so stores issued by one thread may be lost due to
386
+ * unsynchronized read-modify-write cycles on other threads.
387
+ */
388
+ JSPackedBool gcPoke;
389
+ JSPackedBool gcRunning;
390
+ uint16 gcPadding;
391
+ #ifdef JS_GC_ZEAL
392
+ jsrefcount gcZeal;
393
+ #endif
394
+
395
+ JSGCCallback gcCallback;
396
+ uint32 gcMallocBytes;
397
+ JSGCArenaInfo *gcUntracedArenaStackTop;
398
+ #ifdef DEBUG
399
+ size_t gcTraceLaterCount;
400
+ #endif
401
+
402
+ /*
403
+ * Table for tracking iterators to ensure that we close iterator's state
404
+ * before finalizing the iterable object.
405
+ */
406
+ JSPtrTable gcIteratorTable;
407
+
408
+ /*
409
+ * The trace operation and its data argument to trace embedding-specific
410
+ * GC roots.
411
+ */
412
+ JSTraceDataOp gcExtraRootsTraceOp;
413
+ void *gcExtraRootsData;
414
+
415
+ /*
416
+ * Used to serialize cycle checks when setting __proto__ or __parent__ by
417
+ * requesting the GC handle the required cycle detection. If the GC hasn't
418
+ * been poked, it won't scan for garbage. This member is protected by
419
+ * rt->gcLock.
420
+ */
421
+ JSSetSlotRequest *setSlotRequests;
422
+
423
+ /* Random number generator state, used by jsmath.c. */
424
+ JSBool rngInitialized;
425
+ int64 rngMultiplier;
426
+ int64 rngAddend;
427
+ int64 rngMask;
428
+ int64 rngSeed;
429
+ jsdouble rngDscale;
430
+
431
+ /* Well-known numbers held for use by this runtime's contexts. */
432
+ jsdouble *jsNaN;
433
+ jsdouble *jsNegativeInfinity;
434
+ jsdouble *jsPositiveInfinity;
435
+
436
+ #ifdef JS_THREADSAFE
437
+ JSLock *deflatedStringCacheLock;
438
+ #endif
439
+ JSHashTable *deflatedStringCache;
440
+ #ifdef DEBUG
441
+ uint32 deflatedStringCacheBytes;
442
+ #endif
443
+
444
+ /*
445
+ * Empty and unit-length strings held for use by this runtime's contexts.
446
+ * The unitStrings array and its elements are created on demand.
447
+ */
448
+ JSString *emptyString;
449
+ JSString **unitStrings;
450
+
451
+ /*
452
+ * Builtin functions, lazily created and held for use by the trace recorder.
453
+ *
454
+ * This field would be #ifdef JS_TRACER, but XPConnect is compiled without
455
+ * -DJS_TRACER and includes this header.
456
+ */
457
+ JSObject *builtinFunctions[JSBUILTIN_LIMIT];
458
+
459
+ /* List of active contexts sharing this runtime; protected by gcLock. */
460
+ JSCList contextList;
461
+
462
+ /* Per runtime debug hooks -- see jsprvtd.h and jsdbgapi.h. */
463
+ JSDebugHooks globalDebugHooks;
464
+
465
+ /* More debugging state, see jsdbgapi.c. */
466
+ JSCList trapList;
467
+ JSCList watchPointList;
468
+
469
+ /* Client opaque pointers */
470
+ void *data;
471
+
472
+ #ifdef JS_THREADSAFE
473
+ /* These combine to interlock the GC and new requests. */
474
+ PRLock *gcLock;
475
+ PRCondVar *gcDone;
476
+ PRCondVar *requestDone;
477
+ uint32 requestCount;
478
+ JSThread *gcThread;
479
+
480
+ /* Lock and owning thread pointer for JS_LOCK_RUNTIME. */
481
+ PRLock *rtLock;
482
+ #ifdef DEBUG
483
+ jsword rtLockOwner;
484
+ #endif
485
+
486
+ /* Used to synchronize down/up state change; protected by gcLock. */
487
+ PRCondVar *stateChange;
488
+
489
+ /*
490
+ * State for sharing single-threaded titles, once a second thread tries to
491
+ * lock a title. The titleSharingDone condvar is protected by rt->gcLock
492
+ * to minimize number of locks taken in JS_EndRequest.
493
+ *
494
+ * The titleSharingTodo linked list is likewise "global" per runtime, not
495
+ * one-list-per-context, to conserve space over all contexts, optimizing
496
+ * for the likely case that titles become shared rarely, and among a very
497
+ * small set of threads (contexts).
498
+ */
499
+ PRCondVar *titleSharingDone;
500
+ JSTitle *titleSharingTodo;
501
+
502
+ /*
503
+ * Magic terminator for the rt->titleSharingTodo linked list, threaded through
504
+ * title->u.link. This hack allows us to test whether a title is on the list
505
+ * by asking whether title->u.link is non-null. We use a large, likely bogus
506
+ * pointer here to distinguish this value from any valid u.count (small int)
507
+ * value.
508
+ */
509
+ #define NO_TITLE_SHARING_TODO ((JSTitle *) 0xfeedbeef)
510
+
511
+ /*
512
+ * Lock serializing trapList and watchPointList accesses, and count of all
513
+ * mutations to trapList and watchPointList made by debugger threads. To
514
+ * keep the code simple, we define debuggerMutations for the thread-unsafe
515
+ * case too.
516
+ */
517
+ PRLock *debuggerLock;
518
+
519
+ JSDHashTable threads;
520
+ #endif /* JS_THREADSAFE */
521
+ uint32 debuggerMutations;
522
+
523
+ /*
524
+ * Security callbacks set on the runtime are used by each context unless
525
+ * an override is set on the context.
526
+ */
527
+ JSSecurityCallbacks *securityCallbacks;
528
+
529
+ /*
530
+ * Shared scope property tree, and arena-pool for allocating its nodes.
531
+ * The propertyRemovals counter is incremented for every js_ClearScope,
532
+ * and for each js_RemoveScopeProperty that frees a slot in an object.
533
+ * See js_NativeGet and js_NativeSet in jsobj.c.
534
+ */
535
+ JSDHashTable propertyTreeHash;
536
+ JSScopeProperty *propertyFreeList;
537
+ JSArenaPool propertyArenaPool;
538
+ int32 propertyRemovals;
539
+
540
+ /* Script filename table. */
541
+ struct JSHashTable *scriptFilenameTable;
542
+ JSCList scriptFilenamePrefixes;
543
+ #ifdef JS_THREADSAFE
544
+ PRLock *scriptFilenameTableLock;
545
+ #endif
546
+
547
+ /* Number localization, used by jsnum.c */
548
+ const char *thousandsSeparator;
549
+ const char *decimalSeparator;
550
+ const char *numGrouping;
551
+
552
+ /*
553
+ * Weak references to lazily-created, well-known XML singletons.
554
+ *
555
+ * NB: Singleton objects must be carefully disconnected from the rest of
556
+ * the object graph usually associated with a JSContext's global object,
557
+ * including the set of standard class objects. See jsxml.c for details.
558
+ */
559
+ JSObject *anynameObject;
560
+ JSObject *functionNamespaceObject;
561
+
562
+ /*
563
+ * A helper list for the GC, so it can mark native iterator states. See
564
+ * js_TraceNativeEnumerators for details.
565
+ */
566
+ JSNativeEnumerator *nativeEnumerators;
567
+
568
+ #ifndef JS_THREADSAFE
569
+ JSThreadData threadData;
570
+
571
+ #define JS_THREAD_DATA(cx) (&(cx)->runtime->threadData)
572
+ #endif
573
+
574
+ /*
575
+ * Object shape (property cache structural type) identifier generator.
576
+ *
577
+ * Type 0 stands for the empty scope, and must not be regenerated due to
578
+ * uint32 wrap-around. Since js_GenerateShape (in jsinterp.cpp) uses
579
+ * atomic pre-increment, the initial value for the first typed non-empty
580
+ * scope will be 1.
581
+ *
582
+ * If this counter overflows into SHAPE_OVERFLOW_BIT (in jsinterp.h), the
583
+ * cache is disabled, to avoid aliasing two different types. It stays
584
+ * disabled until a triggered GC at some later moment compresses live
585
+ * types, minimizing rt->shapeGen in the process.
586
+ */
587
+ volatile uint32 shapeGen;
588
+
589
+ /* Literal table maintained by jsatom.c functions. */
590
+ JSAtomState atomState;
591
+
592
+ /*
593
+ * Cache of reusable JSNativeEnumerators mapped by shape identifiers (as
594
+ * stored in scope->shape). This cache is nulled by the GC and protected
595
+ * by gcLock.
596
+ */
597
+ #define NATIVE_ENUM_CACHE_LOG2 8
598
+ #define NATIVE_ENUM_CACHE_MASK JS_BITMASK(NATIVE_ENUM_CACHE_LOG2)
599
+ #define NATIVE_ENUM_CACHE_SIZE JS_BIT(NATIVE_ENUM_CACHE_LOG2)
600
+
601
+ #define NATIVE_ENUM_CACHE_HASH(shape) \
602
+ ((((shape) >> NATIVE_ENUM_CACHE_LOG2) ^ (shape)) & NATIVE_ENUM_CACHE_MASK)
603
+
604
+ jsuword nativeEnumCache[NATIVE_ENUM_CACHE_SIZE];
605
+
606
+ /*
607
+ * Various metering fields are defined at the end of JSRuntime. In this
608
+ * way there is no need to recompile all the code that refers to other
609
+ * fields of JSRuntime after enabling the corresponding metering macro.
610
+ */
611
+ #ifdef JS_DUMP_ENUM_CACHE_STATS
612
+ int32 nativeEnumProbes;
613
+ int32 nativeEnumMisses;
614
+ # define ENUM_CACHE_METER(name) JS_ATOMIC_INCREMENT(&cx->runtime->name)
615
+ #else
616
+ # define ENUM_CACHE_METER(name) ((void) 0)
617
+ #endif
618
+
619
+ #ifdef JS_DUMP_LOOP_STATS
620
+ /* Loop statistics, to trigger trace recording and compiling. */
621
+ JSBasicStats loopStats;
622
+ #endif
623
+
624
+ #if defined DEBUG || defined JS_DUMP_PROPTREE_STATS
625
+ /* Function invocation metering. */
626
+ jsrefcount inlineCalls;
627
+ jsrefcount nativeCalls;
628
+ jsrefcount nonInlineCalls;
629
+ jsrefcount constructs;
630
+
631
+ /* Title lock and scope property metering. */
632
+ jsrefcount claimAttempts;
633
+ jsrefcount claimedTitles;
634
+ jsrefcount deadContexts;
635
+ jsrefcount deadlocksAvoided;
636
+ jsrefcount liveScopes;
637
+ jsrefcount sharedTitles;
638
+ jsrefcount totalScopes;
639
+ jsrefcount liveScopeProps;
640
+ jsrefcount liveScopePropsPreSweep;
641
+ jsrefcount totalScopeProps;
642
+ jsrefcount livePropTreeNodes;
643
+ jsrefcount duplicatePropTreeNodes;
644
+ jsrefcount totalPropTreeNodes;
645
+ jsrefcount propTreeKidsChunks;
646
+ jsrefcount middleDeleteFixups;
647
+
648
+ /* String instrumentation. */
649
+ jsrefcount liveStrings;
650
+ jsrefcount totalStrings;
651
+ jsrefcount liveDependentStrings;
652
+ jsrefcount totalDependentStrings;
653
+ jsrefcount badUndependStrings;
654
+ double lengthSum;
655
+ double lengthSquaredSum;
656
+ double strdepLengthSum;
657
+ double strdepLengthSquaredSum;
658
+ #endif /* DEBUG || JS_DUMP_PROPTREE_STATS */
659
+
660
+ #ifdef JS_SCOPE_DEPTH_METER
661
+ /*
662
+ * Stats on runtime prototype chain lookups and scope chain depths, i.e.,
663
+ * counts of objects traversed on a chain until the wanted id is found.
664
+ */
665
+ JSBasicStats protoLookupDepthStats;
666
+ JSBasicStats scopeSearchDepthStats;
667
+
668
+ /*
669
+ * Stats on compile-time host environment and lexical scope chain lengths
670
+ * (maximum depths).
671
+ */
672
+ JSBasicStats hostenvScopeDepthStats;
673
+ JSBasicStats lexicalScopeDepthStats;
674
+ #endif
675
+
676
+ #ifdef JS_GCMETER
677
+ JSGCStats gcStats;
678
+ #endif
679
+
680
+ #ifdef JS_FUNCTION_METERING
681
+ JSFunctionMeter functionMeter;
682
+ char lastScriptFilename[1024];
683
+ #endif
684
+ };
685
+
686
+ /* Common macros to access thread-local caches in JSThread or JSRuntime. */
687
+ #define JS_GSN_CACHE(cx) (JS_THREAD_DATA(cx)->gsnCache)
688
+ #define JS_PROPERTY_CACHE(cx) (JS_THREAD_DATA(cx)->propertyCache)
689
+ #define JS_TRACE_MONITOR(cx) (JS_THREAD_DATA(cx)->traceMonitor)
690
+ #define JS_SCRIPTS_TO_GC(cx) (JS_THREAD_DATA(cx)->scriptsToGC)
691
+
692
+ #ifdef JS_EVAL_CACHE_METERING
693
+ # define EVAL_CACHE_METER(x) (JS_THREAD_DATA(cx)->evalCacheMeter.x++)
694
+ #else
695
+ # define EVAL_CACHE_METER(x) ((void) 0)
696
+ #endif
697
+
698
+ #ifdef DEBUG
699
+ # define JS_RUNTIME_METER(rt, which) JS_ATOMIC_INCREMENT(&(rt)->which)
700
+ # define JS_RUNTIME_UNMETER(rt, which) JS_ATOMIC_DECREMENT(&(rt)->which)
701
+ #else
702
+ # define JS_RUNTIME_METER(rt, which) /* nothing */
703
+ # define JS_RUNTIME_UNMETER(rt, which) /* nothing */
704
+ #endif
705
+
706
+ #define JS_KEEP_ATOMS(rt) JS_ATOMIC_INCREMENT(&(rt)->gcKeepAtoms);
707
+ #define JS_UNKEEP_ATOMS(rt) JS_ATOMIC_DECREMENT(&(rt)->gcKeepAtoms);
708
+
709
+ #ifdef JS_ARGUMENT_FORMATTER_DEFINED
710
+ /*
711
+ * Linked list mapping format strings for JS_{Convert,Push}Arguments{,VA} to
712
+ * formatter functions. Elements are sorted in non-increasing format string
713
+ * length order.
714
+ */
715
+ struct JSArgumentFormatMap {
716
+ const char *format;
717
+ size_t length;
718
+ JSArgumentFormatter formatter;
719
+ JSArgumentFormatMap *next;
720
+ };
721
+ #endif
722
+
723
+ struct JSStackHeader {
724
+ uintN nslots;
725
+ JSStackHeader *down;
726
+ };
727
+
728
+ #define JS_STACK_SEGMENT(sh) ((jsval *)(sh) + 2)
729
+
730
+ /*
731
+ * Key and entry types for the JSContext.resolvingTable hash table, typedef'd
732
+ * here because all consumers need to see these declarations (and not just the
733
+ * typedef names, as would be the case for an opaque pointer-to-typedef'd-type
734
+ * declaration), along with cx->resolvingTable.
735
+ */
736
+ typedef struct JSResolvingKey {
737
+ JSObject *obj;
738
+ jsid id;
739
+ } JSResolvingKey;
740
+
741
+ typedef struct JSResolvingEntry {
742
+ JSDHashEntryHdr hdr;
743
+ JSResolvingKey key;
744
+ uint32 flags;
745
+ } JSResolvingEntry;
746
+
747
+ #define JSRESFLAG_LOOKUP 0x1 /* resolving id from lookup */
748
+ #define JSRESFLAG_WATCH 0x2 /* resolving id from watch */
749
+
750
+ typedef struct JSLocalRootChunk JSLocalRootChunk;
751
+
752
+ #define JSLRS_CHUNK_SHIFT 8
753
+ #define JSLRS_CHUNK_SIZE JS_BIT(JSLRS_CHUNK_SHIFT)
754
+ #define JSLRS_CHUNK_MASK JS_BITMASK(JSLRS_CHUNK_SHIFT)
755
+
756
+ struct JSLocalRootChunk {
757
+ jsval roots[JSLRS_CHUNK_SIZE];
758
+ JSLocalRootChunk *down;
759
+ };
760
+
761
+ typedef struct JSLocalRootStack {
762
+ uint32 scopeMark;
763
+ uint32 rootCount;
764
+ JSLocalRootChunk *topChunk;
765
+ JSLocalRootChunk firstChunk;
766
+ } JSLocalRootStack;
767
+
768
+ #define JSLRS_NULL_MARK ((uint32) -1)
769
+
770
+ /*
771
+ * Macros to push/pop JSTempValueRooter instances to context-linked stack of
772
+ * temporary GC roots. If you need to protect a result value that flows out of
773
+ * a C function across several layers of other functions, use the
774
+ * js_LeaveLocalRootScopeWithResult internal API (see further below) instead.
775
+ *
776
+ * The macros also provide a simple way to get a single rooted pointer via
777
+ * JS_PUSH_TEMP_ROOT_<KIND>(cx, NULL, &tvr). Then &tvr.u.<kind> gives the
778
+ * necessary pointer.
779
+ *
780
+ * JSTempValueRooter.count defines the type of the rooted value referenced by
781
+ * JSTempValueRooter.u union of type JSTempValueUnion. When count is positive
782
+ * or zero, u.array points to a vector of jsvals. Otherwise it must be one of
783
+ * the following constants:
784
+ */
785
+ #define JSTVU_SINGLE (-1) /* u.value or u.<gcthing> is single jsval
786
+ or GC-thing */
787
+ #define JSTVU_TRACE (-2) /* u.trace is a hook to trace a custom
788
+ * structure */
789
+ #define JSTVU_SPROP (-3) /* u.sprop roots property tree node */
790
+ #define JSTVU_WEAK_ROOTS (-4) /* u.weakRoots points to saved weak roots */
791
+ #define JSTVU_COMPILER (-5) /* u.compiler roots JSCompiler* */
792
+ #define JSTVU_SCRIPT (-6) /* u.script roots JSScript* */
793
+
794
+ /*
795
+ * Here single JSTVU_SINGLE covers both jsval and pointers to any GC-thing via
796
+ * reinterpreting the thing as JSVAL_OBJECT. It works because the GC-thing is
797
+ * aligned on a 0 mod 8 boundary, and object has the 0 jsval tag. So any
798
+ * GC-thing may be tagged as if it were an object and untagged, if it's then
799
+ * used only as an opaque pointer until discriminated by other means than tag
800
+ * bits. This is how, for example, js_GetGCThingTraceKind uses its |thing|
801
+ * parameter -- it consults GC-thing flags stored separately from the thing to
802
+ * decide the kind of thing.
803
+ */
804
+ #define JS_PUSH_TEMP_ROOT_COMMON(cx,x,tvr,cnt,kind) \
805
+ JS_BEGIN_MACRO \
806
+ JS_ASSERT((cx)->tempValueRooters != (tvr)); \
807
+ (tvr)->count = (cnt); \
808
+ (tvr)->u.kind = (x); \
809
+ (tvr)->down = (cx)->tempValueRooters; \
810
+ (cx)->tempValueRooters = (tvr); \
811
+ JS_END_MACRO
812
+
813
+ #define JS_POP_TEMP_ROOT(cx,tvr) \
814
+ JS_BEGIN_MACRO \
815
+ JS_ASSERT((cx)->tempValueRooters == (tvr)); \
816
+ (cx)->tempValueRooters = (tvr)->down; \
817
+ JS_END_MACRO
818
+
819
+ #define JS_PUSH_TEMP_ROOT(cx,cnt,arr,tvr) \
820
+ JS_BEGIN_MACRO \
821
+ JS_ASSERT((int)(cnt) >= 0); \
822
+ JS_PUSH_TEMP_ROOT_COMMON(cx, arr, tvr, (ptrdiff_t) (cnt), array); \
823
+ JS_END_MACRO
824
+
825
+ #define JS_PUSH_SINGLE_TEMP_ROOT(cx,val,tvr) \
826
+ JS_PUSH_TEMP_ROOT_COMMON(cx, val, tvr, JSTVU_SINGLE, value)
827
+
828
+ #define JS_PUSH_TEMP_ROOT_OBJECT(cx,obj,tvr) \
829
+ JS_PUSH_TEMP_ROOT_COMMON(cx, obj, tvr, JSTVU_SINGLE, object)
830
+
831
+ #define JS_PUSH_TEMP_ROOT_STRING(cx,str,tvr) \
832
+ JS_PUSH_TEMP_ROOT_COMMON(cx, str, tvr, JSTVU_SINGLE, string)
833
+
834
+ #define JS_PUSH_TEMP_ROOT_XML(cx,xml_,tvr) \
835
+ JS_PUSH_TEMP_ROOT_COMMON(cx, xml_, tvr, JSTVU_SINGLE, xml)
836
+
837
+ #define JS_PUSH_TEMP_ROOT_TRACE(cx,trace_,tvr) \
838
+ JS_PUSH_TEMP_ROOT_COMMON(cx, trace_, tvr, JSTVU_TRACE, trace)
839
+
840
+ #define JS_PUSH_TEMP_ROOT_SPROP(cx,sprop_,tvr) \
841
+ JS_PUSH_TEMP_ROOT_COMMON(cx, sprop_, tvr, JSTVU_SPROP, sprop)
842
+
843
+ #define JS_PUSH_TEMP_ROOT_WEAK_COPY(cx,weakRoots_,tvr) \
844
+ JS_PUSH_TEMP_ROOT_COMMON(cx, weakRoots_, tvr, JSTVU_WEAK_ROOTS, weakRoots)
845
+
846
+ #define JS_PUSH_TEMP_ROOT_COMPILER(cx,pc,tvr) \
847
+ JS_PUSH_TEMP_ROOT_COMMON(cx, pc, tvr, JSTVU_COMPILER, compiler)
848
+
849
+ #define JS_PUSH_TEMP_ROOT_SCRIPT(cx,script_,tvr) \
850
+ JS_PUSH_TEMP_ROOT_COMMON(cx, script_, tvr, JSTVU_SCRIPT, script)
851
+
852
+
853
+ #define JSRESOLVE_INFER 0xffff /* infer bits from current bytecode */
854
+
855
+ struct JSContext {
856
+ /*
857
+ * If this flag is set, we were asked to call back the operation callback
858
+ * as soon as possible.
859
+ */
860
+ volatile jsint operationCallbackFlag;
861
+
862
+ /* JSRuntime contextList linkage. */
863
+ JSCList link;
864
+
865
+ #if JS_HAS_XML_SUPPORT
866
+ /*
867
+ * Bit-set formed from binary exponentials of the XML_* tiny-ids defined
868
+ * for boolean settings in jsxml.c, plus an XSF_CACHE_VALID bit. Together
869
+ * these act as a cache of the boolean XML.ignore* and XML.prettyPrinting
870
+ * property values associated with this context's global object.
871
+ */
872
+ uint8 xmlSettingFlags;
873
+ uint8 padding;
874
+ #else
875
+ uint16 padding;
876
+ #endif
877
+
878
+ /*
879
+ * Classic Algol "display" static link optimization.
880
+ */
881
+ #define JS_DISPLAY_SIZE 16U
882
+
883
+ JSStackFrame *display[JS_DISPLAY_SIZE];
884
+
885
+ /* Runtime version control identifier. */
886
+ uint16 version;
887
+
888
+ /* Per-context options. */
889
+ uint32 options; /* see jsapi.h for JSOPTION_* */
890
+
891
+ /* Locale specific callbacks for string conversion. */
892
+ JSLocaleCallbacks *localeCallbacks;
893
+
894
+ /*
895
+ * cx->resolvingTable is non-null and non-empty if we are initializing
896
+ * standard classes lazily, or if we are otherwise recursing indirectly
897
+ * from js_LookupProperty through a JSClass.resolve hook. It is used to
898
+ * limit runaway recursion (see jsapi.c and jsobj.c).
899
+ */
900
+ JSDHashTable *resolvingTable;
901
+
902
+ #if JS_HAS_LVALUE_RETURN
903
+ /*
904
+ * Secondary return value from native method called on the left-hand side
905
+ * of an assignment operator. The native should store the object in which
906
+ * to set a property in *rval, and return the property's id expressed as a
907
+ * jsval by calling JS_SetCallReturnValue2(cx, idval).
908
+ */
909
+ jsval rval2;
910
+ JSPackedBool rval2set;
911
+ #endif
912
+
913
+ /*
914
+ * True if generating an error, to prevent runaway recursion.
915
+ * NB: generatingError packs with rval2set, #if JS_HAS_LVALUE_RETURN;
916
+ * with insideGCMarkCallback and with throwing below.
917
+ */
918
+ JSPackedBool generatingError;
919
+
920
+ /* Flag to indicate that we run inside gcCallback(cx, JSGC_MARK_END). */
921
+ JSPackedBool insideGCMarkCallback;
922
+
923
+ /* Exception state -- the exception member is a GC root by definition. */
924
+ JSPackedBool throwing; /* is there a pending exception? */
925
+ jsval exception; /* most-recently-thrown exception */
926
+
927
+ /* Limit pointer for checking native stack consumption during recursion. */
928
+ jsuword stackLimit;
929
+
930
+ /* Quota on the size of arenas used to compile and execute scripts. */
931
+ size_t scriptStackQuota;
932
+
933
+ /* Data shared by threads in an address space. */
934
+ JSRuntime *runtime;
935
+
936
+ /* Stack arena pool and frame pointer register. */
937
+ JS_REQUIRES_STACK
938
+ JSArenaPool stackPool;
939
+
940
+ JS_REQUIRES_STACK
941
+ JSStackFrame *fp;
942
+
943
+ /* Temporary arena pool used while compiling and decompiling. */
944
+ JSArenaPool tempPool;
945
+
946
+ /* Top-level object and pointer to top stack frame's scope chain. */
947
+ JSObject *globalObject;
948
+
949
+ /* Storage to root recently allocated GC things and script result. */
950
+ JSWeakRoots weakRoots;
951
+
952
+ /* Regular expression class statics (XXX not shared globally). */
953
+ JSRegExpStatics regExpStatics;
954
+
955
+ /* State for object and array toSource conversion. */
956
+ JSSharpObjectMap sharpObjectMap;
957
+
958
+ /* Argument formatter support for JS_{Convert,Push}Arguments{,VA}. */
959
+ JSArgumentFormatMap *argumentFormatMap;
960
+
961
+ /* Last message string and trace file for debugging. */
962
+ char *lastMessage;
963
+ #ifdef DEBUG
964
+ void *tracefp;
965
+ jsbytecode *tracePrevPc;
966
+ #endif
967
+
968
+ /* Per-context optional error reporter. */
969
+ JSErrorReporter errorReporter;
970
+
971
+ /* Branch callback. */
972
+ JSOperationCallback operationCallback;
973
+
974
+ /* Interpreter activation count. */
975
+ uintN interpLevel;
976
+
977
+ /* Client opaque pointers. */
978
+ void *data;
979
+ void *data2;
980
+
981
+ /* GC and thread-safe state. */
982
+ JSStackFrame *dormantFrameChain; /* dormant stack frame to scan */
983
+ #ifdef JS_THREADSAFE
984
+ JSThread *thread;
985
+ jsrefcount requestDepth;
986
+ /* Same as requestDepth but ignoring JS_SuspendRequest/JS_ResumeRequest */
987
+ jsrefcount outstandingRequests;
988
+ JSTitle *lockedSealedTitle; /* weak ref, for low-cost sealed
989
+ title locking */
990
+ JSCList threadLinks; /* JSThread contextList linkage */
991
+
992
+ #define CX_FROM_THREAD_LINKS(tl) \
993
+ ((JSContext *)((char *)(tl) - offsetof(JSContext, threadLinks)))
994
+ #endif
995
+
996
+ /* PDL of stack headers describing stack slots not rooted by argv, etc. */
997
+ JSStackHeader *stackHeaders;
998
+
999
+ /* Optional stack of heap-allocated scoped local GC roots. */
1000
+ JSLocalRootStack *localRootStack;
1001
+
1002
+ /* Stack of thread-stack-allocated temporary GC roots. */
1003
+ JSTempValueRooter *tempValueRooters;
1004
+
1005
+ #ifdef JS_THREADSAFE
1006
+ JSGCFreeListSet *gcLocalFreeLists;
1007
+ #endif
1008
+
1009
+ /* List of pre-allocated doubles. */
1010
+ JSGCDoubleCell *doubleFreeList;
1011
+
1012
+ /* Debug hooks associated with the current context. */
1013
+ JSDebugHooks *debugHooks;
1014
+
1015
+ /* Security callbacks that override any defined on the runtime. */
1016
+ JSSecurityCallbacks *securityCallbacks;
1017
+
1018
+ /* Pinned regexp pool used for regular expressions. */
1019
+ JSArenaPool regexpPool;
1020
+
1021
+ /* Stored here to avoid passing it around as a parameter. */
1022
+ uintN resolveFlags;
1023
+
1024
+ #ifdef JS_TRACER
1025
+ /*
1026
+ * State for the current tree execution. bailExit is valid if the tree has
1027
+ * called back into native code via a _FAIL builtin and has not yet bailed,
1028
+ * else garbage (NULL in debug builds).
1029
+ */
1030
+ InterpState *interpState;
1031
+ VMSideExit *bailExit;
1032
+
1033
+ /* Used when calling natives from trace to root the vp vector. */
1034
+ uintN nativeVpLen;
1035
+ jsval *nativeVp;
1036
+ #endif
1037
+ };
1038
+
1039
+ #ifdef JS_THREADSAFE
1040
+ # define JS_THREAD_ID(cx) ((cx)->thread ? (cx)->thread->id : 0)
1041
+ #endif
1042
+
1043
+ #ifdef __cplusplus
1044
+
1045
+ static inline JSAtom **
1046
+ FrameAtomBase(JSContext *cx, JSStackFrame *fp)
1047
+ {
1048
+ return fp->imacpc
1049
+ ? COMMON_ATOMS_START(&cx->runtime->atomState)
1050
+ : fp->script->atomMap.vector;
1051
+ }
1052
+
1053
+ /* FIXME(bug 332648): Move this into a public header. */
1054
+ class JSAutoTempValueRooter
1055
+ {
1056
+ public:
1057
+ JSAutoTempValueRooter(JSContext *cx, size_t len, jsval *vec)
1058
+ : mContext(cx) {
1059
+ JS_PUSH_TEMP_ROOT(mContext, len, vec, &mTvr);
1060
+ }
1061
+ explicit JSAutoTempValueRooter(JSContext *cx, jsval v = JSVAL_NULL)
1062
+ : mContext(cx) {
1063
+ JS_PUSH_SINGLE_TEMP_ROOT(mContext, v, &mTvr);
1064
+ }
1065
+ JSAutoTempValueRooter(JSContext *cx, JSString *str)
1066
+ : mContext(cx) {
1067
+ JS_PUSH_TEMP_ROOT_STRING(mContext, str, &mTvr);
1068
+ }
1069
+ JSAutoTempValueRooter(JSContext *cx, JSObject *obj)
1070
+ : mContext(cx) {
1071
+ JS_PUSH_TEMP_ROOT_OBJECT(mContext, obj, &mTvr);
1072
+ }
1073
+
1074
+ ~JSAutoTempValueRooter() {
1075
+ JS_POP_TEMP_ROOT(mContext, &mTvr);
1076
+ }
1077
+
1078
+ jsval value() { return mTvr.u.value; }
1079
+ jsval *addr() { return &mTvr.u.value; }
1080
+
1081
+ protected:
1082
+ JSContext *mContext;
1083
+
1084
+ private:
1085
+ #ifndef AIX
1086
+ static void *operator new(size_t);
1087
+ static void operator delete(void *, size_t);
1088
+ #endif
1089
+
1090
+ JSTempValueRooter mTvr;
1091
+ };
1092
+
1093
+ class JSAutoTempIdRooter
1094
+ {
1095
+ public:
1096
+ explicit JSAutoTempIdRooter(JSContext *cx, jsid id = INT_TO_JSID(0))
1097
+ : mContext(cx) {
1098
+ JS_PUSH_SINGLE_TEMP_ROOT(mContext, ID_TO_VALUE(id), &mTvr);
1099
+ }
1100
+
1101
+ ~JSAutoTempIdRooter() {
1102
+ JS_POP_TEMP_ROOT(mContext, &mTvr);
1103
+ }
1104
+
1105
+ jsid id() { return (jsid) mTvr.u.value; }
1106
+ jsid * addr() { return (jsid *) &mTvr.u.value; }
1107
+
1108
+ private:
1109
+ JSContext *mContext;
1110
+ JSTempValueRooter mTvr;
1111
+ };
1112
+
1113
+ class JSAutoResolveFlags
1114
+ {
1115
+ public:
1116
+ JSAutoResolveFlags(JSContext *cx, uintN flags)
1117
+ : mContext(cx), mSaved(cx->resolveFlags) {
1118
+ cx->resolveFlags = flags;
1119
+ }
1120
+
1121
+ ~JSAutoResolveFlags() { mContext->resolveFlags = mSaved; }
1122
+
1123
+ private:
1124
+ JSContext *mContext;
1125
+ uintN mSaved;
1126
+ };
1127
+
1128
+ #endif /* __cpluscplus */
1129
+
1130
+ /*
1131
+ * Slightly more readable macros for testing per-context option settings (also
1132
+ * to hide bitset implementation detail).
1133
+ *
1134
+ * JSOPTION_XML must be handled specially in order to propagate from compile-
1135
+ * to run-time (from cx->options to script->version/cx->version). To do that,
1136
+ * we copy JSOPTION_XML from cx->options into cx->version as JSVERSION_HAS_XML
1137
+ * whenever options are set, and preserve this XML flag across version number
1138
+ * changes done via the JS_SetVersion API.
1139
+ *
1140
+ * But when executing a script or scripted function, the interpreter changes
1141
+ * cx->version, including the XML flag, to script->version. Thus JSOPTION_XML
1142
+ * is a compile-time option that causes a run-time version change during each
1143
+ * activation of the compiled script. That version change has the effect of
1144
+ * changing JS_HAS_XML_OPTION, so that any compiling done via eval enables XML
1145
+ * support. If an XML-enabled script or function calls a non-XML function,
1146
+ * the flag bit will be cleared during the callee's activation.
1147
+ *
1148
+ * Note that JS_SetVersion API calls never pass JSVERSION_HAS_XML or'd into
1149
+ * that API's version parameter.
1150
+ *
1151
+ * Note also that script->version must contain this XML option flag in order
1152
+ * for XDR'ed scripts to serialize and deserialize with that option preserved
1153
+ * for detection at run-time. We can't copy other compile-time options into
1154
+ * script->version because that would break backward compatibility (certain
1155
+ * other options, e.g. JSOPTION_VAROBJFIX, are analogous to JSOPTION_XML).
1156
+ */
1157
+ #define JS_HAS_OPTION(cx,option) (((cx)->options & (option)) != 0)
1158
+ #define JS_HAS_STRICT_OPTION(cx) JS_HAS_OPTION(cx, JSOPTION_STRICT)
1159
+ #define JS_HAS_WERROR_OPTION(cx) JS_HAS_OPTION(cx, JSOPTION_WERROR)
1160
+ #define JS_HAS_COMPILE_N_GO_OPTION(cx) JS_HAS_OPTION(cx, JSOPTION_COMPILE_N_GO)
1161
+ #define JS_HAS_ATLINE_OPTION(cx) JS_HAS_OPTION(cx, JSOPTION_ATLINE)
1162
+
1163
+ #define JSVERSION_MASK 0x0FFF /* see JSVersion in jspubtd.h */
1164
+ #define JSVERSION_HAS_XML 0x1000 /* flag induced by XML option */
1165
+ #define JSVERSION_ANONFUNFIX 0x2000 /* see jsapi.h, the comments
1166
+ for JSOPTION_ANONFUNFIX */
1167
+
1168
+ #define JSVERSION_NUMBER(cx) ((JSVersion)((cx)->version & \
1169
+ JSVERSION_MASK))
1170
+ #define JS_HAS_XML_OPTION(cx) ((cx)->version & JSVERSION_HAS_XML || \
1171
+ JSVERSION_NUMBER(cx) >= JSVERSION_1_6)
1172
+
1173
+ extern JSBool
1174
+ js_InitThreads(JSRuntime *rt);
1175
+
1176
+ extern void
1177
+ js_FinishThreads(JSRuntime *rt);
1178
+
1179
+ extern void
1180
+ js_PurgeThreads(JSContext *cx);
1181
+
1182
+ /*
1183
+ * Ensures the JSOPTION_XML and JSOPTION_ANONFUNFIX bits of cx->options are
1184
+ * reflected in cx->version, since each bit must travel with a script that has
1185
+ * it set.
1186
+ */
1187
+ extern void
1188
+ js_SyncOptionsToVersion(JSContext *cx);
1189
+
1190
+ /*
1191
+ * Common subroutine of JS_SetVersion and js_SetVersion, to update per-context
1192
+ * data that depends on version.
1193
+ */
1194
+ extern void
1195
+ js_OnVersionChange(JSContext *cx);
1196
+
1197
+ /*
1198
+ * Unlike the JS_SetVersion API, this function stores JSVERSION_HAS_XML and
1199
+ * any future non-version-number flags induced by compiler options.
1200
+ */
1201
+ extern void
1202
+ js_SetVersion(JSContext *cx, JSVersion version);
1203
+
1204
+ /*
1205
+ * Create and destroy functions for JSContext, which is manually allocated
1206
+ * and exclusively owned.
1207
+ */
1208
+ extern JSContext *
1209
+ js_NewContext(JSRuntime *rt, size_t stackChunkSize);
1210
+
1211
+ extern void
1212
+ js_DestroyContext(JSContext *cx, JSDestroyContextMode mode);
1213
+
1214
+ /*
1215
+ * Return true if cx points to a context in rt->contextList, else return false.
1216
+ * NB: the caller (see jslock.c:ClaimTitle) must hold rt->gcLock.
1217
+ */
1218
+ extern JSBool
1219
+ js_ValidContextPointer(JSRuntime *rt, JSContext *cx);
1220
+
1221
+ static JS_INLINE JSContext *
1222
+ js_ContextFromLinkField(JSCList *link)
1223
+ {
1224
+ JS_ASSERT(link);
1225
+ return (JSContext *) ((uint8 *) link - offsetof(JSContext, link));
1226
+ }
1227
+
1228
+ /*
1229
+ * If unlocked, acquire and release rt->gcLock around *iterp update; otherwise
1230
+ * the caller must be holding rt->gcLock.
1231
+ */
1232
+ extern JSContext *
1233
+ js_ContextIterator(JSRuntime *rt, JSBool unlocked, JSContext **iterp);
1234
+
1235
+ /*
1236
+ * Iterate through contexts with active requests. The caller must be holding
1237
+ * rt->gcLock in case of a thread-safe build, or otherwise guarantee that the
1238
+ * context list is not alternated asynchroniously.
1239
+ */
1240
+ extern JS_FRIEND_API(JSContext *)
1241
+ js_NextActiveContext(JSRuntime *, JSContext *);
1242
+
1243
+ #ifdef JS_THREADSAFE
1244
+
1245
+ /*
1246
+ * Count the number of contexts entered requests on the current thread.
1247
+ */
1248
+ uint32
1249
+ js_CountThreadRequests(JSContext *cx);
1250
+
1251
+ /*
1252
+ * This is a helper for code at can potentially run outside JS request to
1253
+ * ensure that the GC is not running when the function returns.
1254
+ *
1255
+ * This function must be called with the GC lock held.
1256
+ */
1257
+ extern void
1258
+ js_WaitForGC(JSRuntime *rt);
1259
+
1260
+ /*
1261
+ * If we're in one or more requests (possibly on more than one context)
1262
+ * running on the current thread, indicate, temporarily, that all these
1263
+ * requests are inactive so a possible GC can proceed on another thread.
1264
+ * This function returns the number of discounted requests. The number must
1265
+ * be passed later to js_ActivateRequestAfterGC to reactivate the requests.
1266
+ *
1267
+ * This function must be called with the GC lock held.
1268
+ */
1269
+ uint32
1270
+ js_DiscountRequestsForGC(JSContext *cx);
1271
+
1272
+ /*
1273
+ * This function must be called with the GC lock held.
1274
+ */
1275
+ void
1276
+ js_RecountRequestsAfterGC(JSRuntime *rt, uint32 requestDebit);
1277
+
1278
+ #else /* !JS_THREADSAFE */
1279
+
1280
+ # define js_WaitForGC(rt) ((void) 0)
1281
+
1282
+ #endif
1283
+
1284
+ /*
1285
+ * JSClass.resolve and watchpoint recursion damping machinery.
1286
+ */
1287
+ extern JSBool
1288
+ js_StartResolving(JSContext *cx, JSResolvingKey *key, uint32 flag,
1289
+ JSResolvingEntry **entryp);
1290
+
1291
+ extern void
1292
+ js_StopResolving(JSContext *cx, JSResolvingKey *key, uint32 flag,
1293
+ JSResolvingEntry *entry, uint32 generation);
1294
+
1295
+ /*
1296
+ * Local root set management.
1297
+ *
1298
+ * NB: the jsval parameters below may be properly tagged jsvals, or GC-thing
1299
+ * pointers cast to (jsval). This relies on JSObject's tag being zero, but
1300
+ * on the up side it lets us push int-jsval-encoded scopeMark values on the
1301
+ * local root stack.
1302
+ */
1303
+ extern JSBool
1304
+ js_EnterLocalRootScope(JSContext *cx);
1305
+
1306
+ #define js_LeaveLocalRootScope(cx) \
1307
+ js_LeaveLocalRootScopeWithResult(cx, JSVAL_NULL)
1308
+
1309
+ extern void
1310
+ js_LeaveLocalRootScopeWithResult(JSContext *cx, jsval rval);
1311
+
1312
+ extern void
1313
+ js_ForgetLocalRoot(JSContext *cx, jsval v);
1314
+
1315
+ extern int
1316
+ js_PushLocalRoot(JSContext *cx, JSLocalRootStack *lrs, jsval v);
1317
+
1318
+ extern void
1319
+ js_TraceLocalRoots(JSTracer *trc, JSLocalRootStack *lrs);
1320
+
1321
+ /*
1322
+ * Report an exception, which is currently realized as a printf-style format
1323
+ * string and its arguments.
1324
+ */
1325
+ typedef enum JSErrNum {
1326
+ #define MSG_DEF(name, number, count, exception, format) \
1327
+ name = number,
1328
+ #include "js.msg"
1329
+ #undef MSG_DEF
1330
+ JSErr_Limit
1331
+ } JSErrNum;
1332
+
1333
+ extern JS_FRIEND_API(const JSErrorFormatString *)
1334
+ js_GetErrorMessage(void *userRef, const char *locale, const uintN errorNumber);
1335
+
1336
+ #ifdef va_start
1337
+ extern JSBool
1338
+ js_ReportErrorVA(JSContext *cx, uintN flags, const char *format, va_list ap);
1339
+
1340
+ extern JSBool
1341
+ js_ReportErrorNumberVA(JSContext *cx, uintN flags, JSErrorCallback callback,
1342
+ void *userRef, const uintN errorNumber,
1343
+ JSBool charArgs, va_list ap);
1344
+
1345
+ extern JSBool
1346
+ js_ExpandErrorArguments(JSContext *cx, JSErrorCallback callback,
1347
+ void *userRef, const uintN errorNumber,
1348
+ char **message, JSErrorReport *reportp,
1349
+ JSBool *warningp, JSBool charArgs, va_list ap);
1350
+ #endif
1351
+
1352
+ extern void
1353
+ js_ReportOutOfMemory(JSContext *cx);
1354
+
1355
+ /*
1356
+ * Report that cx->scriptStackQuota is exhausted.
1357
+ */
1358
+ extern void
1359
+ js_ReportOutOfScriptQuota(JSContext *cx);
1360
+
1361
+ extern void
1362
+ js_ReportOverRecursed(JSContext *cx);
1363
+
1364
+ extern void
1365
+ js_ReportAllocationOverflow(JSContext *cx);
1366
+
1367
+ #define JS_CHECK_RECURSION(cx, onerror) \
1368
+ JS_BEGIN_MACRO \
1369
+ int stackDummy_; \
1370
+ \
1371
+ if (!JS_CHECK_STACK_SIZE(cx, stackDummy_)) { \
1372
+ js_ReportOverRecursed(cx); \
1373
+ onerror; \
1374
+ } \
1375
+ JS_END_MACRO
1376
+
1377
+ /*
1378
+ * Report an exception using a previously composed JSErrorReport.
1379
+ * XXXbe remove from "friend" API
1380
+ */
1381
+ extern JS_FRIEND_API(void)
1382
+ js_ReportErrorAgain(JSContext *cx, const char *message, JSErrorReport *report);
1383
+
1384
+ extern void
1385
+ js_ReportIsNotDefined(JSContext *cx, const char *name);
1386
+
1387
+ /*
1388
+ * Report an attempt to access the property of a null or undefined value (v).
1389
+ */
1390
+ extern JSBool
1391
+ js_ReportIsNullOrUndefined(JSContext *cx, intN spindex, jsval v,
1392
+ JSString *fallback);
1393
+
1394
+ extern void
1395
+ js_ReportMissingArg(JSContext *cx, jsval *vp, uintN arg);
1396
+
1397
+ /*
1398
+ * Report error using js_DecompileValueGenerator(cx, spindex, v, fallback) as
1399
+ * the first argument for the error message. If the error message has less
1400
+ * then 3 arguments, use null for arg1 or arg2.
1401
+ */
1402
+ extern JSBool
1403
+ js_ReportValueErrorFlags(JSContext *cx, uintN flags, const uintN errorNumber,
1404
+ intN spindex, jsval v, JSString *fallback,
1405
+ const char *arg1, const char *arg2);
1406
+
1407
+ #define js_ReportValueError(cx,errorNumber,spindex,v,fallback) \
1408
+ ((void)js_ReportValueErrorFlags(cx, JSREPORT_ERROR, errorNumber, \
1409
+ spindex, v, fallback, NULL, NULL))
1410
+
1411
+ #define js_ReportValueError2(cx,errorNumber,spindex,v,fallback,arg1) \
1412
+ ((void)js_ReportValueErrorFlags(cx, JSREPORT_ERROR, errorNumber, \
1413
+ spindex, v, fallback, arg1, NULL))
1414
+
1415
+ #define js_ReportValueError3(cx,errorNumber,spindex,v,fallback,arg1,arg2) \
1416
+ ((void)js_ReportValueErrorFlags(cx, JSREPORT_ERROR, errorNumber, \
1417
+ spindex, v, fallback, arg1, arg2))
1418
+
1419
+ extern JSErrorFormatString js_ErrorFormatString[JSErr_Limit];
1420
+
1421
+ /*
1422
+ * See JS_SetThreadStackLimit in jsapi.c, where we check that the stack grows
1423
+ * in the expected direction. On Unix-y systems, JS_STACK_GROWTH_DIRECTION is
1424
+ * computed on the build host by jscpucfg.c and written into jsautocfg.h. The
1425
+ * macro is hardcoded in jscpucfg.h on Windows and Mac systems (for historical
1426
+ * reasons pre-dating autoconf usage).
1427
+ */
1428
+ #if JS_STACK_GROWTH_DIRECTION > 0
1429
+ # define JS_CHECK_STACK_SIZE(cx, lval) ((jsuword)&(lval) < (cx)->stackLimit)
1430
+ #else
1431
+ # define JS_CHECK_STACK_SIZE(cx, lval) ((jsuword)&(lval) > (cx)->stackLimit)
1432
+ #endif
1433
+
1434
+ /*
1435
+ * If the operation callback flag was set, call the operation callback.
1436
+ * This macro can run the full GC. Return true if it is OK to continue and
1437
+ * false otherwise.
1438
+ */
1439
+ #define JS_CHECK_OPERATION_LIMIT(cx) \
1440
+ (!(cx)->operationCallbackFlag || js_InvokeOperationCallback(cx))
1441
+
1442
+ /*
1443
+ * Invoke the operation callback and return false if the current execution
1444
+ * is to be terminated.
1445
+ */
1446
+ extern JSBool
1447
+ js_InvokeOperationCallback(JSContext *cx);
1448
+
1449
+ #ifndef JS_THREADSAFE
1450
+ # define js_TriggerAllOperationCallbacks(rt, gcLocked) \
1451
+ js_TriggerAllOperationCallbacks (rt)
1452
+ #endif
1453
+
1454
+ void
1455
+ js_TriggerAllOperationCallbacks(JSRuntime *rt, JSBool gcLocked);
1456
+
1457
+ extern JSStackFrame *
1458
+ js_GetScriptedCaller(JSContext *cx, JSStackFrame *fp);
1459
+
1460
+ extern jsbytecode*
1461
+ js_GetCurrentBytecodePC(JSContext* cx);
1462
+
1463
+ #ifdef JS_TRACER
1464
+ /*
1465
+ * Reconstruct the JS stack and clear cx->tracecx. We must be currently in a
1466
+ * _FAIL builtin from trace on cx or another context on the same thread. The
1467
+ * machine code for the trace remains on the C stack when js_DeepBail returns.
1468
+ *
1469
+ * Implemented in jstracer.cpp.
1470
+ */
1471
+ JS_FORCES_STACK JS_FRIEND_API(void)
1472
+ js_DeepBail(JSContext *cx);
1473
+ #endif
1474
+
1475
+ static JS_FORCES_STACK JS_INLINE void
1476
+ js_LeaveTrace(JSContext *cx)
1477
+ {
1478
+ #ifdef JS_TRACER
1479
+ if (JS_ON_TRACE(cx))
1480
+ js_DeepBail(cx);
1481
+ #endif
1482
+ }
1483
+
1484
+ static JS_INLINE void
1485
+ js_LeaveTraceIfGlobalObject(JSContext *cx, JSObject *obj)
1486
+ {
1487
+ if (!obj->fslots[JSSLOT_PARENT])
1488
+ js_LeaveTrace(cx);
1489
+ }
1490
+
1491
+ static JS_INLINE JSBool
1492
+ js_CanLeaveTrace(JSContext *cx)
1493
+ {
1494
+ JS_ASSERT(JS_ON_TRACE(cx));
1495
+ #ifdef JS_TRACER
1496
+ return cx->bailExit != NULL;
1497
+ #else
1498
+ return JS_FALSE;
1499
+ #endif
1500
+ }
1501
+
1502
+ /*
1503
+ * Get the current cx->fp, first lazily instantiating stack frames if needed.
1504
+ * (Do not access cx->fp directly except in JS_REQUIRES_STACK code.)
1505
+ *
1506
+ * Defined in jstracer.cpp if JS_TRACER is defined.
1507
+ */
1508
+ static JS_FORCES_STACK JS_INLINE JSStackFrame *
1509
+ js_GetTopStackFrame(JSContext *cx)
1510
+ {
1511
+ js_LeaveTrace(cx);
1512
+ return cx->fp;
1513
+ }
1514
+
1515
+ static JS_INLINE JSBool
1516
+ js_IsPropertyCacheDisabled(JSContext *cx)
1517
+ {
1518
+ return cx->runtime->shapeGen >= SHAPE_OVERFLOW_BIT;
1519
+ }
1520
+
1521
+ static JS_INLINE uint32
1522
+ js_RegenerateShapeForGC(JSContext *cx)
1523
+ {
1524
+ uint32 shape;
1525
+
1526
+ JS_ASSERT(cx->runtime->gcRunning);
1527
+
1528
+ /*
1529
+ * Under the GC, compared with js_GenerateShape, we don't need to use
1530
+ * atomic increments but we still must make sure that after an overflow
1531
+ * the shape stays such.
1532
+ */
1533
+ shape = cx->runtime->shapeGen;
1534
+ shape = (shape + 1) | (shape & SHAPE_OVERFLOW_BIT);
1535
+ cx->runtime->shapeGen = shape;
1536
+ return shape;
1537
+ }
1538
+
1539
+ JS_END_EXTERN_C
1540
+
1541
+ #endif /* jscntxt_h___ */