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,88 @@
1
+ /* ***** BEGIN LICENSE BLOCK *****
2
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
3
+ *
4
+ * The contents of this file are subject to the Mozilla Public License Version
5
+ * 1.1 (the "License"); you may not use this file except in compliance with
6
+ * the License. You may obtain a copy of the License at
7
+ * http://www.mozilla.org/MPL/
8
+ *
9
+ * Software distributed under the License is distributed on an "AS IS" basis,
10
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11
+ * for the specific language governing rights and limitations under the
12
+ * License.
13
+ *
14
+ * The Original Code is [Open Source Virtual Machine].
15
+ *
16
+ * The Initial Developer of the Original Code is
17
+ * Adobe System Incorporated.
18
+ * Portions created by the Initial Developer are Copyright (C) 2004-2007
19
+ * the Initial Developer. All Rights Reserved.
20
+ *
21
+ * Contributor(s):
22
+ * Adobe AS3 Team
23
+ *
24
+ * Alternatively, the contents of this file may be used under the terms of
25
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
26
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
27
+ * in which case the provisions of the GPL or the LGPL are applicable instead
28
+ * of those above. If you wish to allow use of your version of this file only
29
+ * under the terms of either the GPL or the LGPL, and not to allow others to
30
+ * use your version of this file under the terms of the MPL, indicate your
31
+ * decision by deleting the provisions above and replace them with the notice
32
+ * and other provisions required by the GPL or the LGPL. If you do not delete
33
+ * the provisions above, a recipient may use your version of this file under
34
+ * the terms of any one of the MPL, the GPL or the LGPL.
35
+ *
36
+ * ***** END LICENSE BLOCK ***** */
37
+
38
+ #ifndef __nanojit_TraceTreeDrawer__
39
+ #define __nanojit_TraceTreeDrawer__
40
+ #include <stdio.h>
41
+
42
+ namespace nanojit {
43
+ #ifdef AVMPLUS_VERBOSE
44
+ using namespace avmplus;
45
+
46
+ class TraceTreeDrawer : public GCFinalizedObject {
47
+ public:
48
+ TraceTreeDrawer(Fragmento *frago, AvmCore *core, char *fileName);
49
+ ~TraceTreeDrawer();
50
+
51
+ void createGraphHeader();
52
+ void createGraphFooter();
53
+
54
+ void addEdge(Fragment *from, Fragment *to);
55
+ void addNode(Fragment *fragment);
56
+ void addNode(Fragment *fragment, const char *color);
57
+
58
+ void draw(Fragment *rootFragment);
59
+ void recursiveDraw(Fragment *root);
60
+
61
+ private:
62
+ FILE* _fstream;
63
+ DWB(AvmCore *) _core;
64
+ DWB(Fragmento *) _frago;
65
+ DWB(LabelMap *) _labels;
66
+ char * _fileName;
67
+
68
+ void addBackEdges(Fragment *f);
69
+ void addMergeNode(Fragment *f);
70
+
71
+ bool isValidSideExit(struct SideExit *exit);
72
+ bool isCompiled(Fragment *f);
73
+ bool isLoopFragment(Fragment *f);
74
+ bool isCrossFragment(Fragment *f);
75
+ bool isMergeFragment(Fragment *f);
76
+ bool isSingleTrace(Fragment *f);
77
+ bool isSpawnedTrace(Fragment *f);
78
+ bool isBackEdgeSideExit(Fragment *f);
79
+ bool hasEndOfTraceFrag(Fragment *f);
80
+ bool hasCompiledBranch(Fragment *f);
81
+
82
+ void printTreeStatus(Fragment *root);
83
+ void drawDirectedEdge();
84
+ };
85
+ #endif
86
+ }
87
+
88
+ #endif /*TRACETREEDRAWER_H_*/
@@ -0,0 +1,56 @@
1
+ /* ***** BEGIN LICENSE BLOCK *****
2
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
3
+ *
4
+ * The contents of this file are subject to the Mozilla Public License Version 1.1 (the
5
+ * "License"); you may not use this file except in compliance with the License. You may obtain
6
+ * a copy of the License at http://www.mozilla.org/MPL/
7
+ *
8
+ * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
9
+ * WARRANTY OF ANY KIND, either express or implied. See the License for the specific
10
+ * language governing rights and limitations under the License.
11
+ *
12
+ * The Original Code is [Open Source Virtual Machine.]
13
+ *
14
+ * The Initial Developer of the Original Code is Adobe System Incorporated. Portions created
15
+ * by the Initial Developer are Copyright (C)[ 2004-2006 ] Adobe Systems Incorporated. All Rights
16
+ * Reserved.
17
+ *
18
+ * Contributor(s): Adobe AS3 Team
19
+ * Andreas Gal <gal@mozilla.com>
20
+ *
21
+ * Alternatively, the contents of this file may be used under the terms of either the GNU
22
+ * General Public License Version 2 or later (the "GPL"), or the GNU Lesser General Public
23
+ * License Version 2.1 or later (the "LGPL"), in which case the provisions of the GPL or the
24
+ * LGPL are applicable instead of those above. If you wish to allow use of your version of this
25
+ * file only under the terms of either the GPL or the LGPL, and not to allow others to use your
26
+ * version of this file under the terms of the MPL, indicate your decision by deleting provisions
27
+ * above and replace them with the notice and other provisions required by the GPL or the
28
+ * LGPL. If you do not delete the provisions above, a recipient may use your version of this file
29
+ * under the terms of any one of the MPL, the GPL or the LGPL.
30
+ *
31
+ ***** END LICENSE BLOCK ***** */
32
+
33
+ #include "avmplus.h"
34
+
35
+ using namespace avmplus;
36
+
37
+ Config AvmCore::config;
38
+ static GC _gc;
39
+ GC* AvmCore::gc = &_gc;
40
+ GCHeap GC::heap;
41
+ String* AvmCore::k_str[] = { (String*)"" };
42
+
43
+ #ifdef _DEBUG
44
+ // NanoAssertFail matches JS_Assert in jsutil.cpp.
45
+ void NanoAssertFail()
46
+ {
47
+ #if defined(WIN32)
48
+ DebugBreak();
49
+ exit(3);
50
+ #elif defined(XP_OS2) || (defined(__GNUC__) && defined(__i386))
51
+ asm("int $3");
52
+ #endif
53
+
54
+ abort();
55
+ }
56
+ #endif
@@ -0,0 +1,1016 @@
1
+ /* ***** BEGIN LICENSE BLOCK *****
2
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
3
+ *
4
+ * The contents of this file are subject to the Mozilla Public License Version 1.1 (the
5
+ * "License"); you may not use this file except in compliance with the License. You may obtain
6
+ * a copy of the License at http://www.mozilla.org/MPL/
7
+ *
8
+ * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
9
+ * WARRANTY OF ANY KIND, either express or implied. See the License for the specific
10
+ * language governing rights and limitations under the License.
11
+ *
12
+ * The Original Code is [Open Source Virtual Machine.]
13
+ *
14
+ * The Initial Developer of the Original Code is Adobe System Incorporated. Portions created
15
+ * by the Initial Developer are Copyright (C)[ 2004-2006 ] Adobe Systems Incorporated. All Rights
16
+ * Reserved.
17
+ *
18
+ * Contributor(s): Adobe AS3 Team
19
+ * Andreas Gal <gal@mozilla.com>
20
+ * Asko Tontti <atontti@cc.hut.fi>
21
+ *
22
+ * Alternatively, the contents of this file may be used under the terms of either the GNU
23
+ * General Public License Version 2 or later (the "GPL"), or the GNU Lesser General Public
24
+ * License Version 2.1 or later (the "LGPL"), in which case the provisions of the GPL or the
25
+ * LGPL are applicable instead of those above. If you wish to allow use of your version of this
26
+ * file only under the terms of either the GPL or the LGPL, and not to allow others to use your
27
+ * version of this file under the terms of the MPL, indicate your decision by deleting provisions
28
+ * above and replace them with the notice and other provisions required by the GPL or the
29
+ * LGPL. If you do not delete the provisions above, a recipient may use your version of this file
30
+ * under the terms of any one of the MPL, the GPL or the LGPL.
31
+ *
32
+ ***** END LICENSE BLOCK ***** */
33
+
34
+ #ifndef avm_h___
35
+ #define avm_h___
36
+
37
+ #include <assert.h>
38
+ #include <string.h>
39
+ #include <stdio.h>
40
+ #include <stdlib.h>
41
+
42
+ #if defined(AVMPLUS_UNIX)
43
+ #include <unistd.h>
44
+ #include <sys/mman.h>
45
+ #endif
46
+
47
+ #include "jstypes.h"
48
+
49
+ #if !defined(AVMPLUS_LITTLE_ENDIAN) && !defined(AVMPLUS_BIG_ENDIAN)
50
+ #ifdef IS_BIG_ENDIAN
51
+ #define AVMPLUS_BIG_ENDIAN
52
+ #else
53
+ #define AVMPLUS_LITTLE_ENDIAN
54
+ #endif
55
+ #endif
56
+
57
+ #define FASTCALL JS_FASTCALL
58
+
59
+ #if defined(JS_NO_FASTCALL)
60
+ #define NJ_NO_FASTCALL
61
+ #if defined(AVMPLUS_IA32)
62
+ #define SIMULATE_FASTCALL(lr, state_ptr, frag_ptr, func_addr) \
63
+ asm volatile( \
64
+ "call *%%esi" \
65
+ : "=a" (lr) \
66
+ : "c" (state_ptr), "d" (frag_ptr), "S" (func_addr) \
67
+ : "memory", "cc" \
68
+ );
69
+ #endif /* defined(AVMPLUS_IA32) */
70
+ #endif /* defined(JS_NO_FASTCALL) */
71
+
72
+ #ifdef WIN32
73
+ #include <windows.h>
74
+ #endif
75
+
76
+ #if defined(DEBUG) || defined(_MSC_VER) && _MSC_VER < 1400
77
+ #if !defined _DEBUG
78
+ #define _DEBUG
79
+ #endif
80
+ #define NJ_VERBOSE 1
81
+ #define NJ_PROFILE 1
82
+ #include <stdarg.h>
83
+ #endif
84
+
85
+ #ifdef _DEBUG
86
+ void NanoAssertFail();
87
+ #endif
88
+
89
+ #define AvmAssert(x) assert(x)
90
+ #define AvmAssertMsg(x, y)
91
+ #define AvmDebugLog(x) printf x
92
+
93
+ #if defined(AVMPLUS_IA32)
94
+ #if defined(_MSC_VER)
95
+ __declspec(naked) static inline __int64 rdtsc()
96
+ {
97
+ __asm
98
+ {
99
+ rdtsc;
100
+ ret;
101
+ }
102
+ }
103
+ #elif defined(SOLARIS)
104
+ static inline unsigned long long rdtsc(void)
105
+ {
106
+ unsigned long long int x;
107
+ asm volatile (".byte 0x0f, 0x31" : "=A" (x));
108
+ return x;
109
+ }
110
+ #elif defined(__i386__)
111
+ static __inline__ unsigned long long rdtsc(void)
112
+ {
113
+ unsigned long long int x;
114
+ __asm__ volatile (".byte 0x0f, 0x31" : "=A" (x));
115
+ return x;
116
+ }
117
+ #endif /* compilers */
118
+
119
+ #elif defined(__x86_64__)
120
+
121
+ static __inline__ uint64_t rdtsc(void)
122
+ {
123
+ unsigned hi, lo;
124
+ __asm__ __volatile__ ("rdtsc" : "=a"(lo), "=d"(hi));
125
+ return ( (uint64_t)lo)|( ((uint64_t)hi)<<32 );
126
+ }
127
+
128
+ #elif defined(__powerpc__)
129
+
130
+ typedef unsigned long long int unsigned long long;
131
+
132
+ static __inline__ unsigned long long rdtsc(void)
133
+ {
134
+ unsigned long long int result=0;
135
+ unsigned long int upper, lower,tmp;
136
+ __asm__ volatile(
137
+ "0: \n"
138
+ "\tmftbu %0 \n"
139
+ "\tmftb %1 \n"
140
+ "\tmftbu %2 \n"
141
+ "\tcmpw %2,%0 \n"
142
+ "\tbne 0b \n"
143
+ : "=r"(upper),"=r"(lower),"=r"(tmp)
144
+ );
145
+ result = upper;
146
+ result = result<<32;
147
+ result = result|lower;
148
+
149
+ return(result);
150
+ }
151
+
152
+ #endif /* architecture */
153
+
154
+ struct JSContext;
155
+
156
+ namespace avmplus {
157
+
158
+ class GC;
159
+
160
+ class GCObject
161
+ {
162
+ public:
163
+ inline void*
164
+ operator new(size_t size, GC* gc)
165
+ {
166
+ return calloc(1, size);
167
+ }
168
+
169
+ static void operator delete (void *gcObject)
170
+ {
171
+ free(gcObject);
172
+ }
173
+ };
174
+
175
+ #define MMGC_SUBCLASS_DECL : public avmplus::GCObject
176
+
177
+ class GCFinalizedObject : public GCObject
178
+ {
179
+ public:
180
+ static void operator delete (void *gcObject)
181
+ {
182
+ free(gcObject);
183
+ }
184
+ };
185
+
186
+ class GCHeap
187
+ {
188
+ public:
189
+ int32_t kNativePageSize;
190
+
191
+ GCHeap()
192
+ {
193
+ #if defined _SC_PAGE_SIZE
194
+ kNativePageSize = sysconf(_SC_PAGE_SIZE);
195
+ #else
196
+ kNativePageSize = 4096; // @todo: what is this?
197
+ #endif
198
+ }
199
+
200
+ inline void*
201
+ Alloc(uint32_t pages)
202
+ {
203
+ #ifdef XP_WIN
204
+ return VirtualAlloc(NULL,
205
+ pages * kNativePageSize,
206
+ MEM_COMMIT | MEM_RESERVE,
207
+ PAGE_EXECUTE_READWRITE);
208
+ #elif defined AVMPLUS_UNIX
209
+ /**
210
+ * Don't use normal heap with mprotect+PROT_EXEC for executable code.
211
+ * SELinux and friends don't allow this.
212
+ */
213
+ return mmap(NULL,
214
+ pages * kNativePageSize,
215
+ PROT_READ | PROT_WRITE | PROT_EXEC,
216
+ MAP_PRIVATE | MAP_ANON,
217
+ -1,
218
+ 0);
219
+ #else
220
+ return valloc(pages * kNativePageSize);
221
+ #endif
222
+ }
223
+
224
+ inline void
225
+ Free(void* p, uint32_t pages)
226
+ {
227
+ #ifdef XP_WIN
228
+ VirtualFree(p, 0, MEM_RELEASE);
229
+ #elif defined AVMPLUS_UNIX
230
+ #if defined SOLARIS
231
+ munmap((char*)p, pages * kNativePageSize);
232
+ #else
233
+ munmap(p, pages * kNativePageSize);
234
+ #endif
235
+ #else
236
+ free(p);
237
+ #endif
238
+ }
239
+
240
+ };
241
+
242
+ class GC
243
+ {
244
+ static GCHeap heap;
245
+
246
+ public:
247
+ /**
248
+ * flags to be passed as second argument to alloc
249
+ */
250
+ enum AllocFlags
251
+ {
252
+ kZero=1,
253
+ kContainsPointers=2,
254
+ kFinalize=4,
255
+ kRCObject=8
256
+ };
257
+
258
+ static inline void*
259
+ Alloc(uint32_t bytes, int flags=kZero)
260
+ {
261
+ if (flags & kZero)
262
+ return calloc(1, bytes);
263
+ else
264
+ return malloc(bytes);
265
+ }
266
+
267
+ static inline void
268
+ Free(void* p)
269
+ {
270
+ free(p);
271
+ }
272
+
273
+ static inline GCHeap*
274
+ GetGCHeap()
275
+ {
276
+ return &heap;
277
+ }
278
+ };
279
+
280
+ #define DWB(x) x
281
+ #define DRCWB(x) x
282
+ #define WB(gc, container, addr, value) do { *(addr) = (value); } while(0)
283
+ #define WBRC(gc, container, addr, value) do { *(addr) = (value); } while(0)
284
+
285
+ #define MMGC_MEM_TYPE(x)
286
+
287
+ typedef int FunctionID;
288
+
289
+ class String
290
+ {
291
+ };
292
+
293
+ typedef class String AvmString;
294
+
295
+ class StringNullTerminatedUTF8
296
+ {
297
+ const char* cstr;
298
+
299
+ public:
300
+ StringNullTerminatedUTF8(GC* gc, String* s)
301
+ {
302
+ cstr = strdup((const char*)s);
303
+ }
304
+
305
+ ~StringNullTerminatedUTF8()
306
+ {
307
+ free((void*)cstr);
308
+ }
309
+
310
+ inline
311
+ const char* c_str()
312
+ {
313
+ return cstr;
314
+ }
315
+ };
316
+
317
+ typedef String* Stringp;
318
+
319
+ class Config
320
+ {
321
+ public:
322
+ Config() {
323
+ memset(this, 0, sizeof(Config));
324
+ #ifdef DEBUG
325
+ verbose = getenv("TRACEMONKEY") && strstr(getenv("TRACEMONKEY"), "verbose");
326
+ verbose_addrs = 1;
327
+ verbose_exits = 1;
328
+ verbose_live = 1;
329
+ show_stats = 1;
330
+ #endif
331
+ }
332
+
333
+ uint32_t tree_opt:1;
334
+ uint32_t quiet_opt:1;
335
+ uint32_t verbose:1;
336
+ uint32_t verbose_addrs:1;
337
+ uint32_t verbose_live:1;
338
+ uint32_t verbose_exits:1;
339
+ uint32_t show_stats:1;
340
+
341
+ #if defined (AVMPLUS_IA32)
342
+ // Whether or not we can use SSE2 instructions and conditional moves.
343
+ bool sse2;
344
+ bool use_cmov;
345
+ #endif
346
+
347
+ #if defined (AVMPLUS_ARM)
348
+ // whethergenerate VFP instructions
349
+ # if defined (NJ_FORCE_SOFTFLOAT)
350
+ static const bool vfp = false;
351
+ # else
352
+ bool vfp;
353
+ # endif
354
+
355
+ // whether generate ARMv6t2 instructions (MOVT/MOVW)
356
+ # if defined (NJ_FORCE_NO_ARM_V6T2)
357
+ static const bool v6t2 = false;
358
+ # else
359
+ bool v6t2;
360
+ # endif
361
+ #endif
362
+
363
+ #if defined (NJ_FORCE_SOFTFLOAT)
364
+ static const bool soft_float = true;
365
+ #else
366
+ bool soft_float;
367
+ #endif
368
+ };
369
+
370
+ static const int kstrconst_emptyString = 0;
371
+
372
+ class AvmInterpreter
373
+ {
374
+ class Labels {
375
+ public:
376
+ const char* format(const void* ip)
377
+ {
378
+ static char buf[33];
379
+ sprintf(buf, "%p", ip);
380
+ return buf;
381
+ }
382
+ };
383
+
384
+ Labels _labels;
385
+ public:
386
+ Labels* labels;
387
+
388
+ AvmInterpreter()
389
+ {
390
+ labels = &_labels;
391
+ }
392
+
393
+ };
394
+
395
+ class AvmConsole
396
+ {
397
+ public:
398
+ AvmConsole& operator<<(const char* s)
399
+ {
400
+ fprintf(stdout, "%s", s);
401
+ return *this;
402
+ }
403
+ };
404
+
405
+ class AvmCore
406
+ {
407
+ public:
408
+ AvmInterpreter interp;
409
+ AvmConsole console;
410
+
411
+ static Config config;
412
+ static GC* gc;
413
+ static String* k_str[];
414
+
415
+ #ifdef AVMPLUS_IA32
416
+ static inline bool
417
+ use_sse2()
418
+ {
419
+ return config.sse2;
420
+ }
421
+ #endif
422
+
423
+ static inline bool
424
+ use_cmov()
425
+ {
426
+ #ifdef AVMPLUS_IA32
427
+ return config.use_cmov;
428
+ #else
429
+ return true;
430
+ #endif
431
+ }
432
+
433
+ static inline bool
434
+ quiet_opt()
435
+ {
436
+ return config.quiet_opt;
437
+ }
438
+
439
+ static inline bool
440
+ verbose()
441
+ {
442
+ return config.verbose;
443
+ }
444
+
445
+ static inline GC*
446
+ GetGC()
447
+ {
448
+ return gc;
449
+ }
450
+
451
+ static inline String* newString(const char* cstr) {
452
+ return (String*)strdup(cstr);
453
+ }
454
+
455
+ static inline void freeString(String* str) {
456
+ return free((char*)str);
457
+ }
458
+ };
459
+
460
+ class OSDep
461
+ {
462
+ public:
463
+ static inline void
464
+ getDate()
465
+ {
466
+ }
467
+ };
468
+
469
+ /**
470
+ * The List<T> template implements a simple List, which can
471
+ * be templated to support different types.
472
+ *
473
+ * Elements can be added to the end, modified in the middle,
474
+ * but no holes are allowed. That is for set(n, v) to work
475
+ * size() > n
476
+ *
477
+ * Note that [] operators are provided and you can violate the
478
+ * set properties using these operators, if you want a real
479
+ * list dont use the [] operators, if you want a general purpose
480
+ * array use the [] operators.
481
+ */
482
+
483
+ enum ListElementType {
484
+ LIST_NonGCObjects = 0,
485
+ LIST_GCObjects = 1,
486
+ LIST_RCObjects = 2
487
+ };
488
+
489
+ template <typename T, ListElementType kElementType>
490
+ class List
491
+ {
492
+ public:
493
+ enum { kInitialCapacity = 128 };
494
+
495
+ List(GC *_gc, uint32_t _capacity=kInitialCapacity) : data(NULL), len(0), capacity(0)
496
+ {
497
+ ensureCapacity(_capacity);
498
+ }
499
+
500
+ ~List()
501
+ {
502
+ //clear();
503
+ destroy();
504
+ // zero out in case we are part of an RCObject
505
+ len = 0;
506
+ }
507
+
508
+ inline void destroy()
509
+ {
510
+ if (data)
511
+ free(data);
512
+ }
513
+
514
+ const T *getData() const { return data; }
515
+
516
+ // 'this' steals the guts of 'that' and 'that' gets reset.
517
+ void FASTCALL become(List& that)
518
+ {
519
+ this->destroy();
520
+
521
+ this->data = that.data;
522
+ this->len = that.len;
523
+ this->capacity = that.capacity;
524
+
525
+ that.data = 0;
526
+ that.len = 0;
527
+ that.capacity = 0;
528
+ }
529
+ uint32_t FASTCALL add(T value)
530
+ {
531
+ if (len >= capacity) {
532
+ grow();
533
+ }
534
+ wb(len++, value);
535
+ return len-1;
536
+ }
537
+
538
+ inline bool isEmpty() const
539
+ {
540
+ return len == 0;
541
+ }
542
+
543
+ inline uint32_t size() const
544
+ {
545
+ return len;
546
+ }
547
+
548
+ inline T get(uint32_t index) const
549
+ {
550
+ AvmAssert(index < len);
551
+ return *(T*)(data + index);
552
+ }
553
+
554
+ void FASTCALL set(uint32_t index, T value)
555
+ {
556
+ AvmAssert(index < capacity);
557
+ if (index >= len)
558
+ {
559
+ len = index+1;
560
+ }
561
+ AvmAssert(len <= capacity);
562
+ wb(index, value);
563
+ }
564
+
565
+ void add(const List<T, kElementType>& l)
566
+ {
567
+ ensureCapacity(len+l.size());
568
+ // FIXME: make RCObject version
569
+ AvmAssert(kElementType != LIST_RCObjects);
570
+ arraycopy(l.getData(), 0, data, len, l.size());
571
+ len += l.size();
572
+ }
573
+
574
+ inline void clear()
575
+ {
576
+ zero_range(0, len);
577
+ len = 0;
578
+ }
579
+
580
+ int FASTCALL indexOf(T value) const
581
+ {
582
+ for(uint32_t i=0; i<len; i++)
583
+ if (get(i) == value)
584
+ return i;
585
+ return -1;
586
+ }
587
+
588
+ int FASTCALL lastIndexOf(T value) const
589
+ {
590
+ for(int32_t i=len-1; i>=0; i--)
591
+ if (get(i) == value)
592
+ return i;
593
+ return -1;
594
+ }
595
+
596
+ inline T last() const
597
+ {
598
+ return get(len-1);
599
+ }
600
+
601
+ T FASTCALL removeLast()
602
+ {
603
+ if(isEmpty())
604
+ return undef_list_val();
605
+ T t = get(len-1);
606
+ set(len-1, undef_list_val());
607
+ len--;
608
+ return t;
609
+ }
610
+
611
+ inline T operator[](uint32_t index) const
612
+ {
613
+ AvmAssert(index < capacity);
614
+ return get(index);
615
+ }
616
+
617
+ void FASTCALL ensureCapacity(uint32_t cap)
618
+ {
619
+ if (cap > capacity) {
620
+ if (data == NULL) {
621
+ data = (T*)calloc(1, factor(cap));
622
+ } else {
623
+ data = (T*)realloc(data, factor(cap));
624
+ zero_range(capacity, cap - capacity);
625
+ }
626
+ capacity = cap;
627
+ }
628
+ }
629
+
630
+ void FASTCALL insert(uint32_t index, T value, uint32_t count = 1)
631
+ {
632
+ AvmAssert(index <= len);
633
+ AvmAssert(count > 0);
634
+ ensureCapacity(len+count);
635
+ memmove(data + index + count, data + index, factor(len - index));
636
+ wbzm(index, index+count, value);
637
+ len += count;
638
+ }
639
+
640
+ T FASTCALL removeAt(uint32_t index)
641
+ {
642
+ T old = get(index);
643
+ // dec the refcount on the one we're removing
644
+ wb(index, undef_list_val());
645
+ memmove(data + index, data + index + 1, factor(len - index - 1));
646
+ len--;
647
+ return old;
648
+ }
649
+
650
+ private:
651
+ void FASTCALL grow()
652
+ {
653
+ // growth is fast at first, then slows at larger list sizes.
654
+ uint32_t newMax = 0;
655
+ const uint32_t curMax = capacity;
656
+ if (curMax == 0)
657
+ newMax = kInitialCapacity;
658
+ else if(curMax > 15)
659
+ newMax = curMax * 3/2;
660
+ else
661
+ newMax = curMax * 2;
662
+
663
+ ensureCapacity(newMax);
664
+ }
665
+
666
+ void arraycopy(const T* src, int srcStart, T* dst, int dstStart, int nbr)
667
+ {
668
+ // we have 2 cases, either closing a gap or opening it.
669
+ if ((src == dst) && (srcStart > dstStart) )
670
+ {
671
+ for(int i=0; i<nbr; i++)
672
+ dst[i+dstStart] = src[i+srcStart];
673
+ }
674
+ else
675
+ {
676
+ for(int i=nbr-1; i>=0; i--)
677
+ dst[i+dstStart] = src[i+srcStart];
678
+ }
679
+ }
680
+
681
+ inline void do_wb_nongc(T* slot, T value)
682
+ {
683
+ *slot = value;
684
+ }
685
+
686
+ inline void do_wb_gc(GCObject** slot, const GCObject** value)
687
+ {
688
+ *slot = (GCObject*)*value;
689
+ }
690
+
691
+ void FASTCALL wb(uint32_t index, T value)
692
+ {
693
+ AvmAssert(index < capacity);
694
+ AvmAssert(data != NULL);
695
+ T* slot = &data[index];
696
+ do_wb_nongc(slot, value);
697
+ }
698
+
699
+ // multiple wb call with the same value, and assumption that existing value is all zero bits,
700
+ // like
701
+ // for (uint32_t u = index; u < index_end; ++u)
702
+ // wb(u, value);
703
+ void FASTCALL wbzm(uint32_t index, uint32_t index_end, T value)
704
+ {
705
+ AvmAssert(index < capacity);
706
+ AvmAssert(index_end <= capacity);
707
+ AvmAssert(index < index_end);
708
+ AvmAssert(data != NULL);
709
+ T* slot = data + index;
710
+ for ( ; index < index_end; ++index, ++slot)
711
+ do_wb_nongc(slot, value);
712
+ }
713
+
714
+ inline uint32_t factor(uint32_t index) const
715
+ {
716
+ return index * sizeof(T);
717
+ }
718
+
719
+ void FASTCALL zero_range(uint32_t _first, uint32_t _count)
720
+ {
721
+ memset(data + _first, 0, factor(_count));
722
+ }
723
+
724
+ // stuff that needs specialization based on the type
725
+ static inline T undef_list_val();
726
+
727
+ private:
728
+ List(const List& toCopy); // unimplemented
729
+ void operator=(const List& that); // unimplemented
730
+
731
+ // ------------------------ DATA SECTION BEGIN
732
+ private:
733
+ T* data;
734
+ uint32_t len;
735
+ uint32_t capacity;
736
+ // ------------------------ DATA SECTION END
737
+
738
+ };
739
+
740
+ // stuff that needs specialization based on the type
741
+ template<typename T, ListElementType kElementType>
742
+ /* static */ inline T List<T, kElementType>::undef_list_val() { return T(0); }
743
+
744
+ /**
745
+ * The SortedMap<K,T> template implements an object that
746
+ * maps keys to values. The keys are sorted
747
+ * from smallest to largest in the map. Time of operations
748
+ * is as follows:
749
+ * put() is O(1) if the key is higher than any existing
750
+ * key; O(logN) if the key already exists,
751
+ * and O(N) otherwise.
752
+ * get() is an O(logN) binary search.
753
+ *
754
+ * no duplicates are allowed.
755
+ */
756
+ template <class K, class T, ListElementType valType>
757
+ class SortedMap : public GCObject
758
+ {
759
+ public:
760
+ enum { kInitialCapacity= 64 };
761
+
762
+ SortedMap(GC* gc, int _capacity=kInitialCapacity)
763
+ : keys(gc, _capacity), values(gc, _capacity)
764
+ {
765
+ }
766
+
767
+ bool isEmpty() const
768
+ {
769
+ return keys.size() == 0;
770
+ }
771
+
772
+ int size() const
773
+ {
774
+ return keys.size();
775
+ }
776
+
777
+ void clear()
778
+ {
779
+ keys.clear();
780
+ values.clear();
781
+ }
782
+
783
+ void destroy()
784
+ {
785
+ keys.destroy();
786
+ values.destroy();
787
+ }
788
+
789
+ T put(K k, T v)
790
+ {
791
+ if (keys.size() == 0 || k > keys.last())
792
+ {
793
+ keys.add(k);
794
+ values.add(v);
795
+ return (T)v;
796
+ }
797
+ else
798
+ {
799
+ int i = find(k);
800
+ if (i >= 0)
801
+ {
802
+ T old = values[i];
803
+ keys.set(i, k);
804
+ values.set(i, v);
805
+ return old;
806
+ }
807
+ else
808
+ {
809
+ i = -i - 1; // recover the insertion point
810
+ AvmAssert(keys.size() != (uint32_t)i);
811
+ keys.insert(i, k);
812
+ values.insert(i, v);
813
+ return v;
814
+ }
815
+ }
816
+ }
817
+
818
+ T get(K k) const
819
+ {
820
+ int i = find(k);
821
+ return i >= 0 ? values[i] : 0;
822
+ }
823
+
824
+ bool get(K k, T& v) const
825
+ {
826
+ int i = find(k);
827
+ if (i >= 0)
828
+ {
829
+ v = values[i];
830
+ return true;
831
+ }
832
+ return false;
833
+ }
834
+
835
+ bool containsKey(K k) const
836
+ {
837
+ int i = find(k);
838
+ return (i >= 0) ? true : false;
839
+ }
840
+
841
+ T remove(K k)
842
+ {
843
+ int i = find(k);
844
+ return removeAt(i);
845
+ }
846
+
847
+ T removeAt(int i)
848
+ {
849
+ T old = values.removeAt(i);
850
+ keys.removeAt(i);
851
+ return old;
852
+ }
853
+
854
+ T removeFirst() { return isEmpty() ? (T)0 : removeAt(0); }
855
+ T removeLast() { return isEmpty() ? (T)0 : removeAt(keys.size()-1); }
856
+ T first() const { return isEmpty() ? (T)0 : values[0]; }
857
+ T last() const { return isEmpty() ? (T)0 : values[keys.size()-1]; }
858
+
859
+ K firstKey() const { return isEmpty() ? 0 : keys[0]; }
860
+ K lastKey() const { return isEmpty() ? 0 : keys[keys.size()-1]; }
861
+
862
+ // iterator
863
+ T at(int i) const { return values[i]; }
864
+ K keyAt(int i) const { return keys[i]; }
865
+
866
+ int findNear(K k) const {
867
+ int i = find(k);
868
+ return i >= 0 ? i : -i-2;
869
+ }
870
+ protected:
871
+ List<K, LIST_NonGCObjects> keys;
872
+ List<T, valType> values;
873
+
874
+ int find(K k) const
875
+ {
876
+ int lo = 0;
877
+ int hi = keys.size()-1;
878
+
879
+ while (lo <= hi)
880
+ {
881
+ int i = (lo + hi)/2;
882
+ K m = keys[i];
883
+ if (k > m)
884
+ lo = i + 1;
885
+ else if (k < m)
886
+ hi = i - 1;
887
+ else
888
+ return i; // key found
889
+ }
890
+ return -(lo + 1); // key not found, low is the insertion point
891
+ }
892
+ };
893
+
894
+ #define GCSortedMap SortedMap
895
+
896
+ /**
897
+ * Bit vectors are an efficent method of keeping True/False information
898
+ * on a set of items or conditions. Class BitSet provides functions
899
+ * to manipulate individual bits in the vector.
900
+ *
901
+ * Since most vectors are rather small an array of longs is used by
902
+ * default to house the value of the bits. If more bits are needed
903
+ * then an array is allocated dynamically outside of this object.
904
+ *
905
+ * This object is not optimized for a fixed sized bit vector
906
+ * it instead allows for dynamically growing the bit vector.
907
+ */
908
+ class BitSet
909
+ {
910
+ public:
911
+ enum { kUnit = 8*sizeof(long),
912
+ kDefaultCapacity = 4 };
913
+
914
+ BitSet()
915
+ {
916
+ capacity = kDefaultCapacity;
917
+ reset();
918
+ }
919
+
920
+ ~BitSet()
921
+ {
922
+ if (capacity > kDefaultCapacity)
923
+ free(bits.ptr);
924
+ }
925
+
926
+ void reset()
927
+ {
928
+ if (capacity > kDefaultCapacity)
929
+ for(int i=0; i<capacity; i++)
930
+ bits.ptr[i] = 0;
931
+ else
932
+ for(int i=0; i<capacity; i++)
933
+ bits.ar[i] = 0;
934
+ }
935
+
936
+ void set(GC *gc, int bitNbr)
937
+ {
938
+ int index = bitNbr / kUnit;
939
+ int bit = bitNbr % kUnit;
940
+ if (index >= capacity)
941
+ grow(gc, index+1);
942
+
943
+ if (capacity > kDefaultCapacity)
944
+ bits.ptr[index] |= (1<<bit);
945
+ else
946
+ bits.ar[index] |= (1<<bit);
947
+ }
948
+
949
+ void clear(int bitNbr)
950
+ {
951
+ int index = bitNbr / kUnit;
952
+ int bit = bitNbr % kUnit;
953
+ if (index < capacity)
954
+ {
955
+ if (capacity > kDefaultCapacity)
956
+ bits.ptr[index] &= ~(1<<bit);
957
+ else
958
+ bits.ar[index] &= ~(1<<bit);
959
+ }
960
+ }
961
+
962
+ bool get(int bitNbr) const
963
+ {
964
+ int index = bitNbr / kUnit;
965
+ int bit = bitNbr % kUnit;
966
+ bool value = false;
967
+ if (index < capacity)
968
+ {
969
+ if (capacity > kDefaultCapacity)
970
+ value = ( bits.ptr[index] & (1<<bit) ) ? true : false;
971
+ else
972
+ value = ( bits.ar[index] & (1<<bit) ) ? true : false;
973
+ }
974
+ return value;
975
+ }
976
+
977
+ private:
978
+ // Grow the array until at least newCapacity big
979
+ void grow(GC *gc, int newCapacity)
980
+ {
981
+ // create vector that is 2x bigger than requested
982
+ newCapacity *= 2;
983
+ //MEMTAG("BitVector::Grow - long[]");
984
+ long* newBits = (long*)calloc(1, newCapacity * sizeof(long));
985
+ //memset(newBits, 0, newCapacity * sizeof(long));
986
+
987
+ // copy the old one
988
+ if (capacity > kDefaultCapacity)
989
+ for(int i=0; i<capacity; i++)
990
+ newBits[i] = bits.ptr[i];
991
+ else
992
+ for(int i=0; i<capacity; i++)
993
+ newBits[i] = bits.ar[i];
994
+
995
+ // in with the new out with the old
996
+ if (capacity > kDefaultCapacity)
997
+ free(bits.ptr);
998
+
999
+ bits.ptr = newBits;
1000
+ capacity = newCapacity;
1001
+ }
1002
+
1003
+ // by default we use the array, but if the vector
1004
+ // size grows beyond kDefaultCapacity we allocate
1005
+ // space dynamically.
1006
+ int capacity;
1007
+ union
1008
+ {
1009
+ long ar[kDefaultCapacity];
1010
+ long* ptr;
1011
+ }
1012
+ bits;
1013
+ };
1014
+ }
1015
+
1016
+ #endif