johnson 1.2.0 → 2.0.0.pre0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (782) hide show
  1. data/CHANGELOG.rdoc +8 -0
  2. data/Manifest.txt +762 -48
  3. data/README.rdoc +2 -1
  4. data/Rakefile +90 -18
  5. data/ext/spidermonkey/conversions.c +9 -2
  6. data/ext/spidermonkey/ruby_land_proxy.c +1 -1
  7. data/ext/spidermonkey/runtime.h +1 -1
  8. data/ext/tracemonkey/context.cc +125 -0
  9. data/ext/tracemonkey/context.h +19 -0
  10. data/ext/tracemonkey/conversions.cc +365 -0
  11. data/ext/tracemonkey/conversions.h +32 -0
  12. data/ext/tracemonkey/debugger.cc +234 -0
  13. data/ext/tracemonkey/debugger.h +10 -0
  14. data/ext/tracemonkey/extconf.rb +37 -0
  15. data/ext/tracemonkey/extensions.cc +37 -0
  16. data/ext/tracemonkey/extensions.h +12 -0
  17. data/ext/tracemonkey/global.cc +40 -0
  18. data/ext/tracemonkey/global.h +11 -0
  19. data/ext/tracemonkey/idhash.cc +16 -0
  20. data/ext/tracemonkey/idhash.h +8 -0
  21. data/ext/tracemonkey/immutable_node.cc +1199 -0
  22. data/ext/tracemonkey/immutable_node.cc.erb +559 -0
  23. data/ext/tracemonkey/immutable_node.h +22 -0
  24. data/ext/tracemonkey/jroot.h +215 -0
  25. data/ext/tracemonkey/js_land_proxy.cc +620 -0
  26. data/ext/tracemonkey/js_land_proxy.h +20 -0
  27. data/ext/tracemonkey/ruby_land_proxy.cc +618 -0
  28. data/ext/tracemonkey/ruby_land_proxy.h +38 -0
  29. data/ext/tracemonkey/runtime.cc +454 -0
  30. data/ext/tracemonkey/runtime.h +27 -0
  31. data/ext/tracemonkey/split_global.cc +392 -0
  32. data/ext/tracemonkey/split_global.h +11 -0
  33. data/ext/tracemonkey/tracemonkey.cc +23 -0
  34. data/ext/tracemonkey/tracemonkey.h +32 -0
  35. data/lib/johnson.rb +12 -4
  36. data/lib/johnson/error.rb +5 -0
  37. data/lib/johnson/js/prelude.js +16 -1
  38. data/lib/johnson/parser.rb +2 -1
  39. data/lib/johnson/runtime.rb +87 -26
  40. data/lib/johnson/spidermonkey/runtime.rb +7 -16
  41. data/lib/johnson/tracemonkey.rb +13 -0
  42. data/lib/johnson/tracemonkey/context.rb +10 -0
  43. data/lib/johnson/tracemonkey/debugger.rb +67 -0
  44. data/lib/johnson/tracemonkey/immutable_node.rb +282 -0
  45. data/lib/johnson/tracemonkey/js_land_proxy.rb +64 -0
  46. data/lib/johnson/tracemonkey/mutable_tree_visitor.rb +242 -0
  47. data/lib/johnson/tracemonkey/ruby_land_proxy.rb +17 -0
  48. data/lib/johnson/tracemonkey/runtime.rb +80 -0
  49. data/test/{johnson_test.rb → generic/johnson_test.rb} +1 -1
  50. data/test/{parser_test.rb → generic/parser_test.rb} +1 -1
  51. data/test/helper.rb +23 -4
  52. data/test/johnson/{browser_test.rb → generic/browser_test.rb} +1 -1
  53. data/test/johnson/{conversions → generic/conversions}/array_test.rb +1 -1
  54. data/test/johnson/{conversions → generic/conversions}/boolean_test.rb +1 -1
  55. data/test/johnson/{conversions → generic/conversions}/callable_test.rb +1 -1
  56. data/test/johnson/{conversions → generic/conversions}/file_test.rb +1 -1
  57. data/test/johnson/generic/conversions/helper.rb +1 -0
  58. data/test/johnson/{conversions → generic/conversions}/nil_test.rb +1 -1
  59. data/test/johnson/{conversions → generic/conversions}/number_test.rb +1 -1
  60. data/test/johnson/{conversions → generic/conversions}/regexp_test.rb +1 -1
  61. data/test/johnson/{conversions → generic/conversions}/string_test.rb +1 -1
  62. data/test/johnson/{conversions → generic/conversions}/struct_test.rb +1 -1
  63. data/test/johnson/{conversions → generic/conversions}/symbol_test.rb +1 -1
  64. data/test/johnson/{conversions → generic/conversions}/thread_test.rb +1 -1
  65. data/test/johnson/{custom_conversions_test.rb → generic/custom_conversions_test.rb} +1 -1
  66. data/test/johnson/generic/default_test.rb +12 -0
  67. data/test/johnson/{error_test.rb → generic/error_test.rb} +1 -1
  68. data/test/johnson/{extensions_test.rb → generic/extensions_test.rb} +1 -1
  69. data/test/johnson/generic/helper.rb +1 -0
  70. data/test/johnson/{nodes → generic/nodes}/array_literal_test.rb +1 -1
  71. data/test/johnson/{nodes → generic/nodes}/array_node_test.rb +1 -1
  72. data/test/johnson/{nodes → generic/nodes}/binary_node_test.rb +1 -1
  73. data/test/johnson/{nodes → generic/nodes}/bracket_access_test.rb +1 -1
  74. data/test/johnson/{nodes → generic/nodes}/delete_test.rb +1 -1
  75. data/test/johnson/{nodes → generic/nodes}/do_while_test.rb +1 -1
  76. data/test/johnson/{nodes → generic/nodes}/dot_accessor_test.rb +1 -1
  77. data/test/johnson/generic/nodes/export_test.rb +11 -0
  78. data/test/johnson/{nodes → generic/nodes}/for_test.rb +1 -1
  79. data/test/johnson/{nodes → generic/nodes}/function_test.rb +1 -1
  80. data/test/johnson/generic/nodes/helper.rb +1 -0
  81. data/test/johnson/{nodes → generic/nodes}/if_test.rb +16 -6
  82. data/test/johnson/generic/nodes/import_test.rb +15 -0
  83. data/test/johnson/{nodes → generic/nodes}/label_test.rb +1 -1
  84. data/test/johnson/{nodes → generic/nodes}/let_test.rb +1 -1
  85. data/test/johnson/{nodes → generic/nodes}/object_literal_test.rb +1 -1
  86. data/test/johnson/{nodes → generic/nodes}/return_test.rb +1 -1
  87. data/test/johnson/{nodes → generic/nodes}/semi_test.rb +1 -1
  88. data/test/johnson/{nodes → generic/nodes}/switch_test.rb +1 -1
  89. data/test/johnson/{nodes → generic/nodes}/ternary_test.rb +1 -1
  90. data/test/johnson/{nodes → generic/nodes}/throw_test.rb +1 -1
  91. data/test/johnson/{nodes → generic/nodes}/try_node_test.rb +36 -6
  92. data/test/johnson/{nodes → generic/nodes}/typeof_test.rb +1 -1
  93. data/test/johnson/{nodes → generic/nodes}/unary_node_test.rb +1 -1
  94. data/test/johnson/{nodes → generic/nodes}/void_test.rb +1 -1
  95. data/test/johnson/{nodes → generic/nodes}/while_test.rb +1 -1
  96. data/test/johnson/{nodes → generic/nodes}/with_test.rb +1 -1
  97. data/test/johnson/{prelude_test.rb → generic/prelude_test.rb} +1 -1
  98. data/test/johnson/{runtime_test.rb → generic/runtime_test.rb} +3 -6
  99. data/test/johnson/generic/version_test.rb +13 -0
  100. data/test/johnson/{visitors → generic/visitors}/dot_visitor_test.rb +1 -1
  101. data/test/johnson/{visitors → generic/visitors}/enumerating_visitor_test.rb +1 -1
  102. data/test/johnson/generic/visitors/helper.rb +1 -0
  103. data/test/johnson/spidermonkey/js_land_proxy_test.rb +1 -5
  104. data/test/johnson/spidermonkey/ruby_land_proxy_test.rb +11 -7
  105. data/test/johnson/tracemonkey/context_test.rb +21 -0
  106. data/test/johnson/tracemonkey/immutable_node_test.rb +34 -0
  107. data/test/johnson/tracemonkey/js_land_proxy_test.rb +273 -0
  108. data/test/johnson/tracemonkey/ruby_land_proxy_test.rb +274 -0
  109. data/test/johnson/tracemonkey/runtime_test.rb +41 -0
  110. data/test/johnson/tracemonkey/split_global_test.rb +32 -0
  111. data/vendor/spidermonkey/js.pkg +2 -0
  112. data/vendor/tracemonkey/Makefile.in +668 -0
  113. data/vendor/tracemonkey/Makefile.ref +483 -0
  114. data/vendor/tracemonkey/README.html +54 -0
  115. data/vendor/tracemonkey/SpiderMonkey.rsp +11 -0
  116. data/vendor/tracemonkey/Y.js +19 -0
  117. data/vendor/tracemonkey/aclocal.m4 +9 -0
  118. data/vendor/tracemonkey/bench.sh +5 -0
  119. data/vendor/tracemonkey/build/autoconf/acoutput-fast.pl +202 -0
  120. data/vendor/tracemonkey/build/autoconf/altoptions.m4 +154 -0
  121. data/vendor/tracemonkey/build/autoconf/config.guess +1537 -0
  122. data/vendor/tracemonkey/build/autoconf/config.sub +1595 -0
  123. data/vendor/tracemonkey/build/autoconf/install-sh +119 -0
  124. data/vendor/tracemonkey/build/autoconf/make-makefile +315 -0
  125. data/vendor/tracemonkey/build/autoconf/match-dir.sh +101 -0
  126. data/vendor/tracemonkey/build/autoconf/moznbytetype.m4 +136 -0
  127. data/vendor/tracemonkey/build/autoconf/nspr.m4 +82 -0
  128. data/vendor/tracemonkey/build/autoconf/pkg.m4 +59 -0
  129. data/vendor/tracemonkey/build/autoconf/update-makefile.sh +118 -0
  130. data/vendor/tracemonkey/build/cygwin-wrapper +75 -0
  131. data/vendor/tracemonkey/build/hcc +111 -0
  132. data/vendor/tracemonkey/build/hcpp +155 -0
  133. data/vendor/tracemonkey/build/unix/mddepend.pl +165 -0
  134. data/vendor/tracemonkey/build/unix/uniq.pl +63 -0
  135. data/vendor/tracemonkey/build/win32/pgomerge.py +40 -0
  136. data/vendor/tracemonkey/builtins.tbl +91 -0
  137. data/vendor/tracemonkey/call.js +13 -0
  138. data/vendor/tracemonkey/config.mk +206 -0
  139. data/vendor/tracemonkey/config/Makefile.in +106 -0
  140. data/vendor/tracemonkey/config/Moz/Milestone.pm +232 -0
  141. data/vendor/tracemonkey/config/autoconf.mk.in +362 -0
  142. data/vendor/tracemonkey/config/check-sync-dirs.py +103 -0
  143. data/vendor/tracemonkey/config/check-sync-exceptions +7 -0
  144. data/vendor/tracemonkey/config/config.mk +881 -0
  145. data/vendor/tracemonkey/config/fastcwd.pl +66 -0
  146. data/vendor/tracemonkey/config/gcc_hidden.h +2 -0
  147. data/vendor/tracemonkey/config/insure.mk +53 -0
  148. data/vendor/tracemonkey/config/make-system-wrappers.pl +59 -0
  149. data/vendor/tracemonkey/config/milestone.pl +112 -0
  150. data/vendor/tracemonkey/config/milestone.txt +13 -0
  151. data/vendor/tracemonkey/config/mkdepend/Makefile.in +84 -0
  152. data/vendor/tracemonkey/config/mkdepend/cppsetup.c +233 -0
  153. data/vendor/tracemonkey/config/mkdepend/def.h +184 -0
  154. data/vendor/tracemonkey/config/mkdepend/ifparser.c +551 -0
  155. data/vendor/tracemonkey/config/mkdepend/ifparser.h +83 -0
  156. data/vendor/tracemonkey/config/mkdepend/imakemdep.h +733 -0
  157. data/vendor/tracemonkey/config/mkdepend/include.c +337 -0
  158. data/vendor/tracemonkey/config/mkdepend/main.c +860 -0
  159. data/vendor/tracemonkey/config/mkdepend/mkdepend.man +382 -0
  160. data/vendor/tracemonkey/config/mkdepend/parse.c +686 -0
  161. data/vendor/tracemonkey/config/mkdepend/pr.c +124 -0
  162. data/vendor/tracemonkey/config/nfspwd.pl +50 -0
  163. data/vendor/tracemonkey/config/nsinstall.c +481 -0
  164. data/vendor/tracemonkey/config/nsinstall.py +155 -0
  165. data/vendor/tracemonkey/config/pathsub.c +247 -0
  166. data/vendor/tracemonkey/config/pathsub.h +74 -0
  167. data/vendor/tracemonkey/config/preprocessor.pl +671 -0
  168. data/vendor/tracemonkey/config/revdepth-nt.pl +48 -0
  169. data/vendor/tracemonkey/config/revdepth.pl +51 -0
  170. data/vendor/tracemonkey/config/rules.mk +2310 -0
  171. data/vendor/tracemonkey/config/static-checking-config.mk +21 -0
  172. data/vendor/tracemonkey/config/static-checking.js +92 -0
  173. data/vendor/tracemonkey/config/string-format.js +61 -0
  174. data/vendor/tracemonkey/config/system-headers +1035 -0
  175. data/vendor/tracemonkey/config/version.mk +85 -0
  176. data/vendor/tracemonkey/config/version_win.pl +442 -0
  177. data/vendor/tracemonkey/configure +14183 -0
  178. data/vendor/tracemonkey/configure.in +5363 -0
  179. data/vendor/tracemonkey/correct.sh +23 -0
  180. data/vendor/tracemonkey/correct/check-3d-morph.js +55 -0
  181. data/vendor/tracemonkey/correct/check-3d-raytrace.js +445 -0
  182. data/vendor/tracemonkey/correct/check-access-binary-trees.js +52 -0
  183. data/vendor/tracemonkey/correct/check-access-fannkuch.js +66 -0
  184. data/vendor/tracemonkey/correct/check-access-nbody.js +171 -0
  185. data/vendor/tracemonkey/correct/check-access-nsieve.js +40 -0
  186. data/vendor/tracemonkey/correct/check-bitops-3bit-bits-in-byte.js +35 -0
  187. data/vendor/tracemonkey/correct/check-bitops-bits-in-byte.js +24 -0
  188. data/vendor/tracemonkey/correct/check-bitops-bitwise-and.js +29 -0
  189. data/vendor/tracemonkey/correct/check-bitops-nsieve-bits.js +40 -0
  190. data/vendor/tracemonkey/correct/check-controlflow-recursive.js +27 -0
  191. data/vendor/tracemonkey/correct/check-date-format-tofte.js +302 -0
  192. data/vendor/tracemonkey/correct/check-date-format-xparb.js +421 -0
  193. data/vendor/tracemonkey/correct/check-mont.js +119 -0
  194. data/vendor/tracemonkey/dtoa.c +3335 -0
  195. data/vendor/tracemonkey/editline/Makefile.in +55 -0
  196. data/vendor/tracemonkey/editline/Makefile.ref +143 -0
  197. data/vendor/tracemonkey/editline/README +83 -0
  198. data/vendor/tracemonkey/editline/editline.3 +175 -0
  199. data/vendor/tracemonkey/editline/editline.c +1371 -0
  200. data/vendor/tracemonkey/editline/editline.h +135 -0
  201. data/vendor/tracemonkey/editline/sysunix.c +182 -0
  202. data/vendor/tracemonkey/editline/unix.h +82 -0
  203. data/vendor/tracemonkey/if.js +13 -0
  204. data/vendor/tracemonkey/imacro_asm.js.in +396 -0
  205. data/vendor/tracemonkey/imacros.c.out +1034 -0
  206. data/vendor/tracemonkey/imacros.jsasm +770 -0
  207. data/vendor/tracemonkey/javascript-trace.d +73 -0
  208. data/vendor/tracemonkey/jitstats.tbl +55 -0
  209. data/vendor/tracemonkey/js-config.h.in +82 -0
  210. data/vendor/tracemonkey/js-config.in +111 -0
  211. data/vendor/tracemonkey/js.mdp +0 -0
  212. data/vendor/tracemonkey/js.msg +312 -0
  213. data/vendor/tracemonkey/js3240.rc +79 -0
  214. data/vendor/tracemonkey/jsOS240.def +654 -0
  215. data/vendor/tracemonkey/jsapi.cpp +6005 -0
  216. data/vendor/tracemonkey/jsapi.h +2727 -0
  217. data/vendor/tracemonkey/jsarena.cpp +450 -0
  218. data/vendor/tracemonkey/jsarena.h +318 -0
  219. data/vendor/tracemonkey/jsarray.cpp +3664 -0
  220. data/vendor/tracemonkey/jsarray.h +238 -0
  221. data/vendor/tracemonkey/jsatom.cpp +1244 -0
  222. data/vendor/tracemonkey/jsatom.h +493 -0
  223. data/vendor/tracemonkey/jsbit.h +249 -0
  224. data/vendor/tracemonkey/jsbool.cpp +184 -0
  225. data/vendor/tracemonkey/jsbool.h +88 -0
  226. data/vendor/tracemonkey/jsbuiltins.cpp +415 -0
  227. data/vendor/tracemonkey/jsbuiltins.h +456 -0
  228. data/vendor/tracemonkey/jsclist.h +139 -0
  229. data/vendor/tracemonkey/jscntxt.cpp +1816 -0
  230. data/vendor/tracemonkey/jscntxt.h +1541 -0
  231. data/vendor/tracemonkey/jscompat.h +57 -0
  232. data/vendor/tracemonkey/jsconfig.mk +181 -0
  233. data/vendor/tracemonkey/jscpucfg.cpp +194 -0
  234. data/vendor/tracemonkey/jscpucfg.h +91 -0
  235. data/vendor/tracemonkey/jsdate.cpp +2465 -0
  236. data/vendor/tracemonkey/jsdate.h +129 -0
  237. data/vendor/tracemonkey/jsdbgapi.cpp +2017 -0
  238. data/vendor/tracemonkey/jsdbgapi.h +500 -0
  239. data/vendor/tracemonkey/jsdhash.cpp +876 -0
  240. data/vendor/tracemonkey/jsdhash.h +588 -0
  241. data/vendor/tracemonkey/jsdtoa.cpp +572 -0
  242. data/vendor/tracemonkey/jsdtoa.h +131 -0
  243. data/vendor/tracemonkey/jsdtracef.c +318 -0
  244. data/vendor/tracemonkey/jsdtracef.h +81 -0
  245. data/vendor/tracemonkey/jsemit.cpp +7292 -0
  246. data/vendor/tracemonkey/jsemit.h +802 -0
  247. data/vendor/tracemonkey/jsexn.cpp +1337 -0
  248. data/vendor/tracemonkey/jsexn.h +96 -0
  249. data/vendor/tracemonkey/jsfile.cpp +2747 -0
  250. data/vendor/tracemonkey/jsfile.h +56 -0
  251. data/vendor/tracemonkey/jsfile.msg +90 -0
  252. data/vendor/tracemonkey/jsfun.cpp +3089 -0
  253. data/vendor/tracemonkey/jsfun.h +366 -0
  254. data/vendor/tracemonkey/jsgc.cpp +3816 -0
  255. data/vendor/tracemonkey/jsgc.h +429 -0
  256. data/vendor/tracemonkey/jshash.cpp +477 -0
  257. data/vendor/tracemonkey/jshash.h +151 -0
  258. data/vendor/tracemonkey/jsify.pl +483 -0
  259. data/vendor/tracemonkey/jsinterp.cpp +7441 -0
  260. data/vendor/tracemonkey/jsinterp.h +666 -0
  261. data/vendor/tracemonkey/jsinvoke.cpp +42 -0
  262. data/vendor/tracemonkey/jsiter.cpp +1040 -0
  263. data/vendor/tracemonkey/jsiter.h +140 -0
  264. data/vendor/tracemonkey/jskeyword.tbl +124 -0
  265. data/vendor/tracemonkey/jskwgen.cpp +460 -0
  266. data/vendor/tracemonkey/jslibmath.h +69 -0
  267. data/vendor/tracemonkey/jslock.cpp +1512 -0
  268. data/vendor/tracemonkey/jslock.h +325 -0
  269. data/vendor/tracemonkey/jslocko.asm +60 -0
  270. data/vendor/tracemonkey/jslog2.cpp +111 -0
  271. data/vendor/tracemonkey/jslong.h +167 -0
  272. data/vendor/tracemonkey/jsmath.cpp +806 -0
  273. data/vendor/tracemonkey/jsmath.h +63 -0
  274. data/vendor/tracemonkey/jsnum.cpp +1374 -0
  275. data/vendor/tracemonkey/jsnum.h +280 -0
  276. data/vendor/tracemonkey/jsobj.cpp +6165 -0
  277. data/vendor/tracemonkey/jsobj.h +870 -0
  278. data/vendor/tracemonkey/json.cpp +1338 -0
  279. data/vendor/tracemonkey/json.h +108 -0
  280. data/vendor/tracemonkey/jsopcode.cpp +5484 -0
  281. data/vendor/tracemonkey/jsopcode.h +434 -0
  282. data/vendor/tracemonkey/jsopcode.tbl +591 -0
  283. data/vendor/tracemonkey/jsoplengen.cpp +121 -0
  284. data/vendor/tracemonkey/jsotypes.h +202 -0
  285. data/vendor/tracemonkey/jsparse.cpp +9257 -0
  286. data/vendor/tracemonkey/jsparse.h +900 -0
  287. data/vendor/tracemonkey/jsprf.cpp +1262 -0
  288. data/vendor/tracemonkey/jsprf.h +150 -0
  289. data/vendor/tracemonkey/jsproto.tbl +117 -0
  290. data/vendor/tracemonkey/jsprvtd.h +366 -0
  291. data/vendor/tracemonkey/jspubtd.h +585 -0
  292. data/vendor/tracemonkey/jsregexp.cpp +5051 -0
  293. data/vendor/tracemonkey/jsregexp.h +199 -0
  294. data/vendor/tracemonkey/jsreops.tbl +145 -0
  295. data/vendor/tracemonkey/jsscan.cpp +2040 -0
  296. data/vendor/tracemonkey/jsscan.h +467 -0
  297. data/vendor/tracemonkey/jsscope.cpp +1966 -0
  298. data/vendor/tracemonkey/jsscope.h +487 -0
  299. data/vendor/tracemonkey/jsscript.cpp +1932 -0
  300. data/vendor/tracemonkey/jsscript.h +345 -0
  301. data/vendor/tracemonkey/jsshell.msg +54 -0
  302. data/vendor/tracemonkey/jsstack.js +167 -0
  303. data/vendor/tracemonkey/jsstaticcheck.h +69 -0
  304. data/vendor/tracemonkey/jsstddef.h +87 -0
  305. data/vendor/tracemonkey/jsstdint.h +96 -0
  306. data/vendor/tracemonkey/jsstr.cpp +5277 -0
  307. data/vendor/tracemonkey/jsstr.h +702 -0
  308. data/vendor/tracemonkey/jstracer.cpp +10991 -0
  309. data/vendor/tracemonkey/jstracer.h +794 -0
  310. data/vendor/tracemonkey/jstypes.h +481 -0
  311. data/vendor/tracemonkey/jsutil.cpp +361 -0
  312. data/vendor/tracemonkey/jsutil.h +178 -0
  313. data/vendor/tracemonkey/jsversion.h +243 -0
  314. data/vendor/tracemonkey/jswince.asm +44 -0
  315. data/vendor/tracemonkey/jsxdrapi.cpp +800 -0
  316. data/vendor/tracemonkey/jsxdrapi.h +220 -0
  317. data/vendor/tracemonkey/jsxml.cpp +8327 -0
  318. data/vendor/tracemonkey/jsxml.h +305 -0
  319. data/vendor/tracemonkey/liveconnect/LiveConnect.dsp +157 -0
  320. data/vendor/tracemonkey/liveconnect/LiveConnectShell.dsp +120 -0
  321. data/vendor/tracemonkey/liveconnect/LiveConnectShell.dsw +44 -0
  322. data/vendor/tracemonkey/liveconnect/Makefile.in +105 -0
  323. data/vendor/tracemonkey/liveconnect/Makefile.ref +169 -0
  324. data/vendor/tracemonkey/liveconnect/README.html +712 -0
  325. data/vendor/tracemonkey/liveconnect/_jni/netscape_javascript_JSException.h +14 -0
  326. data/vendor/tracemonkey/liveconnect/_jni/netscape_javascript_JSObject.h +155 -0
  327. data/vendor/tracemonkey/liveconnect/classes/Makefile.in +89 -0
  328. data/vendor/tracemonkey/liveconnect/classes/Makefile.ref +57 -0
  329. data/vendor/tracemonkey/liveconnect/classes/netscape/Makefile.ref +47 -0
  330. data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/JSException.java +140 -0
  331. data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/JSObject.java +183 -0
  332. data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/JSProxy.java +58 -0
  333. data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/JSRunnable.java +70 -0
  334. data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/JSUtil.java +59 -0
  335. data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/Makefile.ref +53 -0
  336. data/vendor/tracemonkey/liveconnect/config/AIX4.1.mk +45 -0
  337. data/vendor/tracemonkey/liveconnect/config/AIX4.2.mk +45 -0
  338. data/vendor/tracemonkey/liveconnect/config/AIX4.3.mk +50 -0
  339. data/vendor/tracemonkey/liveconnect/config/HP-UXB.10.10.mk +43 -0
  340. data/vendor/tracemonkey/liveconnect/config/HP-UXB.10.20.mk +43 -0
  341. data/vendor/tracemonkey/liveconnect/config/HP-UXB.11.00.mk +43 -0
  342. data/vendor/tracemonkey/liveconnect/config/IRIX6.2.mk +43 -0
  343. data/vendor/tracemonkey/liveconnect/config/IRIX6.3.mk +43 -0
  344. data/vendor/tracemonkey/liveconnect/config/IRIX6.5.mk +43 -0
  345. data/vendor/tracemonkey/liveconnect/config/Linux_All.mk +73 -0
  346. data/vendor/tracemonkey/liveconnect/config/OSF1V4.0.mk +65 -0
  347. data/vendor/tracemonkey/liveconnect/config/OSF1V5.0.mk +62 -0
  348. data/vendor/tracemonkey/liveconnect/config/SunOS5.5.1.mk +55 -0
  349. data/vendor/tracemonkey/liveconnect/config/SunOS5.6.mk +39 -0
  350. data/vendor/tracemonkey/liveconnect/config/SunOS5.7.mk +39 -0
  351. data/vendor/tracemonkey/liveconnect/config/SunOS5.8.mk +39 -0
  352. data/vendor/tracemonkey/liveconnect/config/WINNT4.0.mk +53 -0
  353. data/vendor/tracemonkey/liveconnect/jsj.c +886 -0
  354. data/vendor/tracemonkey/liveconnect/jsj.msg +98 -0
  355. data/vendor/tracemonkey/liveconnect/jsj_JSObject.c +1377 -0
  356. data/vendor/tracemonkey/liveconnect/jsj_JavaArray.c +474 -0
  357. data/vendor/tracemonkey/liveconnect/jsj_JavaClass.c +737 -0
  358. data/vendor/tracemonkey/liveconnect/jsj_JavaMember.c +191 -0
  359. data/vendor/tracemonkey/liveconnect/jsj_JavaObject.c +1079 -0
  360. data/vendor/tracemonkey/liveconnect/jsj_JavaPackage.c +569 -0
  361. data/vendor/tracemonkey/liveconnect/jsj_array.c +207 -0
  362. data/vendor/tracemonkey/liveconnect/jsj_class.c +770 -0
  363. data/vendor/tracemonkey/liveconnect/jsj_convert.c +902 -0
  364. data/vendor/tracemonkey/liveconnect/jsj_field.c +421 -0
  365. data/vendor/tracemonkey/liveconnect/jsj_hash.c +488 -0
  366. data/vendor/tracemonkey/liveconnect/jsj_hash.h +161 -0
  367. data/vendor/tracemonkey/liveconnect/jsj_method.c +1825 -0
  368. data/vendor/tracemonkey/liveconnect/jsj_nodl.c +1 -0
  369. data/vendor/tracemonkey/liveconnect/jsj_private.h +677 -0
  370. data/vendor/tracemonkey/liveconnect/jsj_simpleapi.c +219 -0
  371. data/vendor/tracemonkey/liveconnect/jsj_utils.c +513 -0
  372. data/vendor/tracemonkey/liveconnect/jsjava.h +316 -0
  373. data/vendor/tracemonkey/liveconnect/netscape_javascript_JSObject.h +155 -0
  374. data/vendor/tracemonkey/liveconnect/nsCLiveconnect.cpp +785 -0
  375. data/vendor/tracemonkey/liveconnect/nsCLiveconnect.h +197 -0
  376. data/vendor/tracemonkey/liveconnect/nsCLiveconnectFactory.cpp +118 -0
  377. data/vendor/tracemonkey/liveconnect/nsCLiveconnectFactory.h +76 -0
  378. data/vendor/tracemonkey/liveconnect/nsILiveconnect.h +197 -0
  379. data/vendor/tracemonkey/liveconnect/nsISecureLiveconnect.h +94 -0
  380. data/vendor/tracemonkey/liveconnect/nsISecurityContext.h +136 -0
  381. data/vendor/tracemonkey/lock_SunOS.s +119 -0
  382. data/vendor/tracemonkey/mandelbrot-results.js +3 -0
  383. data/vendor/tracemonkey/math-partial-sums.js +32 -0
  384. data/vendor/tracemonkey/math-trace-tests.js +507 -0
  385. data/vendor/tracemonkey/md5.js +289 -0
  386. data/vendor/tracemonkey/nanojit/Assembler.cpp +1984 -0
  387. data/vendor/tracemonkey/nanojit/Assembler.h +375 -0
  388. data/vendor/tracemonkey/nanojit/Fragmento.cpp +651 -0
  389. data/vendor/tracemonkey/nanojit/Fragmento.h +237 -0
  390. data/vendor/tracemonkey/nanojit/LIR.cpp +2314 -0
  391. data/vendor/tracemonkey/nanojit/LIR.h +879 -0
  392. data/vendor/tracemonkey/nanojit/LIRopcode.tbl +252 -0
  393. data/vendor/tracemonkey/nanojit/Native.h +127 -0
  394. data/vendor/tracemonkey/nanojit/NativeARM.cpp +1742 -0
  395. data/vendor/tracemonkey/nanojit/NativeARM.h +844 -0
  396. data/vendor/tracemonkey/nanojit/NativeSparc.cpp +1130 -0
  397. data/vendor/tracemonkey/nanojit/NativeSparc.h +948 -0
  398. data/vendor/tracemonkey/nanojit/NativeThumb.cpp +1322 -0
  399. data/vendor/tracemonkey/nanojit/NativeThumb.h +525 -0
  400. data/vendor/tracemonkey/nanojit/Nativei386.cpp +1748 -0
  401. data/vendor/tracemonkey/nanojit/Nativei386.h +857 -0
  402. data/vendor/tracemonkey/nanojit/RegAlloc.cpp +183 -0
  403. data/vendor/tracemonkey/nanojit/RegAlloc.h +95 -0
  404. data/vendor/tracemonkey/nanojit/TraceTreeDrawer.cpp +306 -0
  405. data/vendor/tracemonkey/nanojit/TraceTreeDrawer.h +88 -0
  406. data/vendor/tracemonkey/nanojit/avmplus.cpp +56 -0
  407. data/vendor/tracemonkey/nanojit/avmplus.h +1016 -0
  408. data/vendor/tracemonkey/nanojit/nanojit.h +253 -0
  409. data/vendor/tracemonkey/perfect.js +39 -0
  410. data/vendor/tracemonkey/plify_jsdhash.sed +35 -0
  411. data/vendor/tracemonkey/prmjtime.cpp +869 -0
  412. data/vendor/tracemonkey/prmjtime.h +103 -0
  413. data/vendor/tracemonkey/ref-config/AIX4.1.mk +65 -0
  414. data/vendor/tracemonkey/ref-config/AIX4.2.mk +64 -0
  415. data/vendor/tracemonkey/ref-config/AIX4.3.mk +65 -0
  416. data/vendor/tracemonkey/ref-config/Darwin.mk +85 -0
  417. data/vendor/tracemonkey/ref-config/Darwin1.3.mk +81 -0
  418. data/vendor/tracemonkey/ref-config/Darwin1.4.mk +41 -0
  419. data/vendor/tracemonkey/ref-config/Darwin5.2.mk +81 -0
  420. data/vendor/tracemonkey/ref-config/Darwin5.3.mk +81 -0
  421. data/vendor/tracemonkey/ref-config/Darwin64.mk +72 -0
  422. data/vendor/tracemonkey/ref-config/HP-UXB.10.10.mk +77 -0
  423. data/vendor/tracemonkey/ref-config/HP-UXB.10.20.mk +77 -0
  424. data/vendor/tracemonkey/ref-config/HP-UXB.11.00.mk +80 -0
  425. data/vendor/tracemonkey/ref-config/IRIX.mk +87 -0
  426. data/vendor/tracemonkey/ref-config/IRIX5.3.mk +44 -0
  427. data/vendor/tracemonkey/ref-config/IRIX6.1.mk +44 -0
  428. data/vendor/tracemonkey/ref-config/IRIX6.2.mk +44 -0
  429. data/vendor/tracemonkey/ref-config/IRIX6.3.mk +44 -0
  430. data/vendor/tracemonkey/ref-config/IRIX6.5.mk +44 -0
  431. data/vendor/tracemonkey/ref-config/Linux_All.mk +105 -0
  432. data/vendor/tracemonkey/ref-config/Mac_OS10.0.mk +82 -0
  433. data/vendor/tracemonkey/ref-config/OSF1V4.0.mk +72 -0
  434. data/vendor/tracemonkey/ref-config/OSF1V5.0.mk +69 -0
  435. data/vendor/tracemonkey/ref-config/SunOS4.1.4.mk +101 -0
  436. data/vendor/tracemonkey/ref-config/SunOS5.10.mk +50 -0
  437. data/vendor/tracemonkey/ref-config/SunOS5.3.mk +91 -0
  438. data/vendor/tracemonkey/ref-config/SunOS5.4.mk +92 -0
  439. data/vendor/tracemonkey/ref-config/SunOS5.5.1.mk +44 -0
  440. data/vendor/tracemonkey/ref-config/SunOS5.5.mk +87 -0
  441. data/vendor/tracemonkey/ref-config/SunOS5.6.mk +89 -0
  442. data/vendor/tracemonkey/ref-config/SunOS5.7.mk +44 -0
  443. data/vendor/tracemonkey/ref-config/SunOS5.8.mk +44 -0
  444. data/vendor/tracemonkey/ref-config/SunOS5.9.mk +44 -0
  445. data/vendor/tracemonkey/ref-config/WINNT4.0.mk +118 -0
  446. data/vendor/tracemonkey/ref-config/WINNT5.0.mk +118 -0
  447. data/vendor/tracemonkey/ref-config/WINNT5.1.mk +118 -0
  448. data/vendor/tracemonkey/ref-config/WINNT5.2.mk +118 -0
  449. data/vendor/tracemonkey/ref-config/WINNT6.0.mk +118 -0
  450. data/vendor/tracemonkey/ref-config/dgux.mk +64 -0
  451. data/vendor/tracemonkey/resource.h +15 -0
  452. data/vendor/tracemonkey/rules.mk +206 -0
  453. data/vendor/tracemonkey/shell/Makefile.in +72 -0
  454. data/vendor/tracemonkey/shell/js.cpp +4719 -0
  455. data/vendor/tracemonkey/t/3d-cube.js +337 -0
  456. data/vendor/tracemonkey/t/3d-morph.js +54 -0
  457. data/vendor/tracemonkey/t/3d-raytrace.js +441 -0
  458. data/vendor/tracemonkey/t/access-binary-trees.js +50 -0
  459. data/vendor/tracemonkey/t/access-fannkuch.js +66 -0
  460. data/vendor/tracemonkey/t/access-nbody.js +169 -0
  461. data/vendor/tracemonkey/t/access-nsieve.js +38 -0
  462. data/vendor/tracemonkey/t/bitops-3bit-bits-in-byte.js +32 -0
  463. data/vendor/tracemonkey/t/bitops-bits-in-byte.js +21 -0
  464. data/vendor/tracemonkey/t/bitops-bitwise-and.js +28 -0
  465. data/vendor/tracemonkey/t/bitops-nsieve-bits.js +32 -0
  466. data/vendor/tracemonkey/t/controlflow-recursive.js +25 -0
  467. data/vendor/tracemonkey/t/crypto-aes.js +422 -0
  468. data/vendor/tracemonkey/t/crypto-md5.js +286 -0
  469. data/vendor/tracemonkey/t/crypto-sha1.js +224 -0
  470. data/vendor/tracemonkey/t/date-format-tofte.js +299 -0
  471. data/vendor/tracemonkey/t/date-format-xparb.js +417 -0
  472. data/vendor/tracemonkey/t/math-cordic.js +95 -0
  473. data/vendor/tracemonkey/t/math-partial-sums.js +33 -0
  474. data/vendor/tracemonkey/t/math-spectral-norm.js +51 -0
  475. data/vendor/tracemonkey/t/regexp-dna.js +1712 -0
  476. data/vendor/tracemonkey/t/string-base64.js +135 -0
  477. data/vendor/tracemonkey/t/string-fasta.js +85 -0
  478. data/vendor/tracemonkey/t/string-tagcloud.js +265 -0
  479. data/vendor/tracemonkey/t/string-unpack-code.js +68 -0
  480. data/vendor/tracemonkey/t/string-validate-input.js +89 -0
  481. data/vendor/tracemonkey/time.sh +13 -0
  482. data/vendor/tracemonkey/trace-test.js +5564 -0
  483. data/vendor/tracemonkey/v8/base.js +187 -0
  484. data/vendor/tracemonkey/v8/crypto.js +1689 -0
  485. data/vendor/tracemonkey/v8/deltablue.js +880 -0
  486. data/vendor/tracemonkey/v8/earley-boyer.js +4682 -0
  487. data/vendor/tracemonkey/v8/raytrace.js +3418 -0
  488. data/vendor/tracemonkey/v8/richards.js +539 -0
  489. data/vendor/tracemonkey/v8/run-crypto.js +44 -0
  490. data/vendor/tracemonkey/v8/run-deltablue.js +44 -0
  491. data/vendor/tracemonkey/v8/run-earley-boyer.js +44 -0
  492. data/vendor/tracemonkey/v8/run-raytrace.js +44 -0
  493. data/vendor/tracemonkey/v8/run-richards.js +44 -0
  494. data/vendor/tracemonkey/v8/run.js +49 -0
  495. data/vendor/tracemonkey/vprof/readme.txt +93 -0
  496. data/vendor/tracemonkey/vprof/vprof.cpp +360 -0
  497. data/vendor/tracemonkey/vprof/vprof.h +245 -0
  498. data/vendor/tracemonkey/xpconnect/Makefile.in +67 -0
  499. data/vendor/tracemonkey/xpconnect/crashtests/117307-1.html +20 -0
  500. data/vendor/tracemonkey/xpconnect/crashtests/193710.html +11 -0
  501. data/vendor/tracemonkey/xpconnect/crashtests/290162-1.html +5 -0
  502. data/vendor/tracemonkey/xpconnect/crashtests/326615-1.html +16 -0
  503. data/vendor/tracemonkey/xpconnect/crashtests/328553-1.html +13 -0
  504. data/vendor/tracemonkey/xpconnect/crashtests/346258-1.html +12 -0
  505. data/vendor/tracemonkey/xpconnect/crashtests/346512-1-frame1.xhtml +16 -0
  506. data/vendor/tracemonkey/xpconnect/crashtests/346512-1-frame2.xhtml +15 -0
  507. data/vendor/tracemonkey/xpconnect/crashtests/346512-1.xhtml +30 -0
  508. data/vendor/tracemonkey/xpconnect/crashtests/382133-1.html +3 -0
  509. data/vendor/tracemonkey/xpconnect/crashtests/386680-1.html +22 -0
  510. data/vendor/tracemonkey/xpconnect/crashtests/394810-1.html +4 -0
  511. data/vendor/tracemonkey/xpconnect/crashtests/400349-1.html +20 -0
  512. data/vendor/tracemonkey/xpconnect/crashtests/403356-1.html +13 -0
  513. data/vendor/tracemonkey/xpconnect/crashtests/418139-1.svg +22 -0
  514. data/vendor/tracemonkey/xpconnect/crashtests/420513-1.html +11 -0
  515. data/vendor/tracemonkey/xpconnect/crashtests/453935-1.html +37 -0
  516. data/vendor/tracemonkey/xpconnect/crashtests/462926.html +12 -0
  517. data/vendor/tracemonkey/xpconnect/crashtests/468552-1.html +18 -0
  518. data/vendor/tracemonkey/xpconnect/crashtests/471366-1.html +12 -0
  519. data/vendor/tracemonkey/xpconnect/crashtests/475185-1.html +13 -0
  520. data/vendor/tracemonkey/xpconnect/crashtests/475291-1.html +14 -0
  521. data/vendor/tracemonkey/xpconnect/crashtests/503286-1.html +23 -0
  522. data/vendor/tracemonkey/xpconnect/crashtests/crashtests.list +21 -0
  523. data/vendor/tracemonkey/xpconnect/idl/Makefile.in +78 -0
  524. data/vendor/tracemonkey/xpconnect/idl/XPCIDispatch.idl +51 -0
  525. data/vendor/tracemonkey/xpconnect/idl/mozIJSSubScriptLoader.idl +64 -0
  526. data/vendor/tracemonkey/xpconnect/idl/nsIActiveXSecurityPolicy.idl +67 -0
  527. data/vendor/tracemonkey/xpconnect/idl/nsIDispatchSupport.idl +119 -0
  528. data/vendor/tracemonkey/xpconnect/idl/nsIJSContextStack.idl +85 -0
  529. data/vendor/tracemonkey/xpconnect/idl/nsIJSRuntimeService.idl +51 -0
  530. data/vendor/tracemonkey/xpconnect/idl/nsIScriptError.idl +102 -0
  531. data/vendor/tracemonkey/xpconnect/idl/nsIScriptableInterfaces.idl +67 -0
  532. data/vendor/tracemonkey/xpconnect/idl/nsIXPCScriptNotify.idl +66 -0
  533. data/vendor/tracemonkey/xpconnect/idl/nsIXPCScriptable.idl +183 -0
  534. data/vendor/tracemonkey/xpconnect/idl/nsIXPCSecurityManager.idl +114 -0
  535. data/vendor/tracemonkey/xpconnect/idl/nsIXPConnect.idl +819 -0
  536. data/vendor/tracemonkey/xpconnect/idl/xpcIJSModuleLoader.idl +95 -0
  537. data/vendor/tracemonkey/xpconnect/idl/xpcIJSWeakReference.idl +49 -0
  538. data/vendor/tracemonkey/xpconnect/idl/xpccomponents.idl +254 -0
  539. data/vendor/tracemonkey/xpconnect/idl/xpcexception.idl +66 -0
  540. data/vendor/tracemonkey/xpconnect/idl/xpcjsid.idl +83 -0
  541. data/vendor/tracemonkey/xpconnect/loader/ISO8601DateUtils.jsm +176 -0
  542. data/vendor/tracemonkey/xpconnect/loader/Makefile.in +63 -0
  543. data/vendor/tracemonkey/xpconnect/loader/XPCOMUtils.jsm +267 -0
  544. data/vendor/tracemonkey/xpconnect/loader/mozJSComponentLoader.cpp +1717 -0
  545. data/vendor/tracemonkey/xpconnect/loader/mozJSComponentLoader.h +172 -0
  546. data/vendor/tracemonkey/xpconnect/loader/mozJSLoaderConstructors.h +101 -0
  547. data/vendor/tracemonkey/xpconnect/loader/mozJSSubScriptLoader.cpp +360 -0
  548. data/vendor/tracemonkey/xpconnect/loader/mozJSSubScriptLoader.h +66 -0
  549. data/vendor/tracemonkey/xpconnect/public/Makefile.in +54 -0
  550. data/vendor/tracemonkey/xpconnect/public/nsAXPCNativeCallContext.h +89 -0
  551. data/vendor/tracemonkey/xpconnect/public/nsAutoJSValHolder.h +168 -0
  552. data/vendor/tracemonkey/xpconnect/public/xpc_map_end.h +327 -0
  553. data/vendor/tracemonkey/xpconnect/sample/Makefile.in +71 -0
  554. data/vendor/tracemonkey/xpconnect/sample/README +39 -0
  555. data/vendor/tracemonkey/xpconnect/sample/xpcsample1.cpp +337 -0
  556. data/vendor/tracemonkey/xpconnect/sample/xpcsample1.idl +82 -0
  557. data/vendor/tracemonkey/xpconnect/sample/xpcsample1.js +21 -0
  558. data/vendor/tracemonkey/xpconnect/shell/Makefile.in +106 -0
  559. data/vendor/tracemonkey/xpconnect/shell/jsshell.msg +50 -0
  560. data/vendor/tracemonkey/xpconnect/shell/xpcshell.cpp +1817 -0
  561. data/vendor/tracemonkey/xpconnect/shell/xpcshellMacUtils.h +43 -0
  562. data/vendor/tracemonkey/xpconnect/shell/xpcshellMacUtils.mm +54 -0
  563. data/vendor/tracemonkey/xpconnect/src/Makefile.in +228 -0
  564. data/vendor/tracemonkey/xpconnect/src/README +3 -0
  565. data/vendor/tracemonkey/xpconnect/src/XPCCrossOriginWrapper.cpp +1186 -0
  566. data/vendor/tracemonkey/xpconnect/src/XPCDispConvert.cpp +593 -0
  567. data/vendor/tracemonkey/xpconnect/src/XPCDispInlines.h +667 -0
  568. data/vendor/tracemonkey/xpconnect/src/XPCDispInterface.cpp +383 -0
  569. data/vendor/tracemonkey/xpconnect/src/XPCDispObject.cpp +516 -0
  570. data/vendor/tracemonkey/xpconnect/src/XPCDispParamPropJSClass.cpp +223 -0
  571. data/vendor/tracemonkey/xpconnect/src/XPCDispParams.cpp +103 -0
  572. data/vendor/tracemonkey/xpconnect/src/XPCDispPrivate.h +1401 -0
  573. data/vendor/tracemonkey/xpconnect/src/XPCDispTearOff.cpp +547 -0
  574. data/vendor/tracemonkey/xpconnect/src/XPCDispTypeInfo.cpp +471 -0
  575. data/vendor/tracemonkey/xpconnect/src/XPCIDispatchClassInfo.cpp +139 -0
  576. data/vendor/tracemonkey/xpconnect/src/XPCIDispatchExtension.cpp +362 -0
  577. data/vendor/tracemonkey/xpconnect/src/XPCNativeWrapper.cpp +1350 -0
  578. data/vendor/tracemonkey/xpconnect/src/XPCNativeWrapper.h +88 -0
  579. data/vendor/tracemonkey/xpconnect/src/XPCSafeJSObjectWrapper.cpp +1148 -0
  580. data/vendor/tracemonkey/xpconnect/src/XPCSystemOnlyWrapper.cpp +718 -0
  581. data/vendor/tracemonkey/xpconnect/src/XPCWrapper.cpp +850 -0
  582. data/vendor/tracemonkey/xpconnect/src/XPCWrapper.h +394 -0
  583. data/vendor/tracemonkey/xpconnect/src/dom_quickstubs.qsconf +568 -0
  584. data/vendor/tracemonkey/xpconnect/src/nsDispatchSupport.cpp +348 -0
  585. data/vendor/tracemonkey/xpconnect/src/nsScriptError.cpp +201 -0
  586. data/vendor/tracemonkey/xpconnect/src/nsXPConnect.cpp +2609 -0
  587. data/vendor/tracemonkey/xpconnect/src/qsgen.py +1487 -0
  588. data/vendor/tracemonkey/xpconnect/src/xpc.msg +217 -0
  589. data/vendor/tracemonkey/xpconnect/src/xpcJSWeakReference.cpp +148 -0
  590. data/vendor/tracemonkey/xpconnect/src/xpcJSWeakReference.h +56 -0
  591. data/vendor/tracemonkey/xpconnect/src/xpccallcontext.cpp +579 -0
  592. data/vendor/tracemonkey/xpconnect/src/xpccomponents.cpp +4144 -0
  593. data/vendor/tracemonkey/xpconnect/src/xpccontext.cpp +115 -0
  594. data/vendor/tracemonkey/xpconnect/src/xpcconvert.cpp +2298 -0
  595. data/vendor/tracemonkey/xpconnect/src/xpcdebug.cpp +481 -0
  596. data/vendor/tracemonkey/xpconnect/src/xpcexception.cpp +502 -0
  597. data/vendor/tracemonkey/xpconnect/src/xpcforwards.h +114 -0
  598. data/vendor/tracemonkey/xpconnect/src/xpcinlines.h +772 -0
  599. data/vendor/tracemonkey/xpconnect/src/xpcjsid.cpp +1025 -0
  600. data/vendor/tracemonkey/xpconnect/src/xpcjsruntime.cpp +1342 -0
  601. data/vendor/tracemonkey/xpconnect/src/xpclog.cpp +128 -0
  602. data/vendor/tracemonkey/xpconnect/src/xpclog.h +101 -0
  603. data/vendor/tracemonkey/xpconnect/src/xpcmaps.cpp +761 -0
  604. data/vendor/tracemonkey/xpconnect/src/xpcmaps.h +713 -0
  605. data/vendor/tracemonkey/xpconnect/src/xpcmodule.cpp +136 -0
  606. data/vendor/tracemonkey/xpconnect/src/xpcprivate.h +4138 -0
  607. data/vendor/tracemonkey/xpconnect/src/xpcquickstubs.cpp +1128 -0
  608. data/vendor/tracemonkey/xpconnect/src/xpcquickstubs.h +480 -0
  609. data/vendor/tracemonkey/xpconnect/src/xpcruntimesvc.cpp +179 -0
  610. data/vendor/tracemonkey/xpconnect/src/xpcstack.cpp +342 -0
  611. data/vendor/tracemonkey/xpconnect/src/xpcstring.cpp +139 -0
  612. data/vendor/tracemonkey/xpconnect/src/xpcthreadcontext.cpp +599 -0
  613. data/vendor/tracemonkey/xpconnect/src/xpcthrower.cpp +399 -0
  614. data/vendor/tracemonkey/xpconnect/src/xpcvariant.cpp +850 -0
  615. data/vendor/tracemonkey/xpconnect/src/xpcwrappedjs.cpp +670 -0
  616. data/vendor/tracemonkey/xpconnect/src/xpcwrappedjsclass.cpp +2015 -0
  617. data/vendor/tracemonkey/xpconnect/src/xpcwrappednative.cpp +3482 -0
  618. data/vendor/tracemonkey/xpconnect/src/xpcwrappednativeinfo.cpp +945 -0
  619. data/vendor/tracemonkey/xpconnect/src/xpcwrappednativejsops.cpp +2003 -0
  620. data/vendor/tracemonkey/xpconnect/src/xpcwrappednativeproto.cpp +302 -0
  621. data/vendor/tracemonkey/xpconnect/src/xpcwrappednativescope.cpp +991 -0
  622. data/vendor/tracemonkey/xpconnect/tests/Makefile.in +75 -0
  623. data/vendor/tracemonkey/xpconnect/tests/TestXPC.cpp +785 -0
  624. data/vendor/tracemonkey/xpconnect/tests/chrome/Makefile.in +51 -0
  625. data/vendor/tracemonkey/xpconnect/tests/chrome/test_bug500931.xul +43 -0
  626. data/vendor/tracemonkey/xpconnect/tests/components/Makefile.in +85 -0
  627. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_array.cpp +388 -0
  628. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_attributes.cpp +305 -0
  629. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_calljs.cpp +135 -0
  630. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_child.cpp +225 -0
  631. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_const.cpp +76 -0
  632. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_domstring.cpp +118 -0
  633. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_echo.cpp +616 -0
  634. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_in.cpp +204 -0
  635. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_inout.cpp +171 -0
  636. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_module.cpp +77 -0
  637. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_multiple.cpp +554 -0
  638. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_noisy.cpp +154 -0
  639. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_out.cpp +335 -0
  640. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_overloaded.cpp +250 -0
  641. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_private.h +192 -0
  642. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_string.cpp +185 -0
  643. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_variant.cpp +355 -0
  644. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/StdAfx.cpp +12 -0
  645. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/StdAfx.h +28 -0
  646. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCDispUtilities.h +28 -0
  647. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.cpp +86 -0
  648. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.def +9 -0
  649. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.dsp +318 -0
  650. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.dsw +29 -0
  651. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.idl +454 -0
  652. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.rc +145 -0
  653. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispSimple.cpp +44 -0
  654. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispSimple.h +56 -0
  655. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispSimple.rgs +23 -0
  656. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestArrays.cpp +221 -0
  657. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestArrays.h +53 -0
  658. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestArrays.rgs +23 -0
  659. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestMethods.cpp +699 -0
  660. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestMethods.h +138 -0
  661. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestMethods.rgs +23 -0
  662. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestNoIDispatch.cpp +23 -0
  663. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestNoIDispatch.h +41 -0
  664. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestNoIDispatch.rgs +23 -0
  665. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestProperties.cpp +256 -0
  666. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestProperties.h +88 -0
  667. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestProperties.rgs +23 -0
  668. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOff.cpp +23 -0
  669. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOff.h +43 -0
  670. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOff.rgs +23 -0
  671. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOn.cpp +29 -0
  672. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOn.h +45 -0
  673. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOn.rgs +23 -0
  674. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestWrappedJS.cpp +177 -0
  675. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestWrappedJS.h +50 -0
  676. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestWrappedJS.rgs +23 -0
  677. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/resource.h +36 -0
  678. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/Arrays/XPCIDispatchArrayTests.js +54 -0
  679. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/Attributes/XPCIDispatchAttributeTests.js +150 -0
  680. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/General/XPCIDispatchInstantiations.js +122 -0
  681. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/General/XPCStress.js +58 -0
  682. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/Methods/XPCIDispatchMethodTests.js +376 -0
  683. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/shell.js +377 -0
  684. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedJS/General/XPCIDispatchTestWrappedJS.js +76 -0
  685. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedJS/shell.js +377 -0
  686. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/exectests.cmd +1 -0
  687. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/jsDriver.pl +1288 -0
  688. data/vendor/tracemonkey/xpconnect/tests/idl/Makefile.in +61 -0
  689. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest.idl +312 -0
  690. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest2.idl +51 -0
  691. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_attributes.idl +67 -0
  692. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_calljs.idl +59 -0
  693. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_const.idl +61 -0
  694. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_domstring.idl +59 -0
  695. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_in.idl +88 -0
  696. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_inout.idl +86 -0
  697. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_multiple.idl +77 -0
  698. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_out.idl +142 -0
  699. data/vendor/tracemonkey/xpconnect/tests/js/checkid.js +82 -0
  700. data/vendor/tracemonkey/xpconnect/tests/js/evaluate.js +311 -0
  701. data/vendor/tracemonkey/xpconnect/tests/js/exceptions-2.js +153 -0
  702. data/vendor/tracemonkey/xpconnect/tests/js/exceptions-3.js +194 -0
  703. data/vendor/tracemonkey/xpconnect/tests/js/exceptions-4.js +297 -0
  704. data/vendor/tracemonkey/xpconnect/tests/js/exceptions-5.js +343 -0
  705. data/vendor/tracemonkey/xpconnect/tests/js/exceptions.js +230 -0
  706. data/vendor/tracemonkey/xpconnect/tests/js/javascript.js +96 -0
  707. data/vendor/tracemonkey/xpconnect/tests/js/multiple-2.js +151 -0
  708. data/vendor/tracemonkey/xpconnect/tests/js/multiple-3.js +148 -0
  709. data/vendor/tracemonkey/xpconnect/tests/js/multiple-4.js +152 -0
  710. data/vendor/tracemonkey/xpconnect/tests/js/multiple.js +137 -0
  711. data/vendor/tracemonkey/xpconnect/tests/js/notscriptable.js +104 -0
  712. data/vendor/tracemonkey/xpconnect/tests/js/old/simpletest.js +36 -0
  713. data/vendor/tracemonkey/xpconnect/tests/js/old/speed.js +60 -0
  714. data/vendor/tracemonkey/xpconnect/tests/js/old/testxpc.js +464 -0
  715. data/vendor/tracemonkey/xpconnect/tests/js/old/threads.js +74 -0
  716. data/vendor/tracemonkey/xpconnect/tests/js/old/try.js +27 -0
  717. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_array.js +308 -0
  718. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_callcontext.js +68 -0
  719. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_echo.js +636 -0
  720. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_enum_and_sort.js +28 -0
  721. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_enum_constants.js +15 -0
  722. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_enum_create.js +200 -0
  723. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_exceptions.js +167 -0
  724. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_ids.js +135 -0
  725. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_observer.js +36 -0
  726. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_overloaded.js +14 -0
  727. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_primitives.js +141 -0
  728. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_propertybag.js +36 -0
  729. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_variant.js +339 -0
  730. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_variant_array.js +30 -0
  731. data/vendor/tracemonkey/xpconnect/tests/js/readonlyattributes.js +74 -0
  732. data/vendor/tracemonkey/xpconnect/tests/js/readwriteattributes.js +101 -0
  733. data/vendor/tracemonkey/xpconnect/tests/js/scriptable.js +120 -0
  734. data/vendor/tracemonkey/xpconnect/tests/js/testin.js +203 -0
  735. data/vendor/tracemonkey/xpconnect/tests/js/xpcfun.js +234 -0
  736. data/vendor/tracemonkey/xpconnect/tests/js/xpctest_primitives.js +200 -0
  737. data/vendor/tracemonkey/xpconnect/tests/mochitest/Makefile.in +66 -0
  738. data/vendor/tracemonkey/xpconnect/tests/mochitest/bug500931_helper.html +7 -0
  739. data/vendor/tracemonkey/xpconnect/tests/mochitest/inner.html +7 -0
  740. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug361111.xul +29 -0
  741. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug384632.html +32 -0
  742. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug390488.html +65 -0
  743. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug393269.html +46 -0
  744. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug396851.html +43 -0
  745. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug428021.html +41 -0
  746. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug446584.html +49 -0
  747. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug448587.html +31 -0
  748. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug462428.html +42 -0
  749. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug478438.html +66 -0
  750. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug484107.html +100 -0
  751. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug484459.html +36 -0
  752. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug500691.html +28 -0
  753. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_wrappers.html +116 -0
  754. data/vendor/tracemonkey/xpconnect/tests/unit/bogus_element_type.jsm +1 -0
  755. data/vendor/tracemonkey/xpconnect/tests/unit/bogus_exports_type.jsm +1 -0
  756. data/vendor/tracemonkey/xpconnect/tests/unit/bug451678_subscript.js +2 -0
  757. data/vendor/tracemonkey/xpconnect/tests/unit/component_import.js +144 -0
  758. data/vendor/tracemonkey/xpconnect/tests/unit/recursive_importA.jsm +44 -0
  759. data/vendor/tracemonkey/xpconnect/tests/unit/recursive_importB.jsm +45 -0
  760. data/vendor/tracemonkey/xpconnect/tests/unit/syntax_error.jsm +1 -0
  761. data/vendor/tracemonkey/xpconnect/tests/unit/test_bogus_files.js +88 -0
  762. data/vendor/tracemonkey/xpconnect/tests/unit/test_bug408412.js +51 -0
  763. data/vendor/tracemonkey/xpconnect/tests/unit/test_bug451678.js +52 -0
  764. data/vendor/tracemonkey/xpconnect/tests/unit/test_bug_442086.js +68 -0
  765. data/vendor/tracemonkey/xpconnect/tests/unit/test_import.js +127 -0
  766. data/vendor/tracemonkey/xpconnect/tests/unit/test_js_weak_references.js +63 -0
  767. data/vendor/tracemonkey/xpconnect/tests/unit/test_recursive_import.js +62 -0
  768. data/vendor/tracemonkey/xpconnect/tools/Makefile.in +49 -0
  769. data/vendor/tracemonkey/xpconnect/tools/idl/Makefile.in +53 -0
  770. data/vendor/tracemonkey/xpconnect/tools/idl/nsIXPCToolsCompiler.idl +60 -0
  771. data/vendor/tracemonkey/xpconnect/tools/idl/nsIXPCToolsProfiler.idl +57 -0
  772. data/vendor/tracemonkey/xpconnect/tools/js/CompileJSFiles.js +28 -0
  773. data/vendor/tracemonkey/xpconnect/tools/js/ListJSFiles.js +18 -0
  774. data/vendor/tracemonkey/xpconnect/tools/src/Makefile.in +76 -0
  775. data/vendor/tracemonkey/xpconnect/tools/src/nsXPCToolsCompiler.cpp +161 -0
  776. data/vendor/tracemonkey/xpconnect/tools/src/nsXPCToolsModule.cpp +65 -0
  777. data/vendor/tracemonkey/xpconnect/tools/src/nsXPCToolsProfiler.cpp +370 -0
  778. data/vendor/tracemonkey/xpconnect/tools/src/xpctools_private.h +236 -0
  779. metadata +782 -107
  780. data/test/johnson/nodes/export_test.rb +0 -9
  781. data/test/johnson/nodes/import_test.rb +0 -13
  782. data/test/johnson/version_test.rb +0 -13
