johnson 1.2.0 → 2.0.0.pre0

Sign up to get free protection for your applications and to get access to all the features.
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___ */