therubyracer-heroku 0.8.1.pre2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1966) hide show
  1. data/.gitignore +13 -0
  2. data/.gitmodules +3 -0
  3. data/.rspec +1 -0
  4. data/Changelog.md +165 -0
  5. data/Gemfile +1 -0
  6. data/README.md +155 -0
  7. data/Rakefile +34 -0
  8. data/bin/therubyracer +13 -0
  9. data/bin/v8 +8 -0
  10. data/ext/v8/extconf.rb +25 -0
  11. data/ext/v8/rr.cpp +175 -0
  12. data/ext/v8/rr.h +36 -0
  13. data/ext/v8/upstream/2.3.3/.gitignore +26 -0
  14. data/ext/v8/upstream/2.3.3/AUTHORS +31 -0
  15. data/ext/v8/upstream/2.3.3/ChangeLog +1916 -0
  16. data/ext/v8/upstream/2.3.3/LICENSE +55 -0
  17. data/ext/v8/upstream/2.3.3/SConstruct +1154 -0
  18. data/ext/v8/upstream/2.3.3/include/v8-debug.h +381 -0
  19. data/ext/v8/upstream/2.3.3/include/v8-profiler.h +353 -0
  20. data/ext/v8/upstream/2.3.3/include/v8.h +3616 -0
  21. data/ext/v8/upstream/2.3.3/src/SConscript +330 -0
  22. data/ext/v8/upstream/2.3.3/src/accessors.cc +661 -0
  23. data/ext/v8/upstream/2.3.3/src/accessors.h +114 -0
  24. data/ext/v8/upstream/2.3.3/src/allocation.cc +198 -0
  25. data/ext/v8/upstream/2.3.3/src/allocation.h +169 -0
  26. data/ext/v8/upstream/2.3.3/src/api.cc +4795 -0
  27. data/ext/v8/upstream/2.3.3/src/api.h +485 -0
  28. data/ext/v8/upstream/2.3.3/src/apinatives.js +110 -0
  29. data/ext/v8/upstream/2.3.3/src/apiutils.h +69 -0
  30. data/ext/v8/upstream/2.3.3/src/arguments.h +96 -0
  31. data/ext/v8/upstream/2.3.3/src/arm/assembler-arm-inl.h +305 -0
  32. data/ext/v8/upstream/2.3.3/src/arm/assembler-arm.cc +2580 -0
  33. data/ext/v8/upstream/2.3.3/src/arm/assembler-arm.h +1275 -0
  34. data/ext/v8/upstream/2.3.3/src/arm/builtins-arm.cc +1320 -0
  35. data/ext/v8/upstream/2.3.3/src/arm/codegen-arm-inl.h +48 -0
  36. data/ext/v8/upstream/2.3.3/src/arm/codegen-arm.cc +11398 -0
  37. data/ext/v8/upstream/2.3.3/src/arm/codegen-arm.h +1102 -0
  38. data/ext/v8/upstream/2.3.3/src/arm/constants-arm.cc +154 -0
  39. data/ext/v8/upstream/2.3.3/src/arm/constants-arm.h +388 -0
  40. data/ext/v8/upstream/2.3.3/src/arm/cpu-arm.cc +142 -0
  41. data/ext/v8/upstream/2.3.3/src/arm/debug-arm.cc +309 -0
  42. data/ext/v8/upstream/2.3.3/src/arm/disasm-arm.cc +1459 -0
  43. data/ext/v8/upstream/2.3.3/src/arm/fast-codegen-arm.cc +241 -0
  44. data/ext/v8/upstream/2.3.3/src/arm/frames-arm.cc +123 -0
  45. data/ext/v8/upstream/2.3.3/src/arm/frames-arm.h +162 -0
  46. data/ext/v8/upstream/2.3.3/src/arm/full-codegen-arm.cc +3178 -0
  47. data/ext/v8/upstream/2.3.3/src/arm/ic-arm.cc +2258 -0
  48. data/ext/v8/upstream/2.3.3/src/arm/jump-target-arm.cc +164 -0
  49. data/ext/v8/upstream/2.3.3/src/arm/macro-assembler-arm.cc +1892 -0
  50. data/ext/v8/upstream/2.3.3/src/arm/macro-assembler-arm.h +727 -0
  51. data/ext/v8/upstream/2.3.3/src/arm/regexp-macro-assembler-arm.cc +1261 -0
  52. data/ext/v8/upstream/2.3.3/src/arm/regexp-macro-assembler-arm.h +266 -0
  53. data/ext/v8/upstream/2.3.3/src/arm/register-allocator-arm-inl.h +100 -0
  54. data/ext/v8/upstream/2.3.3/src/arm/register-allocator-arm.cc +63 -0
  55. data/ext/v8/upstream/2.3.3/src/arm/register-allocator-arm.h +44 -0
  56. data/ext/v8/upstream/2.3.3/src/arm/simulator-arm.cc +2822 -0
  57. data/ext/v8/upstream/2.3.3/src/arm/simulator-arm.h +361 -0
  58. data/ext/v8/upstream/2.3.3/src/arm/stub-cache-arm.cc +2387 -0
  59. data/ext/v8/upstream/2.3.3/src/arm/virtual-frame-arm-inl.h +59 -0
  60. data/ext/v8/upstream/2.3.3/src/arm/virtual-frame-arm.cc +834 -0
  61. data/ext/v8/upstream/2.3.3/src/arm/virtual-frame-arm.h +519 -0
  62. data/ext/v8/upstream/2.3.3/src/array.js +1127 -0
  63. data/ext/v8/upstream/2.3.3/src/assembler.cc +801 -0
  64. data/ext/v8/upstream/2.3.3/src/assembler.h +573 -0
  65. data/ext/v8/upstream/2.3.3/src/ast-inl.h +81 -0
  66. data/ext/v8/upstream/2.3.3/src/ast.cc +1152 -0
  67. data/ext/v8/upstream/2.3.3/src/ast.h +2106 -0
  68. data/ext/v8/upstream/2.3.3/src/bootstrapper.cc +1819 -0
  69. data/ext/v8/upstream/2.3.3/src/bootstrapper.h +118 -0
  70. data/ext/v8/upstream/2.3.3/src/builtins.cc +1529 -0
  71. data/ext/v8/upstream/2.3.3/src/builtins.h +263 -0
  72. data/ext/v8/upstream/2.3.3/src/bytecodes-irregexp.h +104 -0
  73. data/ext/v8/upstream/2.3.3/src/cached-powers.h +119 -0
  74. data/ext/v8/upstream/2.3.3/src/char-predicates-inl.h +86 -0
  75. data/ext/v8/upstream/2.3.3/src/char-predicates.h +65 -0
  76. data/ext/v8/upstream/2.3.3/src/checks.cc +100 -0
  77. data/ext/v8/upstream/2.3.3/src/checks.h +310 -0
  78. data/ext/v8/upstream/2.3.3/src/circular-queue-inl.h +53 -0
  79. data/ext/v8/upstream/2.3.3/src/circular-queue.cc +121 -0
  80. data/ext/v8/upstream/2.3.3/src/circular-queue.h +103 -0
  81. data/ext/v8/upstream/2.3.3/src/code-stubs.cc +177 -0
  82. data/ext/v8/upstream/2.3.3/src/code-stubs.h +177 -0
  83. data/ext/v8/upstream/2.3.3/src/code.h +68 -0
  84. data/ext/v8/upstream/2.3.3/src/codegen-inl.h +60 -0
  85. data/ext/v8/upstream/2.3.3/src/codegen.cc +516 -0
  86. data/ext/v8/upstream/2.3.3/src/codegen.h +897 -0
  87. data/ext/v8/upstream/2.3.3/src/compilation-cache.cc +562 -0
  88. data/ext/v8/upstream/2.3.3/src/compilation-cache.h +102 -0
  89. data/ext/v8/upstream/2.3.3/src/compiler.cc +654 -0
  90. data/ext/v8/upstream/2.3.3/src/compiler.h +299 -0
  91. data/ext/v8/upstream/2.3.3/src/contexts.cc +256 -0
  92. data/ext/v8/upstream/2.3.3/src/contexts.h +342 -0
  93. data/ext/v8/upstream/2.3.3/src/conversions-inl.h +110 -0
  94. data/ext/v8/upstream/2.3.3/src/conversions.cc +1119 -0
  95. data/ext/v8/upstream/2.3.3/src/conversions.h +123 -0
  96. data/ext/v8/upstream/2.3.3/src/counters.cc +78 -0
  97. data/ext/v8/upstream/2.3.3/src/counters.h +239 -0
  98. data/ext/v8/upstream/2.3.3/src/cpu-profiler-inl.h +100 -0
  99. data/ext/v8/upstream/2.3.3/src/cpu-profiler.cc +538 -0
  100. data/ext/v8/upstream/2.3.3/src/cpu-profiler.h +285 -0
  101. data/ext/v8/upstream/2.3.3/src/cpu.h +65 -0
  102. data/ext/v8/upstream/2.3.3/src/d8-debug.cc +356 -0
  103. data/ext/v8/upstream/2.3.3/src/d8-debug.h +155 -0
  104. data/ext/v8/upstream/2.3.3/src/d8-posix.cc +693 -0
  105. data/ext/v8/upstream/2.3.3/src/d8-readline.cc +128 -0
  106. data/ext/v8/upstream/2.3.3/src/d8-windows.cc +42 -0
  107. data/ext/v8/upstream/2.3.3/src/d8.cc +783 -0
  108. data/ext/v8/upstream/2.3.3/src/d8.h +227 -0
  109. data/ext/v8/upstream/2.3.3/src/d8.js +1683 -0
  110. data/ext/v8/upstream/2.3.3/src/data-flow.cc +758 -0
  111. data/ext/v8/upstream/2.3.3/src/data-flow.h +278 -0
  112. data/ext/v8/upstream/2.3.3/src/date.js +1059 -0
  113. data/ext/v8/upstream/2.3.3/src/dateparser-inl.h +123 -0
  114. data/ext/v8/upstream/2.3.3/src/dateparser.cc +178 -0
  115. data/ext/v8/upstream/2.3.3/src/dateparser.h +244 -0
  116. data/ext/v8/upstream/2.3.3/src/debug-agent.cc +427 -0
  117. data/ext/v8/upstream/2.3.3/src/debug-agent.h +129 -0
  118. data/ext/v8/upstream/2.3.3/src/debug-debugger.js +2227 -0
  119. data/ext/v8/upstream/2.3.3/src/debug.cc +3005 -0
  120. data/ext/v8/upstream/2.3.3/src/debug.h +993 -0
  121. data/ext/v8/upstream/2.3.3/src/disasm.h +77 -0
  122. data/ext/v8/upstream/2.3.3/src/disassembler.cc +312 -0
  123. data/ext/v8/upstream/2.3.3/src/disassembler.h +56 -0
  124. data/ext/v8/upstream/2.3.3/src/diy-fp.cc +58 -0
  125. data/ext/v8/upstream/2.3.3/src/diy-fp.h +117 -0
  126. data/ext/v8/upstream/2.3.3/src/double.h +169 -0
  127. data/ext/v8/upstream/2.3.3/src/dtoa-config.c +92 -0
  128. data/ext/v8/upstream/2.3.3/src/dtoa.cc +77 -0
  129. data/ext/v8/upstream/2.3.3/src/dtoa.h +81 -0
  130. data/ext/v8/upstream/2.3.3/src/execution.cc +809 -0
  131. data/ext/v8/upstream/2.3.3/src/execution.h +336 -0
  132. data/ext/v8/upstream/2.3.3/src/factory.cc +1003 -0
  133. data/ext/v8/upstream/2.3.3/src/factory.h +410 -0
  134. data/ext/v8/upstream/2.3.3/src/fast-codegen.cc +746 -0
  135. data/ext/v8/upstream/2.3.3/src/fast-codegen.h +161 -0
  136. data/ext/v8/upstream/2.3.3/src/fast-dtoa.cc +505 -0
  137. data/ext/v8/upstream/2.3.3/src/fast-dtoa.h +58 -0
  138. data/ext/v8/upstream/2.3.3/src/fixed-dtoa.cc +405 -0
  139. data/ext/v8/upstream/2.3.3/src/fixed-dtoa.h +55 -0
  140. data/ext/v8/upstream/2.3.3/src/flag-definitions.h +455 -0
  141. data/ext/v8/upstream/2.3.3/src/flags.cc +551 -0
  142. data/ext/v8/upstream/2.3.3/src/flags.h +81 -0
  143. data/ext/v8/upstream/2.3.3/src/flow-graph.cc +763 -0
  144. data/ext/v8/upstream/2.3.3/src/flow-graph.h +180 -0
  145. data/ext/v8/upstream/2.3.3/src/frame-element.cc +42 -0
  146. data/ext/v8/upstream/2.3.3/src/frame-element.h +273 -0
  147. data/ext/v8/upstream/2.3.3/src/frames-inl.h +217 -0
  148. data/ext/v8/upstream/2.3.3/src/frames.cc +826 -0
  149. data/ext/v8/upstream/2.3.3/src/frames.h +682 -0
  150. data/ext/v8/upstream/2.3.3/src/full-codegen.cc +1443 -0
  151. data/ext/v8/upstream/2.3.3/src/full-codegen.h +548 -0
  152. data/ext/v8/upstream/2.3.3/src/func-name-inferrer.cc +76 -0
  153. data/ext/v8/upstream/2.3.3/src/func-name-inferrer.h +135 -0
  154. data/ext/v8/upstream/2.3.3/src/global-handles.cc +520 -0
  155. data/ext/v8/upstream/2.3.3/src/global-handles.h +180 -0
  156. data/ext/v8/upstream/2.3.3/src/globals.h +669 -0
  157. data/ext/v8/upstream/2.3.3/src/handles-inl.h +76 -0
  158. data/ext/v8/upstream/2.3.3/src/handles.cc +825 -0
  159. data/ext/v8/upstream/2.3.3/src/handles.h +393 -0
  160. data/ext/v8/upstream/2.3.3/src/hashmap.cc +226 -0
  161. data/ext/v8/upstream/2.3.3/src/hashmap.h +120 -0
  162. data/ext/v8/upstream/2.3.3/src/heap-inl.h +493 -0
  163. data/ext/v8/upstream/2.3.3/src/heap-profiler.cc +779 -0
  164. data/ext/v8/upstream/2.3.3/src/heap-profiler.h +323 -0
  165. data/ext/v8/upstream/2.3.3/src/heap.cc +4994 -0
  166. data/ext/v8/upstream/2.3.3/src/heap.h +1984 -0
  167. data/ext/v8/upstream/2.3.3/src/ia32/assembler-ia32-inl.h +360 -0
  168. data/ext/v8/upstream/2.3.3/src/ia32/assembler-ia32.cc +2600 -0
  169. data/ext/v8/upstream/2.3.3/src/ia32/assembler-ia32.h +969 -0
  170. data/ext/v8/upstream/2.3.3/src/ia32/builtins-ia32.cc +1261 -0
  171. data/ext/v8/upstream/2.3.3/src/ia32/codegen-ia32-inl.h +46 -0
  172. data/ext/v8/upstream/2.3.3/src/ia32/codegen-ia32.cc +13968 -0
  173. data/ext/v8/upstream/2.3.3/src/ia32/codegen-ia32.h +1097 -0
  174. data/ext/v8/upstream/2.3.3/src/ia32/cpu-ia32.cc +83 -0
  175. data/ext/v8/upstream/2.3.3/src/ia32/debug-ia32.cc +309 -0
  176. data/ext/v8/upstream/2.3.3/src/ia32/disasm-ia32.cc +1471 -0
  177. data/ext/v8/upstream/2.3.3/src/ia32/fast-codegen-ia32.cc +954 -0
  178. data/ext/v8/upstream/2.3.3/src/ia32/fast-codegen-ia32.h +155 -0
  179. data/ext/v8/upstream/2.3.3/src/ia32/frames-ia32.cc +115 -0
  180. data/ext/v8/upstream/2.3.3/src/ia32/frames-ia32.h +135 -0
  181. data/ext/v8/upstream/2.3.3/src/ia32/full-codegen-ia32.cc +3281 -0
  182. data/ext/v8/upstream/2.3.3/src/ia32/ic-ia32.cc +1966 -0
  183. data/ext/v8/upstream/2.3.3/src/ia32/jump-target-ia32.cc +437 -0
  184. data/ext/v8/upstream/2.3.3/src/ia32/macro-assembler-ia32.cc +1610 -0
  185. data/ext/v8/upstream/2.3.3/src/ia32/macro-assembler-ia32.h +610 -0
  186. data/ext/v8/upstream/2.3.3/src/ia32/regexp-macro-assembler-ia32.cc +1247 -0
  187. data/ext/v8/upstream/2.3.3/src/ia32/regexp-macro-assembler-ia32.h +214 -0
  188. data/ext/v8/upstream/2.3.3/src/ia32/register-allocator-ia32-inl.h +82 -0
  189. data/ext/v8/upstream/2.3.3/src/ia32/register-allocator-ia32.cc +157 -0
  190. data/ext/v8/upstream/2.3.3/src/ia32/register-allocator-ia32.h +43 -0
  191. data/ext/v8/upstream/2.3.3/src/ia32/simulator-ia32.cc +30 -0
  192. data/ext/v8/upstream/2.3.3/src/ia32/simulator-ia32.h +62 -0
  193. data/ext/v8/upstream/2.3.3/src/ia32/stub-cache-ia32.cc +2750 -0
  194. data/ext/v8/upstream/2.3.3/src/ia32/virtual-frame-ia32.cc +1334 -0
  195. data/ext/v8/upstream/2.3.3/src/ia32/virtual-frame-ia32.h +627 -0
  196. data/ext/v8/upstream/2.3.3/src/ic-inl.h +120 -0
  197. data/ext/v8/upstream/2.3.3/src/ic.cc +1827 -0
  198. data/ext/v8/upstream/2.3.3/src/ic.h +515 -0
  199. data/ext/v8/upstream/2.3.3/src/interpreter-irregexp.cc +646 -0
  200. data/ext/v8/upstream/2.3.3/src/interpreter-irregexp.h +48 -0
  201. data/ext/v8/upstream/2.3.3/src/json.js +268 -0
  202. data/ext/v8/upstream/2.3.3/src/jsregexp.cc +5283 -0
  203. data/ext/v8/upstream/2.3.3/src/jsregexp.h +1463 -0
  204. data/ext/v8/upstream/2.3.3/src/jump-target-heavy-inl.h +51 -0
  205. data/ext/v8/upstream/2.3.3/src/jump-target-heavy.cc +429 -0
  206. data/ext/v8/upstream/2.3.3/src/jump-target-heavy.h +244 -0
  207. data/ext/v8/upstream/2.3.3/src/jump-target-inl.h +48 -0
  208. data/ext/v8/upstream/2.3.3/src/jump-target-light-inl.h +56 -0
  209. data/ext/v8/upstream/2.3.3/src/jump-target-light.cc +110 -0
  210. data/ext/v8/upstream/2.3.3/src/jump-target-light.h +192 -0
  211. data/ext/v8/upstream/2.3.3/src/jump-target.cc +91 -0
  212. data/ext/v8/upstream/2.3.3/src/jump-target.h +90 -0
  213. data/ext/v8/upstream/2.3.3/src/list-inl.h +166 -0
  214. data/ext/v8/upstream/2.3.3/src/list.h +159 -0
  215. data/ext/v8/upstream/2.3.3/src/liveedit-debugger.js +1057 -0
  216. data/ext/v8/upstream/2.3.3/src/liveedit.cc +1480 -0
  217. data/ext/v8/upstream/2.3.3/src/liveedit.h +170 -0
  218. data/ext/v8/upstream/2.3.3/src/log-inl.h +59 -0
  219. data/ext/v8/upstream/2.3.3/src/log-utils.cc +497 -0
  220. data/ext/v8/upstream/2.3.3/src/log-utils.h +289 -0
  221. data/ext/v8/upstream/2.3.3/src/log.cc +1561 -0
  222. data/ext/v8/upstream/2.3.3/src/log.h +384 -0
  223. data/ext/v8/upstream/2.3.3/src/macro-assembler.h +86 -0
  224. data/ext/v8/upstream/2.3.3/src/macros.py +177 -0
  225. data/ext/v8/upstream/2.3.3/src/mark-compact.cc +2330 -0
  226. data/ext/v8/upstream/2.3.3/src/mark-compact.h +451 -0
  227. data/ext/v8/upstream/2.3.3/src/math.js +264 -0
  228. data/ext/v8/upstream/2.3.3/src/memory.h +74 -0
  229. data/ext/v8/upstream/2.3.3/src/messages.cc +183 -0
  230. data/ext/v8/upstream/2.3.3/src/messages.h +113 -0
  231. data/ext/v8/upstream/2.3.3/src/messages.js +982 -0
  232. data/ext/v8/upstream/2.3.3/src/mips/assembler-mips-inl.h +215 -0
  233. data/ext/v8/upstream/2.3.3/src/mips/assembler-mips.cc +1219 -0
  234. data/ext/v8/upstream/2.3.3/src/mips/assembler-mips.h +668 -0
  235. data/ext/v8/upstream/2.3.3/src/mips/builtins-mips.cc +205 -0
  236. data/ext/v8/upstream/2.3.3/src/mips/codegen-mips-inl.h +70 -0
  237. data/ext/v8/upstream/2.3.3/src/mips/codegen-mips.cc +1437 -0
  238. data/ext/v8/upstream/2.3.3/src/mips/codegen-mips.h +434 -0
  239. data/ext/v8/upstream/2.3.3/src/mips/constants-mips.cc +328 -0
  240. data/ext/v8/upstream/2.3.3/src/mips/constants-mips.h +525 -0
  241. data/ext/v8/upstream/2.3.3/src/mips/cpu-mips.cc +73 -0
  242. data/ext/v8/upstream/2.3.3/src/mips/debug-mips.cc +131 -0
  243. data/ext/v8/upstream/2.3.3/src/mips/disasm-mips.cc +787 -0
  244. data/ext/v8/upstream/2.3.3/src/mips/fast-codegen-mips.cc +77 -0
  245. data/ext/v8/upstream/2.3.3/src/mips/frames-mips.cc +102 -0
  246. data/ext/v8/upstream/2.3.3/src/mips/frames-mips.h +164 -0
  247. data/ext/v8/upstream/2.3.3/src/mips/full-codegen-mips.cc +277 -0
  248. data/ext/v8/upstream/2.3.3/src/mips/ic-mips.cc +220 -0
  249. data/ext/v8/upstream/2.3.3/src/mips/jump-target-mips.cc +175 -0
  250. data/ext/v8/upstream/2.3.3/src/mips/macro-assembler-mips.cc +1326 -0
  251. data/ext/v8/upstream/2.3.3/src/mips/macro-assembler-mips.h +461 -0
  252. data/ext/v8/upstream/2.3.3/src/mips/register-allocator-mips-inl.h +137 -0
  253. data/ext/v8/upstream/2.3.3/src/mips/register-allocator-mips.cc +63 -0
  254. data/ext/v8/upstream/2.3.3/src/mips/register-allocator-mips.h +46 -0
  255. data/ext/v8/upstream/2.3.3/src/mips/simulator-mips.cc +1651 -0
  256. data/ext/v8/upstream/2.3.3/src/mips/simulator-mips.h +311 -0
  257. data/ext/v8/upstream/2.3.3/src/mips/stub-cache-mips.cc +403 -0
  258. data/ext/v8/upstream/2.3.3/src/mips/virtual-frame-mips.cc +319 -0
  259. data/ext/v8/upstream/2.3.3/src/mips/virtual-frame-mips.h +548 -0
  260. data/ext/v8/upstream/2.3.3/src/mirror-debugger.js +2380 -0
  261. data/ext/v8/upstream/2.3.3/src/mksnapshot.cc +256 -0
  262. data/ext/v8/upstream/2.3.3/src/natives.h +63 -0
  263. data/ext/v8/upstream/2.3.3/src/objects-debug.cc +1366 -0
  264. data/ext/v8/upstream/2.3.3/src/objects-inl.h +3333 -0
  265. data/ext/v8/upstream/2.3.3/src/objects.cc +8820 -0
  266. data/ext/v8/upstream/2.3.3/src/objects.h +5373 -0
  267. data/ext/v8/upstream/2.3.3/src/oprofile-agent.cc +108 -0
  268. data/ext/v8/upstream/2.3.3/src/oprofile-agent.h +77 -0
  269. data/ext/v8/upstream/2.3.3/src/parser.cc +5207 -0
  270. data/ext/v8/upstream/2.3.3/src/parser.h +197 -0
  271. data/ext/v8/upstream/2.3.3/src/platform-freebsd.cc +667 -0
  272. data/ext/v8/upstream/2.3.3/src/platform-linux.cc +862 -0
  273. data/ext/v8/upstream/2.3.3/src/platform-macos.cc +665 -0
  274. data/ext/v8/upstream/2.3.3/src/platform-nullos.cc +454 -0
  275. data/ext/v8/upstream/2.3.3/src/platform-openbsd.cc +622 -0
  276. data/ext/v8/upstream/2.3.3/src/platform-posix.cc +362 -0
  277. data/ext/v8/upstream/2.3.3/src/platform-solaris.cc +653 -0
  278. data/ext/v8/upstream/2.3.3/src/platform-win32.cc +1911 -0
  279. data/ext/v8/upstream/2.3.3/src/platform.h +577 -0
  280. data/ext/v8/upstream/2.3.3/src/powers-ten.h +2461 -0
  281. data/ext/v8/upstream/2.3.3/src/prettyprinter.cc +1531 -0
  282. data/ext/v8/upstream/2.3.3/src/prettyprinter.h +221 -0
  283. data/ext/v8/upstream/2.3.3/src/profile-generator-inl.h +148 -0
  284. data/ext/v8/upstream/2.3.3/src/profile-generator.cc +1830 -0
  285. data/ext/v8/upstream/2.3.3/src/profile-generator.h +853 -0
  286. data/ext/v8/upstream/2.3.3/src/property.cc +96 -0
  287. data/ext/v8/upstream/2.3.3/src/property.h +315 -0
  288. data/ext/v8/upstream/2.3.3/src/regexp-macro-assembler-irregexp-inl.h +78 -0
  289. data/ext/v8/upstream/2.3.3/src/regexp-macro-assembler-irregexp.cc +464 -0
  290. data/ext/v8/upstream/2.3.3/src/regexp-macro-assembler-irregexp.h +141 -0
  291. data/ext/v8/upstream/2.3.3/src/regexp-macro-assembler-tracer.cc +356 -0
  292. data/ext/v8/upstream/2.3.3/src/regexp-macro-assembler-tracer.h +103 -0
  293. data/ext/v8/upstream/2.3.3/src/regexp-macro-assembler.cc +261 -0
  294. data/ext/v8/upstream/2.3.3/src/regexp-macro-assembler.h +228 -0
  295. data/ext/v8/upstream/2.3.3/src/regexp-stack.cc +103 -0
  296. data/ext/v8/upstream/2.3.3/src/regexp-stack.h +123 -0
  297. data/ext/v8/upstream/2.3.3/src/regexp.js +549 -0
  298. data/ext/v8/upstream/2.3.3/src/register-allocator-inl.h +141 -0
  299. data/ext/v8/upstream/2.3.3/src/register-allocator.cc +104 -0
  300. data/ext/v8/upstream/2.3.3/src/register-allocator.h +320 -0
  301. data/ext/v8/upstream/2.3.3/src/rewriter.cc +1038 -0
  302. data/ext/v8/upstream/2.3.3/src/rewriter.h +54 -0
  303. data/ext/v8/upstream/2.3.3/src/runtime.cc +10599 -0
  304. data/ext/v8/upstream/2.3.3/src/runtime.h +459 -0
  305. data/ext/v8/upstream/2.3.3/src/runtime.js +629 -0
  306. data/ext/v8/upstream/2.3.3/src/scanner.cc +1346 -0
  307. data/ext/v8/upstream/2.3.3/src/scanner.h +503 -0
  308. data/ext/v8/upstream/2.3.3/src/scopeinfo.cc +637 -0
  309. data/ext/v8/upstream/2.3.3/src/scopeinfo.h +233 -0
  310. data/ext/v8/upstream/2.3.3/src/scopes.cc +962 -0
  311. data/ext/v8/upstream/2.3.3/src/scopes.h +400 -0
  312. data/ext/v8/upstream/2.3.3/src/serialize.cc +1461 -0
  313. data/ext/v8/upstream/2.3.3/src/serialize.h +581 -0
  314. data/ext/v8/upstream/2.3.3/src/shell.h +55 -0
  315. data/ext/v8/upstream/2.3.3/src/simulator.h +43 -0
  316. data/ext/v8/upstream/2.3.3/src/smart-pointer.h +109 -0
  317. data/ext/v8/upstream/2.3.3/src/snapshot-common.cc +82 -0
  318. data/ext/v8/upstream/2.3.3/src/snapshot-empty.cc +50 -0
  319. data/ext/v8/upstream/2.3.3/src/snapshot.h +71 -0
  320. data/ext/v8/upstream/2.3.3/src/spaces-inl.h +483 -0
  321. data/ext/v8/upstream/2.3.3/src/spaces.cc +2901 -0
  322. data/ext/v8/upstream/2.3.3/src/spaces.h +2197 -0
  323. data/ext/v8/upstream/2.3.3/src/splay-tree-inl.h +310 -0
  324. data/ext/v8/upstream/2.3.3/src/splay-tree.h +203 -0
  325. data/ext/v8/upstream/2.3.3/src/string-stream.cc +584 -0
  326. data/ext/v8/upstream/2.3.3/src/string-stream.h +189 -0
  327. data/ext/v8/upstream/2.3.3/src/string.js +1006 -0
  328. data/ext/v8/upstream/2.3.3/src/stub-cache.cc +1379 -0
  329. data/ext/v8/upstream/2.3.3/src/stub-cache.h +756 -0
  330. data/ext/v8/upstream/2.3.3/src/third_party/dtoa/COPYING +15 -0
  331. data/ext/v8/upstream/2.3.3/src/third_party/dtoa/dtoa.c +3334 -0
  332. data/ext/v8/upstream/2.3.3/src/third_party/valgrind/valgrind.h +3925 -0
  333. data/ext/v8/upstream/2.3.3/src/token.cc +56 -0
  334. data/ext/v8/upstream/2.3.3/src/token.h +270 -0
  335. data/ext/v8/upstream/2.3.3/src/top.cc +1067 -0
  336. data/ext/v8/upstream/2.3.3/src/top.h +463 -0
  337. data/ext/v8/upstream/2.3.3/src/type-info.cc +53 -0
  338. data/ext/v8/upstream/2.3.3/src/type-info.h +244 -0
  339. data/ext/v8/upstream/2.3.3/src/unbound-queue-inl.h +95 -0
  340. data/ext/v8/upstream/2.3.3/src/unbound-queue.h +67 -0
  341. data/ext/v8/upstream/2.3.3/src/unicode-inl.h +238 -0
  342. data/ext/v8/upstream/2.3.3/src/unicode.cc +749 -0
  343. data/ext/v8/upstream/2.3.3/src/unicode.h +279 -0
  344. data/ext/v8/upstream/2.3.3/src/uri.js +415 -0
  345. data/ext/v8/upstream/2.3.3/src/utils.cc +285 -0
  346. data/ext/v8/upstream/2.3.3/src/utils.h +745 -0
  347. data/ext/v8/upstream/2.3.3/src/v8-counters.cc +55 -0
  348. data/ext/v8/upstream/2.3.3/src/v8-counters.h +250 -0
  349. data/ext/v8/upstream/2.3.3/src/v8.cc +228 -0
  350. data/ext/v8/upstream/2.3.3/src/v8.h +121 -0
  351. data/ext/v8/upstream/2.3.3/src/v8dll-main.cc +39 -0
  352. data/ext/v8/upstream/2.3.3/src/v8natives.js +1188 -0
  353. data/ext/v8/upstream/2.3.3/src/v8threads.cc +461 -0
  354. data/ext/v8/upstream/2.3.3/src/v8threads.h +159 -0
  355. data/ext/v8/upstream/2.3.3/src/variables.cc +119 -0
  356. data/ext/v8/upstream/2.3.3/src/variables.h +205 -0
  357. data/ext/v8/upstream/2.3.3/src/version.cc +88 -0
  358. data/ext/v8/upstream/2.3.3/src/version.h +64 -0
  359. data/ext/v8/upstream/2.3.3/src/virtual-frame-heavy-inl.h +192 -0
  360. data/ext/v8/upstream/2.3.3/src/virtual-frame-heavy.cc +312 -0
  361. data/ext/v8/upstream/2.3.3/src/virtual-frame-inl.h +39 -0
  362. data/ext/v8/upstream/2.3.3/src/virtual-frame-light-inl.h +170 -0
  363. data/ext/v8/upstream/2.3.3/src/virtual-frame-light.cc +52 -0
  364. data/ext/v8/upstream/2.3.3/src/virtual-frame.cc +49 -0
  365. data/ext/v8/upstream/2.3.3/src/virtual-frame.h +46 -0
  366. data/ext/v8/upstream/2.3.3/src/vm-state-inl.h +137 -0
  367. data/ext/v8/upstream/2.3.3/src/vm-state.cc +39 -0
  368. data/ext/v8/upstream/2.3.3/src/vm-state.h +77 -0
  369. data/ext/v8/upstream/2.3.3/src/x64/assembler-x64-inl.h +400 -0
  370. data/ext/v8/upstream/2.3.3/src/x64/assembler-x64.cc +2963 -0
  371. data/ext/v8/upstream/2.3.3/src/x64/assembler-x64.h +1438 -0
  372. data/ext/v8/upstream/2.3.3/src/x64/builtins-x64.cc +1296 -0
  373. data/ext/v8/upstream/2.3.3/src/x64/codegen-x64-inl.h +46 -0
  374. data/ext/v8/upstream/2.3.3/src/x64/codegen-x64.cc +12491 -0
  375. data/ext/v8/upstream/2.3.3/src/x64/codegen-x64.h +1090 -0
  376. data/ext/v8/upstream/2.3.3/src/x64/cpu-x64.cc +83 -0
  377. data/ext/v8/upstream/2.3.3/src/x64/debug-x64.cc +267 -0
  378. data/ext/v8/upstream/2.3.3/src/x64/disasm-x64.cc +1696 -0
  379. data/ext/v8/upstream/2.3.3/src/x64/fast-codegen-x64.cc +250 -0
  380. data/ext/v8/upstream/2.3.3/src/x64/frames-x64.cc +113 -0
  381. data/ext/v8/upstream/2.3.3/src/x64/frames-x64.h +125 -0
  382. data/ext/v8/upstream/2.3.3/src/x64/full-codegen-x64.cc +3270 -0
  383. data/ext/v8/upstream/2.3.3/src/x64/ic-x64.cc +1907 -0
  384. data/ext/v8/upstream/2.3.3/src/x64/jump-target-x64.cc +437 -0
  385. data/ext/v8/upstream/2.3.3/src/x64/macro-assembler-x64.cc +2793 -0
  386. data/ext/v8/upstream/2.3.3/src/x64/macro-assembler-x64.h +916 -0
  387. data/ext/v8/upstream/2.3.3/src/x64/regexp-macro-assembler-x64.cc +1374 -0
  388. data/ext/v8/upstream/2.3.3/src/x64/regexp-macro-assembler-x64.h +277 -0
  389. data/ext/v8/upstream/2.3.3/src/x64/register-allocator-x64-inl.h +87 -0
  390. data/ext/v8/upstream/2.3.3/src/x64/register-allocator-x64.cc +91 -0
  391. data/ext/v8/upstream/2.3.3/src/x64/register-allocator-x64.h +43 -0
  392. data/ext/v8/upstream/2.3.3/src/x64/simulator-x64.cc +27 -0
  393. data/ext/v8/upstream/2.3.3/src/x64/simulator-x64.h +63 -0
  394. data/ext/v8/upstream/2.3.3/src/x64/stub-cache-x64.cc +2560 -0
  395. data/ext/v8/upstream/2.3.3/src/x64/virtual-frame-x64.cc +1264 -0
  396. data/ext/v8/upstream/2.3.3/src/x64/virtual-frame-x64.h +590 -0
  397. data/ext/v8/upstream/2.3.3/src/zone-inl.h +82 -0
  398. data/ext/v8/upstream/2.3.3/src/zone.cc +194 -0
  399. data/ext/v8/upstream/2.3.3/src/zone.h +221 -0
  400. data/ext/v8/upstream/2.3.3/tools/codemap.js +270 -0
  401. data/ext/v8/upstream/2.3.3/tools/consarray.js +93 -0
  402. data/ext/v8/upstream/2.3.3/tools/csvparser.js +83 -0
  403. data/ext/v8/upstream/2.3.3/tools/gc-nvp-trace-processor.py +317 -0
  404. data/ext/v8/upstream/2.3.3/tools/generate-ten-powers.scm +286 -0
  405. data/ext/v8/upstream/2.3.3/tools/gyp/v8.gyp +749 -0
  406. data/ext/v8/upstream/2.3.3/tools/js2c.py +380 -0
  407. data/ext/v8/upstream/2.3.3/tools/jsmin.py +280 -0
  408. data/ext/v8/upstream/2.3.3/tools/linux-tick-processor +33 -0
  409. data/ext/v8/upstream/2.3.3/tools/linux-tick-processor.py +78 -0
  410. data/ext/v8/upstream/2.3.3/tools/logreader.js +338 -0
  411. data/ext/v8/upstream/2.3.3/tools/mac-nm +18 -0
  412. data/ext/v8/upstream/2.3.3/tools/mac-tick-processor +6 -0
  413. data/ext/v8/upstream/2.3.3/tools/oprofile/annotate +7 -0
  414. data/ext/v8/upstream/2.3.3/tools/oprofile/common +19 -0
  415. data/ext/v8/upstream/2.3.3/tools/oprofile/dump +7 -0
  416. data/ext/v8/upstream/2.3.3/tools/oprofile/report +7 -0
  417. data/ext/v8/upstream/2.3.3/tools/oprofile/reset +7 -0
  418. data/ext/v8/upstream/2.3.3/tools/oprofile/run +14 -0
  419. data/ext/v8/upstream/2.3.3/tools/oprofile/shutdown +7 -0
  420. data/ext/v8/upstream/2.3.3/tools/oprofile/start +7 -0
  421. data/ext/v8/upstream/2.3.3/tools/presubmit.py +299 -0
  422. data/ext/v8/upstream/2.3.3/tools/process-heap-prof.py +120 -0
  423. data/ext/v8/upstream/2.3.3/tools/profile.js +691 -0
  424. data/ext/v8/upstream/2.3.3/tools/profile_view.js +224 -0
  425. data/ext/v8/upstream/2.3.3/tools/run-valgrind.py +77 -0
  426. data/ext/v8/upstream/2.3.3/tools/splaytree.js +322 -0
  427. data/ext/v8/upstream/2.3.3/tools/splaytree.py +226 -0
  428. data/ext/v8/upstream/2.3.3/tools/stats-viewer.py +468 -0
  429. data/ext/v8/upstream/2.3.3/tools/tickprocessor-driver.js +59 -0
  430. data/ext/v8/upstream/2.3.3/tools/tickprocessor.js +862 -0
  431. data/ext/v8/upstream/2.3.3/tools/tickprocessor.py +571 -0
  432. data/ext/v8/upstream/2.3.3/tools/utils.py +88 -0
  433. data/ext/v8/upstream/2.3.3/tools/visual_studio/README.txt +71 -0
  434. data/ext/v8/upstream/2.3.3/tools/visual_studio/arm.vsprops +14 -0
  435. data/ext/v8/upstream/2.3.3/tools/visual_studio/common.vsprops +34 -0
  436. data/ext/v8/upstream/2.3.3/tools/visual_studio/d8.vcproj +193 -0
  437. data/ext/v8/upstream/2.3.3/tools/visual_studio/d8_arm.vcproj +193 -0
  438. data/ext/v8/upstream/2.3.3/tools/visual_studio/d8_x64.vcproj +209 -0
  439. data/ext/v8/upstream/2.3.3/tools/visual_studio/d8js2c.cmd +6 -0
  440. data/ext/v8/upstream/2.3.3/tools/visual_studio/debug.vsprops +17 -0
  441. data/ext/v8/upstream/2.3.3/tools/visual_studio/ia32.vsprops +17 -0
  442. data/ext/v8/upstream/2.3.3/tools/visual_studio/js2c.cmd +6 -0
  443. data/ext/v8/upstream/2.3.3/tools/visual_studio/release.vsprops +24 -0
  444. data/ext/v8/upstream/2.3.3/tools/visual_studio/v8.sln +101 -0
  445. data/ext/v8/upstream/2.3.3/tools/visual_studio/v8.vcproj +227 -0
  446. data/ext/v8/upstream/2.3.3/tools/visual_studio/v8_arm.sln +74 -0
  447. data/ext/v8/upstream/2.3.3/tools/visual_studio/v8_arm.vcproj +227 -0
  448. data/ext/v8/upstream/2.3.3/tools/visual_studio/v8_base.vcproj +1143 -0
  449. data/ext/v8/upstream/2.3.3/tools/visual_studio/v8_base_arm.vcproj +1115 -0
  450. data/ext/v8/upstream/2.3.3/tools/visual_studio/v8_base_x64.vcproj +1096 -0
  451. data/ext/v8/upstream/2.3.3/tools/visual_studio/v8_cctest.vcproj +265 -0
  452. data/ext/v8/upstream/2.3.3/tools/visual_studio/v8_cctest_arm.vcproj +249 -0
  453. data/ext/v8/upstream/2.3.3/tools/visual_studio/v8_cctest_x64.vcproj +257 -0
  454. data/ext/v8/upstream/2.3.3/tools/visual_studio/v8_mksnapshot.vcproj +145 -0
  455. data/ext/v8/upstream/2.3.3/tools/visual_studio/v8_mksnapshot_x64.vcproj +145 -0
  456. data/ext/v8/upstream/2.3.3/tools/visual_studio/v8_process_sample.vcproj +145 -0
  457. data/ext/v8/upstream/2.3.3/tools/visual_studio/v8_process_sample_arm.vcproj +145 -0
  458. data/ext/v8/upstream/2.3.3/tools/visual_studio/v8_process_sample_x64.vcproj +161 -0
  459. data/ext/v8/upstream/2.3.3/tools/visual_studio/v8_shell_sample.vcproj +145 -0
  460. data/ext/v8/upstream/2.3.3/tools/visual_studio/v8_shell_sample_arm.vcproj +145 -0
  461. data/ext/v8/upstream/2.3.3/tools/visual_studio/v8_shell_sample_x64.vcproj +161 -0
  462. data/ext/v8/upstream/2.3.3/tools/visual_studio/v8_snapshot.vcproj +142 -0
  463. data/ext/v8/upstream/2.3.3/tools/visual_studio/v8_snapshot_cc.vcproj +92 -0
  464. data/ext/v8/upstream/2.3.3/tools/visual_studio/v8_snapshot_cc_x64.vcproj +92 -0
  465. data/ext/v8/upstream/2.3.3/tools/visual_studio/v8_snapshot_x64.vcproj +142 -0
  466. data/ext/v8/upstream/2.3.3/tools/visual_studio/v8_x64.sln +101 -0
  467. data/ext/v8/upstream/2.3.3/tools/visual_studio/v8_x64.vcproj +227 -0
  468. data/ext/v8/upstream/2.3.3/tools/visual_studio/x64.vsprops +17 -0
  469. data/ext/v8/upstream/2.3.3/tools/windows-tick-processor.bat +29 -0
  470. data/ext/v8/upstream/2.3.3/tools/windows-tick-processor.py +137 -0
  471. data/ext/v8/upstream/Makefile +38 -0
  472. data/ext/v8/upstream/build/scons/CHANGES.txt +5183 -0
  473. data/ext/v8/upstream/build/scons/LICENSE.txt +20 -0
  474. data/ext/v8/upstream/build/scons/MANIFEST +202 -0
  475. data/ext/v8/upstream/build/scons/PKG-INFO +13 -0
  476. data/ext/v8/upstream/build/scons/README.txt +273 -0
  477. data/ext/v8/upstream/build/scons/RELEASE.txt +1040 -0
  478. data/ext/v8/upstream/build/scons/build/lib/SCons/Action.py +1256 -0
  479. data/ext/v8/upstream/build/scons/build/lib/SCons/Builder.py +868 -0
  480. data/ext/v8/upstream/build/scons/build/lib/SCons/CacheDir.py +217 -0
  481. data/ext/v8/upstream/build/scons/build/lib/SCons/Conftest.py +794 -0
  482. data/ext/v8/upstream/build/scons/build/lib/SCons/Debug.py +237 -0
  483. data/ext/v8/upstream/build/scons/build/lib/SCons/Defaults.py +485 -0
  484. data/ext/v8/upstream/build/scons/build/lib/SCons/Environment.py +2327 -0
  485. data/ext/v8/upstream/build/scons/build/lib/SCons/Errors.py +207 -0
  486. data/ext/v8/upstream/build/scons/build/lib/SCons/Executor.py +636 -0
  487. data/ext/v8/upstream/build/scons/build/lib/SCons/Job.py +435 -0
  488. data/ext/v8/upstream/build/scons/build/lib/SCons/Memoize.py +292 -0
  489. data/ext/v8/upstream/build/scons/build/lib/SCons/Node/Alias.py +153 -0
  490. data/ext/v8/upstream/build/scons/build/lib/SCons/Node/FS.py +3220 -0
  491. data/ext/v8/upstream/build/scons/build/lib/SCons/Node/Python.py +128 -0
  492. data/ext/v8/upstream/build/scons/build/lib/SCons/Node/__init__.py +1341 -0
  493. data/ext/v8/upstream/build/scons/build/lib/SCons/Options/BoolOption.py +50 -0
  494. data/ext/v8/upstream/build/scons/build/lib/SCons/Options/EnumOption.py +50 -0
  495. data/ext/v8/upstream/build/scons/build/lib/SCons/Options/ListOption.py +50 -0
  496. data/ext/v8/upstream/build/scons/build/lib/SCons/Options/PackageOption.py +50 -0
  497. data/ext/v8/upstream/build/scons/build/lib/SCons/Options/PathOption.py +76 -0
  498. data/ext/v8/upstream/build/scons/build/lib/SCons/Options/__init__.py +74 -0
  499. data/ext/v8/upstream/build/scons/build/lib/SCons/PathList.py +232 -0
  500. data/ext/v8/upstream/build/scons/build/lib/SCons/Platform/__init__.py +236 -0
  501. data/ext/v8/upstream/build/scons/build/lib/SCons/Platform/aix.py +70 -0
  502. data/ext/v8/upstream/build/scons/build/lib/SCons/Platform/cygwin.py +55 -0
  503. data/ext/v8/upstream/build/scons/build/lib/SCons/Platform/darwin.py +46 -0
  504. data/ext/v8/upstream/build/scons/build/lib/SCons/Platform/hpux.py +46 -0
  505. data/ext/v8/upstream/build/scons/build/lib/SCons/Platform/irix.py +44 -0
  506. data/ext/v8/upstream/build/scons/build/lib/SCons/Platform/os2.py +58 -0
  507. data/ext/v8/upstream/build/scons/build/lib/SCons/Platform/posix.py +264 -0
  508. data/ext/v8/upstream/build/scons/build/lib/SCons/Platform/sunos.py +50 -0
  509. data/ext/v8/upstream/build/scons/build/lib/SCons/Platform/win32.py +386 -0
  510. data/ext/v8/upstream/build/scons/build/lib/SCons/SConf.py +1038 -0
  511. data/ext/v8/upstream/build/scons/build/lib/SCons/SConsign.py +381 -0
  512. data/ext/v8/upstream/build/scons/build/lib/SCons/Scanner/C.py +132 -0
  513. data/ext/v8/upstream/build/scons/build/lib/SCons/Scanner/D.py +74 -0
  514. data/ext/v8/upstream/build/scons/build/lib/SCons/Scanner/Dir.py +111 -0
  515. data/ext/v8/upstream/build/scons/build/lib/SCons/Scanner/Fortran.py +320 -0
  516. data/ext/v8/upstream/build/scons/build/lib/SCons/Scanner/IDL.py +48 -0
  517. data/ext/v8/upstream/build/scons/build/lib/SCons/Scanner/LaTeX.py +378 -0
  518. data/ext/v8/upstream/build/scons/build/lib/SCons/Scanner/Prog.py +103 -0
  519. data/ext/v8/upstream/build/scons/build/lib/SCons/Scanner/RC.py +55 -0
  520. data/ext/v8/upstream/build/scons/build/lib/SCons/Scanner/__init__.py +415 -0
  521. data/ext/v8/upstream/build/scons/build/lib/SCons/Script/Interactive.py +386 -0
  522. data/ext/v8/upstream/build/scons/build/lib/SCons/Script/Main.py +1360 -0
  523. data/ext/v8/upstream/build/scons/build/lib/SCons/Script/SConsOptions.py +944 -0
  524. data/ext/v8/upstream/build/scons/build/lib/SCons/Script/SConscript.py +642 -0
  525. data/ext/v8/upstream/build/scons/build/lib/SCons/Script/__init__.py +414 -0
  526. data/ext/v8/upstream/build/scons/build/lib/SCons/Sig.py +63 -0
  527. data/ext/v8/upstream/build/scons/build/lib/SCons/Subst.py +911 -0
  528. data/ext/v8/upstream/build/scons/build/lib/SCons/Taskmaster.py +1030 -0
  529. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/386asm.py +61 -0
  530. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/BitKeeper.py +65 -0
  531. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/CVS.py +73 -0
  532. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/FortranCommon.py +247 -0
  533. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/JavaCommon.py +324 -0
  534. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/MSCommon/__init__.py +56 -0
  535. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/MSCommon/arch.py +61 -0
  536. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/MSCommon/common.py +210 -0
  537. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/MSCommon/netframework.py +84 -0
  538. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/MSCommon/sdk.py +321 -0
  539. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/MSCommon/vc.py +367 -0
  540. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/MSCommon/vs.py +497 -0
  541. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/Perforce.py +104 -0
  542. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/PharLapCommon.py +138 -0
  543. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/RCS.py +64 -0
  544. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/SCCS.py +64 -0
  545. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/Subversion.py +71 -0
  546. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/__init__.py +675 -0
  547. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/aixc++.py +82 -0
  548. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/aixcc.py +74 -0
  549. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/aixf77.py +80 -0
  550. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/aixlink.py +76 -0
  551. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/applelink.py +71 -0
  552. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/ar.py +63 -0
  553. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/as.py +78 -0
  554. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/bcc32.py +82 -0
  555. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/c++.py +99 -0
  556. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/cc.py +114 -0
  557. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/cvf.py +58 -0
  558. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/default.py +50 -0
  559. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/dmd.py +224 -0
  560. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/dvi.py +64 -0
  561. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/dvipdf.py +125 -0
  562. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/dvips.py +94 -0
  563. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/f77.py +62 -0
  564. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/f90.py +62 -0
  565. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/f95.py +63 -0
  566. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/filesystem.py +98 -0
  567. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/fortran.py +63 -0
  568. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/g++.py +90 -0
  569. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/g77.py +73 -0
  570. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/gas.py +53 -0
  571. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/gcc.py +80 -0
  572. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/gfortran.py +64 -0
  573. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/gnulink.py +63 -0
  574. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/gs.py +81 -0
  575. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/hpc++.py +85 -0
  576. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/hpcc.py +53 -0
  577. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/hplink.py +77 -0
  578. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/icc.py +59 -0
  579. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/icl.py +52 -0
  580. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/ifl.py +72 -0
  581. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/ifort.py +90 -0
  582. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/ilink.py +59 -0
  583. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/ilink32.py +60 -0
  584. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/install.py +229 -0
  585. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/intelc.py +490 -0
  586. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/ipkg.py +71 -0
  587. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/jar.py +110 -0
  588. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/javac.py +234 -0
  589. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/javah.py +138 -0
  590. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/latex.py +79 -0
  591. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/lex.py +99 -0
  592. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/link.py +121 -0
  593. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/linkloc.py +112 -0
  594. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/m4.py +63 -0
  595. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/masm.py +77 -0
  596. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/midl.py +90 -0
  597. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/mingw.py +159 -0
  598. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/mslib.py +64 -0
  599. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/mslink.py +266 -0
  600. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/mssdk.py +50 -0
  601. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/msvc.py +269 -0
  602. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/msvs.py +1439 -0
  603. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/mwcc.py +208 -0
  604. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/mwld.py +107 -0
  605. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/nasm.py +72 -0
  606. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/packaging/__init__.py +314 -0
  607. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/packaging/ipk.py +185 -0
  608. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/packaging/msi.py +526 -0
  609. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/packaging/rpm.py +367 -0
  610. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/packaging/src_tarbz2.py +43 -0
  611. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/packaging/src_targz.py +43 -0
  612. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/packaging/src_zip.py +43 -0
  613. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/packaging/tarbz2.py +44 -0
  614. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/packaging/targz.py +44 -0
  615. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/packaging/zip.py +44 -0
  616. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/pdf.py +78 -0
  617. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/pdflatex.py +83 -0
  618. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/pdftex.py +108 -0
  619. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/qt.py +336 -0
  620. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/rmic.py +121 -0
  621. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/rpcgen.py +70 -0
  622. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/rpm.py +132 -0
  623. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/sgiar.py +68 -0
  624. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/sgic++.py +58 -0
  625. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/sgicc.py +53 -0
  626. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/sgilink.py +63 -0
  627. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/sunar.py +67 -0
  628. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/sunc++.py +142 -0
  629. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/suncc.py +58 -0
  630. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/sunf77.py +63 -0
  631. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/sunf90.py +64 -0
  632. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/sunf95.py +64 -0
  633. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/sunlink.py +77 -0
  634. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/swig.py +186 -0
  635. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/tar.py +73 -0
  636. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/tex.py +805 -0
  637. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/textfile.py +175 -0
  638. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/tlib.py +53 -0
  639. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/wix.py +100 -0
  640. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/yacc.py +131 -0
  641. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/zip.py +100 -0
  642. data/ext/v8/upstream/build/scons/build/lib/SCons/Util.py +1645 -0
  643. data/ext/v8/upstream/build/scons/build/lib/SCons/Variables/BoolVariable.py +91 -0
  644. data/ext/v8/upstream/build/scons/build/lib/SCons/Variables/EnumVariable.py +107 -0
  645. data/ext/v8/upstream/build/scons/build/lib/SCons/Variables/ListVariable.py +139 -0
  646. data/ext/v8/upstream/build/scons/build/lib/SCons/Variables/PackageVariable.py +109 -0
  647. data/ext/v8/upstream/build/scons/build/lib/SCons/Variables/PathVariable.py +147 -0
  648. data/ext/v8/upstream/build/scons/build/lib/SCons/Variables/__init__.py +317 -0
  649. data/ext/v8/upstream/build/scons/build/lib/SCons/Warnings.py +228 -0
  650. data/ext/v8/upstream/build/scons/build/lib/SCons/__init__.py +49 -0
  651. data/ext/v8/upstream/build/scons/build/lib/SCons/compat/__init__.py +302 -0
  652. data/ext/v8/upstream/build/scons/build/lib/SCons/compat/_scons_UserString.py +98 -0
  653. data/ext/v8/upstream/build/scons/build/lib/SCons/compat/_scons_hashlib.py +91 -0
  654. data/ext/v8/upstream/build/scons/build/lib/SCons/compat/_scons_itertools.py +124 -0
  655. data/ext/v8/upstream/build/scons/build/lib/SCons/compat/_scons_optparse.py +1725 -0
  656. data/ext/v8/upstream/build/scons/build/lib/SCons/compat/_scons_sets.py +583 -0
  657. data/ext/v8/upstream/build/scons/build/lib/SCons/compat/_scons_sets15.py +176 -0
  658. data/ext/v8/upstream/build/scons/build/lib/SCons/compat/_scons_shlex.py +325 -0
  659. data/ext/v8/upstream/build/scons/build/lib/SCons/compat/_scons_subprocess.py +1296 -0
  660. data/ext/v8/upstream/build/scons/build/lib/SCons/compat/_scons_textwrap.py +382 -0
  661. data/ext/v8/upstream/build/scons/build/lib/SCons/compat/builtins.py +187 -0
  662. data/ext/v8/upstream/build/scons/build/lib/SCons/cpp.py +598 -0
  663. data/ext/v8/upstream/build/scons/build/lib/SCons/dblite.py +248 -0
  664. data/ext/v8/upstream/build/scons/build/lib/SCons/exitfuncs.py +77 -0
  665. data/ext/v8/upstream/build/scons/build/scripts/scons +184 -0
  666. data/ext/v8/upstream/build/scons/build/scripts/scons-time +1529 -0
  667. data/ext/v8/upstream/build/scons/build/scripts/scons.bat +31 -0
  668. data/ext/v8/upstream/build/scons/build/scripts/sconsign +508 -0
  669. data/ext/v8/upstream/build/scons/engine/SCons/Action.py +1256 -0
  670. data/ext/v8/upstream/build/scons/engine/SCons/Builder.py +868 -0
  671. data/ext/v8/upstream/build/scons/engine/SCons/CacheDir.py +217 -0
  672. data/ext/v8/upstream/build/scons/engine/SCons/Conftest.py +794 -0
  673. data/ext/v8/upstream/build/scons/engine/SCons/Debug.py +237 -0
  674. data/ext/v8/upstream/build/scons/engine/SCons/Defaults.py +485 -0
  675. data/ext/v8/upstream/build/scons/engine/SCons/Environment.py +2327 -0
  676. data/ext/v8/upstream/build/scons/engine/SCons/Errors.py +207 -0
  677. data/ext/v8/upstream/build/scons/engine/SCons/Executor.py +636 -0
  678. data/ext/v8/upstream/build/scons/engine/SCons/Job.py +435 -0
  679. data/ext/v8/upstream/build/scons/engine/SCons/Memoize.py +292 -0
  680. data/ext/v8/upstream/build/scons/engine/SCons/Node/Alias.py +153 -0
  681. data/ext/v8/upstream/build/scons/engine/SCons/Node/FS.py +3220 -0
  682. data/ext/v8/upstream/build/scons/engine/SCons/Node/Python.py +128 -0
  683. data/ext/v8/upstream/build/scons/engine/SCons/Node/__init__.py +1341 -0
  684. data/ext/v8/upstream/build/scons/engine/SCons/Options/BoolOption.py +50 -0
  685. data/ext/v8/upstream/build/scons/engine/SCons/Options/EnumOption.py +50 -0
  686. data/ext/v8/upstream/build/scons/engine/SCons/Options/ListOption.py +50 -0
  687. data/ext/v8/upstream/build/scons/engine/SCons/Options/PackageOption.py +50 -0
  688. data/ext/v8/upstream/build/scons/engine/SCons/Options/PathOption.py +76 -0
  689. data/ext/v8/upstream/build/scons/engine/SCons/Options/__init__.py +74 -0
  690. data/ext/v8/upstream/build/scons/engine/SCons/PathList.py +232 -0
  691. data/ext/v8/upstream/build/scons/engine/SCons/Platform/__init__.py +236 -0
  692. data/ext/v8/upstream/build/scons/engine/SCons/Platform/aix.py +70 -0
  693. data/ext/v8/upstream/build/scons/engine/SCons/Platform/cygwin.py +55 -0
  694. data/ext/v8/upstream/build/scons/engine/SCons/Platform/darwin.py +46 -0
  695. data/ext/v8/upstream/build/scons/engine/SCons/Platform/hpux.py +46 -0
  696. data/ext/v8/upstream/build/scons/engine/SCons/Platform/irix.py +44 -0
  697. data/ext/v8/upstream/build/scons/engine/SCons/Platform/os2.py +58 -0
  698. data/ext/v8/upstream/build/scons/engine/SCons/Platform/posix.py +264 -0
  699. data/ext/v8/upstream/build/scons/engine/SCons/Platform/sunos.py +50 -0
  700. data/ext/v8/upstream/build/scons/engine/SCons/Platform/win32.py +386 -0
  701. data/ext/v8/upstream/build/scons/engine/SCons/SConf.py +1038 -0
  702. data/ext/v8/upstream/build/scons/engine/SCons/SConsign.py +381 -0
  703. data/ext/v8/upstream/build/scons/engine/SCons/Scanner/C.py +132 -0
  704. data/ext/v8/upstream/build/scons/engine/SCons/Scanner/D.py +74 -0
  705. data/ext/v8/upstream/build/scons/engine/SCons/Scanner/Dir.py +111 -0
  706. data/ext/v8/upstream/build/scons/engine/SCons/Scanner/Fortran.py +320 -0
  707. data/ext/v8/upstream/build/scons/engine/SCons/Scanner/IDL.py +48 -0
  708. data/ext/v8/upstream/build/scons/engine/SCons/Scanner/LaTeX.py +378 -0
  709. data/ext/v8/upstream/build/scons/engine/SCons/Scanner/Prog.py +103 -0
  710. data/ext/v8/upstream/build/scons/engine/SCons/Scanner/RC.py +55 -0
  711. data/ext/v8/upstream/build/scons/engine/SCons/Scanner/__init__.py +415 -0
  712. data/ext/v8/upstream/build/scons/engine/SCons/Script/Interactive.py +386 -0
  713. data/ext/v8/upstream/build/scons/engine/SCons/Script/Main.py +1360 -0
  714. data/ext/v8/upstream/build/scons/engine/SCons/Script/SConsOptions.py +944 -0
  715. data/ext/v8/upstream/build/scons/engine/SCons/Script/SConscript.py +642 -0
  716. data/ext/v8/upstream/build/scons/engine/SCons/Script/__init__.py +414 -0
  717. data/ext/v8/upstream/build/scons/engine/SCons/Sig.py +63 -0
  718. data/ext/v8/upstream/build/scons/engine/SCons/Subst.py +911 -0
  719. data/ext/v8/upstream/build/scons/engine/SCons/Taskmaster.py +1030 -0
  720. data/ext/v8/upstream/build/scons/engine/SCons/Tool/386asm.py +61 -0
  721. data/ext/v8/upstream/build/scons/engine/SCons/Tool/BitKeeper.py +65 -0
  722. data/ext/v8/upstream/build/scons/engine/SCons/Tool/CVS.py +73 -0
  723. data/ext/v8/upstream/build/scons/engine/SCons/Tool/FortranCommon.py +247 -0
  724. data/ext/v8/upstream/build/scons/engine/SCons/Tool/JavaCommon.py +324 -0
  725. data/ext/v8/upstream/build/scons/engine/SCons/Tool/MSCommon/__init__.py +56 -0
  726. data/ext/v8/upstream/build/scons/engine/SCons/Tool/MSCommon/arch.py +61 -0
  727. data/ext/v8/upstream/build/scons/engine/SCons/Tool/MSCommon/common.py +210 -0
  728. data/ext/v8/upstream/build/scons/engine/SCons/Tool/MSCommon/netframework.py +84 -0
  729. data/ext/v8/upstream/build/scons/engine/SCons/Tool/MSCommon/sdk.py +321 -0
  730. data/ext/v8/upstream/build/scons/engine/SCons/Tool/MSCommon/vc.py +367 -0
  731. data/ext/v8/upstream/build/scons/engine/SCons/Tool/MSCommon/vs.py +497 -0
  732. data/ext/v8/upstream/build/scons/engine/SCons/Tool/Perforce.py +104 -0
  733. data/ext/v8/upstream/build/scons/engine/SCons/Tool/PharLapCommon.py +138 -0
  734. data/ext/v8/upstream/build/scons/engine/SCons/Tool/RCS.py +64 -0
  735. data/ext/v8/upstream/build/scons/engine/SCons/Tool/SCCS.py +64 -0
  736. data/ext/v8/upstream/build/scons/engine/SCons/Tool/Subversion.py +71 -0
  737. data/ext/v8/upstream/build/scons/engine/SCons/Tool/__init__.py +675 -0
  738. data/ext/v8/upstream/build/scons/engine/SCons/Tool/aixc++.py +82 -0
  739. data/ext/v8/upstream/build/scons/engine/SCons/Tool/aixcc.py +74 -0
  740. data/ext/v8/upstream/build/scons/engine/SCons/Tool/aixf77.py +80 -0
  741. data/ext/v8/upstream/build/scons/engine/SCons/Tool/aixlink.py +76 -0
  742. data/ext/v8/upstream/build/scons/engine/SCons/Tool/applelink.py +71 -0
  743. data/ext/v8/upstream/build/scons/engine/SCons/Tool/ar.py +63 -0
  744. data/ext/v8/upstream/build/scons/engine/SCons/Tool/as.py +78 -0
  745. data/ext/v8/upstream/build/scons/engine/SCons/Tool/bcc32.py +82 -0
  746. data/ext/v8/upstream/build/scons/engine/SCons/Tool/c++.py +99 -0
  747. data/ext/v8/upstream/build/scons/engine/SCons/Tool/cc.py +114 -0
  748. data/ext/v8/upstream/build/scons/engine/SCons/Tool/cvf.py +58 -0
  749. data/ext/v8/upstream/build/scons/engine/SCons/Tool/default.py +50 -0
  750. data/ext/v8/upstream/build/scons/engine/SCons/Tool/dmd.py +224 -0
  751. data/ext/v8/upstream/build/scons/engine/SCons/Tool/dvi.py +64 -0
  752. data/ext/v8/upstream/build/scons/engine/SCons/Tool/dvipdf.py +125 -0
  753. data/ext/v8/upstream/build/scons/engine/SCons/Tool/dvips.py +94 -0
  754. data/ext/v8/upstream/build/scons/engine/SCons/Tool/f77.py +62 -0
  755. data/ext/v8/upstream/build/scons/engine/SCons/Tool/f90.py +62 -0
  756. data/ext/v8/upstream/build/scons/engine/SCons/Tool/f95.py +63 -0
  757. data/ext/v8/upstream/build/scons/engine/SCons/Tool/filesystem.py +98 -0
  758. data/ext/v8/upstream/build/scons/engine/SCons/Tool/fortran.py +63 -0
  759. data/ext/v8/upstream/build/scons/engine/SCons/Tool/g++.py +90 -0
  760. data/ext/v8/upstream/build/scons/engine/SCons/Tool/g77.py +73 -0
  761. data/ext/v8/upstream/build/scons/engine/SCons/Tool/gas.py +53 -0
  762. data/ext/v8/upstream/build/scons/engine/SCons/Tool/gcc.py +80 -0
  763. data/ext/v8/upstream/build/scons/engine/SCons/Tool/gfortran.py +64 -0
  764. data/ext/v8/upstream/build/scons/engine/SCons/Tool/gnulink.py +63 -0
  765. data/ext/v8/upstream/build/scons/engine/SCons/Tool/gs.py +81 -0
  766. data/ext/v8/upstream/build/scons/engine/SCons/Tool/hpc++.py +85 -0
  767. data/ext/v8/upstream/build/scons/engine/SCons/Tool/hpcc.py +53 -0
  768. data/ext/v8/upstream/build/scons/engine/SCons/Tool/hplink.py +77 -0
  769. data/ext/v8/upstream/build/scons/engine/SCons/Tool/icc.py +59 -0
  770. data/ext/v8/upstream/build/scons/engine/SCons/Tool/icl.py +52 -0
  771. data/ext/v8/upstream/build/scons/engine/SCons/Tool/ifl.py +72 -0
  772. data/ext/v8/upstream/build/scons/engine/SCons/Tool/ifort.py +90 -0
  773. data/ext/v8/upstream/build/scons/engine/SCons/Tool/ilink.py +59 -0
  774. data/ext/v8/upstream/build/scons/engine/SCons/Tool/ilink32.py +60 -0
  775. data/ext/v8/upstream/build/scons/engine/SCons/Tool/install.py +229 -0
  776. data/ext/v8/upstream/build/scons/engine/SCons/Tool/intelc.py +490 -0
  777. data/ext/v8/upstream/build/scons/engine/SCons/Tool/ipkg.py +71 -0
  778. data/ext/v8/upstream/build/scons/engine/SCons/Tool/jar.py +110 -0
  779. data/ext/v8/upstream/build/scons/engine/SCons/Tool/javac.py +234 -0
  780. data/ext/v8/upstream/build/scons/engine/SCons/Tool/javah.py +138 -0
  781. data/ext/v8/upstream/build/scons/engine/SCons/Tool/latex.py +79 -0
  782. data/ext/v8/upstream/build/scons/engine/SCons/Tool/lex.py +99 -0
  783. data/ext/v8/upstream/build/scons/engine/SCons/Tool/link.py +121 -0
  784. data/ext/v8/upstream/build/scons/engine/SCons/Tool/linkloc.py +112 -0
  785. data/ext/v8/upstream/build/scons/engine/SCons/Tool/m4.py +63 -0
  786. data/ext/v8/upstream/build/scons/engine/SCons/Tool/masm.py +77 -0
  787. data/ext/v8/upstream/build/scons/engine/SCons/Tool/midl.py +90 -0
  788. data/ext/v8/upstream/build/scons/engine/SCons/Tool/mingw.py +159 -0
  789. data/ext/v8/upstream/build/scons/engine/SCons/Tool/mslib.py +64 -0
  790. data/ext/v8/upstream/build/scons/engine/SCons/Tool/mslink.py +266 -0
  791. data/ext/v8/upstream/build/scons/engine/SCons/Tool/mssdk.py +50 -0
  792. data/ext/v8/upstream/build/scons/engine/SCons/Tool/msvc.py +269 -0
  793. data/ext/v8/upstream/build/scons/engine/SCons/Tool/msvs.py +1439 -0
  794. data/ext/v8/upstream/build/scons/engine/SCons/Tool/mwcc.py +208 -0
  795. data/ext/v8/upstream/build/scons/engine/SCons/Tool/mwld.py +107 -0
  796. data/ext/v8/upstream/build/scons/engine/SCons/Tool/nasm.py +72 -0
  797. data/ext/v8/upstream/build/scons/engine/SCons/Tool/packaging/__init__.py +314 -0
  798. data/ext/v8/upstream/build/scons/engine/SCons/Tool/packaging/ipk.py +185 -0
  799. data/ext/v8/upstream/build/scons/engine/SCons/Tool/packaging/msi.py +526 -0
  800. data/ext/v8/upstream/build/scons/engine/SCons/Tool/packaging/rpm.py +367 -0
  801. data/ext/v8/upstream/build/scons/engine/SCons/Tool/packaging/src_tarbz2.py +43 -0
  802. data/ext/v8/upstream/build/scons/engine/SCons/Tool/packaging/src_targz.py +43 -0
  803. data/ext/v8/upstream/build/scons/engine/SCons/Tool/packaging/src_zip.py +43 -0
  804. data/ext/v8/upstream/build/scons/engine/SCons/Tool/packaging/tarbz2.py +44 -0
  805. data/ext/v8/upstream/build/scons/engine/SCons/Tool/packaging/targz.py +44 -0
  806. data/ext/v8/upstream/build/scons/engine/SCons/Tool/packaging/zip.py +44 -0
  807. data/ext/v8/upstream/build/scons/engine/SCons/Tool/pdf.py +78 -0
  808. data/ext/v8/upstream/build/scons/engine/SCons/Tool/pdflatex.py +83 -0
  809. data/ext/v8/upstream/build/scons/engine/SCons/Tool/pdftex.py +108 -0
  810. data/ext/v8/upstream/build/scons/engine/SCons/Tool/qt.py +336 -0
  811. data/ext/v8/upstream/build/scons/engine/SCons/Tool/rmic.py +121 -0
  812. data/ext/v8/upstream/build/scons/engine/SCons/Tool/rpcgen.py +70 -0
  813. data/ext/v8/upstream/build/scons/engine/SCons/Tool/rpm.py +132 -0
  814. data/ext/v8/upstream/build/scons/engine/SCons/Tool/sgiar.py +68 -0
  815. data/ext/v8/upstream/build/scons/engine/SCons/Tool/sgic++.py +58 -0
  816. data/ext/v8/upstream/build/scons/engine/SCons/Tool/sgicc.py +53 -0
  817. data/ext/v8/upstream/build/scons/engine/SCons/Tool/sgilink.py +63 -0
  818. data/ext/v8/upstream/build/scons/engine/SCons/Tool/sunar.py +67 -0
  819. data/ext/v8/upstream/build/scons/engine/SCons/Tool/sunc++.py +142 -0
  820. data/ext/v8/upstream/build/scons/engine/SCons/Tool/suncc.py +58 -0
  821. data/ext/v8/upstream/build/scons/engine/SCons/Tool/sunf77.py +63 -0
  822. data/ext/v8/upstream/build/scons/engine/SCons/Tool/sunf90.py +64 -0
  823. data/ext/v8/upstream/build/scons/engine/SCons/Tool/sunf95.py +64 -0
  824. data/ext/v8/upstream/build/scons/engine/SCons/Tool/sunlink.py +77 -0
  825. data/ext/v8/upstream/build/scons/engine/SCons/Tool/swig.py +186 -0
  826. data/ext/v8/upstream/build/scons/engine/SCons/Tool/tar.py +73 -0
  827. data/ext/v8/upstream/build/scons/engine/SCons/Tool/tex.py +805 -0
  828. data/ext/v8/upstream/build/scons/engine/SCons/Tool/textfile.py +175 -0
  829. data/ext/v8/upstream/build/scons/engine/SCons/Tool/tlib.py +53 -0
  830. data/ext/v8/upstream/build/scons/engine/SCons/Tool/wix.py +100 -0
  831. data/ext/v8/upstream/build/scons/engine/SCons/Tool/yacc.py +131 -0
  832. data/ext/v8/upstream/build/scons/engine/SCons/Tool/zip.py +100 -0
  833. data/ext/v8/upstream/build/scons/engine/SCons/Util.py +1645 -0
  834. data/ext/v8/upstream/build/scons/engine/SCons/Variables/BoolVariable.py +91 -0
  835. data/ext/v8/upstream/build/scons/engine/SCons/Variables/EnumVariable.py +107 -0
  836. data/ext/v8/upstream/build/scons/engine/SCons/Variables/ListVariable.py +139 -0
  837. data/ext/v8/upstream/build/scons/engine/SCons/Variables/PackageVariable.py +109 -0
  838. data/ext/v8/upstream/build/scons/engine/SCons/Variables/PathVariable.py +147 -0
  839. data/ext/v8/upstream/build/scons/engine/SCons/Variables/__init__.py +317 -0
  840. data/ext/v8/upstream/build/scons/engine/SCons/Warnings.py +228 -0
  841. data/ext/v8/upstream/build/scons/engine/SCons/__init__.py +49 -0
  842. data/ext/v8/upstream/build/scons/engine/SCons/compat/__init__.py +302 -0
  843. data/ext/v8/upstream/build/scons/engine/SCons/compat/_scons_UserString.py +98 -0
  844. data/ext/v8/upstream/build/scons/engine/SCons/compat/_scons_hashlib.py +91 -0
  845. data/ext/v8/upstream/build/scons/engine/SCons/compat/_scons_itertools.py +124 -0
  846. data/ext/v8/upstream/build/scons/engine/SCons/compat/_scons_optparse.py +1725 -0
  847. data/ext/v8/upstream/build/scons/engine/SCons/compat/_scons_sets.py +583 -0
  848. data/ext/v8/upstream/build/scons/engine/SCons/compat/_scons_sets15.py +176 -0
  849. data/ext/v8/upstream/build/scons/engine/SCons/compat/_scons_shlex.py +325 -0
  850. data/ext/v8/upstream/build/scons/engine/SCons/compat/_scons_subprocess.py +1296 -0
  851. data/ext/v8/upstream/build/scons/engine/SCons/compat/_scons_textwrap.py +382 -0
  852. data/ext/v8/upstream/build/scons/engine/SCons/compat/builtins.py +187 -0
  853. data/ext/v8/upstream/build/scons/engine/SCons/cpp.py +598 -0
  854. data/ext/v8/upstream/build/scons/engine/SCons/dblite.py +248 -0
  855. data/ext/v8/upstream/build/scons/engine/SCons/exitfuncs.py +77 -0
  856. data/ext/v8/upstream/build/scons/install/bin/scons +184 -0
  857. data/ext/v8/upstream/build/scons/install/bin/scons-1.2.0.d20100117 +184 -0
  858. data/ext/v8/upstream/build/scons/install/bin/scons-time +1529 -0
  859. data/ext/v8/upstream/build/scons/install/bin/scons-time-1.2.0.d20100117 +1529 -0
  860. data/ext/v8/upstream/build/scons/install/bin/sconsign +508 -0
  861. data/ext/v8/upstream/build/scons/install/bin/sconsign-1.2.0.d20100117 +508 -0
  862. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Action.py +1256 -0
  863. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Action.pyc +0 -0
  864. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Builder.py +868 -0
  865. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Builder.pyc +0 -0
  866. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/CacheDir.py +217 -0
  867. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/CacheDir.pyc +0 -0
  868. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Conftest.py +794 -0
  869. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Conftest.pyc +0 -0
  870. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Debug.py +237 -0
  871. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Debug.pyc +0 -0
  872. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Defaults.py +485 -0
  873. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Defaults.pyc +0 -0
  874. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Environment.py +2327 -0
  875. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Environment.pyc +0 -0
  876. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Errors.py +207 -0
  877. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Errors.pyc +0 -0
  878. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Executor.py +636 -0
  879. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Executor.pyc +0 -0
  880. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Job.py +435 -0
  881. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Job.pyc +0 -0
  882. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Memoize.py +292 -0
  883. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Memoize.pyc +0 -0
  884. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Node/Alias.py +153 -0
  885. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Node/Alias.pyc +0 -0
  886. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Node/FS.py +3220 -0
  887. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyc +0 -0
  888. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Node/Python.py +128 -0
  889. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Node/Python.pyc +0 -0
  890. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Node/__init__.py +1341 -0
  891. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Node/__init__.pyc +0 -0
  892. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Options/BoolOption.py +50 -0
  893. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Options/BoolOption.pyc +0 -0
  894. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Options/EnumOption.py +50 -0
  895. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Options/EnumOption.pyc +0 -0
  896. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Options/ListOption.py +50 -0
  897. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Options/ListOption.pyc +0 -0
  898. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Options/PackageOption.py +50 -0
  899. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Options/PackageOption.pyc +0 -0
  900. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Options/PathOption.py +76 -0
  901. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Options/PathOption.pyc +0 -0
  902. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Options/__init__.py +74 -0
  903. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Options/__init__.pyc +0 -0
  904. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/PathList.py +232 -0
  905. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/PathList.pyc +0 -0
  906. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/__init__.py +236 -0
  907. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/__init__.pyc +0 -0
  908. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/aix.py +70 -0
  909. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/aix.pyc +0 -0
  910. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/cygwin.py +55 -0
  911. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/cygwin.pyc +0 -0
  912. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/darwin.py +46 -0
  913. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/darwin.pyc +0 -0
  914. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/hpux.py +46 -0
  915. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/hpux.pyc +0 -0
  916. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/irix.py +44 -0
  917. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/irix.pyc +0 -0
  918. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/os2.py +58 -0
  919. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/os2.pyc +0 -0
  920. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/posix.py +264 -0
  921. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/posix.pyc +0 -0
  922. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/sunos.py +50 -0
  923. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/sunos.pyc +0 -0
  924. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/win32.py +386 -0
  925. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/win32.pyc +0 -0
  926. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/SConf.py +1038 -0
  927. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/SConf.pyc +0 -0
  928. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/SConsign.py +381 -0
  929. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/SConsign.pyc +0 -0
  930. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/C.py +132 -0
  931. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/C.pyc +0 -0
  932. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/D.py +74 -0
  933. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/D.pyc +0 -0
  934. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/Dir.py +111 -0
  935. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/Dir.pyc +0 -0
  936. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/Fortran.py +320 -0
  937. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/Fortran.pyc +0 -0
  938. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/IDL.py +48 -0
  939. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/IDL.pyc +0 -0
  940. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/LaTeX.py +378 -0
  941. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/LaTeX.pyc +0 -0
  942. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/Prog.py +103 -0
  943. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/Prog.pyc +0 -0
  944. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/RC.py +55 -0
  945. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/RC.pyc +0 -0
  946. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/__init__.py +415 -0
  947. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/__init__.pyc +0 -0
  948. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Script/Interactive.py +386 -0
  949. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Script/Interactive.pyc +0 -0
  950. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Script/Main.py +1360 -0
  951. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Script/Main.pyc +0 -0
  952. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Script/SConsOptions.py +944 -0
  953. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Script/SConsOptions.pyc +0 -0
  954. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Script/SConscript.py +642 -0
  955. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Script/SConscript.pyc +0 -0
  956. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Script/__init__.py +414 -0
  957. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Script/__init__.pyc +0 -0
  958. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Sig.py +63 -0
  959. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Sig.pyc +0 -0
  960. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Subst.py +911 -0
  961. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Subst.pyc +0 -0
  962. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Taskmaster.py +1030 -0
  963. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Taskmaster.pyc +0 -0
  964. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/386asm.py +61 -0
  965. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/386asm.pyc +0 -0
  966. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/BitKeeper.py +65 -0
  967. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/BitKeeper.pyc +0 -0
  968. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/CVS.py +73 -0
  969. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/CVS.pyc +0 -0
  970. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/FortranCommon.py +247 -0
  971. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/FortranCommon.pyc +0 -0
  972. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/JavaCommon.py +324 -0
  973. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/JavaCommon.pyc +0 -0
  974. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/MSCommon/__init__.py +56 -0
  975. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/MSCommon/__init__.pyc +0 -0
  976. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/MSCommon/arch.py +61 -0
  977. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/MSCommon/arch.pyc +0 -0
  978. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/MSCommon/common.py +210 -0
  979. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/MSCommon/common.pyc +0 -0
  980. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/MSCommon/netframework.py +84 -0
  981. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/MSCommon/netframework.pyc +0 -0
  982. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/MSCommon/sdk.py +321 -0
  983. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/MSCommon/sdk.pyc +0 -0
  984. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/MSCommon/vc.py +367 -0
  985. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/MSCommon/vc.pyc +0 -0
  986. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/MSCommon/vs.py +497 -0
  987. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/MSCommon/vs.pyc +0 -0
  988. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/Perforce.py +104 -0
  989. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/Perforce.pyc +0 -0
  990. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/PharLapCommon.py +138 -0
  991. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/PharLapCommon.pyc +0 -0
  992. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/RCS.py +64 -0
  993. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/RCS.pyc +0 -0
  994. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/SCCS.py +64 -0
  995. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/SCCS.pyc +0 -0
  996. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/Subversion.py +71 -0
  997. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/Subversion.pyc +0 -0
  998. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/__init__.py +675 -0
  999. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/__init__.pyc +0 -0
  1000. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/aixc++.py +82 -0
  1001. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/aixc++.pyc +0 -0
  1002. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/aixcc.py +74 -0
  1003. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/aixcc.pyc +0 -0
  1004. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/aixf77.py +80 -0
  1005. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/aixf77.pyc +0 -0
  1006. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/aixlink.py +76 -0
  1007. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/aixlink.pyc +0 -0
  1008. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/applelink.py +71 -0
  1009. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/applelink.pyc +0 -0
  1010. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/ar.py +63 -0
  1011. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/ar.pyc +0 -0
  1012. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/as.py +78 -0
  1013. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/as.pyc +0 -0
  1014. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/bcc32.py +82 -0
  1015. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/bcc32.pyc +0 -0
  1016. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/c++.py +99 -0
  1017. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/c++.pyc +0 -0
  1018. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/cc.py +114 -0
  1019. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/cc.pyc +0 -0
  1020. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/cvf.py +58 -0
  1021. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/cvf.pyc +0 -0
  1022. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/default.py +50 -0
  1023. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/default.pyc +0 -0
  1024. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/dmd.py +224 -0
  1025. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/dmd.pyc +0 -0
  1026. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/dvi.py +64 -0
  1027. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/dvi.pyc +0 -0
  1028. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/dvipdf.py +125 -0
  1029. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/dvipdf.pyc +0 -0
  1030. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/dvips.py +94 -0
  1031. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/dvips.pyc +0 -0
  1032. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/f77.py +62 -0
  1033. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/f77.pyc +0 -0
  1034. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/f90.py +62 -0
  1035. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/f90.pyc +0 -0
  1036. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/f95.py +63 -0
  1037. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/f95.pyc +0 -0
  1038. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/filesystem.py +98 -0
  1039. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/filesystem.pyc +0 -0
  1040. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/fortran.py +63 -0
  1041. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/fortran.pyc +0 -0
  1042. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/g++.py +90 -0
  1043. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/g++.pyc +0 -0
  1044. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/g77.py +73 -0
  1045. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/g77.pyc +0 -0
  1046. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/gas.py +53 -0
  1047. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/gas.pyc +0 -0
  1048. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/gcc.py +80 -0
  1049. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/gcc.pyc +0 -0
  1050. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/gfortran.py +64 -0
  1051. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/gfortran.pyc +0 -0
  1052. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/gnulink.py +63 -0
  1053. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/gnulink.pyc +0 -0
  1054. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/gs.py +81 -0
  1055. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/gs.pyc +0 -0
  1056. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/hpc++.py +85 -0
  1057. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/hpc++.pyc +0 -0
  1058. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/hpcc.py +53 -0
  1059. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/hpcc.pyc +0 -0
  1060. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/hplink.py +77 -0
  1061. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/hplink.pyc +0 -0
  1062. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/icc.py +59 -0
  1063. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/icc.pyc +0 -0
  1064. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/icl.py +52 -0
  1065. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/icl.pyc +0 -0
  1066. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/ifl.py +72 -0
  1067. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/ifl.pyc +0 -0
  1068. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/ifort.py +90 -0
  1069. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/ifort.pyc +0 -0
  1070. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/ilink.py +59 -0
  1071. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/ilink.pyc +0 -0
  1072. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/ilink32.py +60 -0
  1073. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/ilink32.pyc +0 -0
  1074. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/install.py +229 -0
  1075. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/install.pyc +0 -0
  1076. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/intelc.py +490 -0
  1077. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/intelc.pyc +0 -0
  1078. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/ipkg.py +71 -0
  1079. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/ipkg.pyc +0 -0
  1080. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/jar.py +110 -0
  1081. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/jar.pyc +0 -0
  1082. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/javac.py +234 -0
  1083. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/javac.pyc +0 -0
  1084. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/javah.py +138 -0
  1085. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/javah.pyc +0 -0
  1086. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/latex.py +79 -0
  1087. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/latex.pyc +0 -0
  1088. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/lex.py +99 -0
  1089. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/lex.pyc +0 -0
  1090. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/link.py +121 -0
  1091. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/link.pyc +0 -0
  1092. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/linkloc.py +112 -0
  1093. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/linkloc.pyc +0 -0
  1094. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/m4.py +63 -0
  1095. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/m4.pyc +0 -0
  1096. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/masm.py +77 -0
  1097. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/masm.pyc +0 -0
  1098. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/midl.py +90 -0
  1099. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/midl.pyc +0 -0
  1100. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/mingw.py +159 -0
  1101. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/mingw.pyc +0 -0
  1102. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/mslib.py +64 -0
  1103. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/mslib.pyc +0 -0
  1104. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/mslink.py +266 -0
  1105. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/mslink.pyc +0 -0
  1106. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/mssdk.py +50 -0
  1107. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/mssdk.pyc +0 -0
  1108. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/msvc.py +269 -0
  1109. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/msvc.pyc +0 -0
  1110. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/msvs.py +1439 -0
  1111. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/msvs.pyc +0 -0
  1112. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/mwcc.py +208 -0
  1113. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/mwcc.pyc +0 -0
  1114. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/mwld.py +107 -0
  1115. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/mwld.pyc +0 -0
  1116. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/nasm.py +72 -0
  1117. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/nasm.pyc +0 -0
  1118. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/__init__.py +314 -0
  1119. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/__init__.pyc +0 -0
  1120. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/ipk.py +185 -0
  1121. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/ipk.pyc +0 -0
  1122. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/msi.py +526 -0
  1123. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/msi.pyc +0 -0
  1124. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/rpm.py +367 -0
  1125. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/rpm.pyc +0 -0
  1126. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/src_tarbz2.py +43 -0
  1127. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/src_tarbz2.pyc +0 -0
  1128. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/src_targz.py +43 -0
  1129. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/src_targz.pyc +0 -0
  1130. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/src_zip.py +43 -0
  1131. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/src_zip.pyc +0 -0
  1132. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/tarbz2.py +44 -0
  1133. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/tarbz2.pyc +0 -0
  1134. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/targz.py +44 -0
  1135. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/targz.pyc +0 -0
  1136. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/zip.py +44 -0
  1137. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/zip.pyc +0 -0
  1138. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/pdf.py +78 -0
  1139. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/pdf.pyc +0 -0
  1140. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/pdflatex.py +83 -0
  1141. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/pdflatex.pyc +0 -0
  1142. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/pdftex.py +108 -0
  1143. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/pdftex.pyc +0 -0
  1144. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/qt.py +336 -0
  1145. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/qt.pyc +0 -0
  1146. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/rmic.py +121 -0
  1147. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/rmic.pyc +0 -0
  1148. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/rpcgen.py +70 -0
  1149. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/rpcgen.pyc +0 -0
  1150. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/rpm.py +132 -0
  1151. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/rpm.pyc +0 -0
  1152. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sgiar.py +68 -0
  1153. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sgiar.pyc +0 -0
  1154. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sgic++.py +58 -0
  1155. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sgic++.pyc +0 -0
  1156. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sgicc.py +53 -0
  1157. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sgicc.pyc +0 -0
  1158. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sgilink.py +63 -0
  1159. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sgilink.pyc +0 -0
  1160. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sunar.py +67 -0
  1161. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sunar.pyc +0 -0
  1162. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sunc++.py +142 -0
  1163. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sunc++.pyc +0 -0
  1164. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/suncc.py +58 -0
  1165. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/suncc.pyc +0 -0
  1166. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sunf77.py +63 -0
  1167. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sunf77.pyc +0 -0
  1168. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sunf90.py +64 -0
  1169. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sunf90.pyc +0 -0
  1170. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sunf95.py +64 -0
  1171. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sunf95.pyc +0 -0
  1172. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sunlink.py +77 -0
  1173. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sunlink.pyc +0 -0
  1174. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/swig.py +186 -0
  1175. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/swig.pyc +0 -0
  1176. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/tar.py +73 -0
  1177. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/tar.pyc +0 -0
  1178. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/tex.py +805 -0
  1179. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/tex.pyc +0 -0
  1180. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/textfile.py +175 -0
  1181. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/textfile.pyc +0 -0
  1182. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/tlib.py +53 -0
  1183. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/tlib.pyc +0 -0
  1184. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/wix.py +100 -0
  1185. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/wix.pyc +0 -0
  1186. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/yacc.py +131 -0
  1187. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/yacc.pyc +0 -0
  1188. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/zip.py +100 -0
  1189. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/zip.pyc +0 -0
  1190. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Util.py +1645 -0
  1191. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Util.pyc +0 -0
  1192. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Variables/BoolVariable.py +91 -0
  1193. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Variables/BoolVariable.pyc +0 -0
  1194. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Variables/EnumVariable.py +107 -0
  1195. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Variables/EnumVariable.pyc +0 -0
  1196. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Variables/ListVariable.py +139 -0
  1197. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Variables/ListVariable.pyc +0 -0
  1198. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Variables/PackageVariable.py +109 -0
  1199. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Variables/PackageVariable.pyc +0 -0
  1200. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Variables/PathVariable.py +147 -0
  1201. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Variables/PathVariable.pyc +0 -0
  1202. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Variables/__init__.py +317 -0
  1203. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Variables/__init__.pyc +0 -0
  1204. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Warnings.py +228 -0
  1205. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Warnings.pyc +0 -0
  1206. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/__init__.py +49 -0
  1207. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/__init__.pyc +0 -0
  1208. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/__init__.py +302 -0
  1209. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/__init__.pyc +0 -0
  1210. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_UserString.py +98 -0
  1211. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_UserString.pyc +0 -0
  1212. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_hashlib.py +91 -0
  1213. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_hashlib.pyc +0 -0
  1214. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_itertools.py +124 -0
  1215. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_itertools.pyc +0 -0
  1216. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_optparse.py +1725 -0
  1217. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_optparse.pyc +0 -0
  1218. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_sets.py +583 -0
  1219. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_sets.pyc +0 -0
  1220. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_sets15.py +176 -0
  1221. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_sets15.pyc +0 -0
  1222. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_shlex.py +325 -0
  1223. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_shlex.pyc +0 -0
  1224. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_subprocess.py +1296 -0
  1225. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_subprocess.pyc +0 -0
  1226. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_textwrap.py +382 -0
  1227. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_textwrap.pyc +0 -0
  1228. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/builtins.py +187 -0
  1229. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/builtins.pyc +0 -0
  1230. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/cpp.py +598 -0
  1231. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/cpp.pyc +0 -0
  1232. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/dblite.py +248 -0
  1233. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/dblite.pyc +0 -0
  1234. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/exitfuncs.py +77 -0
  1235. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/exitfuncs.pyc +0 -0
  1236. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/scons-1.2.0.d20100117.egg-info +13 -0
  1237. data/ext/v8/upstream/build/scons/install/man/man1/scons-time.1 +1017 -0
  1238. data/ext/v8/upstream/build/scons/install/man/man1/scons.1 +15179 -0
  1239. data/ext/v8/upstream/build/scons/install/man/man1/sconsign.1 +208 -0
  1240. data/ext/v8/upstream/build/scons/os_spawnv_fix.diff +83 -0
  1241. data/ext/v8/upstream/build/scons/scons-time.1 +1017 -0
  1242. data/ext/v8/upstream/build/scons/scons.1 +15179 -0
  1243. data/ext/v8/upstream/build/scons/sconsign.1 +208 -0
  1244. data/ext/v8/upstream/build/scons/script/scons +184 -0
  1245. data/ext/v8/upstream/build/scons/script/scons-time +1529 -0
  1246. data/ext/v8/upstream/build/scons/script/scons.bat +31 -0
  1247. data/ext/v8/upstream/build/scons/script/sconsign +508 -0
  1248. data/ext/v8/upstream/build/scons/setup.cfg +6 -0
  1249. data/ext/v8/upstream/build/scons/setup.py +427 -0
  1250. data/ext/v8/upstream/build/v8/.gitignore +26 -0
  1251. data/ext/v8/upstream/build/v8/AUTHORS +31 -0
  1252. data/ext/v8/upstream/build/v8/ChangeLog +1916 -0
  1253. data/ext/v8/upstream/build/v8/LICENSE +55 -0
  1254. data/ext/v8/upstream/build/v8/SConstruct +1158 -0
  1255. data/ext/v8/upstream/build/v8/SConstruct.orig +1154 -0
  1256. data/ext/v8/upstream/build/v8/include/v8-debug.h +381 -0
  1257. data/ext/v8/upstream/build/v8/include/v8-profiler.h +353 -0
  1258. data/ext/v8/upstream/build/v8/include/v8.h +3616 -0
  1259. data/ext/v8/upstream/build/v8/src/SConscript +330 -0
  1260. data/ext/v8/upstream/build/v8/src/accessors.cc +661 -0
  1261. data/ext/v8/upstream/build/v8/src/accessors.h +114 -0
  1262. data/ext/v8/upstream/build/v8/src/allocation.cc +198 -0
  1263. data/ext/v8/upstream/build/v8/src/allocation.h +169 -0
  1264. data/ext/v8/upstream/build/v8/src/api.cc +4795 -0
  1265. data/ext/v8/upstream/build/v8/src/api.h +485 -0
  1266. data/ext/v8/upstream/build/v8/src/apinatives.js +110 -0
  1267. data/ext/v8/upstream/build/v8/src/apiutils.h +69 -0
  1268. data/ext/v8/upstream/build/v8/src/arguments.h +96 -0
  1269. data/ext/v8/upstream/build/v8/src/arm/assembler-arm-inl.h +305 -0
  1270. data/ext/v8/upstream/build/v8/src/arm/assembler-arm.cc +2580 -0
  1271. data/ext/v8/upstream/build/v8/src/arm/assembler-arm.h +1275 -0
  1272. data/ext/v8/upstream/build/v8/src/arm/builtins-arm.cc +1320 -0
  1273. data/ext/v8/upstream/build/v8/src/arm/codegen-arm-inl.h +48 -0
  1274. data/ext/v8/upstream/build/v8/src/arm/codegen-arm.cc +11398 -0
  1275. data/ext/v8/upstream/build/v8/src/arm/codegen-arm.h +1102 -0
  1276. data/ext/v8/upstream/build/v8/src/arm/constants-arm.cc +154 -0
  1277. data/ext/v8/upstream/build/v8/src/arm/constants-arm.h +388 -0
  1278. data/ext/v8/upstream/build/v8/src/arm/cpu-arm.cc +142 -0
  1279. data/ext/v8/upstream/build/v8/src/arm/debug-arm.cc +309 -0
  1280. data/ext/v8/upstream/build/v8/src/arm/disasm-arm.cc +1459 -0
  1281. data/ext/v8/upstream/build/v8/src/arm/fast-codegen-arm.cc +241 -0
  1282. data/ext/v8/upstream/build/v8/src/arm/frames-arm.cc +123 -0
  1283. data/ext/v8/upstream/build/v8/src/arm/frames-arm.h +162 -0
  1284. data/ext/v8/upstream/build/v8/src/arm/full-codegen-arm.cc +3178 -0
  1285. data/ext/v8/upstream/build/v8/src/arm/ic-arm.cc +2258 -0
  1286. data/ext/v8/upstream/build/v8/src/arm/jump-target-arm.cc +164 -0
  1287. data/ext/v8/upstream/build/v8/src/arm/macro-assembler-arm.cc +1892 -0
  1288. data/ext/v8/upstream/build/v8/src/arm/macro-assembler-arm.h +727 -0
  1289. data/ext/v8/upstream/build/v8/src/arm/regexp-macro-assembler-arm.cc +1261 -0
  1290. data/ext/v8/upstream/build/v8/src/arm/regexp-macro-assembler-arm.h +266 -0
  1291. data/ext/v8/upstream/build/v8/src/arm/register-allocator-arm-inl.h +100 -0
  1292. data/ext/v8/upstream/build/v8/src/arm/register-allocator-arm.cc +63 -0
  1293. data/ext/v8/upstream/build/v8/src/arm/register-allocator-arm.h +44 -0
  1294. data/ext/v8/upstream/build/v8/src/arm/simulator-arm.cc +2822 -0
  1295. data/ext/v8/upstream/build/v8/src/arm/simulator-arm.h +361 -0
  1296. data/ext/v8/upstream/build/v8/src/arm/stub-cache-arm.cc +2387 -0
  1297. data/ext/v8/upstream/build/v8/src/arm/virtual-frame-arm-inl.h +59 -0
  1298. data/ext/v8/upstream/build/v8/src/arm/virtual-frame-arm.cc +834 -0
  1299. data/ext/v8/upstream/build/v8/src/arm/virtual-frame-arm.h +519 -0
  1300. data/ext/v8/upstream/build/v8/src/array.js +1127 -0
  1301. data/ext/v8/upstream/build/v8/src/assembler.cc +801 -0
  1302. data/ext/v8/upstream/build/v8/src/assembler.h +573 -0
  1303. data/ext/v8/upstream/build/v8/src/ast-inl.h +81 -0
  1304. data/ext/v8/upstream/build/v8/src/ast.cc +1152 -0
  1305. data/ext/v8/upstream/build/v8/src/ast.h +2106 -0
  1306. data/ext/v8/upstream/build/v8/src/bootstrapper.cc +1819 -0
  1307. data/ext/v8/upstream/build/v8/src/bootstrapper.h +118 -0
  1308. data/ext/v8/upstream/build/v8/src/builtins.cc +1529 -0
  1309. data/ext/v8/upstream/build/v8/src/builtins.h +263 -0
  1310. data/ext/v8/upstream/build/v8/src/bytecodes-irregexp.h +104 -0
  1311. data/ext/v8/upstream/build/v8/src/cached-powers.h +119 -0
  1312. data/ext/v8/upstream/build/v8/src/char-predicates-inl.h +86 -0
  1313. data/ext/v8/upstream/build/v8/src/char-predicates.h +65 -0
  1314. data/ext/v8/upstream/build/v8/src/checks.cc +100 -0
  1315. data/ext/v8/upstream/build/v8/src/checks.h +310 -0
  1316. data/ext/v8/upstream/build/v8/src/circular-queue-inl.h +53 -0
  1317. data/ext/v8/upstream/build/v8/src/circular-queue.cc +121 -0
  1318. data/ext/v8/upstream/build/v8/src/circular-queue.h +103 -0
  1319. data/ext/v8/upstream/build/v8/src/code-stubs.cc +177 -0
  1320. data/ext/v8/upstream/build/v8/src/code-stubs.h +177 -0
  1321. data/ext/v8/upstream/build/v8/src/code.h +68 -0
  1322. data/ext/v8/upstream/build/v8/src/codegen-inl.h +60 -0
  1323. data/ext/v8/upstream/build/v8/src/codegen.cc +516 -0
  1324. data/ext/v8/upstream/build/v8/src/codegen.h +897 -0
  1325. data/ext/v8/upstream/build/v8/src/compilation-cache.cc +562 -0
  1326. data/ext/v8/upstream/build/v8/src/compilation-cache.h +102 -0
  1327. data/ext/v8/upstream/build/v8/src/compiler.cc +654 -0
  1328. data/ext/v8/upstream/build/v8/src/compiler.h +299 -0
  1329. data/ext/v8/upstream/build/v8/src/contexts.cc +256 -0
  1330. data/ext/v8/upstream/build/v8/src/contexts.h +342 -0
  1331. data/ext/v8/upstream/build/v8/src/conversions-inl.h +110 -0
  1332. data/ext/v8/upstream/build/v8/src/conversions.cc +1119 -0
  1333. data/ext/v8/upstream/build/v8/src/conversions.h +123 -0
  1334. data/ext/v8/upstream/build/v8/src/counters.cc +78 -0
  1335. data/ext/v8/upstream/build/v8/src/counters.h +239 -0
  1336. data/ext/v8/upstream/build/v8/src/cpu-profiler-inl.h +100 -0
  1337. data/ext/v8/upstream/build/v8/src/cpu-profiler.cc +538 -0
  1338. data/ext/v8/upstream/build/v8/src/cpu-profiler.h +285 -0
  1339. data/ext/v8/upstream/build/v8/src/cpu.h +65 -0
  1340. data/ext/v8/upstream/build/v8/src/d8-debug.cc +356 -0
  1341. data/ext/v8/upstream/build/v8/src/d8-debug.h +155 -0
  1342. data/ext/v8/upstream/build/v8/src/d8-posix.cc +693 -0
  1343. data/ext/v8/upstream/build/v8/src/d8-readline.cc +128 -0
  1344. data/ext/v8/upstream/build/v8/src/d8-windows.cc +42 -0
  1345. data/ext/v8/upstream/build/v8/src/d8.cc +783 -0
  1346. data/ext/v8/upstream/build/v8/src/d8.h +227 -0
  1347. data/ext/v8/upstream/build/v8/src/d8.js +1683 -0
  1348. data/ext/v8/upstream/build/v8/src/data-flow.cc +758 -0
  1349. data/ext/v8/upstream/build/v8/src/data-flow.h +278 -0
  1350. data/ext/v8/upstream/build/v8/src/date.js +1059 -0
  1351. data/ext/v8/upstream/build/v8/src/dateparser-inl.h +123 -0
  1352. data/ext/v8/upstream/build/v8/src/dateparser.cc +178 -0
  1353. data/ext/v8/upstream/build/v8/src/dateparser.h +244 -0
  1354. data/ext/v8/upstream/build/v8/src/debug-agent.cc +427 -0
  1355. data/ext/v8/upstream/build/v8/src/debug-agent.h +129 -0
  1356. data/ext/v8/upstream/build/v8/src/debug-debugger.js +2227 -0
  1357. data/ext/v8/upstream/build/v8/src/debug.cc +3005 -0
  1358. data/ext/v8/upstream/build/v8/src/debug.h +993 -0
  1359. data/ext/v8/upstream/build/v8/src/disasm.h +77 -0
  1360. data/ext/v8/upstream/build/v8/src/disassembler.cc +312 -0
  1361. data/ext/v8/upstream/build/v8/src/disassembler.h +56 -0
  1362. data/ext/v8/upstream/build/v8/src/diy-fp.cc +58 -0
  1363. data/ext/v8/upstream/build/v8/src/diy-fp.h +117 -0
  1364. data/ext/v8/upstream/build/v8/src/double.h +169 -0
  1365. data/ext/v8/upstream/build/v8/src/dtoa-config.c +92 -0
  1366. data/ext/v8/upstream/build/v8/src/dtoa.cc +77 -0
  1367. data/ext/v8/upstream/build/v8/src/dtoa.h +81 -0
  1368. data/ext/v8/upstream/build/v8/src/execution.cc +809 -0
  1369. data/ext/v8/upstream/build/v8/src/execution.h +336 -0
  1370. data/ext/v8/upstream/build/v8/src/factory.cc +1003 -0
  1371. data/ext/v8/upstream/build/v8/src/factory.h +410 -0
  1372. data/ext/v8/upstream/build/v8/src/fast-codegen.cc +746 -0
  1373. data/ext/v8/upstream/build/v8/src/fast-codegen.h +161 -0
  1374. data/ext/v8/upstream/build/v8/src/fast-dtoa.cc +505 -0
  1375. data/ext/v8/upstream/build/v8/src/fast-dtoa.h +58 -0
  1376. data/ext/v8/upstream/build/v8/src/fixed-dtoa.cc +405 -0
  1377. data/ext/v8/upstream/build/v8/src/fixed-dtoa.h +55 -0
  1378. data/ext/v8/upstream/build/v8/src/flag-definitions.h +455 -0
  1379. data/ext/v8/upstream/build/v8/src/flags.cc +551 -0
  1380. data/ext/v8/upstream/build/v8/src/flags.h +81 -0
  1381. data/ext/v8/upstream/build/v8/src/flow-graph.cc +763 -0
  1382. data/ext/v8/upstream/build/v8/src/flow-graph.h +180 -0
  1383. data/ext/v8/upstream/build/v8/src/frame-element.cc +42 -0
  1384. data/ext/v8/upstream/build/v8/src/frame-element.h +273 -0
  1385. data/ext/v8/upstream/build/v8/src/frames-inl.h +217 -0
  1386. data/ext/v8/upstream/build/v8/src/frames.cc +826 -0
  1387. data/ext/v8/upstream/build/v8/src/frames.h +682 -0
  1388. data/ext/v8/upstream/build/v8/src/full-codegen.cc +1443 -0
  1389. data/ext/v8/upstream/build/v8/src/full-codegen.h +548 -0
  1390. data/ext/v8/upstream/build/v8/src/func-name-inferrer.cc +76 -0
  1391. data/ext/v8/upstream/build/v8/src/func-name-inferrer.h +135 -0
  1392. data/ext/v8/upstream/build/v8/src/global-handles.cc +520 -0
  1393. data/ext/v8/upstream/build/v8/src/global-handles.h +180 -0
  1394. data/ext/v8/upstream/build/v8/src/globals.h +669 -0
  1395. data/ext/v8/upstream/build/v8/src/handles-inl.h +76 -0
  1396. data/ext/v8/upstream/build/v8/src/handles.cc +825 -0
  1397. data/ext/v8/upstream/build/v8/src/handles.h +393 -0
  1398. data/ext/v8/upstream/build/v8/src/hashmap.cc +226 -0
  1399. data/ext/v8/upstream/build/v8/src/hashmap.h +120 -0
  1400. data/ext/v8/upstream/build/v8/src/heap-inl.h +493 -0
  1401. data/ext/v8/upstream/build/v8/src/heap-profiler.cc +779 -0
  1402. data/ext/v8/upstream/build/v8/src/heap-profiler.h +323 -0
  1403. data/ext/v8/upstream/build/v8/src/heap.cc +4994 -0
  1404. data/ext/v8/upstream/build/v8/src/heap.h +1984 -0
  1405. data/ext/v8/upstream/build/v8/src/ia32/assembler-ia32-inl.h +360 -0
  1406. data/ext/v8/upstream/build/v8/src/ia32/assembler-ia32.cc +2600 -0
  1407. data/ext/v8/upstream/build/v8/src/ia32/assembler-ia32.h +969 -0
  1408. data/ext/v8/upstream/build/v8/src/ia32/builtins-ia32.cc +1261 -0
  1409. data/ext/v8/upstream/build/v8/src/ia32/codegen-ia32-inl.h +46 -0
  1410. data/ext/v8/upstream/build/v8/src/ia32/codegen-ia32.cc +13968 -0
  1411. data/ext/v8/upstream/build/v8/src/ia32/codegen-ia32.h +1097 -0
  1412. data/ext/v8/upstream/build/v8/src/ia32/cpu-ia32.cc +83 -0
  1413. data/ext/v8/upstream/build/v8/src/ia32/debug-ia32.cc +309 -0
  1414. data/ext/v8/upstream/build/v8/src/ia32/disasm-ia32.cc +1471 -0
  1415. data/ext/v8/upstream/build/v8/src/ia32/fast-codegen-ia32.cc +954 -0
  1416. data/ext/v8/upstream/build/v8/src/ia32/fast-codegen-ia32.h +155 -0
  1417. data/ext/v8/upstream/build/v8/src/ia32/frames-ia32.cc +115 -0
  1418. data/ext/v8/upstream/build/v8/src/ia32/frames-ia32.h +135 -0
  1419. data/ext/v8/upstream/build/v8/src/ia32/full-codegen-ia32.cc +3281 -0
  1420. data/ext/v8/upstream/build/v8/src/ia32/ic-ia32.cc +1966 -0
  1421. data/ext/v8/upstream/build/v8/src/ia32/jump-target-ia32.cc +437 -0
  1422. data/ext/v8/upstream/build/v8/src/ia32/macro-assembler-ia32.cc +1610 -0
  1423. data/ext/v8/upstream/build/v8/src/ia32/macro-assembler-ia32.h +610 -0
  1424. data/ext/v8/upstream/build/v8/src/ia32/regexp-macro-assembler-ia32.cc +1247 -0
  1425. data/ext/v8/upstream/build/v8/src/ia32/regexp-macro-assembler-ia32.h +214 -0
  1426. data/ext/v8/upstream/build/v8/src/ia32/register-allocator-ia32-inl.h +82 -0
  1427. data/ext/v8/upstream/build/v8/src/ia32/register-allocator-ia32.cc +157 -0
  1428. data/ext/v8/upstream/build/v8/src/ia32/register-allocator-ia32.h +43 -0
  1429. data/ext/v8/upstream/build/v8/src/ia32/simulator-ia32.cc +30 -0
  1430. data/ext/v8/upstream/build/v8/src/ia32/simulator-ia32.h +62 -0
  1431. data/ext/v8/upstream/build/v8/src/ia32/stub-cache-ia32.cc +2750 -0
  1432. data/ext/v8/upstream/build/v8/src/ia32/virtual-frame-ia32.cc +1334 -0
  1433. data/ext/v8/upstream/build/v8/src/ia32/virtual-frame-ia32.h +627 -0
  1434. data/ext/v8/upstream/build/v8/src/ic-inl.h +120 -0
  1435. data/ext/v8/upstream/build/v8/src/ic.cc +1827 -0
  1436. data/ext/v8/upstream/build/v8/src/ic.h +515 -0
  1437. data/ext/v8/upstream/build/v8/src/interpreter-irregexp.cc +646 -0
  1438. data/ext/v8/upstream/build/v8/src/interpreter-irregexp.h +48 -0
  1439. data/ext/v8/upstream/build/v8/src/json.js +268 -0
  1440. data/ext/v8/upstream/build/v8/src/jsregexp.cc +5283 -0
  1441. data/ext/v8/upstream/build/v8/src/jsregexp.h +1463 -0
  1442. data/ext/v8/upstream/build/v8/src/jump-target-heavy-inl.h +51 -0
  1443. data/ext/v8/upstream/build/v8/src/jump-target-heavy.cc +429 -0
  1444. data/ext/v8/upstream/build/v8/src/jump-target-heavy.h +244 -0
  1445. data/ext/v8/upstream/build/v8/src/jump-target-inl.h +48 -0
  1446. data/ext/v8/upstream/build/v8/src/jump-target-light-inl.h +56 -0
  1447. data/ext/v8/upstream/build/v8/src/jump-target-light.cc +110 -0
  1448. data/ext/v8/upstream/build/v8/src/jump-target-light.h +192 -0
  1449. data/ext/v8/upstream/build/v8/src/jump-target.cc +91 -0
  1450. data/ext/v8/upstream/build/v8/src/jump-target.h +90 -0
  1451. data/ext/v8/upstream/build/v8/src/list-inl.h +166 -0
  1452. data/ext/v8/upstream/build/v8/src/list.h +159 -0
  1453. data/ext/v8/upstream/build/v8/src/liveedit-debugger.js +1057 -0
  1454. data/ext/v8/upstream/build/v8/src/liveedit.cc +1480 -0
  1455. data/ext/v8/upstream/build/v8/src/liveedit.h +170 -0
  1456. data/ext/v8/upstream/build/v8/src/log-inl.h +59 -0
  1457. data/ext/v8/upstream/build/v8/src/log-utils.cc +497 -0
  1458. data/ext/v8/upstream/build/v8/src/log-utils.h +289 -0
  1459. data/ext/v8/upstream/build/v8/src/log.cc +1561 -0
  1460. data/ext/v8/upstream/build/v8/src/log.h +384 -0
  1461. data/ext/v8/upstream/build/v8/src/macro-assembler.h +86 -0
  1462. data/ext/v8/upstream/build/v8/src/macros.py +177 -0
  1463. data/ext/v8/upstream/build/v8/src/mark-compact.cc +2330 -0
  1464. data/ext/v8/upstream/build/v8/src/mark-compact.h +451 -0
  1465. data/ext/v8/upstream/build/v8/src/math.js +264 -0
  1466. data/ext/v8/upstream/build/v8/src/memory.h +74 -0
  1467. data/ext/v8/upstream/build/v8/src/messages.cc +183 -0
  1468. data/ext/v8/upstream/build/v8/src/messages.h +113 -0
  1469. data/ext/v8/upstream/build/v8/src/messages.js +982 -0
  1470. data/ext/v8/upstream/build/v8/src/mips/assembler-mips-inl.h +215 -0
  1471. data/ext/v8/upstream/build/v8/src/mips/assembler-mips.cc +1219 -0
  1472. data/ext/v8/upstream/build/v8/src/mips/assembler-mips.h +668 -0
  1473. data/ext/v8/upstream/build/v8/src/mips/builtins-mips.cc +205 -0
  1474. data/ext/v8/upstream/build/v8/src/mips/codegen-mips-inl.h +70 -0
  1475. data/ext/v8/upstream/build/v8/src/mips/codegen-mips.cc +1437 -0
  1476. data/ext/v8/upstream/build/v8/src/mips/codegen-mips.h +434 -0
  1477. data/ext/v8/upstream/build/v8/src/mips/constants-mips.cc +328 -0
  1478. data/ext/v8/upstream/build/v8/src/mips/constants-mips.h +525 -0
  1479. data/ext/v8/upstream/build/v8/src/mips/cpu-mips.cc +73 -0
  1480. data/ext/v8/upstream/build/v8/src/mips/debug-mips.cc +131 -0
  1481. data/ext/v8/upstream/build/v8/src/mips/disasm-mips.cc +787 -0
  1482. data/ext/v8/upstream/build/v8/src/mips/fast-codegen-mips.cc +77 -0
  1483. data/ext/v8/upstream/build/v8/src/mips/frames-mips.cc +102 -0
  1484. data/ext/v8/upstream/build/v8/src/mips/frames-mips.h +164 -0
  1485. data/ext/v8/upstream/build/v8/src/mips/full-codegen-mips.cc +277 -0
  1486. data/ext/v8/upstream/build/v8/src/mips/ic-mips.cc +220 -0
  1487. data/ext/v8/upstream/build/v8/src/mips/jump-target-mips.cc +175 -0
  1488. data/ext/v8/upstream/build/v8/src/mips/macro-assembler-mips.cc +1326 -0
  1489. data/ext/v8/upstream/build/v8/src/mips/macro-assembler-mips.h +461 -0
  1490. data/ext/v8/upstream/build/v8/src/mips/register-allocator-mips-inl.h +137 -0
  1491. data/ext/v8/upstream/build/v8/src/mips/register-allocator-mips.cc +63 -0
  1492. data/ext/v8/upstream/build/v8/src/mips/register-allocator-mips.h +46 -0
  1493. data/ext/v8/upstream/build/v8/src/mips/simulator-mips.cc +1651 -0
  1494. data/ext/v8/upstream/build/v8/src/mips/simulator-mips.h +311 -0
  1495. data/ext/v8/upstream/build/v8/src/mips/stub-cache-mips.cc +403 -0
  1496. data/ext/v8/upstream/build/v8/src/mips/virtual-frame-mips.cc +319 -0
  1497. data/ext/v8/upstream/build/v8/src/mips/virtual-frame-mips.h +548 -0
  1498. data/ext/v8/upstream/build/v8/src/mirror-debugger.js +2380 -0
  1499. data/ext/v8/upstream/build/v8/src/mksnapshot.cc +256 -0
  1500. data/ext/v8/upstream/build/v8/src/natives.h +63 -0
  1501. data/ext/v8/upstream/build/v8/src/objects-debug.cc +1366 -0
  1502. data/ext/v8/upstream/build/v8/src/objects-inl.h +3333 -0
  1503. data/ext/v8/upstream/build/v8/src/objects.cc +8820 -0
  1504. data/ext/v8/upstream/build/v8/src/objects.h +5373 -0
  1505. data/ext/v8/upstream/build/v8/src/oprofile-agent.cc +108 -0
  1506. data/ext/v8/upstream/build/v8/src/oprofile-agent.h +77 -0
  1507. data/ext/v8/upstream/build/v8/src/parser.cc +5207 -0
  1508. data/ext/v8/upstream/build/v8/src/parser.h +197 -0
  1509. data/ext/v8/upstream/build/v8/src/platform-freebsd.cc +667 -0
  1510. data/ext/v8/upstream/build/v8/src/platform-linux.cc +862 -0
  1511. data/ext/v8/upstream/build/v8/src/platform-macos.cc +665 -0
  1512. data/ext/v8/upstream/build/v8/src/platform-nullos.cc +454 -0
  1513. data/ext/v8/upstream/build/v8/src/platform-openbsd.cc +622 -0
  1514. data/ext/v8/upstream/build/v8/src/platform-posix.cc +362 -0
  1515. data/ext/v8/upstream/build/v8/src/platform-solaris.cc +653 -0
  1516. data/ext/v8/upstream/build/v8/src/platform-win32.cc +1911 -0
  1517. data/ext/v8/upstream/build/v8/src/platform.h +577 -0
  1518. data/ext/v8/upstream/build/v8/src/powers-ten.h +2461 -0
  1519. data/ext/v8/upstream/build/v8/src/prettyprinter.cc +1531 -0
  1520. data/ext/v8/upstream/build/v8/src/prettyprinter.h +221 -0
  1521. data/ext/v8/upstream/build/v8/src/profile-generator-inl.h +148 -0
  1522. data/ext/v8/upstream/build/v8/src/profile-generator.cc +1830 -0
  1523. data/ext/v8/upstream/build/v8/src/profile-generator.h +853 -0
  1524. data/ext/v8/upstream/build/v8/src/property.cc +96 -0
  1525. data/ext/v8/upstream/build/v8/src/property.h +315 -0
  1526. data/ext/v8/upstream/build/v8/src/regexp-macro-assembler-irregexp-inl.h +78 -0
  1527. data/ext/v8/upstream/build/v8/src/regexp-macro-assembler-irregexp.cc +464 -0
  1528. data/ext/v8/upstream/build/v8/src/regexp-macro-assembler-irregexp.h +141 -0
  1529. data/ext/v8/upstream/build/v8/src/regexp-macro-assembler-tracer.cc +356 -0
  1530. data/ext/v8/upstream/build/v8/src/regexp-macro-assembler-tracer.h +103 -0
  1531. data/ext/v8/upstream/build/v8/src/regexp-macro-assembler.cc +261 -0
  1532. data/ext/v8/upstream/build/v8/src/regexp-macro-assembler.h +228 -0
  1533. data/ext/v8/upstream/build/v8/src/regexp-stack.cc +103 -0
  1534. data/ext/v8/upstream/build/v8/src/regexp-stack.h +123 -0
  1535. data/ext/v8/upstream/build/v8/src/regexp.js +549 -0
  1536. data/ext/v8/upstream/build/v8/src/register-allocator-inl.h +141 -0
  1537. data/ext/v8/upstream/build/v8/src/register-allocator.cc +104 -0
  1538. data/ext/v8/upstream/build/v8/src/register-allocator.h +320 -0
  1539. data/ext/v8/upstream/build/v8/src/rewriter.cc +1038 -0
  1540. data/ext/v8/upstream/build/v8/src/rewriter.h +54 -0
  1541. data/ext/v8/upstream/build/v8/src/runtime.cc +10599 -0
  1542. data/ext/v8/upstream/build/v8/src/runtime.h +459 -0
  1543. data/ext/v8/upstream/build/v8/src/runtime.js +629 -0
  1544. data/ext/v8/upstream/build/v8/src/scanner.cc +1346 -0
  1545. data/ext/v8/upstream/build/v8/src/scanner.h +503 -0
  1546. data/ext/v8/upstream/build/v8/src/scopeinfo.cc +637 -0
  1547. data/ext/v8/upstream/build/v8/src/scopeinfo.h +233 -0
  1548. data/ext/v8/upstream/build/v8/src/scopes.cc +962 -0
  1549. data/ext/v8/upstream/build/v8/src/scopes.h +400 -0
  1550. data/ext/v8/upstream/build/v8/src/serialize.cc +1461 -0
  1551. data/ext/v8/upstream/build/v8/src/serialize.h +581 -0
  1552. data/ext/v8/upstream/build/v8/src/shell.h +55 -0
  1553. data/ext/v8/upstream/build/v8/src/simulator.h +43 -0
  1554. data/ext/v8/upstream/build/v8/src/smart-pointer.h +109 -0
  1555. data/ext/v8/upstream/build/v8/src/snapshot-common.cc +82 -0
  1556. data/ext/v8/upstream/build/v8/src/snapshot-empty.cc +50 -0
  1557. data/ext/v8/upstream/build/v8/src/snapshot.h +71 -0
  1558. data/ext/v8/upstream/build/v8/src/spaces-inl.h +483 -0
  1559. data/ext/v8/upstream/build/v8/src/spaces.cc +2901 -0
  1560. data/ext/v8/upstream/build/v8/src/spaces.h +2197 -0
  1561. data/ext/v8/upstream/build/v8/src/splay-tree-inl.h +310 -0
  1562. data/ext/v8/upstream/build/v8/src/splay-tree.h +203 -0
  1563. data/ext/v8/upstream/build/v8/src/string-stream.cc +584 -0
  1564. data/ext/v8/upstream/build/v8/src/string-stream.h +189 -0
  1565. data/ext/v8/upstream/build/v8/src/string.js +1006 -0
  1566. data/ext/v8/upstream/build/v8/src/stub-cache.cc +1379 -0
  1567. data/ext/v8/upstream/build/v8/src/stub-cache.h +756 -0
  1568. data/ext/v8/upstream/build/v8/src/third_party/dtoa/COPYING +15 -0
  1569. data/ext/v8/upstream/build/v8/src/third_party/dtoa/dtoa.c +3334 -0
  1570. data/ext/v8/upstream/build/v8/src/third_party/valgrind/valgrind.h +3925 -0
  1571. data/ext/v8/upstream/build/v8/src/token.cc +56 -0
  1572. data/ext/v8/upstream/build/v8/src/token.h +270 -0
  1573. data/ext/v8/upstream/build/v8/src/top.cc +1067 -0
  1574. data/ext/v8/upstream/build/v8/src/top.h +463 -0
  1575. data/ext/v8/upstream/build/v8/src/type-info.cc +53 -0
  1576. data/ext/v8/upstream/build/v8/src/type-info.h +244 -0
  1577. data/ext/v8/upstream/build/v8/src/unbound-queue-inl.h +95 -0
  1578. data/ext/v8/upstream/build/v8/src/unbound-queue.h +67 -0
  1579. data/ext/v8/upstream/build/v8/src/unicode-inl.h +238 -0
  1580. data/ext/v8/upstream/build/v8/src/unicode.cc +749 -0
  1581. data/ext/v8/upstream/build/v8/src/unicode.h +279 -0
  1582. data/ext/v8/upstream/build/v8/src/uri.js +415 -0
  1583. data/ext/v8/upstream/build/v8/src/utils.cc +285 -0
  1584. data/ext/v8/upstream/build/v8/src/utils.h +745 -0
  1585. data/ext/v8/upstream/build/v8/src/v8-counters.cc +55 -0
  1586. data/ext/v8/upstream/build/v8/src/v8-counters.h +250 -0
  1587. data/ext/v8/upstream/build/v8/src/v8.cc +228 -0
  1588. data/ext/v8/upstream/build/v8/src/v8.h +121 -0
  1589. data/ext/v8/upstream/build/v8/src/v8dll-main.cc +39 -0
  1590. data/ext/v8/upstream/build/v8/src/v8natives.js +1188 -0
  1591. data/ext/v8/upstream/build/v8/src/v8threads.cc +461 -0
  1592. data/ext/v8/upstream/build/v8/src/v8threads.h +159 -0
  1593. data/ext/v8/upstream/build/v8/src/variables.cc +119 -0
  1594. data/ext/v8/upstream/build/v8/src/variables.h +205 -0
  1595. data/ext/v8/upstream/build/v8/src/version.cc +88 -0
  1596. data/ext/v8/upstream/build/v8/src/version.h +64 -0
  1597. data/ext/v8/upstream/build/v8/src/virtual-frame-heavy-inl.h +192 -0
  1598. data/ext/v8/upstream/build/v8/src/virtual-frame-heavy.cc +312 -0
  1599. data/ext/v8/upstream/build/v8/src/virtual-frame-inl.h +39 -0
  1600. data/ext/v8/upstream/build/v8/src/virtual-frame-light-inl.h +170 -0
  1601. data/ext/v8/upstream/build/v8/src/virtual-frame-light.cc +52 -0
  1602. data/ext/v8/upstream/build/v8/src/virtual-frame.cc +49 -0
  1603. data/ext/v8/upstream/build/v8/src/virtual-frame.h +46 -0
  1604. data/ext/v8/upstream/build/v8/src/vm-state-inl.h +137 -0
  1605. data/ext/v8/upstream/build/v8/src/vm-state.cc +39 -0
  1606. data/ext/v8/upstream/build/v8/src/vm-state.h +77 -0
  1607. data/ext/v8/upstream/build/v8/src/x64/assembler-x64-inl.h +400 -0
  1608. data/ext/v8/upstream/build/v8/src/x64/assembler-x64.cc +2963 -0
  1609. data/ext/v8/upstream/build/v8/src/x64/assembler-x64.h +1438 -0
  1610. data/ext/v8/upstream/build/v8/src/x64/builtins-x64.cc +1296 -0
  1611. data/ext/v8/upstream/build/v8/src/x64/codegen-x64-inl.h +46 -0
  1612. data/ext/v8/upstream/build/v8/src/x64/codegen-x64.cc +12491 -0
  1613. data/ext/v8/upstream/build/v8/src/x64/codegen-x64.h +1090 -0
  1614. data/ext/v8/upstream/build/v8/src/x64/cpu-x64.cc +83 -0
  1615. data/ext/v8/upstream/build/v8/src/x64/debug-x64.cc +267 -0
  1616. data/ext/v8/upstream/build/v8/src/x64/disasm-x64.cc +1696 -0
  1617. data/ext/v8/upstream/build/v8/src/x64/fast-codegen-x64.cc +250 -0
  1618. data/ext/v8/upstream/build/v8/src/x64/frames-x64.cc +113 -0
  1619. data/ext/v8/upstream/build/v8/src/x64/frames-x64.h +125 -0
  1620. data/ext/v8/upstream/build/v8/src/x64/full-codegen-x64.cc +3270 -0
  1621. data/ext/v8/upstream/build/v8/src/x64/ic-x64.cc +1907 -0
  1622. data/ext/v8/upstream/build/v8/src/x64/jump-target-x64.cc +437 -0
  1623. data/ext/v8/upstream/build/v8/src/x64/macro-assembler-x64.cc +2793 -0
  1624. data/ext/v8/upstream/build/v8/src/x64/macro-assembler-x64.h +916 -0
  1625. data/ext/v8/upstream/build/v8/src/x64/regexp-macro-assembler-x64.cc +1374 -0
  1626. data/ext/v8/upstream/build/v8/src/x64/regexp-macro-assembler-x64.h +277 -0
  1627. data/ext/v8/upstream/build/v8/src/x64/register-allocator-x64-inl.h +87 -0
  1628. data/ext/v8/upstream/build/v8/src/x64/register-allocator-x64.cc +91 -0
  1629. data/ext/v8/upstream/build/v8/src/x64/register-allocator-x64.h +43 -0
  1630. data/ext/v8/upstream/build/v8/src/x64/simulator-x64.cc +27 -0
  1631. data/ext/v8/upstream/build/v8/src/x64/simulator-x64.h +63 -0
  1632. data/ext/v8/upstream/build/v8/src/x64/stub-cache-x64.cc +2560 -0
  1633. data/ext/v8/upstream/build/v8/src/x64/virtual-frame-x64.cc +1264 -0
  1634. data/ext/v8/upstream/build/v8/src/x64/virtual-frame-x64.h +590 -0
  1635. data/ext/v8/upstream/build/v8/src/zone-inl.h +82 -0
  1636. data/ext/v8/upstream/build/v8/src/zone.cc +194 -0
  1637. data/ext/v8/upstream/build/v8/src/zone.h +221 -0
  1638. data/ext/v8/upstream/build/v8/tools/codemap.js +270 -0
  1639. data/ext/v8/upstream/build/v8/tools/consarray.js +93 -0
  1640. data/ext/v8/upstream/build/v8/tools/csvparser.js +83 -0
  1641. data/ext/v8/upstream/build/v8/tools/gc-nvp-trace-processor.py +317 -0
  1642. data/ext/v8/upstream/build/v8/tools/generate-ten-powers.scm +286 -0
  1643. data/ext/v8/upstream/build/v8/tools/gyp/v8.gyp +749 -0
  1644. data/ext/v8/upstream/build/v8/tools/js2c.py +380 -0
  1645. data/ext/v8/upstream/build/v8/tools/jsmin.py +280 -0
  1646. data/ext/v8/upstream/build/v8/tools/linux-tick-processor +33 -0
  1647. data/ext/v8/upstream/build/v8/tools/linux-tick-processor.py +78 -0
  1648. data/ext/v8/upstream/build/v8/tools/logreader.js +338 -0
  1649. data/ext/v8/upstream/build/v8/tools/mac-nm +18 -0
  1650. data/ext/v8/upstream/build/v8/tools/mac-tick-processor +6 -0
  1651. data/ext/v8/upstream/build/v8/tools/oprofile/annotate +7 -0
  1652. data/ext/v8/upstream/build/v8/tools/oprofile/common +19 -0
  1653. data/ext/v8/upstream/build/v8/tools/oprofile/dump +7 -0
  1654. data/ext/v8/upstream/build/v8/tools/oprofile/report +7 -0
  1655. data/ext/v8/upstream/build/v8/tools/oprofile/reset +7 -0
  1656. data/ext/v8/upstream/build/v8/tools/oprofile/run +14 -0
  1657. data/ext/v8/upstream/build/v8/tools/oprofile/shutdown +7 -0
  1658. data/ext/v8/upstream/build/v8/tools/oprofile/start +7 -0
  1659. data/ext/v8/upstream/build/v8/tools/presubmit.py +299 -0
  1660. data/ext/v8/upstream/build/v8/tools/process-heap-prof.py +120 -0
  1661. data/ext/v8/upstream/build/v8/tools/profile.js +691 -0
  1662. data/ext/v8/upstream/build/v8/tools/profile_view.js +224 -0
  1663. data/ext/v8/upstream/build/v8/tools/run-valgrind.py +77 -0
  1664. data/ext/v8/upstream/build/v8/tools/splaytree.js +322 -0
  1665. data/ext/v8/upstream/build/v8/tools/splaytree.py +226 -0
  1666. data/ext/v8/upstream/build/v8/tools/stats-viewer.py +468 -0
  1667. data/ext/v8/upstream/build/v8/tools/tickprocessor-driver.js +59 -0
  1668. data/ext/v8/upstream/build/v8/tools/tickprocessor.js +862 -0
  1669. data/ext/v8/upstream/build/v8/tools/tickprocessor.py +571 -0
  1670. data/ext/v8/upstream/build/v8/tools/utils.py +88 -0
  1671. data/ext/v8/upstream/build/v8/tools/visual_studio/README.txt +71 -0
  1672. data/ext/v8/upstream/build/v8/tools/visual_studio/arm.vsprops +14 -0
  1673. data/ext/v8/upstream/build/v8/tools/visual_studio/common.vsprops +34 -0
  1674. data/ext/v8/upstream/build/v8/tools/visual_studio/d8.vcproj +193 -0
  1675. data/ext/v8/upstream/build/v8/tools/visual_studio/d8_arm.vcproj +193 -0
  1676. data/ext/v8/upstream/build/v8/tools/visual_studio/d8_x64.vcproj +209 -0
  1677. data/ext/v8/upstream/build/v8/tools/visual_studio/d8js2c.cmd +6 -0
  1678. data/ext/v8/upstream/build/v8/tools/visual_studio/debug.vsprops +17 -0
  1679. data/ext/v8/upstream/build/v8/tools/visual_studio/ia32.vsprops +17 -0
  1680. data/ext/v8/upstream/build/v8/tools/visual_studio/js2c.cmd +6 -0
  1681. data/ext/v8/upstream/build/v8/tools/visual_studio/release.vsprops +24 -0
  1682. data/ext/v8/upstream/build/v8/tools/visual_studio/v8.sln +101 -0
  1683. data/ext/v8/upstream/build/v8/tools/visual_studio/v8.vcproj +227 -0
  1684. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_arm.sln +74 -0
  1685. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_arm.vcproj +227 -0
  1686. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_base.vcproj +1143 -0
  1687. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_base_arm.vcproj +1115 -0
  1688. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_base_x64.vcproj +1096 -0
  1689. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_cctest.vcproj +265 -0
  1690. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_cctest_arm.vcproj +249 -0
  1691. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_cctest_x64.vcproj +257 -0
  1692. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_mksnapshot.vcproj +145 -0
  1693. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_mksnapshot_x64.vcproj +145 -0
  1694. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_process_sample.vcproj +145 -0
  1695. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_process_sample_arm.vcproj +145 -0
  1696. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_process_sample_x64.vcproj +161 -0
  1697. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_shell_sample.vcproj +145 -0
  1698. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_shell_sample_arm.vcproj +145 -0
  1699. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_shell_sample_x64.vcproj +161 -0
  1700. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_snapshot.vcproj +142 -0
  1701. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_snapshot_cc.vcproj +92 -0
  1702. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_snapshot_cc_x64.vcproj +92 -0
  1703. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_snapshot_x64.vcproj +142 -0
  1704. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_x64.sln +101 -0
  1705. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_x64.vcproj +227 -0
  1706. data/ext/v8/upstream/build/v8/tools/visual_studio/x64.vsprops +17 -0
  1707. data/ext/v8/upstream/build/v8/tools/windows-tick-processor.bat +29 -0
  1708. data/ext/v8/upstream/build/v8/tools/windows-tick-processor.py +137 -0
  1709. data/ext/v8/upstream/detect_cpu.rb +27 -0
  1710. data/ext/v8/upstream/fpic-on-linux-amd64.patch +13 -0
  1711. data/ext/v8/upstream/scons/CHANGES.txt +5183 -0
  1712. data/ext/v8/upstream/scons/LICENSE.txt +20 -0
  1713. data/ext/v8/upstream/scons/MANIFEST +202 -0
  1714. data/ext/v8/upstream/scons/PKG-INFO +13 -0
  1715. data/ext/v8/upstream/scons/README.txt +273 -0
  1716. data/ext/v8/upstream/scons/RELEASE.txt +1040 -0
  1717. data/ext/v8/upstream/scons/engine/SCons/Action.py +1256 -0
  1718. data/ext/v8/upstream/scons/engine/SCons/Builder.py +868 -0
  1719. data/ext/v8/upstream/scons/engine/SCons/CacheDir.py +217 -0
  1720. data/ext/v8/upstream/scons/engine/SCons/Conftest.py +794 -0
  1721. data/ext/v8/upstream/scons/engine/SCons/Debug.py +237 -0
  1722. data/ext/v8/upstream/scons/engine/SCons/Defaults.py +485 -0
  1723. data/ext/v8/upstream/scons/engine/SCons/Environment.py +2327 -0
  1724. data/ext/v8/upstream/scons/engine/SCons/Errors.py +207 -0
  1725. data/ext/v8/upstream/scons/engine/SCons/Executor.py +636 -0
  1726. data/ext/v8/upstream/scons/engine/SCons/Job.py +435 -0
  1727. data/ext/v8/upstream/scons/engine/SCons/Memoize.py +292 -0
  1728. data/ext/v8/upstream/scons/engine/SCons/Node/Alias.py +153 -0
  1729. data/ext/v8/upstream/scons/engine/SCons/Node/FS.py +3220 -0
  1730. data/ext/v8/upstream/scons/engine/SCons/Node/Python.py +128 -0
  1731. data/ext/v8/upstream/scons/engine/SCons/Node/__init__.py +1341 -0
  1732. data/ext/v8/upstream/scons/engine/SCons/Options/BoolOption.py +50 -0
  1733. data/ext/v8/upstream/scons/engine/SCons/Options/EnumOption.py +50 -0
  1734. data/ext/v8/upstream/scons/engine/SCons/Options/ListOption.py +50 -0
  1735. data/ext/v8/upstream/scons/engine/SCons/Options/PackageOption.py +50 -0
  1736. data/ext/v8/upstream/scons/engine/SCons/Options/PathOption.py +76 -0
  1737. data/ext/v8/upstream/scons/engine/SCons/Options/__init__.py +74 -0
  1738. data/ext/v8/upstream/scons/engine/SCons/PathList.py +232 -0
  1739. data/ext/v8/upstream/scons/engine/SCons/Platform/__init__.py +236 -0
  1740. data/ext/v8/upstream/scons/engine/SCons/Platform/aix.py +70 -0
  1741. data/ext/v8/upstream/scons/engine/SCons/Platform/cygwin.py +55 -0
  1742. data/ext/v8/upstream/scons/engine/SCons/Platform/darwin.py +46 -0
  1743. data/ext/v8/upstream/scons/engine/SCons/Platform/hpux.py +46 -0
  1744. data/ext/v8/upstream/scons/engine/SCons/Platform/irix.py +44 -0
  1745. data/ext/v8/upstream/scons/engine/SCons/Platform/os2.py +58 -0
  1746. data/ext/v8/upstream/scons/engine/SCons/Platform/posix.py +264 -0
  1747. data/ext/v8/upstream/scons/engine/SCons/Platform/sunos.py +50 -0
  1748. data/ext/v8/upstream/scons/engine/SCons/Platform/win32.py +386 -0
  1749. data/ext/v8/upstream/scons/engine/SCons/SConf.py +1038 -0
  1750. data/ext/v8/upstream/scons/engine/SCons/SConsign.py +381 -0
  1751. data/ext/v8/upstream/scons/engine/SCons/Scanner/C.py +132 -0
  1752. data/ext/v8/upstream/scons/engine/SCons/Scanner/D.py +74 -0
  1753. data/ext/v8/upstream/scons/engine/SCons/Scanner/Dir.py +111 -0
  1754. data/ext/v8/upstream/scons/engine/SCons/Scanner/Fortran.py +320 -0
  1755. data/ext/v8/upstream/scons/engine/SCons/Scanner/IDL.py +48 -0
  1756. data/ext/v8/upstream/scons/engine/SCons/Scanner/LaTeX.py +378 -0
  1757. data/ext/v8/upstream/scons/engine/SCons/Scanner/Prog.py +103 -0
  1758. data/ext/v8/upstream/scons/engine/SCons/Scanner/RC.py +55 -0
  1759. data/ext/v8/upstream/scons/engine/SCons/Scanner/__init__.py +415 -0
  1760. data/ext/v8/upstream/scons/engine/SCons/Script/Interactive.py +386 -0
  1761. data/ext/v8/upstream/scons/engine/SCons/Script/Main.py +1360 -0
  1762. data/ext/v8/upstream/scons/engine/SCons/Script/SConsOptions.py +944 -0
  1763. data/ext/v8/upstream/scons/engine/SCons/Script/SConscript.py +642 -0
  1764. data/ext/v8/upstream/scons/engine/SCons/Script/__init__.py +414 -0
  1765. data/ext/v8/upstream/scons/engine/SCons/Sig.py +63 -0
  1766. data/ext/v8/upstream/scons/engine/SCons/Subst.py +911 -0
  1767. data/ext/v8/upstream/scons/engine/SCons/Taskmaster.py +1030 -0
  1768. data/ext/v8/upstream/scons/engine/SCons/Tool/386asm.py +61 -0
  1769. data/ext/v8/upstream/scons/engine/SCons/Tool/BitKeeper.py +65 -0
  1770. data/ext/v8/upstream/scons/engine/SCons/Tool/CVS.py +73 -0
  1771. data/ext/v8/upstream/scons/engine/SCons/Tool/FortranCommon.py +247 -0
  1772. data/ext/v8/upstream/scons/engine/SCons/Tool/JavaCommon.py +324 -0
  1773. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/__init__.py +56 -0
  1774. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/arch.py +61 -0
  1775. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/common.py +210 -0
  1776. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/netframework.py +84 -0
  1777. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/sdk.py +321 -0
  1778. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/vc.py +367 -0
  1779. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/vs.py +497 -0
  1780. data/ext/v8/upstream/scons/engine/SCons/Tool/Perforce.py +104 -0
  1781. data/ext/v8/upstream/scons/engine/SCons/Tool/PharLapCommon.py +138 -0
  1782. data/ext/v8/upstream/scons/engine/SCons/Tool/RCS.py +64 -0
  1783. data/ext/v8/upstream/scons/engine/SCons/Tool/SCCS.py +64 -0
  1784. data/ext/v8/upstream/scons/engine/SCons/Tool/Subversion.py +71 -0
  1785. data/ext/v8/upstream/scons/engine/SCons/Tool/__init__.py +675 -0
  1786. data/ext/v8/upstream/scons/engine/SCons/Tool/aixc++.py +82 -0
  1787. data/ext/v8/upstream/scons/engine/SCons/Tool/aixcc.py +74 -0
  1788. data/ext/v8/upstream/scons/engine/SCons/Tool/aixf77.py +80 -0
  1789. data/ext/v8/upstream/scons/engine/SCons/Tool/aixlink.py +76 -0
  1790. data/ext/v8/upstream/scons/engine/SCons/Tool/applelink.py +71 -0
  1791. data/ext/v8/upstream/scons/engine/SCons/Tool/ar.py +63 -0
  1792. data/ext/v8/upstream/scons/engine/SCons/Tool/as.py +78 -0
  1793. data/ext/v8/upstream/scons/engine/SCons/Tool/bcc32.py +82 -0
  1794. data/ext/v8/upstream/scons/engine/SCons/Tool/c++.py +99 -0
  1795. data/ext/v8/upstream/scons/engine/SCons/Tool/cc.py +114 -0
  1796. data/ext/v8/upstream/scons/engine/SCons/Tool/cvf.py +58 -0
  1797. data/ext/v8/upstream/scons/engine/SCons/Tool/default.py +50 -0
  1798. data/ext/v8/upstream/scons/engine/SCons/Tool/dmd.py +224 -0
  1799. data/ext/v8/upstream/scons/engine/SCons/Tool/dvi.py +64 -0
  1800. data/ext/v8/upstream/scons/engine/SCons/Tool/dvipdf.py +125 -0
  1801. data/ext/v8/upstream/scons/engine/SCons/Tool/dvips.py +94 -0
  1802. data/ext/v8/upstream/scons/engine/SCons/Tool/f77.py +62 -0
  1803. data/ext/v8/upstream/scons/engine/SCons/Tool/f90.py +62 -0
  1804. data/ext/v8/upstream/scons/engine/SCons/Tool/f95.py +63 -0
  1805. data/ext/v8/upstream/scons/engine/SCons/Tool/filesystem.py +98 -0
  1806. data/ext/v8/upstream/scons/engine/SCons/Tool/fortran.py +63 -0
  1807. data/ext/v8/upstream/scons/engine/SCons/Tool/g++.py +90 -0
  1808. data/ext/v8/upstream/scons/engine/SCons/Tool/g77.py +73 -0
  1809. data/ext/v8/upstream/scons/engine/SCons/Tool/gas.py +53 -0
  1810. data/ext/v8/upstream/scons/engine/SCons/Tool/gcc.py +80 -0
  1811. data/ext/v8/upstream/scons/engine/SCons/Tool/gfortran.py +64 -0
  1812. data/ext/v8/upstream/scons/engine/SCons/Tool/gnulink.py +63 -0
  1813. data/ext/v8/upstream/scons/engine/SCons/Tool/gs.py +81 -0
  1814. data/ext/v8/upstream/scons/engine/SCons/Tool/hpc++.py +85 -0
  1815. data/ext/v8/upstream/scons/engine/SCons/Tool/hpcc.py +53 -0
  1816. data/ext/v8/upstream/scons/engine/SCons/Tool/hplink.py +77 -0
  1817. data/ext/v8/upstream/scons/engine/SCons/Tool/icc.py +59 -0
  1818. data/ext/v8/upstream/scons/engine/SCons/Tool/icl.py +52 -0
  1819. data/ext/v8/upstream/scons/engine/SCons/Tool/ifl.py +72 -0
  1820. data/ext/v8/upstream/scons/engine/SCons/Tool/ifort.py +90 -0
  1821. data/ext/v8/upstream/scons/engine/SCons/Tool/ilink.py +59 -0
  1822. data/ext/v8/upstream/scons/engine/SCons/Tool/ilink32.py +60 -0
  1823. data/ext/v8/upstream/scons/engine/SCons/Tool/install.py +229 -0
  1824. data/ext/v8/upstream/scons/engine/SCons/Tool/intelc.py +490 -0
  1825. data/ext/v8/upstream/scons/engine/SCons/Tool/ipkg.py +71 -0
  1826. data/ext/v8/upstream/scons/engine/SCons/Tool/jar.py +110 -0
  1827. data/ext/v8/upstream/scons/engine/SCons/Tool/javac.py +234 -0
  1828. data/ext/v8/upstream/scons/engine/SCons/Tool/javah.py +138 -0
  1829. data/ext/v8/upstream/scons/engine/SCons/Tool/latex.py +79 -0
  1830. data/ext/v8/upstream/scons/engine/SCons/Tool/lex.py +99 -0
  1831. data/ext/v8/upstream/scons/engine/SCons/Tool/link.py +121 -0
  1832. data/ext/v8/upstream/scons/engine/SCons/Tool/linkloc.py +112 -0
  1833. data/ext/v8/upstream/scons/engine/SCons/Tool/m4.py +63 -0
  1834. data/ext/v8/upstream/scons/engine/SCons/Tool/masm.py +77 -0
  1835. data/ext/v8/upstream/scons/engine/SCons/Tool/midl.py +90 -0
  1836. data/ext/v8/upstream/scons/engine/SCons/Tool/mingw.py +159 -0
  1837. data/ext/v8/upstream/scons/engine/SCons/Tool/mslib.py +64 -0
  1838. data/ext/v8/upstream/scons/engine/SCons/Tool/mslink.py +266 -0
  1839. data/ext/v8/upstream/scons/engine/SCons/Tool/mssdk.py +50 -0
  1840. data/ext/v8/upstream/scons/engine/SCons/Tool/msvc.py +269 -0
  1841. data/ext/v8/upstream/scons/engine/SCons/Tool/msvs.py +1439 -0
  1842. data/ext/v8/upstream/scons/engine/SCons/Tool/mwcc.py +208 -0
  1843. data/ext/v8/upstream/scons/engine/SCons/Tool/mwld.py +107 -0
  1844. data/ext/v8/upstream/scons/engine/SCons/Tool/nasm.py +72 -0
  1845. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/__init__.py +314 -0
  1846. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/ipk.py +185 -0
  1847. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/msi.py +526 -0
  1848. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/rpm.py +367 -0
  1849. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/src_tarbz2.py +43 -0
  1850. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/src_targz.py +43 -0
  1851. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/src_zip.py +43 -0
  1852. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/tarbz2.py +44 -0
  1853. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/targz.py +44 -0
  1854. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/zip.py +44 -0
  1855. data/ext/v8/upstream/scons/engine/SCons/Tool/pdf.py +78 -0
  1856. data/ext/v8/upstream/scons/engine/SCons/Tool/pdflatex.py +83 -0
  1857. data/ext/v8/upstream/scons/engine/SCons/Tool/pdftex.py +108 -0
  1858. data/ext/v8/upstream/scons/engine/SCons/Tool/qt.py +336 -0
  1859. data/ext/v8/upstream/scons/engine/SCons/Tool/rmic.py +121 -0
  1860. data/ext/v8/upstream/scons/engine/SCons/Tool/rpcgen.py +70 -0
  1861. data/ext/v8/upstream/scons/engine/SCons/Tool/rpm.py +132 -0
  1862. data/ext/v8/upstream/scons/engine/SCons/Tool/sgiar.py +68 -0
  1863. data/ext/v8/upstream/scons/engine/SCons/Tool/sgic++.py +58 -0
  1864. data/ext/v8/upstream/scons/engine/SCons/Tool/sgicc.py +53 -0
  1865. data/ext/v8/upstream/scons/engine/SCons/Tool/sgilink.py +63 -0
  1866. data/ext/v8/upstream/scons/engine/SCons/Tool/sunar.py +67 -0
  1867. data/ext/v8/upstream/scons/engine/SCons/Tool/sunc++.py +142 -0
  1868. data/ext/v8/upstream/scons/engine/SCons/Tool/suncc.py +58 -0
  1869. data/ext/v8/upstream/scons/engine/SCons/Tool/sunf77.py +63 -0
  1870. data/ext/v8/upstream/scons/engine/SCons/Tool/sunf90.py +64 -0
  1871. data/ext/v8/upstream/scons/engine/SCons/Tool/sunf95.py +64 -0
  1872. data/ext/v8/upstream/scons/engine/SCons/Tool/sunlink.py +77 -0
  1873. data/ext/v8/upstream/scons/engine/SCons/Tool/swig.py +186 -0
  1874. data/ext/v8/upstream/scons/engine/SCons/Tool/tar.py +73 -0
  1875. data/ext/v8/upstream/scons/engine/SCons/Tool/tex.py +805 -0
  1876. data/ext/v8/upstream/scons/engine/SCons/Tool/textfile.py +175 -0
  1877. data/ext/v8/upstream/scons/engine/SCons/Tool/tlib.py +53 -0
  1878. data/ext/v8/upstream/scons/engine/SCons/Tool/wix.py +100 -0
  1879. data/ext/v8/upstream/scons/engine/SCons/Tool/yacc.py +131 -0
  1880. data/ext/v8/upstream/scons/engine/SCons/Tool/zip.py +100 -0
  1881. data/ext/v8/upstream/scons/engine/SCons/Util.py +1645 -0
  1882. data/ext/v8/upstream/scons/engine/SCons/Variables/BoolVariable.py +91 -0
  1883. data/ext/v8/upstream/scons/engine/SCons/Variables/EnumVariable.py +107 -0
  1884. data/ext/v8/upstream/scons/engine/SCons/Variables/ListVariable.py +139 -0
  1885. data/ext/v8/upstream/scons/engine/SCons/Variables/PackageVariable.py +109 -0
  1886. data/ext/v8/upstream/scons/engine/SCons/Variables/PathVariable.py +147 -0
  1887. data/ext/v8/upstream/scons/engine/SCons/Variables/__init__.py +317 -0
  1888. data/ext/v8/upstream/scons/engine/SCons/Warnings.py +228 -0
  1889. data/ext/v8/upstream/scons/engine/SCons/__init__.py +49 -0
  1890. data/ext/v8/upstream/scons/engine/SCons/compat/__init__.py +302 -0
  1891. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_UserString.py +98 -0
  1892. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_hashlib.py +91 -0
  1893. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_itertools.py +124 -0
  1894. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_optparse.py +1725 -0
  1895. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_sets.py +583 -0
  1896. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_sets15.py +176 -0
  1897. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_shlex.py +325 -0
  1898. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_subprocess.py +1296 -0
  1899. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_textwrap.py +382 -0
  1900. data/ext/v8/upstream/scons/engine/SCons/compat/builtins.py +187 -0
  1901. data/ext/v8/upstream/scons/engine/SCons/cpp.py +598 -0
  1902. data/ext/v8/upstream/scons/engine/SCons/dblite.py +248 -0
  1903. data/ext/v8/upstream/scons/engine/SCons/exitfuncs.py +77 -0
  1904. data/ext/v8/upstream/scons/os_spawnv_fix.diff +83 -0
  1905. data/ext/v8/upstream/scons/scons-time.1 +1017 -0
  1906. data/ext/v8/upstream/scons/scons.1 +15179 -0
  1907. data/ext/v8/upstream/scons/sconsign.1 +208 -0
  1908. data/ext/v8/upstream/scons/script/scons +184 -0
  1909. data/ext/v8/upstream/scons/script/scons-time +1529 -0
  1910. data/ext/v8/upstream/scons/script/scons.bat +31 -0
  1911. data/ext/v8/upstream/scons/script/sconsign +508 -0
  1912. data/ext/v8/upstream/scons/setup.cfg +6 -0
  1913. data/ext/v8/upstream/scons/setup.py +427 -0
  1914. data/ext/v8/v8.cpp +41 -0
  1915. data/ext/v8/v8_array.cpp +50 -0
  1916. data/ext/v8/v8_array.h +8 -0
  1917. data/ext/v8/v8_callbacks.cpp +121 -0
  1918. data/ext/v8/v8_callbacks.h +8 -0
  1919. data/ext/v8/v8_cxt.cpp +92 -0
  1920. data/ext/v8/v8_cxt.h +6 -0
  1921. data/ext/v8/v8_date.cpp +35 -0
  1922. data/ext/v8/v8_date.h +6 -0
  1923. data/ext/v8/v8_exception.cpp +128 -0
  1924. data/ext/v8/v8_exception.h +11 -0
  1925. data/ext/v8/v8_external.cpp +57 -0
  1926. data/ext/v8/v8_external.h +9 -0
  1927. data/ext/v8/v8_func.cpp +66 -0
  1928. data/ext/v8/v8_func.h +12 -0
  1929. data/ext/v8/v8_locker.cpp +41 -0
  1930. data/ext/v8/v8_locker.h +6 -0
  1931. data/ext/v8/v8_msg.cpp +68 -0
  1932. data/ext/v8/v8_msg.h +10 -0
  1933. data/ext/v8/v8_obj.cpp +96 -0
  1934. data/ext/v8/v8_obj.h +11 -0
  1935. data/ext/v8/v8_ref.cpp +37 -0
  1936. data/ext/v8/v8_ref.h +28 -0
  1937. data/ext/v8/v8_script.cpp +36 -0
  1938. data/ext/v8/v8_script.h +8 -0
  1939. data/ext/v8/v8_str.cpp +52 -0
  1940. data/ext/v8/v8_str.h +9 -0
  1941. data/ext/v8/v8_template.cpp +329 -0
  1942. data/ext/v8/v8_template.h +8 -0
  1943. data/ext/v8/v8_try_catch.cpp +99 -0
  1944. data/ext/v8/v8_try_catch.h +5 -0
  1945. data/ext/v8/v8_value.cpp +167 -0
  1946. data/ext/v8/v8_value.h +10 -0
  1947. data/lib/v8.rb +16 -0
  1948. data/lib/v8/access.rb +87 -0
  1949. data/lib/v8/array.rb +17 -0
  1950. data/lib/v8/cli.rb +131 -0
  1951. data/lib/v8/context.rb +88 -0
  1952. data/lib/v8/error.rb +129 -0
  1953. data/lib/v8/function.rb +28 -0
  1954. data/lib/v8/object.rb +69 -0
  1955. data/lib/v8/portal.rb +327 -0
  1956. data/lib/v8/portal/functions.rb +45 -0
  1957. data/lib/v8/tap.rb +9 -0
  1958. data/lib/v8/version.rb +3 -0
  1959. data/spec/ext/cxt_spec.rb +12 -0
  1960. data/spec/ext/func_spec.rb +49 -0
  1961. data/spec/ext/try_catch_spec.rb +32 -0
  1962. data/spec/redjs_helper.rb +3 -0
  1963. data/spec/spec_helper.rb +8 -0
  1964. data/spec/v8/error_spec.rb +131 -0
  1965. data/therubyracer-heroku.gemspec +24 -0
  1966. metadata +2061 -0
