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,253 @@
1
+ /* -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: t; tab-width: 4 -*- */
2
+ /* ***** BEGIN LICENSE BLOCK *****
3
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
4
+ *
5
+ * The contents of this file are subject to the Mozilla Public License Version
6
+ * 1.1 (the "License"); you may not use this file except in compliance with
7
+ * the License. You may obtain a copy of the License at
8
+ * http://www.mozilla.org/MPL/
9
+ *
10
+ * Software distributed under the License is distributed on an "AS IS" basis,
11
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12
+ * for the specific language governing rights and limitations under the
13
+ * License.
14
+ *
15
+ * The Original Code is [Open Source Virtual Machine].
16
+ *
17
+ * The Initial Developer of the Original Code is
18
+ * Adobe System Incorporated.
19
+ * Portions created by the Initial Developer are Copyright (C) 2004-2007
20
+ * the Initial Developer. All Rights Reserved.
21
+ *
22
+ * Contributor(s):
23
+ * Adobe AS3 Team
24
+ *
25
+ * Alternatively, the contents of this file may be used under the terms of
26
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
27
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
28
+ * in which case the provisions of the GPL or the LGPL are applicable instead
29
+ * of those above. If you wish to allow use of your version of this file only
30
+ * under the terms of either the GPL or the LGPL, and not to allow others to
31
+ * use your version of this file under the terms of the MPL, indicate your
32
+ * decision by deleting the provisions above and replace them with the notice
33
+ * and other provisions required by the GPL or the LGPL. If you do not delete
34
+ * the provisions above, a recipient may use your version of this file under
35
+ * the terms of any one of the MPL, the GPL or the LGPL.
36
+ *
37
+ * ***** END LICENSE BLOCK ***** */
38
+
39
+ #ifndef __nanojit_h__
40
+ #define __nanojit_h__
41
+
42
+ #include <stddef.h>
43
+ #include "avmplus.h"
44
+
45
+ #ifdef FEATURE_NANOJIT
46
+
47
+ #ifdef AVMPLUS_IA32
48
+ #define NANOJIT_IA32
49
+ #elif AVMPLUS_ARM
50
+ #define NANOJIT_ARM
51
+ #elif AVMPLUS_PPC
52
+ #define NANOJIT_PPC
53
+ #elif AVMPLUS_SPARC
54
+ #define NANOJIT_SPARC
55
+ #elif AVMPLUS_AMD64
56
+ #define NANOJIT_AMD64
57
+ #define NANOJIT_64BIT
58
+ #else
59
+ #error "unknown nanojit architecture"
60
+ #endif
61
+
62
+ /*
63
+ If we're using MMGC, using operator delete on a GCFinalizedObject is problematic:
64
+ in particular, calling it from inside a dtor is risky because the dtor for the sub-object
65
+ might already have been called, wrecking its vtable and ending up in the wrong version
66
+ of operator delete (the global version rather than the class-specific one). Calling GC::Free
67
+ directly is fine (since it ignores the vtable), so we macro-ize to make the distinction.
68
+
69
+ macro-ization of operator new isn't strictly necessary, but is done to bottleneck both
70
+ sides of the new/delete pair to forestall future needs.
71
+ */
72
+ #ifdef MMGC_API
73
+
74
+ // separate overloads because GCObject and GCFinalizedObjects have different dtors
75
+ // (GCFinalizedObject's is virtual, GCObject's is not)
76
+ inline void mmgc_delete(GCObject* o)
77
+ {
78
+ GC* g = GC::GetGC(o);
79
+ if (g->Collecting())
80
+ g->Free(o);
81
+ else
82
+ delete o;
83
+ }
84
+
85
+ inline void mmgc_delete(GCFinalizedObject* o)
86
+ {
87
+ GC* g = GC::GetGC(o);
88
+ if (g->Collecting())
89
+ g->Free(o);
90
+ else
91
+ delete o;
92
+ }
93
+
94
+ #define NJ_NEW(gc, cls) new (gc) cls
95
+ #define NJ_DELETE(obj) do { mmgc_delete(obj); } while (0)
96
+ #else
97
+ #define NJ_NEW(gc, cls) new (gc) cls
98
+ #define NJ_DELETE(obj) do { delete obj; } while (0)
99
+ #endif
100
+
101
+ // Embed no-op macros that let Valgrind work with the JIT.
102
+ #ifdef MOZ_VALGRIND
103
+ # define JS_VALGRIND
104
+ #endif
105
+ #ifdef JS_VALGRIND
106
+ # include <valgrind/valgrind.h>
107
+ #else
108
+ # define VALGRIND_DISCARD_TRANSLATIONS(addr, szB)
109
+ #endif
110
+
111
+ namespace nanojit
112
+ {
113
+ /**
114
+ * -------------------------------------------
115
+ * START AVM bridging definitions
116
+ * -------------------------------------------
117
+ */
118
+ class Fragment;
119
+ class LIns;
120
+ struct SideExit;
121
+ class RegAlloc;
122
+ struct Page;
123
+ typedef avmplus::AvmCore AvmCore;
124
+ typedef avmplus::OSDep OSDep;
125
+ typedef avmplus::GCSortedMap<const void*,Fragment*,avmplus::LIST_GCObjects> FragmentMap;
126
+ typedef avmplus::SortedMap<SideExit*,RegAlloc*,avmplus::LIST_GCObjects> RegAllocMap;
127
+ typedef avmplus::List<LIns*,avmplus::LIST_NonGCObjects> InsList;
128
+ typedef avmplus::List<char*, avmplus::LIST_GCObjects> StringList;
129
+ typedef avmplus::List<Page*,avmplus::LIST_NonGCObjects> PageList;
130
+
131
+ const uint32_t MAXARGS = 8;
132
+
133
+ #if defined(_MSC_VER) && _MSC_VER < 1400
134
+ static void NanoAssertMsgf(bool a,const char *f,...) {}
135
+ static void NanoAssertMsg(bool a,const char *m) {}
136
+ static void NanoAssert(bool a) {}
137
+ #elif defined(_DEBUG)
138
+
139
+ #define __NanoAssertMsgf(a, file_, line_, f, ...) \
140
+ if (!(a)) { \
141
+ fprintf(stderr, "Assertion failed: " f "%s (%s:%d)\n", __VA_ARGS__, #a, file_, line_); \
142
+ NanoAssertFail(); \
143
+ }
144
+
145
+ #define _NanoAssertMsgf(a, file_, line_, f, ...) __NanoAssertMsgf(a, file_, line_, f, __VA_ARGS__)
146
+
147
+ #define NanoAssertMsgf(a,f,...) do { __NanoAssertMsgf(a, __FILE__, __LINE__, f ": ", __VA_ARGS__); } while (0)
148
+ #define NanoAssertMsg(a,m) do { __NanoAssertMsgf(a, __FILE__, __LINE__, "\"%s\": ", m); } while (0)
149
+ #define NanoAssert(a) do { __NanoAssertMsgf(a, __FILE__, __LINE__, "%s", ""); } while (0)
150
+ #else
151
+ #define NanoAssertMsgf(a,f,...) do { } while (0) /* no semi */
152
+ #define NanoAssertMsg(a,m) do { } while (0) /* no semi */
153
+ #define NanoAssert(a) do { } while (0) /* no semi */
154
+ #endif
155
+
156
+ /*
157
+ * Sun Studio C++ compiler has a bug
158
+ * "sizeof expression not accepted as size of array parameter"
159
+ * The bug number is 6688515. It is not public yet.
160
+ * Turn off this assert for Sun Studio until this bug is fixed.
161
+ */
162
+ #ifdef __SUNPRO_CC
163
+ #define NanoStaticAssert(condition)
164
+ #else
165
+ #define NanoStaticAssert(condition) \
166
+ extern void nano_static_assert(int arg[(condition) ? 1 : -1])
167
+ #endif
168
+
169
+
170
+ /**
171
+ * -------------------------------------------
172
+ * END AVM bridging definitions
173
+ * -------------------------------------------
174
+ */
175
+ }
176
+
177
+ #ifdef AVMPLUS_VERBOSE
178
+ #define NJ_VERBOSE 1
179
+ #define NJ_PROFILE 1
180
+ #endif
181
+
182
+ #if defined(_MSC_VER) && _MSC_VER < 1400
183
+ #include <stdio.h>
184
+ #define verbose_output if (verbose_enabled()) Assembler::output
185
+ #define verbose_outputf if (verbose_enabled()) Assembler::outputf
186
+ #define verbose_enabled() (_verbose)
187
+ #define verbose_only(x) x
188
+ #elif defined(NJ_VERBOSE)
189
+ #include <stdio.h>
190
+ #define verbose_output if (verbose_enabled()) Assembler::output
191
+ #define verbose_outputf if (verbose_enabled()) Assembler::outputf
192
+ #define verbose_enabled() (_verbose)
193
+ #define verbose_only(...) __VA_ARGS__
194
+ #else
195
+ #define verbose_output
196
+ #define verbose_outputf
197
+ #define verbose_enabled()
198
+ #define verbose_only(...)
199
+ #endif /*NJ_VERBOSE*/
200
+
201
+ #ifdef _DEBUG
202
+ #define debug_only(x) x
203
+ #else
204
+ #define debug_only(x)
205
+ #endif /* DEBUG */
206
+
207
+ #ifdef NJ_PROFILE
208
+ #define counter_struct_begin() struct {
209
+ #define counter_struct_end() } _stats;
210
+ #define counter_define(x) int32_t x
211
+ #define counter_value(x) _stats.x
212
+ #define counter_set(x,v) (counter_value(x)=(v))
213
+ #define counter_adjust(x,i) (counter_value(x)+=(int32_t)(i))
214
+ #define counter_reset(x) counter_set(x,0)
215
+ #define counter_increment(x) counter_adjust(x,1)
216
+ #define counter_decrement(x) counter_adjust(x,-1)
217
+ #define profile_only(x) x
218
+ #else
219
+ #define counter_struct_begin()
220
+ #define counter_struct_end()
221
+ #define counter_define(x)
222
+ #define counter_value(x)
223
+ #define counter_set(x,v)
224
+ #define counter_adjust(x,i)
225
+ #define counter_reset(x)
226
+ #define counter_increment(x)
227
+ #define counter_decrement(x)
228
+ #define profile_only(x)
229
+ #endif /* NJ_PROFILE */
230
+
231
+ #define isS8(i) ( int32_t(i) == int8_t(i) )
232
+ #define isU8(i) ( int32_t(i) == uint8_t(i) )
233
+ #define isS16(i) ( int32_t(i) == int16_t(i) )
234
+ #define isU16(i) ( int32_t(i) == uint16_t(i) )
235
+ #define isS24(i) ( ((int32_t(i)<<8)>>8) == (i) )
236
+
237
+ #define alignTo(x,s) ((((uintptr_t)(x)))&~(((uintptr_t)s)-1))
238
+ #define alignUp(x,s) ((((uintptr_t)(x))+(((uintptr_t)s)-1))&~(((uintptr_t)s)-1))
239
+
240
+ #define pageTop(x) ( (int*)alignTo(x,NJ_PAGE_SIZE) )
241
+ #define pageDataStart(x) ( (int*)(alignTo(x,NJ_PAGE_SIZE) + sizeof(PageHeader)) )
242
+ #define pageBottom(x) ( (int*)(alignTo(x,NJ_PAGE_SIZE)+NJ_PAGE_SIZE)-1 )
243
+ #define samepage(x,y) (pageTop(x) == pageTop(y))
244
+
245
+ #include "Native.h"
246
+ #include "LIR.h"
247
+ #include "RegAlloc.h"
248
+ #include "Fragmento.h"
249
+ #include "Assembler.h"
250
+ #include "TraceTreeDrawer.h"
251
+
252
+ #endif // FEATURE_NANOJIT
253
+ #endif // __nanojit_h__
@@ -0,0 +1,39 @@
1
+ // Some simple testing of new, eval and some string stuff.
2
+
3
+ // constructor -- expression array initialization
4
+ function ExprArray(n,v)
5
+ {
6
+ // Initializes n values to v coerced to a string.
7
+ for (var i = 0; i < n; i++) {
8
+ this[i] = "" + v;
9
+ }
10
+ }
11
+
12
+
13
+ // Print the perfect numbers up to n and the sum expression for n's divisors.
14
+ function perfect(n)
15
+ {
16
+ print("The perfect numbers up to " + n + " are:");
17
+
18
+ // We build sumOfDivisors[i] to hold a string expression for
19
+ // the sum of the divisors of i, excluding i itself.
20
+ var sumOfDivisors = new ExprArray(n+1,1);
21
+ for (var divisor = 2; divisor <= n; divisor++) {
22
+ for (var j = divisor + divisor; j <= n; j += divisor) {
23
+ sumOfDivisors[j] += " + " + divisor;
24
+ }
25
+ // At this point everything up to 'divisor' has its sumOfDivisors
26
+ // expression calculated, so we can determine whether it's perfect
27
+ // already by evaluating.
28
+ if (eval(sumOfDivisors[divisor]) == divisor) {
29
+ print("" + divisor + " = " + sumOfDivisors[divisor]);
30
+ }
31
+ }
32
+ print("That's all.");
33
+ }
34
+
35
+
36
+ print("\nA number is 'perfect' if it is equal to the sum of its")
37
+ print("divisors (excluding itself).\n");
38
+ perfect(500);
39
+
@@ -0,0 +1,35 @@
1
+ / * Double hashing implementation./a\
2
+ * GENERATED BY js/src/plify_jsdhash.sed -- DO NOT EDIT!!!
3
+ / * Double hashing, a la Knuth 6./a\
4
+ * GENERATED BY js/src/plify_jsdhash.sed -- DO NOT EDIT!!!
5
+ s/jsdhash_h___/pldhash_h___/
6
+ s/jsdhash\.bigdump/pldhash.bigdump/
7
+ s/jstypes\.h/nscore.h/
8
+ s/jsbit\.h/prbit.h/
9
+ s/jsdhash\.h/pldhash.h/
10
+ s/jsdhash\.c/pldhash.c/
11
+ s/jsdhash:/pldhash:/
12
+ s/jsutil\.h/nsDebug.h/
13
+ s/JS_DHASH/PL_DHASH/g
14
+ s/JS_DHash/PL_DHash/g
15
+ s/JSDHash/PLDHash/g
16
+ s/JSHash/PLHash/g
17
+ s/uint32 /PRUint32/g
18
+ s/\([^U]\)int32 /\1PRInt32/g
19
+ s/uint16 /PRUint16/g
20
+ s/\([^U]\)int16 /\1PRInt16/g
21
+ s/uint32/PRUint32/g
22
+ s/\([^U]\)int32/\1PRInt32/g
23
+ s/uint16/PRUint16/g
24
+ s/\([^U]\)int16/\1PRInt16/g
25
+ s/JSBool/PRBool/g
26
+ s/extern JS_PUBLIC_API(\([^()]*\))/NS_COM_GLUE \1/
27
+ s/JS_PUBLIC_API(\([^()]*\))/\1/
28
+ s/JS_NewDHashTable/PL_NewDHashTable/
29
+ s/JS_ASSERT(0)/NS_NOTREACHED("0")/
30
+ s/\( *\)JS_ASSERT(\(.*\));/\1NS_ASSERTION(\2,\n\1 "\2");/
31
+ s/JSDHASH_ONELINE_ASSERT(\(.*\));/NS_ASSERTION(\1, "\1");/
32
+ s/JS_UNLIKELY/NS_UNLIKELY/g
33
+ s/JS_LIKELY/NS_LIKELY/g
34
+ s/JS_/PR_/g
35
+ s/fprintf(stderr,/printf_stderr(/
@@ -0,0 +1,869 @@
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 time code.
42
+ */
43
+ #include "jsstddef.h"
44
+ #ifdef SOLARIS
45
+ #define _REENTRANT 1
46
+ #endif
47
+ #include <string.h>
48
+ #include <time.h>
49
+ #include "jstypes.h"
50
+ #include "jsutil.h"
51
+
52
+ #include "jsprf.h"
53
+ #include "jslock.h"
54
+ #include "prmjtime.h"
55
+
56
+ #define PRMJ_DO_MILLISECONDS 1
57
+
58
+ #ifdef XP_OS2
59
+ #include <sys/timeb.h>
60
+ #endif
61
+ #ifdef XP_WIN
62
+ #include <windef.h>
63
+ #include <winbase.h>
64
+ #include <math.h> /* for fabs */
65
+ #include <mmsystem.h> /* for timeBegin/EndPeriod */
66
+ /* VC++ 8.0 or later, and not WINCE */
67
+ #if _MSC_VER >= 1400 && !defined(WINCE)
68
+ #define NS_HAVE_INVALID_PARAMETER_HANDLER 1
69
+ #endif
70
+ #ifdef NS_HAVE_INVALID_PARAMETER_HANDLER
71
+ #include <stdlib.h> /* for _set_invalid_parameter_handler */
72
+ #include <crtdbg.h> /* for _CrtSetReportMode */
73
+ #endif
74
+
75
+ #ifdef JS_THREADSAFE
76
+ #include <prinit.h>
77
+ #endif
78
+
79
+ #endif
80
+
81
+ #if defined(XP_UNIX) || defined(XP_BEOS)
82
+
83
+ #ifdef _SVID_GETTOD /* Defined only on Solaris, see Solaris <sys/types.h> */
84
+ extern int gettimeofday(struct timeval *tv);
85
+ #endif
86
+
87
+ #include <sys/time.h>
88
+
89
+ #endif /* XP_UNIX */
90
+
91
+ #define PRMJ_YEAR_DAYS 365L
92
+ #define PRMJ_FOUR_YEARS_DAYS (4 * PRMJ_YEAR_DAYS + 1)
93
+ #define PRMJ_CENTURY_DAYS (25 * PRMJ_FOUR_YEARS_DAYS - 1)
94
+ #define PRMJ_FOUR_CENTURIES_DAYS (4 * PRMJ_CENTURY_DAYS + 1)
95
+ #define PRMJ_HOUR_SECONDS 3600L
96
+ #define PRMJ_DAY_SECONDS (24L * PRMJ_HOUR_SECONDS)
97
+ #define PRMJ_YEAR_SECONDS (PRMJ_DAY_SECONDS * PRMJ_YEAR_DAYS)
98
+ #define PRMJ_MAX_UNIX_TIMET 2145859200L /*time_t value equiv. to 12/31/2037 */
99
+
100
+ /* function prototypes */
101
+ static void PRMJ_basetime(JSInt64 tsecs, PRMJTime *prtm);
102
+ /*
103
+ * get the difference in seconds between this time zone and UTC (GMT)
104
+ */
105
+ JSInt32
106
+ PRMJ_LocalGMTDifference()
107
+ {
108
+ struct tm ltime;
109
+
110
+ #if defined(XP_WIN) && !defined(WINCE)
111
+ /* Windows does not follow POSIX. Updates to the
112
+ * TZ environment variable are not reflected
113
+ * immediately on that platform as they are
114
+ * on UNIX systems without this call.
115
+ */
116
+ _tzset();
117
+ #endif
118
+ /* get the difference between this time zone and GMT */
119
+ memset((char *)&ltime,0,sizeof(ltime));
120
+ ltime.tm_mday = 2;
121
+ ltime.tm_year = 70;
122
+ return (JSInt32)mktime(&ltime) - (24L * 3600L);
123
+ }
124
+
125
+ /* Constants for GMT offset from 1970 */
126
+ #define G1970GMTMICROHI 0x00dcdcad /* micro secs to 1970 hi */
127
+ #define G1970GMTMICROLOW 0x8b3fa000 /* micro secs to 1970 low */
128
+
129
+ #define G2037GMTMICROHI 0x00e45fab /* micro secs to 2037 high */
130
+ #define G2037GMTMICROLOW 0x7a238000 /* micro secs to 2037 low */
131
+
132
+ /* Convert from base time to extended time */
133
+ static JSInt64
134
+ PRMJ_ToExtendedTime(JSInt32 base_time)
135
+ {
136
+ JSInt64 exttime;
137
+ JSInt64 g1970GMTMicroSeconds;
138
+ JSInt64 low;
139
+ JSInt32 diff;
140
+ JSInt64 tmp;
141
+ JSInt64 tmp1;
142
+
143
+ diff = PRMJ_LocalGMTDifference();
144
+ JSLL_UI2L(tmp, PRMJ_USEC_PER_SEC);
145
+ JSLL_I2L(tmp1,diff);
146
+ JSLL_MUL(tmp,tmp,tmp1);
147
+
148
+ JSLL_UI2L(g1970GMTMicroSeconds,G1970GMTMICROHI);
149
+ JSLL_UI2L(low,G1970GMTMICROLOW);
150
+ JSLL_SHL(g1970GMTMicroSeconds,g1970GMTMicroSeconds,16);
151
+ JSLL_SHL(g1970GMTMicroSeconds,g1970GMTMicroSeconds,16);
152
+ JSLL_ADD(g1970GMTMicroSeconds,g1970GMTMicroSeconds,low);
153
+
154
+ JSLL_I2L(exttime,base_time);
155
+ JSLL_ADD(exttime,exttime,g1970GMTMicroSeconds);
156
+ JSLL_SUB(exttime,exttime,tmp);
157
+ return exttime;
158
+ }
159
+
160
+ #ifdef XP_WIN
161
+ typedef struct CalibrationData
162
+ {
163
+ long double freq; /* The performance counter frequency */
164
+ long double offset; /* The low res 'epoch' */
165
+ long double timer_offset; /* The high res 'epoch' */
166
+
167
+ /* The last high res time that we returned since recalibrating */
168
+ JSInt64 last;
169
+
170
+ JSBool calibrated;
171
+
172
+ #ifdef JS_THREADSAFE
173
+ CRITICAL_SECTION data_lock;
174
+ CRITICAL_SECTION calibration_lock;
175
+ #endif
176
+ } CalibrationData;
177
+
178
+ static const JSInt64 win2un = JSLL_INIT(0x19DB1DE, 0xD53E8000);
179
+
180
+ static CalibrationData calibration = { 0 };
181
+
182
+ #define FILETIME2INT64(ft) (((JSInt64)ft.dwHighDateTime) << 32LL | (JSInt64)ft.dwLowDateTime)
183
+
184
+ static void
185
+ NowCalibrate()
186
+ {
187
+ FILETIME ft, ftStart;
188
+ LARGE_INTEGER liFreq, now;
189
+
190
+ if (calibration.freq == 0.0) {
191
+ if(!QueryPerformanceFrequency(&liFreq)) {
192
+ /* High-performance timer is unavailable */
193
+ calibration.freq = -1.0;
194
+ } else {
195
+ calibration.freq = (long double) liFreq.QuadPart;
196
+ }
197
+ }
198
+ if (calibration.freq > 0.0) {
199
+ JSInt64 calibrationDelta = 0;
200
+
201
+ /* By wrapping a timeBegin/EndPeriod pair of calls around this loop,
202
+ the loop seems to take much less time (1 ms vs 15ms) on Vista. */
203
+ timeBeginPeriod(1);
204
+ GetSystemTimeAsFileTime(&ftStart);
205
+ do {
206
+ GetSystemTimeAsFileTime(&ft);
207
+ } while (memcmp(&ftStart,&ft, sizeof(ft)) == 0);
208
+ timeEndPeriod(1);
209
+
210
+ /*
211
+ calibrationDelta = (FILETIME2INT64(ft) - FILETIME2INT64(ftStart))/10;
212
+ fprintf(stderr, "Calibration delta was %I64d us\n", calibrationDelta);
213
+ */
214
+
215
+ QueryPerformanceCounter(&now);
216
+
217
+ calibration.offset = (long double) FILETIME2INT64(ft);
218
+ calibration.timer_offset = (long double) now.QuadPart;
219
+
220
+ /* The windows epoch is around 1600. The unix epoch is around
221
+ 1970. win2un is the difference (in windows time units which
222
+ are 10 times more highres than the JS time unit) */
223
+ calibration.offset -= win2un;
224
+ calibration.offset *= 0.1;
225
+ calibration.last = 0;
226
+
227
+ calibration.calibrated = JS_TRUE;
228
+ }
229
+ }
230
+
231
+ #define CALIBRATIONLOCK_SPINCOUNT 0
232
+ #define DATALOCK_SPINCOUNT 4096
233
+ #define LASTLOCK_SPINCOUNT 4096
234
+
235
+ #ifdef JS_THREADSAFE
236
+ static PRStatus
237
+ NowInit(void)
238
+ {
239
+ memset(&calibration, 0, sizeof(calibration));
240
+ NowCalibrate();
241
+ InitializeCriticalSectionAndSpinCount(&calibration.calibration_lock, CALIBRATIONLOCK_SPINCOUNT);
242
+ InitializeCriticalSectionAndSpinCount(&calibration.data_lock, DATALOCK_SPINCOUNT);
243
+ return PR_SUCCESS;
244
+ }
245
+
246
+ void
247
+ PRMJ_NowShutdown()
248
+ {
249
+ DeleteCriticalSection(&calibration.calibration_lock);
250
+ DeleteCriticalSection(&calibration.data_lock);
251
+ }
252
+
253
+ #define MUTEX_LOCK(m) EnterCriticalSection(m)
254
+ #define MUTEX_TRYLOCK(m) TryEnterCriticalSection(m)
255
+ #define MUTEX_UNLOCK(m) LeaveCriticalSection(m)
256
+ #define MUTEX_SETSPINCOUNT(m, c) SetCriticalSectionSpinCount((m),(c))
257
+
258
+ static PRCallOnceType calibrationOnce = { 0 };
259
+
260
+ #else
261
+
262
+ #define MUTEX_LOCK(m)
263
+ #define MUTEX_TRYLOCK(m) 1
264
+ #define MUTEX_UNLOCK(m)
265
+ #define MUTEX_SETSPINCOUNT(m, c)
266
+
267
+ #endif
268
+
269
+
270
+ #endif /* XP_WIN */
271
+
272
+ /*
273
+
274
+ Win32 python-esque pseudo code
275
+ Please see bug 363258 for why the win32 timing code is so complex.
276
+
277
+ calibration mutex : Win32CriticalSection(spincount=0)
278
+ data mutex : Win32CriticalSection(spincount=4096)
279
+
280
+ def NowInit():
281
+ init mutexes
282
+ PRMJ_NowCalibration()
283
+
284
+ def NowCalibration():
285
+ expensive up-to-15ms call
286
+
287
+ def PRMJ_Now():
288
+ returnedTime = 0
289
+ needCalibration = False
290
+ cachedOffset = 0.0
291
+ calibrated = False
292
+ PR_CallOnce(PRMJ_NowInit)
293
+ do
294
+ if not global.calibrated or needCalibration:
295
+ acquire calibration mutex
296
+ acquire data mutex
297
+
298
+ // Only recalibrate if someone didn't already
299
+ if cachedOffset == calibration.offset:
300
+ // Have all waiting threads immediately wait
301
+ set data mutex spin count = 0
302
+ PRMJ_NowCalibrate()
303
+ calibrated = 1
304
+
305
+ set data mutex spin count = default
306
+ release data mutex
307
+ release calibration mutex
308
+
309
+ calculate lowres time
310
+
311
+ if highres timer available:
312
+ acquire data mutex
313
+ calculate highres time
314
+ cachedOffset = calibration.offset
315
+ highres time = calibration.last = max(highres time, calibration.last)
316
+ release data mutex
317
+
318
+ get kernel tick interval
319
+
320
+ if abs(highres - lowres) < kernel tick:
321
+ returnedTime = highres time
322
+ needCalibration = False
323
+ else:
324
+ if calibrated:
325
+ returnedTime = lowres
326
+ needCalibration = False
327
+ else:
328
+ needCalibration = True
329
+ else:
330
+ returnedTime = lowres
331
+ while needCalibration
332
+
333
+ */
334
+
335
+ JSInt64
336
+ PRMJ_Now(void)
337
+ {
338
+ #ifdef XP_OS2
339
+ JSInt64 s, us, ms2us, s2us;
340
+ struct timeb b;
341
+ #endif
342
+ #ifdef XP_WIN
343
+ static int nCalls = 0;
344
+ long double lowresTime, highresTimerValue;
345
+ FILETIME ft;
346
+ LARGE_INTEGER now;
347
+ JSBool calibrated = JS_FALSE;
348
+ JSBool needsCalibration = JS_FALSE;
349
+ JSInt64 returnedTime;
350
+ long double cachedOffset = 0.0;
351
+ #endif
352
+ #if defined(XP_UNIX) || defined(XP_BEOS)
353
+ struct timeval tv;
354
+ JSInt64 s, us, s2us;
355
+ #endif /* XP_UNIX */
356
+
357
+ #ifdef XP_OS2
358
+ ftime(&b);
359
+ JSLL_UI2L(ms2us, PRMJ_USEC_PER_MSEC);
360
+ JSLL_UI2L(s2us, PRMJ_USEC_PER_SEC);
361
+ JSLL_UI2L(s, b.time);
362
+ JSLL_UI2L(us, b.millitm);
363
+ JSLL_MUL(us, us, ms2us);
364
+ JSLL_MUL(s, s, s2us);
365
+ JSLL_ADD(s, s, us);
366
+ return s;
367
+ #endif
368
+ #ifdef XP_WIN
369
+
370
+ /* To avoid regressing startup time (where high resolution is likely
371
+ not needed), give the old behavior for the first few calls.
372
+ This does not appear to be needed on Vista as the timeBegin/timeEndPeriod
373
+ calls seem to immediately take effect. */
374
+ int thiscall = JS_ATOMIC_INCREMENT(&nCalls);
375
+ /* 10 seems to be the number of calls to load with a blank homepage */
376
+ if (thiscall <= 10) {
377
+ GetSystemTimeAsFileTime(&ft);
378
+ return (FILETIME2INT64(ft)-win2un)/10L;
379
+ }
380
+
381
+ /* For non threadsafe platforms, NowInit is not necessary */
382
+ #ifdef JS_THREADSAFE
383
+ PR_CallOnce(&calibrationOnce, NowInit);
384
+ #endif
385
+ do {
386
+ if (!calibration.calibrated || needsCalibration) {
387
+ MUTEX_LOCK(&calibration.calibration_lock);
388
+ MUTEX_LOCK(&calibration.data_lock);
389
+
390
+ /* Recalibrate only if no one else did before us */
391
+ if(calibration.offset == cachedOffset) {
392
+ /* Since calibration can take a while, make any other
393
+ threads immediately wait */
394
+ MUTEX_SETSPINCOUNT(&calibration.data_lock, 0);
395
+
396
+ NowCalibrate();
397
+
398
+ calibrated = JS_TRUE;
399
+
400
+ /* Restore spin count */
401
+ MUTEX_SETSPINCOUNT(&calibration.data_lock, DATALOCK_SPINCOUNT);
402
+ }
403
+ MUTEX_UNLOCK(&calibration.data_lock);
404
+ MUTEX_UNLOCK(&calibration.calibration_lock);
405
+ }
406
+
407
+
408
+ /* Calculate a low resolution time */
409
+ GetSystemTimeAsFileTime(&ft);
410
+ lowresTime = 0.1*(long double)(FILETIME2INT64(ft) - win2un);
411
+
412
+ if (calibration.freq > 0.0) {
413
+ long double highresTime, diff;
414
+
415
+ DWORD timeAdjustment, timeIncrement;
416
+ BOOL timeAdjustmentDisabled;
417
+
418
+ /* Default to 15.625 ms if the syscall fails */
419
+ long double skewThreshold = 15625.25;
420
+ /* Grab high resolution time */
421
+ QueryPerformanceCounter(&now);
422
+ highresTimerValue = (long double)now.QuadPart;
423
+
424
+ MUTEX_LOCK(&calibration.data_lock);
425
+ highresTime = calibration.offset + PRMJ_USEC_PER_SEC*
426
+ (highresTimerValue-calibration.timer_offset)/calibration.freq;
427
+ cachedOffset = calibration.offset;
428
+
429
+ /* On some dual processor/core systems, we might get an earlier time
430
+ so we cache the last time that we returned */
431
+ calibration.last = max(calibration.last,(JSInt64)highresTime);
432
+ returnedTime = calibration.last;
433
+ MUTEX_UNLOCK(&calibration.data_lock);
434
+
435
+ /* Rather than assume the NT kernel ticks every 15.6ms, ask it */
436
+ if (GetSystemTimeAdjustment(&timeAdjustment,
437
+ &timeIncrement,
438
+ &timeAdjustmentDisabled)) {
439
+ if (timeAdjustmentDisabled) {
440
+ /* timeAdjustment is in units of 100ns */
441
+ skewThreshold = timeAdjustment/10.0;
442
+ } else {
443
+ /* timeIncrement is in units of 100ns */
444
+ skewThreshold = timeIncrement/10.0;
445
+ }
446
+ }
447
+
448
+ /* Check for clock skew */
449
+ diff = lowresTime - highresTime;
450
+
451
+ /* For some reason that I have not determined, the skew can be
452
+ up to twice a kernel tick. This does not seem to happen by
453
+ itself, but I have only seen it triggered by another program
454
+ doing some kind of file I/O. The symptoms are a negative diff
455
+ followed by an equally large positive diff. */
456
+ if (fabs(diff) > 2*skewThreshold) {
457
+ /*fprintf(stderr,"Clock skew detected (diff = %f)!\n", diff);*/
458
+
459
+ if (calibrated) {
460
+ /* If we already calibrated once this instance, and the
461
+ clock is still skewed, then either the processor(s) are
462
+ wildly changing clockspeed or the system is so busy that
463
+ we get switched out for long periods of time. In either
464
+ case, it would be infeasible to make use of high
465
+ resolution results for anything, so let's resort to old
466
+ behavior for this call. It's possible that in the
467
+ future, the user will want the high resolution timer, so
468
+ we don't disable it entirely. */
469
+ returnedTime = (JSInt64)lowresTime;
470
+ needsCalibration = JS_FALSE;
471
+ } else {
472
+ /* It is possible that when we recalibrate, we will return a
473
+ value less than what we have returned before; this is
474
+ unavoidable. We cannot tell the different between a
475
+ faulty QueryPerformanceCounter implementation and user
476
+ changes to the operating system time. Since we must
477
+ respect user changes to the operating system time, we
478
+ cannot maintain the invariant that Date.now() never
479
+ decreases; the old implementation has this behavior as
480
+ well. */
481
+ needsCalibration = JS_TRUE;
482
+ }
483
+ } else {
484
+ /* No detectable clock skew */
485
+ returnedTime = (JSInt64)highresTime;
486
+ needsCalibration = JS_FALSE;
487
+ }
488
+ } else {
489
+ /* No high resolution timer is available, so fall back */
490
+ returnedTime = (JSInt64)lowresTime;
491
+ }
492
+ } while (needsCalibration);
493
+
494
+ return returnedTime;
495
+ #endif
496
+
497
+ #if defined(XP_UNIX) || defined(XP_BEOS)
498
+ #ifdef _SVID_GETTOD /* Defined only on Solaris, see Solaris <sys/types.h> */
499
+ gettimeofday(&tv);
500
+ #else
501
+ gettimeofday(&tv, 0);
502
+ #endif /* _SVID_GETTOD */
503
+ JSLL_UI2L(s2us, PRMJ_USEC_PER_SEC);
504
+ JSLL_UI2L(s, tv.tv_sec);
505
+ JSLL_UI2L(us, tv.tv_usec);
506
+ JSLL_MUL(s, s, s2us);
507
+ JSLL_ADD(s, s, us);
508
+ return s;
509
+ #endif /* XP_UNIX */
510
+ }
511
+
512
+ /* Get the DST timezone offset for the time passed in */
513
+ JSInt64
514
+ PRMJ_DSTOffset(JSInt64 local_time)
515
+ {
516
+ JSInt64 us2s;
517
+ time_t local;
518
+ JSInt32 diff;
519
+ JSInt64 maxtimet;
520
+ struct tm tm;
521
+ PRMJTime prtm;
522
+ #ifndef HAVE_LOCALTIME_R
523
+ struct tm *ptm;
524
+ #endif
525
+
526
+
527
+ JSLL_UI2L(us2s, PRMJ_USEC_PER_SEC);
528
+ JSLL_DIV(local_time, local_time, us2s);
529
+
530
+ /* get the maximum of time_t value */
531
+ JSLL_UI2L(maxtimet,PRMJ_MAX_UNIX_TIMET);
532
+
533
+ if(JSLL_CMP(local_time,>,maxtimet)){
534
+ JSLL_UI2L(local_time,PRMJ_MAX_UNIX_TIMET);
535
+ } else if(!JSLL_GE_ZERO(local_time)){
536
+ /*go ahead a day to make localtime work (does not work with 0) */
537
+ JSLL_UI2L(local_time,PRMJ_DAY_SECONDS);
538
+ }
539
+
540
+ #if defined(XP_WIN) && !defined(WINCE)
541
+ /* Windows does not follow POSIX. Updates to the
542
+ * TZ environment variable are not reflected
543
+ * immediately on that platform as they are
544
+ * on UNIX systems without this call.
545
+ */
546
+ _tzset();
547
+ #endif
548
+
549
+ JSLL_L2UI(local,local_time);
550
+ PRMJ_basetime(local_time,&prtm);
551
+ #ifndef HAVE_LOCALTIME_R
552
+ ptm = localtime(&local);
553
+ if(!ptm){
554
+ return 0;
555
+ }
556
+ tm = *ptm;
557
+ #else
558
+ localtime_r(&local,&tm); /* get dst information */
559
+ #endif
560
+
561
+ diff = ((tm.tm_hour - prtm.tm_hour) * PRMJ_HOUR_SECONDS) +
562
+ ((tm.tm_min - prtm.tm_min) * 60);
563
+
564
+ if (diff < 0)
565
+ diff += PRMJ_DAY_SECONDS;
566
+
567
+ JSLL_UI2L(local_time,diff);
568
+
569
+ JSLL_MUL(local_time,local_time,us2s);
570
+
571
+ return(local_time);
572
+ }
573
+
574
+ #ifdef NS_HAVE_INVALID_PARAMETER_HANDLER
575
+ static void
576
+ PRMJ_InvalidParameterHandler(const wchar_t *expression,
577
+ const wchar_t *function,
578
+ const wchar_t *file,
579
+ unsigned int line,
580
+ uintptr_t pReserved)
581
+ {
582
+ /* empty */
583
+ }
584
+ #endif
585
+
586
+ /* Format a time value into a buffer. Same semantics as strftime() */
587
+ size_t
588
+ PRMJ_FormatTime(char *buf, int buflen, const char *fmt, PRMJTime *prtm)
589
+ {
590
+ size_t result = 0;
591
+ #if defined(XP_UNIX) || defined(XP_WIN) || defined(XP_OS2) || defined(XP_BEOS)
592
+ struct tm a;
593
+ int fake_tm_year = 0;
594
+ #ifdef NS_HAVE_INVALID_PARAMETER_HANDLER
595
+ _invalid_parameter_handler oldHandler;
596
+ int oldReportMode;
597
+ #endif
598
+
599
+ /* Zero out the tm struct. Linux, SunOS 4 struct tm has extra members int
600
+ * tm_gmtoff, char *tm_zone; when tm_zone is garbage, strftime gets
601
+ * confused and dumps core. NSPR20 prtime.c attempts to fill these in by
602
+ * calling mktime on the partially filled struct, but this doesn't seem to
603
+ * work as well; the result string has "can't get timezone" for ECMA-valid
604
+ * years. Might still make sense to use this, but find the range of years
605
+ * for which valid tz information exists, and map (per ECMA hint) from the
606
+ * given year into that range.
607
+
608
+ * N.B. This hasn't been tested with anything that actually _uses_
609
+ * tm_gmtoff; zero might be the wrong thing to set it to if you really need
610
+ * to format a time. This fix is for jsdate.c, which only uses
611
+ * JS_FormatTime to get a string representing the time zone. */
612
+ memset(&a, 0, sizeof(struct tm));
613
+
614
+ a.tm_sec = prtm->tm_sec;
615
+ a.tm_min = prtm->tm_min;
616
+ a.tm_hour = prtm->tm_hour;
617
+ a.tm_mday = prtm->tm_mday;
618
+ a.tm_mon = prtm->tm_mon;
619
+ a.tm_wday = prtm->tm_wday;
620
+
621
+ #if defined(HAVE_LOCALTIME_R) && defined(HAVE_TM_ZONE_TM_GMTOFF)
622
+ {
623
+ struct tm td;
624
+ time_t bogus = 0;
625
+ localtime_r(&bogus, &td);
626
+ a.tm_gmtoff = td.tm_gmtoff;
627
+ a.tm_zone = td.tm_zone;
628
+ }
629
+ #endif
630
+
631
+ /*
632
+ * Years before 1900 and after 9999 cause strftime() to abort on Windows.
633
+ * To avoid that we replace it with FAKE_YEAR_BASE + year % 100 and then
634
+ * replace matching substrings in the strftime() result with the real year.
635
+ * Note that FAKE_YEAR_BASE should be a multiple of 100 to make 2-digit
636
+ * year formats (%y) work correctly (since we won't find the fake year
637
+ * in that case).
638
+ * e.g. new Date(1873, 0).toLocaleFormat('%Y %y') => "1873 73"
639
+ * See bug 327869.
640
+ */
641
+ #define FAKE_YEAR_BASE 9900
642
+ if (prtm->tm_year < 1900 || prtm->tm_year > 9999) {
643
+ fake_tm_year = FAKE_YEAR_BASE + prtm->tm_year % 100;
644
+ a.tm_year = fake_tm_year - 1900;
645
+ }
646
+ else {
647
+ a.tm_year = prtm->tm_year - 1900;
648
+ }
649
+ a.tm_yday = prtm->tm_yday;
650
+ a.tm_isdst = prtm->tm_isdst;
651
+
652
+ /*
653
+ * Even with the above, SunOS 4 seems to detonate if tm_zone and tm_gmtoff
654
+ * are null. This doesn't quite work, though - the timezone is off by
655
+ * tzoff + dst. (And mktime seems to return -1 for the exact dst
656
+ * changeover time.)
657
+ */
658
+
659
+ #ifdef NS_HAVE_INVALID_PARAMETER_HANDLER
660
+ oldHandler = _set_invalid_parameter_handler(PRMJ_InvalidParameterHandler);
661
+ oldReportMode = _CrtSetReportMode(_CRT_ASSERT, 0);
662
+ #endif
663
+
664
+ result = strftime(buf, buflen, fmt, &a);
665
+
666
+ #ifdef NS_HAVE_INVALID_PARAMETER_HANDLER
667
+ _set_invalid_parameter_handler(oldHandler);
668
+ _CrtSetReportMode(_CRT_ASSERT, oldReportMode);
669
+ #endif
670
+
671
+ if (fake_tm_year && result) {
672
+ char real_year[16];
673
+ char fake_year[16];
674
+ size_t real_year_len;
675
+ size_t fake_year_len;
676
+ char* p;
677
+
678
+ sprintf(real_year, "%d", prtm->tm_year);
679
+ real_year_len = strlen(real_year);
680
+ sprintf(fake_year, "%d", fake_tm_year);
681
+ fake_year_len = strlen(fake_year);
682
+
683
+ /* Replace the fake year in the result with the real year. */
684
+ for (p = buf; (p = strstr(p, fake_year)); p += real_year_len) {
685
+ size_t new_result = result + real_year_len - fake_year_len;
686
+ if ((int)new_result >= buflen) {
687
+ return 0;
688
+ }
689
+ memmove(p + real_year_len, p + fake_year_len, strlen(p + fake_year_len));
690
+ memcpy(p, real_year, real_year_len);
691
+ result = new_result;
692
+ *(buf + result) = '\0';
693
+ }
694
+ }
695
+ #endif
696
+ return result;
697
+ }
698
+
699
+ /* table for number of days in a month */
700
+ static int mtab[] = {
701
+ /* jan, feb,mar,apr,may,jun */
702
+ 31,28,31,30,31,30,
703
+ /* july,aug,sep,oct,nov,dec */
704
+ 31,31,30,31,30,31
705
+ };
706
+
707
+ /*
708
+ * basic time calculation functionality for localtime and gmtime
709
+ * setups up prtm argument with correct values based upon input number
710
+ * of seconds.
711
+ */
712
+ static void
713
+ PRMJ_basetime(JSInt64 tsecs, PRMJTime *prtm)
714
+ {
715
+ /* convert tsecs back to year,month,day,hour,secs */
716
+ JSInt32 year = 0;
717
+ JSInt32 month = 0;
718
+ JSInt32 yday = 0;
719
+ JSInt32 mday = 0;
720
+ JSInt32 wday = 6; /* start on a Sunday */
721
+ JSInt32 days = 0;
722
+ JSInt32 seconds = 0;
723
+ JSInt32 minutes = 0;
724
+ JSInt32 hours = 0;
725
+ JSInt32 isleap = 0;
726
+
727
+ /* Temporaries used for various computations */
728
+ JSInt64 result;
729
+ JSInt64 result1;
730
+ JSInt64 result2;
731
+
732
+ JSInt64 base;
733
+
734
+ /* Some variables for intermediate result storage to make computing isleap
735
+ easier/faster */
736
+ JSInt32 fourCenturyBlocks;
737
+ JSInt32 centuriesLeft;
738
+ JSInt32 fourYearBlocksLeft;
739
+ JSInt32 yearsLeft;
740
+
741
+ /* Since leap years work by 400/100/4 year intervals, precompute the length
742
+ of those in seconds if they start at the beginning of year 1. */
743
+ JSInt64 fourYears;
744
+ JSInt64 century;
745
+ JSInt64 fourCenturies;
746
+
747
+ JSLL_UI2L(result, PRMJ_DAY_SECONDS);
748
+
749
+ JSLL_I2L(fourYears, PRMJ_FOUR_YEARS_DAYS);
750
+ JSLL_MUL(fourYears, fourYears, result);
751
+
752
+ JSLL_I2L(century, PRMJ_CENTURY_DAYS);
753
+ JSLL_MUL(century, century, result);
754
+
755
+ JSLL_I2L(fourCenturies, PRMJ_FOUR_CENTURIES_DAYS);
756
+ JSLL_MUL(fourCenturies, fourCenturies, result);
757
+
758
+ /* get the base time via UTC */
759
+ base = PRMJ_ToExtendedTime(0);
760
+ JSLL_UI2L(result, PRMJ_USEC_PER_SEC);
761
+ JSLL_DIV(base,base,result);
762
+ JSLL_ADD(tsecs,tsecs,base);
763
+
764
+ /* Compute our |year|, |isleap|, and part of |days|. When this part is
765
+ done, |year| should hold the year our date falls in (number of whole
766
+ years elapsed before our date), isleap should hold 1 if the year the
767
+ date falls in is a leap year and 0 otherwise. */
768
+
769
+ /* First do year 0; it's special and nonleap. */
770
+ JSLL_UI2L(result, PRMJ_YEAR_SECONDS);
771
+ if (!JSLL_CMP(tsecs,<,result)) {
772
+ days = PRMJ_YEAR_DAYS;
773
+ year = 1;
774
+ JSLL_SUB(tsecs, tsecs, result);
775
+ }
776
+
777
+ /* Now use those constants we computed above */
778
+ JSLL_UDIVMOD(&result1, &result2, tsecs, fourCenturies);
779
+ JSLL_L2I(fourCenturyBlocks, result1);
780
+ year += fourCenturyBlocks * 400;
781
+ days += fourCenturyBlocks * PRMJ_FOUR_CENTURIES_DAYS;
782
+ tsecs = result2;
783
+
784
+ JSLL_UDIVMOD(&result1, &result2, tsecs, century);
785
+ JSLL_L2I(centuriesLeft, result1);
786
+ year += centuriesLeft * 100;
787
+ days += centuriesLeft * PRMJ_CENTURY_DAYS;
788
+ tsecs = result2;
789
+
790
+ JSLL_UDIVMOD(&result1, &result2, tsecs, fourYears);
791
+ JSLL_L2I(fourYearBlocksLeft, result1);
792
+ year += fourYearBlocksLeft * 4;
793
+ days += fourYearBlocksLeft * PRMJ_FOUR_YEARS_DAYS;
794
+ tsecs = result2;
795
+
796
+ /* Recall that |result| holds PRMJ_YEAR_SECONDS */
797
+ JSLL_UDIVMOD(&result1, &result2, tsecs, result);
798
+ JSLL_L2I(yearsLeft, result1);
799
+ year += yearsLeft;
800
+ days += yearsLeft * PRMJ_YEAR_DAYS;
801
+ tsecs = result2;
802
+
803
+ /* now compute isleap. Note that we don't have to use %, since we've
804
+ already computed those remainders. Also note that they're all offset by
805
+ 1 because of the 1 for year 0. */
806
+ isleap =
807
+ (yearsLeft == 3) && (fourYearBlocksLeft != 24 || centuriesLeft == 3);
808
+ JS_ASSERT(isleap ==
809
+ ((year % 4 == 0) && (year % 100 != 0 || year % 400 == 0)));
810
+
811
+ JSLL_UI2L(result1,PRMJ_DAY_SECONDS);
812
+
813
+ JSLL_DIV(result,tsecs,result1);
814
+ JSLL_L2I(mday,result);
815
+
816
+ /* let's find the month */
817
+ while(((month == 1 && isleap) ?
818
+ (mday >= mtab[month] + 1) :
819
+ (mday >= mtab[month]))){
820
+ yday += mtab[month];
821
+ days += mtab[month];
822
+
823
+ mday -= mtab[month];
824
+
825
+ /* it's a Feb, check if this is a leap year */
826
+ if(month == 1 && isleap != 0){
827
+ yday++;
828
+ days++;
829
+ mday--;
830
+ }
831
+ month++;
832
+ }
833
+
834
+ /* now adjust tsecs */
835
+ JSLL_MUL(result,result,result1);
836
+ JSLL_SUB(tsecs,tsecs,result);
837
+
838
+ mday++; /* day of month always start with 1 */
839
+ days += mday;
840
+ wday = (days + wday) % 7;
841
+
842
+ yday += mday;
843
+
844
+ /* get the hours */
845
+ JSLL_UI2L(result1,PRMJ_HOUR_SECONDS);
846
+ JSLL_DIV(result,tsecs,result1);
847
+ JSLL_L2I(hours,result);
848
+ JSLL_MUL(result,result,result1);
849
+ JSLL_SUB(tsecs,tsecs,result);
850
+
851
+ /* get minutes */
852
+ JSLL_UI2L(result1,60);
853
+ JSLL_DIV(result,tsecs,result1);
854
+ JSLL_L2I(minutes,result);
855
+ JSLL_MUL(result,result,result1);
856
+ JSLL_SUB(tsecs,tsecs,result);
857
+
858
+ JSLL_L2I(seconds,tsecs);
859
+
860
+ prtm->tm_usec = 0L;
861
+ prtm->tm_sec = (JSInt8)seconds;
862
+ prtm->tm_min = (JSInt8)minutes;
863
+ prtm->tm_hour = (JSInt8)hours;
864
+ prtm->tm_mday = (JSInt8)mday;
865
+ prtm->tm_mon = (JSInt8)month;
866
+ prtm->tm_wday = (JSInt8)wday;
867
+ prtm->tm_year = (JSInt16)year;
868
+ prtm->tm_yday = (JSInt16)yday;
869
+ }