therubyracer 0.4.6 → 0.4.7

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of therubyracer might be problematic. Click here for more details.

Files changed (1148) hide show
  1. data/Manifest.txt +1138 -0
  2. data/README.rdoc +7 -5
  3. data/Rakefile +12 -2
  4. data/ext/v8/Makefile +169 -0
  5. data/ext/v8/extconf.rb +20 -3
  6. data/ext/v8/upstream/2.0.6/.sconsign.dblite +0 -0
  7. data/ext/v8/upstream/2.0.6/AUTHORS +23 -0
  8. data/ext/v8/upstream/2.0.6/ChangeLog +1479 -0
  9. data/ext/v8/upstream/2.0.6/LICENSE +55 -0
  10. data/ext/v8/upstream/2.0.6/SConstruct +1028 -0
  11. data/ext/v8/upstream/2.0.6/benchmarks/README.txt +63 -0
  12. data/ext/v8/upstream/2.0.6/benchmarks/base.js +264 -0
  13. data/ext/v8/upstream/2.0.6/benchmarks/crypto.js +1698 -0
  14. data/ext/v8/upstream/2.0.6/benchmarks/deltablue.js +880 -0
  15. data/ext/v8/upstream/2.0.6/benchmarks/earley-boyer.js +4684 -0
  16. data/ext/v8/upstream/2.0.6/benchmarks/raytrace.js +935 -0
  17. data/ext/v8/upstream/2.0.6/benchmarks/regexp.js +1614 -0
  18. data/ext/v8/upstream/2.0.6/benchmarks/revisions.html +86 -0
  19. data/ext/v8/upstream/2.0.6/benchmarks/richards.js +539 -0
  20. data/ext/v8/upstream/2.0.6/benchmarks/run.html +141 -0
  21. data/ext/v8/upstream/2.0.6/benchmarks/run.js +61 -0
  22. data/ext/v8/upstream/2.0.6/benchmarks/splay.js +378 -0
  23. data/ext/v8/upstream/2.0.6/benchmarks/style.css +77 -0
  24. data/ext/v8/upstream/2.0.6/benchmarks/v8-logo.png +0 -0
  25. data/ext/v8/upstream/2.0.6/include/v8-debug.h +275 -0
  26. data/ext/v8/upstream/2.0.6/include/v8.h +3236 -0
  27. data/ext/v8/upstream/2.0.6/samples/SConscript +38 -0
  28. data/ext/v8/upstream/2.0.6/samples/count-hosts.js +42 -0
  29. data/ext/v8/upstream/2.0.6/samples/process.cc +622 -0
  30. data/ext/v8/upstream/2.0.6/samples/shell.cc +303 -0
  31. data/ext/v8/upstream/2.0.6/src/SConscript +283 -0
  32. data/ext/v8/upstream/2.0.6/src/accessors.cc +695 -0
  33. data/ext/v8/upstream/2.0.6/src/accessors.h +114 -0
  34. data/ext/v8/upstream/2.0.6/src/allocation.cc +198 -0
  35. data/ext/v8/upstream/2.0.6/src/allocation.h +169 -0
  36. data/ext/v8/upstream/2.0.6/src/api.cc +3831 -0
  37. data/ext/v8/upstream/2.0.6/src/api.h +479 -0
  38. data/ext/v8/upstream/2.0.6/src/apinatives.js +110 -0
  39. data/ext/v8/upstream/2.0.6/src/apiutils.h +69 -0
  40. data/ext/v8/upstream/2.0.6/src/arguments.h +97 -0
  41. data/ext/v8/upstream/2.0.6/src/arm/assembler-arm-inl.h +277 -0
  42. data/ext/v8/upstream/2.0.6/src/arm/assembler-arm.cc +1821 -0
  43. data/ext/v8/upstream/2.0.6/src/arm/assembler-arm.h +1027 -0
  44. data/ext/v8/upstream/2.0.6/src/arm/assembler-thumb2-inl.h +267 -0
  45. data/ext/v8/upstream/2.0.6/src/arm/assembler-thumb2.cc +1821 -0
  46. data/ext/v8/upstream/2.0.6/src/arm/assembler-thumb2.h +1027 -0
  47. data/ext/v8/upstream/2.0.6/src/arm/builtins-arm.cc +1271 -0
  48. data/ext/v8/upstream/2.0.6/src/arm/codegen-arm-inl.h +74 -0
  49. data/ext/v8/upstream/2.0.6/src/arm/codegen-arm.cc +6682 -0
  50. data/ext/v8/upstream/2.0.6/src/arm/codegen-arm.h +535 -0
  51. data/ext/v8/upstream/2.0.6/src/arm/constants-arm.cc +112 -0
  52. data/ext/v8/upstream/2.0.6/src/arm/constants-arm.h +347 -0
  53. data/ext/v8/upstream/2.0.6/src/arm/cpu-arm.cc +132 -0
  54. data/ext/v8/upstream/2.0.6/src/arm/debug-arm.cc +213 -0
  55. data/ext/v8/upstream/2.0.6/src/arm/disasm-arm.cc +1166 -0
  56. data/ext/v8/upstream/2.0.6/src/arm/fast-codegen-arm.cc +1698 -0
  57. data/ext/v8/upstream/2.0.6/src/arm/frames-arm.cc +123 -0
  58. data/ext/v8/upstream/2.0.6/src/arm/frames-arm.h +162 -0
  59. data/ext/v8/upstream/2.0.6/src/arm/ic-arm.cc +849 -0
  60. data/ext/v8/upstream/2.0.6/src/arm/jump-target-arm.cc +238 -0
  61. data/ext/v8/upstream/2.0.6/src/arm/macro-assembler-arm.cc +1259 -0
  62. data/ext/v8/upstream/2.0.6/src/arm/macro-assembler-arm.h +423 -0
  63. data/ext/v8/upstream/2.0.6/src/arm/regexp-macro-assembler-arm.cc +1266 -0
  64. data/ext/v8/upstream/2.0.6/src/arm/regexp-macro-assembler-arm.h +282 -0
  65. data/ext/v8/upstream/2.0.6/src/arm/register-allocator-arm-inl.h +103 -0
  66. data/ext/v8/upstream/2.0.6/src/arm/register-allocator-arm.cc +59 -0
  67. data/ext/v8/upstream/2.0.6/src/arm/register-allocator-arm.h +43 -0
  68. data/ext/v8/upstream/2.0.6/src/arm/simulator-arm.cc +2264 -0
  69. data/ext/v8/upstream/2.0.6/src/arm/simulator-arm.h +306 -0
  70. data/ext/v8/upstream/2.0.6/src/arm/stub-cache-arm.cc +1516 -0
  71. data/ext/v8/upstream/2.0.6/src/arm/virtual-frame-arm.cc +412 -0
  72. data/ext/v8/upstream/2.0.6/src/arm/virtual-frame-arm.h +532 -0
  73. data/ext/v8/upstream/2.0.6/src/array.js +1154 -0
  74. data/ext/v8/upstream/2.0.6/src/assembler.cc +772 -0
  75. data/ext/v8/upstream/2.0.6/src/assembler.h +525 -0
  76. data/ext/v8/upstream/2.0.6/src/ast.cc +512 -0
  77. data/ext/v8/upstream/2.0.6/src/ast.h +1820 -0
  78. data/ext/v8/upstream/2.0.6/src/bootstrapper.cc +1680 -0
  79. data/ext/v8/upstream/2.0.6/src/bootstrapper.h +103 -0
  80. data/ext/v8/upstream/2.0.6/src/builtins.cc +851 -0
  81. data/ext/v8/upstream/2.0.6/src/builtins.h +245 -0
  82. data/ext/v8/upstream/2.0.6/src/bytecodes-irregexp.h +104 -0
  83. data/ext/v8/upstream/2.0.6/src/char-predicates-inl.h +86 -0
  84. data/ext/v8/upstream/2.0.6/src/char-predicates.h +65 -0
  85. data/ext/v8/upstream/2.0.6/src/checks.cc +100 -0
  86. data/ext/v8/upstream/2.0.6/src/checks.h +284 -0
  87. data/ext/v8/upstream/2.0.6/src/code-stubs.cc +164 -0
  88. data/ext/v8/upstream/2.0.6/src/code-stubs.h +164 -0
  89. data/ext/v8/upstream/2.0.6/src/code.h +68 -0
  90. data/ext/v8/upstream/2.0.6/src/codegen-inl.h +88 -0
  91. data/ext/v8/upstream/2.0.6/src/codegen.cc +504 -0
  92. data/ext/v8/upstream/2.0.6/src/codegen.h +522 -0
  93. data/ext/v8/upstream/2.0.6/src/compilation-cache.cc +490 -0
  94. data/ext/v8/upstream/2.0.6/src/compilation-cache.h +98 -0
  95. data/ext/v8/upstream/2.0.6/src/compiler.cc +1132 -0
  96. data/ext/v8/upstream/2.0.6/src/compiler.h +107 -0
  97. data/ext/v8/upstream/2.0.6/src/contexts.cc +256 -0
  98. data/ext/v8/upstream/2.0.6/src/contexts.h +345 -0
  99. data/ext/v8/upstream/2.0.6/src/conversions-inl.h +95 -0
  100. data/ext/v8/upstream/2.0.6/src/conversions.cc +709 -0
  101. data/ext/v8/upstream/2.0.6/src/conversions.h +118 -0
  102. data/ext/v8/upstream/2.0.6/src/counters.cc +78 -0
  103. data/ext/v8/upstream/2.0.6/src/counters.h +239 -0
  104. data/ext/v8/upstream/2.0.6/src/cpu.h +65 -0
  105. data/ext/v8/upstream/2.0.6/src/d8-debug.cc +345 -0
  106. data/ext/v8/upstream/2.0.6/src/d8-debug.h +155 -0
  107. data/ext/v8/upstream/2.0.6/src/d8-posix.cc +675 -0
  108. data/ext/v8/upstream/2.0.6/src/d8-readline.cc +128 -0
  109. data/ext/v8/upstream/2.0.6/src/d8-windows.cc +42 -0
  110. data/ext/v8/upstream/2.0.6/src/d8.cc +776 -0
  111. data/ext/v8/upstream/2.0.6/src/d8.h +225 -0
  112. data/ext/v8/upstream/2.0.6/src/d8.js +1625 -0
  113. data/ext/v8/upstream/2.0.6/src/date-delay.js +1138 -0
  114. data/ext/v8/upstream/2.0.6/src/dateparser-inl.h +114 -0
  115. data/ext/v8/upstream/2.0.6/src/dateparser.cc +186 -0
  116. data/ext/v8/upstream/2.0.6/src/dateparser.h +240 -0
  117. data/ext/v8/upstream/2.0.6/src/debug-agent.cc +425 -0
  118. data/ext/v8/upstream/2.0.6/src/debug-agent.h +129 -0
  119. data/ext/v8/upstream/2.0.6/src/debug-delay.js +2073 -0
  120. data/ext/v8/upstream/2.0.6/src/debug.cc +2751 -0
  121. data/ext/v8/upstream/2.0.6/src/debug.h +866 -0
  122. data/ext/v8/upstream/2.0.6/src/disasm.h +77 -0
  123. data/ext/v8/upstream/2.0.6/src/disassembler.cc +318 -0
  124. data/ext/v8/upstream/2.0.6/src/disassembler.h +56 -0
  125. data/ext/v8/upstream/2.0.6/src/dtoa-config.c +91 -0
  126. data/ext/v8/upstream/2.0.6/src/execution.cc +701 -0
  127. data/ext/v8/upstream/2.0.6/src/execution.h +312 -0
  128. data/ext/v8/upstream/2.0.6/src/factory.cc +957 -0
  129. data/ext/v8/upstream/2.0.6/src/factory.h +393 -0
  130. data/ext/v8/upstream/2.0.6/src/fast-codegen.cc +725 -0
  131. data/ext/v8/upstream/2.0.6/src/fast-codegen.h +371 -0
  132. data/ext/v8/upstream/2.0.6/src/flag-definitions.h +426 -0
  133. data/ext/v8/upstream/2.0.6/src/flags.cc +555 -0
  134. data/ext/v8/upstream/2.0.6/src/flags.h +81 -0
  135. data/ext/v8/upstream/2.0.6/src/frame-element.cc +45 -0
  136. data/ext/v8/upstream/2.0.6/src/frame-element.h +235 -0
  137. data/ext/v8/upstream/2.0.6/src/frames-inl.h +215 -0
  138. data/ext/v8/upstream/2.0.6/src/frames.cc +749 -0
  139. data/ext/v8/upstream/2.0.6/src/frames.h +659 -0
  140. data/ext/v8/upstream/2.0.6/src/func-name-inferrer.cc +76 -0
  141. data/ext/v8/upstream/2.0.6/src/func-name-inferrer.h +135 -0
  142. data/ext/v8/upstream/2.0.6/src/global-handles.cc +516 -0
  143. data/ext/v8/upstream/2.0.6/src/global-handles.h +180 -0
  144. data/ext/v8/upstream/2.0.6/src/globals.h +608 -0
  145. data/ext/v8/upstream/2.0.6/src/handles-inl.h +76 -0
  146. data/ext/v8/upstream/2.0.6/src/handles.cc +811 -0
  147. data/ext/v8/upstream/2.0.6/src/handles.h +367 -0
  148. data/ext/v8/upstream/2.0.6/src/hashmap.cc +226 -0
  149. data/ext/v8/upstream/2.0.6/src/hashmap.h +120 -0
  150. data/ext/v8/upstream/2.0.6/src/heap-inl.h +407 -0
  151. data/ext/v8/upstream/2.0.6/src/heap-profiler.cc +695 -0
  152. data/ext/v8/upstream/2.0.6/src/heap-profiler.h +277 -0
  153. data/ext/v8/upstream/2.0.6/src/heap.cc +4204 -0
  154. data/ext/v8/upstream/2.0.6/src/heap.h +1704 -0
  155. data/ext/v8/upstream/2.0.6/src/ia32/assembler-ia32-inl.h +325 -0
  156. data/ext/v8/upstream/2.0.6/src/ia32/assembler-ia32.cc +2375 -0
  157. data/ext/v8/upstream/2.0.6/src/ia32/assembler-ia32.h +914 -0
  158. data/ext/v8/upstream/2.0.6/src/ia32/builtins-ia32.cc +1222 -0
  159. data/ext/v8/upstream/2.0.6/src/ia32/codegen-ia32-inl.h +46 -0
  160. data/ext/v8/upstream/2.0.6/src/ia32/codegen-ia32.cc +9770 -0
  161. data/ext/v8/upstream/2.0.6/src/ia32/codegen-ia32.h +834 -0
  162. data/ext/v8/upstream/2.0.6/src/ia32/cpu-ia32.cc +79 -0
  163. data/ext/v8/upstream/2.0.6/src/ia32/debug-ia32.cc +208 -0
  164. data/ext/v8/upstream/2.0.6/src/ia32/disasm-ia32.cc +1357 -0
  165. data/ext/v8/upstream/2.0.6/src/ia32/fast-codegen-ia32.cc +1813 -0
  166. data/ext/v8/upstream/2.0.6/src/ia32/frames-ia32.cc +111 -0
  167. data/ext/v8/upstream/2.0.6/src/ia32/frames-ia32.h +135 -0
  168. data/ext/v8/upstream/2.0.6/src/ia32/ic-ia32.cc +1490 -0
  169. data/ext/v8/upstream/2.0.6/src/ia32/jump-target-ia32.cc +432 -0
  170. data/ext/v8/upstream/2.0.6/src/ia32/macro-assembler-ia32.cc +1517 -0
  171. data/ext/v8/upstream/2.0.6/src/ia32/macro-assembler-ia32.h +528 -0
  172. data/ext/v8/upstream/2.0.6/src/ia32/regexp-macro-assembler-ia32.cc +1219 -0
  173. data/ext/v8/upstream/2.0.6/src/ia32/regexp-macro-assembler-ia32.h +230 -0
  174. data/ext/v8/upstream/2.0.6/src/ia32/register-allocator-ia32-inl.h +82 -0
  175. data/ext/v8/upstream/2.0.6/src/ia32/register-allocator-ia32.cc +99 -0
  176. data/ext/v8/upstream/2.0.6/src/ia32/register-allocator-ia32.h +43 -0
  177. data/ext/v8/upstream/2.0.6/src/ia32/simulator-ia32.cc +30 -0
  178. data/ext/v8/upstream/2.0.6/src/ia32/simulator-ia32.h +62 -0
  179. data/ext/v8/upstream/2.0.6/src/ia32/stub-cache-ia32.cc +1961 -0
  180. data/ext/v8/upstream/2.0.6/src/ia32/virtual-frame-ia32.cc +1105 -0
  181. data/ext/v8/upstream/2.0.6/src/ia32/virtual-frame-ia32.h +580 -0
  182. data/ext/v8/upstream/2.0.6/src/ic-inl.h +93 -0
  183. data/ext/v8/upstream/2.0.6/src/ic.cc +1426 -0
  184. data/ext/v8/upstream/2.0.6/src/ic.h +443 -0
  185. data/ext/v8/upstream/2.0.6/src/interpreter-irregexp.cc +646 -0
  186. data/ext/v8/upstream/2.0.6/src/interpreter-irregexp.h +48 -0
  187. data/ext/v8/upstream/2.0.6/src/json-delay.js +254 -0
  188. data/ext/v8/upstream/2.0.6/src/jsregexp.cc +5234 -0
  189. data/ext/v8/upstream/2.0.6/src/jsregexp.h +1439 -0
  190. data/ext/v8/upstream/2.0.6/src/jump-target-inl.h +49 -0
  191. data/ext/v8/upstream/2.0.6/src/jump-target.cc +383 -0
  192. data/ext/v8/upstream/2.0.6/src/jump-target.h +280 -0
  193. data/ext/v8/upstream/2.0.6/src/list-inl.h +166 -0
  194. data/ext/v8/upstream/2.0.6/src/list.h +158 -0
  195. data/ext/v8/upstream/2.0.6/src/log-inl.h +126 -0
  196. data/ext/v8/upstream/2.0.6/src/log-utils.cc +503 -0
  197. data/ext/v8/upstream/2.0.6/src/log-utils.h +292 -0
  198. data/ext/v8/upstream/2.0.6/src/log.cc +1457 -0
  199. data/ext/v8/upstream/2.0.6/src/log.h +371 -0
  200. data/ext/v8/upstream/2.0.6/src/macro-assembler.h +93 -0
  201. data/ext/v8/upstream/2.0.6/src/macros.py +137 -0
  202. data/ext/v8/upstream/2.0.6/src/mark-compact.cc +2007 -0
  203. data/ext/v8/upstream/2.0.6/src/mark-compact.h +442 -0
  204. data/ext/v8/upstream/2.0.6/src/math.js +263 -0
  205. data/ext/v8/upstream/2.0.6/src/memory.h +74 -0
  206. data/ext/v8/upstream/2.0.6/src/messages.cc +177 -0
  207. data/ext/v8/upstream/2.0.6/src/messages.h +112 -0
  208. data/ext/v8/upstream/2.0.6/src/messages.js +937 -0
  209. data/ext/v8/upstream/2.0.6/src/mirror-delay.js +2332 -0
  210. data/ext/v8/upstream/2.0.6/src/mksnapshot.cc +169 -0
  211. data/ext/v8/upstream/2.0.6/src/natives.h +63 -0
  212. data/ext/v8/upstream/2.0.6/src/objects-debug.cc +1317 -0
  213. data/ext/v8/upstream/2.0.6/src/objects-inl.h +3044 -0
  214. data/ext/v8/upstream/2.0.6/src/objects.cc +8306 -0
  215. data/ext/v8/upstream/2.0.6/src/objects.h +4960 -0
  216. data/ext/v8/upstream/2.0.6/src/oprofile-agent.cc +116 -0
  217. data/ext/v8/upstream/2.0.6/src/oprofile-agent.h +69 -0
  218. data/ext/v8/upstream/2.0.6/src/parser.cc +4810 -0
  219. data/ext/v8/upstream/2.0.6/src/parser.h +195 -0
  220. data/ext/v8/upstream/2.0.6/src/platform-freebsd.cc +645 -0
  221. data/ext/v8/upstream/2.0.6/src/platform-linux.cc +808 -0
  222. data/ext/v8/upstream/2.0.6/src/platform-macos.cc +643 -0
  223. data/ext/v8/upstream/2.0.6/src/platform-nullos.cc +454 -0
  224. data/ext/v8/upstream/2.0.6/src/platform-openbsd.cc +597 -0
  225. data/ext/v8/upstream/2.0.6/src/platform-posix.cc +380 -0
  226. data/ext/v8/upstream/2.0.6/src/platform-win32.cc +1908 -0
  227. data/ext/v8/upstream/2.0.6/src/platform.h +556 -0
  228. data/ext/v8/upstream/2.0.6/src/prettyprinter.cc +1511 -0
  229. data/ext/v8/upstream/2.0.6/src/prettyprinter.h +219 -0
  230. data/ext/v8/upstream/2.0.6/src/property.cc +96 -0
  231. data/ext/v8/upstream/2.0.6/src/property.h +327 -0
  232. data/ext/v8/upstream/2.0.6/src/regexp-delay.js +406 -0
  233. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-irregexp-inl.h +78 -0
  234. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-irregexp.cc +464 -0
  235. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-irregexp.h +141 -0
  236. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-tracer.cc +356 -0
  237. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-tracer.h +103 -0
  238. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler.cc +240 -0
  239. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler.h +220 -0
  240. data/ext/v8/upstream/2.0.6/src/regexp-stack.cc +103 -0
  241. data/ext/v8/upstream/2.0.6/src/regexp-stack.h +123 -0
  242. data/ext/v8/upstream/2.0.6/src/register-allocator-inl.h +74 -0
  243. data/ext/v8/upstream/2.0.6/src/register-allocator.cc +100 -0
  244. data/ext/v8/upstream/2.0.6/src/register-allocator.h +295 -0
  245. data/ext/v8/upstream/2.0.6/src/rewriter.cc +855 -0
  246. data/ext/v8/upstream/2.0.6/src/rewriter.h +54 -0
  247. data/ext/v8/upstream/2.0.6/src/runtime.cc +8163 -0
  248. data/ext/v8/upstream/2.0.6/src/runtime.h +432 -0
  249. data/ext/v8/upstream/2.0.6/src/runtime.js +626 -0
  250. data/ext/v8/upstream/2.0.6/src/scanner.cc +1098 -0
  251. data/ext/v8/upstream/2.0.6/src/scanner.h +425 -0
  252. data/ext/v8/upstream/2.0.6/src/scopeinfo.cc +649 -0
  253. data/ext/v8/upstream/2.0.6/src/scopeinfo.h +236 -0
  254. data/ext/v8/upstream/2.0.6/src/scopes.cc +963 -0
  255. data/ext/v8/upstream/2.0.6/src/scopes.h +401 -0
  256. data/ext/v8/upstream/2.0.6/src/serialize.cc +1260 -0
  257. data/ext/v8/upstream/2.0.6/src/serialize.h +404 -0
  258. data/ext/v8/upstream/2.0.6/src/shell.h +55 -0
  259. data/ext/v8/upstream/2.0.6/src/simulator.h +41 -0
  260. data/ext/v8/upstream/2.0.6/src/smart-pointer.h +109 -0
  261. data/ext/v8/upstream/2.0.6/src/snapshot-common.cc +97 -0
  262. data/ext/v8/upstream/2.0.6/src/snapshot-empty.cc +40 -0
  263. data/ext/v8/upstream/2.0.6/src/snapshot.h +59 -0
  264. data/ext/v8/upstream/2.0.6/src/spaces-inl.h +372 -0
  265. data/ext/v8/upstream/2.0.6/src/spaces.cc +2864 -0
  266. data/ext/v8/upstream/2.0.6/src/spaces.h +2072 -0
  267. data/ext/v8/upstream/2.0.6/src/string-stream.cc +584 -0
  268. data/ext/v8/upstream/2.0.6/src/string-stream.h +189 -0
  269. data/ext/v8/upstream/2.0.6/src/string.js +901 -0
  270. data/ext/v8/upstream/2.0.6/src/stub-cache.cc +1108 -0
  271. data/ext/v8/upstream/2.0.6/src/stub-cache.h +578 -0
  272. data/ext/v8/upstream/2.0.6/src/third_party/dtoa/COPYING +15 -0
  273. data/ext/v8/upstream/2.0.6/src/third_party/dtoa/dtoa.c +3330 -0
  274. data/ext/v8/upstream/2.0.6/src/third_party/valgrind/valgrind.h +3925 -0
  275. data/ext/v8/upstream/2.0.6/src/token.cc +56 -0
  276. data/ext/v8/upstream/2.0.6/src/token.h +270 -0
  277. data/ext/v8/upstream/2.0.6/src/top.cc +991 -0
  278. data/ext/v8/upstream/2.0.6/src/top.h +459 -0
  279. data/ext/v8/upstream/2.0.6/src/unicode-inl.h +238 -0
  280. data/ext/v8/upstream/2.0.6/src/unicode.cc +749 -0
  281. data/ext/v8/upstream/2.0.6/src/unicode.h +279 -0
  282. data/ext/v8/upstream/2.0.6/src/uri.js +415 -0
  283. data/ext/v8/upstream/2.0.6/src/usage-analyzer.cc +426 -0
  284. data/ext/v8/upstream/2.0.6/src/usage-analyzer.h +40 -0
  285. data/ext/v8/upstream/2.0.6/src/utils.cc +322 -0
  286. data/ext/v8/upstream/2.0.6/src/utils.h +592 -0
  287. data/ext/v8/upstream/2.0.6/src/v8-counters.cc +55 -0
  288. data/ext/v8/upstream/2.0.6/src/v8-counters.h +198 -0
  289. data/ext/v8/upstream/2.0.6/src/v8.cc +193 -0
  290. data/ext/v8/upstream/2.0.6/src/v8.h +119 -0
  291. data/ext/v8/upstream/2.0.6/src/v8natives.js +846 -0
  292. data/ext/v8/upstream/2.0.6/src/v8threads.cc +450 -0
  293. data/ext/v8/upstream/2.0.6/src/v8threads.h +144 -0
  294. data/ext/v8/upstream/2.0.6/src/variables.cc +163 -0
  295. data/ext/v8/upstream/2.0.6/src/variables.h +235 -0
  296. data/ext/v8/upstream/2.0.6/src/version.cc +88 -0
  297. data/ext/v8/upstream/2.0.6/src/version.h +64 -0
  298. data/ext/v8/upstream/2.0.6/src/virtual-frame.cc +381 -0
  299. data/ext/v8/upstream/2.0.6/src/virtual-frame.h +44 -0
  300. data/ext/v8/upstream/2.0.6/src/x64/assembler-x64-inl.h +352 -0
  301. data/ext/v8/upstream/2.0.6/src/x64/assembler-x64.cc +2539 -0
  302. data/ext/v8/upstream/2.0.6/src/x64/assembler-x64.h +1399 -0
  303. data/ext/v8/upstream/2.0.6/src/x64/builtins-x64.cc +1255 -0
  304. data/ext/v8/upstream/2.0.6/src/x64/codegen-x64-inl.h +46 -0
  305. data/ext/v8/upstream/2.0.6/src/x64/codegen-x64.cc +8223 -0
  306. data/ext/v8/upstream/2.0.6/src/x64/codegen-x64.h +785 -0
  307. data/ext/v8/upstream/2.0.6/src/x64/cpu-x64.cc +79 -0
  308. data/ext/v8/upstream/2.0.6/src/x64/debug-x64.cc +202 -0
  309. data/ext/v8/upstream/2.0.6/src/x64/disasm-x64.cc +1596 -0
  310. data/ext/v8/upstream/2.0.6/src/x64/fast-codegen-x64.cc +1820 -0
  311. data/ext/v8/upstream/2.0.6/src/x64/frames-x64.cc +109 -0
  312. data/ext/v8/upstream/2.0.6/src/x64/frames-x64.h +121 -0
  313. data/ext/v8/upstream/2.0.6/src/x64/ic-x64.cc +1392 -0
  314. data/ext/v8/upstream/2.0.6/src/x64/jump-target-x64.cc +432 -0
  315. data/ext/v8/upstream/2.0.6/src/x64/macro-assembler-x64.cc +2409 -0
  316. data/ext/v8/upstream/2.0.6/src/x64/macro-assembler-x64.h +765 -0
  317. data/ext/v8/upstream/2.0.6/src/x64/regexp-macro-assembler-x64.cc +1337 -0
  318. data/ext/v8/upstream/2.0.6/src/x64/regexp-macro-assembler-x64.h +295 -0
  319. data/ext/v8/upstream/2.0.6/src/x64/register-allocator-x64-inl.h +86 -0
  320. data/ext/v8/upstream/2.0.6/src/x64/register-allocator-x64.cc +84 -0
  321. data/ext/v8/upstream/2.0.6/src/x64/register-allocator-x64.h +43 -0
  322. data/ext/v8/upstream/2.0.6/src/x64/simulator-x64.cc +27 -0
  323. data/ext/v8/upstream/2.0.6/src/x64/simulator-x64.h +63 -0
  324. data/ext/v8/upstream/2.0.6/src/x64/stub-cache-x64.cc +1884 -0
  325. data/ext/v8/upstream/2.0.6/src/x64/virtual-frame-x64.cc +1089 -0
  326. data/ext/v8/upstream/2.0.6/src/x64/virtual-frame-x64.h +560 -0
  327. data/ext/v8/upstream/2.0.6/src/zone-inl.h +297 -0
  328. data/ext/v8/upstream/2.0.6/src/zone.cc +193 -0
  329. data/ext/v8/upstream/2.0.6/src/zone.h +305 -0
  330. data/ext/v8/upstream/2.0.6/test/cctest/SConscript +95 -0
  331. data/ext/v8/upstream/2.0.6/test/cctest/cctest.cc +126 -0
  332. data/ext/v8/upstream/2.0.6/test/cctest/cctest.h +211 -0
  333. data/ext/v8/upstream/2.0.6/test/cctest/cctest.status +54 -0
  334. data/ext/v8/upstream/2.0.6/test/cctest/test-accessors.cc +450 -0
  335. data/ext/v8/upstream/2.0.6/test/cctest/test-alloc.cc +215 -0
  336. data/ext/v8/upstream/2.0.6/test/cctest/test-api.cc +8699 -0
  337. data/ext/v8/upstream/2.0.6/test/cctest/test-assembler-arm.cc +227 -0
  338. data/ext/v8/upstream/2.0.6/test/cctest/test-assembler-ia32.cc +395 -0
  339. data/ext/v8/upstream/2.0.6/test/cctest/test-assembler-x64.cc +292 -0
  340. data/ext/v8/upstream/2.0.6/test/cctest/test-ast.cc +97 -0
  341. data/ext/v8/upstream/2.0.6/test/cctest/test-compiler.cc +318 -0
  342. data/ext/v8/upstream/2.0.6/test/cctest/test-conversions.cc +130 -0
  343. data/ext/v8/upstream/2.0.6/test/cctest/test-debug.cc +5788 -0
  344. data/ext/v8/upstream/2.0.6/test/cctest/test-decls.cc +593 -0
  345. data/ext/v8/upstream/2.0.6/test/cctest/test-disasm-arm.cc +281 -0
  346. data/ext/v8/upstream/2.0.6/test/cctest/test-disasm-ia32.cc +418 -0
  347. data/ext/v8/upstream/2.0.6/test/cctest/test-flags.cc +234 -0
  348. data/ext/v8/upstream/2.0.6/test/cctest/test-func-name-inference.cc +267 -0
  349. data/ext/v8/upstream/2.0.6/test/cctest/test-hashmap.cc +176 -0
  350. data/ext/v8/upstream/2.0.6/test/cctest/test-heap-profiler.cc +396 -0
  351. data/ext/v8/upstream/2.0.6/test/cctest/test-heap.cc +796 -0
  352. data/ext/v8/upstream/2.0.6/test/cctest/test-list.cc +101 -0
  353. data/ext/v8/upstream/2.0.6/test/cctest/test-lock.cc +63 -0
  354. data/ext/v8/upstream/2.0.6/test/cctest/test-log-stack-tracer.cc +372 -0
  355. data/ext/v8/upstream/2.0.6/test/cctest/test-log-utils.cc +310 -0
  356. data/ext/v8/upstream/2.0.6/test/cctest/test-log.cc +1081 -0
  357. data/ext/v8/upstream/2.0.6/test/cctest/test-macro-assembler-x64.cc +2104 -0
  358. data/ext/v8/upstream/2.0.6/test/cctest/test-mark-compact.cc +341 -0
  359. data/ext/v8/upstream/2.0.6/test/cctest/test-parsing.cc +129 -0
  360. data/ext/v8/upstream/2.0.6/test/cctest/test-platform-linux.cc +80 -0
  361. data/ext/v8/upstream/2.0.6/test/cctest/test-platform-macos.cc +10 -0
  362. data/ext/v8/upstream/2.0.6/test/cctest/test-platform-nullos.cc +80 -0
  363. data/ext/v8/upstream/2.0.6/test/cctest/test-platform-win32.cc +26 -0
  364. data/ext/v8/upstream/2.0.6/test/cctest/test-regexp.cc +1815 -0
  365. data/ext/v8/upstream/2.0.6/test/cctest/test-serialize.cc +438 -0
  366. data/ext/v8/upstream/2.0.6/test/cctest/test-sockets.cc +162 -0
  367. data/ext/v8/upstream/2.0.6/test/cctest/test-spaces.cc +248 -0
  368. data/ext/v8/upstream/2.0.6/test/cctest/test-strings.cc +432 -0
  369. data/ext/v8/upstream/2.0.6/test/cctest/test-thread-termination.cc +290 -0
  370. data/ext/v8/upstream/2.0.6/test/cctest/test-threads.cc +52 -0
  371. data/ext/v8/upstream/2.0.6/test/cctest/test-utils.cc +186 -0
  372. data/ext/v8/upstream/2.0.6/test/cctest/test-version.cc +89 -0
  373. data/ext/v8/upstream/2.0.6/test/cctest/testcfg.py +108 -0
  374. data/ext/v8/upstream/2.0.6/test/es5conform/README +14 -0
  375. data/ext/v8/upstream/2.0.6/test/es5conform/es5conform.status +226 -0
  376. data/ext/v8/upstream/2.0.6/test/es5conform/harness-adapt.js +74 -0
  377. data/ext/v8/upstream/2.0.6/test/es5conform/testcfg.py +108 -0
  378. data/ext/v8/upstream/2.0.6/test/message/message.status +31 -0
  379. data/ext/v8/upstream/2.0.6/test/message/overwritten-builtins.js +31 -0
  380. data/ext/v8/upstream/2.0.6/test/message/overwritten-builtins.out +30 -0
  381. data/ext/v8/upstream/2.0.6/test/message/regress/regress-73.js +33 -0
  382. data/ext/v8/upstream/2.0.6/test/message/regress/regress-73.out +30 -0
  383. data/ext/v8/upstream/2.0.6/test/message/regress/regress-75.js +32 -0
  384. data/ext/v8/upstream/2.0.6/test/message/regress/regress-75.out +30 -0
  385. data/ext/v8/upstream/2.0.6/test/message/simple-throw.js +28 -0
  386. data/ext/v8/upstream/2.0.6/test/message/simple-throw.out +30 -0
  387. data/ext/v8/upstream/2.0.6/test/message/testcfg.py +135 -0
  388. data/ext/v8/upstream/2.0.6/test/message/try-catch-finally-no-message.js +51 -0
  389. data/ext/v8/upstream/2.0.6/test/message/try-catch-finally-no-message.out +26 -0
  390. data/ext/v8/upstream/2.0.6/test/message/try-catch-finally-return-in-finally.js +39 -0
  391. data/ext/v8/upstream/2.0.6/test/message/try-catch-finally-return-in-finally.out +28 -0
  392. data/ext/v8/upstream/2.0.6/test/message/try-catch-finally-throw-in-catch-and-finally.js +34 -0
  393. data/ext/v8/upstream/2.0.6/test/message/try-catch-finally-throw-in-catch-and-finally.out +30 -0
  394. data/ext/v8/upstream/2.0.6/test/message/try-catch-finally-throw-in-catch.js +34 -0
  395. data/ext/v8/upstream/2.0.6/test/message/try-catch-finally-throw-in-catch.out +30 -0
  396. data/ext/v8/upstream/2.0.6/test/message/try-catch-finally-throw-in-finally.js +34 -0
  397. data/ext/v8/upstream/2.0.6/test/message/try-catch-finally-throw-in-finally.out +30 -0
  398. data/ext/v8/upstream/2.0.6/test/message/try-finally-return-in-finally.js +37 -0
  399. data/ext/v8/upstream/2.0.6/test/message/try-finally-return-in-finally.out +28 -0
  400. data/ext/v8/upstream/2.0.6/test/message/try-finally-throw-in-finally.js +32 -0
  401. data/ext/v8/upstream/2.0.6/test/message/try-finally-throw-in-finally.out +30 -0
  402. data/ext/v8/upstream/2.0.6/test/message/try-finally-throw-in-try-and-finally.js +32 -0
  403. data/ext/v8/upstream/2.0.6/test/message/try-finally-throw-in-try-and-finally.out +30 -0
  404. data/ext/v8/upstream/2.0.6/test/message/try-finally-throw-in-try.js +32 -0
  405. data/ext/v8/upstream/2.0.6/test/message/try-finally-throw-in-try.out +30 -0
  406. data/ext/v8/upstream/2.0.6/test/mjsunit/api-call-after-bypassed-exception.js +39 -0
  407. data/ext/v8/upstream/2.0.6/test/mjsunit/apply.js +196 -0
  408. data/ext/v8/upstream/2.0.6/test/mjsunit/arguments-apply.js +134 -0
  409. data/ext/v8/upstream/2.0.6/test/mjsunit/arguments-call-apply.js +41 -0
  410. data/ext/v8/upstream/2.0.6/test/mjsunit/arguments-enum.js +52 -0
  411. data/ext/v8/upstream/2.0.6/test/mjsunit/arguments-indirect.js +47 -0
  412. data/ext/v8/upstream/2.0.6/test/mjsunit/arguments-lazy.js +47 -0
  413. data/ext/v8/upstream/2.0.6/test/mjsunit/arguments-opt.js +130 -0
  414. data/ext/v8/upstream/2.0.6/test/mjsunit/arguments-read-and-assignment.js +164 -0
  415. data/ext/v8/upstream/2.0.6/test/mjsunit/arguments.js +97 -0
  416. data/ext/v8/upstream/2.0.6/test/mjsunit/array-concat.js +120 -0
  417. data/ext/v8/upstream/2.0.6/test/mjsunit/array-constructor.js +119 -0
  418. data/ext/v8/upstream/2.0.6/test/mjsunit/array-functions-prototype.js +159 -0
  419. data/ext/v8/upstream/2.0.6/test/mjsunit/array-indexing.js +66 -0
  420. data/ext/v8/upstream/2.0.6/test/mjsunit/array-iteration.js +228 -0
  421. data/ext/v8/upstream/2.0.6/test/mjsunit/array-join.js +45 -0
  422. data/ext/v8/upstream/2.0.6/test/mjsunit/array-length-number-conversion.js +53 -0
  423. data/ext/v8/upstream/2.0.6/test/mjsunit/array-length.js +111 -0
  424. data/ext/v8/upstream/2.0.6/test/mjsunit/array-reduce.js +514 -0
  425. data/ext/v8/upstream/2.0.6/test/mjsunit/array-sort.js +362 -0
  426. data/ext/v8/upstream/2.0.6/test/mjsunit/array-splice.js +314 -0
  427. data/ext/v8/upstream/2.0.6/test/mjsunit/ascii-regexp-subject.js +49 -0
  428. data/ext/v8/upstream/2.0.6/test/mjsunit/big-array-literal.js +111 -0
  429. data/ext/v8/upstream/2.0.6/test/mjsunit/big-object-literal.js +114 -0
  430. data/ext/v8/upstream/2.0.6/test/mjsunit/binary-operation-overwrite.js +36 -0
  431. data/ext/v8/upstream/2.0.6/test/mjsunit/bit-not.js +75 -0
  432. data/ext/v8/upstream/2.0.6/test/mjsunit/bitwise-operations-undefined.js +49 -0
  433. data/ext/v8/upstream/2.0.6/test/mjsunit/body-not-visible.js +39 -0
  434. data/ext/v8/upstream/2.0.6/test/mjsunit/bugs/bug-1344252.js +79 -0
  435. data/ext/v8/upstream/2.0.6/test/mjsunit/bugs/bug-222.js +42 -0
  436. data/ext/v8/upstream/2.0.6/test/mjsunit/bugs/bug-223.js +39 -0
  437. data/ext/v8/upstream/2.0.6/test/mjsunit/bugs/bug-900066.js +38 -0
  438. data/ext/v8/upstream/2.0.6/test/mjsunit/bugs/bug-941049.js +100 -0
  439. data/ext/v8/upstream/2.0.6/test/mjsunit/call-non-function-call.js +38 -0
  440. data/ext/v8/upstream/2.0.6/test/mjsunit/call-non-function.js +63 -0
  441. data/ext/v8/upstream/2.0.6/test/mjsunit/call.js +87 -0
  442. data/ext/v8/upstream/2.0.6/test/mjsunit/char-escape.js +53 -0
  443. data/ext/v8/upstream/2.0.6/test/mjsunit/class-of-builtins.js +50 -0
  444. data/ext/v8/upstream/2.0.6/test/mjsunit/closure.js +37 -0
  445. data/ext/v8/upstream/2.0.6/test/mjsunit/codegen-coverage.js +91 -0
  446. data/ext/v8/upstream/2.0.6/test/mjsunit/compare-character.js +50 -0
  447. data/ext/v8/upstream/2.0.6/test/mjsunit/compare-nan.js +66 -0
  448. data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/countoperation.js +111 -0
  449. data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/function-call.js +52 -0
  450. data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/globals.js +65 -0
  451. data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/jsnatives.js +33 -0
  452. data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/literals-assignment.js +104 -0
  453. data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/literals.js +52 -0
  454. data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/loops.js +35 -0
  455. data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/objectliterals.js +57 -0
  456. data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/property-simple.js +39 -0
  457. data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/short-circuit.js +102 -0
  458. data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/thisfunction.js +35 -0
  459. data/ext/v8/upstream/2.0.6/test/mjsunit/const-declaration.js +172 -0
  460. data/ext/v8/upstream/2.0.6/test/mjsunit/const-eval-init.js +111 -0
  461. data/ext/v8/upstream/2.0.6/test/mjsunit/const-redecl.js +220 -0
  462. data/ext/v8/upstream/2.0.6/test/mjsunit/const.js +70 -0
  463. data/ext/v8/upstream/2.0.6/test/mjsunit/constant-folding.js +232 -0
  464. data/ext/v8/upstream/2.0.6/test/mjsunit/context-variable-assignments.js +37 -0
  465. data/ext/v8/upstream/2.0.6/test/mjsunit/cyclic-array-to-string.js +65 -0
  466. data/ext/v8/upstream/2.0.6/test/mjsunit/cyrillic.js +199 -0
  467. data/ext/v8/upstream/2.0.6/test/mjsunit/d8-os.js +180 -0
  468. data/ext/v8/upstream/2.0.6/test/mjsunit/date-parse.js +268 -0
  469. data/ext/v8/upstream/2.0.6/test/mjsunit/date.js +149 -0
  470. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-backtrace-text.js +122 -0
  471. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-backtrace.js +272 -0
  472. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-breakpoints.js +120 -0
  473. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-changebreakpoint.js +108 -0
  474. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-clearbreakpoint.js +101 -0
  475. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-clearbreakpointgroup.js +117 -0
  476. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-compile-event.js +126 -0
  477. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-conditional-breakpoints.js +171 -0
  478. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-constructed-by.js +60 -0
  479. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-constructor.js +78 -0
  480. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-continue.js +114 -0
  481. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-enable-disable-breakpoints.js +90 -0
  482. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-evaluate-arguments.js +93 -0
  483. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-evaluate-bool-constructor.js +80 -0
  484. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-evaluate-locals.js +132 -0
  485. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-evaluate-recursive.js +167 -0
  486. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-evaluate-with.js +77 -0
  487. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-evaluate.js +118 -0
  488. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-event-listener.js +73 -0
  489. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-handle.js +252 -0
  490. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-ignore-breakpoints.js +89 -0
  491. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-mirror-cache.js +85 -0
  492. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-multiple-breakpoints.js +105 -0
  493. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-referenced-by.js +112 -0
  494. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-references.js +118 -0
  495. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-scopes.js +761 -0
  496. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-script-breakpoints.js +112 -0
  497. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-script.js +92 -0
  498. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-scripts-request.js +108 -0
  499. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-setbreakpoint.js +165 -0
  500. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-sourceinfo.js +352 -0
  501. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-sourceslice.js +74 -0
  502. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-step-stub-callfunction.js +87 -0
  503. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-step.js +82 -0
  504. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-stepin-accessor.js +248 -0
  505. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-stepin-builtin.js +78 -0
  506. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-stepin-call-function-stub.js +115 -0
  507. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-stepin-constructor.js +78 -0
  508. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-stepin-function-call.js +149 -0
  509. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-stepnext-do-while.js +79 -0
  510. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-stepout-recursive-function.js +106 -0
  511. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-stepout-to-builtin.js +84 -0
  512. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-suspend.js +96 -0
  513. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-version.js +90 -0
  514. data/ext/v8/upstream/2.0.6/test/mjsunit/declare-locally.js +43 -0
  515. data/ext/v8/upstream/2.0.6/test/mjsunit/deep-recursion.js +66 -0
  516. data/ext/v8/upstream/2.0.6/test/mjsunit/delay-syntax-error.js +41 -0
  517. data/ext/v8/upstream/2.0.6/test/mjsunit/delete-global-properties.js +37 -0
  518. data/ext/v8/upstream/2.0.6/test/mjsunit/delete-in-eval.js +32 -0
  519. data/ext/v8/upstream/2.0.6/test/mjsunit/delete-in-with.js +34 -0
  520. data/ext/v8/upstream/2.0.6/test/mjsunit/delete-vars-from-eval.js +40 -0
  521. data/ext/v8/upstream/2.0.6/test/mjsunit/delete.js +163 -0
  522. data/ext/v8/upstream/2.0.6/test/mjsunit/div-mod.js +157 -0
  523. data/ext/v8/upstream/2.0.6/test/mjsunit/do-not-strip-fc.js +31 -0
  524. data/ext/v8/upstream/2.0.6/test/mjsunit/dont-enum-array-holes.js +35 -0
  525. data/ext/v8/upstream/2.0.6/test/mjsunit/dont-reinit-global-var.js +47 -0
  526. data/ext/v8/upstream/2.0.6/test/mjsunit/double-equals.js +114 -0
  527. data/ext/v8/upstream/2.0.6/test/mjsunit/dtoa.js +32 -0
  528. data/ext/v8/upstream/2.0.6/test/mjsunit/enumeration-order.js +109 -0
  529. data/ext/v8/upstream/2.0.6/test/mjsunit/error-constructors.js +32 -0
  530. data/ext/v8/upstream/2.0.6/test/mjsunit/escape.js +118 -0
  531. data/ext/v8/upstream/2.0.6/test/mjsunit/eval-enclosing-function-name.js +76 -0
  532. data/ext/v8/upstream/2.0.6/test/mjsunit/eval-typeof-non-existing.js +35 -0
  533. data/ext/v8/upstream/2.0.6/test/mjsunit/eval.js +157 -0
  534. data/ext/v8/upstream/2.0.6/test/mjsunit/execScript-case-insensitive.js +34 -0
  535. data/ext/v8/upstream/2.0.6/test/mjsunit/extra-arguments.js +54 -0
  536. data/ext/v8/upstream/2.0.6/test/mjsunit/extra-commas.js +46 -0
  537. data/ext/v8/upstream/2.0.6/test/mjsunit/for-in-null-or-undefined.js +33 -0
  538. data/ext/v8/upstream/2.0.6/test/mjsunit/for-in-special-cases.js +64 -0
  539. data/ext/v8/upstream/2.0.6/test/mjsunit/for-in.js +86 -0
  540. data/ext/v8/upstream/2.0.6/test/mjsunit/fun-as-prototype.js +36 -0
  541. data/ext/v8/upstream/2.0.6/test/mjsunit/fun-name.js +34 -0
  542. data/ext/v8/upstream/2.0.6/test/mjsunit/function-arguments-null.js +30 -0
  543. data/ext/v8/upstream/2.0.6/test/mjsunit/function-caller.js +48 -0
  544. data/ext/v8/upstream/2.0.6/test/mjsunit/function-names.js +133 -0
  545. data/ext/v8/upstream/2.0.6/test/mjsunit/function-property.js +29 -0
  546. data/ext/v8/upstream/2.0.6/test/mjsunit/function-prototype.js +98 -0
  547. data/ext/v8/upstream/2.0.6/test/mjsunit/function-source.js +49 -0
  548. data/ext/v8/upstream/2.0.6/test/mjsunit/function.js +83 -0
  549. data/ext/v8/upstream/2.0.6/test/mjsunit/fuzz-accessors.js +85 -0
  550. data/ext/v8/upstream/2.0.6/test/mjsunit/fuzz-natives.js +159 -0
  551. data/ext/v8/upstream/2.0.6/test/mjsunit/get-own-property-descriptor.js +51 -0
  552. data/ext/v8/upstream/2.0.6/test/mjsunit/get-prototype-of.js +68 -0
  553. data/ext/v8/upstream/2.0.6/test/mjsunit/getter-in-prototype.js +50 -0
  554. data/ext/v8/upstream/2.0.6/test/mjsunit/getter-in-value-prototype.js +35 -0
  555. data/ext/v8/upstream/2.0.6/test/mjsunit/global-const-var-conflicts.js +57 -0
  556. data/ext/v8/upstream/2.0.6/test/mjsunit/global-deleted-property-ic.js +45 -0
  557. data/ext/v8/upstream/2.0.6/test/mjsunit/global-deleted-property-keyed.js +38 -0
  558. data/ext/v8/upstream/2.0.6/test/mjsunit/global-ic.js +48 -0
  559. data/ext/v8/upstream/2.0.6/test/mjsunit/global-load-from-eval-in-with.js +59 -0
  560. data/ext/v8/upstream/2.0.6/test/mjsunit/global-load-from-eval.js +85 -0
  561. data/ext/v8/upstream/2.0.6/test/mjsunit/global-load-from-nested-eval.js +66 -0
  562. data/ext/v8/upstream/2.0.6/test/mjsunit/global-vars-eval.js +34 -0
  563. data/ext/v8/upstream/2.0.6/test/mjsunit/global-vars-with.js +43 -0
  564. data/ext/v8/upstream/2.0.6/test/mjsunit/greedy.js +60 -0
  565. data/ext/v8/upstream/2.0.6/test/mjsunit/has-own-property.js +38 -0
  566. data/ext/v8/upstream/2.0.6/test/mjsunit/html-comments.js +57 -0
  567. data/ext/v8/upstream/2.0.6/test/mjsunit/html-string-funcs.js +47 -0
  568. data/ext/v8/upstream/2.0.6/test/mjsunit/if-in-undefined.js +36 -0
  569. data/ext/v8/upstream/2.0.6/test/mjsunit/in.js +159 -0
  570. data/ext/v8/upstream/2.0.6/test/mjsunit/indexed-accessors.js +120 -0
  571. data/ext/v8/upstream/2.0.6/test/mjsunit/instanceof.js +93 -0
  572. data/ext/v8/upstream/2.0.6/test/mjsunit/integer-to-string.js +35 -0
  573. data/ext/v8/upstream/2.0.6/test/mjsunit/invalid-lhs.js +65 -0
  574. data/ext/v8/upstream/2.0.6/test/mjsunit/invalid-source-element.js +31 -0
  575. data/ext/v8/upstream/2.0.6/test/mjsunit/json.js +207 -0
  576. data/ext/v8/upstream/2.0.6/test/mjsunit/keyed-ic.js +236 -0
  577. data/ext/v8/upstream/2.0.6/test/mjsunit/keyed-storage-extend.js +55 -0
  578. data/ext/v8/upstream/2.0.6/test/mjsunit/large-object-allocation.js +300 -0
  579. data/ext/v8/upstream/2.0.6/test/mjsunit/large-object-literal.js +56 -0
  580. data/ext/v8/upstream/2.0.6/test/mjsunit/lazy-load.js +34 -0
  581. data/ext/v8/upstream/2.0.6/test/mjsunit/leakcheck.js +53 -0
  582. data/ext/v8/upstream/2.0.6/test/mjsunit/length.js +78 -0
  583. data/ext/v8/upstream/2.0.6/test/mjsunit/local-load-from-eval.js +39 -0
  584. data/ext/v8/upstream/2.0.6/test/mjsunit/math-min-max.js +105 -0
  585. data/ext/v8/upstream/2.0.6/test/mjsunit/megamorphic-callbacks.js +70 -0
  586. data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-array.js +138 -0
  587. data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-boolean.js +59 -0
  588. data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-date.js +77 -0
  589. data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-error.js +94 -0
  590. data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-function.js +90 -0
  591. data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-null.js +50 -0
  592. data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-number.js +77 -0
  593. data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-object.js +227 -0
  594. data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-regexp.js +110 -0
  595. data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-script.js +100 -0
  596. data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-string.js +89 -0
  597. data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-undefined.js +50 -0
  598. data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-unresolved-function.js +81 -0
  599. data/ext/v8/upstream/2.0.6/test/mjsunit/mjsunit.js +203 -0
  600. data/ext/v8/upstream/2.0.6/test/mjsunit/mjsunit.status +66 -0
  601. data/ext/v8/upstream/2.0.6/test/mjsunit/mul-exhaustive.js +4511 -0
  602. data/ext/v8/upstream/2.0.6/test/mjsunit/multiple-return.js +62 -0
  603. data/ext/v8/upstream/2.0.6/test/mjsunit/negate-zero.js +42 -0
  604. data/ext/v8/upstream/2.0.6/test/mjsunit/negate.js +59 -0
  605. data/ext/v8/upstream/2.0.6/test/mjsunit/new.js +56 -0
  606. data/ext/v8/upstream/2.0.6/test/mjsunit/newline-in-string.js +46 -0
  607. data/ext/v8/upstream/2.0.6/test/mjsunit/no-branch-elimination.js +36 -0
  608. data/ext/v8/upstream/2.0.6/test/mjsunit/no-octal-constants-above-256.js +32 -0
  609. data/ext/v8/upstream/2.0.6/test/mjsunit/no-semicolon.js +45 -0
  610. data/ext/v8/upstream/2.0.6/test/mjsunit/non-ascii-replace.js +30 -0
  611. data/ext/v8/upstream/2.0.6/test/mjsunit/nul-characters.js +38 -0
  612. data/ext/v8/upstream/2.0.6/test/mjsunit/number-limits.js +47 -0
  613. data/ext/v8/upstream/2.0.6/test/mjsunit/number-string-index-call.js +32 -0
  614. data/ext/v8/upstream/2.0.6/test/mjsunit/number-tostring-small.js +395 -0
  615. data/ext/v8/upstream/2.0.6/test/mjsunit/number-tostring.js +338 -0
  616. data/ext/v8/upstream/2.0.6/test/mjsunit/obj-construct.js +46 -0
  617. data/ext/v8/upstream/2.0.6/test/mjsunit/object-create.js +250 -0
  618. data/ext/v8/upstream/2.0.6/test/mjsunit/object-literal-gc.js +66 -0
  619. data/ext/v8/upstream/2.0.6/test/mjsunit/object-literal.js +105 -0
  620. data/ext/v8/upstream/2.0.6/test/mjsunit/override-read-only-property.js +64 -0
  621. data/ext/v8/upstream/2.0.6/test/mjsunit/parse-int-float.js +85 -0
  622. data/ext/v8/upstream/2.0.6/test/mjsunit/property-load-across-eval.js +85 -0
  623. data/ext/v8/upstream/2.0.6/test/mjsunit/property-object-key.js +36 -0
  624. data/ext/v8/upstream/2.0.6/test/mjsunit/proto.js +33 -0
  625. data/ext/v8/upstream/2.0.6/test/mjsunit/prototype.js +93 -0
  626. data/ext/v8/upstream/2.0.6/test/mjsunit/receiver-in-with-calls.js +47 -0
  627. data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-UC16.js +47 -0
  628. data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-call-as-function.js +36 -0
  629. data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-capture.js +57 -0
  630. data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-captures.js +31 -0
  631. data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-indexof.js +77 -0
  632. data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-lookahead.js +166 -0
  633. data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-loop-capture.js +29 -0
  634. data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-multiline-stack-trace.js +116 -0
  635. data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-multiline.js +112 -0
  636. data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-standalones.js +78 -0
  637. data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-static.js +167 -0
  638. data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-string-methods.js +51 -0
  639. data/ext/v8/upstream/2.0.6/test/mjsunit/regexp.js +390 -0
  640. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1030466.js +45 -0
  641. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1036894.js +38 -0
  642. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1039610.js +29 -0
  643. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1050043.js +51 -0
  644. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1062422.js +30 -0
  645. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1066899.js +37 -0
  646. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1081309.js +110 -0
  647. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1102760.js +35 -0
  648. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1110164.js +46 -0
  649. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1112051.js +33 -0
  650. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1114040.js +58 -0
  651. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1134697.js +31 -0
  652. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-114.js +43 -0
  653. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-116.js +40 -0
  654. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1170187.js +80 -0
  655. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1173979.js +48 -0
  656. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1175390.js +30 -0
  657. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1177518.js +39 -0
  658. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1177809.js +31 -0
  659. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1178598.js +90 -0
  660. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1182832.js +38 -0
  661. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1187524.js +34 -0
  662. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1199401.js +75 -0
  663. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1199637.js +78 -0
  664. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1200351.js +2032 -0
  665. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1201933.js +40 -0
  666. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1203459.js +29 -0
  667. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1207276.js +36 -0
  668. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1213516.js +40 -0
  669. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1213575.js +41 -0
  670. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1215653.js +365 -0
  671. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-124.js +57 -0
  672. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1254366.js +38 -0
  673. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1327557.js +36 -0
  674. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1341167.js +33 -0
  675. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1346700.js +29 -0
  676. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-137.js +46 -0
  677. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1439135.js +40 -0
  678. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-149.js +28 -0
  679. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1493017.js +52 -0
  680. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-155924.js +46 -0
  681. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-171.js +41 -0
  682. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-176.js +50 -0
  683. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-186.js +72 -0
  684. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-187.js +30 -0
  685. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-189.js +36 -0
  686. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-191.js +42 -0
  687. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1919169.js +40 -0
  688. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-192.js +38 -0
  689. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-193.js +44 -0
  690. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-20070207.js +42 -0
  691. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-201.js +37 -0
  692. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-219.js +176 -0
  693. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-220.js +31 -0
  694. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-221.js +34 -0
  695. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-2249423.js +40 -0
  696. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-225.js +32 -0
  697. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-227.js +33 -0
  698. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-231.js +92 -0
  699. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-233.js +39 -0
  700. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-244.js +67 -0
  701. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-246.js +31 -0
  702. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-253.js +31 -0
  703. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-254.js +58 -0
  704. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-259.js +33 -0
  705. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-260.js +33 -0
  706. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-263.js +38 -0
  707. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-265.js +64 -0
  708. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-267.js +35 -0
  709. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-269.js +49 -0
  710. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-279.js +62 -0
  711. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-284.js +50 -0
  712. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-286.js +36 -0
  713. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-294.js +43 -0
  714. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-312.js +31 -0
  715. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-317.js +31 -0
  716. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-318.js +35 -0
  717. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-326.js +40 -0
  718. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-334.js +90 -0
  719. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-341.js +36 -0
  720. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-345.js +51 -0
  721. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-349.js +32 -0
  722. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-35.js +33 -0
  723. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-351.js +31 -0
  724. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-386.js +47 -0
  725. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-392.js +34 -0
  726. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-394.js +47 -0
  727. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-396.js +39 -0
  728. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-397.js +34 -0
  729. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-399.js +32 -0
  730. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-406.js +69 -0
  731. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-416.js +38 -0
  732. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-475.js +28 -0
  733. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-483.js +35 -0
  734. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-485.js +64 -0
  735. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-486.js +30 -0
  736. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-490.js +48 -0
  737. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-491.js +47 -0
  738. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-492.js +52 -0
  739. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-496.js +39 -0
  740. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-502.js +38 -0
  741. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-503.js +63 -0
  742. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-515.js +40 -0
  743. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-524.js +32 -0
  744. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-526.js +32 -0
  745. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-540.js +47 -0
  746. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-545.js +47 -0
  747. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-57.js +32 -0
  748. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-580.js +55 -0
  749. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-588599.js +31 -0
  750. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-6-9-regexp.js +30 -0
  751. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-662254.js +40 -0
  752. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-666721.js +53 -0
  753. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-667061.js +90 -0
  754. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-670147.js +34 -0
  755. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-674753.js +87 -0
  756. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-676025.js +31 -0
  757. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-678525.js +59 -0
  758. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-682649.js +30 -0
  759. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-69.js +43 -0
  760. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-734862.js +37 -0
  761. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-737588.js +34 -0
  762. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-74.js +41 -0
  763. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-780423.js +39 -0
  764. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-799761.js +92 -0
  765. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-806473.js +60 -0
  766. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-842017.js +60 -0
  767. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-86.js +46 -0
  768. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-87.js +58 -0
  769. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-874178.js +32 -0
  770. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-875031.js +37 -0
  771. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-877615.js +37 -0
  772. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-892742.js +50 -0
  773. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-900055.js +42 -0
  774. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-900966.js +38 -0
  775. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-91.js +38 -0
  776. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-925537.js +42 -0
  777. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-937896.js +50 -0
  778. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-990205.js +35 -0
  779. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-992733.js +35 -0
  780. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-996542.js +40 -0
  781. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-998565.js +51 -0
  782. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-crbug-18639.js +34 -0
  783. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-r3391.js +77 -0
  784. data/ext/v8/upstream/2.0.6/test/mjsunit/scanner.js +30 -0
  785. data/ext/v8/upstream/2.0.6/test/mjsunit/short-circuit-boolean.js +46 -0
  786. data/ext/v8/upstream/2.0.6/test/mjsunit/simple-constructor.js +140 -0
  787. data/ext/v8/upstream/2.0.6/test/mjsunit/sin-cos.js +45 -0
  788. data/ext/v8/upstream/2.0.6/test/mjsunit/smi-negative-zero.js +100 -0
  789. data/ext/v8/upstream/2.0.6/test/mjsunit/smi-ops.js +671 -0
  790. data/ext/v8/upstream/2.0.6/test/mjsunit/sparse-array-reverse.js +131 -0
  791. data/ext/v8/upstream/2.0.6/test/mjsunit/sparse-array.js +41 -0
  792. data/ext/v8/upstream/2.0.6/test/mjsunit/stack-traces.js +204 -0
  793. data/ext/v8/upstream/2.0.6/test/mjsunit/str-to-num.js +158 -0
  794. data/ext/v8/upstream/2.0.6/test/mjsunit/stress-array-push.js +34 -0
  795. data/ext/v8/upstream/2.0.6/test/mjsunit/strict-equals.js +90 -0
  796. data/ext/v8/upstream/2.0.6/test/mjsunit/string-add.js +195 -0
  797. data/ext/v8/upstream/2.0.6/test/mjsunit/string-case.js +28 -0
  798. data/ext/v8/upstream/2.0.6/test/mjsunit/string-charat.js +53 -0
  799. data/ext/v8/upstream/2.0.6/test/mjsunit/string-charcodeat.js +192 -0
  800. data/ext/v8/upstream/2.0.6/test/mjsunit/string-compare-alignment.js +47 -0
  801. data/ext/v8/upstream/2.0.6/test/mjsunit/string-flatten.js +37 -0
  802. data/ext/v8/upstream/2.0.6/test/mjsunit/string-index.js +154 -0
  803. data/ext/v8/upstream/2.0.6/test/mjsunit/string-indexof-1.js +99 -0
  804. data/ext/v8/upstream/2.0.6/test/mjsunit/string-indexof-2.js +68 -0
  805. data/ext/v8/upstream/2.0.6/test/mjsunit/string-lastindexof.js +88 -0
  806. data/ext/v8/upstream/2.0.6/test/mjsunit/string-localecompare.js +40 -0
  807. data/ext/v8/upstream/2.0.6/test/mjsunit/string-match.js +149 -0
  808. data/ext/v8/upstream/2.0.6/test/mjsunit/string-replace-gc.js +57 -0
  809. data/ext/v8/upstream/2.0.6/test/mjsunit/string-replace.js +182 -0
  810. data/ext/v8/upstream/2.0.6/test/mjsunit/string-search.js +30 -0
  811. data/ext/v8/upstream/2.0.6/test/mjsunit/string-split.js +126 -0
  812. data/ext/v8/upstream/2.0.6/test/mjsunit/substr.js +65 -0
  813. data/ext/v8/upstream/2.0.6/test/mjsunit/switch.js +289 -0
  814. data/ext/v8/upstream/2.0.6/test/mjsunit/testcfg.py +137 -0
  815. data/ext/v8/upstream/2.0.6/test/mjsunit/third_party/array-isarray.js +48 -0
  816. data/ext/v8/upstream/2.0.6/test/mjsunit/third_party/array-splice-webkit.js +62 -0
  817. data/ext/v8/upstream/2.0.6/test/mjsunit/third_party/object-keys.js +68 -0
  818. data/ext/v8/upstream/2.0.6/test/mjsunit/third_party/regexp-pcre.js +6603 -0
  819. data/ext/v8/upstream/2.0.6/test/mjsunit/third_party/string-trim.js +107 -0
  820. data/ext/v8/upstream/2.0.6/test/mjsunit/this-in-callbacks.js +47 -0
  821. data/ext/v8/upstream/2.0.6/test/mjsunit/this.js +46 -0
  822. data/ext/v8/upstream/2.0.6/test/mjsunit/throw-and-catch-function.js +50 -0
  823. data/ext/v8/upstream/2.0.6/test/mjsunit/throw-exception-for-null-access.js +37 -0
  824. data/ext/v8/upstream/2.0.6/test/mjsunit/to-precision.js +82 -0
  825. data/ext/v8/upstream/2.0.6/test/mjsunit/to_number_order.js +129 -0
  826. data/ext/v8/upstream/2.0.6/test/mjsunit/tobool.js +36 -0
  827. data/ext/v8/upstream/2.0.6/test/mjsunit/toint32.js +129 -0
  828. data/ext/v8/upstream/2.0.6/test/mjsunit/tools/codemap.js +180 -0
  829. data/ext/v8/upstream/2.0.6/test/mjsunit/tools/consarray.js +60 -0
  830. data/ext/v8/upstream/2.0.6/test/mjsunit/tools/csvparser.js +79 -0
  831. data/ext/v8/upstream/2.0.6/test/mjsunit/tools/logreader.js +98 -0
  832. data/ext/v8/upstream/2.0.6/test/mjsunit/tools/profile.js +348 -0
  833. data/ext/v8/upstream/2.0.6/test/mjsunit/tools/profile_view.js +95 -0
  834. data/ext/v8/upstream/2.0.6/test/mjsunit/tools/splaytree.js +166 -0
  835. data/ext/v8/upstream/2.0.6/test/mjsunit/tools/tickprocessor-test.default +55 -0
  836. data/ext/v8/upstream/2.0.6/test/mjsunit/tools/tickprocessor-test.gc-state +21 -0
  837. data/ext/v8/upstream/2.0.6/test/mjsunit/tools/tickprocessor-test.ignore-unknown +51 -0
  838. data/ext/v8/upstream/2.0.6/test/mjsunit/tools/tickprocessor-test.separate-ic +61 -0
  839. data/ext/v8/upstream/2.0.6/test/mjsunit/tools/tickprocessor.js +409 -0
  840. data/ext/v8/upstream/2.0.6/test/mjsunit/top-level-assignments.js +107 -0
  841. data/ext/v8/upstream/2.0.6/test/mjsunit/touint32.js +72 -0
  842. data/ext/v8/upstream/2.0.6/test/mjsunit/transcendentals.js +49 -0
  843. data/ext/v8/upstream/2.0.6/test/mjsunit/try-catch-extension-object.js +58 -0
  844. data/ext/v8/upstream/2.0.6/test/mjsunit/try-catch-scopes.js +42 -0
  845. data/ext/v8/upstream/2.0.6/test/mjsunit/try-finally-nested.js +46 -0
  846. data/ext/v8/upstream/2.0.6/test/mjsunit/try.js +394 -0
  847. data/ext/v8/upstream/2.0.6/test/mjsunit/typeof.js +40 -0
  848. data/ext/v8/upstream/2.0.6/test/mjsunit/undeletable-functions.js +181 -0
  849. data/ext/v8/upstream/2.0.6/test/mjsunit/unicode-case-overoptimization.js +35 -0
  850. data/ext/v8/upstream/2.0.6/test/mjsunit/unicode-string-to-number.js +46 -0
  851. data/ext/v8/upstream/2.0.6/test/mjsunit/unicode-test.js +9169 -0
  852. data/ext/v8/upstream/2.0.6/test/mjsunit/unusual-constructor.js +38 -0
  853. data/ext/v8/upstream/2.0.6/test/mjsunit/uri.js +78 -0
  854. data/ext/v8/upstream/2.0.6/test/mjsunit/value-callic-prototype-change.js +94 -0
  855. data/ext/v8/upstream/2.0.6/test/mjsunit/var.js +37 -0
  856. data/ext/v8/upstream/2.0.6/test/mjsunit/with-function-expression.js +36 -0
  857. data/ext/v8/upstream/2.0.6/test/mjsunit/with-leave.js +61 -0
  858. data/ext/v8/upstream/2.0.6/test/mjsunit/with-parameter-access.js +47 -0
  859. data/ext/v8/upstream/2.0.6/test/mjsunit/with-prototype.js +44 -0
  860. data/ext/v8/upstream/2.0.6/test/mjsunit/with-value.js +38 -0
  861. data/ext/v8/upstream/2.0.6/test/mozilla/mozilla-shell-emulation.js +37 -0
  862. data/ext/v8/upstream/2.0.6/test/mozilla/mozilla.status +815 -0
  863. data/ext/v8/upstream/2.0.6/test/mozilla/testcfg.py +138 -0
  864. data/ext/v8/upstream/2.0.6/test/sputnik/README +6 -0
  865. data/ext/v8/upstream/2.0.6/test/sputnik/sputnik.status +318 -0
  866. data/ext/v8/upstream/2.0.6/test/sputnik/testcfg.py +112 -0
  867. data/ext/v8/upstream/2.0.6/tools/codemap.js +258 -0
  868. data/ext/v8/upstream/2.0.6/tools/consarray.js +93 -0
  869. data/ext/v8/upstream/2.0.6/tools/csvparser.js +98 -0
  870. data/ext/v8/upstream/2.0.6/tools/gyp/v8.gyp +620 -0
  871. data/ext/v8/upstream/2.0.6/tools/js2c.py +376 -0
  872. data/ext/v8/upstream/2.0.6/tools/js2c.pyc +0 -0
  873. data/ext/v8/upstream/2.0.6/tools/jsmin.py +280 -0
  874. data/ext/v8/upstream/2.0.6/tools/jsmin.pyc +0 -0
  875. data/ext/v8/upstream/2.0.6/tools/linux-tick-processor +24 -0
  876. data/ext/v8/upstream/2.0.6/tools/linux-tick-processor.py +78 -0
  877. data/ext/v8/upstream/2.0.6/tools/logreader.js +320 -0
  878. data/ext/v8/upstream/2.0.6/tools/mac-nm +18 -0
  879. data/ext/v8/upstream/2.0.6/tools/mac-tick-processor +6 -0
  880. data/ext/v8/upstream/2.0.6/tools/oprofile/annotate +7 -0
  881. data/ext/v8/upstream/2.0.6/tools/oprofile/common +19 -0
  882. data/ext/v8/upstream/2.0.6/tools/oprofile/dump +7 -0
  883. data/ext/v8/upstream/2.0.6/tools/oprofile/report +7 -0
  884. data/ext/v8/upstream/2.0.6/tools/oprofile/reset +7 -0
  885. data/ext/v8/upstream/2.0.6/tools/oprofile/run +14 -0
  886. data/ext/v8/upstream/2.0.6/tools/oprofile/shutdown +7 -0
  887. data/ext/v8/upstream/2.0.6/tools/oprofile/start +7 -0
  888. data/ext/v8/upstream/2.0.6/tools/presubmit.py +299 -0
  889. data/ext/v8/upstream/2.0.6/tools/process-heap-prof.py +120 -0
  890. data/ext/v8/upstream/2.0.6/tools/profile.js +621 -0
  891. data/ext/v8/upstream/2.0.6/tools/profile_view.js +224 -0
  892. data/ext/v8/upstream/2.0.6/tools/run-valgrind.py +77 -0
  893. data/ext/v8/upstream/2.0.6/tools/splaytree.js +322 -0
  894. data/ext/v8/upstream/2.0.6/tools/splaytree.py +226 -0
  895. data/ext/v8/upstream/2.0.6/tools/stats-viewer.py +456 -0
  896. data/ext/v8/upstream/2.0.6/tools/test.py +1370 -0
  897. data/ext/v8/upstream/2.0.6/tools/tickprocessor-driver.js +53 -0
  898. data/ext/v8/upstream/2.0.6/tools/tickprocessor.js +731 -0
  899. data/ext/v8/upstream/2.0.6/tools/tickprocessor.py +535 -0
  900. data/ext/v8/upstream/2.0.6/tools/utils.py +82 -0
  901. data/ext/v8/upstream/2.0.6/tools/utils.pyc +0 -0
  902. data/ext/v8/upstream/2.0.6/tools/visual_studio/README.txt +71 -0
  903. data/ext/v8/upstream/2.0.6/tools/visual_studio/arm.vsprops +14 -0
  904. data/ext/v8/upstream/2.0.6/tools/visual_studio/common.vsprops +35 -0
  905. data/ext/v8/upstream/2.0.6/tools/visual_studio/d8.vcproj +199 -0
  906. data/ext/v8/upstream/2.0.6/tools/visual_studio/d8_arm.vcproj +199 -0
  907. data/ext/v8/upstream/2.0.6/tools/visual_studio/d8_x64.vcproj +201 -0
  908. data/ext/v8/upstream/2.0.6/tools/visual_studio/d8js2c.cmd +6 -0
  909. data/ext/v8/upstream/2.0.6/tools/visual_studio/debug.vsprops +17 -0
  910. data/ext/v8/upstream/2.0.6/tools/visual_studio/ia32.vsprops +13 -0
  911. data/ext/v8/upstream/2.0.6/tools/visual_studio/js2c.cmd +6 -0
  912. data/ext/v8/upstream/2.0.6/tools/visual_studio/release.vsprops +24 -0
  913. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8.sln +101 -0
  914. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8.vcproj +223 -0
  915. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_arm.sln +74 -0
  916. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_arm.vcproj +223 -0
  917. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_base.vcproj +971 -0
  918. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_base_arm.vcproj +983 -0
  919. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_base_x64.vcproj +959 -0
  920. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_cctest.vcproj +255 -0
  921. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_cctest_arm.vcproj +243 -0
  922. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_cctest_x64.vcproj +257 -0
  923. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_mksnapshot.vcproj +151 -0
  924. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_mksnapshot_x64.vcproj +151 -0
  925. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_process_sample.vcproj +151 -0
  926. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_process_sample_arm.vcproj +151 -0
  927. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_process_sample_x64.vcproj +151 -0
  928. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_shell_sample.vcproj +151 -0
  929. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_shell_sample_arm.vcproj +151 -0
  930. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_shell_sample_x64.vcproj +153 -0
  931. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_snapshot.vcproj +142 -0
  932. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_snapshot_cc.vcproj +92 -0
  933. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_snapshot_cc_x64.vcproj +92 -0
  934. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_snapshot_x64.vcproj +142 -0
  935. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_x64.sln +101 -0
  936. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_x64.vcproj +223 -0
  937. data/ext/v8/upstream/2.0.6/tools/visual_studio/x64.vsprops +13 -0
  938. data/ext/v8/upstream/2.0.6/tools/windows-tick-processor.bat +5 -0
  939. data/ext/v8/upstream/2.0.6/tools/windows-tick-processor.py +137 -0
  940. data/ext/v8/upstream/scons/CHANGES.txt +5183 -0
  941. data/ext/v8/upstream/scons/LICENSE.txt +20 -0
  942. data/ext/v8/upstream/scons/MANIFEST +202 -0
  943. data/ext/v8/upstream/scons/PKG-INFO +13 -0
  944. data/ext/v8/upstream/scons/README.txt +273 -0
  945. data/ext/v8/upstream/scons/RELEASE.txt +1040 -0
  946. data/ext/v8/upstream/scons/engine/SCons/Action.py +1256 -0
  947. data/ext/v8/upstream/scons/engine/SCons/Builder.py +868 -0
  948. data/ext/v8/upstream/scons/engine/SCons/CacheDir.py +217 -0
  949. data/ext/v8/upstream/scons/engine/SCons/Conftest.py +794 -0
  950. data/ext/v8/upstream/scons/engine/SCons/Debug.py +237 -0
  951. data/ext/v8/upstream/scons/engine/SCons/Defaults.py +485 -0
  952. data/ext/v8/upstream/scons/engine/SCons/Environment.py +2327 -0
  953. data/ext/v8/upstream/scons/engine/SCons/Errors.py +207 -0
  954. data/ext/v8/upstream/scons/engine/SCons/Executor.py +636 -0
  955. data/ext/v8/upstream/scons/engine/SCons/Job.py +435 -0
  956. data/ext/v8/upstream/scons/engine/SCons/Memoize.py +292 -0
  957. data/ext/v8/upstream/scons/engine/SCons/Node/Alias.py +153 -0
  958. data/ext/v8/upstream/scons/engine/SCons/Node/FS.py +3220 -0
  959. data/ext/v8/upstream/scons/engine/SCons/Node/Python.py +128 -0
  960. data/ext/v8/upstream/scons/engine/SCons/Node/__init__.py +1341 -0
  961. data/ext/v8/upstream/scons/engine/SCons/Options/BoolOption.py +50 -0
  962. data/ext/v8/upstream/scons/engine/SCons/Options/EnumOption.py +50 -0
  963. data/ext/v8/upstream/scons/engine/SCons/Options/ListOption.py +50 -0
  964. data/ext/v8/upstream/scons/engine/SCons/Options/PackageOption.py +50 -0
  965. data/ext/v8/upstream/scons/engine/SCons/Options/PathOption.py +76 -0
  966. data/ext/v8/upstream/scons/engine/SCons/Options/__init__.py +74 -0
  967. data/ext/v8/upstream/scons/engine/SCons/PathList.py +232 -0
  968. data/ext/v8/upstream/scons/engine/SCons/Platform/__init__.py +236 -0
  969. data/ext/v8/upstream/scons/engine/SCons/Platform/aix.py +70 -0
  970. data/ext/v8/upstream/scons/engine/SCons/Platform/cygwin.py +55 -0
  971. data/ext/v8/upstream/scons/engine/SCons/Platform/darwin.py +46 -0
  972. data/ext/v8/upstream/scons/engine/SCons/Platform/hpux.py +46 -0
  973. data/ext/v8/upstream/scons/engine/SCons/Platform/irix.py +44 -0
  974. data/ext/v8/upstream/scons/engine/SCons/Platform/os2.py +58 -0
  975. data/ext/v8/upstream/scons/engine/SCons/Platform/posix.py +264 -0
  976. data/ext/v8/upstream/scons/engine/SCons/Platform/sunos.py +50 -0
  977. data/ext/v8/upstream/scons/engine/SCons/Platform/win32.py +386 -0
  978. data/ext/v8/upstream/scons/engine/SCons/SConf.py +1038 -0
  979. data/ext/v8/upstream/scons/engine/SCons/SConsign.py +381 -0
  980. data/ext/v8/upstream/scons/engine/SCons/Scanner/C.py +132 -0
  981. data/ext/v8/upstream/scons/engine/SCons/Scanner/D.py +74 -0
  982. data/ext/v8/upstream/scons/engine/SCons/Scanner/Dir.py +111 -0
  983. data/ext/v8/upstream/scons/engine/SCons/Scanner/Fortran.py +320 -0
  984. data/ext/v8/upstream/scons/engine/SCons/Scanner/IDL.py +48 -0
  985. data/ext/v8/upstream/scons/engine/SCons/Scanner/LaTeX.py +378 -0
  986. data/ext/v8/upstream/scons/engine/SCons/Scanner/Prog.py +103 -0
  987. data/ext/v8/upstream/scons/engine/SCons/Scanner/RC.py +55 -0
  988. data/ext/v8/upstream/scons/engine/SCons/Scanner/__init__.py +415 -0
  989. data/ext/v8/upstream/scons/engine/SCons/Script/Interactive.py +386 -0
  990. data/ext/v8/upstream/scons/engine/SCons/Script/Main.py +1360 -0
  991. data/ext/v8/upstream/scons/engine/SCons/Script/SConsOptions.py +944 -0
  992. data/ext/v8/upstream/scons/engine/SCons/Script/SConscript.py +642 -0
  993. data/ext/v8/upstream/scons/engine/SCons/Script/__init__.py +414 -0
  994. data/ext/v8/upstream/scons/engine/SCons/Sig.py +63 -0
  995. data/ext/v8/upstream/scons/engine/SCons/Subst.py +911 -0
  996. data/ext/v8/upstream/scons/engine/SCons/Taskmaster.py +1030 -0
  997. data/ext/v8/upstream/scons/engine/SCons/Tool/386asm.py +61 -0
  998. data/ext/v8/upstream/scons/engine/SCons/Tool/BitKeeper.py +65 -0
  999. data/ext/v8/upstream/scons/engine/SCons/Tool/CVS.py +73 -0
  1000. data/ext/v8/upstream/scons/engine/SCons/Tool/FortranCommon.py +247 -0
  1001. data/ext/v8/upstream/scons/engine/SCons/Tool/JavaCommon.py +324 -0
  1002. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/__init__.py +56 -0
  1003. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/arch.py +61 -0
  1004. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/common.py +210 -0
  1005. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/netframework.py +84 -0
  1006. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/sdk.py +321 -0
  1007. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/vc.py +367 -0
  1008. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/vs.py +497 -0
  1009. data/ext/v8/upstream/scons/engine/SCons/Tool/Perforce.py +104 -0
  1010. data/ext/v8/upstream/scons/engine/SCons/Tool/PharLapCommon.py +138 -0
  1011. data/ext/v8/upstream/scons/engine/SCons/Tool/RCS.py +64 -0
  1012. data/ext/v8/upstream/scons/engine/SCons/Tool/SCCS.py +64 -0
  1013. data/ext/v8/upstream/scons/engine/SCons/Tool/Subversion.py +71 -0
  1014. data/ext/v8/upstream/scons/engine/SCons/Tool/__init__.py +675 -0
  1015. data/ext/v8/upstream/scons/engine/SCons/Tool/aixc++.py +82 -0
  1016. data/ext/v8/upstream/scons/engine/SCons/Tool/aixcc.py +74 -0
  1017. data/ext/v8/upstream/scons/engine/SCons/Tool/aixf77.py +80 -0
  1018. data/ext/v8/upstream/scons/engine/SCons/Tool/aixlink.py +76 -0
  1019. data/ext/v8/upstream/scons/engine/SCons/Tool/applelink.py +71 -0
  1020. data/ext/v8/upstream/scons/engine/SCons/Tool/ar.py +63 -0
  1021. data/ext/v8/upstream/scons/engine/SCons/Tool/as.py +78 -0
  1022. data/ext/v8/upstream/scons/engine/SCons/Tool/bcc32.py +82 -0
  1023. data/ext/v8/upstream/scons/engine/SCons/Tool/c++.py +99 -0
  1024. data/ext/v8/upstream/scons/engine/SCons/Tool/cc.py +114 -0
  1025. data/ext/v8/upstream/scons/engine/SCons/Tool/cvf.py +58 -0
  1026. data/ext/v8/upstream/scons/engine/SCons/Tool/default.py +50 -0
  1027. data/ext/v8/upstream/scons/engine/SCons/Tool/dmd.py +224 -0
  1028. data/ext/v8/upstream/scons/engine/SCons/Tool/dvi.py +64 -0
  1029. data/ext/v8/upstream/scons/engine/SCons/Tool/dvipdf.py +125 -0
  1030. data/ext/v8/upstream/scons/engine/SCons/Tool/dvips.py +94 -0
  1031. data/ext/v8/upstream/scons/engine/SCons/Tool/f77.py +62 -0
  1032. data/ext/v8/upstream/scons/engine/SCons/Tool/f90.py +62 -0
  1033. data/ext/v8/upstream/scons/engine/SCons/Tool/f95.py +63 -0
  1034. data/ext/v8/upstream/scons/engine/SCons/Tool/filesystem.py +98 -0
  1035. data/ext/v8/upstream/scons/engine/SCons/Tool/fortran.py +63 -0
  1036. data/ext/v8/upstream/scons/engine/SCons/Tool/g++.py +90 -0
  1037. data/ext/v8/upstream/scons/engine/SCons/Tool/g77.py +73 -0
  1038. data/ext/v8/upstream/scons/engine/SCons/Tool/gas.py +53 -0
  1039. data/ext/v8/upstream/scons/engine/SCons/Tool/gcc.py +80 -0
  1040. data/ext/v8/upstream/scons/engine/SCons/Tool/gfortran.py +64 -0
  1041. data/ext/v8/upstream/scons/engine/SCons/Tool/gnulink.py +63 -0
  1042. data/ext/v8/upstream/scons/engine/SCons/Tool/gs.py +81 -0
  1043. data/ext/v8/upstream/scons/engine/SCons/Tool/hpc++.py +85 -0
  1044. data/ext/v8/upstream/scons/engine/SCons/Tool/hpcc.py +53 -0
  1045. data/ext/v8/upstream/scons/engine/SCons/Tool/hplink.py +77 -0
  1046. data/ext/v8/upstream/scons/engine/SCons/Tool/icc.py +59 -0
  1047. data/ext/v8/upstream/scons/engine/SCons/Tool/icl.py +52 -0
  1048. data/ext/v8/upstream/scons/engine/SCons/Tool/ifl.py +72 -0
  1049. data/ext/v8/upstream/scons/engine/SCons/Tool/ifort.py +90 -0
  1050. data/ext/v8/upstream/scons/engine/SCons/Tool/ilink.py +59 -0
  1051. data/ext/v8/upstream/scons/engine/SCons/Tool/ilink32.py +60 -0
  1052. data/ext/v8/upstream/scons/engine/SCons/Tool/install.py +229 -0
  1053. data/ext/v8/upstream/scons/engine/SCons/Tool/intelc.py +490 -0
  1054. data/ext/v8/upstream/scons/engine/SCons/Tool/ipkg.py +71 -0
  1055. data/ext/v8/upstream/scons/engine/SCons/Tool/jar.py +110 -0
  1056. data/ext/v8/upstream/scons/engine/SCons/Tool/javac.py +234 -0
  1057. data/ext/v8/upstream/scons/engine/SCons/Tool/javah.py +138 -0
  1058. data/ext/v8/upstream/scons/engine/SCons/Tool/latex.py +79 -0
  1059. data/ext/v8/upstream/scons/engine/SCons/Tool/lex.py +99 -0
  1060. data/ext/v8/upstream/scons/engine/SCons/Tool/link.py +121 -0
  1061. data/ext/v8/upstream/scons/engine/SCons/Tool/linkloc.py +112 -0
  1062. data/ext/v8/upstream/scons/engine/SCons/Tool/m4.py +63 -0
  1063. data/ext/v8/upstream/scons/engine/SCons/Tool/masm.py +77 -0
  1064. data/ext/v8/upstream/scons/engine/SCons/Tool/midl.py +90 -0
  1065. data/ext/v8/upstream/scons/engine/SCons/Tool/mingw.py +159 -0
  1066. data/ext/v8/upstream/scons/engine/SCons/Tool/mslib.py +64 -0
  1067. data/ext/v8/upstream/scons/engine/SCons/Tool/mslink.py +266 -0
  1068. data/ext/v8/upstream/scons/engine/SCons/Tool/mssdk.py +50 -0
  1069. data/ext/v8/upstream/scons/engine/SCons/Tool/msvc.py +269 -0
  1070. data/ext/v8/upstream/scons/engine/SCons/Tool/msvs.py +1439 -0
  1071. data/ext/v8/upstream/scons/engine/SCons/Tool/mwcc.py +208 -0
  1072. data/ext/v8/upstream/scons/engine/SCons/Tool/mwld.py +107 -0
  1073. data/ext/v8/upstream/scons/engine/SCons/Tool/nasm.py +72 -0
  1074. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/__init__.py +314 -0
  1075. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/ipk.py +185 -0
  1076. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/msi.py +526 -0
  1077. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/rpm.py +367 -0
  1078. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/src_tarbz2.py +43 -0
  1079. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/src_targz.py +43 -0
  1080. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/src_zip.py +43 -0
  1081. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/tarbz2.py +44 -0
  1082. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/targz.py +44 -0
  1083. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/zip.py +44 -0
  1084. data/ext/v8/upstream/scons/engine/SCons/Tool/pdf.py +78 -0
  1085. data/ext/v8/upstream/scons/engine/SCons/Tool/pdflatex.py +83 -0
  1086. data/ext/v8/upstream/scons/engine/SCons/Tool/pdftex.py +108 -0
  1087. data/ext/v8/upstream/scons/engine/SCons/Tool/qt.py +336 -0
  1088. data/ext/v8/upstream/scons/engine/SCons/Tool/rmic.py +121 -0
  1089. data/ext/v8/upstream/scons/engine/SCons/Tool/rpcgen.py +70 -0
  1090. data/ext/v8/upstream/scons/engine/SCons/Tool/rpm.py +132 -0
  1091. data/ext/v8/upstream/scons/engine/SCons/Tool/sgiar.py +68 -0
  1092. data/ext/v8/upstream/scons/engine/SCons/Tool/sgic++.py +58 -0
  1093. data/ext/v8/upstream/scons/engine/SCons/Tool/sgicc.py +53 -0
  1094. data/ext/v8/upstream/scons/engine/SCons/Tool/sgilink.py +63 -0
  1095. data/ext/v8/upstream/scons/engine/SCons/Tool/sunar.py +67 -0
  1096. data/ext/v8/upstream/scons/engine/SCons/Tool/sunc++.py +142 -0
  1097. data/ext/v8/upstream/scons/engine/SCons/Tool/suncc.py +58 -0
  1098. data/ext/v8/upstream/scons/engine/SCons/Tool/sunf77.py +63 -0
  1099. data/ext/v8/upstream/scons/engine/SCons/Tool/sunf90.py +64 -0
  1100. data/ext/v8/upstream/scons/engine/SCons/Tool/sunf95.py +64 -0
  1101. data/ext/v8/upstream/scons/engine/SCons/Tool/sunlink.py +77 -0
  1102. data/ext/v8/upstream/scons/engine/SCons/Tool/swig.py +186 -0
  1103. data/ext/v8/upstream/scons/engine/SCons/Tool/tar.py +73 -0
  1104. data/ext/v8/upstream/scons/engine/SCons/Tool/tex.py +805 -0
  1105. data/ext/v8/upstream/scons/engine/SCons/Tool/textfile.py +175 -0
  1106. data/ext/v8/upstream/scons/engine/SCons/Tool/tlib.py +53 -0
  1107. data/ext/v8/upstream/scons/engine/SCons/Tool/wix.py +100 -0
  1108. data/ext/v8/upstream/scons/engine/SCons/Tool/yacc.py +131 -0
  1109. data/ext/v8/upstream/scons/engine/SCons/Tool/zip.py +100 -0
  1110. data/ext/v8/upstream/scons/engine/SCons/Util.py +1645 -0
  1111. data/ext/v8/upstream/scons/engine/SCons/Variables/BoolVariable.py +91 -0
  1112. data/ext/v8/upstream/scons/engine/SCons/Variables/EnumVariable.py +107 -0
  1113. data/ext/v8/upstream/scons/engine/SCons/Variables/ListVariable.py +139 -0
  1114. data/ext/v8/upstream/scons/engine/SCons/Variables/PackageVariable.py +109 -0
  1115. data/ext/v8/upstream/scons/engine/SCons/Variables/PathVariable.py +147 -0
  1116. data/ext/v8/upstream/scons/engine/SCons/Variables/__init__.py +317 -0
  1117. data/ext/v8/upstream/scons/engine/SCons/Warnings.py +228 -0
  1118. data/ext/v8/upstream/scons/engine/SCons/__init__.py +49 -0
  1119. data/ext/v8/upstream/scons/engine/SCons/compat/__init__.py +302 -0
  1120. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_UserString.py +98 -0
  1121. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_hashlib.py +91 -0
  1122. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_itertools.py +124 -0
  1123. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_optparse.py +1725 -0
  1124. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_sets.py +583 -0
  1125. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_sets15.py +176 -0
  1126. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_shlex.py +325 -0
  1127. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_subprocess.py +1296 -0
  1128. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_textwrap.py +382 -0
  1129. data/ext/v8/upstream/scons/engine/SCons/compat/builtins.py +187 -0
  1130. data/ext/v8/upstream/scons/engine/SCons/cpp.py +598 -0
  1131. data/ext/v8/upstream/scons/engine/SCons/dblite.py +248 -0
  1132. data/ext/v8/upstream/scons/engine/SCons/exitfuncs.py +77 -0
  1133. data/ext/v8/upstream/scons/os_spawnv_fix.diff +83 -0
  1134. data/ext/v8/upstream/scons/scons-time.1 +1017 -0
  1135. data/ext/v8/upstream/scons/scons.1 +15179 -0
  1136. data/ext/v8/upstream/scons/sconsign.1 +208 -0
  1137. data/ext/v8/upstream/scons/script/scons +184 -0
  1138. data/ext/v8/upstream/scons/script/scons-time +1529 -0
  1139. data/ext/v8/upstream/scons/script/scons.bat +31 -0
  1140. data/ext/v8/upstream/scons/script/sconsign +508 -0
  1141. data/ext/v8/upstream/scons/setup.cfg +6 -0
  1142. data/ext/v8/upstream/scons/setup.py +427 -0
  1143. data/ext/v8/v8_cxt.cpp +3 -0
  1144. data/ext/v8/v8_cxt.h +9 -0
  1145. data/lib/v8.rb +1 -1
  1146. data/spec/redjs/jsapi_spec.rb +6 -0
  1147. data/therubyracer.gemspec +4 -4
  1148. metadata +1146 -2