@@ -0,0 +1,3270 @@
1
+ // Copyright 2010 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
+ #if defined(V8_TARGET_ARCH_X64)
31
+
32
+ #include "codegen-inl.h"
33
+ #include "compiler.h"
34
+ #include "debug.h"
35
+ #include "full-codegen.h"
36
+ #include "parser.h"
37
+ #include "scopes.h"
38
+
39
+ namespace v8 {
40
+ namespace internal {
41
+
42
+ #define __ ACCESS_MASM(masm_)
43
+
44
+ // Generate code for a JS function. On entry to the function the receiver
45
+ // and arguments have been pushed on the stack left to right, with the
46
+ // return address on top of them. The actual argument count matches the
47
+ // formal parameter count expected by the function.
48
+ //
49
+ // The live registers are:
50
+ // o rdi: the JS function object being called (ie, ourselves)
51
+ // o rsi: our context
52
+ // o rbp: our caller's frame pointer
53
+ // o rsp: stack pointer (pointing to return address)
54
+ //
55
+ // The function builds a JS frame. Please see JavaScriptFrameConstants in
56
+ // frames-x64.h for its layout.
57
+ void FullCodeGenerator::Generate(CompilationInfo* info, Mode mode) {
58
+ ASSERT(info_ == NULL);
59
+ info_ = info;
60
+ SetFunctionPosition(function());
61
+ Comment cmnt(masm_, "[ function compiled by full code generator");
62
+
63
+ if (mode == PRIMARY) {
64
+ __ push(rbp); // Caller's frame pointer.
65
+ __ movq(rbp, rsp);
66
+ __ push(rsi); // Callee's context.
67
+ __ push(rdi); // Callee's JS Function.
68
+
69
+ { Comment cmnt(masm_, "[ Allocate locals");
70
+ int locals_count = scope()->num_stack_slots();
71
+ if (locals_count == 1) {
72
+ __ PushRoot(Heap::kUndefinedValueRootIndex);
73
+ } else if (locals_count > 1) {
74
+ __ LoadRoot(rdx, Heap::kUndefinedValueRootIndex);
75
+ for (int i = 0; i < locals_count; i++) {
76
+ __ push(rdx);
77
+ }
78
+ }
79
+ }
80
+
81
+ bool function_in_register = true;
82
+
83
+ // Possibly allocate a local context.
84
+ int heap_slots = scope()->num_heap_slots() - Context::MIN_CONTEXT_SLOTS;
85
+ if (heap_slots > 0) {
86
+ Comment cmnt(masm_, "[ Allocate local context");
87
+ // Argument to NewContext is the function, which is still in rdi.
88
+ __ push(rdi);
89
+ if (heap_slots <= FastNewContextStub::kMaximumSlots) {
90
+ FastNewContextStub stub(heap_slots);
91
+ __ CallStub(&stub);
92
+ } else {
93
+ __ CallRuntime(Runtime::kNewContext, 1);
94
+ }
95
+ function_in_register = false;
96
+ // Context is returned in both rax and rsi. It replaces the context
97
+ // passed to us. It's saved in the stack and kept live in rsi.
98
+ __ movq(Operand(rbp, StandardFrameConstants::kContextOffset), rsi);
99
+
100
+ // Copy any necessary parameters into the context.
101
+ int num_parameters = scope()->num_parameters();
102
+ for (int i = 0; i < num_parameters; i++) {
103
+ Slot* slot = scope()->parameter(i)->slot();
104
+ if (slot != NULL && slot->type() == Slot::CONTEXT) {
105
+ int parameter_offset = StandardFrameConstants::kCallerSPOffset +
106
+ (num_parameters - 1 - i) * kPointerSize;
107
+ // Load parameter from stack.
108
+ __ movq(rax, Operand(rbp, parameter_offset));
109
+ // Store it in the context.
110
+ int context_offset = Context::SlotOffset(slot->index());
111
+ __ movq(Operand(rsi, context_offset), rax);
112
+ // Update the write barrier. This clobbers all involved
113
+ // registers, so we have use a third register to avoid
114
+ // clobbering rsi.
115
+ __ movq(rcx, rsi);
116
+ __ RecordWrite(rcx, context_offset, rax, rbx);
117
+ }
118
+ }
119
+ }
120
+
121
+ // Possibly allocate an arguments object.
122
+ Variable* arguments = scope()->arguments()->AsVariable();
123
+ if (arguments != NULL) {
124
+ // Arguments object must be allocated after the context object, in
125
+ // case the "arguments" or ".arguments" variables are in the context.
126
+ Comment cmnt(masm_, "[ Allocate arguments object");
127
+ if (function_in_register) {
128
+ __ push(rdi);
129
+ } else {
130
+ __ push(Operand(rbp, JavaScriptFrameConstants::kFunctionOffset));
131
+ }
132
+ // The receiver is just before the parameters on the caller's stack.
133
+ int offset = scope()->num_parameters() * kPointerSize;
134
+ __ lea(rdx,
135
+ Operand(rbp, StandardFrameConstants::kCallerSPOffset + offset));
136
+ __ push(rdx);
137
+ __ Push(Smi::FromInt(scope()->num_parameters()));
138
+ // Arguments to ArgumentsAccessStub:
139
+ // function, receiver address, parameter count.
140
+ // The stub will rewrite receiver and parameter count if the previous
141
+ // stack frame was an arguments adapter frame.
142
+ ArgumentsAccessStub stub(ArgumentsAccessStub::NEW_OBJECT);
143
+ __ CallStub(&stub);
144
+ // Store new arguments object in both "arguments" and ".arguments" slots.
145
+ __ movq(rcx, rax);
146
+ Move(arguments->slot(), rax, rbx, rdx);
147
+ Slot* dot_arguments_slot =
148
+ scope()->arguments_shadow()->AsVariable()->slot();
149
+ Move(dot_arguments_slot, rcx, rbx, rdx);
150
+ }
151
+ }
152
+
153
+ { Comment cmnt(masm_, "[ Declarations");
154
+ // For named function expressions, declare the function name as a
155
+ // constant.
156
+ if (scope()->is_function_scope() && scope()->function() != NULL) {
157
+ EmitDeclaration(scope()->function(), Variable::CONST, NULL);
158
+ }
159
+ // Visit all the explicit declarations unless there is an illegal
160
+ // redeclaration.
161
+ if (scope()->HasIllegalRedeclaration()) {
162
+ scope()->VisitIllegalRedeclaration(this);
163
+ } else {
164
+ VisitDeclarations(scope()->declarations());
165
+ }
166
+ }
167
+
168
+ { Comment cmnt(masm_, "[ Stack check");
169
+ Label ok;
170
+ __ CompareRoot(rsp, Heap::kStackLimitRootIndex);
171
+ __ j(above_equal, &ok);
172
+ StackCheckStub stub;
173
+ __ CallStub(&stub);
174
+ __ bind(&ok);
175
+ }
176
+
177
+ if (FLAG_trace) {
178
+ __ CallRuntime(Runtime::kTraceEnter, 0);
179
+ }
180
+
181
+ { Comment cmnt(masm_, "[ Body");
182
+ ASSERT(loop_depth() == 0);
183
+ VisitStatements(function()->body());
184
+ ASSERT(loop_depth() == 0);
185
+ }
186
+
187
+ { Comment cmnt(masm_, "[ return <undefined>;");
188
+ // Emit a 'return undefined' in case control fell off the end of the body.
189
+ __ LoadRoot(rax, Heap::kUndefinedValueRootIndex);
190
+ EmitReturnSequence();
191
+ }
192
+ }
193
+
194
+
195
+ void FullCodeGenerator::EmitReturnSequence() {
196
+ Comment cmnt(masm_, "[ Return sequence");
197
+ if (return_label_.is_bound()) {
198
+ __ jmp(&return_label_);
199
+ } else {
200
+ __ bind(&return_label_);
201
+ if (FLAG_trace) {
202
+ __ push(rax);
203
+ __ CallRuntime(Runtime::kTraceExit, 1);
204
+ }
205
+ #ifdef DEBUG
206
+ // Add a label for checking the size of the code used for returning.
207
+ Label check_exit_codesize;
208
+ masm_->bind(&check_exit_codesize);
209
+ #endif
210
+ CodeGenerator::RecordPositions(masm_, function()->end_position());
211
+ __ RecordJSReturn();
212
+ // Do not use the leave instruction here because it is too short to
213
+ // patch with the code required by the debugger.
214
+ __ movq(rsp, rbp);
215
+ __ pop(rbp);
216
+ __ ret((scope()->num_parameters() + 1) * kPointerSize);
217
+ #ifdef ENABLE_DEBUGGER_SUPPORT
218
+ // Add padding that will be overwritten by a debugger breakpoint. We
219
+ // have just generated "movq rsp, rbp; pop rbp; ret k" with length 7
220
+ // (3 + 1 + 3).
221
+ const int kPadding = Assembler::kJSReturnSequenceLength - 7;
222
+ for (int i = 0; i < kPadding; ++i) {
223
+ masm_->int3();
224
+ }
225
+ // Check that the size of the code used for returning matches what is
226
+ // expected by the debugger.
227
+ ASSERT_EQ(Assembler::kJSReturnSequenceLength,
228
+ masm_->SizeOfCodeGeneratedSince(&check_exit_codesize));
229
+ #endif
230
+ }
231
+ }
232
+
233
+
234
+ void FullCodeGenerator::Apply(Expression::Context context, Register reg) {
235
+ switch (context) {
236
+ case Expression::kUninitialized:
237
+ UNREACHABLE();
238
+
239
+ case Expression::kEffect:
240
+ // Nothing to do.
241
+ break;
242
+
243
+ case Expression::kValue:
244
+ // Move value into place.
245
+ switch (location_) {
246
+ case kAccumulator:
247
+ if (!reg.is(result_register())) __ movq(result_register(), reg);
248
+ break;
249
+ case kStack:
250
+ __ push(reg);
251
+ break;
252
+ }
253
+ break;
254
+
255
+ case Expression::kTest:
256
+ // For simplicity we always test the accumulator register.
257
+ if (!reg.is(result_register())) __ movq(result_register(), reg);
258
+ DoTest(context);
259
+ break;
260
+
261
+ case Expression::kValueTest:
262
+ case Expression::kTestValue:
263
+ if (!reg.is(result_register())) __ movq(result_register(), reg);
264
+ switch (location_) {
265
+ case kAccumulator:
266
+ break;
267
+ case kStack:
268
+ __ push(result_register());
269
+ break;
270
+ }
271
+ DoTest(context);
272
+ break;
273
+ }
274
+ }
275
+
276
+
277
+ void FullCodeGenerator::Apply(Expression::Context context, Slot* slot) {
278
+ switch (context) {
279
+ case Expression::kUninitialized:
280
+ UNREACHABLE();
281
+ case Expression::kEffect:
282
+ // Nothing to do.
283
+ break;
284
+ case Expression::kValue: {
285
+ MemOperand slot_operand = EmitSlotSearch(slot, result_register());
286
+ switch (location_) {
287
+ case kAccumulator:
288
+ __ movq(result_register(), slot_operand);
289
+ break;
290
+ case kStack:
291
+ // Memory operands can be pushed directly.
292
+ __ push(slot_operand);
293
+ break;
294
+ }
295
+ break;
296
+ }
297
+
298
+ case Expression::kTest:
299
+ Move(result_register(), slot);
300
+ DoTest(context);
301
+ break;
302
+
303
+ case Expression::kValueTest:
304
+ case Expression::kTestValue:
305
+ Move(result_register(), slot);
306
+ switch (location_) {
307
+ case kAccumulator:
308
+ break;
309
+ case kStack:
310
+ __ push(result_register());
311
+ break;
312
+ }
313
+ DoTest(context);
314
+ break;
315
+ }
316
+ }
317
+
318
+
319
+ void FullCodeGenerator::Apply(Expression::Context context, Literal* lit) {
320
+ switch (context) {
321
+ case Expression::kUninitialized:
322
+ UNREACHABLE();
323
+ case Expression::kEffect:
324
+ // Nothing to do.
325
+ break;
326
+ case Expression::kValue:
327
+ switch (location_) {
328
+ case kAccumulator:
329
+ __ Move(result_register(), lit->handle());
330
+ break;
331
+ case kStack:
332
+ __ Push(lit->handle());
333
+ break;
334
+ }
335
+ break;
336
+
337
+ case Expression::kTest:
338
+ __ Move(result_register(), lit->handle());
339
+ DoTest(context);
340
+ break;
341
+
342
+ case Expression::kValueTest:
343
+ case Expression::kTestValue:
344
+ __ Move(result_register(), lit->handle());
345
+ switch (location_) {
346
+ case kAccumulator:
347
+ break;
348
+ case kStack:
349
+ __ push(result_register());
350
+ break;
351
+ }
352
+ DoTest(context);
353
+ break;
354
+ }
355
+ }
356
+
357
+
358
+ void FullCodeGenerator::ApplyTOS(Expression::Context context) {
359
+ switch (context) {
360
+ case Expression::kUninitialized:
361
+ UNREACHABLE();
362
+
363
+ case Expression::kEffect:
364
+ __ Drop(1);
365
+ break;
366
+
367
+ case Expression::kValue:
368
+ switch (location_) {
369
+ case kAccumulator:
370
+ __ pop(result_register());
371
+ break;
372
+ case kStack:
373
+ break;
374
+ }
375
+ break;
376
+
377
+ case Expression::kTest:
378
+ __ pop(result_register());
379
+ DoTest(context);
380
+ break;
381
+
382
+ case Expression::kValueTest:
383
+ case Expression::kTestValue:
384
+ switch (location_) {
385
+ case kAccumulator:
386
+ __ pop(result_register());
387
+ break;
388
+ case kStack:
389
+ __ movq(result_register(), Operand(rsp, 0));
390
+ break;
391
+ }
392
+ DoTest(context);
393
+ break;
394
+ }
395
+ }
396
+
397
+
398
+ void FullCodeGenerator::DropAndApply(int count,
399
+ Expression::Context context,
400
+ Register reg) {
401
+ ASSERT(count > 0);
402
+ ASSERT(!reg.is(rsp));
403
+ switch (context) {
404
+ case Expression::kUninitialized:
405
+ UNREACHABLE();
406
+
407
+ case Expression::kEffect:
408
+ __ Drop(count);
409
+ break;
410
+
411
+ case Expression::kValue:
412
+ switch (location_) {
413
+ case kAccumulator:
414
+ __ Drop(count);
415
+ if (!reg.is(result_register())) __ movq(result_register(), reg);
416
+ break;
417
+ case kStack:
418
+ if (count > 1) __ Drop(count - 1);
419
+ __ movq(Operand(rsp, 0), reg);
420
+ break;
421
+ }
422
+ break;
423
+
424
+ case Expression::kTest:
425
+ __ Drop(count);
426
+ if (!reg.is(result_register())) __ movq(result_register(), reg);
427
+ DoTest(context);
428
+ break;
429
+
430
+ case Expression::kValueTest:
431
+ case Expression::kTestValue:
432
+ switch (location_) {
433
+ case kAccumulator:
434
+ __ Drop(count);
435
+ if (!reg.is(result_register())) __ movq(result_register(), reg);
436
+ break;
437
+ case kStack:
438
+ if (count > 1) __ Drop(count - 1);
439
+ __ movq(result_register(), reg);
440
+ __ movq(Operand(rsp, 0), result_register());
441
+ break;
442
+ }
443
+ DoTest(context);
444
+ break;
445
+ }
446
+ }
447
+
448
+
449
+ void FullCodeGenerator::PrepareTest(Label* materialize_true,
450
+ Label* materialize_false,
451
+ Label** if_true,
452
+ Label** if_false) {
453
+ switch (context_) {
454
+ case Expression::kUninitialized:
455
+ UNREACHABLE();
456
+ break;
457
+ case Expression::kEffect:
458
+ // In an effect context, the true and the false case branch to the
459
+ // same label.
460
+ *if_true = *if_false = materialize_true;
461
+ break;
462
+ case Expression::kValue:
463
+ *if_true = materialize_true;
464
+ *if_false = materialize_false;
465
+ break;
466
+ case Expression::kTest:
467
+ *if_true = true_label_;
468
+ *if_false = false_label_;
469
+ break;
470
+ case Expression::kValueTest:
471
+ *if_true = materialize_true;
472
+ *if_false = false_label_;
473
+ break;
474
+ case Expression::kTestValue:
475
+ *if_true = true_label_;
476
+ *if_false = materialize_false;
477
+ break;
478
+ }
479
+ }
480
+
481
+
482
+ void FullCodeGenerator::Apply(Expression::Context context,
483
+ Label* materialize_true,
484
+ Label* materialize_false) {
485
+ switch (context) {
486
+ case Expression::kUninitialized:
487
+
488
+ case Expression::kEffect:
489
+ ASSERT_EQ(materialize_true, materialize_false);
490
+ __ bind(materialize_true);
491
+ break;
492
+
493
+ case Expression::kValue: {
494
+ Label done;
495
+ switch (location_) {
496
+ case kAccumulator:
497
+ __ bind(materialize_true);
498
+ __ Move(result_register(), Factory::true_value());
499
+ __ jmp(&done);
500
+ __ bind(materialize_false);
501
+ __ Move(result_register(), Factory::false_value());
502
+ break;
503
+ case kStack:
504
+ __ bind(materialize_true);
505
+ __ Push(Factory::true_value());
506
+ __ jmp(&done);
507
+ __ bind(materialize_false);
508
+ __ Push(Factory::false_value());
509
+ break;
510
+ }
511
+ __ bind(&done);
512
+ break;
513
+ }
514
+
515
+ case Expression::kTest:
516
+ break;
517
+
518
+ case Expression::kValueTest:
519
+ __ bind(materialize_true);
520
+ switch (location_) {
521
+ case kAccumulator:
522
+ __ Move(result_register(), Factory::true_value());
523
+ break;
524
+ case kStack:
525
+ __ Push(Factory::true_value());
526
+ break;
527
+ }
528
+ __ jmp(true_label_);
529
+ break;
530
+
531
+ case Expression::kTestValue:
532
+ __ bind(materialize_false);
533
+ switch (location_) {
534
+ case kAccumulator:
535
+ __ Move(result_register(), Factory::false_value());
536
+ break;
537
+ case kStack:
538
+ __ Push(Factory::false_value());
539
+ break;
540
+ }
541
+ __ jmp(false_label_);
542
+ break;
543
+ }
544
+ }
545
+
546
+
547
+ // Convert constant control flow (true or false) to the result expected for
548
+ // a given expression context.
549
+ void FullCodeGenerator::Apply(Expression::Context context, bool flag) {
550
+ switch (context) {
551
+ case Expression::kUninitialized:
552
+ UNREACHABLE();
553
+ break;
554
+ case Expression::kEffect:
555
+ break;
556
+ case Expression::kValue: {
557
+ Heap::RootListIndex value_root_index =
558
+ flag ? Heap::kTrueValueRootIndex : Heap::kFalseValueRootIndex;
559
+ switch (location_) {
560
+ case kAccumulator:
561
+ __ LoadRoot(result_register(), value_root_index);
562
+ break;
563
+ case kStack:
564
+ __ PushRoot(value_root_index);
565
+ break;
566
+ }
567
+ break;
568
+ }
569
+ case Expression::kTest:
570
+ __ jmp(flag ? true_label_ : false_label_);
571
+ break;
572
+ case Expression::kTestValue:
573
+ switch (location_) {
574
+ case kAccumulator:
575
+ // If value is false it's needed.
576
+ if (!flag) __ LoadRoot(result_register(), Heap::kFalseValueRootIndex);
577
+ break;
578
+ case kStack:
579
+ // If value is false it's needed.
580
+ if (!flag) __ PushRoot(Heap::kFalseValueRootIndex);
581
+ break;
582
+ }
583
+ __ jmp(flag ? true_label_ : false_label_);
584
+ break;
585
+ case Expression::kValueTest:
586
+ switch (location_) {
587
+ case kAccumulator:
588
+ // If value is true it's needed.
589
+ if (flag) __ LoadRoot(result_register(), Heap::kTrueValueRootIndex);
590
+ break;
591
+ case kStack:
592
+ // If value is true it's needed.
593
+ if (flag) __ PushRoot(Heap::kTrueValueRootIndex);
594
+ break;
595
+ }
596
+ __ jmp(flag ? true_label_ : false_label_);
597
+ break;
598
+ }
599
+ }
600
+
601
+
602
+ void FullCodeGenerator::DoTest(Expression::Context context) {
603
+ // The value to test is in the accumulator. If the value might be needed
604
+ // on the stack (value/test and test/value contexts with a stack location
605
+ // desired), then the value is already duplicated on the stack.
606
+ ASSERT_NE(NULL, true_label_);
607
+ ASSERT_NE(NULL, false_label_);
608
+
609
+ // In value/test and test/value expression contexts with stack as the
610
+ // desired location, there is already an extra value on the stack. Use a
611
+ // label to discard it if unneeded.
612
+ Label discard;
613
+ Label* if_true = true_label_;
614
+ Label* if_false = false_label_;
615
+ switch (context) {
616
+ case Expression::kUninitialized:
617
+ case Expression::kEffect:
618
+ case Expression::kValue:
619
+ UNREACHABLE();
620
+ case Expression::kTest:
621
+ break;
622
+ case Expression::kValueTest:
623
+ switch (location_) {
624
+ case kAccumulator:
625
+ break;
626
+ case kStack:
627
+ if_false = &discard;
628
+ break;
629
+ }
630
+ break;
631
+ case Expression::kTestValue:
632
+ switch (location_) {
633
+ case kAccumulator:
634
+ break;
635
+ case kStack:
636
+ if_true = &discard;
637
+ break;
638
+ }
639
+ break;
640
+ }
641
+
642
+ // Emit the inlined tests assumed by the stub.
643
+ __ CompareRoot(result_register(), Heap::kUndefinedValueRootIndex);
644
+ __ j(equal, if_false);
645
+ __ CompareRoot(result_register(), Heap::kTrueValueRootIndex);
646
+ __ j(equal, if_true);
647
+ __ CompareRoot(result_register(), Heap::kFalseValueRootIndex);
648
+ __ j(equal, if_false);
649
+ ASSERT_EQ(0, kSmiTag);
650
+ __ SmiCompare(result_register(), Smi::FromInt(0));
651
+ __ j(equal, if_false);
652
+ Condition is_smi = masm_->CheckSmi(result_register());
653
+ __ j(is_smi, if_true);
654
+
655
+ // Save a copy of the value if it may be needed and isn't already saved.
656
+ switch (context) {
657
+ case Expression::kUninitialized:
658
+ case Expression::kEffect:
659
+ case Expression::kValue:
660
+ UNREACHABLE();
661
+ case Expression::kTest:
662
+ break;
663
+ case Expression::kValueTest:
664
+ switch (location_) {
665
+ case kAccumulator:
666
+ __ push(result_register());
667
+ break;
668
+ case kStack:
669
+ break;
670
+ }
671
+ break;
672
+ case Expression::kTestValue:
673
+ switch (location_) {
674
+ case kAccumulator:
675
+ __ push(result_register());
676
+ break;
677
+ case kStack:
678
+ break;
679
+ }
680
+ break;
681
+ }
682
+
683
+ // Call the ToBoolean stub for all other cases.
684
+ ToBooleanStub stub;
685
+ __ push(result_register());
686
+ __ CallStub(&stub);
687
+ __ testq(rax, rax);
688
+
689
+ // The stub returns nonzero for true. Complete based on the context.
690
+ switch (context) {
691
+ case Expression::kUninitialized:
692
+ case Expression::kEffect:
693
+ case Expression::kValue:
694
+ UNREACHABLE();
695
+
696
+ case Expression::kTest:
697
+ __ j(not_zero, true_label_);
698
+ __ jmp(false_label_);
699
+ break;
700
+
701
+ case Expression::kValueTest:
702
+ switch (location_) {
703
+ case kAccumulator:
704
+ __ j(zero, &discard);
705
+ __ pop(result_register());
706
+ __ jmp(true_label_);
707
+ break;
708
+ case kStack:
709
+ __ j(not_zero, true_label_);
710
+ break;
711
+ }
712
+ __ bind(&discard);
713
+ __ Drop(1);
714
+ __ jmp(false_label_);
715
+ break;
716
+
717
+ case Expression::kTestValue:
718
+ switch (location_) {
719
+ case kAccumulator:
720
+ __ j(not_zero, &discard);
721
+ __ pop(result_register());
722
+ __ jmp(false_label_);
723
+ break;
724
+ case kStack:
725
+ __ j(zero, false_label_);
726
+ break;
727
+ }
728
+ __ bind(&discard);
729
+ __ Drop(1);
730
+ __ jmp(true_label_);
731
+ break;
732
+ }
733
+ }
734
+
735
+
736
+ MemOperand FullCodeGenerator::EmitSlotSearch(Slot* slot, Register scratch) {
737
+ switch (slot->type()) {
738
+ case Slot::PARAMETER:
739
+ case Slot::LOCAL:
740
+ return Operand(rbp, SlotOffset(slot));
741
+ case Slot::CONTEXT: {
742
+ int context_chain_length =
743
+ scope()->ContextChainLength(slot->var()->scope());
744
+ __ LoadContext(scratch, context_chain_length);
745
+ return CodeGenerator::ContextOperand(scratch, slot->index());
746
+ }
747
+ case Slot::LOOKUP:
748
+ UNREACHABLE();
749
+ }
750
+ UNREACHABLE();
751
+ return Operand(rax, 0);
752
+ }
753
+
754
+
755
+ void FullCodeGenerator::Move(Register destination, Slot* source) {
756
+ MemOperand location = EmitSlotSearch(source, destination);
757
+ __ movq(destination, location);
758
+ }
759
+
760
+
761
+ void FullCodeGenerator::Move(Slot* dst,
762
+ Register src,
763
+ Register scratch1,
764
+ Register scratch2) {
765
+ ASSERT(dst->type() != Slot::LOOKUP); // Not yet implemented.
766
+ ASSERT(!scratch1.is(src) && !scratch2.is(src));
767
+ MemOperand location = EmitSlotSearch(dst, scratch1);
768
+ __ movq(location, src);
769
+ // Emit the write barrier code if the location is in the heap.
770
+ if (dst->type() == Slot::CONTEXT) {
771
+ int offset = FixedArray::kHeaderSize + dst->index() * kPointerSize;
772
+ __ RecordWrite(scratch1, offset, src, scratch2);
773
+ }
774
+ }
775
+
776
+
777
+ void FullCodeGenerator::EmitDeclaration(Variable* variable,
778
+ Variable::Mode mode,
779
+ FunctionLiteral* function) {
780
+ Comment cmnt(masm_, "[ Declaration");
781
+ ASSERT(variable != NULL); // Must have been resolved.
782
+ Slot* slot = variable->slot();
783
+ Property* prop = variable->AsProperty();
784
+
785
+ if (slot != NULL) {
786
+ switch (slot->type()) {
787
+ case Slot::PARAMETER:
788
+ case Slot::LOCAL:
789
+ if (mode == Variable::CONST) {
790
+ __ LoadRoot(kScratchRegister, Heap::kTheHoleValueRootIndex);
791
+ __ movq(Operand(rbp, SlotOffset(slot)), kScratchRegister);
792
+ } else if (function != NULL) {
793
+ VisitForValue(function, kAccumulator);
794
+ __ movq(Operand(rbp, SlotOffset(slot)), result_register());
795
+ }
796
+ break;
797
+
798
+ case Slot::CONTEXT:
799
+ // We bypass the general EmitSlotSearch because we know more about
800
+ // this specific context.
801
+
802
+ // The variable in the decl always resides in the current context.
803
+ ASSERT_EQ(0, scope()->ContextChainLength(variable->scope()));
804
+ if (FLAG_debug_code) {
805
+ // Check if we have the correct context pointer.
806
+ __ movq(rbx,
807
+ CodeGenerator::ContextOperand(rsi, Context::FCONTEXT_INDEX));
808
+ __ cmpq(rbx, rsi);
809
+ __ Check(equal, "Unexpected declaration in current context.");
810
+ }
811
+ if (mode == Variable::CONST) {
812
+ __ LoadRoot(kScratchRegister, Heap::kTheHoleValueRootIndex);
813
+ __ movq(CodeGenerator::ContextOperand(rsi, slot->index()),
814
+ kScratchRegister);
815
+ // No write barrier since the hole value is in old space.
816
+ } else if (function != NULL) {
817
+ VisitForValue(function, kAccumulator);
818
+ __ movq(CodeGenerator::ContextOperand(rsi, slot->index()),
819
+ result_register());
820
+ int offset = Context::SlotOffset(slot->index());
821
+ __ movq(rbx, rsi);
822
+ __ RecordWrite(rbx, offset, result_register(), rcx);
823
+ }
824
+ break;
825
+
826
+ case Slot::LOOKUP: {
827
+ __ push(rsi);
828
+ __ Push(variable->name());
829
+ // Declaration nodes are always introduced in one of two modes.
830
+ ASSERT(mode == Variable::VAR || mode == Variable::CONST);
831
+ PropertyAttributes attr = (mode == Variable::VAR) ? NONE : READ_ONLY;
832
+ __ Push(Smi::FromInt(attr));
833
+ // Push initial value, if any.
834
+ // Note: For variables we must not push an initial value (such as
835
+ // 'undefined') because we may have a (legal) redeclaration and we
836
+ // must not destroy the current value.
837
+ if (mode == Variable::CONST) {
838
+ __ PushRoot(Heap::kTheHoleValueRootIndex);
839
+ } else if (function != NULL) {
840
+ VisitForValue(function, kStack);
841
+ } else {
842
+ __ Push(Smi::FromInt(0)); // no initial value!
843
+ }
844
+ __ CallRuntime(Runtime::kDeclareContextSlot, 4);
845
+ break;
846
+ }
847
+ }
848
+
849
+ } else if (prop != NULL) {
850
+ if (function != NULL || mode == Variable::CONST) {
851
+ // We are declaring a function or constant that rewrites to a
852
+ // property. Use (keyed) IC to set the initial value.
853
+ VisitForValue(prop->obj(), kStack);
854
+ if (function != NULL) {
855
+ VisitForValue(prop->key(), kStack);
856
+ VisitForValue(function, kAccumulator);
857
+ __ pop(rcx);
858
+ } else {
859
+ VisitForValue(prop->key(), kAccumulator);
860
+ __ movq(rcx, result_register());
861
+ __ LoadRoot(result_register(), Heap::kTheHoleValueRootIndex);
862
+ }
863
+ __ pop(rdx);
864
+
865
+ Handle<Code> ic(Builtins::builtin(Builtins::KeyedStoreIC_Initialize));
866
+ __ call(ic, RelocInfo::CODE_TARGET);
867
+ // Absence of a test rax instruction following the call
868
+ // indicates that none of the load was inlined.
869
+ __ nop();
870
+ }
871
+ }
872
+ }
873
+
874
+
875
+ void FullCodeGenerator::VisitDeclaration(Declaration* decl) {
876
+ EmitDeclaration(decl->proxy()->var(), decl->mode(), decl->fun());
877
+ }
878
+
879
+
880
+ void FullCodeGenerator::DeclareGlobals(Handle<FixedArray> pairs) {
881
+ // Call the runtime to declare the globals.
882
+ __ push(rsi); // The context is the first argument.
883
+ __ Push(pairs);
884
+ __ Push(Smi::FromInt(is_eval() ? 1 : 0));
885
+ __ CallRuntime(Runtime::kDeclareGlobals, 3);
886
+ // Return value is ignored.
887
+ }
888
+
889
+
890
+ void FullCodeGenerator::VisitSwitchStatement(SwitchStatement* stmt) {
891
+ Comment cmnt(masm_, "[ SwitchStatement");
892
+ Breakable nested_statement(this, stmt);
893
+ SetStatementPosition(stmt);
894
+ // Keep the switch value on the stack until a case matches.
895
+ VisitForValue(stmt->tag(), kStack);
896
+
897
+ ZoneList<CaseClause*>* clauses = stmt->cases();
898
+ CaseClause* default_clause = NULL; // Can occur anywhere in the list.
899
+
900
+ Label next_test; // Recycled for each test.
901
+ // Compile all the tests with branches to their bodies.
902
+ for (int i = 0; i < clauses->length(); i++) {
903
+ CaseClause* clause = clauses->at(i);
904
+ // The default is not a test, but remember it as final fall through.
905
+ if (clause->is_default()) {
906
+ default_clause = clause;
907
+ continue;
908
+ }
909
+
910
+ Comment cmnt(masm_, "[ Case comparison");
911
+ __ bind(&next_test);
912
+ next_test.Unuse();
913
+
914
+ // Compile the label expression.
915
+ VisitForValue(clause->label(), kAccumulator);
916
+
917
+ // Perform the comparison as if via '==='. The comparison stub expects
918
+ // the smi vs. smi case to be handled before it is called.
919
+ Label slow_case;
920
+ __ movq(rdx, Operand(rsp, 0)); // Switch value.
921
+ __ JumpIfNotBothSmi(rdx, rax, &slow_case);
922
+ __ SmiCompare(rdx, rax);
923
+ __ j(not_equal, &next_test);
924
+ __ Drop(1); // Switch value is no longer needed.
925
+ __ jmp(clause->body_target()->entry_label());
926
+
927
+ __ bind(&slow_case);
928
+ CompareStub stub(equal, true);
929
+ __ CallStub(&stub);
930
+ __ testq(rax, rax);
931
+ __ j(not_equal, &next_test);
932
+ __ Drop(1); // Switch value is no longer needed.
933
+ __ jmp(clause->body_target()->entry_label());
934
+ }
935
+
936
+ // Discard the test value and jump to the default if present, otherwise to
937
+ // the end of the statement.
938
+ __ bind(&next_test);
939
+ __ Drop(1); // Switch value is no longer needed.
940
+ if (default_clause == NULL) {
941
+ __ jmp(nested_statement.break_target());
942
+ } else {
943
+ __ jmp(default_clause->body_target()->entry_label());
944
+ }
945
+
946
+ // Compile all the case bodies.
947
+ for (int i = 0; i < clauses->length(); i++) {
948
+ Comment cmnt(masm_, "[ Case body");
949
+ CaseClause* clause = clauses->at(i);
950
+ __ bind(clause->body_target()->entry_label());
951
+ VisitStatements(clause->statements());
952
+ }
953
+
954
+ __ bind(nested_statement.break_target());
955
+ }
956
+
957
+
958
+ void FullCodeGenerator::VisitForInStatement(ForInStatement* stmt) {
959
+ Comment cmnt(masm_, "[ ForInStatement");
960
+ SetStatementPosition(stmt);
961
+
962
+ Label loop, exit;
963
+ ForIn loop_statement(this, stmt);
964
+ increment_loop_depth();
965
+
966
+ // Get the object to enumerate over. Both SpiderMonkey and JSC
967
+ // ignore null and undefined in contrast to the specification; see
968
+ // ECMA-262 section 12.6.4.
969
+ VisitForValue(stmt->enumerable(), kAccumulator);
970
+ __ CompareRoot(rax, Heap::kUndefinedValueRootIndex);
971
+ __ j(equal, &exit);
972
+ __ CompareRoot(rax, Heap::kNullValueRootIndex);
973
+ __ j(equal, &exit);
974
+
975
+ // Convert the object to a JS object.
976
+ Label convert, done_convert;
977
+ __ JumpIfSmi(rax, &convert);
978
+ __ CmpObjectType(rax, FIRST_JS_OBJECT_TYPE, rcx);
979
+ __ j(above_equal, &done_convert);
980
+ __ bind(&convert);
981
+ __ push(rax);
982
+ __ InvokeBuiltin(Builtins::TO_OBJECT, CALL_FUNCTION);
983
+ __ bind(&done_convert);
984
+ __ push(rax);
985
+
986
+ // TODO(kasperl): Check cache validity in generated code. This is a
987
+ // fast case for the JSObject::IsSimpleEnum cache validity
988
+ // checks. If we cannot guarantee cache validity, call the runtime
989
+ // system to check cache validity or get the property names in a
990
+ // fixed array.
991
+
992
+ // Get the set of properties to enumerate.
993
+ __ push(rax); // Duplicate the enumerable object on the stack.
994
+ __ CallRuntime(Runtime::kGetPropertyNamesFast, 1);
995
+
996
+ // If we got a map from the runtime call, we can do a fast
997
+ // modification check. Otherwise, we got a fixed array, and we have
998
+ // to do a slow check.
999
+ Label fixed_array;
1000
+ __ CompareRoot(FieldOperand(rax, HeapObject::kMapOffset),
1001
+ Heap::kMetaMapRootIndex);
1002
+ __ j(not_equal, &fixed_array);
1003
+
1004
+ // We got a map in register rax. Get the enumeration cache from it.
1005
+ __ movq(rcx, FieldOperand(rax, Map::kInstanceDescriptorsOffset));
1006
+ __ movq(rcx, FieldOperand(rcx, DescriptorArray::kEnumerationIndexOffset));
1007
+ __ movq(rdx, FieldOperand(rcx, DescriptorArray::kEnumCacheBridgeCacheOffset));
1008
+
1009
+ // Setup the four remaining stack slots.
1010
+ __ push(rax); // Map.
1011
+ __ push(rdx); // Enumeration cache.
1012
+ __ movq(rax, FieldOperand(rdx, FixedArray::kLengthOffset));
1013
+ __ push(rax); // Enumeration cache length (as smi).
1014
+ __ Push(Smi::FromInt(0)); // Initial index.
1015
+ __ jmp(&loop);
1016
+
1017
+ // We got a fixed array in register rax. Iterate through that.
1018
+ __ bind(&fixed_array);
1019
+ __ Push(Smi::FromInt(0)); // Map (0) - force slow check.
1020
+ __ push(rax);
1021
+ __ movq(rax, FieldOperand(rax, FixedArray::kLengthOffset));
1022
+ __ push(rax); // Fixed array length (as smi).
1023
+ __ Push(Smi::FromInt(0)); // Initial index.
1024
+
1025
+ // Generate code for doing the condition check.
1026
+ __ bind(&loop);
1027
+ __ movq(rax, Operand(rsp, 0 * kPointerSize)); // Get the current index.
1028
+ __ cmpq(rax, Operand(rsp, 1 * kPointerSize)); // Compare to the array length.
1029
+ __ j(above_equal, loop_statement.break_target());
1030
+
1031
+ // Get the current entry of the array into register rbx.
1032
+ __ movq(rbx, Operand(rsp, 2 * kPointerSize));
1033
+ SmiIndex index = __ SmiToIndex(rax, rax, kPointerSizeLog2);
1034
+ __ movq(rbx, FieldOperand(rbx,
1035
+ index.reg,
1036
+ index.scale,
1037
+ FixedArray::kHeaderSize));
1038
+
1039
+ // Get the expected map from the stack or a zero map in the
1040
+ // permanent slow case into register rdx.
1041
+ __ movq(rdx, Operand(rsp, 3 * kPointerSize));
1042
+
1043
+ // Check if the expected map still matches that of the enumerable.
1044
+ // If not, we have to filter the key.
1045
+ Label update_each;
1046
+ __ movq(rcx, Operand(rsp, 4 * kPointerSize));
1047
+ __ cmpq(rdx, FieldOperand(rcx, HeapObject::kMapOffset));
1048
+ __ j(equal, &update_each);
1049
+
1050
+ // Convert the entry to a string or null if it isn't a property
1051
+ // anymore. If the property has been removed while iterating, we
1052
+ // just skip it.
1053
+ __ push(rcx); // Enumerable.
1054
+ __ push(rbx); // Current entry.
1055
+ __ InvokeBuiltin(Builtins::FILTER_KEY, CALL_FUNCTION);
1056
+ __ CompareRoot(rax, Heap::kNullValueRootIndex);
1057
+ __ j(equal, loop_statement.continue_target());
1058
+ __ movq(rbx, rax);
1059
+
1060
+ // Update the 'each' property or variable from the possibly filtered
1061
+ // entry in register rbx.
1062
+ __ bind(&update_each);
1063
+ __ movq(result_register(), rbx);
1064
+ // Perform the assignment as if via '='.
1065
+ EmitAssignment(stmt->each());
1066
+
1067
+ // Generate code for the body of the loop.
1068
+ Label stack_limit_hit, stack_check_done;
1069
+ Visit(stmt->body());
1070
+
1071
+ __ StackLimitCheck(&stack_limit_hit);
1072
+ __ bind(&stack_check_done);
1073
+
1074
+ // Generate code for going to the next element by incrementing the
1075
+ // index (smi) stored on top of the stack.
1076
+ __ bind(loop_statement.continue_target());
1077
+ __ SmiAddConstant(Operand(rsp, 0 * kPointerSize), Smi::FromInt(1));
1078
+ __ jmp(&loop);
1079
+
1080
+ // Slow case for the stack limit check.
1081
+ StackCheckStub stack_check_stub;
1082
+ __ bind(&stack_limit_hit);
1083
+ __ CallStub(&stack_check_stub);
1084
+ __ jmp(&stack_check_done);
1085
+
1086
+ // Remove the pointers stored on the stack.
1087
+ __ bind(loop_statement.break_target());
1088
+ __ addq(rsp, Immediate(5 * kPointerSize));
1089
+
1090
+ // Exit and decrement the loop depth.
1091
+ __ bind(&exit);
1092
+ decrement_loop_depth();
1093
+ }
1094
+
1095
+
1096
+ void FullCodeGenerator::EmitNewClosure(Handle<SharedFunctionInfo> info) {
1097
+ // Use the fast case closure allocation code that allocates in new
1098
+ // space for nested functions that don't need literals cloning.
1099
+ if (scope()->is_function_scope() && info->num_literals() == 0) {
1100
+ FastNewClosureStub stub;
1101
+ __ Push(info);
1102
+ __ CallStub(&stub);
1103
+ } else {
1104
+ __ push(rsi);
1105
+ __ Push(info);
1106
+ __ CallRuntime(Runtime::kNewClosure, 2);
1107
+ }
1108
+ Apply(context_, rax);
1109
+ }
1110
+
1111
+
1112
+ void FullCodeGenerator::VisitVariableProxy(VariableProxy* expr) {
1113
+ Comment cmnt(masm_, "[ VariableProxy");
1114
+ EmitVariableLoad(expr->var(), context_);
1115
+ }
1116
+
1117
+
1118
+ void FullCodeGenerator::EmitVariableLoad(Variable* var,
1119
+ Expression::Context context) {
1120
+ // Four cases: non-this global variables, lookup slots, all other
1121
+ // types of slots, and parameters that rewrite to explicit property
1122
+ // accesses on the arguments object.
1123
+ Slot* slot = var->slot();
1124
+ Property* property = var->AsProperty();
1125
+
1126
+ if (var->is_global() && !var->is_this()) {
1127
+ Comment cmnt(masm_, "Global variable");
1128
+ // Use inline caching. Variable name is passed in rcx and the global
1129
+ // object on the stack.
1130
+ __ Move(rcx, var->name());
1131
+ __ movq(rax, CodeGenerator::GlobalObject());
1132
+ Handle<Code> ic(Builtins::builtin(Builtins::LoadIC_Initialize));
1133
+ __ Call(ic, RelocInfo::CODE_TARGET_CONTEXT);
1134
+ // A test rax instruction following the call is used by the IC to
1135
+ // indicate that the inobject property case was inlined. Ensure there
1136
+ // is no test rax instruction here.
1137
+ __ nop();
1138
+ Apply(context, rax);
1139
+
1140
+ } else if (slot != NULL && slot->type() == Slot::LOOKUP) {
1141
+ Comment cmnt(masm_, "Lookup slot");
1142
+ __ push(rsi); // Context.
1143
+ __ Push(var->name());
1144
+ __ CallRuntime(Runtime::kLoadContextSlot, 2);
1145
+ Apply(context, rax);
1146
+
1147
+ } else if (slot != NULL) {
1148
+ Comment cmnt(masm_, (slot->type() == Slot::CONTEXT)
1149
+ ? "Context slot"
1150
+ : "Stack slot");
1151
+ if (var->mode() == Variable::CONST) {
1152
+ // Constants may be the hole value if they have not been initialized.
1153
+ // Unhole them.
1154
+ Label done;
1155
+ MemOperand slot_operand = EmitSlotSearch(slot, rax);
1156
+ __ movq(rax, slot_operand);
1157
+ __ CompareRoot(rax, Heap::kTheHoleValueRootIndex);
1158
+ __ j(not_equal, &done);
1159
+ __ LoadRoot(rax, Heap::kUndefinedValueRootIndex);
1160
+ __ bind(&done);
1161
+ Apply(context, rax);
1162
+ } else {
1163
+ Apply(context, slot);
1164
+ }
1165
+
1166
+ } else {
1167
+ Comment cmnt(masm_, "Rewritten parameter");
1168
+ ASSERT_NOT_NULL(property);
1169
+ // Rewritten parameter accesses are of the form "slot[literal]".
1170
+
1171
+ // Assert that the object is in a slot.
1172
+ Variable* object_var = property->obj()->AsVariableProxy()->AsVariable();
1173
+ ASSERT_NOT_NULL(object_var);
1174
+ Slot* object_slot = object_var->slot();
1175
+ ASSERT_NOT_NULL(object_slot);
1176
+
1177
+ // Load the object.
1178
+ MemOperand object_loc = EmitSlotSearch(object_slot, rax);
1179
+ __ movq(rdx, object_loc);
1180
+
1181
+ // Assert that the key is a smi.
1182
+ Literal* key_literal = property->key()->AsLiteral();
1183
+ ASSERT_NOT_NULL(key_literal);
1184
+ ASSERT(key_literal->handle()->IsSmi());
1185
+
1186
+ // Load the key.
1187
+ __ Move(rax, key_literal->handle());
1188
+
1189
+ // Do a keyed property load.
1190
+ Handle<Code> ic(Builtins::builtin(Builtins::KeyedLoadIC_Initialize));
1191
+ __ call(ic, RelocInfo::CODE_TARGET);
1192
+ // Notice: We must not have a "test rax, ..." instruction after the
1193
+ // call. It is treated specially by the LoadIC code.
1194
+ __ nop();
1195
+ Apply(context, rax);
1196
+ }
1197
+ }
1198
+
1199
+
1200
+ void FullCodeGenerator::VisitRegExpLiteral(RegExpLiteral* expr) {
1201
+ Comment cmnt(masm_, "[ RegExpLiteral");
1202
+ Label done;
1203
+ // Registers will be used as follows:
1204
+ // rdi = JS function.
1205
+ // rbx = literals array.
1206
+ // rax = regexp literal.
1207
+ __ movq(rdi, Operand(rbp, JavaScriptFrameConstants::kFunctionOffset));
1208
+ __ movq(rbx, FieldOperand(rdi, JSFunction::kLiteralsOffset));
1209
+ int literal_offset =
1210
+ FixedArray::kHeaderSize + expr->literal_index() * kPointerSize;
1211
+ __ movq(rax, FieldOperand(rbx, literal_offset));
1212
+ __ CompareRoot(rax, Heap::kUndefinedValueRootIndex);
1213
+ __ j(not_equal, &done);
1214
+ // Create regexp literal using runtime function
1215
+ // Result will be in rax.
1216
+ __ push(rbx);
1217
+ __ Push(Smi::FromInt(expr->literal_index()));
1218
+ __ Push(expr->pattern());
1219
+ __ Push(expr->flags());
1220
+ __ CallRuntime(Runtime::kMaterializeRegExpLiteral, 4);
1221
+ __ bind(&done);
1222
+ Apply(context_, rax);
1223
+ }
1224
+
1225
+
1226
+ void FullCodeGenerator::VisitObjectLiteral(ObjectLiteral* expr) {
1227
+ Comment cmnt(masm_, "[ ObjectLiteral");
1228
+ __ movq(rdi, Operand(rbp, JavaScriptFrameConstants::kFunctionOffset));
1229
+ __ push(FieldOperand(rdi, JSFunction::kLiteralsOffset));
1230
+ __ Push(Smi::FromInt(expr->literal_index()));
1231
+ __ Push(expr->constant_properties());
1232
+ __ Push(Smi::FromInt(expr->fast_elements() ? 1 : 0));
1233
+ if (expr->depth() > 1) {
1234
+ __ CallRuntime(Runtime::kCreateObjectLiteral, 4);
1235
+ } else {
1236
+ __ CallRuntime(Runtime::kCreateObjectLiteralShallow, 4);
1237
+ }
1238
+
1239
+ // If result_saved is true the result is on top of the stack. If
1240
+ // result_saved is false the result is in rax.
1241
+ bool result_saved = false;
1242
+
1243
+ for (int i = 0; i < expr->properties()->length(); i++) {
1244
+ ObjectLiteral::Property* property = expr->properties()->at(i);
1245
+ if (property->IsCompileTimeValue()) continue;
1246
+
1247
+ Literal* key = property->key();
1248
+ Expression* value = property->value();
1249
+ if (!result_saved) {
1250
+ __ push(rax); // Save result on the stack
1251
+ result_saved = true;
1252
+ }
1253
+ switch (property->kind()) {
1254
+ case ObjectLiteral::Property::CONSTANT:
1255
+ UNREACHABLE();
1256
+ case ObjectLiteral::Property::MATERIALIZED_LITERAL:
1257
+ ASSERT(!CompileTimeValue::IsCompileTimeValue(value));
1258
+ // Fall through.
1259
+ case ObjectLiteral::Property::COMPUTED:
1260
+ if (key->handle()->IsSymbol()) {
1261
+ VisitForValue(value, kAccumulator);
1262
+ __ Move(rcx, key->handle());
1263
+ __ movq(rdx, Operand(rsp, 0));
1264
+ Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Initialize));
1265
+ __ call(ic, RelocInfo::CODE_TARGET);
1266
+ __ nop();
1267
+ break;
1268
+ }
1269
+ // Fall through.
1270
+ case ObjectLiteral::Property::PROTOTYPE:
1271
+ __ push(Operand(rsp, 0)); // Duplicate receiver.
1272
+ VisitForValue(key, kStack);
1273
+ VisitForValue(value, kStack);
1274
+ __ CallRuntime(Runtime::kSetProperty, 3);
1275
+ break;
1276
+ case ObjectLiteral::Property::SETTER:
1277
+ case ObjectLiteral::Property::GETTER:
1278
+ __ push(Operand(rsp, 0)); // Duplicate receiver.
1279
+ VisitForValue(key, kStack);
1280
+ __ Push(property->kind() == ObjectLiteral::Property::SETTER ?
1281
+ Smi::FromInt(1) :
1282
+ Smi::FromInt(0));
1283
+ VisitForValue(value, kStack);
1284
+ __ CallRuntime(Runtime::kDefineAccessor, 4);
1285
+ break;
1286
+ }
1287
+ }
1288
+
1289
+ if (result_saved) {
1290
+ ApplyTOS(context_);
1291
+ } else {
1292
+ Apply(context_, rax);
1293
+ }
1294
+ }
1295
+
1296
+
1297
+ void FullCodeGenerator::VisitArrayLiteral(ArrayLiteral* expr) {
1298
+ Comment cmnt(masm_, "[ ArrayLiteral");
1299
+
1300
+ ZoneList<Expression*>* subexprs = expr->values();
1301
+ int length = subexprs->length();
1302
+
1303
+ __ movq(rbx, Operand(rbp, JavaScriptFrameConstants::kFunctionOffset));
1304
+ __ push(FieldOperand(rbx, JSFunction::kLiteralsOffset));
1305
+ __ Push(Smi::FromInt(expr->literal_index()));
1306
+ __ Push(expr->constant_elements());
1307
+ if (expr->depth() > 1) {
1308
+ __ CallRuntime(Runtime::kCreateArrayLiteral, 3);
1309
+ } else if (length > FastCloneShallowArrayStub::kMaximumLength) {
1310
+ __ CallRuntime(Runtime::kCreateArrayLiteralShallow, 3);
1311
+ } else {
1312
+ FastCloneShallowArrayStub stub(length);
1313
+ __ CallStub(&stub);
1314
+ }
1315
+
1316
+ bool result_saved = false; // Is the result saved to the stack?
1317
+
1318
+ // Emit code to evaluate all the non-constant subexpressions and to store
1319
+ // them into the newly cloned array.
1320
+ for (int i = 0; i < length; i++) {
1321
+ Expression* subexpr = subexprs->at(i);
1322
+ // If the subexpression is a literal or a simple materialized literal it
1323
+ // is already set in the cloned array.
1324
+ if (subexpr->AsLiteral() != NULL ||
1325
+ CompileTimeValue::IsCompileTimeValue(subexpr)) {
1326
+ continue;
1327
+ }
1328
+
1329
+ if (!result_saved) {
1330
+ __ push(rax);
1331
+ result_saved = true;
1332
+ }
1333
+ VisitForValue(subexpr, kAccumulator);
1334
+
1335
+ // Store the subexpression value in the array's elements.
1336
+ __ movq(rbx, Operand(rsp, 0)); // Copy of array literal.
1337
+ __ movq(rbx, FieldOperand(rbx, JSObject::kElementsOffset));
1338
+ int offset = FixedArray::kHeaderSize + (i * kPointerSize);
1339
+ __ movq(FieldOperand(rbx, offset), result_register());
1340
+
1341
+ // Update the write barrier for the array store.
1342
+ __ RecordWrite(rbx, offset, result_register(), rcx);
1343
+ }
1344
+
1345
+ if (result_saved) {
1346
+ ApplyTOS(context_);
1347
+ } else {
1348
+ Apply(context_, rax);
1349
+ }
1350
+ }
1351
+
1352
+
1353
+ void FullCodeGenerator::VisitAssignment(Assignment* expr) {
1354
+ Comment cmnt(masm_, "[ Assignment");
1355
+ // Invalid left-hand sides are rewritten to have a 'throw ReferenceError'
1356
+ // on the left-hand side.
1357
+ if (!expr->target()->IsValidLeftHandSide()) {
1358
+ VisitForEffect(expr->target());
1359
+ return;
1360
+ }
1361
+
1362
+ // Left-hand side can only be a property, a global or a (parameter or local)
1363
+ // slot. Variables with rewrite to .arguments are treated as KEYED_PROPERTY.
1364
+ enum LhsKind { VARIABLE, NAMED_PROPERTY, KEYED_PROPERTY };
1365
+ LhsKind assign_type = VARIABLE;
1366
+ Property* prop = expr->target()->AsProperty();
1367
+ if (prop != NULL) {
1368
+ assign_type =
1369
+ (prop->key()->IsPropertyName()) ? NAMED_PROPERTY : KEYED_PROPERTY;
1370
+ }
1371
+
1372
+ // Evaluate LHS expression.
1373
+ switch (assign_type) {
1374
+ case VARIABLE:
1375
+ // Nothing to do here.
1376
+ break;
1377
+ case NAMED_PROPERTY:
1378
+ if (expr->is_compound()) {
1379
+ // We need the receiver both on the stack and in the accumulator.
1380
+ VisitForValue(prop->obj(), kAccumulator);
1381
+ __ push(result_register());
1382
+ } else {
1383
+ VisitForValue(prop->obj(), kStack);
1384
+ }
1385
+ break;
1386
+ case KEYED_PROPERTY:
1387
+ if (expr->is_compound()) {
1388
+ VisitForValue(prop->obj(), kStack);
1389
+ VisitForValue(prop->key(), kAccumulator);
1390
+ __ movq(rdx, Operand(rsp, 0));
1391
+ __ push(rax);
1392
+ } else {
1393
+ VisitForValue(prop->obj(), kStack);
1394
+ VisitForValue(prop->key(), kStack);
1395
+ }
1396
+ break;
1397
+ }
1398
+
1399
+ // If we have a compound assignment: Get value of LHS expression and
1400
+ // store in on top of the stack.
1401
+ if (expr->is_compound()) {
1402
+ Location saved_location = location_;
1403
+ location_ = kStack;
1404
+ switch (assign_type) {
1405
+ case VARIABLE:
1406
+ EmitVariableLoad(expr->target()->AsVariableProxy()->var(),
1407
+ Expression::kValue);
1408
+ break;
1409
+ case NAMED_PROPERTY:
1410
+ EmitNamedPropertyLoad(prop);
1411
+ __ push(result_register());
1412
+ break;
1413
+ case KEYED_PROPERTY:
1414
+ EmitKeyedPropertyLoad(prop);
1415
+ __ push(result_register());
1416
+ break;
1417
+ }
1418
+ location_ = saved_location;
1419
+ }
1420
+
1421
+ // Evaluate RHS expression.
1422
+ Expression* rhs = expr->value();
1423
+ VisitForValue(rhs, kAccumulator);
1424
+
1425
+ // If we have a compound assignment: Apply operator.
1426
+ if (expr->is_compound()) {
1427
+ Location saved_location = location_;
1428
+ location_ = kAccumulator;
1429
+ EmitBinaryOp(expr->binary_op(), Expression::kValue);
1430
+ location_ = saved_location;
1431
+ }
1432
+
1433
+ // Record source position before possible IC call.
1434
+ SetSourcePosition(expr->position());
1435
+
1436
+ // Store the value.
1437
+ switch (assign_type) {
1438
+ case VARIABLE:
1439
+ EmitVariableAssignment(expr->target()->AsVariableProxy()->var(),
1440
+ expr->op(),
1441
+ context_);
1442
+ break;
1443
+ case NAMED_PROPERTY:
1444
+ EmitNamedPropertyAssignment(expr);
1445
+ break;
1446
+ case KEYED_PROPERTY:
1447
+ EmitKeyedPropertyAssignment(expr);
1448
+ break;
1449
+ }
1450
+ }
1451
+
1452
+
1453
+ void FullCodeGenerator::EmitNamedPropertyLoad(Property* prop) {
1454
+ SetSourcePosition(prop->position());
1455
+ Literal* key = prop->key()->AsLiteral();
1456
+ __ Move(rcx, key->handle());
1457
+ Handle<Code> ic(Builtins::builtin(Builtins::LoadIC_Initialize));
1458
+ __ Call(ic, RelocInfo::CODE_TARGET);
1459
+ __ nop();
1460
+ }
1461
+
1462
+
1463
+ void FullCodeGenerator::EmitKeyedPropertyLoad(Property* prop) {
1464
+ SetSourcePosition(prop->position());
1465
+ Handle<Code> ic(Builtins::builtin(Builtins::KeyedLoadIC_Initialize));
1466
+ __ Call(ic, RelocInfo::CODE_TARGET);
1467
+ __ nop();
1468
+ }
1469
+
1470
+
1471
+ void FullCodeGenerator::EmitBinaryOp(Token::Value op,
1472
+ Expression::Context context) {
1473
+ __ push(result_register());
1474
+ GenericBinaryOpStub stub(op,
1475
+ NO_OVERWRITE,
1476
+ NO_GENERIC_BINARY_FLAGS);
1477
+ __ CallStub(&stub);
1478
+ Apply(context, rax);
1479
+ }
1480
+
1481
+
1482
+ void FullCodeGenerator::EmitAssignment(Expression* expr) {
1483
+ // Invalid left-hand sides are rewritten to have a 'throw
1484
+ // ReferenceError' on the left-hand side.
1485
+ if (!expr->IsValidLeftHandSide()) {
1486
+ VisitForEffect(expr);
1487
+ return;
1488
+ }
1489
+
1490
+ // Left-hand side can only be a property, a global or a (parameter or local)
1491
+ // slot. Variables with rewrite to .arguments are treated as KEYED_PROPERTY.
1492
+ enum LhsKind { VARIABLE, NAMED_PROPERTY, KEYED_PROPERTY };
1493
+ LhsKind assign_type = VARIABLE;
1494
+ Property* prop = expr->AsProperty();
1495
+ if (prop != NULL) {
1496
+ assign_type = (prop->key()->IsPropertyName())
1497
+ ? NAMED_PROPERTY
1498
+ : KEYED_PROPERTY;
1499
+ }
1500
+
1501
+ switch (assign_type) {
1502
+ case VARIABLE: {
1503
+ Variable* var = expr->AsVariableProxy()->var();
1504
+ EmitVariableAssignment(var, Token::ASSIGN, Expression::kEffect);
1505
+ break;
1506
+ }
1507
+ case NAMED_PROPERTY: {
1508
+ __ push(rax); // Preserve value.
1509
+ VisitForValue(prop->obj(), kAccumulator);
1510
+ __ movq(rdx, rax);
1511
+ __ pop(rax); // Restore value.
1512
+ __ Move(rcx, prop->key()->AsLiteral()->handle());
1513
+ Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Initialize));
1514
+ __ call(ic, RelocInfo::CODE_TARGET);
1515
+ __ nop(); // Signal no inlined code.
1516
+ break;
1517
+ }
1518
+ case KEYED_PROPERTY: {
1519
+ __ push(rax); // Preserve value.
1520
+ VisitForValue(prop->obj(), kStack);
1521
+ VisitForValue(prop->key(), kAccumulator);
1522
+ __ movq(rcx, rax);
1523
+ __ pop(rdx);
1524
+ __ pop(rax);
1525
+ Handle<Code> ic(Builtins::builtin(Builtins::KeyedStoreIC_Initialize));
1526
+ __ call(ic, RelocInfo::CODE_TARGET);
1527
+ __ nop(); // Signal no inlined code.
1528
+ break;
1529
+ }
1530
+ }
1531
+ }
1532
+
1533
+
1534
+ void FullCodeGenerator::EmitVariableAssignment(Variable* var,
1535
+ Token::Value op,
1536
+ Expression::Context context) {
1537
+ // Left-hand sides that rewrite to explicit property accesses do not reach
1538
+ // here.
1539
+ ASSERT(var != NULL);
1540
+ ASSERT(var->is_global() || var->slot() != NULL);
1541
+
1542
+ if (var->is_global()) {
1543
+ ASSERT(!var->is_this());
1544
+ // Assignment to a global variable. Use inline caching for the
1545
+ // assignment. Right-hand-side value is passed in rax, variable name in
1546
+ // rcx, and the global object on the stack.
1547
+ __ Move(rcx, var->name());
1548
+ __ movq(rdx, CodeGenerator::GlobalObject());
1549
+ Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Initialize));
1550
+ __ Call(ic, RelocInfo::CODE_TARGET);
1551
+ __ nop();
1552
+
1553
+ } else if (var->mode() != Variable::CONST || op == Token::INIT_CONST) {
1554
+ // Perform the assignment for non-const variables and for initialization
1555
+ // of const variables. Const assignments are simply skipped.
1556
+ Label done;
1557
+ Slot* slot = var->slot();
1558
+ switch (slot->type()) {
1559
+ case Slot::PARAMETER:
1560
+ case Slot::LOCAL:
1561
+ if (op == Token::INIT_CONST) {
1562
+ // Detect const reinitialization by checking for the hole value.
1563
+ __ movq(rdx, Operand(rbp, SlotOffset(slot)));
1564
+ __ CompareRoot(rdx, Heap::kTheHoleValueRootIndex);
1565
+ __ j(not_equal, &done);
1566
+ }
1567
+ // Perform the assignment.
1568
+ __ movq(Operand(rbp, SlotOffset(slot)), rax);
1569
+ break;
1570
+
1571
+ case Slot::CONTEXT: {
1572
+ MemOperand target = EmitSlotSearch(slot, rcx);
1573
+ if (op == Token::INIT_CONST) {
1574
+ // Detect const reinitialization by checking for the hole value.
1575
+ __ movq(rdx, target);
1576
+ __ CompareRoot(rdx, Heap::kTheHoleValueRootIndex);
1577
+ __ j(not_equal, &done);
1578
+ }
1579
+ // Perform the assignment and issue the write barrier.
1580
+ __ movq(target, rax);
1581
+ // The value of the assignment is in rax. RecordWrite clobbers its
1582
+ // register arguments.
1583
+ __ movq(rdx, rax);
1584
+ int offset = FixedArray::kHeaderSize + slot->index() * kPointerSize;
1585
+ __ RecordWrite(rcx, offset, rdx, rbx);
1586
+ break;
1587
+ }
1588
+
1589
+ case Slot::LOOKUP:
1590
+ // Call the runtime for the assignment. The runtime will ignore
1591
+ // const reinitialization.
1592
+ __ push(rax); // Value.
1593
+ __ push(rsi); // Context.
1594
+ __ Push(var->name());
1595
+ if (op == Token::INIT_CONST) {
1596
+ // The runtime will ignore const redeclaration.
1597
+ __ CallRuntime(Runtime::kInitializeConstContextSlot, 3);
1598
+ } else {
1599
+ __ CallRuntime(Runtime::kStoreContextSlot, 3);
1600
+ }
1601
+ break;
1602
+ }
1603
+ __ bind(&done);
1604
+ }
1605
+
1606
+ Apply(context, rax);
1607
+ }
1608
+
1609
+
1610
+ void FullCodeGenerator::EmitNamedPropertyAssignment(Assignment* expr) {
1611
+ // Assignment to a property, using a named store IC.
1612
+ Property* prop = expr->target()->AsProperty();
1613
+ ASSERT(prop != NULL);
1614
+ ASSERT(prop->key()->AsLiteral() != NULL);
1615
+
1616
+ // If the assignment starts a block of assignments to the same object,
1617
+ // change to slow case to avoid the quadratic behavior of repeatedly
1618
+ // adding fast properties.
1619
+ if (expr->starts_initialization_block()) {
1620
+ __ push(result_register());
1621
+ __ push(Operand(rsp, kPointerSize)); // Receiver is now under value.
1622
+ __ CallRuntime(Runtime::kToSlowProperties, 1);
1623
+ __ pop(result_register());
1624
+ }
1625
+
1626
+ // Record source code position before IC call.
1627
+ SetSourcePosition(expr->position());
1628
+ __ Move(rcx, prop->key()->AsLiteral()->handle());
1629
+ if (expr->ends_initialization_block()) {
1630
+ __ movq(rdx, Operand(rsp, 0));
1631
+ } else {
1632
+ __ pop(rdx);
1633
+ }
1634
+ Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Initialize));
1635
+ __ Call(ic, RelocInfo::CODE_TARGET);
1636
+ __ nop();
1637
+
1638
+ // If the assignment ends an initialization block, revert to fast case.
1639
+ if (expr->ends_initialization_block()) {
1640
+ __ push(rax); // Result of assignment, saved even if not needed.
1641
+ __ push(Operand(rsp, kPointerSize)); // Receiver is under value.
1642
+ __ CallRuntime(Runtime::kToFastProperties, 1);
1643
+ __ pop(rax);
1644
+ DropAndApply(1, context_, rax);
1645
+ } else {
1646
+ Apply(context_, rax);
1647
+ }
1648
+ }
1649
+
1650
+
1651
+ void FullCodeGenerator::EmitKeyedPropertyAssignment(Assignment* expr) {
1652
+ // Assignment to a property, using a keyed store IC.
1653
+
1654
+ // If the assignment starts a block of assignments to the same object,
1655
+ // change to slow case to avoid the quadratic behavior of repeatedly
1656
+ // adding fast properties.
1657
+ if (expr->starts_initialization_block()) {
1658
+ __ push(result_register());
1659
+ // Receiver is now under the key and value.
1660
+ __ push(Operand(rsp, 2 * kPointerSize));
1661
+ __ CallRuntime(Runtime::kToSlowProperties, 1);
1662
+ __ pop(result_register());
1663
+ }
1664
+
1665
+ __ pop(rcx);
1666
+ if (expr->ends_initialization_block()) {
1667
+ __ movq(rdx, Operand(rsp, 0)); // Leave receiver on the stack for later.
1668
+ } else {
1669
+ __ pop(rdx);
1670
+ }
1671
+ // Record source code position before IC call.
1672
+ SetSourcePosition(expr->position());
1673
+ Handle<Code> ic(Builtins::builtin(Builtins::KeyedStoreIC_Initialize));
1674
+ __ Call(ic, RelocInfo::CODE_TARGET);
1675
+ // This nop signals to the IC that there is no inlined code at the call
1676
+ // site for it to patch.
1677
+ __ nop();
1678
+
1679
+ // If the assignment ends an initialization block, revert to fast case.
1680
+ if (expr->ends_initialization_block()) {
1681
+ __ pop(rdx);
1682
+ __ push(rax); // Result of assignment, saved even if not needed.
1683
+ __ push(rdx);
1684
+ __ CallRuntime(Runtime::kToFastProperties, 1);
1685
+ __ pop(rax);
1686
+ }
1687
+
1688
+ Apply(context_, rax);
1689
+ }
1690
+
1691
+
1692
+ void FullCodeGenerator::VisitProperty(Property* expr) {
1693
+ Comment cmnt(masm_, "[ Property");
1694
+ Expression* key = expr->key();
1695
+
1696
+ if (key->IsPropertyName()) {
1697
+ VisitForValue(expr->obj(), kAccumulator);
1698
+ EmitNamedPropertyLoad(expr);
1699
+ Apply(context_, rax);
1700
+ } else {
1701
+ VisitForValue(expr->obj(), kStack);
1702
+ VisitForValue(expr->key(), kAccumulator);
1703
+ __ pop(rdx);
1704
+ EmitKeyedPropertyLoad(expr);
1705
+ Apply(context_, rax);
1706
+ }
1707
+ }
1708
+
1709
+
1710
+ void FullCodeGenerator::EmitCallWithIC(Call* expr,
1711
+ Handle<Object> name,
1712
+ RelocInfo::Mode mode) {
1713
+ // Code common for calls using the IC.
1714
+ ZoneList<Expression*>* args = expr->arguments();
1715
+ int arg_count = args->length();
1716
+ for (int i = 0; i < arg_count; i++) {
1717
+ VisitForValue(args->at(i), kStack);
1718
+ }
1719
+ __ Move(rcx, name);
1720
+ // Record source position for debugger.
1721
+ SetSourcePosition(expr->position());
1722
+ // Call the IC initialization code.
1723
+ InLoopFlag in_loop = (loop_depth() > 0) ? IN_LOOP : NOT_IN_LOOP;
1724
+ Handle<Code> ic = CodeGenerator::ComputeCallInitialize(arg_count,
1725
+ in_loop);
1726
+ __ Call(ic, mode);
1727
+ // Restore context register.
1728
+ __ movq(rsi, Operand(rbp, StandardFrameConstants::kContextOffset));
1729
+ Apply(context_, rax);
1730
+ }
1731
+
1732
+
1733
+ void FullCodeGenerator::EmitKeyedCallWithIC(Call* expr,
1734
+ Expression* key,
1735
+ RelocInfo::Mode mode) {
1736
+ // Code common for calls using the IC.
1737
+ ZoneList<Expression*>* args = expr->arguments();
1738
+ int arg_count = args->length();
1739
+ for (int i = 0; i < arg_count; i++) {
1740
+ VisitForValue(args->at(i), kStack);
1741
+ }
1742
+ VisitForValue(key, kAccumulator);
1743
+ __ movq(rcx, rax);
1744
+ // Record source position for debugger.
1745
+ SetSourcePosition(expr->position());
1746
+ // Call the IC initialization code.
1747
+ InLoopFlag in_loop = (loop_depth() > 0) ? IN_LOOP : NOT_IN_LOOP;
1748
+ Handle<Code> ic = CodeGenerator::ComputeKeyedCallInitialize(arg_count,
1749
+ in_loop);
1750
+ __ Call(ic, mode);
1751
+ // Restore context register.
1752
+ __ movq(rsi, Operand(rbp, StandardFrameConstants::kContextOffset));
1753
+ Apply(context_, rax);
1754
+ }
1755
+
1756
+
1757
+ void FullCodeGenerator::EmitCallWithStub(Call* expr) {
1758
+ // Code common for calls using the call stub.
1759
+ ZoneList<Expression*>* args = expr->arguments();
1760
+ int arg_count = args->length();
1761
+ for (int i = 0; i < arg_count; i++) {
1762
+ VisitForValue(args->at(i), kStack);
1763
+ }
1764
+ // Record source position for debugger.
1765
+ SetSourcePosition(expr->position());
1766
+ InLoopFlag in_loop = (loop_depth() > 0) ? IN_LOOP : NOT_IN_LOOP;
1767
+ CallFunctionStub stub(arg_count, in_loop, RECEIVER_MIGHT_BE_VALUE);
1768
+ __ CallStub(&stub);
1769
+ // Restore context register.
1770
+ __ movq(rsi, Operand(rbp, StandardFrameConstants::kContextOffset));
1771
+ // Discard the function left on TOS.
1772
+ DropAndApply(1, context_, rax);
1773
+ }
1774
+
1775
+
1776
+ void FullCodeGenerator::VisitCall(Call* expr) {
1777
+ Comment cmnt(masm_, "[ Call");
1778
+ Expression* fun = expr->expression();
1779
+ Variable* var = fun->AsVariableProxy()->AsVariable();
1780
+
1781
+ if (var != NULL && var->is_possibly_eval()) {
1782
+ // In a call to eval, we first call %ResolvePossiblyDirectEval to
1783
+ // resolve the function we need to call and the receiver of the
1784
+ // call. The we call the resolved function using the given
1785
+ // arguments.
1786
+ VisitForValue(fun, kStack);
1787
+ __ PushRoot(Heap::kUndefinedValueRootIndex); // Reserved receiver slot.
1788
+
1789
+ // Push the arguments.
1790
+ ZoneList<Expression*>* args = expr->arguments();
1791
+ int arg_count = args->length();
1792
+ for (int i = 0; i < arg_count; i++) {
1793
+ VisitForValue(args->at(i), kStack);
1794
+ }
1795
+
1796
+ // Push copy of the function - found below the arguments.
1797
+ __ push(Operand(rsp, (arg_count + 1) * kPointerSize));
1798
+
1799
+ // Push copy of the first argument or undefined if it doesn't exist.
1800
+ if (arg_count > 0) {
1801
+ __ push(Operand(rsp, arg_count * kPointerSize));
1802
+ } else {
1803
+ __ PushRoot(Heap::kUndefinedValueRootIndex);
1804
+ }
1805
+
1806
+ // Push the receiver of the enclosing function and do runtime call.
1807
+ __ push(Operand(rbp, (2 + scope()->num_parameters()) * kPointerSize));
1808
+ __ CallRuntime(Runtime::kResolvePossiblyDirectEval, 3);
1809
+
1810
+ // The runtime call returns a pair of values in rax (function) and
1811
+ // rdx (receiver). Touch up the stack with the right values.
1812
+ __ movq(Operand(rsp, (arg_count + 0) * kPointerSize), rdx);
1813
+ __ movq(Operand(rsp, (arg_count + 1) * kPointerSize), rax);
1814
+
1815
+ // Record source position for debugger.
1816
+ SetSourcePosition(expr->position());
1817
+ InLoopFlag in_loop = (loop_depth() > 0) ? IN_LOOP : NOT_IN_LOOP;
1818
+ CallFunctionStub stub(arg_count, in_loop, RECEIVER_MIGHT_BE_VALUE);
1819
+ __ CallStub(&stub);
1820
+ // Restore context register.
1821
+ __ movq(rsi, Operand(rbp, StandardFrameConstants::kContextOffset));
1822
+ DropAndApply(1, context_, rax);
1823
+ } else if (var != NULL && !var->is_this() && var->is_global()) {
1824
+ // Call to a global variable.
1825
+ // Push global object as receiver for the call IC lookup.
1826
+ __ push(CodeGenerator::GlobalObject());
1827
+ EmitCallWithIC(expr, var->name(), RelocInfo::CODE_TARGET_CONTEXT);
1828
+ } else if (var != NULL && var->slot() != NULL &&
1829
+ var->slot()->type() == Slot::LOOKUP) {
1830
+ // Call to a lookup slot (dynamically introduced variable). Call
1831
+ // the runtime to find the function to call (returned in rax) and
1832
+ // the object holding it (returned in rdx).
1833
+ __ push(context_register());
1834
+ __ Push(var->name());
1835
+ __ CallRuntime(Runtime::kLoadContextSlot, 2);
1836
+ __ push(rax); // Function.
1837
+ __ push(rdx); // Receiver.
1838
+ EmitCallWithStub(expr);
1839
+ } else if (fun->AsProperty() != NULL) {
1840
+ // Call to an object property.
1841
+ Property* prop = fun->AsProperty();
1842
+ Literal* key = prop->key()->AsLiteral();
1843
+ if (key != NULL && key->handle()->IsSymbol()) {
1844
+ // Call to a named property, use call IC.
1845
+ VisitForValue(prop->obj(), kStack);
1846
+ EmitCallWithIC(expr, key->handle(), RelocInfo::CODE_TARGET);
1847
+ } else {
1848
+ // Call to a keyed property.
1849
+ // For a synthetic property use keyed load IC followed by function call,
1850
+ // for a regular property use KeyedCallIC.
1851
+ VisitForValue(prop->obj(), kStack);
1852
+ if (prop->is_synthetic()) {
1853
+ VisitForValue(prop->key(), kAccumulator);
1854
+ __ movq(rdx, Operand(rsp, 0));
1855
+ // Record source code position for IC call.
1856
+ SetSourcePosition(prop->position());
1857
+ Handle<Code> ic(Builtins::builtin(Builtins::KeyedLoadIC_Initialize));
1858
+ __ call(ic, RelocInfo::CODE_TARGET);
1859
+ // By emitting a nop we make sure that we do not have a "test rax,..."
1860
+ // instruction after the call as it is treated specially
1861
+ // by the LoadIC code.
1862
+ __ nop();
1863
+ // Pop receiver.
1864
+ __ pop(rbx);
1865
+ // Push result (function).
1866
+ __ push(rax);
1867
+ // Push receiver object on stack.
1868
+ __ movq(rcx, CodeGenerator::GlobalObject());
1869
+ __ push(FieldOperand(rcx, GlobalObject::kGlobalReceiverOffset));
1870
+ EmitCallWithStub(expr);
1871
+ } else {
1872
+ EmitKeyedCallWithIC(expr, prop->key(), RelocInfo::CODE_TARGET);
1873
+ }
1874
+ }
1875
+ } else {
1876
+ // Call to some other expression. If the expression is an anonymous
1877
+ // function literal not called in a loop, mark it as one that should
1878
+ // also use the fast code generator.
1879
+ FunctionLiteral* lit = fun->AsFunctionLiteral();
1880
+ if (lit != NULL &&
1881
+ lit->name()->Equals(Heap::empty_string()) &&
1882
+ loop_depth() == 0) {
1883
+ lit->set_try_full_codegen(true);
1884
+ }
1885
+ VisitForValue(fun, kStack);
1886
+ // Load global receiver object.
1887
+ __ movq(rbx, CodeGenerator::GlobalObject());
1888
+ __ push(FieldOperand(rbx, GlobalObject::kGlobalReceiverOffset));
1889
+ // Emit function call.
1890
+ EmitCallWithStub(expr);
1891
+ }
1892
+ }
1893
+
1894
+
1895
+ void FullCodeGenerator::VisitCallNew(CallNew* expr) {
1896
+ Comment cmnt(masm_, "[ CallNew");
1897
+ // According to ECMA-262, section 11.2.2, page 44, the function
1898
+ // expression in new calls must be evaluated before the
1899
+ // arguments.
1900
+ // Push function on the stack.
1901
+ VisitForValue(expr->expression(), kStack);
1902
+
1903
+ // Push global object (receiver).
1904
+ __ push(CodeGenerator::GlobalObject());
1905
+
1906
+ // Push the arguments ("left-to-right") on the stack.
1907
+ ZoneList<Expression*>* args = expr->arguments();
1908
+ int arg_count = args->length();
1909
+ for (int i = 0; i < arg_count; i++) {
1910
+ VisitForValue(args->at(i), kStack);
1911
+ }
1912
+
1913
+ // Call the construct call builtin that handles allocation and
1914
+ // constructor invocation.
1915
+ SetSourcePosition(expr->position());
1916
+
1917
+ // Load function, arg_count into rdi and rax.
1918
+ __ Set(rax, arg_count);
1919
+ // Function is in rsp[arg_count + 1].
1920
+ __ movq(rdi, Operand(rsp, rax, times_pointer_size, kPointerSize));
1921
+
1922
+ Handle<Code> construct_builtin(Builtins::builtin(Builtins::JSConstructCall));
1923
+ __ Call(construct_builtin, RelocInfo::CONSTRUCT_CALL);
1924
+
1925
+ // Replace function on TOS with result in rax, or pop it.
1926
+ DropAndApply(1, context_, rax);
1927
+ }
1928
+
1929
+
1930
+ void FullCodeGenerator::EmitIsSmi(ZoneList<Expression*>* args) {
1931
+ ASSERT(args->length() == 1);
1932
+
1933
+ VisitForValue(args->at(0), kAccumulator);
1934
+
1935
+ Label materialize_true, materialize_false;
1936
+ Label* if_true = NULL;
1937
+ Label* if_false = NULL;
1938
+ PrepareTest(&materialize_true, &materialize_false, &if_true, &if_false);
1939
+
1940
+ __ JumpIfSmi(rax, if_true);
1941
+ __ jmp(if_false);
1942
+
1943
+ Apply(context_, if_true, if_false);
1944
+ }
1945
+
1946
+
1947
+ void FullCodeGenerator::EmitIsNonNegativeSmi(ZoneList<Expression*>* args) {
1948
+ ASSERT(args->length() == 1);
1949
+
1950
+ VisitForValue(args->at(0), kAccumulator);
1951
+
1952
+ Label materialize_true, materialize_false;
1953
+ Label* if_true = NULL;
1954
+ Label* if_false = NULL;
1955
+ PrepareTest(&materialize_true, &materialize_false, &if_true, &if_false);
1956
+
1957
+ Condition positive_smi = __ CheckPositiveSmi(rax);
1958
+ __ j(positive_smi, if_true);
1959
+ __ jmp(if_false);
1960
+
1961
+ Apply(context_, if_true, if_false);
1962
+ }
1963
+
1964
+
1965
+ void FullCodeGenerator::EmitIsObject(ZoneList<Expression*>* args) {
1966
+ ASSERT(args->length() == 1);
1967
+
1968
+ VisitForValue(args->at(0), kAccumulator);
1969
+
1970
+ Label materialize_true, materialize_false;
1971
+ Label* if_true = NULL;
1972
+ Label* if_false = NULL;
1973
+ PrepareTest(&materialize_true, &materialize_false, &if_true, &if_false);
1974
+
1975
+ __ JumpIfSmi(rax, if_false);
1976
+ __ CompareRoot(rax, Heap::kNullValueRootIndex);
1977
+ __ j(equal, if_true);
1978
+ __ movq(rbx, FieldOperand(rax, HeapObject::kMapOffset));
1979
+ // Undetectable objects behave like undefined when tested with typeof.
1980
+ __ testb(FieldOperand(rbx, Map::kBitFieldOffset),
1981
+ Immediate(1 << Map::kIsUndetectable));
1982
+ __ j(not_zero, if_false);
1983
+ __ movzxbq(rbx, FieldOperand(rbx, Map::kInstanceTypeOffset));
1984
+ __ cmpq(rbx, Immediate(FIRST_JS_OBJECT_TYPE));
1985
+ __ j(below, if_false);
1986
+ __ cmpq(rbx, Immediate(LAST_JS_OBJECT_TYPE));
1987
+ __ j(below_equal, if_true);
1988
+ __ jmp(if_false);
1989
+
1990
+ Apply(context_, if_true, if_false);
1991
+ }
1992
+
1993
+
1994
+ void FullCodeGenerator::EmitIsSpecObject(ZoneList<Expression*>* args) {
1995
+ ASSERT(args->length() == 1);
1996
+
1997
+ VisitForValue(args->at(0), kAccumulator);
1998
+
1999
+ Label materialize_true, materialize_false;
2000
+ Label* if_true = NULL;
2001
+ Label* if_false = NULL;
2002
+ PrepareTest(&materialize_true, &materialize_false, &if_true, &if_false);
2003
+
2004
+ __ JumpIfSmi(rax, if_false);
2005
+ __ CmpObjectType(rax, FIRST_JS_OBJECT_TYPE, rbx);
2006
+ __ j(above_equal, if_true);
2007
+ __ jmp(if_false);
2008
+
2009
+ Apply(context_, if_true, if_false);
2010
+ }
2011
+
2012
+
2013
+ void FullCodeGenerator::EmitIsUndetectableObject(ZoneList<Expression*>* args) {
2014
+ ASSERT(args->length() == 1);
2015
+
2016
+ VisitForValue(args->at(0), kAccumulator);
2017
+
2018
+ Label materialize_true, materialize_false;
2019
+ Label* if_true = NULL;
2020
+ Label* if_false = NULL;
2021
+ PrepareTest(&materialize_true, &materialize_false, &if_true, &if_false);
2022
+
2023
+ __ JumpIfSmi(rax, if_false);
2024
+ __ movq(rbx, FieldOperand(rax, HeapObject::kMapOffset));
2025
+ __ testb(FieldOperand(rbx, Map::kBitFieldOffset),
2026
+ Immediate(1 << Map::kIsUndetectable));
2027
+ __ j(not_zero, if_true);
2028
+ __ jmp(if_false);
2029
+
2030
+ Apply(context_, if_true, if_false);
2031
+ }
2032
+
2033
+
2034
+ void FullCodeGenerator::EmitIsFunction(ZoneList<Expression*>* args) {
2035
+ ASSERT(args->length() == 1);
2036
+
2037
+ VisitForValue(args->at(0), kAccumulator);
2038
+
2039
+ Label materialize_true, materialize_false;
2040
+ Label* if_true = NULL;
2041
+ Label* if_false = NULL;
2042
+ PrepareTest(&materialize_true, &materialize_false, &if_true, &if_false);
2043
+
2044
+ __ JumpIfSmi(rax, if_false);
2045
+ __ CmpObjectType(rax, JS_FUNCTION_TYPE, rbx);
2046
+ __ j(equal, if_true);
2047
+ __ jmp(if_false);
2048
+
2049
+ Apply(context_, if_true, if_false);
2050
+ }
2051
+
2052
+
2053
+ void FullCodeGenerator::EmitIsArray(ZoneList<Expression*>* args) {
2054
+ ASSERT(args->length() == 1);
2055
+
2056
+ VisitForValue(args->at(0), kAccumulator);
2057
+
2058
+ Label materialize_true, materialize_false;
2059
+ Label* if_true = NULL;
2060
+ Label* if_false = NULL;
2061
+ PrepareTest(&materialize_true, &materialize_false, &if_true, &if_false);
2062
+
2063
+ __ JumpIfSmi(rax, if_false);
2064
+ __ CmpObjectType(rax, JS_ARRAY_TYPE, rbx);
2065
+ __ j(equal, if_true);
2066
+ __ jmp(if_false);
2067
+
2068
+ Apply(context_, if_true, if_false);
2069
+ }
2070
+
2071
+
2072
+ void FullCodeGenerator::EmitIsRegExp(ZoneList<Expression*>* args) {
2073
+ ASSERT(args->length() == 1);
2074
+
2075
+ VisitForValue(args->at(0), kAccumulator);
2076
+
2077
+ Label materialize_true, materialize_false;
2078
+ Label* if_true = NULL;
2079
+ Label* if_false = NULL;
2080
+ PrepareTest(&materialize_true, &materialize_false, &if_true, &if_false);
2081
+
2082
+ __ JumpIfSmi(rax, if_false);
2083
+ __ CmpObjectType(rax, JS_REGEXP_TYPE, rbx);
2084
+ __ j(equal, if_true);
2085
+ __ jmp(if_false);
2086
+
2087
+ Apply(context_, if_true, if_false);
2088
+ }
2089
+
2090
+
2091
+
2092
+ void FullCodeGenerator::EmitIsConstructCall(ZoneList<Expression*>* args) {
2093
+ ASSERT(args->length() == 0);
2094
+
2095
+ Label materialize_true, materialize_false;
2096
+ Label* if_true = NULL;
2097
+ Label* if_false = NULL;
2098
+ PrepareTest(&materialize_true, &materialize_false, &if_true, &if_false);
2099
+
2100
+ // Get the frame pointer for the calling frame.
2101
+ __ movq(rax, Operand(rbp, StandardFrameConstants::kCallerFPOffset));
2102
+
2103
+ // Skip the arguments adaptor frame if it exists.
2104
+ Label check_frame_marker;
2105
+ __ SmiCompare(Operand(rax, StandardFrameConstants::kContextOffset),
2106
+ Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR));
2107
+ __ j(not_equal, &check_frame_marker);
2108
+ __ movq(rax, Operand(rax, StandardFrameConstants::kCallerFPOffset));
2109
+
2110
+ // Check the marker in the calling frame.
2111
+ __ bind(&check_frame_marker);
2112
+ __ SmiCompare(Operand(rax, StandardFrameConstants::kMarkerOffset),
2113
+ Smi::FromInt(StackFrame::CONSTRUCT));
2114
+ __ j(equal, if_true);
2115
+ __ jmp(if_false);
2116
+
2117
+ Apply(context_, if_true, if_false);
2118
+ }
2119
+
2120
+
2121
+ void FullCodeGenerator::EmitObjectEquals(ZoneList<Expression*>* args) {
2122
+ ASSERT(args->length() == 2);
2123
+
2124
+ // Load the two objects into registers and perform the comparison.
2125
+ VisitForValue(args->at(0), kStack);
2126
+ VisitForValue(args->at(1), kAccumulator);
2127
+
2128
+ Label materialize_true, materialize_false;
2129
+ Label* if_true = NULL;
2130
+ Label* if_false = NULL;
2131
+ PrepareTest(&materialize_true, &materialize_false, &if_true, &if_false);
2132
+
2133
+ __ pop(rbx);
2134
+ __ cmpq(rax, rbx);
2135
+ __ j(equal, if_true);
2136
+ __ jmp(if_false);
2137
+
2138
+ Apply(context_, if_true, if_false);
2139
+ }
2140
+
2141
+
2142
+ void FullCodeGenerator::EmitArguments(ZoneList<Expression*>* args) {
2143
+ ASSERT(args->length() == 1);
2144
+
2145
+ // ArgumentsAccessStub expects the key in edx and the formal
2146
+ // parameter count in eax.
2147
+ VisitForValue(args->at(0), kAccumulator);
2148
+ __ movq(rdx, rax);
2149
+ __ Move(rax, Smi::FromInt(scope()->num_parameters()));
2150
+ ArgumentsAccessStub stub(ArgumentsAccessStub::READ_ELEMENT);
2151
+ __ CallStub(&stub);
2152
+ Apply(context_, rax);
2153
+ }
2154
+
2155
+
2156
+ void FullCodeGenerator::EmitArgumentsLength(ZoneList<Expression*>* args) {
2157
+ ASSERT(args->length() == 0);
2158
+
2159
+ Label exit;
2160
+ // Get the number of formal parameters.
2161
+ __ Move(rax, Smi::FromInt(scope()->num_parameters()));
2162
+
2163
+ // Check if the calling frame is an arguments adaptor frame.
2164
+ __ movq(rbx, Operand(rbp, StandardFrameConstants::kCallerFPOffset));
2165
+ __ SmiCompare(Operand(rbx, StandardFrameConstants::kContextOffset),
2166
+ Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR));
2167
+ __ j(not_equal, &exit);
2168
+
2169
+ // Arguments adaptor case: Read the arguments length from the
2170
+ // adaptor frame.
2171
+ __ movq(rax, Operand(rbx, ArgumentsAdaptorFrameConstants::kLengthOffset));
2172
+
2173
+ __ bind(&exit);
2174
+ if (FLAG_debug_code) __ AbortIfNotSmi(rax);
2175
+ Apply(context_, rax);
2176
+ }
2177
+
2178
+
2179
+ void FullCodeGenerator::EmitClassOf(ZoneList<Expression*>* args) {
2180
+ ASSERT(args->length() == 1);
2181
+ Label done, null, function, non_function_constructor;
2182
+
2183
+ VisitForValue(args->at(0), kAccumulator);
2184
+
2185
+ // If the object is a smi, we return null.
2186
+ __ JumpIfSmi(rax, &null);
2187
+
2188
+ // Check that the object is a JS object but take special care of JS
2189
+ // functions to make sure they have 'Function' as their class.
2190
+ __ CmpObjectType(rax, FIRST_JS_OBJECT_TYPE, rax); // Map is now in rax.
2191
+ __ j(below, &null);
2192
+
2193
+ // As long as JS_FUNCTION_TYPE is the last instance type and it is
2194
+ // right after LAST_JS_OBJECT_TYPE, we can avoid checking for
2195
+ // LAST_JS_OBJECT_TYPE.
2196
+ ASSERT(LAST_TYPE == JS_FUNCTION_TYPE);
2197
+ ASSERT(JS_FUNCTION_TYPE == LAST_JS_OBJECT_TYPE + 1);
2198
+ __ CmpInstanceType(rax, JS_FUNCTION_TYPE);
2199
+ __ j(equal, &function);
2200
+
2201
+ // Check if the constructor in the map is a function.
2202
+ __ movq(rax, FieldOperand(rax, Map::kConstructorOffset));
2203
+ __ CmpObjectType(rax, JS_FUNCTION_TYPE, rbx);
2204
+ __ j(not_equal, &non_function_constructor);
2205
+
2206
+ // rax now contains the constructor function. Grab the
2207
+ // instance class name from there.
2208
+ __ movq(rax, FieldOperand(rax, JSFunction::kSharedFunctionInfoOffset));
2209
+ __ movq(rax, FieldOperand(rax, SharedFunctionInfo::kInstanceClassNameOffset));
2210
+ __ jmp(&done);
2211
+
2212
+ // Functions have class 'Function'.
2213
+ __ bind(&function);
2214
+ __ Move(rax, Factory::function_class_symbol());
2215
+ __ jmp(&done);
2216
+
2217
+ // Objects with a non-function constructor have class 'Object'.
2218
+ __ bind(&non_function_constructor);
2219
+ __ Move(rax, Factory::Object_symbol());
2220
+ __ jmp(&done);
2221
+
2222
+ // Non-JS objects have class null.
2223
+ __ bind(&null);
2224
+ __ LoadRoot(rax, Heap::kNullValueRootIndex);
2225
+
2226
+ // All done.
2227
+ __ bind(&done);
2228
+
2229
+ Apply(context_, rax);
2230
+ }
2231
+
2232
+
2233
+ void FullCodeGenerator::EmitLog(ZoneList<Expression*>* args) {
2234
+ // Conditionally generate a log call.
2235
+ // Args:
2236
+ // 0 (literal string): The type of logging (corresponds to the flags).
2237
+ // This is used to determine whether or not to generate the log call.
2238
+ // 1 (string): Format string. Access the string at argument index 2
2239
+ // with '%2s' (see Logger::LogRuntime for all the formats).
2240
+ // 2 (array): Arguments to the format string.
2241
+ ASSERT_EQ(args->length(), 3);
2242
+ #ifdef ENABLE_LOGGING_AND_PROFILING
2243
+ if (CodeGenerator::ShouldGenerateLog(args->at(0))) {
2244
+ VisitForValue(args->at(1), kStack);
2245
+ VisitForValue(args->at(2), kStack);
2246
+ __ CallRuntime(Runtime::kLog, 2);
2247
+ }
2248
+ #endif
2249
+ // Finally, we're expected to leave a value on the top of the stack.
2250
+ __ LoadRoot(rax, Heap::kUndefinedValueRootIndex);
2251
+ Apply(context_, rax);
2252
+ }
2253
+
2254
+
2255
+ void FullCodeGenerator::EmitRandomHeapNumber(ZoneList<Expression*>* args) {
2256
+ ASSERT(args->length() == 0);
2257
+
2258
+ Label slow_allocate_heapnumber;
2259
+ Label heapnumber_allocated;
2260
+
2261
+ __ AllocateHeapNumber(rbx, rcx, &slow_allocate_heapnumber);
2262
+ __ jmp(&heapnumber_allocated);
2263
+
2264
+ __ bind(&slow_allocate_heapnumber);
2265
+ // Allocate a heap number.
2266
+ __ CallRuntime(Runtime::kNumberAlloc, 0);
2267
+ __ movq(rbx, rax);
2268
+
2269
+ __ bind(&heapnumber_allocated);
2270
+
2271
+ // Return a random uint32 number in rax.
2272
+ // The fresh HeapNumber is in rbx, which is callee-save on both x64 ABIs.
2273
+ __ PrepareCallCFunction(0);
2274
+ __ CallCFunction(ExternalReference::random_uint32_function(), 0);
2275
+
2276
+ // Convert 32 random bits in rax to 0.(32 random bits) in a double
2277
+ // by computing:
2278
+ // ( 1.(20 0s)(32 random bits) x 2^20 ) - (1.0 x 2^20)).
2279
+ __ movl(rcx, Immediate(0x49800000)); // 1.0 x 2^20 as single.
2280
+ __ movd(xmm1, rcx);
2281
+ __ movd(xmm0, rax);
2282
+ __ cvtss2sd(xmm1, xmm1);
2283
+ __ xorpd(xmm0, xmm1);
2284
+ __ subsd(xmm0, xmm1);
2285
+ __ movsd(FieldOperand(rbx, HeapNumber::kValueOffset), xmm0);
2286
+
2287
+ __ movq(rax, rbx);
2288
+ Apply(context_, rax);
2289
+ }
2290
+
2291
+
2292
+ void FullCodeGenerator::EmitSubString(ZoneList<Expression*>* args) {
2293
+ // Load the arguments on the stack and call the stub.
2294
+ SubStringStub stub;
2295
+ ASSERT(args->length() == 3);
2296
+ VisitForValue(args->at(0), kStack);
2297
+ VisitForValue(args->at(1), kStack);
2298
+ VisitForValue(args->at(2), kStack);
2299
+ __ CallStub(&stub);
2300
+ Apply(context_, rax);
2301
+ }
2302
+
2303
+
2304
+ void FullCodeGenerator::EmitRegExpExec(ZoneList<Expression*>* args) {
2305
+ // Load the arguments on the stack and call the stub.
2306
+ RegExpExecStub stub;
2307
+ ASSERT(args->length() == 4);
2308
+ VisitForValue(args->at(0), kStack);
2309
+ VisitForValue(args->at(1), kStack);
2310
+ VisitForValue(args->at(2), kStack);
2311
+ VisitForValue(args->at(3), kStack);
2312
+ __ CallStub(&stub);
2313
+ Apply(context_, rax);
2314
+ }
2315
+
2316
+
2317
+ void FullCodeGenerator::EmitValueOf(ZoneList<Expression*>* args) {
2318
+ ASSERT(args->length() == 1);
2319
+
2320
+ VisitForValue(args->at(0), kAccumulator); // Load the object.
2321
+
2322
+ Label done;
2323
+ // If the object is a smi return the object.
2324
+ __ JumpIfSmi(rax, &done);
2325
+ // If the object is not a value type, return the object.
2326
+ __ CmpObjectType(rax, JS_VALUE_TYPE, rbx);
2327
+ __ j(not_equal, &done);
2328
+ __ movq(rax, FieldOperand(rax, JSValue::kValueOffset));
2329
+
2330
+ __ bind(&done);
2331
+ Apply(context_, rax);
2332
+ }
2333
+
2334
+
2335
+ void FullCodeGenerator::EmitMathPow(ZoneList<Expression*>* args) {
2336
+ // Load the arguments on the stack and call the runtime function.
2337
+ ASSERT(args->length() == 2);
2338
+ VisitForValue(args->at(0), kStack);
2339
+ VisitForValue(args->at(1), kStack);
2340
+ __ CallRuntime(Runtime::kMath_pow, 2);
2341
+ Apply(context_, rax);
2342
+ }
2343
+
2344
+
2345
+ void FullCodeGenerator::EmitSetValueOf(ZoneList<Expression*>* args) {
2346
+ ASSERT(args->length() == 2);
2347
+
2348
+ VisitForValue(args->at(0), kStack); // Load the object.
2349
+ VisitForValue(args->at(1), kAccumulator); // Load the value.
2350
+ __ pop(rbx); // rax = value. ebx = object.
2351
+
2352
+ Label done;
2353
+ // If the object is a smi, return the value.
2354
+ __ JumpIfSmi(rbx, &done);
2355
+
2356
+ // If the object is not a value type, return the value.
2357
+ __ CmpObjectType(rbx, JS_VALUE_TYPE, rcx);
2358
+ __ j(not_equal, &done);
2359
+
2360
+ // Store the value.
2361
+ __ movq(FieldOperand(rbx, JSValue::kValueOffset), rax);
2362
+ // Update the write barrier. Save the value as it will be
2363
+ // overwritten by the write barrier code and is needed afterward.
2364
+ __ movq(rdx, rax);
2365
+ __ RecordWrite(rbx, JSValue::kValueOffset, rdx, rcx);
2366
+
2367
+ __ bind(&done);
2368
+ Apply(context_, rax);
2369
+ }
2370
+
2371
+
2372
+ void FullCodeGenerator::EmitNumberToString(ZoneList<Expression*>* args) {
2373
+ ASSERT_EQ(args->length(), 1);
2374
+
2375
+ // Load the argument on the stack and call the stub.
2376
+ VisitForValue(args->at(0), kStack);
2377
+
2378
+ NumberToStringStub stub;
2379
+ __ CallStub(&stub);
2380
+ Apply(context_, rax);
2381
+ }
2382
+
2383
+
2384
+ void FullCodeGenerator::EmitStringCharFromCode(ZoneList<Expression*>* args) {
2385
+ ASSERT(args->length() == 1);
2386
+
2387
+ VisitForValue(args->at(0), kAccumulator);
2388
+
2389
+ Label done;
2390
+ StringCharFromCodeGenerator generator(rax, rbx);
2391
+ generator.GenerateFast(masm_);
2392
+ __ jmp(&done);
2393
+
2394
+ NopRuntimeCallHelper call_helper;
2395
+ generator.GenerateSlow(masm_, call_helper);
2396
+
2397
+ __ bind(&done);
2398
+ Apply(context_, rbx);
2399
+ }
2400
+
2401
+
2402
+ void FullCodeGenerator::EmitStringCharCodeAt(ZoneList<Expression*>* args) {
2403
+ ASSERT(args->length() == 2);
2404
+
2405
+ VisitForValue(args->at(0), kStack);
2406
+ VisitForValue(args->at(1), kAccumulator);
2407
+
2408
+ Register object = rbx;
2409
+ Register index = rax;
2410
+ Register scratch = rcx;
2411
+ Register result = rdx;
2412
+
2413
+ __ pop(object);
2414
+
2415
+ Label need_conversion;
2416
+ Label index_out_of_range;
2417
+ Label done;
2418
+ StringCharCodeAtGenerator generator(object,
2419
+ index,
2420
+ scratch,
2421
+ result,
2422
+ &need_conversion,
2423
+ &need_conversion,
2424
+ &index_out_of_range,
2425
+ STRING_INDEX_IS_NUMBER);
2426
+ generator.GenerateFast(masm_);
2427
+ __ jmp(&done);
2428
+
2429
+ __ bind(&index_out_of_range);
2430
+ // When the index is out of range, the spec requires us to return
2431
+ // NaN.
2432
+ __ LoadRoot(result, Heap::kNanValueRootIndex);
2433
+ __ jmp(&done);
2434
+
2435
+ __ bind(&need_conversion);
2436
+ // Move the undefined value into the result register, which will
2437
+ // trigger conversion.
2438
+ __ LoadRoot(result, Heap::kUndefinedValueRootIndex);
2439
+ __ jmp(&done);
2440
+
2441
+ NopRuntimeCallHelper call_helper;
2442
+ generator.GenerateSlow(masm_, call_helper);
2443
+
2444
+ __ bind(&done);
2445
+ Apply(context_, result);
2446
+ }
2447
+
2448
+
2449
+ void FullCodeGenerator::EmitStringCharAt(ZoneList<Expression*>* args) {
2450
+ ASSERT(args->length() == 2);
2451
+
2452
+ VisitForValue(args->at(0), kStack);
2453
+ VisitForValue(args->at(1), kAccumulator);
2454
+
2455
+ Register object = rbx;
2456
+ Register index = rax;
2457
+ Register scratch1 = rcx;
2458
+ Register scratch2 = rdx;
2459
+ Register result = rax;
2460
+
2461
+ __ pop(object);
2462
+
2463
+ Label need_conversion;
2464
+ Label index_out_of_range;
2465
+ Label done;
2466
+ StringCharAtGenerator generator(object,
2467
+ index,
2468
+ scratch1,
2469
+ scratch2,
2470
+ result,
2471
+ &need_conversion,
2472
+ &need_conversion,
2473
+ &index_out_of_range,
2474
+ STRING_INDEX_IS_NUMBER);
2475
+ generator.GenerateFast(masm_);
2476
+ __ jmp(&done);
2477
+
2478
+ __ bind(&index_out_of_range);
2479
+ // When the index is out of range, the spec requires us to return
2480
+ // the empty string.
2481
+ __ LoadRoot(result, Heap::kEmptyStringRootIndex);
2482
+ __ jmp(&done);
2483
+
2484
+ __ bind(&need_conversion);
2485
+ // Move smi zero into the result register, which will trigger
2486
+ // conversion.
2487
+ __ Move(result, Smi::FromInt(0));
2488
+ __ jmp(&done);
2489
+
2490
+ NopRuntimeCallHelper call_helper;
2491
+ generator.GenerateSlow(masm_, call_helper);
2492
+
2493
+ __ bind(&done);
2494
+ Apply(context_, result);
2495
+ }
2496
+
2497
+
2498
+ void FullCodeGenerator::EmitStringAdd(ZoneList<Expression*>* args) {
2499
+ ASSERT_EQ(2, args->length());
2500
+
2501
+ VisitForValue(args->at(0), kStack);
2502
+ VisitForValue(args->at(1), kStack);
2503
+
2504
+ StringAddStub stub(NO_STRING_ADD_FLAGS);
2505
+ __ CallStub(&stub);
2506
+ Apply(context_, rax);
2507
+ }
2508
+
2509
+
2510
+ void FullCodeGenerator::EmitStringCompare(ZoneList<Expression*>* args) {
2511
+ ASSERT_EQ(2, args->length());
2512
+
2513
+ VisitForValue(args->at(0), kStack);
2514
+ VisitForValue(args->at(1), kStack);
2515
+
2516
+ StringCompareStub stub;
2517
+ __ CallStub(&stub);
2518
+ Apply(context_, rax);
2519
+ }
2520
+
2521
+
2522
+ void FullCodeGenerator::EmitMathSin(ZoneList<Expression*>* args) {
2523
+ // Load the argument on the stack and call the stub.
2524
+ TranscendentalCacheStub stub(TranscendentalCache::SIN);
2525
+ ASSERT(args->length() == 1);
2526
+ VisitForValue(args->at(0), kStack);
2527
+ __ CallStub(&stub);
2528
+ Apply(context_, rax);
2529
+ }
2530
+
2531
+
2532
+ void FullCodeGenerator::EmitMathCos(ZoneList<Expression*>* args) {
2533
+ // Load the argument on the stack and call the stub.
2534
+ TranscendentalCacheStub stub(TranscendentalCache::COS);
2535
+ ASSERT(args->length() == 1);
2536
+ VisitForValue(args->at(0), kStack);
2537
+ __ CallStub(&stub);
2538
+ Apply(context_, rax);
2539
+ }
2540
+
2541
+
2542
+ void FullCodeGenerator::EmitMathSqrt(ZoneList<Expression*>* args) {
2543
+ // Load the argument on the stack and call the runtime function.
2544
+ ASSERT(args->length() == 1);
2545
+ VisitForValue(args->at(0), kStack);
2546
+ __ CallRuntime(Runtime::kMath_sqrt, 1);
2547
+ Apply(context_, rax);
2548
+ }
2549
+
2550
+
2551
+ void FullCodeGenerator::EmitCallFunction(ZoneList<Expression*>* args) {
2552
+ ASSERT(args->length() >= 2);
2553
+
2554
+ int arg_count = args->length() - 2; // For receiver and function.
2555
+ VisitForValue(args->at(0), kStack); // Receiver.
2556
+ for (int i = 0; i < arg_count; i++) {
2557
+ VisitForValue(args->at(i + 1), kStack);
2558
+ }
2559
+ VisitForValue(args->at(arg_count + 1), kAccumulator); // Function.
2560
+
2561
+ // InvokeFunction requires function in rdi. Move it in there.
2562
+ if (!result_register().is(rdi)) __ movq(rdi, result_register());
2563
+ ParameterCount count(arg_count);
2564
+ __ InvokeFunction(rdi, count, CALL_FUNCTION);
2565
+ __ movq(rsi, Operand(rbp, StandardFrameConstants::kContextOffset));
2566
+ Apply(context_, rax);
2567
+ }
2568
+
2569
+
2570
+ void FullCodeGenerator::EmitRegExpConstructResult(ZoneList<Expression*>* args) {
2571
+ ASSERT(args->length() == 3);
2572
+ VisitForValue(args->at(0), kStack);
2573
+ VisitForValue(args->at(1), kStack);
2574
+ VisitForValue(args->at(2), kStack);
2575
+ __ CallRuntime(Runtime::kRegExpConstructResult, 3);
2576
+ Apply(context_, rax);
2577
+ }
2578
+
2579
+
2580
+ void FullCodeGenerator::EmitSwapElements(ZoneList<Expression*>* args) {
2581
+ ASSERT(args->length() == 3);
2582
+ VisitForValue(args->at(0), kStack);
2583
+ VisitForValue(args->at(1), kStack);
2584
+ VisitForValue(args->at(2), kStack);
2585
+ __ CallRuntime(Runtime::kSwapElements, 3);
2586
+ Apply(context_, rax);
2587
+ }
2588
+
2589
+
2590
+ void FullCodeGenerator::EmitGetFromCache(ZoneList<Expression*>* args) {
2591
+ ASSERT_EQ(2, args->length());
2592
+
2593
+ ASSERT_NE(NULL, args->at(0)->AsLiteral());
2594
+ int cache_id = Smi::cast(*(args->at(0)->AsLiteral()->handle()))->value();
2595
+
2596
+ Handle<FixedArray> jsfunction_result_caches(
2597
+ Top::global_context()->jsfunction_result_caches());
2598
+ if (jsfunction_result_caches->length() <= cache_id) {
2599
+ __ Abort("Attempt to use undefined cache.");
2600
+ __ LoadRoot(rax, Heap::kUndefinedValueRootIndex);
2601
+ Apply(context_, rax);
2602
+ return;
2603
+ }
2604
+
2605
+ VisitForValue(args->at(1), kAccumulator);
2606
+
2607
+ Register key = rax;
2608
+ Register cache = rbx;
2609
+ Register tmp = rcx;
2610
+ __ movq(cache, CodeGenerator::ContextOperand(rsi, Context::GLOBAL_INDEX));
2611
+ __ movq(cache,
2612
+ FieldOperand(cache, GlobalObject::kGlobalContextOffset));
2613
+ __ movq(cache,
2614
+ CodeGenerator::ContextOperand(
2615
+ cache, Context::JSFUNCTION_RESULT_CACHES_INDEX));
2616
+ __ movq(cache,
2617
+ FieldOperand(cache, FixedArray::OffsetOfElementAt(cache_id)));
2618
+
2619
+ Label done, not_found;
2620
+ // tmp now holds finger offset as a smi.
2621
+ ASSERT(kSmiTag == 0 && kSmiTagSize == 1);
2622
+ __ movq(tmp, FieldOperand(cache, JSFunctionResultCache::kFingerOffset));
2623
+ SmiIndex index =
2624
+ __ SmiToIndex(kScratchRegister, tmp, kPointerSizeLog2);
2625
+ __ cmpq(key, FieldOperand(cache,
2626
+ index.reg,
2627
+ index.scale,
2628
+ FixedArray::kHeaderSize));
2629
+ __ j(not_equal, &not_found);
2630
+ __ movq(rax, FieldOperand(cache,
2631
+ index.reg,
2632
+ index.scale,
2633
+ FixedArray::kHeaderSize + kPointerSize));
2634
+ __ jmp(&done);
2635
+
2636
+ __ bind(&not_found);
2637
+ // Call runtime to perform the lookup.
2638
+ __ push(cache);
2639
+ __ push(key);
2640
+ __ CallRuntime(Runtime::kGetFromCache, 2);
2641
+
2642
+ __ bind(&done);
2643
+ Apply(context_, rax);
2644
+ }
2645
+
2646
+
2647
+ void FullCodeGenerator::VisitCallRuntime(CallRuntime* expr) {
2648
+ Handle<String> name = expr->name();
2649
+ if (name->length() > 0 && name->Get(0) == '_') {
2650
+ Comment cmnt(masm_, "[ InlineRuntimeCall");
2651
+ EmitInlineRuntimeCall(expr);
2652
+ return;
2653
+ }
2654
+
2655
+ Comment cmnt(masm_, "[ CallRuntime");
2656
+ ZoneList<Expression*>* args = expr->arguments();
2657
+
2658
+ if (expr->is_jsruntime()) {
2659
+ // Prepare for calling JS runtime function.
2660
+ __ movq(rax, CodeGenerator::GlobalObject());
2661
+ __ push(FieldOperand(rax, GlobalObject::kBuiltinsOffset));
2662
+ }
2663
+
2664
+ // Push the arguments ("left-to-right").
2665
+ int arg_count = args->length();
2666
+ for (int i = 0; i < arg_count; i++) {
2667
+ VisitForValue(args->at(i), kStack);
2668
+ }
2669
+
2670
+ if (expr->is_jsruntime()) {
2671
+ // Call the JS runtime function using a call IC.
2672
+ __ Move(rcx, expr->name());
2673
+ InLoopFlag in_loop = (loop_depth() > 0) ? IN_LOOP : NOT_IN_LOOP;
2674
+ Handle<Code> ic = CodeGenerator::ComputeCallInitialize(arg_count, in_loop);
2675
+ __ call(ic, RelocInfo::CODE_TARGET);
2676
+ // Restore context register.
2677
+ __ movq(rsi, Operand(rbp, StandardFrameConstants::kContextOffset));
2678
+ } else {
2679
+ __ CallRuntime(expr->function(), arg_count);
2680
+ }
2681
+ Apply(context_, rax);
2682
+ }
2683
+
2684
+
2685
+ void FullCodeGenerator::VisitUnaryOperation(UnaryOperation* expr) {
2686
+ switch (expr->op()) {
2687
+ case Token::DELETE: {
2688
+ Comment cmnt(masm_, "[ UnaryOperation (DELETE)");
2689
+ Property* prop = expr->expression()->AsProperty();
2690
+ Variable* var = expr->expression()->AsVariableProxy()->AsVariable();
2691
+ if (prop == NULL && var == NULL) {
2692
+ // Result of deleting non-property, non-variable reference is true.
2693
+ // The subexpression may have side effects.
2694
+ VisitForEffect(expr->expression());
2695
+ Apply(context_, true);
2696
+ } else if (var != NULL &&
2697
+ !var->is_global() &&
2698
+ var->slot() != NULL &&
2699
+ var->slot()->type() != Slot::LOOKUP) {
2700
+ // Result of deleting non-global, non-dynamic variables is false.
2701
+ // The subexpression does not have side effects.
2702
+ Apply(context_, false);
2703
+ } else {
2704
+ // Property or variable reference. Call the delete builtin with
2705
+ // object and property name as arguments.
2706
+ if (prop != NULL) {
2707
+ VisitForValue(prop->obj(), kStack);
2708
+ VisitForValue(prop->key(), kStack);
2709
+ } else if (var->is_global()) {
2710
+ __ push(CodeGenerator::GlobalObject());
2711
+ __ Push(var->name());
2712
+ } else {
2713
+ // Non-global variable. Call the runtime to look up the context
2714
+ // where the variable was introduced.
2715
+ __ push(context_register());
2716
+ __ Push(var->name());
2717
+ __ CallRuntime(Runtime::kLookupContext, 2);
2718
+ __ push(rax);
2719
+ __ Push(var->name());
2720
+ }
2721
+ __ InvokeBuiltin(Builtins::DELETE, CALL_FUNCTION);
2722
+ Apply(context_, rax);
2723
+ }
2724
+ break;
2725
+ }
2726
+
2727
+ case Token::VOID: {
2728
+ Comment cmnt(masm_, "[ UnaryOperation (VOID)");
2729
+ VisitForEffect(expr->expression());
2730
+ switch (context_) {
2731
+ case Expression::kUninitialized:
2732
+ UNREACHABLE();
2733
+ break;
2734
+ case Expression::kEffect:
2735
+ break;
2736
+ case Expression::kValue:
2737
+ switch (location_) {
2738
+ case kAccumulator:
2739
+ __ LoadRoot(result_register(), Heap::kUndefinedValueRootIndex);
2740
+ break;
2741
+ case kStack:
2742
+ __ PushRoot(Heap::kUndefinedValueRootIndex);
2743
+ break;
2744
+ }
2745
+ break;
2746
+ case Expression::kTestValue:
2747
+ // Value is false so it's needed.
2748
+ switch (location_) {
2749
+ case kAccumulator:
2750
+ __ LoadRoot(result_register(), Heap::kUndefinedValueRootIndex);
2751
+ break;
2752
+ case kStack:
2753
+ __ PushRoot(Heap::kUndefinedValueRootIndex);
2754
+ break;
2755
+ }
2756
+ // Fall through.
2757
+ case Expression::kTest:
2758
+ case Expression::kValueTest:
2759
+ __ jmp(false_label_);
2760
+ break;
2761
+ }
2762
+ break;
2763
+ }
2764
+
2765
+ case Token::NOT: {
2766
+ Comment cmnt(masm_, "[ UnaryOperation (NOT)");
2767
+ Label materialize_true, materialize_false;
2768
+ Label* if_true = NULL;
2769
+ Label* if_false = NULL;
2770
+
2771
+ // Notice that the labels are swapped.
2772
+ PrepareTest(&materialize_true, &materialize_false, &if_false, &if_true);
2773
+
2774
+ VisitForControl(expr->expression(), if_true, if_false);
2775
+
2776
+ Apply(context_, if_false, if_true); // Labels swapped.
2777
+ break;
2778
+ }
2779
+
2780
+ case Token::TYPEOF: {
2781
+ Comment cmnt(masm_, "[ UnaryOperation (TYPEOF)");
2782
+ VariableProxy* proxy = expr->expression()->AsVariableProxy();
2783
+ if (proxy != NULL &&
2784
+ !proxy->var()->is_this() &&
2785
+ proxy->var()->is_global()) {
2786
+ Comment cmnt(masm_, "Global variable");
2787
+ __ Move(rcx, proxy->name());
2788
+ __ movq(rax, CodeGenerator::GlobalObject());
2789
+ Handle<Code> ic(Builtins::builtin(Builtins::LoadIC_Initialize));
2790
+ // Use a regular load, not a contextual load, to avoid a reference
2791
+ // error.
2792
+ __ Call(ic, RelocInfo::CODE_TARGET);
2793
+ __ push(rax);
2794
+ } else if (proxy != NULL &&
2795
+ proxy->var()->slot() != NULL &&
2796
+ proxy->var()->slot()->type() == Slot::LOOKUP) {
2797
+ __ push(rsi);
2798
+ __ Push(proxy->name());
2799
+ __ CallRuntime(Runtime::kLoadContextSlotNoReferenceError, 2);
2800
+ __ push(rax);
2801
+ } else {
2802
+ // This expression cannot throw a reference error at the top level.
2803
+ VisitForValue(expr->expression(), kStack);
2804
+ }
2805
+
2806
+ __ CallRuntime(Runtime::kTypeof, 1);
2807
+ Apply(context_, rax);
2808
+ break;
2809
+ }
2810
+
2811
+ case Token::ADD: {
2812
+ Comment cmt(masm_, "[ UnaryOperation (ADD)");
2813
+ VisitForValue(expr->expression(), kAccumulator);
2814
+ Label no_conversion;
2815
+ Condition is_smi = masm_->CheckSmi(result_register());
2816
+ __ j(is_smi, &no_conversion);
2817
+ __ push(result_register());
2818
+ __ InvokeBuiltin(Builtins::TO_NUMBER, CALL_FUNCTION);
2819
+ __ bind(&no_conversion);
2820
+ Apply(context_, result_register());
2821
+ break;
2822
+ }
2823
+
2824
+ case Token::SUB: {
2825
+ Comment cmt(masm_, "[ UnaryOperation (SUB)");
2826
+ bool can_overwrite =
2827
+ (expr->expression()->AsBinaryOperation() != NULL &&
2828
+ expr->expression()->AsBinaryOperation()->ResultOverwriteAllowed());
2829
+ UnaryOverwriteMode overwrite =
2830
+ can_overwrite ? UNARY_OVERWRITE : UNARY_NO_OVERWRITE;
2831
+ GenericUnaryOpStub stub(Token::SUB, overwrite);
2832
+ // GenericUnaryOpStub expects the argument to be in the
2833
+ // accumulator register rax.
2834
+ VisitForValue(expr->expression(), kAccumulator);
2835
+ __ CallStub(&stub);
2836
+ Apply(context_, rax);
2837
+ break;
2838
+ }
2839
+
2840
+ case Token::BIT_NOT: {
2841
+ Comment cmt(masm_, "[ UnaryOperation (BIT_NOT)");
2842
+ bool can_overwrite =
2843
+ (expr->expression()->AsBinaryOperation() != NULL &&
2844
+ expr->expression()->AsBinaryOperation()->ResultOverwriteAllowed());
2845
+ UnaryOverwriteMode overwrite =
2846
+ can_overwrite ? UNARY_OVERWRITE : UNARY_NO_OVERWRITE;
2847
+ GenericUnaryOpStub stub(Token::BIT_NOT, overwrite);
2848
+ // GenericUnaryOpStub expects the argument to be in the
2849
+ // accumulator register rax.
2850
+ VisitForValue(expr->expression(), kAccumulator);
2851
+ // Avoid calling the stub for Smis.
2852
+ Label smi, done;
2853
+ Condition is_smi = masm_->CheckSmi(result_register());
2854
+ __ j(is_smi, &smi);
2855
+ // Non-smi: call stub leaving result in accumulator register.
2856
+ __ CallStub(&stub);
2857
+ __ jmp(&done);
2858
+ // Perform operation directly on Smis.
2859
+ __ bind(&smi);
2860
+ __ SmiNot(result_register(), result_register());
2861
+ __ bind(&done);
2862
+ Apply(context_, result_register());
2863
+ break;
2864
+ }
2865
+
2866
+ default:
2867
+ UNREACHABLE();
2868
+ }
2869
+ }
2870
+
2871
+
2872
+ void FullCodeGenerator::VisitCountOperation(CountOperation* expr) {
2873
+ Comment cmnt(masm_, "[ CountOperation");
2874
+
2875
+ // Invalid left-hand-sides are rewritten to have a 'throw
2876
+ // ReferenceError' as the left-hand side.
2877
+ if (!expr->expression()->IsValidLeftHandSide()) {
2878
+ VisitForEffect(expr->expression());
2879
+ return;
2880
+ }
2881
+
2882
+ // Expression can only be a property, a global or a (parameter or local)
2883
+ // slot. Variables with rewrite to .arguments are treated as KEYED_PROPERTY.
2884
+ enum LhsKind { VARIABLE, NAMED_PROPERTY, KEYED_PROPERTY };
2885
+ LhsKind assign_type = VARIABLE;
2886
+ Property* prop = expr->expression()->AsProperty();
2887
+ // In case of a property we use the uninitialized expression context
2888
+ // of the key to detect a named property.
2889
+ if (prop != NULL) {
2890
+ assign_type =
2891
+ (prop->key()->IsPropertyName()) ? NAMED_PROPERTY : KEYED_PROPERTY;
2892
+ }
2893
+
2894
+ // Evaluate expression and get value.
2895
+ if (assign_type == VARIABLE) {
2896
+ ASSERT(expr->expression()->AsVariableProxy()->var() != NULL);
2897
+ Location saved_location = location_;
2898
+ location_ = kAccumulator;
2899
+ EmitVariableLoad(expr->expression()->AsVariableProxy()->var(),
2900
+ Expression::kValue);
2901
+ location_ = saved_location;
2902
+ } else {
2903
+ // Reserve space for result of postfix operation.
2904
+ if (expr->is_postfix() && context_ != Expression::kEffect) {
2905
+ __ Push(Smi::FromInt(0));
2906
+ }
2907
+ if (assign_type == NAMED_PROPERTY) {
2908
+ VisitForValue(prop->obj(), kAccumulator);
2909
+ __ push(rax); // Copy of receiver, needed for later store.
2910
+ EmitNamedPropertyLoad(prop);
2911
+ } else {
2912
+ VisitForValue(prop->obj(), kStack);
2913
+ VisitForValue(prop->key(), kAccumulator);
2914
+ __ movq(rdx, Operand(rsp, 0)); // Leave receiver on stack
2915
+ __ push(rax); // Copy of key, needed for later store.
2916
+ EmitKeyedPropertyLoad(prop);
2917
+ }
2918
+ }
2919
+
2920
+ // Call ToNumber only if operand is not a smi.
2921
+ Label no_conversion;
2922
+ Condition is_smi;
2923
+ is_smi = masm_->CheckSmi(rax);
2924
+ __ j(is_smi, &no_conversion);
2925
+ __ push(rax);
2926
+ __ InvokeBuiltin(Builtins::TO_NUMBER, CALL_FUNCTION);
2927
+ __ bind(&no_conversion);
2928
+
2929
+ // Save result for postfix expressions.
2930
+ if (expr->is_postfix()) {
2931
+ switch (context_) {
2932
+ case Expression::kUninitialized:
2933
+ UNREACHABLE();
2934
+ case Expression::kEffect:
2935
+ // Do not save result.
2936
+ break;
2937
+ case Expression::kValue:
2938
+ case Expression::kTest:
2939
+ case Expression::kValueTest:
2940
+ case Expression::kTestValue:
2941
+ // Save the result on the stack. If we have a named or keyed property
2942
+ // we store the result under the receiver that is currently on top
2943
+ // of the stack.
2944
+ switch (assign_type) {
2945
+ case VARIABLE:
2946
+ __ push(rax);
2947
+ break;
2948
+ case NAMED_PROPERTY:
2949
+ __ movq(Operand(rsp, kPointerSize), rax);
2950
+ break;
2951
+ case KEYED_PROPERTY:
2952
+ __ movq(Operand(rsp, 2 * kPointerSize), rax);
2953
+ break;
2954
+ }
2955
+ break;
2956
+ }
2957
+ }
2958
+
2959
+ // Inline smi case if we are in a loop.
2960
+ Label stub_call, done;
2961
+ if (loop_depth() > 0) {
2962
+ if (expr->op() == Token::INC) {
2963
+ __ SmiAddConstant(rax, rax, Smi::FromInt(1));
2964
+ } else {
2965
+ __ SmiSubConstant(rax, rax, Smi::FromInt(1));
2966
+ }
2967
+ __ j(overflow, &stub_call);
2968
+ // We could eliminate this smi check if we split the code at
2969
+ // the first smi check before calling ToNumber.
2970
+ is_smi = masm_->CheckSmi(rax);
2971
+ __ j(is_smi, &done);
2972
+ __ bind(&stub_call);
2973
+ // Call stub. Undo operation first.
2974
+ if (expr->op() == Token::INC) {
2975
+ __ SmiSubConstant(rax, rax, Smi::FromInt(1));
2976
+ } else {
2977
+ __ SmiAddConstant(rax, rax, Smi::FromInt(1));
2978
+ }
2979
+ }
2980
+ // Call stub for +1/-1.
2981
+ GenericBinaryOpStub stub(expr->binary_op(),
2982
+ NO_OVERWRITE,
2983
+ NO_GENERIC_BINARY_FLAGS);
2984
+ stub.GenerateCall(masm_, rax, Smi::FromInt(1));
2985
+ __ bind(&done);
2986
+
2987
+ // Store the value returned in rax.
2988
+ switch (assign_type) {
2989
+ case VARIABLE:
2990
+ if (expr->is_postfix()) {
2991
+ // Perform the assignment as if via '='.
2992
+ EmitVariableAssignment(expr->expression()->AsVariableProxy()->var(),
2993
+ Token::ASSIGN,
2994
+ Expression::kEffect);
2995
+ // For all contexts except kEffect: We have the result on
2996
+ // top of the stack.
2997
+ if (context_ != Expression::kEffect) {
2998
+ ApplyTOS(context_);
2999
+ }
3000
+ } else {
3001
+ // Perform the assignment as if via '='.
3002
+ EmitVariableAssignment(expr->expression()->AsVariableProxy()->var(),
3003
+ Token::ASSIGN,
3004
+ context_);
3005
+ }
3006
+ break;
3007
+ case NAMED_PROPERTY: {
3008
+ __ Move(rcx, prop->key()->AsLiteral()->handle());
3009
+ __ pop(rdx);
3010
+ Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Initialize));
3011
+ __ call(ic, RelocInfo::CODE_TARGET);
3012
+ // This nop signals to the IC that there is no inlined code at the call
3013
+ // site for it to patch.
3014
+ __ nop();
3015
+ if (expr->is_postfix()) {
3016
+ if (context_ != Expression::kEffect) {
3017
+ ApplyTOS(context_);
3018
+ }
3019
+ } else {
3020
+ Apply(context_, rax);
3021
+ }
3022
+ break;
3023
+ }
3024
+ case KEYED_PROPERTY: {
3025
+ __ pop(rcx);
3026
+ __ pop(rdx);
3027
+ Handle<Code> ic(Builtins::builtin(Builtins::KeyedStoreIC_Initialize));
3028
+ __ call(ic, RelocInfo::CODE_TARGET);
3029
+ // This nop signals to the IC that there is no inlined code at the call
3030
+ // site for it to patch.
3031
+ __ nop();
3032
+ if (expr->is_postfix()) {
3033
+ if (context_ != Expression::kEffect) {
3034
+ ApplyTOS(context_);
3035
+ }
3036
+ } else {
3037
+ Apply(context_, rax);
3038
+ }
3039
+ break;
3040
+ }
3041
+ }
3042
+ }
3043
+
3044
+ void FullCodeGenerator::VisitBinaryOperation(BinaryOperation* expr) {
3045
+ Comment cmnt(masm_, "[ BinaryOperation");
3046
+ switch (expr->op()) {
3047
+ case Token::COMMA:
3048
+ VisitForEffect(expr->left());
3049
+ Visit(expr->right());
3050
+ break;
3051
+
3052
+ case Token::OR:
3053
+ case Token::AND:
3054
+ EmitLogicalOperation(expr);
3055
+ break;
3056
+
3057
+ case Token::ADD:
3058
+ case Token::SUB:
3059
+ case Token::DIV:
3060
+ case Token::MOD:
3061
+ case Token::MUL:
3062
+ case Token::BIT_OR:
3063
+ case Token::BIT_AND:
3064
+ case Token::BIT_XOR:
3065
+ case Token::SHL:
3066
+ case Token::SHR:
3067
+ case Token::SAR:
3068
+ VisitForValue(expr->left(), kStack);
3069
+ VisitForValue(expr->right(), kAccumulator);
3070
+ EmitBinaryOp(expr->op(), context_);
3071
+ break;
3072
+
3073
+ default:
3074
+ UNREACHABLE();
3075
+ }
3076
+ }
3077
+
3078
+
3079
+ void FullCodeGenerator::EmitNullCompare(bool strict,
3080
+ Register obj,
3081
+ Register null_const,
3082
+ Label* if_true,
3083
+ Label* if_false,
3084
+ Register scratch) {
3085
+ __ cmpq(obj, null_const);
3086
+ if (strict) {
3087
+ __ j(equal, if_true);
3088
+ } else {
3089
+ __ j(equal, if_true);
3090
+ __ CompareRoot(obj, Heap::kUndefinedValueRootIndex);
3091
+ __ j(equal, if_true);
3092
+ __ JumpIfSmi(obj, if_false);
3093
+ // It can be an undetectable object.
3094
+ __ movq(scratch, FieldOperand(obj, HeapObject::kMapOffset));
3095
+ __ testb(FieldOperand(scratch, Map::kBitFieldOffset),
3096
+ Immediate(1 << Map::kIsUndetectable));
3097
+ __ j(not_zero, if_true);
3098
+ }
3099
+ __ jmp(if_false);
3100
+ }
3101
+
3102
+
3103
+ void FullCodeGenerator::VisitCompareOperation(CompareOperation* expr) {
3104
+ Comment cmnt(masm_, "[ CompareOperation");
3105
+
3106
+ // Always perform the comparison for its control flow. Pack the result
3107
+ // into the expression's context after the comparison is performed.
3108
+ Label materialize_true, materialize_false;
3109
+ Label* if_true = NULL;
3110
+ Label* if_false = NULL;
3111
+ PrepareTest(&materialize_true, &materialize_false, &if_true, &if_false);
3112
+
3113
+ VisitForValue(expr->left(), kStack);
3114
+ switch (expr->op()) {
3115
+ case Token::IN:
3116
+ VisitForValue(expr->right(), kStack);
3117
+ __ InvokeBuiltin(Builtins::IN, CALL_FUNCTION);
3118
+ __ CompareRoot(rax, Heap::kTrueValueRootIndex);
3119
+ __ j(equal, if_true);
3120
+ __ jmp(if_false);
3121
+ break;
3122
+
3123
+ case Token::INSTANCEOF: {
3124
+ VisitForValue(expr->right(), kStack);
3125
+ InstanceofStub stub;
3126
+ __ CallStub(&stub);
3127
+ __ testq(rax, rax);
3128
+ __ j(zero, if_true); // The stub returns 0 for true.
3129
+ __ jmp(if_false);
3130
+ break;
3131
+ }
3132
+
3133
+ default: {
3134
+ VisitForValue(expr->right(), kAccumulator);
3135
+ Condition cc = no_condition;
3136
+ bool strict = false;
3137
+ switch (expr->op()) {
3138
+ case Token::EQ_STRICT:
3139
+ strict = true;
3140
+ // Fall through.
3141
+ case Token::EQ: {
3142
+ cc = equal;
3143
+ __ pop(rdx);
3144
+ // If either operand is constant null we do a fast compare
3145
+ // against null.
3146
+ Literal* right_literal = expr->right()->AsLiteral();
3147
+ Literal* left_literal = expr->left()->AsLiteral();
3148
+ if (right_literal != NULL && right_literal->handle()->IsNull()) {
3149
+ EmitNullCompare(strict, rdx, rax, if_true, if_false, rcx);
3150
+ Apply(context_, if_true, if_false);
3151
+ return;
3152
+ } else if (left_literal != NULL && left_literal->handle()->IsNull()) {
3153
+ EmitNullCompare(strict, rax, rdx, if_true, if_false, rcx);
3154
+ Apply(context_, if_true, if_false);
3155
+ return;
3156
+ }
3157
+ break;
3158
+ }
3159
+ case Token::LT:
3160
+ cc = less;
3161
+ __ pop(rdx);
3162
+ break;
3163
+ case Token::GT:
3164
+ // Reverse left and right sizes to obtain ECMA-262 conversion order.
3165
+ cc = less;
3166
+ __ movq(rdx, result_register());
3167
+ __ pop(rax);
3168
+ break;
3169
+ case Token::LTE:
3170
+ // Reverse left and right sizes to obtain ECMA-262 conversion order.
3171
+ cc = greater_equal;
3172
+ __ movq(rdx, result_register());
3173
+ __ pop(rax);
3174
+ break;
3175
+ case Token::GTE:
3176
+ cc = greater_equal;
3177
+ __ pop(rdx);
3178
+ break;
3179
+ case Token::IN:
3180
+ case Token::INSTANCEOF:
3181
+ default:
3182
+ UNREACHABLE();
3183
+ }
3184
+
3185
+ // The comparison stub expects the smi vs. smi case to be handled
3186
+ // before it is called.
3187
+ Label slow_case;
3188
+ __ JumpIfNotBothSmi(rax, rdx, &slow_case);
3189
+ __ SmiCompare(rdx, rax);
3190
+ __ j(cc, if_true);
3191
+ __ jmp(if_false);
3192
+
3193
+ __ bind(&slow_case);
3194
+ CompareStub stub(cc, strict);
3195
+ __ CallStub(&stub);
3196
+ __ testq(rax, rax);
3197
+ __ j(cc, if_true);
3198
+ __ jmp(if_false);
3199
+ }
3200
+ }
3201
+
3202
+ // Convert the result of the comparison into one expected for this
3203
+ // expression's context.
3204
+ Apply(context_, if_true, if_false);
3205
+ }
3206
+
3207
+
3208
+ void FullCodeGenerator::VisitThisFunction(ThisFunction* expr) {
3209
+ __ movq(rax, Operand(rbp, JavaScriptFrameConstants::kFunctionOffset));
3210
+ Apply(context_, rax);
3211
+ }
3212
+
3213
+
3214
+ Register FullCodeGenerator::result_register() { return rax; }
3215
+
3216
+
3217
+ Register FullCodeGenerator::context_register() { return rsi; }
3218
+
3219
+
3220
+ void FullCodeGenerator::StoreToFrameField(int frame_offset, Register value) {
3221
+ ASSERT(IsAligned(frame_offset, kPointerSize));
3222
+ __ movq(Operand(rbp, frame_offset), value);
3223
+ }
3224
+
3225
+
3226
+ void FullCodeGenerator::LoadContextField(Register dst, int context_index) {
3227
+ __ movq(dst, CodeGenerator::ContextOperand(rsi, context_index));
3228
+ }
3229
+
3230
+
3231
+ // ----------------------------------------------------------------------------
3232
+ // Non-local control flow support.
3233
+
3234
+
3235
+ void FullCodeGenerator::EnterFinallyBlock() {
3236
+ ASSERT(!result_register().is(rdx));
3237
+ ASSERT(!result_register().is(rcx));
3238
+ // Cook return address on top of stack (smi encoded Code* delta)
3239
+ __ movq(rdx, Operand(rsp, 0));
3240
+ __ Move(rcx, masm_->CodeObject());
3241
+ __ subq(rdx, rcx);
3242
+ __ Integer32ToSmi(rdx, rdx);
3243
+ __ movq(Operand(rsp, 0), rdx);
3244
+ // Store result register while executing finally block.
3245
+ __ push(result_register());
3246
+ }
3247
+
3248
+
3249
+ void FullCodeGenerator::ExitFinallyBlock() {
3250
+ ASSERT(!result_register().is(rdx));
3251
+ ASSERT(!result_register().is(rcx));
3252
+ // Restore result register from stack.
3253
+ __ pop(result_register());
3254
+ // Uncook return address.
3255
+ __ movq(rdx, Operand(rsp, 0));
3256
+ __ SmiToInteger32(rdx, rdx);
3257
+ __ Move(rcx, masm_->CodeObject());
3258
+ __ addq(rdx, rcx);
3259
+ __ movq(Operand(rsp, 0), rdx);
3260
+ // And return.
3261
+ __ ret(0);
3262
+ }
3263
+
3264
+
3265
+ #undef __
3266
+
3267
+
3268
+ } } // namespace v8::internal
3269
+
3270
+ #endif // V8_TARGET_ARCH_X64