@@ -0,0 +1,429 @@
1
+ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2
+ *
3
+ * ***** BEGIN LICENSE BLOCK *****
4
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
5
+ *
6
+ * The contents of this file are subject to the Mozilla Public License Version
7
+ * 1.1 (the "License"); you may not use this file except in compliance with
8
+ * the License. You may obtain a copy of the License at
9
+ * http://www.mozilla.org/MPL/
10
+ *
11
+ * Software distributed under the License is distributed on an "AS IS" basis,
12
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13
+ * for the specific language governing rights and limitations under the
14
+ * License.
15
+ *
16
+ * The Original Code is Mozilla Communicator client code, released
17
+ * March 31, 1998.
18
+ *
19
+ * The Initial Developer of the Original Code is
20
+ * Netscape Communications Corporation.
21
+ * Portions created by the Initial Developer are Copyright (C) 1998
22
+ * the Initial Developer. All Rights Reserved.
23
+ *
24
+ * Contributor(s):
25
+ *
26
+ * Alternatively, the contents of this file may be used under the terms of
27
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
28
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
29
+ * in which case the provisions of the GPL or the LGPL are applicable instead
30
+ * of those above. If you wish to allow use of your version of this file only
31
+ * under the terms of either the GPL or the LGPL, and not to allow others to
32
+ * use your version of this file under the terms of the MPL, indicate your
33
+ * decision by deleting the provisions above and replace them with the notice
34
+ * and other provisions required by the GPL or the LGPL. If you do not delete
35
+ * the provisions above, a recipient may use your version of this file under
36
+ * the terms of any one of the MPL, the GPL or the LGPL.
37
+ *
38
+ * ***** END LICENSE BLOCK ***** */
39
+
40
+ #ifndef jsgc_h___
41
+ #define jsgc_h___
42
+ /*
43
+ * JS Garbage Collector.
44
+ */
45
+ #include "jsprvtd.h"
46
+ #include "jspubtd.h"
47
+ #include "jsdhash.h"
48
+ #include "jsbit.h"
49
+ #include "jsutil.h"
50
+
51
+ JS_BEGIN_EXTERN_C
52
+
53
+ #define JSTRACE_XML 3
54
+
55
+ /*
56
+ * One past the maximum trace kind.
57
+ */
58
+ #define JSTRACE_LIMIT 4
59
+
60
+ /*
61
+ * We use the trace kinds as the types for all GC things except external
62
+ * strings.
63
+ */
64
+ #define GCX_OBJECT JSTRACE_OBJECT /* JSObject */
65
+ #define GCX_DOUBLE JSTRACE_DOUBLE /* jsdouble */
66
+ #define GCX_STRING JSTRACE_STRING /* JSString */
67
+ #define GCX_XML JSTRACE_XML /* JSXML */
68
+ #define GCX_EXTERNAL_STRING JSTRACE_LIMIT /* JSString with external
69
+ chars */
70
+ /*
71
+ * The number of defined GC types and the maximum limit for the number of
72
+ * possible GC types.
73
+ */
74
+ #define GCX_NTYPES (GCX_EXTERNAL_STRING + 8)
75
+ #define GCX_LIMIT_LOG2 4 /* type index bits */
76
+ #define GCX_LIMIT JS_BIT(GCX_LIMIT_LOG2)
77
+
78
+ /* GC flag definitions, must fit in 8 bits (type index goes in the low bits). */
79
+ #define GCF_TYPEMASK JS_BITMASK(GCX_LIMIT_LOG2)
80
+ #define GCF_MARK JS_BIT(GCX_LIMIT_LOG2)
81
+ #define GCF_FINAL JS_BIT(GCX_LIMIT_LOG2 + 1)
82
+ #define GCF_LOCKSHIFT (GCX_LIMIT_LOG2 + 2) /* lock bit shift */
83
+ #define GCF_LOCK JS_BIT(GCF_LOCKSHIFT) /* lock request bit in API */
84
+
85
+ /*
86
+ * Get the type of the external string or -1 if the string was not created
87
+ * with JS_NewExternalString.
88
+ */
89
+ extern intN
90
+ js_GetExternalStringGCType(JSString *str);
91
+
92
+ extern JS_FRIEND_API(uint32)
93
+ js_GetGCThingTraceKind(void *thing);
94
+
95
+ /*
96
+ * The sole purpose of the function is to preserve public API compatibility
97
+ * in JS_GetStringBytes which takes only single JSString* argument.
98
+ */
99
+ JSRuntime*
100
+ js_GetGCStringRuntime(JSString *str);
101
+
102
+ #if 1
103
+ /*
104
+ * Since we're forcing a GC from JS_GC anyway, don't bother wasting cycles
105
+ * loading oldval. XXX remove implied force, fix jsinterp.c's "second arg
106
+ * ignored", etc.
107
+ */
108
+ #define GC_POKE(cx, oldval) ((cx)->runtime->gcPoke = JS_TRUE)
109
+ #else
110
+ #define GC_POKE(cx, oldval) ((cx)->runtime->gcPoke = JSVAL_IS_GCTHING(oldval))
111
+ #endif
112
+
113
+ /*
114
+ * Write barrier macro monitoring property update from oldval to newval in
115
+ * scope->object.
116
+ *
117
+ * Since oldval is used only for the branded scope case, and the oldval actual
118
+ * argument expression is typically not used otherwise by callers, performance
119
+ * benefits if oldval is *not* evaluated into a callsite temporary variable,
120
+ * and instead passed to GC_WRITE_BARRIER for conditional evaluation (we rely
121
+ * on modern compilers to do a good CSE job). Yay, C macros.
122
+ */
123
+ #define GC_WRITE_BARRIER(cx,scope,oldval,newval) \
124
+ JS_BEGIN_MACRO \
125
+ if (SCOPE_IS_BRANDED(scope) && \
126
+ (oldval) != (newval) && \
127
+ (VALUE_IS_FUNCTION(cx,oldval) || VALUE_IS_FUNCTION(cx,newval))) { \
128
+ js_MakeScopeShapeUnique(cx, scope); \
129
+ } \
130
+ GC_POKE(cx, oldval); \
131
+ JS_END_MACRO
132
+
133
+ extern JSBool
134
+ js_InitGC(JSRuntime *rt, uint32 maxbytes);
135
+
136
+ extern void
137
+ js_FinishGC(JSRuntime *rt);
138
+
139
+ extern intN
140
+ js_ChangeExternalStringFinalizer(JSStringFinalizeOp oldop,
141
+ JSStringFinalizeOp newop);
142
+
143
+ extern JSBool
144
+ js_AddRoot(JSContext *cx, void *rp, const char *name);
145
+
146
+ extern JSBool
147
+ js_AddRootRT(JSRuntime *rt, void *rp, const char *name);
148
+
149
+ extern JSBool
150
+ js_RemoveRoot(JSRuntime *rt, void *rp);
151
+
152
+ #ifdef DEBUG
153
+ extern void
154
+ js_DumpNamedRoots(JSRuntime *rt,
155
+ void (*dump)(const char *name, void *rp, void *data),
156
+ void *data);
157
+ #endif
158
+
159
+ extern uint32
160
+ js_MapGCRoots(JSRuntime *rt, JSGCRootMapFun map, void *data);
161
+
162
+ /* Table of pointers with count valid members. */
163
+ typedef struct JSPtrTable {
164
+ size_t count;
165
+ void **array;
166
+ } JSPtrTable;
167
+
168
+ extern JSBool
169
+ js_RegisterCloseableIterator(JSContext *cx, JSObject *obj);
170
+
171
+ /*
172
+ * The private JSGCThing struct, which describes a gcFreeList element.
173
+ */
174
+ struct JSGCThing {
175
+ JSGCThing *next;
176
+ uint8 *flagp;
177
+ };
178
+
179
+ #define GC_NBYTES_MAX (10 * sizeof(JSGCThing))
180
+ #define GC_NUM_FREELISTS (GC_NBYTES_MAX / sizeof(JSGCThing))
181
+ #define GC_FREELIST_NBYTES(i) (((i) + 1) * sizeof(JSGCThing))
182
+ #define GC_FREELIST_INDEX(n) (((n) / sizeof(JSGCThing)) - 1)
183
+
184
+ /*
185
+ * Allocates a new GC thing of the given size. After a successful allocation
186
+ * the caller must fully initialize the thing before calling any function that
187
+ * can potentially trigger GC. This will ensure that GC tracing never sees junk
188
+ * values stored in the partially initialized thing.
189
+ */
190
+ extern void *
191
+ js_NewGCThing(JSContext *cx, uintN flags, size_t nbytes);
192
+
193
+ /*
194
+ * Allocate a new double jsval and store the result in *vp. vp must be a root.
195
+ * The function does not copy the result into any weak root.
196
+ */
197
+ extern JSBool
198
+ js_NewDoubleInRootedValue(JSContext *cx, jsdouble d, jsval *vp);
199
+
200
+ /*
201
+ * Return a pointer to a new GC-allocated and weakly-rooted jsdouble number,
202
+ * or null when the allocation fails.
203
+ */
204
+ extern jsdouble *
205
+ js_NewWeaklyRootedDouble(JSContext *cx, jsdouble d);
206
+
207
+ #ifdef JS_TRACER
208
+ extern JSBool
209
+ js_ReserveObjects(JSContext *cx, size_t nobjects);
210
+ #endif
211
+
212
+ extern JSBool
213
+ js_LockGCThingRT(JSRuntime *rt, void *thing);
214
+
215
+ extern JSBool
216
+ js_UnlockGCThingRT(JSRuntime *rt, void *thing);
217
+
218
+ extern JSBool
219
+ js_IsAboutToBeFinalized(JSContext *cx, void *thing);
220
+
221
+ /*
222
+ * Macro to test if a traversal is the marking phase of GC to avoid exposing
223
+ * ScriptFilenameEntry to traversal implementations.
224
+ */
225
+ #define IS_GC_MARKING_TRACER(trc) ((trc)->callback == NULL)
226
+
227
+ #if JS_HAS_XML_SUPPORT
228
+ # define JS_IS_VALID_TRACE_KIND(kind) ((uint32)(kind) < JSTRACE_LIMIT)
229
+ #else
230
+ # define JS_IS_VALID_TRACE_KIND(kind) ((uint32)(kind) <= JSTRACE_STRING)
231
+ #endif
232
+
233
+ /*
234
+ * Trace jsval when JSVAL_IS_OBJECT(v) can be an arbitrary GC thing casted as
235
+ * JSVAL_OBJECT and js_GetGCThingTraceKind has to be used to find the real
236
+ * type behind v.
237
+ */
238
+ extern void
239
+ js_CallValueTracerIfGCThing(JSTracer *trc, jsval v);
240
+
241
+ extern void
242
+ js_TraceStackFrame(JSTracer *trc, JSStackFrame *fp);
243
+
244
+ extern JS_REQUIRES_STACK void
245
+ js_TraceRuntime(JSTracer *trc, JSBool allAtoms);
246
+
247
+ extern JS_REQUIRES_STACK JS_FRIEND_API(void)
248
+ js_TraceContext(JSTracer *trc, JSContext *acx);
249
+
250
+ /*
251
+ * Schedule the GC call at a later safe point.
252
+ */
253
+ #ifndef JS_THREADSAFE
254
+ # define js_TriggerGC(cx, gcLocked) js_TriggerGC (cx)
255
+ #endif
256
+
257
+ extern void
258
+ js_TriggerGC(JSContext *cx, JSBool gcLocked);
259
+
260
+ /*
261
+ * Kinds of js_GC invocation.
262
+ */
263
+ typedef enum JSGCInvocationKind {
264
+ /* Normal invocation. */
265
+ GC_NORMAL = 0,
266
+
267
+ /*
268
+ * Called from js_DestroyContext for last JSContext in a JSRuntime, when
269
+ * it is imperative that rt->gcPoke gets cleared early in js_GC.
270
+ */
271
+ GC_LAST_CONTEXT = 1,
272
+
273
+ /*
274
+ * Flag bit telling js_GC that the caller has already acquired rt->gcLock.
275
+ * Currently, this flag is set for the invocation kinds that also preserve
276
+ * atoms and weak roots, so we don't need another bit for GC_KEEP_ATOMS.
277
+ */
278
+ GC_LOCK_HELD = 0x10,
279
+ GC_KEEP_ATOMS = GC_LOCK_HELD,
280
+
281
+ /*
282
+ * Called from js_SetProtoOrParent with a request to set an object's proto
283
+ * or parent slot inserted on rt->setSlotRequests.
284
+ */
285
+ GC_SET_SLOT_REQUEST = GC_LOCK_HELD | 1,
286
+
287
+ /*
288
+ * Called from js_NewGCThing as a last-ditch GC attempt. See comments in
289
+ * jsgc.c just before js_GC's definition for details.
290
+ */
291
+ GC_LAST_DITCH = GC_LOCK_HELD | 2
292
+ } JSGCInvocationKind;
293
+
294
+ extern void
295
+ js_GC(JSContext *cx, JSGCInvocationKind gckind);
296
+
297
+ /* Call this after succesful malloc of memory for GC-related things. */
298
+ extern void
299
+ js_UpdateMallocCounter(JSContext *cx, size_t nbytes);
300
+
301
+ typedef struct JSGCArenaInfo JSGCArenaInfo;
302
+ typedef struct JSGCArenaList JSGCArenaList;
303
+ typedef struct JSGCChunkInfo JSGCChunkInfo;
304
+
305
+ struct JSGCArenaList {
306
+ JSGCArenaInfo *last; /* last allocated GC arena */
307
+ uint16 lastCount; /* number of allocated things in the last
308
+ arena */
309
+ uint16 thingSize; /* size of things to allocate on this list
310
+ */
311
+ JSGCThing *freeList; /* list of free GC things */
312
+ };
313
+
314
+ typedef union JSGCDoubleCell JSGCDoubleCell;
315
+
316
+ union JSGCDoubleCell {
317
+ double number;
318
+ JSGCDoubleCell *link;
319
+ };
320
+
321
+ typedef struct JSGCDoubleArenaList {
322
+ JSGCArenaInfo *first; /* first allocated GC arena */
323
+ jsbitmap *nextDoubleFlags; /* bitmask with flags to check for free
324
+ things */
325
+ } JSGCDoubleArenaList;
326
+
327
+ typedef struct JSGCFreeListSet JSGCFreeListSet;
328
+
329
+ struct JSGCFreeListSet {
330
+ JSGCThing *array[GC_NUM_FREELISTS];
331
+ JSGCFreeListSet *link;
332
+ };
333
+
334
+ extern const JSGCFreeListSet js_GCEmptyFreeListSet;
335
+
336
+ extern void
337
+ js_RevokeGCLocalFreeLists(JSContext *cx);
338
+
339
+ extern void
340
+ js_DestroyScriptsToGC(JSContext *cx, JSThreadData *data);
341
+
342
+ struct JSWeakRoots {
343
+ /* Most recently created things by type, members of the GC's root set. */
344
+ void *newborn[GCX_NTYPES];
345
+
346
+ /* Atom root for the last-looked-up atom on this context. */
347
+ jsval lastAtom;
348
+
349
+ /* Root for the result of the most recent js_InternalInvoke call. */
350
+ jsval lastInternalResult;
351
+ };
352
+
353
+ #define JS_CLEAR_WEAK_ROOTS(wr) (memset((wr), 0, sizeof(JSWeakRoots)))
354
+
355
+ /*
356
+ * Increase runtime->gcBytes by sz bytes to account for an allocation outside
357
+ * the GC that will be freed only after the GC is run. The function may run
358
+ * the last ditch GC to ensure that gcBytes does not exceed gcMaxBytes. It will
359
+ * fail if the latter is not possible.
360
+ *
361
+ * This function requires that runtime->gcLock is held on entry. On successful
362
+ * return the lock is still held and on failure it will be released with
363
+ * the error reported.
364
+ */
365
+ extern JSBool
366
+ js_AddAsGCBytes(JSContext *cx, size_t sz);
367
+
368
+ extern void
369
+ js_RemoveAsGCBytes(JSRuntime* rt, size_t sz);
370
+
371
+ #ifdef DEBUG_notme
372
+ #define JS_GCMETER 1
373
+ #endif
374
+
375
+ #ifdef JS_GCMETER
376
+
377
+ typedef struct JSGCArenaStats {
378
+ uint32 alloc; /* allocation attempts */
379
+ uint32 localalloc; /* allocations from local lists */
380
+ uint32 retry; /* allocation retries after running the GC */
381
+ uint32 fail; /* allocation failures */
382
+ uint32 nthings; /* live GC things */
383
+ uint32 maxthings; /* maximum of live GC cells */
384
+ double totalthings; /* live GC things the GC scanned so far */
385
+ uint32 narenas; /* number of arena in list before the GC */
386
+ uint32 newarenas; /* new arenas allocated before the last GC */
387
+ uint32 livearenas; /* number of live arenas after the last GC */
388
+ uint32 maxarenas; /* maximum of allocated arenas */
389
+ uint32 totalarenas; /* total number of arenas with live things that
390
+ GC scanned so far */
391
+ } JSGCArenaStats;
392
+
393
+ typedef struct JSGCStats {
394
+ uint32 finalfail; /* finalizer calls allocator failures */
395
+ uint32 lockborn; /* things born locked */
396
+ uint32 lock; /* valid lock calls */
397
+ uint32 unlock; /* valid unlock calls */
398
+ uint32 depth; /* mark tail recursion depth */
399
+ uint32 maxdepth; /* maximum mark tail recursion depth */
400
+ uint32 cdepth; /* mark recursion depth of C functions */
401
+ uint32 maxcdepth; /* maximum mark recursion depth of C functions */
402
+ uint32 untraced; /* number of times tracing of GC thing's children were
403
+ delayed due to a low C stack */
404
+ #ifdef DEBUG
405
+ uint32 maxuntraced;/* maximum number of things with children to trace
406
+ later */
407
+ #endif
408
+ uint32 maxlevel; /* maximum GC nesting (indirect recursion) level */
409
+ uint32 poke; /* number of potentially useful GC calls */
410
+ uint32 afree; /* thing arenas freed so far */
411
+ uint32 stackseg; /* total extraordinary stack segments scanned */
412
+ uint32 segslots; /* total stack segment jsval slots scanned */
413
+ uint32 nclose; /* number of objects with close hooks */
414
+ uint32 maxnclose; /* max number of objects with close hooks */
415
+ uint32 closelater; /* number of close hooks scheduled to run */
416
+ uint32 maxcloselater; /* max number of close hooks scheduled to run */
417
+
418
+ JSGCArenaStats arenaStats[GC_NUM_FREELISTS];
419
+ JSGCArenaStats doubleArenaStats;
420
+ } JSGCStats;
421
+
422
+ extern JS_FRIEND_API(void)
423
+ js_DumpGCStats(JSRuntime *rt, FILE *fp);
424
+
425
+ #endif /* JS_GCMETER */
426
+
427
+ JS_END_EXTERN_C
428
+
429
+ #endif /* jsgc_h___ */
@@ -0,0 +1,477 @@
1
+ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2
+ *
3
+ * ***** BEGIN LICENSE BLOCK *****
4
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
5
+ *
6
+ * The contents of this file are subject to the Mozilla Public License Version
7
+ * 1.1 (the "License"); you may not use this file except in compliance with
8
+ * the License. You may obtain a copy of the License at
9
+ * http://www.mozilla.org/MPL/
10
+ *
11
+ * Software distributed under the License is distributed on an "AS IS" basis,
12
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13
+ * for the specific language governing rights and limitations under the
14
+ * License.
15
+ *
16
+ * The Original Code is Mozilla Communicator client code, released
17
+ * March 31, 1998.
18
+ *
19
+ * The Initial Developer of the Original Code is
20
+ * Netscape Communications Corporation.
21
+ * Portions created by the Initial Developer are Copyright (C) 1998
22
+ * the Initial Developer. All Rights Reserved.
23
+ *
24
+ * Contributor(s):
25
+ *
26
+ * Alternatively, the contents of this file may be used under the terms of
27
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
28
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
29
+ * in which case the provisions of the GPL or the LGPL are applicable instead
30
+ * of those above. If you wish to allow use of your version of this file only
31
+ * under the terms of either the GPL or the LGPL, and not to allow others to
32
+ * use your version of this file under the terms of the MPL, indicate your
33
+ * decision by deleting the provisions above and replace them with the notice
34
+ * and other provisions required by the GPL or the LGPL. If you do not delete
35
+ * the provisions above, a recipient may use your version of this file under
36
+ * the terms of any one of the MPL, the GPL or the LGPL.
37
+ *
38
+ * ***** END LICENSE BLOCK ***** */
39
+
40
+ /*
41
+ * PR hash table package.
42
+ */
43
+ #include "jsstddef.h"
44
+ #include <stdlib.h>
45
+ #include <string.h>
46
+ #include "jstypes.h"
47
+ #include "jsbit.h"
48
+ #include "jsutil.h" /* Added by JSIFY */
49
+ #include "jshash.h" /* Added by JSIFY */
50
+
51
+ /* Compute the number of buckets in ht */
52
+ #define NBUCKETS(ht) JS_BIT(JS_HASH_BITS - (ht)->shift)
53
+
54
+ /* The smallest table has 16 buckets */
55
+ #define MINBUCKETSLOG2 4
56
+ #define MINBUCKETS JS_BIT(MINBUCKETSLOG2)
57
+
58
+ /* Compute the maximum entries given n buckets that we will tolerate, ~90% */
59
+ #define OVERLOADED(n) ((n) - ((n) >> 3))
60
+
61
+ /* Compute the number of entries below which we shrink the table by half */
62
+ #define UNDERLOADED(n) (((n) > MINBUCKETS) ? ((n) >> 2) : 0)
63
+
64
+ /*
65
+ ** Stubs for default hash allocator ops.
66
+ */
67
+ static void *
68
+ DefaultAllocTable(void *pool, size_t size)
69
+ {
70
+ return malloc(size);
71
+ }
72
+
73
+ static void
74
+ DefaultFreeTable(void *pool, void *item, size_t size)
75
+ {
76
+ free(item);
77
+ }
78
+
79
+ static JSHashEntry *
80
+ DefaultAllocEntry(void *pool, const void *key)
81
+ {
82
+ return (JSHashEntry*) malloc(sizeof(JSHashEntry));
83
+ }
84
+
85
+ static void
86
+ DefaultFreeEntry(void *pool, JSHashEntry *he, uintN flag)
87
+ {
88
+ if (flag == HT_FREE_ENTRY)
89
+ free(he);
90
+ }
91
+
92
+ static JSHashAllocOps defaultHashAllocOps = {
93
+ DefaultAllocTable, DefaultFreeTable,
94
+ DefaultAllocEntry, DefaultFreeEntry
95
+ };
96
+
97
+ JS_PUBLIC_API(JSHashTable *)
98
+ JS_NewHashTable(uint32 n, JSHashFunction keyHash,
99
+ JSHashComparator keyCompare, JSHashComparator valueCompare,
100
+ JSHashAllocOps *allocOps, void *allocPriv)
101
+ {
102
+ JSHashTable *ht;
103
+ size_t nb;
104
+
105
+ if (n <= MINBUCKETS) {
106
+ n = MINBUCKETSLOG2;
107
+ } else {
108
+ n = JS_CeilingLog2(n);
109
+ if ((int32)n < 0)
110
+ return NULL;
111
+ }
112
+
113
+ if (!allocOps) allocOps = &defaultHashAllocOps;
114
+
115
+ ht = (JSHashTable*) allocOps->allocTable(allocPriv, sizeof *ht);
116
+ if (!ht)
117
+ return NULL;
118
+ memset(ht, 0, sizeof *ht);
119
+ ht->shift = JS_HASH_BITS - n;
120
+ n = JS_BIT(n);
121
+ nb = n * sizeof(JSHashEntry *);
122
+ ht->buckets = (JSHashEntry**) allocOps->allocTable(allocPriv, nb);
123
+ if (!ht->buckets) {
124
+ allocOps->freeTable(allocPriv, ht, nb);
125
+ return NULL;
126
+ }
127
+ memset(ht->buckets, 0, nb);
128
+
129
+ ht->keyHash = keyHash;
130
+ ht->keyCompare = keyCompare;
131
+ ht->valueCompare = valueCompare;
132
+ ht->allocOps = allocOps;
133
+ ht->allocPriv = allocPriv;
134
+ return ht;
135
+ }
136
+
137
+ JS_PUBLIC_API(void)
138
+ JS_HashTableDestroy(JSHashTable *ht)
139
+ {
140
+ uint32 i, n;
141
+ JSHashEntry *he, **hep;
142
+ JSHashAllocOps *allocOps = ht->allocOps;
143
+ void *allocPriv = ht->allocPriv;
144
+
145
+ n = NBUCKETS(ht);
146
+ for (i = 0; i < n; i++) {
147
+ hep = &ht->buckets[i];
148
+ while ((he = *hep) != NULL) {
149
+ *hep = he->next;
150
+ allocOps->freeEntry(allocPriv, he, HT_FREE_ENTRY);
151
+ }
152
+ }
153
+ #ifdef DEBUG
154
+ memset(ht->buckets, 0xDB, n * sizeof ht->buckets[0]);
155
+ #endif
156
+ allocOps->freeTable(allocPriv, ht->buckets, n * sizeof ht->buckets[0]);
157
+ #ifdef DEBUG
158
+ memset(ht, 0xDB, sizeof *ht);
159
+ #endif
160
+ allocOps->freeTable(allocPriv, ht, sizeof *ht);
161
+ }
162
+
163
+ /*
164
+ * Multiplicative hash, from Knuth 6.4.
165
+ */
166
+ #define BUCKET_HEAD(ht, keyHash) \
167
+ (&(ht)->buckets[((keyHash) * JS_GOLDEN_RATIO) >> (ht)->shift])
168
+
169
+ JS_PUBLIC_API(JSHashEntry **)
170
+ JS_HashTableRawLookup(JSHashTable *ht, JSHashNumber keyHash, const void *key)
171
+ {
172
+ JSHashEntry *he, **hep, **hep0;
173
+
174
+ #ifdef JS_HASHMETER
175
+ ht->nlookups++;
176
+ #endif
177
+ hep = hep0 = BUCKET_HEAD(ht, keyHash);
178
+ while ((he = *hep) != NULL) {
179
+ if (he->keyHash == keyHash && ht->keyCompare(key, he->key)) {
180
+ /* Move to front of chain if not already there */
181
+ if (hep != hep0) {
182
+ *hep = he->next;
183
+ he->next = *hep0;
184
+ *hep0 = he;
185
+ }
186
+ return hep0;
187
+ }
188
+ hep = &he->next;
189
+ #ifdef JS_HASHMETER
190
+ ht->nsteps++;
191
+ #endif
192
+ }
193
+ return hep;
194
+ }
195
+
196
+ static JSBool
197
+ Resize(JSHashTable *ht, uint32 newshift)
198
+ {
199
+ size_t nb, nentries, i;
200
+ JSHashEntry **oldbuckets, *he, *next, **hep;
201
+ size_t nold = NBUCKETS(ht);
202
+
203
+ JS_ASSERT(newshift < JS_HASH_BITS);
204
+
205
+ nb = (size_t)1 << (JS_HASH_BITS - newshift);
206
+
207
+ /* Integer overflow protection. */
208
+ if (nb > (size_t)-1 / sizeof(JSHashEntry*))
209
+ return JS_FALSE;
210
+ nb *= sizeof(JSHashEntry*);
211
+
212
+ oldbuckets = ht->buckets;
213
+ ht->buckets = (JSHashEntry**)ht->allocOps->allocTable(ht->allocPriv, nb);
214
+ if (!ht->buckets) {
215
+ ht->buckets = oldbuckets;
216
+ return JS_FALSE;
217
+ }
218
+ memset(ht->buckets, 0, nb);
219
+
220
+ ht->shift = newshift;
221
+ nentries = ht->nentries;
222
+
223
+ for (i = 0; nentries != 0; i++) {
224
+ for (he = oldbuckets[i]; he; he = next) {
225
+ JS_ASSERT(nentries != 0);
226
+ --nentries;
227
+ next = he->next;
228
+ hep = BUCKET_HEAD(ht, he->keyHash);
229
+
230
+ /*
231
+ * We do not require unique entries, instead appending he to the
232
+ * chain starting at hep.
233
+ */
234
+ while (*hep)
235
+ hep = &(*hep)->next;
236
+ he->next = NULL;
237
+ *hep = he;
238
+ }
239
+ }
240
+ #ifdef DEBUG
241
+ memset(oldbuckets, 0xDB, nold * sizeof oldbuckets[0]);
242
+ #endif
243
+ ht->allocOps->freeTable(ht->allocPriv, oldbuckets,
244
+ nold * sizeof oldbuckets[0]);
245
+ return JS_TRUE;
246
+ }
247
+
248
+ JS_PUBLIC_API(JSHashEntry *)
249
+ JS_HashTableRawAdd(JSHashTable *ht, JSHashEntry **hep,
250
+ JSHashNumber keyHash, const void *key, void *value)
251
+ {
252
+ uint32 n;
253
+ JSHashEntry *he;
254
+
255
+ /* Grow the table if it is overloaded */
256
+ n = NBUCKETS(ht);
257
+ if (ht->nentries >= OVERLOADED(n)) {
258
+ if (!Resize(ht, ht->shift - 1))
259
+ return NULL;
260
+ #ifdef JS_HASHMETER
261
+ ht->ngrows++;
262
+ #endif
263
+ hep = JS_HashTableRawLookup(ht, keyHash, key);
264
+ }
265
+
266
+ /* Make a new key value entry */
267
+ he = ht->allocOps->allocEntry(ht->allocPriv, key);
268
+ if (!he)
269
+ return NULL;
270
+ he->keyHash = keyHash;
271
+ he->key = key;
272
+ he->value = value;
273
+ he->next = *hep;
274
+ *hep = he;
275
+ ht->nentries++;
276
+ return he;
277
+ }
278
+
279
+ JS_PUBLIC_API(JSHashEntry *)
280
+ JS_HashTableAdd(JSHashTable *ht, const void *key, void *value)
281
+ {
282
+ JSHashNumber keyHash;
283
+ JSHashEntry *he, **hep;
284
+
285
+ keyHash = ht->keyHash(key);
286
+ hep = JS_HashTableRawLookup(ht, keyHash, key);
287
+ if ((he = *hep) != NULL) {
288
+ /* Hit; see if values match */
289
+ if (ht->valueCompare(he->value, value)) {
290
+ /* key,value pair is already present in table */
291
+ return he;
292
+ }
293
+ if (he->value)
294
+ ht->allocOps->freeEntry(ht->allocPriv, he, HT_FREE_VALUE);
295
+ he->value = value;
296
+ return he;
297
+ }
298
+ return JS_HashTableRawAdd(ht, hep, keyHash, key, value);
299
+ }
300
+
301
+ JS_PUBLIC_API(void)
302
+ JS_HashTableRawRemove(JSHashTable *ht, JSHashEntry **hep, JSHashEntry *he)
303
+ {
304
+ uint32 n;
305
+
306
+ *hep = he->next;
307
+ ht->allocOps->freeEntry(ht->allocPriv, he, HT_FREE_ENTRY);
308
+
309
+ /* Shrink table if it's underloaded */
310
+ n = NBUCKETS(ht);
311
+ if (--ht->nentries < UNDERLOADED(n)) {
312
+ Resize(ht, ht->shift + 1);
313
+ #ifdef JS_HASHMETER
314
+ ht->nshrinks++;
315
+ #endif
316
+ }
317
+ }
318
+
319
+ JS_PUBLIC_API(JSBool)
320
+ JS_HashTableRemove(JSHashTable *ht, const void *key)
321
+ {
322
+ JSHashNumber keyHash;
323
+ JSHashEntry *he, **hep;
324
+
325
+ keyHash = ht->keyHash(key);
326
+ hep = JS_HashTableRawLookup(ht, keyHash, key);
327
+ if ((he = *hep) == NULL)
328
+ return JS_FALSE;
329
+
330
+ /* Hit; remove element */
331
+ JS_HashTableRawRemove(ht, hep, he);
332
+ return JS_TRUE;
333
+ }
334
+
335
+ JS_PUBLIC_API(void *)
336
+ JS_HashTableLookup(JSHashTable *ht, const void *key)
337
+ {
338
+ JSHashNumber keyHash;
339
+ JSHashEntry *he, **hep;
340
+
341
+ keyHash = ht->keyHash(key);
342
+ hep = JS_HashTableRawLookup(ht, keyHash, key);
343
+ if ((he = *hep) != NULL) {
344
+ return he->value;
345
+ }
346
+ return NULL;
347
+ }
348
+
349
+ /*
350
+ ** Iterate over the entries in the hash table calling func for each
351
+ ** entry found. Stop if "f" says to (return value & JS_ENUMERATE_STOP).
352
+ ** Return a count of the number of elements scanned.
353
+ */
354
+ JS_PUBLIC_API(int)
355
+ JS_HashTableEnumerateEntries(JSHashTable *ht, JSHashEnumerator f, void *arg)
356
+ {
357
+ JSHashEntry *he, **hep, **bucket;
358
+ uint32 nlimit, n, nbuckets, newlog2;
359
+ int rv;
360
+
361
+ nlimit = ht->nentries;
362
+ n = 0;
363
+ for (bucket = ht->buckets; n != nlimit; ++bucket) {
364
+ hep = bucket;
365
+ while ((he = *hep) != NULL) {
366
+ JS_ASSERT(n < nlimit);
367
+ rv = f(he, n, arg);
368
+ n++;
369
+ if (rv & HT_ENUMERATE_REMOVE) {
370
+ *hep = he->next;
371
+ ht->allocOps->freeEntry(ht->allocPriv, he, HT_FREE_ENTRY);
372
+ --ht->nentries;
373
+ } else {
374
+ hep = &he->next;
375
+ }
376
+ if (rv & HT_ENUMERATE_STOP) {
377
+ goto out;
378
+ }
379
+ }
380
+ }
381
+
382
+ out:
383
+ /* Shrink table if removal of entries made it underloaded */
384
+ if (ht->nentries != nlimit) {
385
+ JS_ASSERT(ht->nentries < nlimit);
386
+ nbuckets = NBUCKETS(ht);
387
+ if (MINBUCKETS < nbuckets && ht->nentries < UNDERLOADED(nbuckets)) {
388
+ newlog2 = JS_CeilingLog2(ht->nentries);
389
+ if (newlog2 < MINBUCKETSLOG2)
390
+ newlog2 = MINBUCKETSLOG2;
391
+
392
+ /* Check that we really shrink the table. */
393
+ JS_ASSERT(JS_HASH_BITS - ht->shift > newlog2);
394
+ Resize(ht, JS_HASH_BITS - newlog2);
395
+ }
396
+ }
397
+ return (int)n;
398
+ }
399
+
400
+ #ifdef JS_HASHMETER
401
+ #include <stdio.h>
402
+
403
+ JS_PUBLIC_API(void)
404
+ JS_HashTableDumpMeter(JSHashTable *ht, JSHashEnumerator dump, FILE *fp)
405
+ {
406
+ double sqsum, mean, sigma;
407
+ uint32 nchains, nbuckets;
408
+ uint32 i, n, maxChain, maxChainLen;
409
+ JSHashEntry *he;
410
+
411
+ sqsum = 0;
412
+ nchains = 0;
413
+ maxChain = maxChainLen = 0;
414
+ nbuckets = NBUCKETS(ht);
415
+ for (i = 0; i < nbuckets; i++) {
416
+ he = ht->buckets[i];
417
+ if (!he)
418
+ continue;
419
+ nchains++;
420
+ for (n = 0; he; he = he->next)
421
+ n++;
422
+ sqsum += n * n;
423
+ if (n > maxChainLen) {
424
+ maxChainLen = n;
425
+ maxChain = i;
426
+ }
427
+ }
428
+
429
+ mean = JS_MeanAndStdDev(nchains, ht->nentries, sqsum, &sigma);
430
+
431
+ fprintf(fp, "\nHash table statistics:\n");
432
+ fprintf(fp, " number of lookups: %u\n", ht->nlookups);
433
+ fprintf(fp, " number of entries: %u\n", ht->nentries);
434
+ fprintf(fp, " number of grows: %u\n", ht->ngrows);
435
+ fprintf(fp, " number of shrinks: %u\n", ht->nshrinks);
436
+ fprintf(fp, " mean steps per hash: %g\n", (double)ht->nsteps
437
+ / ht->nlookups);
438
+ fprintf(fp, "mean hash chain length: %g\n", mean);
439
+ fprintf(fp, " standard deviation: %g\n", sigma);
440
+ fprintf(fp, " max hash chain length: %u\n", maxChainLen);
441
+ fprintf(fp, " max hash chain: [%u]\n", maxChain);
442
+
443
+ for (he = ht->buckets[maxChain], i = 0; he; he = he->next, i++)
444
+ if (dump(he, i, fp) != HT_ENUMERATE_NEXT)
445
+ break;
446
+ }
447
+ #endif /* JS_HASHMETER */
448
+
449
+ JS_PUBLIC_API(int)
450
+ JS_HashTableDump(JSHashTable *ht, JSHashEnumerator dump, FILE *fp)
451
+ {
452
+ int count;
453
+
454
+ count = JS_HashTableEnumerateEntries(ht, dump, fp);
455
+ #ifdef JS_HASHMETER
456
+ JS_HashTableDumpMeter(ht, dump, fp);
457
+ #endif
458
+ return count;
459
+ }
460
+
461
+ JS_PUBLIC_API(JSHashNumber)
462
+ JS_HashString(const void *key)
463
+ {
464
+ JSHashNumber h;
465
+ const unsigned char *s;
466
+
467
+ h = 0;
468
+ for (s = (const unsigned char *)key; *s; s++)
469
+ h = JS_ROTATE_LEFT32(h, 4) ^ *s;
470
+ return h;
471
+ }
472
+
473
+ JS_PUBLIC_API(int)
474
+ JS_CompareValues(const void *v1, const void *v2)
475
+ {
476
+ return v1 == v2;
477
+ }