@@ -0,0 +1,1680 @@
1
+ // Copyright 2006-2008 the V8 project authors. All rights reserved.
2
+ // Redistribution and use in source and binary forms, with or without
3
+ // modification, are permitted provided that the following conditions are
4
+ // met:
5
+ //
6
+ // * Redistributions of source code must retain the above copyright
7
+ // notice, this list of conditions and the following disclaimer.
8
+ // * Redistributions in binary form must reproduce the above
9
+ // copyright notice, this list of conditions and the following
10
+ // disclaimer in the documentation and/or other materials provided
11
+ // with the distribution.
12
+ // * Neither the name of Google Inc. nor the names of its
13
+ // contributors may be used to endorse or promote products derived
14
+ // from this software without specific prior written permission.
15
+ //
16
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+
28
+ #include "v8.h"
29
+
30
+ #include "accessors.h"
31
+ #include "api.h"
32
+ #include "bootstrapper.h"
33
+ #include "compiler.h"
34
+ #include "debug.h"
35
+ #include "execution.h"
36
+ #include "global-handles.h"
37
+ #include "macro-assembler.h"
38
+ #include "natives.h"
39
+ #include "snapshot.h"
40
+
41
+ namespace v8 {
42
+ namespace internal {
43
+
44
+ // A SourceCodeCache uses a FixedArray to store pairs of
45
+ // (AsciiString*, JSFunction*), mapping names of native code files
46
+ // (runtime.js, etc.) to precompiled functions. Instead of mapping
47
+ // names to functions it might make sense to let the JS2C tool
48
+ // generate an index for each native JS file.
49
+ class SourceCodeCache BASE_EMBEDDED {
50
+ public:
51
+ explicit SourceCodeCache(Script::Type type): type_(type), cache_(NULL) { }
52
+
53
+ void Initialize(bool create_heap_objects) {
54
+ cache_ = create_heap_objects ? Heap::empty_fixed_array() : NULL;
55
+ }
56
+
57
+ void Iterate(ObjectVisitor* v) {
58
+ v->VisitPointer(bit_cast<Object**, FixedArray**>(&cache_));
59
+ }
60
+
61
+
62
+ bool Lookup(Vector<const char> name, Handle<JSFunction>* handle) {
63
+ for (int i = 0; i < cache_->length(); i+=2) {
64
+ SeqAsciiString* str = SeqAsciiString::cast(cache_->get(i));
65
+ if (str->IsEqualTo(name)) {
66
+ *handle = Handle<JSFunction>(JSFunction::cast(cache_->get(i + 1)));
67
+ return true;
68
+ }
69
+ }
70
+ return false;
71
+ }
72
+
73
+
74
+ void Add(Vector<const char> name, Handle<JSFunction> fun) {
75
+ ASSERT(fun->IsBoilerplate());
76
+ HandleScope scope;
77
+ int length = cache_->length();
78
+ Handle<FixedArray> new_array =
79
+ Factory::NewFixedArray(length + 2, TENURED);
80
+ cache_->CopyTo(0, *new_array, 0, cache_->length());
81
+ cache_ = *new_array;
82
+ Handle<String> str = Factory::NewStringFromAscii(name, TENURED);
83
+ cache_->set(length, *str);
84
+ cache_->set(length + 1, *fun);
85
+ Script::cast(fun->shared()->script())->set_type(Smi::FromInt(type_));
86
+ }
87
+
88
+ private:
89
+ Script::Type type_;
90
+ FixedArray* cache_;
91
+ DISALLOW_COPY_AND_ASSIGN(SourceCodeCache);
92
+ };
93
+
94
+ static SourceCodeCache natives_cache(Script::TYPE_NATIVE);
95
+ static SourceCodeCache extensions_cache(Script::TYPE_EXTENSION);
96
+ // This is for delete, not delete[].
97
+ static List<char*>* delete_these_non_arrays_on_tear_down = NULL;
98
+ // This is for delete[]
99
+ static List<char*>* delete_these_arrays_on_tear_down = NULL;
100
+
101
+
102
+ NativesExternalStringResource::NativesExternalStringResource(const char* source)
103
+ : data_(source), length_(StrLength(source)) {
104
+ if (delete_these_non_arrays_on_tear_down == NULL) {
105
+ delete_these_non_arrays_on_tear_down = new List<char*>(2);
106
+ }
107
+ // The resources are small objects and we only make a fixed number of
108
+ // them, but let's clean them up on exit for neatness.
109
+ delete_these_non_arrays_on_tear_down->
110
+ Add(reinterpret_cast<char*>(this));
111
+ }
112
+
113
+
114
+ Handle<String> Bootstrapper::NativesSourceLookup(int index) {
115
+ ASSERT(0 <= index && index < Natives::GetBuiltinsCount());
116
+ if (Heap::natives_source_cache()->get(index)->IsUndefined()) {
117
+ if (!Snapshot::IsEnabled() || FLAG_new_snapshot) {
118
+ // We can use external strings for the natives.
119
+ NativesExternalStringResource* resource =
120
+ new NativesExternalStringResource(
121
+ Natives::GetScriptSource(index).start());
122
+ Handle<String> source_code =
123
+ Factory::NewExternalStringFromAscii(resource);
124
+ Heap::natives_source_cache()->set(index, *source_code);
125
+ } else {
126
+ // Old snapshot code can't cope with external strings at all.
127
+ Handle<String> source_code =
128
+ Factory::NewStringFromAscii(Natives::GetScriptSource(index));
129
+ Heap::natives_source_cache()->set(index, *source_code);
130
+ }
131
+ }
132
+ Handle<Object> cached_source(Heap::natives_source_cache()->get(index));
133
+ return Handle<String>::cast(cached_source);
134
+ }
135
+
136
+
137
+ bool Bootstrapper::NativesCacheLookup(Vector<const char> name,
138
+ Handle<JSFunction>* handle) {
139
+ return natives_cache.Lookup(name, handle);
140
+ }
141
+
142
+
143
+ void Bootstrapper::NativesCacheAdd(Vector<const char> name,
144
+ Handle<JSFunction> fun) {
145
+ natives_cache.Add(name, fun);
146
+ }
147
+
148
+
149
+ void Bootstrapper::Initialize(bool create_heap_objects) {
150
+ natives_cache.Initialize(create_heap_objects);
151
+ extensions_cache.Initialize(create_heap_objects);
152
+ }
153
+
154
+
155
+ char* Bootstrapper::AllocateAutoDeletedArray(int bytes) {
156
+ char* memory = new char[bytes];
157
+ if (memory != NULL) {
158
+ if (delete_these_arrays_on_tear_down == NULL) {
159
+ delete_these_arrays_on_tear_down = new List<char*>(2);
160
+ }
161
+ delete_these_arrays_on_tear_down->Add(memory);
162
+ }
163
+ return memory;
164
+ }
165
+
166
+
167
+ void Bootstrapper::TearDown() {
168
+ if (delete_these_non_arrays_on_tear_down != NULL) {
169
+ int len = delete_these_non_arrays_on_tear_down->length();
170
+ ASSERT(len < 20); // Don't use this mechanism for unbounded allocations.
171
+ for (int i = 0; i < len; i++) {
172
+ delete delete_these_non_arrays_on_tear_down->at(i);
173
+ delete_these_non_arrays_on_tear_down->at(i) = NULL;
174
+ }
175
+ delete delete_these_non_arrays_on_tear_down;
176
+ delete_these_non_arrays_on_tear_down = NULL;
177
+ }
178
+
179
+ if (delete_these_arrays_on_tear_down != NULL) {
180
+ int len = delete_these_arrays_on_tear_down->length();
181
+ ASSERT(len < 1000); // Don't use this mechanism for unbounded allocations.
182
+ for (int i = 0; i < len; i++) {
183
+ delete[] delete_these_arrays_on_tear_down->at(i);
184
+ delete_these_arrays_on_tear_down->at(i) = NULL;
185
+ }
186
+ delete delete_these_arrays_on_tear_down;
187
+ delete_these_arrays_on_tear_down = NULL;
188
+ }
189
+
190
+ natives_cache.Initialize(false); // Yes, symmetrical
191
+ extensions_cache.Initialize(false);
192
+ }
193
+
194
+
195
+ // Pending fixups are code positions that refer to builtin code
196
+ // objects that were not available at the time the code was generated.
197
+ // The pending list is processed whenever an environment has been
198
+ // created.
199
+ class PendingFixups : public AllStatic {
200
+ public:
201
+ static void Add(Code* code, MacroAssembler* masm);
202
+ static bool Process(Handle<JSBuiltinsObject> builtins);
203
+
204
+ static void Iterate(ObjectVisitor* v);
205
+
206
+ private:
207
+ static List<Object*> code_;
208
+ static List<const char*> name_;
209
+ static List<int> pc_;
210
+ static List<uint32_t> flags_;
211
+
212
+ static void Clear();
213
+ };
214
+
215
+
216
+ List<Object*> PendingFixups::code_(0);
217
+ List<const char*> PendingFixups::name_(0);
218
+ List<int> PendingFixups::pc_(0);
219
+ List<uint32_t> PendingFixups::flags_(0);
220
+
221
+
222
+ void PendingFixups::Add(Code* code, MacroAssembler* masm) {
223
+ // Note this code is not only called during bootstrapping.
224
+ List<MacroAssembler::Unresolved>* unresolved = masm->unresolved();
225
+ int n = unresolved->length();
226
+ for (int i = 0; i < n; i++) {
227
+ const char* name = unresolved->at(i).name;
228
+ code_.Add(code);
229
+ name_.Add(name);
230
+ pc_.Add(unresolved->at(i).pc);
231
+ flags_.Add(unresolved->at(i).flags);
232
+ LOG(StringEvent("unresolved", name));
233
+ }
234
+ }
235
+
236
+
237
+ bool PendingFixups::Process(Handle<JSBuiltinsObject> builtins) {
238
+ HandleScope scope;
239
+ // NOTE: Extra fixups may be added to the list during the iteration
240
+ // due to lazy compilation of functions during the processing. Do not
241
+ // cache the result of getting the length of the code list.
242
+ for (int i = 0; i < code_.length(); i++) {
243
+ const char* name = name_[i];
244
+ uint32_t flags = flags_[i];
245
+ Handle<String> symbol = Factory::LookupAsciiSymbol(name);
246
+ Object* o = builtins->GetProperty(*symbol);
247
+ #ifdef DEBUG
248
+ if (!o->IsJSFunction()) {
249
+ V8_Fatal(__FILE__, __LINE__, "Cannot resolve call to builtin %s", name);
250
+ }
251
+ #endif
252
+ Handle<JSFunction> f = Handle<JSFunction>(JSFunction::cast(o));
253
+ // Make sure the number of parameters match the formal parameter count.
254
+ int argc = Bootstrapper::FixupFlagsArgumentsCount::decode(flags);
255
+ USE(argc);
256
+ ASSERT(f->shared()->formal_parameter_count() == argc);
257
+ if (!f->is_compiled()) {
258
+ // Do lazy compilation and check for stack overflows.
259
+ if (!CompileLazy(f, CLEAR_EXCEPTION)) {
260
+ Clear();
261
+ return false;
262
+ }
263
+ }
264
+ Code* code = Code::cast(code_[i]);
265
+ Address pc = code->instruction_start() + pc_[i];
266
+ RelocInfo target(pc, RelocInfo::CODE_TARGET, 0);
267
+ bool use_code_object = Bootstrapper::FixupFlagsUseCodeObject::decode(flags);
268
+ if (use_code_object) {
269
+ target.set_target_object(f->code());
270
+ } else {
271
+ target.set_target_address(f->code()->instruction_start());
272
+ }
273
+ LOG(StringEvent("resolved", name));
274
+ }
275
+ Clear();
276
+
277
+ // TODO(1240818): We should probably try to avoid doing this for all
278
+ // the V8 builtin JS files. It should only happen after running
279
+ // runtime.js - just like there shouldn't be any fixups left after
280
+ // that.
281
+ for (int i = 0; i < Builtins::NumberOfJavaScriptBuiltins(); i++) {
282
+ Builtins::JavaScript id = static_cast<Builtins::JavaScript>(i);
283
+ Handle<String> name = Factory::LookupAsciiSymbol(Builtins::GetName(id));
284
+ JSFunction* function = JSFunction::cast(builtins->GetProperty(*name));
285
+ builtins->set_javascript_builtin(id, function);
286
+ }
287
+
288
+ return true;
289
+ }
290
+
291
+
292
+ void PendingFixups::Clear() {
293
+ code_.Clear();
294
+ name_.Clear();
295
+ pc_.Clear();
296
+ flags_.Clear();
297
+ }
298
+
299
+
300
+ void PendingFixups::Iterate(ObjectVisitor* v) {
301
+ if (!code_.is_empty()) {
302
+ v->VisitPointers(&code_[0], &code_[0] + code_.length());
303
+ }
304
+ }
305
+
306
+
307
+ class Genesis BASE_EMBEDDED {
308
+ public:
309
+ Genesis(Handle<Object> global_object,
310
+ v8::Handle<v8::ObjectTemplate> global_template,
311
+ v8::ExtensionConfiguration* extensions);
312
+ ~Genesis();
313
+
314
+ Handle<Context> result() { return result_; }
315
+
316
+ Genesis* previous() { return previous_; }
317
+ static Genesis* current() { return current_; }
318
+
319
+ // Support for thread preemption.
320
+ static int ArchiveSpacePerThread();
321
+ static char* ArchiveState(char* to);
322
+ static char* RestoreState(char* from);
323
+
324
+ private:
325
+ Handle<Context> global_context_;
326
+
327
+ // There may be more than one active genesis object: When GC is
328
+ // triggered during environment creation there may be weak handle
329
+ // processing callbacks which may create new environments.
330
+ Genesis* previous_;
331
+ static Genesis* current_;
332
+
333
+ Handle<Context> global_context() { return global_context_; }
334
+
335
+ void CreateRoots(v8::Handle<v8::ObjectTemplate> global_template,
336
+ Handle<Object> global_object);
337
+ void InstallNativeFunctions();
338
+ bool InstallNatives();
339
+ bool InstallExtensions(v8::ExtensionConfiguration* extensions);
340
+ bool InstallExtension(const char* name);
341
+ bool InstallExtension(v8::RegisteredExtension* current);
342
+ bool InstallSpecialObjects();
343
+ bool ConfigureApiObject(Handle<JSObject> object,
344
+ Handle<ObjectTemplateInfo> object_template);
345
+ bool ConfigureGlobalObjects(v8::Handle<v8::ObjectTemplate> global_template);
346
+
347
+ // Migrates all properties from the 'from' object to the 'to'
348
+ // object and overrides the prototype in 'to' with the one from
349
+ // 'from'.
350
+ void TransferObject(Handle<JSObject> from, Handle<JSObject> to);
351
+ void TransferNamedProperties(Handle<JSObject> from, Handle<JSObject> to);
352
+ void TransferIndexedProperties(Handle<JSObject> from, Handle<JSObject> to);
353
+
354
+ Handle<DescriptorArray> ComputeFunctionInstanceDescriptor(
355
+ bool make_prototype_read_only,
356
+ bool make_prototype_enumerable = false);
357
+ void MakeFunctionInstancePrototypeWritable();
358
+
359
+ void AddSpecialFunction(Handle<JSObject> prototype,
360
+ const char* name,
361
+ Handle<Code> code);
362
+
363
+ void BuildSpecialFunctionTable();
364
+
365
+ static bool CompileBuiltin(int index);
366
+ static bool CompileNative(Vector<const char> name, Handle<String> source);
367
+ static bool CompileScriptCached(Vector<const char> name,
368
+ Handle<String> source,
369
+ SourceCodeCache* cache,
370
+ v8::Extension* extension,
371
+ bool use_runtime_context);
372
+
373
+ Handle<Context> result_;
374
+ };
375
+
376
+ Genesis* Genesis::current_ = NULL;
377
+
378
+
379
+ void Bootstrapper::Iterate(ObjectVisitor* v) {
380
+ natives_cache.Iterate(v);
381
+ v->Synchronize("NativesCache");
382
+ extensions_cache.Iterate(v);
383
+ v->Synchronize("Extensions");
384
+ PendingFixups::Iterate(v);
385
+ v->Synchronize("PendingFixups");
386
+ }
387
+
388
+
389
+ // While setting up the environment, we collect code positions that
390
+ // need to be patched before we can run any code in the environment.
391
+ void Bootstrapper::AddFixup(Code* code, MacroAssembler* masm) {
392
+ PendingFixups::Add(code, masm);
393
+ }
394
+
395
+
396
+ bool Bootstrapper::IsActive() {
397
+ return Genesis::current() != NULL;
398
+ }
399
+
400
+
401
+ Handle<Context> Bootstrapper::CreateEnvironment(
402
+ Handle<Object> global_object,
403
+ v8::Handle<v8::ObjectTemplate> global_template,
404
+ v8::ExtensionConfiguration* extensions) {
405
+ Genesis genesis(global_object, global_template, extensions);
406
+ return genesis.result();
407
+ }
408
+
409
+
410
+ static void SetObjectPrototype(Handle<JSObject> object, Handle<Object> proto) {
411
+ // object.__proto__ = proto;
412
+ Handle<Map> old_to_map = Handle<Map>(object->map());
413
+ Handle<Map> new_to_map = Factory::CopyMapDropTransitions(old_to_map);
414
+ new_to_map->set_prototype(*proto);
415
+ object->set_map(*new_to_map);
416
+ }
417
+
418
+
419
+ void Bootstrapper::DetachGlobal(Handle<Context> env) {
420
+ JSGlobalProxy::cast(env->global_proxy())->set_context(*Factory::null_value());
421
+ SetObjectPrototype(Handle<JSObject>(env->global_proxy()),
422
+ Factory::null_value());
423
+ env->set_global_proxy(env->global());
424
+ env->global()->set_global_receiver(env->global());
425
+ }
426
+
427
+
428
+ Genesis::~Genesis() {
429
+ ASSERT(current_ == this);
430
+ current_ = previous_;
431
+ }
432
+
433
+
434
+ static Handle<JSFunction> InstallFunction(Handle<JSObject> target,
435
+ const char* name,
436
+ InstanceType type,
437
+ int instance_size,
438
+ Handle<JSObject> prototype,
439
+ Builtins::Name call,
440
+ bool is_ecma_native) {
441
+ Handle<String> symbol = Factory::LookupAsciiSymbol(name);
442
+ Handle<Code> call_code = Handle<Code>(Builtins::builtin(call));
443
+ Handle<JSFunction> function =
444
+ Factory::NewFunctionWithPrototype(symbol,
445
+ type,
446
+ instance_size,
447
+ prototype,
448
+ call_code,
449
+ is_ecma_native);
450
+ SetProperty(target, symbol, function, DONT_ENUM);
451
+ if (is_ecma_native) {
452
+ function->shared()->set_instance_class_name(*symbol);
453
+ }
454
+ return function;
455
+ }
456
+
457
+
458
+ Handle<DescriptorArray> Genesis::ComputeFunctionInstanceDescriptor(
459
+ bool make_prototype_read_only,
460
+ bool make_prototype_enumerable) {
461
+ Handle<DescriptorArray> result = Factory::empty_descriptor_array();
462
+
463
+ // Add prototype.
464
+ PropertyAttributes attributes = static_cast<PropertyAttributes>(
465
+ (make_prototype_enumerable ? 0 : DONT_ENUM)
466
+ | DONT_DELETE
467
+ | (make_prototype_read_only ? READ_ONLY : 0));
468
+ result =
469
+ Factory::CopyAppendProxyDescriptor(
470
+ result,
471
+ Factory::prototype_symbol(),
472
+ Factory::NewProxy(&Accessors::FunctionPrototype),
473
+ attributes);
474
+
475
+ attributes =
476
+ static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE | READ_ONLY);
477
+ // Add length.
478
+ result =
479
+ Factory::CopyAppendProxyDescriptor(
480
+ result,
481
+ Factory::length_symbol(),
482
+ Factory::NewProxy(&Accessors::FunctionLength),
483
+ attributes);
484
+
485
+ // Add name.
486
+ result =
487
+ Factory::CopyAppendProxyDescriptor(
488
+ result,
489
+ Factory::name_symbol(),
490
+ Factory::NewProxy(&Accessors::FunctionName),
491
+ attributes);
492
+
493
+ // Add arguments.
494
+ result =
495
+ Factory::CopyAppendProxyDescriptor(
496
+ result,
497
+ Factory::arguments_symbol(),
498
+ Factory::NewProxy(&Accessors::FunctionArguments),
499
+ attributes);
500
+
501
+ // Add caller.
502
+ result =
503
+ Factory::CopyAppendProxyDescriptor(
504
+ result,
505
+ Factory::caller_symbol(),
506
+ Factory::NewProxy(&Accessors::FunctionCaller),
507
+ attributes);
508
+
509
+ return result;
510
+ }
511
+
512
+
513
+ void Genesis::CreateRoots(v8::Handle<v8::ObjectTemplate> global_template,
514
+ Handle<Object> global_object) {
515
+ HandleScope scope;
516
+ // Allocate the global context FixedArray first and then patch the
517
+ // closure and extension object later (we need the empty function
518
+ // and the global object, but in order to create those, we need the
519
+ // global context).
520
+ global_context_ =
521
+ Handle<Context>::cast(
522
+ GlobalHandles::Create(*Factory::NewGlobalContext()));
523
+ Top::set_context(*global_context());
524
+
525
+ // Allocate the message listeners object.
526
+ v8::NeanderArray listeners;
527
+ global_context()->set_message_listeners(*listeners.value());
528
+
529
+ // Allocate the map for function instances.
530
+ Handle<Map> fm = Factory::NewMap(JS_FUNCTION_TYPE, JSFunction::kSize);
531
+ global_context()->set_function_instance_map(*fm);
532
+ // Please note that the prototype property for function instances must be
533
+ // writable.
534
+ Handle<DescriptorArray> function_map_descriptors =
535
+ ComputeFunctionInstanceDescriptor(false, false);
536
+ fm->set_instance_descriptors(*function_map_descriptors);
537
+
538
+ // Allocate the function map first and then patch the prototype later
539
+ fm = Factory::NewMap(JS_FUNCTION_TYPE, JSFunction::kSize);
540
+ global_context()->set_function_map(*fm);
541
+ function_map_descriptors = ComputeFunctionInstanceDescriptor(true);
542
+ fm->set_instance_descriptors(*function_map_descriptors);
543
+
544
+ Handle<String> object_name = Handle<String>(Heap::Object_symbol());
545
+
546
+ { // --- O b j e c t ---
547
+ Handle<JSFunction> object_fun =
548
+ Factory::NewFunction(object_name, Factory::null_value());
549
+ Handle<Map> object_function_map =
550
+ Factory::NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize);
551
+ object_fun->set_initial_map(*object_function_map);
552
+ object_function_map->set_constructor(*object_fun);
553
+
554
+ global_context()->set_object_function(*object_fun);
555
+
556
+ // Allocate a new prototype for the object function.
557
+ Handle<JSObject> prototype = Factory::NewJSObject(Top::object_function(),
558
+ TENURED);
559
+
560
+ global_context()->set_initial_object_prototype(*prototype);
561
+ SetPrototype(object_fun, prototype);
562
+ object_function_map->
563
+ set_instance_descriptors(Heap::empty_descriptor_array());
564
+ }
565
+
566
+ // Allocate the empty function as the prototype for function ECMAScript
567
+ // 262 15.3.4.
568
+ Handle<String> symbol = Factory::LookupAsciiSymbol("Empty");
569
+ Handle<JSFunction> empty_function =
570
+ Factory::NewFunction(symbol, Factory::null_value());
571
+
572
+ { // --- E m p t y ---
573
+ Handle<Code> code =
574
+ Handle<Code>(Builtins::builtin(Builtins::EmptyFunction));
575
+ empty_function->set_code(*code);
576
+ Handle<String> source = Factory::NewStringFromAscii(CStrVector("() {}"));
577
+ Handle<Script> script = Factory::NewScript(source);
578
+ script->set_type(Smi::FromInt(Script::TYPE_NATIVE));
579
+ empty_function->shared()->set_script(*script);
580
+ empty_function->shared()->set_start_position(0);
581
+ empty_function->shared()->set_end_position(source->length());
582
+ empty_function->shared()->DontAdaptArguments();
583
+ global_context()->function_map()->set_prototype(*empty_function);
584
+ global_context()->function_instance_map()->set_prototype(*empty_function);
585
+
586
+ // Allocate the function map first and then patch the prototype later
587
+ Handle<Map> empty_fm = Factory::CopyMapDropDescriptors(fm);
588
+ empty_fm->set_instance_descriptors(*function_map_descriptors);
589
+ empty_fm->set_prototype(global_context()->object_function()->prototype());
590
+ empty_function->set_map(*empty_fm);
591
+ }
592
+
593
+ { // --- G l o b a l ---
594
+ // Step 1: create a fresh inner JSGlobalObject
595
+ Handle<GlobalObject> object;
596
+ {
597
+ Handle<JSFunction> js_global_function;
598
+ Handle<ObjectTemplateInfo> js_global_template;
599
+ if (!global_template.IsEmpty()) {
600
+ // Get prototype template of the global_template
601
+ Handle<ObjectTemplateInfo> data =
602
+ v8::Utils::OpenHandle(*global_template);
603
+ Handle<FunctionTemplateInfo> global_constructor =
604
+ Handle<FunctionTemplateInfo>(
605
+ FunctionTemplateInfo::cast(data->constructor()));
606
+ Handle<Object> proto_template(global_constructor->prototype_template());
607
+ if (!proto_template->IsUndefined()) {
608
+ js_global_template =
609
+ Handle<ObjectTemplateInfo>::cast(proto_template);
610
+ }
611
+ }
612
+
613
+ if (js_global_template.is_null()) {
614
+ Handle<String> name = Handle<String>(Heap::empty_symbol());
615
+ Handle<Code> code = Handle<Code>(Builtins::builtin(Builtins::Illegal));
616
+ js_global_function =
617
+ Factory::NewFunction(name, JS_GLOBAL_OBJECT_TYPE,
618
+ JSGlobalObject::kSize, code, true);
619
+ // Change the constructor property of the prototype of the
620
+ // hidden global function to refer to the Object function.
621
+ Handle<JSObject> prototype =
622
+ Handle<JSObject>(
623
+ JSObject::cast(js_global_function->instance_prototype()));
624
+ SetProperty(prototype, Factory::constructor_symbol(),
625
+ Top::object_function(), NONE);
626
+ } else {
627
+ Handle<FunctionTemplateInfo> js_global_constructor(
628
+ FunctionTemplateInfo::cast(js_global_template->constructor()));
629
+ js_global_function =
630
+ Factory::CreateApiFunction(js_global_constructor,
631
+ Factory::InnerGlobalObject);
632
+ }
633
+
634
+ js_global_function->initial_map()->set_is_hidden_prototype();
635
+ object = Factory::NewGlobalObject(js_global_function);
636
+ }
637
+
638
+ // Set the global context for the global object.
639
+ object->set_global_context(*global_context());
640
+
641
+ // Step 2: create or re-initialize the global proxy object.
642
+ Handle<JSGlobalProxy> global_proxy;
643
+ {
644
+ Handle<JSFunction> global_proxy_function;
645
+ if (global_template.IsEmpty()) {
646
+ Handle<String> name = Handle<String>(Heap::empty_symbol());
647
+ Handle<Code> code = Handle<Code>(Builtins::builtin(Builtins::Illegal));
648
+ global_proxy_function =
649
+ Factory::NewFunction(name, JS_GLOBAL_PROXY_TYPE,
650
+ JSGlobalProxy::kSize, code, true);
651
+ } else {
652
+ Handle<ObjectTemplateInfo> data =
653
+ v8::Utils::OpenHandle(*global_template);
654
+ Handle<FunctionTemplateInfo> global_constructor(
655
+ FunctionTemplateInfo::cast(data->constructor()));
656
+ global_proxy_function =
657
+ Factory::CreateApiFunction(global_constructor,
658
+ Factory::OuterGlobalObject);
659
+ }
660
+
661
+ Handle<String> global_name = Factory::LookupAsciiSymbol("global");
662
+ global_proxy_function->shared()->set_instance_class_name(*global_name);
663
+ global_proxy_function->initial_map()->set_is_access_check_needed(true);
664
+
665
+ // Set global_proxy.__proto__ to js_global after ConfigureGlobalObjects
666
+
667
+ if (global_object.location() != NULL) {
668
+ ASSERT(global_object->IsJSGlobalProxy());
669
+ global_proxy =
670
+ ReinitializeJSGlobalProxy(
671
+ global_proxy_function,
672
+ Handle<JSGlobalProxy>::cast(global_object));
673
+ } else {
674
+ global_proxy = Handle<JSGlobalProxy>::cast(
675
+ Factory::NewJSObject(global_proxy_function, TENURED));
676
+ }
677
+
678
+ // Security setup: Set the security token of the global object to
679
+ // its the inner global. This makes the security check between two
680
+ // different contexts fail by default even in case of global
681
+ // object reinitialization.
682
+ object->set_global_receiver(*global_proxy);
683
+ global_proxy->set_context(*global_context());
684
+ }
685
+
686
+ { // --- G l o b a l C o n t e x t ---
687
+ // use the empty function as closure (no scope info)
688
+ global_context()->set_closure(*empty_function);
689
+ global_context()->set_fcontext(*global_context());
690
+ global_context()->set_previous(NULL);
691
+
692
+ // set extension and global object
693
+ global_context()->set_extension(*object);
694
+ global_context()->set_global(*object);
695
+ global_context()->set_global_proxy(*global_proxy);
696
+ // use inner global object as security token by default
697
+ global_context()->set_security_token(*object);
698
+ }
699
+
700
+ Handle<JSObject> global = Handle<JSObject>(global_context()->global());
701
+ SetProperty(global, object_name, Top::object_function(), DONT_ENUM);
702
+ }
703
+
704
+ Handle<JSObject> global = Handle<JSObject>(global_context()->global());
705
+
706
+ // Install global Function object
707
+ InstallFunction(global, "Function", JS_FUNCTION_TYPE, JSFunction::kSize,
708
+ empty_function, Builtins::Illegal, true); // ECMA native.
709
+
710
+ { // --- A r r a y ---
711
+ Handle<JSFunction> array_function =
712
+ InstallFunction(global, "Array", JS_ARRAY_TYPE, JSArray::kSize,
713
+ Top::initial_object_prototype(), Builtins::ArrayCode,
714
+ true);
715
+ array_function->shared()->set_construct_stub(
716
+ Builtins::builtin(Builtins::ArrayConstructCode));
717
+ array_function->shared()->DontAdaptArguments();
718
+
719
+ // This seems a bit hackish, but we need to make sure Array.length
720
+ // is 1.
721
+ array_function->shared()->set_length(1);
722
+ Handle<DescriptorArray> array_descriptors =
723
+ Factory::CopyAppendProxyDescriptor(
724
+ Factory::empty_descriptor_array(),
725
+ Factory::length_symbol(),
726
+ Factory::NewProxy(&Accessors::ArrayLength),
727
+ static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE));
728
+
729
+ // Cache the fast JavaScript array map
730
+ global_context()->set_js_array_map(array_function->initial_map());
731
+ global_context()->js_array_map()->set_instance_descriptors(
732
+ *array_descriptors);
733
+ // array_function is used internally. JS code creating array object should
734
+ // search for the 'Array' property on the global object and use that one
735
+ // as the constructor. 'Array' property on a global object can be
736
+ // overwritten by JS code.
737
+ global_context()->set_array_function(*array_function);
738
+ }
739
+
740
+ { // --- N u m b e r ---
741
+ Handle<JSFunction> number_fun =
742
+ InstallFunction(global, "Number", JS_VALUE_TYPE, JSValue::kSize,
743
+ Top::initial_object_prototype(), Builtins::Illegal,
744
+ true);
745
+ global_context()->set_number_function(*number_fun);
746
+ }
747
+
748
+ { // --- B o o l e a n ---
749
+ Handle<JSFunction> boolean_fun =
750
+ InstallFunction(global, "Boolean", JS_VALUE_TYPE, JSValue::kSize,
751
+ Top::initial_object_prototype(), Builtins::Illegal,
752
+ true);
753
+ global_context()->set_boolean_function(*boolean_fun);
754
+ }
755
+
756
+ { // --- S t r i n g ---
757
+ Handle<JSFunction> string_fun =
758
+ InstallFunction(global, "String", JS_VALUE_TYPE, JSValue::kSize,
759
+ Top::initial_object_prototype(), Builtins::Illegal,
760
+ true);
761
+ global_context()->set_string_function(*string_fun);
762
+ // Add 'length' property to strings.
763
+ Handle<DescriptorArray> string_descriptors =
764
+ Factory::CopyAppendProxyDescriptor(
765
+ Factory::empty_descriptor_array(),
766
+ Factory::length_symbol(),
767
+ Factory::NewProxy(&Accessors::StringLength),
768
+ static_cast<PropertyAttributes>(DONT_ENUM |
769
+ DONT_DELETE |
770
+ READ_ONLY));
771
+
772
+ Handle<Map> string_map =
773
+ Handle<Map>(global_context()->string_function()->initial_map());
774
+ string_map->set_instance_descriptors(*string_descriptors);
775
+ }
776
+
777
+ { // --- D a t e ---
778
+ // Builtin functions for Date.prototype.
779
+ Handle<JSFunction> date_fun =
780
+ InstallFunction(global, "Date", JS_VALUE_TYPE, JSValue::kSize,
781
+ Top::initial_object_prototype(), Builtins::Illegal,
782
+ true);
783
+
784
+ global_context()->set_date_function(*date_fun);
785
+ }
786
+
787
+
788
+ { // -- R e g E x p
789
+ // Builtin functions for RegExp.prototype.
790
+ Handle<JSFunction> regexp_fun =
791
+ InstallFunction(global, "RegExp", JS_REGEXP_TYPE, JSRegExp::kSize,
792
+ Top::initial_object_prototype(), Builtins::Illegal,
793
+ true);
794
+
795
+ global_context()->set_regexp_function(*regexp_fun);
796
+ }
797
+
798
+ { // -- J S O N
799
+ Handle<String> name = Factory::NewStringFromAscii(CStrVector("JSON"));
800
+ Handle<JSFunction> cons = Factory::NewFunction(
801
+ name,
802
+ Factory::the_hole_value());
803
+ cons->SetInstancePrototype(global_context()->initial_object_prototype());
804
+ cons->SetInstanceClassName(*name);
805
+ Handle<JSObject> json_object = Factory::NewJSObject(cons, TENURED);
806
+ ASSERT(json_object->IsJSObject());
807
+ SetProperty(global, name, json_object, DONT_ENUM);
808
+ global_context()->set_json_object(*json_object);
809
+ }
810
+
811
+ { // --- arguments_boilerplate_
812
+ // Make sure we can recognize argument objects at runtime.
813
+ // This is done by introducing an anonymous function with
814
+ // class_name equals 'Arguments'.
815
+ Handle<String> symbol = Factory::LookupAsciiSymbol("Arguments");
816
+ Handle<Code> code = Handle<Code>(Builtins::builtin(Builtins::Illegal));
817
+ Handle<JSObject> prototype =
818
+ Handle<JSObject>(
819
+ JSObject::cast(global_context()->object_function()->prototype()));
820
+
821
+ Handle<JSFunction> function =
822
+ Factory::NewFunctionWithPrototype(symbol,
823
+ JS_OBJECT_TYPE,
824
+ JSObject::kHeaderSize,
825
+ prototype,
826
+ code,
827
+ false);
828
+ ASSERT(!function->has_initial_map());
829
+ function->shared()->set_instance_class_name(*symbol);
830
+ function->shared()->set_expected_nof_properties(2);
831
+ Handle<JSObject> result = Factory::NewJSObject(function);
832
+
833
+ global_context()->set_arguments_boilerplate(*result);
834
+ // Note: callee must be added as the first property and
835
+ // length must be added as the second property.
836
+ SetProperty(result, Factory::callee_symbol(),
837
+ Factory::undefined_value(),
838
+ DONT_ENUM);
839
+ SetProperty(result, Factory::length_symbol(),
840
+ Factory::undefined_value(),
841
+ DONT_ENUM);
842
+
843
+ #ifdef DEBUG
844
+ LookupResult lookup;
845
+ result->LocalLookup(Heap::callee_symbol(), &lookup);
846
+ ASSERT(lookup.IsValid() && (lookup.type() == FIELD));
847
+ ASSERT(lookup.GetFieldIndex() == Heap::arguments_callee_index);
848
+
849
+ result->LocalLookup(Heap::length_symbol(), &lookup);
850
+ ASSERT(lookup.IsValid() && (lookup.type() == FIELD));
851
+ ASSERT(lookup.GetFieldIndex() == Heap::arguments_length_index);
852
+
853
+ ASSERT(result->map()->inobject_properties() > Heap::arguments_callee_index);
854
+ ASSERT(result->map()->inobject_properties() > Heap::arguments_length_index);
855
+
856
+ // Check the state of the object.
857
+ ASSERT(result->HasFastProperties());
858
+ ASSERT(result->HasFastElements());
859
+ #endif
860
+ }
861
+
862
+ { // --- context extension
863
+ // Create a function for the context extension objects.
864
+ Handle<Code> code = Handle<Code>(Builtins::builtin(Builtins::Illegal));
865
+ Handle<JSFunction> context_extension_fun =
866
+ Factory::NewFunction(Factory::empty_symbol(),
867
+ JS_CONTEXT_EXTENSION_OBJECT_TYPE,
868
+ JSObject::kHeaderSize,
869
+ code,
870
+ true);
871
+
872
+ Handle<String> name = Factory::LookupAsciiSymbol("context_extension");
873
+ context_extension_fun->shared()->set_instance_class_name(*name);
874
+ global_context()->set_context_extension_function(*context_extension_fun);
875
+ }
876
+
877
+
878
+ {
879
+ // Setup the call-as-function delegate.
880
+ Handle<Code> code =
881
+ Handle<Code>(Builtins::builtin(Builtins::HandleApiCallAsFunction));
882
+ Handle<JSFunction> delegate =
883
+ Factory::NewFunction(Factory::empty_symbol(), JS_OBJECT_TYPE,
884
+ JSObject::kHeaderSize, code, true);
885
+ global_context()->set_call_as_function_delegate(*delegate);
886
+ delegate->shared()->DontAdaptArguments();
887
+ }
888
+
889
+ {
890
+ // Setup the call-as-constructor delegate.
891
+ Handle<Code> code =
892
+ Handle<Code>(Builtins::builtin(Builtins::HandleApiCallAsConstructor));
893
+ Handle<JSFunction> delegate =
894
+ Factory::NewFunction(Factory::empty_symbol(), JS_OBJECT_TYPE,
895
+ JSObject::kHeaderSize, code, true);
896
+ global_context()->set_call_as_constructor_delegate(*delegate);
897
+ delegate->shared()->DontAdaptArguments();
898
+ }
899
+
900
+ global_context()->set_special_function_table(Heap::empty_fixed_array());
901
+
902
+ // Initialize the out of memory slot.
903
+ global_context()->set_out_of_memory(Heap::false_value());
904
+
905
+ // Initialize the data slot.
906
+ global_context()->set_data(Heap::undefined_value());
907
+ }
908
+
909
+
910
+ bool Genesis::CompileBuiltin(int index) {
911
+ Vector<const char> name = Natives::GetScriptName(index);
912
+ Handle<String> source_code = Bootstrapper::NativesSourceLookup(index);
913
+ return CompileNative(name, source_code);
914
+ }
915
+
916
+
917
+ bool Genesis::CompileNative(Vector<const char> name, Handle<String> source) {
918
+ HandleScope scope;
919
+ #ifdef ENABLE_DEBUGGER_SUPPORT
920
+ Debugger::set_compiling_natives(true);
921
+ #endif
922
+ bool result =
923
+ CompileScriptCached(name, source, &natives_cache, NULL, true);
924
+ ASSERT(Top::has_pending_exception() != result);
925
+ if (!result) Top::clear_pending_exception();
926
+ #ifdef ENABLE_DEBUGGER_SUPPORT
927
+ Debugger::set_compiling_natives(false);
928
+ #endif
929
+ return result;
930
+ }
931
+
932
+
933
+ bool Genesis::CompileScriptCached(Vector<const char> name,
934
+ Handle<String> source,
935
+ SourceCodeCache* cache,
936
+ v8::Extension* extension,
937
+ bool use_runtime_context) {
938
+ HandleScope scope;
939
+ Handle<JSFunction> boilerplate;
940
+
941
+ // If we can't find the function in the cache, we compile a new
942
+ // function and insert it into the cache.
943
+ if (!cache->Lookup(name, &boilerplate)) {
944
+ ASSERT(source->IsAsciiRepresentation());
945
+ Handle<String> script_name = Factory::NewStringFromUtf8(name);
946
+ boilerplate =
947
+ Compiler::Compile(source, script_name, 0, 0, extension, NULL);
948
+ if (boilerplate.is_null()) return false;
949
+ cache->Add(name, boilerplate);
950
+ }
951
+
952
+ // Setup the function context. Conceptually, we should clone the
953
+ // function before overwriting the context but since we're in a
954
+ // single-threaded environment it is not strictly necessary.
955
+ ASSERT(Top::context()->IsGlobalContext());
956
+ Handle<Context> context =
957
+ Handle<Context>(use_runtime_context
958
+ ? Top::context()->runtime_context()
959
+ : Top::context());
960
+ Handle<JSFunction> fun =
961
+ Factory::NewFunctionFromBoilerplate(boilerplate, context);
962
+
963
+ // Call function using the either the runtime object or the global
964
+ // object as the receiver. Provide no parameters.
965
+ Handle<Object> receiver =
966
+ Handle<Object>(use_runtime_context
967
+ ? Top::context()->builtins()
968
+ : Top::context()->global());
969
+ bool has_pending_exception;
970
+ Handle<Object> result =
971
+ Execution::Call(fun, receiver, 0, NULL, &has_pending_exception);
972
+ if (has_pending_exception) return false;
973
+ return PendingFixups::Process(
974
+ Handle<JSBuiltinsObject>(Top::context()->builtins()));
975
+ }
976
+
977
+
978
+ #define INSTALL_NATIVE(Type, name, var) \
979
+ Handle<String> var##_name = Factory::LookupAsciiSymbol(name); \
980
+ global_context()->set_##var(Type::cast(global_context()-> \
981
+ builtins()-> \
982
+ GetProperty(*var##_name)));
983
+
984
+ void Genesis::InstallNativeFunctions() {
985
+ HandleScope scope;
986
+ INSTALL_NATIVE(JSFunction, "CreateDate", create_date_fun);
987
+ INSTALL_NATIVE(JSFunction, "ToNumber", to_number_fun);
988
+ INSTALL_NATIVE(JSFunction, "ToString", to_string_fun);
989
+ INSTALL_NATIVE(JSFunction, "ToDetailString", to_detail_string_fun);
990
+ INSTALL_NATIVE(JSFunction, "ToObject", to_object_fun);
991
+ INSTALL_NATIVE(JSFunction, "ToInteger", to_integer_fun);
992
+ INSTALL_NATIVE(JSFunction, "ToUint32", to_uint32_fun);
993
+ INSTALL_NATIVE(JSFunction, "ToInt32", to_int32_fun);
994
+ INSTALL_NATIVE(JSFunction, "ToBoolean", to_boolean_fun);
995
+ INSTALL_NATIVE(JSFunction, "GlobalEval", global_eval_fun);
996
+ INSTALL_NATIVE(JSFunction, "Instantiate", instantiate_fun);
997
+ INSTALL_NATIVE(JSFunction, "ConfigureTemplateInstance",
998
+ configure_instance_fun);
999
+ INSTALL_NATIVE(JSFunction, "MakeMessage", make_message_fun);
1000
+ INSTALL_NATIVE(JSFunction, "GetStackTraceLine", get_stack_trace_line_fun);
1001
+ INSTALL_NATIVE(JSObject, "functionCache", function_cache);
1002
+ }
1003
+
1004
+ #undef INSTALL_NATIVE
1005
+
1006
+
1007
+ bool Genesis::InstallNatives() {
1008
+ HandleScope scope;
1009
+
1010
+ // Create a function for the builtins object. Allocate space for the
1011
+ // JavaScript builtins, a reference to the builtins object
1012
+ // (itself) and a reference to the global_context directly in the object.
1013
+ Handle<Code> code = Handle<Code>(Builtins::builtin(Builtins::Illegal));
1014
+ Handle<JSFunction> builtins_fun =
1015
+ Factory::NewFunction(Factory::empty_symbol(), JS_BUILTINS_OBJECT_TYPE,
1016
+ JSBuiltinsObject::kSize, code, true);
1017
+
1018
+ Handle<String> name = Factory::LookupAsciiSymbol("builtins");
1019
+ builtins_fun->shared()->set_instance_class_name(*name);
1020
+
1021
+ // Allocate the builtins object.
1022
+ Handle<JSBuiltinsObject> builtins =
1023
+ Handle<JSBuiltinsObject>::cast(Factory::NewGlobalObject(builtins_fun));
1024
+ builtins->set_builtins(*builtins);
1025
+ builtins->set_global_context(*global_context());
1026
+ builtins->set_global_receiver(*builtins);
1027
+
1028
+ // Setup the 'global' properties of the builtins object. The
1029
+ // 'global' property that refers to the global object is the only
1030
+ // way to get from code running in the builtins context to the
1031
+ // global object.
1032
+ static const PropertyAttributes attributes =
1033
+ static_cast<PropertyAttributes>(READ_ONLY | DONT_DELETE);
1034
+ SetProperty(builtins, Factory::LookupAsciiSymbol("global"),
1035
+ Handle<Object>(global_context()->global()), attributes);
1036
+
1037
+ // Setup the reference from the global object to the builtins object.
1038
+ JSGlobalObject::cast(global_context()->global())->set_builtins(*builtins);
1039
+
1040
+ // Create a bridge function that has context in the global context.
1041
+ Handle<JSFunction> bridge =
1042
+ Factory::NewFunction(Factory::empty_symbol(), Factory::undefined_value());
1043
+ ASSERT(bridge->context() == *Top::global_context());
1044
+
1045
+ // Allocate the builtins context.
1046
+ Handle<Context> context =
1047
+ Factory::NewFunctionContext(Context::MIN_CONTEXT_SLOTS, bridge);
1048
+ context->set_global(*builtins); // override builtins global object
1049
+
1050
+ global_context()->set_runtime_context(*context);
1051
+
1052
+ { // -- S c r i p t
1053
+ // Builtin functions for Script.
1054
+ Handle<JSFunction> script_fun =
1055
+ InstallFunction(builtins, "Script", JS_VALUE_TYPE, JSValue::kSize,
1056
+ Top::initial_object_prototype(), Builtins::Illegal,
1057
+ false);
1058
+ Handle<JSObject> prototype =
1059
+ Factory::NewJSObject(Top::object_function(), TENURED);
1060
+ SetPrototype(script_fun, prototype);
1061
+ global_context()->set_script_function(*script_fun);
1062
+
1063
+ // Add 'source' and 'data' property to scripts.
1064
+ PropertyAttributes common_attributes =
1065
+ static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE | READ_ONLY);
1066
+ Handle<Proxy> proxy_source = Factory::NewProxy(&Accessors::ScriptSource);
1067
+ Handle<DescriptorArray> script_descriptors =
1068
+ Factory::CopyAppendProxyDescriptor(
1069
+ Factory::empty_descriptor_array(),
1070
+ Factory::LookupAsciiSymbol("source"),
1071
+ proxy_source,
1072
+ common_attributes);
1073
+ Handle<Proxy> proxy_name = Factory::NewProxy(&Accessors::ScriptName);
1074
+ script_descriptors =
1075
+ Factory::CopyAppendProxyDescriptor(
1076
+ script_descriptors,
1077
+ Factory::LookupAsciiSymbol("name"),
1078
+ proxy_name,
1079
+ common_attributes);
1080
+ Handle<Proxy> proxy_id = Factory::NewProxy(&Accessors::ScriptId);
1081
+ script_descriptors =
1082
+ Factory::CopyAppendProxyDescriptor(
1083
+ script_descriptors,
1084
+ Factory::LookupAsciiSymbol("id"),
1085
+ proxy_id,
1086
+ common_attributes);
1087
+ Handle<Proxy> proxy_line_offset =
1088
+ Factory::NewProxy(&Accessors::ScriptLineOffset);
1089
+ script_descriptors =
1090
+ Factory::CopyAppendProxyDescriptor(
1091
+ script_descriptors,
1092
+ Factory::LookupAsciiSymbol("line_offset"),
1093
+ proxy_line_offset,
1094
+ common_attributes);
1095
+ Handle<Proxy> proxy_column_offset =
1096
+ Factory::NewProxy(&Accessors::ScriptColumnOffset);
1097
+ script_descriptors =
1098
+ Factory::CopyAppendProxyDescriptor(
1099
+ script_descriptors,
1100
+ Factory::LookupAsciiSymbol("column_offset"),
1101
+ proxy_column_offset,
1102
+ common_attributes);
1103
+ Handle<Proxy> proxy_data = Factory::NewProxy(&Accessors::ScriptData);
1104
+ script_descriptors =
1105
+ Factory::CopyAppendProxyDescriptor(
1106
+ script_descriptors,
1107
+ Factory::LookupAsciiSymbol("data"),
1108
+ proxy_data,
1109
+ common_attributes);
1110
+ Handle<Proxy> proxy_type = Factory::NewProxy(&Accessors::ScriptType);
1111
+ script_descriptors =
1112
+ Factory::CopyAppendProxyDescriptor(
1113
+ script_descriptors,
1114
+ Factory::LookupAsciiSymbol("type"),
1115
+ proxy_type,
1116
+ common_attributes);
1117
+ Handle<Proxy> proxy_compilation_type =
1118
+ Factory::NewProxy(&Accessors::ScriptCompilationType);
1119
+ script_descriptors =
1120
+ Factory::CopyAppendProxyDescriptor(
1121
+ script_descriptors,
1122
+ Factory::LookupAsciiSymbol("compilation_type"),
1123
+ proxy_compilation_type,
1124
+ common_attributes);
1125
+ Handle<Proxy> proxy_line_ends =
1126
+ Factory::NewProxy(&Accessors::ScriptLineEnds);
1127
+ script_descriptors =
1128
+ Factory::CopyAppendProxyDescriptor(
1129
+ script_descriptors,
1130
+ Factory::LookupAsciiSymbol("line_ends"),
1131
+ proxy_line_ends,
1132
+ common_attributes);
1133
+ Handle<Proxy> proxy_context_data =
1134
+ Factory::NewProxy(&Accessors::ScriptContextData);
1135
+ script_descriptors =
1136
+ Factory::CopyAppendProxyDescriptor(
1137
+ script_descriptors,
1138
+ Factory::LookupAsciiSymbol("context_data"),
1139
+ proxy_context_data,
1140
+ common_attributes);
1141
+ Handle<Proxy> proxy_eval_from_script =
1142
+ Factory::NewProxy(&Accessors::ScriptEvalFromScript);
1143
+ script_descriptors =
1144
+ Factory::CopyAppendProxyDescriptor(
1145
+ script_descriptors,
1146
+ Factory::LookupAsciiSymbol("eval_from_script"),
1147
+ proxy_eval_from_script,
1148
+ common_attributes);
1149
+ Handle<Proxy> proxy_eval_from_script_position =
1150
+ Factory::NewProxy(&Accessors::ScriptEvalFromScriptPosition);
1151
+ script_descriptors =
1152
+ Factory::CopyAppendProxyDescriptor(
1153
+ script_descriptors,
1154
+ Factory::LookupAsciiSymbol("eval_from_script_position"),
1155
+ proxy_eval_from_script_position,
1156
+ common_attributes);
1157
+ Handle<Proxy> proxy_eval_from_function_name =
1158
+ Factory::NewProxy(&Accessors::ScriptEvalFromFunctionName);
1159
+ script_descriptors =
1160
+ Factory::CopyAppendProxyDescriptor(
1161
+ script_descriptors,
1162
+ Factory::LookupAsciiSymbol("eval_from_function_name"),
1163
+ proxy_eval_from_function_name,
1164
+ common_attributes);
1165
+
1166
+ Handle<Map> script_map = Handle<Map>(script_fun->initial_map());
1167
+ script_map->set_instance_descriptors(*script_descriptors);
1168
+
1169
+ // Allocate the empty script.
1170
+ Handle<Script> script = Factory::NewScript(Factory::empty_string());
1171
+ script->set_type(Smi::FromInt(Script::TYPE_NATIVE));
1172
+ global_context()->set_empty_script(*script);
1173
+ }
1174
+
1175
+ if (FLAG_natives_file == NULL) {
1176
+ // Without natives file, install default natives.
1177
+ for (int i = Natives::GetDelayCount();
1178
+ i < Natives::GetBuiltinsCount();
1179
+ i++) {
1180
+ if (!CompileBuiltin(i)) return false;
1181
+ }
1182
+
1183
+ // Setup natives with lazy loading.
1184
+ SetupLazy(Handle<JSFunction>(global_context()->date_function()),
1185
+ Natives::GetIndex("date"),
1186
+ Top::global_context(),
1187
+ Handle<Context>(Top::context()->runtime_context()));
1188
+ SetupLazy(Handle<JSFunction>(global_context()->regexp_function()),
1189
+ Natives::GetIndex("regexp"),
1190
+ Top::global_context(),
1191
+ Handle<Context>(Top::context()->runtime_context()));
1192
+ SetupLazy(Handle<JSObject>(global_context()->json_object()),
1193
+ Natives::GetIndex("json"),
1194
+ Top::global_context(),
1195
+ Handle<Context>(Top::context()->runtime_context()));
1196
+
1197
+ } else if (strlen(FLAG_natives_file) != 0) {
1198
+ // Otherwise install natives from natives file if file exists and
1199
+ // compiles.
1200
+ bool exists;
1201
+ Vector<const char> source = ReadFile(FLAG_natives_file, &exists);
1202
+ Handle<String> source_string = Factory::NewStringFromAscii(source);
1203
+ if (source.is_empty()) return false;
1204
+ bool result = CompileNative(CStrVector(FLAG_natives_file), source_string);
1205
+ if (!result) return false;
1206
+
1207
+ } else {
1208
+ // Empty natives file name - do not install any natives.
1209
+ PrintF("Warning: Running without installed natives!\n");
1210
+ return true;
1211
+ }
1212
+
1213
+ InstallNativeFunctions();
1214
+
1215
+ // Install Function.prototype.call and apply.
1216
+ { Handle<String> key = Factory::function_class_symbol();
1217
+ Handle<JSFunction> function =
1218
+ Handle<JSFunction>::cast(GetProperty(Top::global(), key));
1219
+ Handle<JSObject> proto =
1220
+ Handle<JSObject>(JSObject::cast(function->instance_prototype()));
1221
+
1222
+ // Install the call and the apply functions.
1223
+ Handle<JSFunction> call =
1224
+ InstallFunction(proto, "call", JS_OBJECT_TYPE, JSObject::kHeaderSize,
1225
+ Factory::NewJSObject(Top::object_function(), TENURED),
1226
+ Builtins::FunctionCall,
1227
+ false);
1228
+ Handle<JSFunction> apply =
1229
+ InstallFunction(proto, "apply", JS_OBJECT_TYPE, JSObject::kHeaderSize,
1230
+ Factory::NewJSObject(Top::object_function(), TENURED),
1231
+ Builtins::FunctionApply,
1232
+ false);
1233
+
1234
+ // Make sure that Function.prototype.call appears to be compiled.
1235
+ // The code will never be called, but inline caching for call will
1236
+ // only work if it appears to be compiled.
1237
+ call->shared()->DontAdaptArguments();
1238
+ ASSERT(call->is_compiled());
1239
+
1240
+ // Set the expected parameters for apply to 2; required by builtin.
1241
+ apply->shared()->set_formal_parameter_count(2);
1242
+
1243
+ // Set the lengths for the functions to satisfy ECMA-262.
1244
+ call->shared()->set_length(1);
1245
+ apply->shared()->set_length(2);
1246
+ }
1247
+
1248
+ #ifdef DEBUG
1249
+ builtins->Verify();
1250
+ #endif
1251
+ return true;
1252
+ }
1253
+
1254
+
1255
+ bool Genesis::InstallSpecialObjects() {
1256
+ HandleScope scope;
1257
+ Handle<JSGlobalObject> js_global(
1258
+ JSGlobalObject::cast(global_context()->global()));
1259
+ // Expose the natives in global if a name for it is specified.
1260
+ if (FLAG_expose_natives_as != NULL && strlen(FLAG_expose_natives_as) != 0) {
1261
+ Handle<String> natives_string =
1262
+ Factory::LookupAsciiSymbol(FLAG_expose_natives_as);
1263
+ SetProperty(js_global, natives_string,
1264
+ Handle<JSObject>(js_global->builtins()), DONT_ENUM);
1265
+ }
1266
+
1267
+ Handle<Object> Error = GetProperty(js_global, "Error");
1268
+ if (Error->IsJSObject()) {
1269
+ Handle<String> name = Factory::LookupAsciiSymbol("stackTraceLimit");
1270
+ SetProperty(Handle<JSObject>::cast(Error),
1271
+ name,
1272
+ Handle<Smi>(Smi::FromInt(FLAG_stack_trace_limit)),
1273
+ NONE);
1274
+ }
1275
+
1276
+ #ifdef ENABLE_DEBUGGER_SUPPORT
1277
+ // Expose the debug global object in global if a name for it is specified.
1278
+ if (FLAG_expose_debug_as != NULL && strlen(FLAG_expose_debug_as) != 0) {
1279
+ // If loading fails we just bail out without installing the
1280
+ // debugger but without tanking the whole context.
1281
+ if (!Debug::Load())
1282
+ return true;
1283
+ // Set the security token for the debugger context to the same as
1284
+ // the shell global context to allow calling between these (otherwise
1285
+ // exposing debug global object doesn't make much sense).
1286
+ Debug::debug_context()->set_security_token(
1287
+ global_context()->security_token());
1288
+
1289
+ Handle<String> debug_string =
1290
+ Factory::LookupAsciiSymbol(FLAG_expose_debug_as);
1291
+ SetProperty(js_global, debug_string,
1292
+ Handle<Object>(Debug::debug_context()->global_proxy()), DONT_ENUM);
1293
+ }
1294
+ #endif
1295
+
1296
+ return true;
1297
+ }
1298
+
1299
+
1300
+ bool Genesis::InstallExtensions(v8::ExtensionConfiguration* extensions) {
1301
+ // Clear coloring of extension list
1302
+ v8::RegisteredExtension* current = v8::RegisteredExtension::first_extension();
1303
+ while (current != NULL) {
1304
+ current->set_state(v8::UNVISITED);
1305
+ current = current->next();
1306
+ }
1307
+ // Install auto extensions
1308
+ current = v8::RegisteredExtension::first_extension();
1309
+ while (current != NULL) {
1310
+ if (current->extension()->auto_enable())
1311
+ InstallExtension(current);
1312
+ current = current->next();
1313
+ }
1314
+
1315
+ if (FLAG_expose_gc) InstallExtension("v8/gc");
1316
+
1317
+ if (extensions == NULL) return true;
1318
+ // Install required extensions
1319
+ int count = v8::ImplementationUtilities::GetNameCount(extensions);
1320
+ const char** names = v8::ImplementationUtilities::GetNames(extensions);
1321
+ for (int i = 0; i < count; i++) {
1322
+ if (!InstallExtension(names[i]))
1323
+ return false;
1324
+ }
1325
+
1326
+ return true;
1327
+ }
1328
+
1329
+
1330
+ // Installs a named extension. This methods is unoptimized and does
1331
+ // not scale well if we want to support a large number of extensions.
1332
+ bool Genesis::InstallExtension(const char* name) {
1333
+ v8::RegisteredExtension* current = v8::RegisteredExtension::first_extension();
1334
+ // Loop until we find the relevant extension
1335
+ while (current != NULL) {
1336
+ if (strcmp(name, current->extension()->name()) == 0) break;
1337
+ current = current->next();
1338
+ }
1339
+ // Didn't find the extension; fail.
1340
+ if (current == NULL) {
1341
+ v8::Utils::ReportApiFailure(
1342
+ "v8::Context::New()", "Cannot find required extension");
1343
+ return false;
1344
+ }
1345
+ return InstallExtension(current);
1346
+ }
1347
+
1348
+
1349
+ bool Genesis::InstallExtension(v8::RegisteredExtension* current) {
1350
+ HandleScope scope;
1351
+
1352
+ if (current->state() == v8::INSTALLED) return true;
1353
+ // The current node has already been visited so there must be a
1354
+ // cycle in the dependency graph; fail.
1355
+ if (current->state() == v8::VISITED) {
1356
+ v8::Utils::ReportApiFailure(
1357
+ "v8::Context::New()", "Circular extension dependency");
1358
+ return false;
1359
+ }
1360
+ ASSERT(current->state() == v8::UNVISITED);
1361
+ current->set_state(v8::VISITED);
1362
+ v8::Extension* extension = current->extension();
1363
+ // Install the extension's dependencies
1364
+ for (int i = 0; i < extension->dependency_count(); i++) {
1365
+ if (!InstallExtension(extension->dependencies()[i])) return false;
1366
+ }
1367
+ Vector<const char> source = CStrVector(extension->source());
1368
+ Handle<String> source_code = Factory::NewStringFromAscii(source);
1369
+ bool result = CompileScriptCached(CStrVector(extension->name()),
1370
+ source_code,
1371
+ &extensions_cache, extension,
1372
+ false);
1373
+ ASSERT(Top::has_pending_exception() != result);
1374
+ if (!result) {
1375
+ Top::clear_pending_exception();
1376
+ }
1377
+ current->set_state(v8::INSTALLED);
1378
+ return result;
1379
+ }
1380
+
1381
+
1382
+ bool Genesis::ConfigureGlobalObjects(
1383
+ v8::Handle<v8::ObjectTemplate> global_proxy_template) {
1384
+ Handle<JSObject> global_proxy(
1385
+ JSObject::cast(global_context()->global_proxy()));
1386
+ Handle<JSObject> js_global(JSObject::cast(global_context()->global()));
1387
+
1388
+ if (!global_proxy_template.IsEmpty()) {
1389
+ // Configure the global proxy object.
1390
+ Handle<ObjectTemplateInfo> proxy_data =
1391
+ v8::Utils::OpenHandle(*global_proxy_template);
1392
+ if (!ConfigureApiObject(global_proxy, proxy_data)) return false;
1393
+
1394
+ // Configure the inner global object.
1395
+ Handle<FunctionTemplateInfo> proxy_constructor(
1396
+ FunctionTemplateInfo::cast(proxy_data->constructor()));
1397
+ if (!proxy_constructor->prototype_template()->IsUndefined()) {
1398
+ Handle<ObjectTemplateInfo> inner_data(
1399
+ ObjectTemplateInfo::cast(proxy_constructor->prototype_template()));
1400
+ if (!ConfigureApiObject(js_global, inner_data)) return false;
1401
+ }
1402
+ }
1403
+
1404
+ SetObjectPrototype(global_proxy, js_global);
1405
+ return true;
1406
+ }
1407
+
1408
+
1409
+ bool Genesis::ConfigureApiObject(Handle<JSObject> object,
1410
+ Handle<ObjectTemplateInfo> object_template) {
1411
+ ASSERT(!object_template.is_null());
1412
+ ASSERT(object->IsInstanceOf(
1413
+ FunctionTemplateInfo::cast(object_template->constructor())));
1414
+
1415
+ bool pending_exception = false;
1416
+ Handle<JSObject> obj =
1417
+ Execution::InstantiateObject(object_template, &pending_exception);
1418
+ if (pending_exception) {
1419
+ ASSERT(Top::has_pending_exception());
1420
+ Top::clear_pending_exception();
1421
+ return false;
1422
+ }
1423
+ TransferObject(obj, object);
1424
+ return true;
1425
+ }
1426
+
1427
+
1428
+ void Genesis::TransferNamedProperties(Handle<JSObject> from,
1429
+ Handle<JSObject> to) {
1430
+ if (from->HasFastProperties()) {
1431
+ Handle<DescriptorArray> descs =
1432
+ Handle<DescriptorArray>(from->map()->instance_descriptors());
1433
+ for (int i = 0; i < descs->number_of_descriptors(); i++) {
1434
+ PropertyDetails details = PropertyDetails(descs->GetDetails(i));
1435
+ switch (details.type()) {
1436
+ case FIELD: {
1437
+ HandleScope inner;
1438
+ Handle<String> key = Handle<String>(descs->GetKey(i));
1439
+ int index = descs->GetFieldIndex(i);
1440
+ Handle<Object> value = Handle<Object>(from->FastPropertyAt(index));
1441
+ SetProperty(to, key, value, details.attributes());
1442
+ break;
1443
+ }
1444
+ case CONSTANT_FUNCTION: {
1445
+ HandleScope inner;
1446
+ Handle<String> key = Handle<String>(descs->GetKey(i));
1447
+ Handle<JSFunction> fun =
1448
+ Handle<JSFunction>(descs->GetConstantFunction(i));
1449
+ SetProperty(to, key, fun, details.attributes());
1450
+ break;
1451
+ }
1452
+ case CALLBACKS: {
1453
+ LookupResult result;
1454
+ to->LocalLookup(descs->GetKey(i), &result);
1455
+ // If the property is already there we skip it
1456
+ if (result.IsValid()) continue;
1457
+ HandleScope inner;
1458
+ Handle<DescriptorArray> inst_descs =
1459
+ Handle<DescriptorArray>(to->map()->instance_descriptors());
1460
+ Handle<String> key = Handle<String>(descs->GetKey(i));
1461
+ Handle<Object> entry = Handle<Object>(descs->GetCallbacksObject(i));
1462
+ inst_descs = Factory::CopyAppendProxyDescriptor(inst_descs,
1463
+ key,
1464
+ entry,
1465
+ details.attributes());
1466
+ to->map()->set_instance_descriptors(*inst_descs);
1467
+ break;
1468
+ }
1469
+ case MAP_TRANSITION:
1470
+ case CONSTANT_TRANSITION:
1471
+ case NULL_DESCRIPTOR:
1472
+ // Ignore non-properties.
1473
+ break;
1474
+ case NORMAL:
1475
+ // Do not occur since the from object has fast properties.
1476
+ case INTERCEPTOR:
1477
+ // No element in instance descriptors have interceptor type.
1478
+ UNREACHABLE();
1479
+ break;
1480
+ }
1481
+ }
1482
+ } else {
1483
+ Handle<StringDictionary> properties =
1484
+ Handle<StringDictionary>(from->property_dictionary());
1485
+ int capacity = properties->Capacity();
1486
+ for (int i = 0; i < capacity; i++) {
1487
+ Object* raw_key(properties->KeyAt(i));
1488
+ if (properties->IsKey(raw_key)) {
1489
+ ASSERT(raw_key->IsString());
1490
+ // If the property is already there we skip it.
1491
+ LookupResult result;
1492
+ to->LocalLookup(String::cast(raw_key), &result);
1493
+ if (result.IsValid()) continue;
1494
+ // Set the property.
1495
+ Handle<String> key = Handle<String>(String::cast(raw_key));
1496
+ Handle<Object> value = Handle<Object>(properties->ValueAt(i));
1497
+ if (value->IsJSGlobalPropertyCell()) {
1498
+ value = Handle<Object>(JSGlobalPropertyCell::cast(*value)->value());
1499
+ }
1500
+ PropertyDetails details = properties->DetailsAt(i);
1501
+ SetProperty(to, key, value, details.attributes());
1502
+ }
1503
+ }
1504
+ }
1505
+ }
1506
+
1507
+
1508
+ void Genesis::TransferIndexedProperties(Handle<JSObject> from,
1509
+ Handle<JSObject> to) {
1510
+ // Cloning the elements array is sufficient.
1511
+ Handle<FixedArray> from_elements =
1512
+ Handle<FixedArray>(FixedArray::cast(from->elements()));
1513
+ Handle<FixedArray> to_elements = Factory::CopyFixedArray(from_elements);
1514
+ to->set_elements(*to_elements);
1515
+ }
1516
+
1517
+
1518
+ void Genesis::TransferObject(Handle<JSObject> from, Handle<JSObject> to) {
1519
+ HandleScope outer;
1520
+
1521
+ ASSERT(!from->IsJSArray());
1522
+ ASSERT(!to->IsJSArray());
1523
+
1524
+ TransferNamedProperties(from, to);
1525
+ TransferIndexedProperties(from, to);
1526
+
1527
+ // Transfer the prototype (new map is needed).
1528
+ Handle<Map> old_to_map = Handle<Map>(to->map());
1529
+ Handle<Map> new_to_map = Factory::CopyMapDropTransitions(old_to_map);
1530
+ new_to_map->set_prototype(from->map()->prototype());
1531
+ to->set_map(*new_to_map);
1532
+ }
1533
+
1534
+
1535
+ void Genesis::MakeFunctionInstancePrototypeWritable() {
1536
+ // Make a new function map so all future functions
1537
+ // will have settable and enumerable prototype properties.
1538
+ HandleScope scope;
1539
+
1540
+ Handle<DescriptorArray> function_map_descriptors =
1541
+ ComputeFunctionInstanceDescriptor(false);
1542
+ Handle<Map> fm = Factory::CopyMapDropDescriptors(Top::function_map());
1543
+ fm->set_instance_descriptors(*function_map_descriptors);
1544
+ Top::context()->global_context()->set_function_map(*fm);
1545
+ }
1546
+
1547
+
1548
+ void Genesis::AddSpecialFunction(Handle<JSObject> prototype,
1549
+ const char* name,
1550
+ Handle<Code> code) {
1551
+ Handle<String> key = Factory::LookupAsciiSymbol(name);
1552
+ Handle<Object> value = Handle<Object>(prototype->GetProperty(*key));
1553
+ if (value->IsJSFunction()) {
1554
+ Handle<JSFunction> optimized = Factory::NewFunction(key,
1555
+ JS_OBJECT_TYPE,
1556
+ JSObject::kHeaderSize,
1557
+ code,
1558
+ false);
1559
+ optimized->shared()->DontAdaptArguments();
1560
+ int len = global_context()->special_function_table()->length();
1561
+ Handle<FixedArray> new_array = Factory::NewFixedArray(len + 3);
1562
+ for (int index = 0; index < len; index++) {
1563
+ new_array->set(index,
1564
+ global_context()->special_function_table()->get(index));
1565
+ }
1566
+ new_array->set(len+0, *prototype);
1567
+ new_array->set(len+1, *value);
1568
+ new_array->set(len+2, *optimized);
1569
+ global_context()->set_special_function_table(*new_array);
1570
+ }
1571
+ }
1572
+
1573
+
1574
+ void Genesis::BuildSpecialFunctionTable() {
1575
+ HandleScope scope;
1576
+ Handle<JSObject> global = Handle<JSObject>(global_context()->global());
1577
+ // Add special versions for Array.prototype.pop and push.
1578
+ Handle<JSFunction> function =
1579
+ Handle<JSFunction>(
1580
+ JSFunction::cast(global->GetProperty(Heap::Array_symbol())));
1581
+ Handle<JSObject> visible_prototype =
1582
+ Handle<JSObject>(JSObject::cast(function->prototype()));
1583
+ // Remember to put push and pop on the hidden prototype if it's there.
1584
+ Handle<JSObject> push_and_pop_prototype;
1585
+ Handle<Object> superproto(visible_prototype->GetPrototype());
1586
+ if (superproto->IsJSObject() &&
1587
+ JSObject::cast(*superproto)->map()->is_hidden_prototype()) {
1588
+ push_and_pop_prototype = Handle<JSObject>::cast(superproto);
1589
+ } else {
1590
+ push_and_pop_prototype = visible_prototype;
1591
+ }
1592
+ AddSpecialFunction(push_and_pop_prototype, "pop",
1593
+ Handle<Code>(Builtins::builtin(Builtins::ArrayPop)));
1594
+ AddSpecialFunction(push_and_pop_prototype, "push",
1595
+ Handle<Code>(Builtins::builtin(Builtins::ArrayPush)));
1596
+ }
1597
+
1598
+
1599
+ Genesis::Genesis(Handle<Object> global_object,
1600
+ v8::Handle<v8::ObjectTemplate> global_template,
1601
+ v8::ExtensionConfiguration* extensions) {
1602
+ // Link this genesis object into the stacked genesis chain. This
1603
+ // must be done before any early exits because the destructor
1604
+ // will always do unlinking.
1605
+ previous_ = current_;
1606
+ current_ = this;
1607
+ result_ = Handle<Context>::null();
1608
+
1609
+ // If V8 isn't running and cannot be initialized, just return.
1610
+ if (!V8::IsRunning() && !V8::Initialize(NULL)) return;
1611
+
1612
+ // Before creating the roots we must save the context and restore it
1613
+ // on all function exits.
1614
+ HandleScope scope;
1615
+ SaveContext context;
1616
+
1617
+ CreateRoots(global_template, global_object);
1618
+
1619
+ if (!InstallNatives()) return;
1620
+
1621
+ MakeFunctionInstancePrototypeWritable();
1622
+ BuildSpecialFunctionTable();
1623
+
1624
+ if (!ConfigureGlobalObjects(global_template)) return;
1625
+
1626
+ if (!InstallExtensions(extensions)) return;
1627
+
1628
+ if (!InstallSpecialObjects()) return;
1629
+
1630
+ result_ = global_context_;
1631
+ }
1632
+
1633
+
1634
+ // Support for thread preemption.
1635
+
1636
+ // Reserve space for statics needing saving and restoring.
1637
+ int Bootstrapper::ArchiveSpacePerThread() {
1638
+ return Genesis::ArchiveSpacePerThread();
1639
+ }
1640
+
1641
+
1642
+ // Archive statics that are thread local.
1643
+ char* Bootstrapper::ArchiveState(char* to) {
1644
+ return Genesis::ArchiveState(to);
1645
+ }
1646
+
1647
+
1648
+ // Restore statics that are thread local.
1649
+ char* Bootstrapper::RestoreState(char* from) {
1650
+ return Genesis::RestoreState(from);
1651
+ }
1652
+
1653
+
1654
+ // Called when the top-level V8 mutex is destroyed.
1655
+ void Bootstrapper::FreeThreadResources() {
1656
+ ASSERT(Genesis::current() == NULL);
1657
+ }
1658
+
1659
+
1660
+ // Reserve space for statics needing saving and restoring.
1661
+ int Genesis::ArchiveSpacePerThread() {
1662
+ return sizeof(current_);
1663
+ }
1664
+
1665
+
1666
+ // Archive statics that are thread local.
1667
+ char* Genesis::ArchiveState(char* to) {
1668
+ *reinterpret_cast<Genesis**>(to) = current_;
1669
+ current_ = NULL;
1670
+ return to + sizeof(current_);
1671
+ }
1672
+
1673
+
1674
+ // Restore statics that are thread local.
1675
+ char* Genesis::RestoreState(char* from) {
1676
+ current_ = *reinterpret_cast<Genesis**>(from);
1677
+ return from + sizeof(current_);
1678
+ }
1679
+
1680
+ } } // namespace v8::internal