therubyracer 0.6.3 → 0.7.0.pre

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

Potentially problematic release.


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

Files changed (520) hide show
  1. data/Rakefile +10 -9
  2. data/ext/v8/callbacks.cpp +15 -8
  3. data/ext/v8/converters.cpp +7 -8
  4. data/ext/v8/converters.h +0 -2
  5. data/ext/v8/extconf.rb +2 -0
  6. data/ext/v8/rr.cpp +169 -0
  7. data/ext/v8/rr.h +34 -0
  8. data/ext/v8/upstream/{2.0.6 → 2.1.10}/AUTHORS +8 -1
  9. data/ext/v8/upstream/{2.0.6 → 2.1.10}/ChangeLog +198 -0
  10. data/ext/v8/upstream/{2.0.6 → 2.1.10}/LICENSE +0 -0
  11. data/ext/v8/upstream/{2.0.6 → 2.1.10}/SConstruct +152 -38
  12. data/ext/v8/upstream/{2.0.6 → 2.1.10}/include/v8-debug.h +52 -4
  13. data/ext/v8/upstream/2.1.10/include/v8-profiler.h +176 -0
  14. data/ext/v8/upstream/{2.0.6 → 2.1.10}/include/v8.h +227 -48
  15. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/SConscript +60 -10
  16. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/accessors.cc +5 -39
  17. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/accessors.h +0 -0
  18. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/allocation.cc +0 -0
  19. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/allocation.h +0 -0
  20. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/api.cc +477 -57
  21. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/api.h +8 -4
  22. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/apinatives.js +1 -1
  23. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/apiutils.h +0 -0
  24. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arguments.h +5 -6
  25. data/ext/v8/upstream/{2.0.6/src/arm/assembler-thumb2-inl.h → 2.1.10/src/arm/assembler-arm-inl.h} +42 -27
  26. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/assembler-arm.cc +430 -216
  27. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/assembler-arm.h +199 -110
  28. data/ext/v8/upstream/{2.0.6/src/arm/assembler-arm-inl.h → 2.1.10/src/arm/assembler-thumb2-inl.h} +4 -18
  29. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/assembler-thumb2.cc +142 -85
  30. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/assembler-thumb2.h +18 -9
  31. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/builtins-arm.cc +127 -87
  32. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/codegen-arm-inl.h +3 -5
  33. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/codegen-arm.cc +4634 -1427
  34. data/ext/v8/upstream/2.1.10/src/arm/codegen-arm.h +946 -0
  35. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/constants-arm.cc +21 -3
  36. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/constants-arm.h +39 -13
  37. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/cpu-arm.cc +9 -3
  38. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/debug-arm.cc +34 -8
  39. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/disasm-arm.cc +262 -117
  40. data/ext/v8/upstream/2.1.10/src/arm/fast-codegen-arm.cc +238 -0
  41. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/frames-arm.cc +0 -0
  42. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/frames-arm.h +0 -0
  43. data/ext/v8/upstream/{2.0.6/src/arm/fast-codegen-arm.cc → 2.1.10/src/arm/full-codegen-arm.cc} +453 -283
  44. data/ext/v8/upstream/2.1.10/src/arm/ic-arm.cc +1833 -0
  45. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/jump-target-arm.cc +3 -29
  46. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/macro-assembler-arm.cc +564 -104
  47. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/macro-assembler-arm.h +255 -46
  48. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/regexp-macro-assembler-arm.cc +78 -104
  49. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/regexp-macro-assembler-arm.h +6 -22
  50. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/register-allocator-arm-inl.h +0 -3
  51. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/register-allocator-arm.cc +0 -0
  52. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/register-allocator-arm.h +2 -1
  53. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/simulator-arm.cc +557 -180
  54. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/simulator-arm.h +52 -4
  55. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/stub-cache-arm.cc +904 -240
  56. data/ext/v8/upstream/2.1.10/src/arm/virtual-frame-arm.cc +668 -0
  57. data/ext/v8/upstream/2.1.10/src/arm/virtual-frame-arm.h +503 -0
  58. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/array.js +82 -109
  59. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/assembler.cc +49 -13
  60. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/assembler.h +27 -5
  61. data/ext/v8/upstream/2.1.10/src/ast.cc +1138 -0
  62. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ast.h +354 -53
  63. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/bootstrapper.cc +609 -501
  64. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/bootstrapper.h +27 -8
  65. data/ext/v8/upstream/2.1.10/src/builtins.cc +1512 -0
  66. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/builtins.h +41 -25
  67. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/bytecodes-irregexp.h +0 -0
  68. data/ext/v8/upstream/2.1.10/src/cached-powers.h +119 -0
  69. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/char-predicates-inl.h +0 -0
  70. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/char-predicates.h +0 -0
  71. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/checks.cc +0 -0
  72. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/checks.h +25 -1
  73. data/ext/v8/upstream/2.1.10/src/circular-queue-inl.h +101 -0
  74. data/ext/v8/upstream/2.1.10/src/circular-queue.cc +121 -0
  75. data/ext/v8/upstream/2.1.10/src/circular-queue.h +129 -0
  76. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/code-stubs.cc +23 -8
  77. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/code-stubs.h +16 -4
  78. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/code.h +0 -0
  79. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/codegen-inl.h +6 -34
  80. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/codegen.cc +73 -92
  81. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/codegen.h +164 -68
  82. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/compilation-cache.cc +117 -73
  83. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/compilation-cache.h +18 -17
  84. data/ext/v8/upstream/2.1.10/src/compiler.cc +623 -0
  85. data/ext/v8/upstream/2.1.10/src/compiler.h +299 -0
  86. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/contexts.cc +0 -0
  87. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/contexts.h +8 -11
  88. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/conversions-inl.h +28 -13
  89. data/ext/v8/upstream/2.1.10/src/conversions.cc +1105 -0
  90. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/conversions.h +9 -4
  91. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/counters.cc +0 -0
  92. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/counters.h +1 -1
  93. data/ext/v8/upstream/2.1.10/src/cpu-profiler-inl.h +99 -0
  94. data/ext/v8/upstream/2.1.10/src/cpu-profiler.cc +494 -0
  95. data/ext/v8/upstream/2.1.10/src/cpu-profiler.h +277 -0
  96. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/cpu.h +0 -0
  97. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8-debug.cc +15 -4
  98. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8-debug.h +0 -0
  99. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8-posix.cc +18 -0
  100. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8-readline.cc +2 -2
  101. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8-windows.cc +0 -0
  102. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8.cc +10 -6
  103. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8.h +2 -0
  104. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8.js +43 -38
  105. data/ext/v8/upstream/2.1.10/src/data-flow.cc +755 -0
  106. data/ext/v8/upstream/2.1.10/src/data-flow.h +278 -0
  107. data/ext/v8/upstream/{2.0.6/src/date-delay.js → 2.1.10/src/date.js} +100 -110
  108. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/dateparser-inl.h +11 -2
  109. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/dateparser.cc +24 -26
  110. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/dateparser.h +8 -4
  111. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/debug-agent.cc +3 -1
  112. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/debug-agent.h +0 -0
  113. data/ext/v8/upstream/{2.0.6/src/debug-delay.js → 2.1.10/src/debug-debugger.js} +111 -15
  114. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/debug.cc +156 -96
  115. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/debug.h +53 -5
  116. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/disasm.h +0 -0
  117. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/disassembler.cc +2 -8
  118. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/disassembler.h +0 -0
  119. data/ext/v8/upstream/2.1.10/src/diy-fp.cc +58 -0
  120. data/ext/v8/upstream/2.1.10/src/diy-fp.h +117 -0
  121. data/ext/v8/upstream/2.1.10/src/double.h +169 -0
  122. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/dtoa-config.c +4 -3
  123. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/execution.cc +22 -22
  124. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/execution.h +17 -4
  125. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/factory.cc +70 -46
  126. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/factory.h +27 -17
  127. data/ext/v8/upstream/2.1.10/src/fast-codegen.cc +746 -0
  128. data/ext/v8/upstream/2.1.10/src/fast-codegen.h +161 -0
  129. data/ext/v8/upstream/2.1.10/src/fast-dtoa.cc +512 -0
  130. data/ext/v8/upstream/2.1.10/src/fast-dtoa.h +59 -0
  131. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/flag-definitions.h +32 -11
  132. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/flags.cc +0 -0
  133. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/flags.h +0 -0
  134. data/ext/v8/upstream/2.1.10/src/flow-graph.cc +763 -0
  135. data/ext/v8/upstream/2.1.10/src/flow-graph.h +180 -0
  136. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/frame-element.cc +1 -4
  137. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/frame-element.h +49 -11
  138. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/frames-inl.h +2 -0
  139. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/frames.cc +91 -17
  140. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/frames.h +24 -2
  141. data/ext/v8/upstream/{2.0.6/src/fast-codegen.cc → 2.1.10/src/full-codegen.cc} +549 -198
  142. data/ext/v8/upstream/{2.0.6/src/fast-codegen.h → 2.1.10/src/full-codegen.h} +109 -29
  143. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/func-name-inferrer.cc +0 -0
  144. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/func-name-inferrer.h +0 -0
  145. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/global-handles.cc +0 -0
  146. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/global-handles.h +0 -0
  147. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/globals.h +67 -43
  148. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/handles-inl.h +0 -0
  149. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/handles.cc +124 -129
  150. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/handles.h +33 -15
  151. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/hashmap.cc +0 -0
  152. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/hashmap.h +0 -0
  153. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/heap-inl.h +56 -12
  154. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/heap-profiler.cc +2 -2
  155. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/heap-profiler.h +2 -0
  156. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/heap.cc +413 -221
  157. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/heap.h +192 -67
  158. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/assembler-ia32-inl.h +6 -0
  159. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/assembler-ia32.cc +187 -32
  160. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/assembler-ia32.h +31 -4
  161. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/builtins-ia32.cc +160 -133
  162. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/codegen-ia32-inl.h +0 -0
  163. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/codegen-ia32.cc +5533 -2177
  164. data/ext/v8/upstream/{2.0.6/src/x64/codegen-x64.h → 2.1.10/src/ia32/codegen-ia32.h} +453 -134
  165. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/cpu-ia32.cc +0 -0
  166. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/debug-ia32.cc +63 -8
  167. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/disasm-ia32.cc +99 -16
  168. data/ext/v8/upstream/2.1.10/src/ia32/fast-codegen-ia32.cc +950 -0
  169. data/ext/v8/upstream/2.1.10/src/ia32/fast-codegen-ia32.h +155 -0
  170. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/frames-ia32.cc +0 -0
  171. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/frames-ia32.h +0 -0
  172. data/ext/v8/upstream/{2.0.6/src/ia32/fast-codegen-ia32.cc → 2.1.10/src/ia32/full-codegen-ia32.cc} +454 -253
  173. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/ic-ia32.cc +545 -390
  174. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/jump-target-ia32.cc +1 -0
  175. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/macro-assembler-ia32.cc +330 -139
  176. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/macro-assembler-ia32.h +96 -30
  177. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/regexp-macro-assembler-ia32.cc +73 -89
  178. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/regexp-macro-assembler-ia32.h +6 -21
  179. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/register-allocator-ia32-inl.h +0 -0
  180. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/register-allocator-ia32.cc +59 -5
  181. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/register-allocator-ia32.h +0 -0
  182. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/simulator-ia32.cc +0 -0
  183. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/simulator-ia32.h +2 -2
  184. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/stub-cache-ia32.cc +745 -303
  185. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/virtual-frame-ia32.cc +278 -71
  186. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/virtual-frame-ia32.h +78 -22
  187. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ic-inl.h +0 -0
  188. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ic.cc +172 -89
  189. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ic.h +51 -20
  190. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/interpreter-irregexp.cc +0 -0
  191. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/interpreter-irregexp.h +0 -0
  192. data/ext/v8/upstream/{2.0.6/src/json-delay.js → 2.1.10/src/json.js} +26 -12
  193. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/jsregexp.cc +151 -118
  194. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/jsregexp.h +31 -7
  195. data/ext/v8/upstream/2.1.10/src/jump-target-heavy-inl.h +51 -0
  196. data/ext/v8/upstream/{2.0.6/src/jump-target.cc → 2.1.10/src/jump-target-heavy.cc} +164 -184
  197. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/jump-target-inl.h +8 -9
  198. data/ext/v8/upstream/{2.0.6/src/usage-analyzer.h → 2.1.10/src/jump-target-light-inl.h} +9 -7
  199. data/ext/v8/upstream/2.1.10/src/jump-target-light.cc +86 -0
  200. data/ext/v8/upstream/2.1.10/src/jump-target.cc +155 -0
  201. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/jump-target.h +6 -0
  202. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/list-inl.h +0 -0
  203. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/list.h +2 -1
  204. data/ext/v8/upstream/2.1.10/src/liveedit-debugger.js +944 -0
  205. data/ext/v8/upstream/2.1.10/src/liveedit.cc +1468 -0
  206. data/ext/v8/upstream/2.1.10/src/liveedit.h +170 -0
  207. data/ext/v8/upstream/2.1.10/src/log-inl.h +59 -0
  208. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/log-utils.cc +3 -9
  209. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/log-utils.h +1 -4
  210. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/log.cc +198 -95
  211. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/log.h +50 -49
  212. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/macro-assembler.h +9 -0
  213. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/macros.py +30 -11
  214. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/mark-compact.cc +464 -152
  215. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/mark-compact.h +41 -20
  216. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/math.js +9 -8
  217. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/memory.h +0 -0
  218. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/messages.cc +1 -0
  219. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/messages.h +0 -0
  220. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/messages.js +46 -9
  221. data/ext/v8/upstream/2.1.10/src/mips/assembler-mips-inl.h +215 -0
  222. data/ext/v8/upstream/2.1.10/src/mips/assembler-mips.cc +1208 -0
  223. data/ext/v8/upstream/2.1.10/src/mips/assembler-mips.h +665 -0
  224. data/ext/v8/upstream/2.1.10/src/mips/builtins-mips.cc +202 -0
  225. data/ext/v8/upstream/2.1.10/src/mips/codegen-mips-inl.h +70 -0
  226. data/ext/v8/upstream/2.1.10/src/mips/codegen-mips.cc +1428 -0
  227. data/ext/v8/upstream/{2.0.6/src/arm/codegen-arm.h → 2.1.10/src/mips/codegen-mips.h} +103 -205
  228. data/ext/v8/upstream/2.1.10/src/mips/constants-mips.cc +323 -0
  229. data/ext/v8/upstream/2.1.10/src/mips/constants-mips.h +525 -0
  230. data/ext/v8/upstream/2.1.10/src/mips/cpu-mips.cc +69 -0
  231. data/ext/v8/upstream/2.1.10/src/mips/debug-mips.cc +128 -0
  232. data/ext/v8/upstream/2.1.10/src/mips/disasm-mips.cc +784 -0
  233. data/ext/v8/upstream/2.1.10/src/mips/fast-codegen-mips.cc +74 -0
  234. data/ext/v8/upstream/2.1.10/src/mips/frames-mips.cc +99 -0
  235. data/ext/v8/upstream/2.1.10/src/mips/frames-mips.h +164 -0
  236. data/ext/v8/upstream/2.1.10/src/mips/full-codegen-mips.cc +273 -0
  237. data/ext/v8/upstream/2.1.10/src/mips/ic-mips.cc +217 -0
  238. data/ext/v8/upstream/2.1.10/src/mips/jump-target-mips.cc +172 -0
  239. data/ext/v8/upstream/2.1.10/src/mips/macro-assembler-mips.cc +1323 -0
  240. data/ext/v8/upstream/2.1.10/src/mips/macro-assembler-mips.h +461 -0
  241. data/ext/v8/upstream/2.1.10/src/mips/register-allocator-mips-inl.h +137 -0
  242. data/ext/v8/upstream/2.1.10/src/mips/register-allocator-mips.cc +60 -0
  243. data/ext/v8/upstream/2.1.10/src/mips/register-allocator-mips.h +46 -0
  244. data/ext/v8/upstream/2.1.10/src/mips/simulator-mips.cc +1648 -0
  245. data/ext/v8/upstream/2.1.10/src/mips/simulator-mips.h +311 -0
  246. data/ext/v8/upstream/2.1.10/src/mips/stub-cache-mips.cc +400 -0
  247. data/ext/v8/upstream/2.1.10/src/mips/virtual-frame-mips.cc +316 -0
  248. data/ext/v8/upstream/{2.0.6/src/arm/virtual-frame-arm.h → 2.1.10/src/mips/virtual-frame-mips.h} +87 -71
  249. data/ext/v8/upstream/{2.0.6/src/mirror-delay.js → 2.1.10/src/mirror-debugger.js} +51 -45
  250. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/mksnapshot.cc +97 -10
  251. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/natives.h +6 -6
  252. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/objects-debug.cc +47 -5
  253. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/objects-inl.h +154 -38
  254. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/objects.cc +528 -280
  255. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/objects.h +302 -95
  256. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/oprofile-agent.cc +25 -33
  257. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/oprofile-agent.h +9 -1
  258. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/parser.cc +444 -72
  259. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/parser.h +4 -2
  260. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-freebsd.cc +32 -13
  261. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-linux.cc +59 -25
  262. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-macos.cc +30 -13
  263. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-nullos.cc +0 -0
  264. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-openbsd.cc +21 -2
  265. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-posix.cc +0 -18
  266. data/ext/v8/upstream/2.1.10/src/platform-solaris.cc +607 -0
  267. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-win32.cc +16 -17
  268. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform.h +25 -8
  269. data/ext/v8/upstream/2.1.10/src/powers-ten.h +2461 -0
  270. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/prettyprinter.cc +49 -29
  271. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/prettyprinter.h +3 -1
  272. data/ext/v8/upstream/2.1.10/src/profile-generator-inl.h +124 -0
  273. data/ext/v8/upstream/2.1.10/src/profile-generator.cc +583 -0
  274. data/ext/v8/upstream/2.1.10/src/profile-generator.h +364 -0
  275. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/property.cc +1 -1
  276. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/property.h +12 -24
  277. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler-irregexp-inl.h +2 -2
  278. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler-irregexp.cc +2 -2
  279. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler-irregexp.h +2 -2
  280. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler-tracer.cc +2 -2
  281. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler-tracer.h +0 -0
  282. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler.cc +33 -10
  283. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler.h +12 -4
  284. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-stack.cc +0 -0
  285. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-stack.h +0 -0
  286. data/ext/v8/upstream/{2.0.6/src/regexp-delay.js → 2.1.10/src/regexp.js} +180 -58
  287. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/register-allocator-inl.h +68 -1
  288. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/register-allocator.cc +5 -2
  289. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/register-allocator.h +42 -17
  290. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/rewriter.cc +110 -4
  291. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/rewriter.h +0 -0
  292. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/runtime.cc +2733 -623
  293. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/runtime.h +43 -20
  294. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/runtime.js +46 -35
  295. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scanner.cc +278 -36
  296. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scanner.h +97 -26
  297. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scopeinfo.cc +3 -3
  298. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scopeinfo.h +1 -0
  299. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scopes.cc +11 -12
  300. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scopes.h +0 -1
  301. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/serialize.cc +298 -175
  302. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/serialize.h +184 -40
  303. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/shell.h +0 -0
  304. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/simulator.h +2 -0
  305. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/smart-pointer.h +0 -0
  306. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/snapshot-common.cc +16 -31
  307. data/ext/v8/upstream/2.1.10/src/snapshot-empty.cc +50 -0
  308. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/snapshot.h +13 -1
  309. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/spaces-inl.h +35 -27
  310. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/spaces.cc +256 -42
  311. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/spaces.h +136 -42
  312. data/ext/v8/upstream/{2.0.6/src/zone-inl.h → 2.1.10/src/splay-tree-inl.h} +102 -89
  313. data/ext/v8/upstream/2.1.10/src/splay-tree.h +203 -0
  314. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/string-stream.cc +0 -0
  315. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/string-stream.h +0 -0
  316. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/string.js +260 -149
  317. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/stub-cache.cc +195 -69
  318. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/stub-cache.h +127 -12
  319. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/third_party/dtoa/COPYING +0 -0
  320. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/third_party/dtoa/dtoa.c +0 -0
  321. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/third_party/valgrind/valgrind.h +0 -0
  322. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/token.cc +0 -0
  323. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/token.h +0 -0
  324. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/top.cc +26 -31
  325. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/top.h +3 -4
  326. data/ext/v8/upstream/2.1.10/src/type-info.cc +53 -0
  327. data/ext/v8/upstream/2.1.10/src/type-info.h +244 -0
  328. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/unicode-inl.h +0 -0
  329. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/unicode.cc +0 -0
  330. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/unicode.h +0 -0
  331. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/uri.js +6 -6
  332. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/utils.cc +0 -37
  333. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/utils.h +121 -50
  334. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8-counters.cc +0 -0
  335. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8-counters.h +130 -98
  336. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8.cc +42 -11
  337. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8.h +4 -2
  338. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8natives.js +202 -37
  339. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8threads.cc +11 -0
  340. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8threads.h +15 -0
  341. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/variables.cc +7 -51
  342. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/variables.h +5 -35
  343. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/version.cc +3 -3
  344. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/version.h +0 -0
  345. data/ext/v8/upstream/2.1.10/src/virtual-frame-heavy-inl.h +152 -0
  346. data/ext/v8/upstream/{2.0.6/src/virtual-frame.cc → 2.1.10/src/virtual-frame-heavy.cc} +107 -176
  347. data/ext/v8/upstream/2.1.10/src/virtual-frame-inl.h +39 -0
  348. data/ext/v8/upstream/2.1.10/src/virtual-frame-light-inl.h +69 -0
  349. data/ext/v8/upstream/2.1.10/src/virtual-frame-light.cc +49 -0
  350. data/ext/v8/upstream/2.1.10/src/virtual-frame.cc +49 -0
  351. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/virtual-frame.h +2 -0
  352. data/ext/v8/upstream/{2.0.6/src/log-inl.h → 2.1.10/src/vm-state-inl.h} +28 -20
  353. data/ext/v8/upstream/{2.0.6/src/snapshot-empty.cc → 2.1.10/src/vm-state.cc} +5 -6
  354. data/ext/v8/upstream/2.1.10/src/vm-state.h +75 -0
  355. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/assembler-x64-inl.h +11 -0
  356. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/assembler-x64.cc +285 -93
  357. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/assembler-x64.h +81 -78
  358. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/builtins-x64.cc +130 -87
  359. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/codegen-x64-inl.h +0 -0
  360. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/codegen-x64.cc +4520 -1317
  361. data/ext/v8/upstream/{2.0.6/src/ia32/codegen-ia32.h → 2.1.10/src/x64/codegen-x64.h} +362 -141
  362. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/cpu-x64.cc +0 -0
  363. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/debug-x64.cc +20 -4
  364. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/disasm-x64.cc +121 -44
  365. data/ext/v8/upstream/2.1.10/src/x64/fast-codegen-x64.cc +246 -0
  366. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/frames-x64.cc +0 -0
  367. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/frames-x64.h +0 -0
  368. data/ext/v8/upstream/{2.0.6/src/x64/fast-codegen-x64.cc → 2.1.10/src/x64/full-codegen-x64.cc} +404 -231
  369. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/ic-x64.cc +346 -117
  370. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/jump-target-x64.cc +1 -0
  371. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/macro-assembler-x64.cc +537 -181
  372. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/macro-assembler-x64.h +140 -34
  373. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/regexp-macro-assembler-x64.cc +74 -96
  374. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/regexp-macro-assembler-x64.h +8 -25
  375. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/register-allocator-x64-inl.h +1 -1
  376. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/register-allocator-x64.cc +3 -0
  377. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/register-allocator-x64.h +0 -0
  378. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/simulator-x64.cc +0 -0
  379. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/simulator-x64.h +2 -2
  380. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/stub-cache-x64.cc +785 -288
  381. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/virtual-frame-x64.cc +128 -52
  382. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/virtual-frame-x64.h +40 -19
  383. data/ext/v8/upstream/2.1.10/src/zone-inl.h +82 -0
  384. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/zone.cc +1 -0
  385. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/zone.h +6 -90
  386. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/codemap.js +12 -0
  387. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/consarray.js +0 -0
  388. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/csvparser.js +22 -37
  389. data/ext/v8/upstream/2.1.10/tools/generate-ten-powers.scm +286 -0
  390. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/gyp/v8.gyp +86 -24
  391. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/js2c.py +22 -22
  392. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/jsmin.py +0 -0
  393. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/linux-tick-processor +10 -1
  394. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/linux-tick-processor.py +0 -0
  395. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/logreader.js +34 -16
  396. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/mac-nm +0 -0
  397. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/mac-tick-processor +0 -0
  398. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/annotate +0 -0
  399. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/common +0 -0
  400. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/dump +0 -0
  401. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/report +0 -0
  402. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/reset +0 -0
  403. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/run +0 -0
  404. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/shutdown +0 -0
  405. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/start +0 -0
  406. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/presubmit.py +0 -0
  407. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/process-heap-prof.py +0 -0
  408. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/profile.js +70 -0
  409. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/profile_view.js +0 -0
  410. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/run-valgrind.py +0 -0
  411. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/splaytree.js +0 -0
  412. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/splaytree.py +0 -0
  413. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/stats-viewer.py +0 -0
  414. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/test.py +7 -7
  415. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/tickprocessor-driver.js +7 -1
  416. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/tickprocessor.js +140 -9
  417. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/tickprocessor.py +40 -4
  418. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/utils.py +6 -0
  419. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/README.txt +0 -0
  420. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/arm.vsprops +1 -1
  421. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/common.vsprops +1 -2
  422. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/d8.vcproj +0 -6
  423. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/d8_arm.vcproj +193 -199
  424. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/d8_x64.vcproj +16 -8
  425. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/d8js2c.cmd +0 -0
  426. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/debug.vsprops +0 -0
  427. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/ia32.vsprops +5 -1
  428. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/js2c.cmd +1 -1
  429. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/release.vsprops +0 -0
  430. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8.sln +0 -0
  431. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8.vcproj +11 -7
  432. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_arm.sln +0 -0
  433. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_arm.vcproj +227 -223
  434. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_base.vcproj +137 -5
  435. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_base_arm.vcproj +116 -4
  436. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_base_x64.vcproj +125 -4
  437. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_cctest.vcproj +12 -6
  438. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_cctest_arm.vcproj +12 -6
  439. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_cctest_x64.vcproj +11 -11
  440. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_mksnapshot.vcproj +0 -6
  441. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_mksnapshot_x64.vcproj +0 -6
  442. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_process_sample.vcproj +0 -6
  443. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_process_sample_arm.vcproj +145 -151
  444. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_process_sample_x64.vcproj +16 -6
  445. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_shell_sample.vcproj +0 -6
  446. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_shell_sample_arm.vcproj +145 -151
  447. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_shell_sample_x64.vcproj +16 -8
  448. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_snapshot.vcproj +0 -0
  449. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_snapshot_cc.vcproj +0 -0
  450. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_snapshot_cc_x64.vcproj +0 -0
  451. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_snapshot_x64.vcproj +0 -0
  452. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_x64.sln +0 -0
  453. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_x64.vcproj +11 -7
  454. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/x64.vsprops +5 -1
  455. data/ext/v8/upstream/2.1.10/tools/windows-tick-processor.bat +29 -0
  456. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/windows-tick-processor.py +0 -0
  457. data/ext/v8/upstream/Makefile +8 -2
  458. data/ext/v8/v8.cpp +21 -73
  459. data/ext/v8/v8_array.cpp +56 -0
  460. data/ext/v8/v8_array.h +8 -0
  461. data/ext/v8/v8_callbacks.cpp +121 -0
  462. data/ext/v8/v8_callbacks.h +8 -0
  463. data/ext/v8/v8_cxt.cpp +74 -77
  464. data/ext/v8/v8_cxt.h +2 -9
  465. data/ext/v8/v8_date.cpp +26 -0
  466. data/ext/v8/v8_date.h +6 -0
  467. data/ext/v8/v8_exception.cpp +55 -0
  468. data/ext/v8/v8_exception.h +6 -0
  469. data/ext/v8/v8_external.cpp +50 -0
  470. data/ext/v8/v8_external.h +8 -0
  471. data/ext/v8/v8_func.cpp +76 -18
  472. data/ext/v8/v8_func.h +5 -4
  473. data/ext/v8/v8_msg.cpp +55 -46
  474. data/ext/v8/v8_msg.h +3 -11
  475. data/ext/v8/v8_obj.cpp +67 -36
  476. data/ext/v8/v8_obj.h +6 -8
  477. data/ext/v8/v8_ref.cpp +25 -9
  478. data/ext/v8/v8_ref.h +3 -5
  479. data/ext/v8/v8_script.cpp +17 -10
  480. data/ext/v8/v8_script.h +3 -3
  481. data/ext/v8/v8_str.cpp +34 -6
  482. data/ext/v8/v8_str.h +4 -2
  483. data/ext/v8/v8_template.cpp +195 -33
  484. data/ext/v8/v8_template.h +4 -5
  485. data/ext/v8/v8_try_catch.cpp +99 -0
  486. data/ext/v8/v8_try_catch.h +5 -0
  487. data/ext/v8/v8_value.cpp +164 -0
  488. data/ext/v8/v8_value.h +10 -0
  489. data/lib/v8.rb +3 -1
  490. data/lib/v8/access.rb +60 -0
  491. data/lib/v8/array.rb +15 -0
  492. data/lib/v8/callbacks.rb +88 -0
  493. data/lib/v8/cli.rb +1 -1
  494. data/lib/v8/context.rb +55 -66
  495. data/lib/v8/function.rb +20 -2
  496. data/lib/v8/object.rb +14 -12
  497. data/lib/v8/ruby_error.rb +3 -0
  498. data/lib/v8/to.rb +59 -7
  499. data/spec/ext/cxt_spec.rb +2 -15
  500. data/spec/ext/func_spec.rb +17 -10
  501. data/spec/ext/try_catch_spec.rb +32 -0
  502. data/spec/foo.rb +17 -0
  503. data/spec/redjs/jsapi_spec.rb +173 -96
  504. data/spec/spec_helper.rb +7 -0
  505. data/spec/v8/to_spec.rb +0 -1
  506. data/therubyracer.gemspec +6 -6
  507. metadata +493 -386
  508. data/ext/v8/upstream/2.0.6/src/arm/ic-arm.cc +0 -849
  509. data/ext/v8/upstream/2.0.6/src/arm/virtual-frame-arm.cc +0 -412
  510. data/ext/v8/upstream/2.0.6/src/ast.cc +0 -512
  511. data/ext/v8/upstream/2.0.6/src/builtins.cc +0 -851
  512. data/ext/v8/upstream/2.0.6/src/compiler.cc +0 -1132
  513. data/ext/v8/upstream/2.0.6/src/compiler.h +0 -107
  514. data/ext/v8/upstream/2.0.6/src/conversions.cc +0 -709
  515. data/ext/v8/upstream/2.0.6/src/usage-analyzer.cc +0 -426
  516. data/ext/v8/upstream/2.0.6/tools/windows-tick-processor.bat +0 -5
  517. data/ext/v8/upstream/no-strict-aliasing.patch +0 -13
  518. data/ext/v8/v8_standalone.cpp +0 -69
  519. data/ext/v8/v8_standalone.h +0 -31
  520. data/spec/ext/obj_spec.rb +0 -13
@@ -77,7 +77,7 @@ struct Register {
77
77
  return 1 << code_;
78
78
  }
79
79
 
80
- // (unfortunately we can't make this private in a struct)
80
+ // Unfortunately we can't make this private in a struct.
81
81
  int code_;
82
82
  };
83
83
 
@@ -93,7 +93,7 @@ const Register no_reg = { -1 };
93
93
 
94
94
 
95
95
  struct XMMRegister {
96
- bool is_valid() const { return 0 <= code_ && code_ < 2; } // currently
96
+ bool is_valid() const { return 0 <= code_ && code_ < 8; }
97
97
  int code() const {
98
98
  ASSERT(is_valid());
99
99
  return code_;
@@ -229,8 +229,10 @@ enum ScaleFactor {
229
229
  times_2 = 1,
230
230
  times_4 = 2,
231
231
  times_8 = 3,
232
+ times_int_size = times_4,
233
+ times_half_pointer_size = times_2,
232
234
  times_pointer_size = times_4,
233
- times_half_pointer_size = times_2
235
+ times_twice_pointer_size = times_8
234
236
  };
235
237
 
236
238
 
@@ -239,6 +241,9 @@ class Operand BASE_EMBEDDED {
239
241
  // reg
240
242
  INLINE(explicit Operand(Register reg));
241
243
 
244
+ // XMM reg
245
+ INLINE(explicit Operand(XMMRegister xmm_reg));
246
+
242
247
  // [disp/r]
243
248
  INLINE(explicit Operand(int32_t disp, RelocInfo::Mode rmode));
244
249
  // disp only must always be relocated
@@ -540,8 +545,12 @@ class Assembler : public Malloced {
540
545
  void cmov(Condition cc, Register dst, Handle<Object> handle);
541
546
  void cmov(Condition cc, Register dst, const Operand& src);
542
547
 
548
+ // Flag management.
549
+ void cld();
550
+
543
551
  // Repetitive string instructions.
544
552
  void rep_movs();
553
+ void rep_stos();
545
554
 
546
555
  // Exchange two registers
547
556
  void xchg(Register dst, Register src);
@@ -559,6 +568,8 @@ class Assembler : public Malloced {
559
568
  void and_(const Operand& dst, const Immediate& x);
560
569
 
561
570
  void cmpb(const Operand& op, int8_t imm8);
571
+ void cmpb(Register src, const Operand& dst);
572
+ void cmpb(const Operand& dst, Register src);
562
573
  void cmpb_al(const Operand& op);
563
574
  void cmpw_ax(const Operand& op);
564
575
  void cmpw(const Operand& op, Immediate imm16);
@@ -624,6 +635,7 @@ class Assembler : public Malloced {
624
635
 
625
636
  void test(Register reg, const Immediate& imm);
626
637
  void test(Register reg, const Operand& op);
638
+ void test_b(Register reg, const Operand& op);
627
639
  void test(const Operand& op, const Immediate& imm);
628
640
 
629
641
  void xor_(Register dst, int32_t imm32);
@@ -663,6 +675,7 @@ class Assembler : public Malloced {
663
675
  void call(Label* L);
664
676
  void call(byte* entry, RelocInfo::Mode rmode);
665
677
  void call(const Operand& adr);
678
+ void call(const ExternalReference& target);
666
679
  void call(Handle<Code> code, RelocInfo::Mode rmode);
667
680
 
668
681
  // Jumps
@@ -678,15 +691,18 @@ class Assembler : public Malloced {
678
691
 
679
692
  // Floating-point operations
680
693
  void fld(int i);
694
+ void fstp(int i);
681
695
 
682
696
  void fld1();
683
697
  void fldz();
698
+ void fldpi();
684
699
 
685
700
  void fld_s(const Operand& adr);
686
701
  void fld_d(const Operand& adr);
687
702
 
688
703
  void fstp_s(const Operand& adr);
689
704
  void fstp_d(const Operand& adr);
705
+ void fst_d(const Operand& adr);
690
706
 
691
707
  void fild_s(const Operand& adr);
692
708
  void fild_d(const Operand& adr);
@@ -696,6 +712,7 @@ class Assembler : public Malloced {
696
712
  void fistp_s(const Operand& adr);
697
713
  void fistp_d(const Operand& adr);
698
714
 
715
+ // The fisttp instructions require SSE3.
699
716
  void fisttp_s(const Operand& adr);
700
717
  void fisttp_d(const Operand& adr);
701
718
 
@@ -745,14 +762,18 @@ class Assembler : public Malloced {
745
762
  void cvttsd2si(Register dst, const Operand& src);
746
763
 
747
764
  void cvtsi2sd(XMMRegister dst, const Operand& src);
765
+ void cvtss2sd(XMMRegister dst, XMMRegister src);
748
766
 
749
767
  void addsd(XMMRegister dst, XMMRegister src);
750
768
  void subsd(XMMRegister dst, XMMRegister src);
751
769
  void mulsd(XMMRegister dst, XMMRegister src);
752
770
  void divsd(XMMRegister dst, XMMRegister src);
753
771
  void xorpd(XMMRegister dst, XMMRegister src);
772
+ void sqrtsd(XMMRegister dst, XMMRegister src);
754
773
 
755
774
  void comisd(XMMRegister dst, XMMRegister src);
775
+ void ucomisd(XMMRegister dst, XMMRegister src);
776
+ void movmskpd(Register dst, XMMRegister src);
756
777
 
757
778
  void movdqa(XMMRegister dst, const Operand& src);
758
779
  void movdqa(const Operand& dst, XMMRegister src);
@@ -763,6 +784,12 @@ class Assembler : public Malloced {
763
784
  void movdbl(XMMRegister dst, const Operand& src);
764
785
  void movdbl(const Operand& dst, XMMRegister src);
765
786
 
787
+ void movd(XMMRegister dst, const Operand& src);
788
+ void movsd(XMMRegister dst, XMMRegister src);
789
+
790
+ void pxor(XMMRegister dst, XMMRegister src);
791
+ void ptest(XMMRegister dst, XMMRegister src);
792
+
766
793
  // Debugging
767
794
  void Print();
768
795
 
@@ -806,7 +833,7 @@ class Assembler : public Malloced {
806
833
 
807
834
  void emit_sse_operand(XMMRegister reg, const Operand& adr);
808
835
  void emit_sse_operand(XMMRegister dst, XMMRegister src);
809
-
836
+ void emit_sse_operand(Register dst, XMMRegister src);
810
837
 
811
838
  private:
812
839
  byte* addr_at(int pos) { return buffer_ + pos; }
@@ -36,16 +36,37 @@ namespace internal {
36
36
  #define __ ACCESS_MASM(masm)
37
37
 
38
38
 
39
- void Builtins::Generate_Adaptor(MacroAssembler* masm, CFunctionId id) {
40
- // TODO(428): Don't pass the function in a static variable.
41
- ExternalReference passed = ExternalReference::builtin_passed_function();
42
- __ mov(Operand::StaticVariable(passed), edi);
43
-
44
- // The actual argument count has already been loaded into register
45
- // eax, but JumpToRuntime expects eax to contain the number of
46
- // arguments including the receiver.
47
- __ inc(eax);
48
- __ JumpToRuntime(ExternalReference(id));
39
+ void Builtins::Generate_Adaptor(MacroAssembler* masm,
40
+ CFunctionId id,
41
+ BuiltinExtraArguments extra_args) {
42
+ // ----------- S t a t e -------------
43
+ // -- eax : number of arguments excluding receiver
44
+ // -- edi : called function (only guaranteed when
45
+ // extra_args requires it)
46
+ // -- esi : context
47
+ // -- esp[0] : return address
48
+ // -- esp[4] : last argument
49
+ // -- ...
50
+ // -- esp[4 * argc] : first argument (argc == eax)
51
+ // -- esp[4 * (argc +1)] : receiver
52
+ // -----------------------------------
53
+
54
+ // Insert extra arguments.
55
+ int num_extra_args = 0;
56
+ if (extra_args == NEEDS_CALLED_FUNCTION) {
57
+ num_extra_args = 1;
58
+ Register scratch = ebx;
59
+ __ pop(scratch); // Save return address.
60
+ __ push(edi);
61
+ __ push(scratch); // Restore return address.
62
+ } else {
63
+ ASSERT(extra_args == NO_EXTRA_ARGUMENTS);
64
+ }
65
+
66
+ // JumpToExternalReference expects eax to contain the number of arguments
67
+ // including the receiver and the extra arguments.
68
+ __ add(Operand(eax), Immediate(num_extra_args + 1));
69
+ __ JumpToExternalReference(ExternalReference(id));
49
70
  }
50
71
 
51
72
 
@@ -72,7 +93,10 @@ void Builtins::Generate_JSConstructCall(MacroAssembler* masm) {
72
93
  // edi: called object
73
94
  // eax: number of arguments
74
95
  __ bind(&non_function_call);
75
-
96
+ // CALL_NON_FUNCTION expects the non-function constructor as receiver
97
+ // (instead of the original receiver from the call site). The receiver is
98
+ // stack element argc+1.
99
+ __ mov(Operand(esp, eax, times_4, kPointerSize), edi);
76
100
  // Set expected number of arguments to zero (not changing eax).
77
101
  __ Set(ebx, Immediate(0));
78
102
  __ GetBuiltinEntry(edx, Builtins::CALL_NON_FUNCTION_AS_CONSTRUCTOR);
@@ -81,7 +105,8 @@ void Builtins::Generate_JSConstructCall(MacroAssembler* masm) {
81
105
  }
82
106
 
83
107
 
84
- void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) {
108
+ static void Generate_JSConstructStubHelper(MacroAssembler* masm,
109
+ bool is_api_function) {
85
110
  // Enter a construct frame.
86
111
  __ EnterConstructFrame();
87
112
 
@@ -277,8 +302,17 @@ void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) {
277
302
  __ j(greater_equal, &loop);
278
303
 
279
304
  // Call the function.
280
- ParameterCount actual(eax);
281
- __ InvokeFunction(edi, actual, CALL_FUNCTION);
305
+ if (is_api_function) {
306
+ __ mov(esi, FieldOperand(edi, JSFunction::kContextOffset));
307
+ Handle<Code> code = Handle<Code>(
308
+ Builtins::builtin(Builtins::HandleApiCallConstruct));
309
+ ParameterCount expected(0);
310
+ __ InvokeCode(code, expected, expected,
311
+ RelocInfo::CODE_TARGET, CALL_FUNCTION);
312
+ } else {
313
+ ParameterCount actual(eax);
314
+ __ InvokeFunction(edi, actual, CALL_FUNCTION);
315
+ }
282
316
 
283
317
  // Restore context from the frame.
284
318
  __ mov(esi, Operand(ebp, StandardFrameConstants::kContextOffset));
@@ -319,6 +353,16 @@ void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) {
319
353
  }
320
354
 
321
355
 
356
+ void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) {
357
+ Generate_JSConstructStubHelper(masm, false);
358
+ }
359
+
360
+
361
+ void Builtins::Generate_JSConstructStubApi(MacroAssembler* masm) {
362
+ Generate_JSConstructStubHelper(masm, true);
363
+ }
364
+
365
+
322
366
  static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
323
367
  bool is_construct) {
324
368
  // Clear the context before we push it when entering the JS frame.
@@ -396,33 +440,26 @@ void Builtins::Generate_FunctionCall(MacroAssembler* masm) {
396
440
  __ bind(&done);
397
441
  }
398
442
 
399
- // 2. Get the function to call from the stack.
400
- { Label done, non_function, function;
401
- // +1 ~ return address.
402
- __ mov(edi, Operand(esp, eax, times_4, +1 * kPointerSize));
403
- __ test(edi, Immediate(kSmiTagMask));
404
- __ j(zero, &non_function, not_taken);
405
- __ CmpObjectType(edi, JS_FUNCTION_TYPE, ecx);
406
- __ j(equal, &function, taken);
407
-
408
- // Non-function called: Clear the function to force exception.
409
- __ bind(&non_function);
410
- __ xor_(edi, Operand(edi));
411
- __ jmp(&done);
412
-
413
- // Function called: Change context eagerly to get the right global object.
414
- __ bind(&function);
415
- __ mov(esi, FieldOperand(edi, JSFunction::kContextOffset));
443
+ // 2. Get the function to call (passed as receiver) from the stack, check
444
+ // if it is a function.
445
+ Label non_function;
446
+ // 1 ~ return address.
447
+ __ mov(edi, Operand(esp, eax, times_4, 1 * kPointerSize));
448
+ __ test(edi, Immediate(kSmiTagMask));
449
+ __ j(zero, &non_function, not_taken);
450
+ __ CmpObjectType(edi, JS_FUNCTION_TYPE, ecx);
451
+ __ j(not_equal, &non_function, not_taken);
416
452
 
417
- __ bind(&done);
418
- }
419
453
 
420
- // 3. Make sure first argument is an object; convert if necessary.
421
- { Label call_to_object, use_global_receiver, patch_receiver, done;
422
- __ mov(ebx, Operand(esp, eax, times_4, 0));
454
+ // 3a. Patch the first argument if necessary when calling a function.
455
+ Label shift_arguments;
456
+ { Label convert_to_object, use_global_receiver, patch_receiver;
457
+ // Change context eagerly in case we need the global receiver.
458
+ __ mov(esi, FieldOperand(edi, JSFunction::kContextOffset));
423
459
 
460
+ __ mov(ebx, Operand(esp, eax, times_4, 0)); // First argument.
424
461
  __ test(ebx, Immediate(kSmiTagMask));
425
- __ j(zero, &call_to_object);
462
+ __ j(zero, &convert_to_object);
426
463
 
427
464
  __ cmp(ebx, Factory::null_value());
428
465
  __ j(equal, &use_global_receiver);
@@ -432,31 +469,28 @@ void Builtins::Generate_FunctionCall(MacroAssembler* masm) {
432
469
  __ mov(ecx, FieldOperand(ebx, HeapObject::kMapOffset));
433
470
  __ movzx_b(ecx, FieldOperand(ecx, Map::kInstanceTypeOffset));
434
471
  __ cmp(ecx, FIRST_JS_OBJECT_TYPE);
435
- __ j(less, &call_to_object);
472
+ __ j(below, &convert_to_object);
436
473
  __ cmp(ecx, LAST_JS_OBJECT_TYPE);
437
- __ j(less_equal, &done);
474
+ __ j(below_equal, &shift_arguments);
438
475
 
439
- __ bind(&call_to_object);
440
- __ EnterInternalFrame(); // preserves eax, ebx, edi
441
-
442
- // Store the arguments count on the stack (smi tagged).
476
+ __ bind(&convert_to_object);
477
+ __ EnterInternalFrame(); // In order to preserve argument count.
443
478
  __ SmiTag(eax);
444
479
  __ push(eax);
445
480
 
446
- __ push(edi); // save edi across the call
447
481
  __ push(ebx);
448
482
  __ InvokeBuiltin(Builtins::TO_OBJECT, CALL_FUNCTION);
449
483
  __ mov(ebx, eax);
450
- __ pop(edi); // restore edi after the call
451
484
 
452
- // Get the arguments count and untag it.
453
485
  __ pop(eax);
454
486
  __ SmiUntag(eax);
455
-
456
487
  __ LeaveInternalFrame();
488
+ // Restore the function to edi.
489
+ __ mov(edi, Operand(esp, eax, times_4, 1 * kPointerSize));
457
490
  __ jmp(&patch_receiver);
458
491
 
459
- // Use the global receiver object from the called function as the receiver.
492
+ // Use the global receiver object from the called function as the
493
+ // receiver.
460
494
  __ bind(&use_global_receiver);
461
495
  const int kGlobalIndex =
462
496
  Context::kHeaderSize + Context::GLOBAL_INDEX * kPointerSize;
@@ -468,50 +502,55 @@ void Builtins::Generate_FunctionCall(MacroAssembler* masm) {
468
502
  __ bind(&patch_receiver);
469
503
  __ mov(Operand(esp, eax, times_4, 0), ebx);
470
504
 
471
- __ bind(&done);
472
- }
473
-
474
- // 4. Check that the function really is a function.
475
- { Label done;
476
- __ test(edi, Operand(edi));
477
- __ j(not_zero, &done, taken);
478
- __ xor_(ebx, Operand(ebx));
479
- // CALL_NON_FUNCTION will expect to find the non-function callee on the
480
- // expression stack of the caller. Transfer it from receiver to the
481
- // caller's expression stack (and make the first argument the receiver
482
- // for CALL_NON_FUNCTION) by decrementing the argument count.
483
- __ dec(eax);
484
- __ GetBuiltinEntry(edx, Builtins::CALL_NON_FUNCTION);
485
- __ jmp(Handle<Code>(builtin(ArgumentsAdaptorTrampoline)),
486
- RelocInfo::CODE_TARGET);
487
- __ bind(&done);
505
+ __ jmp(&shift_arguments);
488
506
  }
489
507
 
490
- // 5. Shift arguments and return address one slot down on the stack
491
- // (overwriting the receiver).
508
+ // 3b. Patch the first argument when calling a non-function. The
509
+ // CALL_NON_FUNCTION builtin expects the non-function callee as
510
+ // receiver, so overwrite the first argument which will ultimately
511
+ // become the receiver.
512
+ __ bind(&non_function);
513
+ __ mov(Operand(esp, eax, times_4, 0), edi);
514
+ // Clear edi to indicate a non-function being called.
515
+ __ xor_(edi, Operand(edi));
516
+
517
+ // 4. Shift arguments and return address one slot down on the stack
518
+ // (overwriting the original receiver). Adjust argument count to make
519
+ // the original first argument the new receiver.
520
+ __ bind(&shift_arguments);
492
521
  { Label loop;
493
522
  __ mov(ecx, eax);
494
523
  __ bind(&loop);
495
524
  __ mov(ebx, Operand(esp, ecx, times_4, 0));
496
525
  __ mov(Operand(esp, ecx, times_4, kPointerSize), ebx);
497
526
  __ dec(ecx);
498
- __ j(not_sign, &loop);
527
+ __ j(not_sign, &loop); // While non-negative (to copy return address).
499
528
  __ pop(ebx); // Discard copy of return address.
500
529
  __ dec(eax); // One fewer argument (first argument is new receiver).
501
530
  }
502
531
 
503
- // 6. Get the code to call from the function and check that the number of
504
- // expected arguments matches what we're providing.
505
- { __ mov(edx, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset));
506
- __ mov(ebx,
507
- FieldOperand(edx, SharedFunctionInfo::kFormalParameterCountOffset));
508
- __ mov(edx, FieldOperand(edx, SharedFunctionInfo::kCodeOffset));
509
- __ lea(edx, FieldOperand(edx, Code::kHeaderSize));
510
- __ cmp(eax, Operand(ebx));
511
- __ j(not_equal, Handle<Code>(builtin(ArgumentsAdaptorTrampoline)));
532
+ // 5a. Call non-function via tail call to CALL_NON_FUNCTION builtin.
533
+ { Label function;
534
+ __ test(edi, Operand(edi));
535
+ __ j(not_zero, &function, taken);
536
+ __ xor_(ebx, Operand(ebx));
537
+ __ GetBuiltinEntry(edx, Builtins::CALL_NON_FUNCTION);
538
+ __ jmp(Handle<Code>(builtin(ArgumentsAdaptorTrampoline)),
539
+ RelocInfo::CODE_TARGET);
540
+ __ bind(&function);
512
541
  }
513
542
 
514
- // 7. Jump (tail-call) to the code in register edx without checking arguments.
543
+ // 5b. Get the code to call from the function and check that the number of
544
+ // expected arguments matches what we're providing. If so, jump
545
+ // (tail-call) to the code in register edx without checking arguments.
546
+ __ mov(edx, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset));
547
+ __ mov(ebx,
548
+ FieldOperand(edx, SharedFunctionInfo::kFormalParameterCountOffset));
549
+ __ mov(edx, FieldOperand(edx, SharedFunctionInfo::kCodeOffset));
550
+ __ lea(edx, FieldOperand(edx, Code::kHeaderSize));
551
+ __ cmp(eax, Operand(ebx));
552
+ __ j(not_equal, Handle<Code>(builtin(ArgumentsAdaptorTrampoline)));
553
+
515
554
  ParameterCount expected(0);
516
555
  __ InvokeCode(Operand(edx), expected, expected, JUMP_FUNCTION);
517
556
  }
@@ -606,9 +645,7 @@ void Builtins::Generate_FunctionApply(MacroAssembler* masm) {
606
645
  __ mov(eax, Operand(ebp, kIndexOffset));
607
646
  __ jmp(&entry);
608
647
  __ bind(&loop);
609
- __ mov(ecx, Operand(ebp, 2 * kPointerSize)); // load arguments
610
- __ push(ecx);
611
- __ push(eax);
648
+ __ mov(edx, Operand(ebp, 2 * kPointerSize)); // load arguments
612
649
 
613
650
  // Use inline caching to speed up access to arguments.
614
651
  Handle<Code> ic(Builtins::builtin(Builtins::KeyedLoadIC_Initialize));
@@ -618,8 +655,7 @@ void Builtins::Generate_FunctionApply(MacroAssembler* masm) {
618
655
  // we have generated an inline version of the keyed load. In this
619
656
  // case, we know that we are not generating a test instruction next.
620
657
 
621
- // Remove IC arguments from the stack and push the nth argument.
622
- __ add(Operand(esp), Immediate(2 * kPointerSize));
658
+ // Push the nth argument.
623
659
  __ push(eax);
624
660
 
625
661
  // Update the index on the stack and in register eax.
@@ -761,38 +797,23 @@ static void AllocateEmptyJSArray(MacroAssembler* masm,
761
797
  // register elements_array is scratched.
762
798
  static void AllocateJSArray(MacroAssembler* masm,
763
799
  Register array_function, // Array function.
764
- Register array_size, // As a smi.
800
+ Register array_size, // As a smi, cannot be 0.
765
801
  Register result,
766
802
  Register elements_array,
767
803
  Register elements_array_end,
768
804
  Register scratch,
769
805
  bool fill_with_hole,
770
806
  Label* gc_required) {
771
- Label not_empty, allocated;
807
+ ASSERT(scratch.is(edi)); // rep stos destination
808
+ ASSERT(!fill_with_hole || array_size.is(ecx)); // rep stos count
772
809
 
773
810
  // Load the initial map from the array function.
774
811
  __ mov(elements_array,
775
812
  FieldOperand(array_function,
776
813
  JSFunction::kPrototypeOrInitialMapOffset));
777
814
 
778
- // Check whether an empty sized array is requested.
779
- __ test(array_size, Operand(array_size));
780
- __ j(not_zero, &not_empty);
781
-
782
- // If an empty array is requested allocate a small elements array anyway. This
783
- // keeps the code below free of special casing for the empty array.
784
- int size = JSArray::kSize + FixedArray::SizeFor(kPreallocatedArrayElements);
785
- __ AllocateInNewSpace(size,
786
- result,
787
- elements_array_end,
788
- scratch,
789
- gc_required,
790
- TAG_OBJECT);
791
- __ jmp(&allocated);
792
-
793
815
  // Allocate the JSArray object together with space for a FixedArray with the
794
816
  // requested elements.
795
- __ bind(&not_empty);
796
817
  ASSERT(kSmiTagSize == 1 && kSmiTag == 0);
797
818
  __ AllocateInNewSpace(JSArray::kSize + FixedArray::kHeaderSize,
798
819
  times_half_pointer_size, // array_size is a smi.
@@ -809,7 +830,6 @@ static void AllocateJSArray(MacroAssembler* masm,
809
830
  // elements_array: initial map
810
831
  // elements_array_end: start of next object
811
832
  // array_size: size of array (smi)
812
- __ bind(&allocated);
813
833
  __ mov(FieldOperand(result, JSObject::kMapOffset), elements_array);
814
834
  __ mov(elements_array, Factory::empty_fixed_array());
815
835
  __ mov(FieldOperand(result, JSArray::kPropertiesOffset), elements_array);
@@ -833,15 +853,6 @@ static void AllocateJSArray(MacroAssembler* masm,
833
853
  __ SmiUntag(array_size); // Convert from smi to value.
834
854
  __ mov(FieldOperand(elements_array, JSObject::kMapOffset),
835
855
  Factory::fixed_array_map());
836
- Label not_empty_2, fill_array;
837
- __ test(array_size, Operand(array_size));
838
- __ j(not_zero, &not_empty_2);
839
- // Length of the FixedArray is the number of pre-allocated elements even
840
- // though the actual JSArray has length 0.
841
- __ mov(FieldOperand(elements_array, Array::kLengthOffset),
842
- Immediate(kPreallocatedArrayElements));
843
- __ jmp(&fill_array);
844
- __ bind(&not_empty_2);
845
856
  // For non-empty JSArrays the length of the FixedArray and the JSArray is the
846
857
  // same.
847
858
  __ mov(FieldOperand(elements_array, Array::kLengthOffset), array_size);
@@ -849,20 +860,18 @@ static void AllocateJSArray(MacroAssembler* masm,
849
860
  // Fill the allocated FixedArray with the hole value if requested.
850
861
  // result: JSObject
851
862
  // elements_array: elements array
852
- // elements_array_end: start of next object
853
- __ bind(&fill_array);
854
863
  if (fill_with_hole) {
855
- Label loop, entry;
856
- __ mov(scratch, Factory::the_hole_value());
857
- __ lea(elements_array, Operand(elements_array,
858
- FixedArray::kHeaderSize - kHeapObjectTag));
859
- __ jmp(&entry);
860
- __ bind(&loop);
861
- __ mov(Operand(elements_array, 0), scratch);
862
- __ add(Operand(elements_array), Immediate(kPointerSize));
863
- __ bind(&entry);
864
- __ cmp(elements_array, Operand(elements_array_end));
865
- __ j(below, &loop);
864
+ __ lea(edi, Operand(elements_array,
865
+ FixedArray::kHeaderSize - kHeapObjectTag));
866
+
867
+ __ push(eax);
868
+ __ mov(eax, Factory::the_hole_value());
869
+
870
+ __ cld();
871
+ __ rep_stos();
872
+
873
+ // Restore saved registers.
874
+ __ pop(eax);
866
875
  }
867
876
  }
868
877
 
@@ -884,7 +893,8 @@ static void AllocateJSArray(MacroAssembler* masm,
884
893
  static void ArrayNativeCode(MacroAssembler* masm,
885
894
  bool construct_call,
886
895
  Label* call_generic_code) {
887
- Label argc_one_or_more, argc_two_or_more, prepare_generic_code_call;
896
+ Label argc_one_or_more, argc_two_or_more, prepare_generic_code_call,
897
+ empty_array, not_empty_array;
888
898
 
889
899
  // Push the constructor and argc. No need to tag argc as a smi, as there will
890
900
  // be no garbage collection with this on the stack.
@@ -900,6 +910,7 @@ static void ArrayNativeCode(MacroAssembler* masm,
900
910
  __ test(eax, Operand(eax));
901
911
  __ j(not_zero, &argc_one_or_more);
902
912
 
913
+ __ bind(&empty_array);
903
914
  // Handle construction of an empty array.
904
915
  AllocateEmptyJSArray(masm,
905
916
  edi,
@@ -922,30 +933,46 @@ static void ArrayNativeCode(MacroAssembler* masm,
922
933
  __ cmp(eax, 1);
923
934
  __ j(not_equal, &argc_two_or_more);
924
935
  ASSERT(kSmiTag == 0);
925
- __ test(Operand(esp, (push_count + 1) * kPointerSize),
926
- Immediate(kIntptrSignBit | kSmiTagMask));
936
+ __ mov(ecx, Operand(esp, (push_count + 1) * kPointerSize));
937
+ __ test(ecx, Operand(ecx));
938
+ __ j(not_zero, &not_empty_array);
939
+
940
+ // The single argument passed is zero, so we jump to the code above used to
941
+ // handle the case of no arguments passed. To adapt the stack for that we move
942
+ // the return address and the pushed constructor (if pushed) one stack slot up
943
+ // thereby removing the passed argument. Argc is also on the stack - at the
944
+ // bottom - and it needs to be changed from 1 to 0 to have the call into the
945
+ // runtime system work in case a GC is required.
946
+ for (int i = push_count; i > 0; i--) {
947
+ __ mov(eax, Operand(esp, i * kPointerSize));
948
+ __ mov(Operand(esp, (i + 1) * kPointerSize), eax);
949
+ }
950
+ __ add(Operand(esp), Immediate(2 * kPointerSize)); // Drop two stack slots.
951
+ __ push(Immediate(0)); // Treat this as a call with argc of zero.
952
+ __ jmp(&empty_array);
953
+
954
+ __ bind(&not_empty_array);
955
+ __ test(ecx, Immediate(kIntptrSignBit | kSmiTagMask));
927
956
  __ j(not_zero, &prepare_generic_code_call);
928
957
 
929
958
  // Handle construction of an empty array of a certain size. Get the size from
930
959
  // the stack and bail out if size is to large to actually allocate an elements
931
960
  // array.
932
- __ mov(edx, Operand(esp, (push_count + 1) * kPointerSize));
933
- ASSERT(kSmiTag == 0);
934
- __ cmp(edx, JSObject::kInitialMaxFastElementArray << kSmiTagSize);
961
+ __ cmp(ecx, JSObject::kInitialMaxFastElementArray << kSmiTagSize);
935
962
  __ j(greater_equal, &prepare_generic_code_call);
936
963
 
937
964
  // edx: array_size (smi)
938
965
  // edi: constructor
939
- // esp[0]: argc
966
+ // esp[0]: argc (cannot be 0 here)
940
967
  // esp[4]: constructor (only if construct_call)
941
968
  // esp[8]: return address
942
969
  // esp[C]: argument
943
970
  AllocateJSArray(masm,
944
971
  edi,
945
- edx,
972
+ ecx,
946
973
  eax,
947
974
  ebx,
948
- ecx,
975
+ edx,
949
976
  edi,
950
977
  true,
951
978
  &prepare_generic_code_call);