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
@@ -1,4 +1,4 @@
1
- // Copyright 2009 the V8 project authors. All rights reserved.
1
+ // Copyright 2010 the V8 project authors. All rights reserved.
2
2
  // Redistribution and use in source and binary forms, with or without
3
3
  // modification, are permitted provided that the following conditions are
4
4
  // met:
@@ -72,11 +72,10 @@ static void GenerateDictionaryLoad(MacroAssembler* masm,
72
72
  // Check for the absence of an interceptor.
73
73
  // Load the map into r0.
74
74
  __ movq(r0, FieldOperand(r1, JSObject::kMapOffset));
75
- // Test the has_named_interceptor bit in the map.
76
- __ testl(FieldOperand(r0, Map::kInstanceAttributesOffset),
77
- Immediate(1 << (Map::kHasNamedInterceptor + (3 * 8))));
78
75
 
79
- // Jump to miss if the interceptor bit is set.
76
+ // Bail out if the receiver has a named interceptor.
77
+ __ testl(FieldOperand(r0, Map::kBitFieldOffset),
78
+ Immediate(1 << Map::kHasNamedInterceptor));
80
79
  __ j(not_zero, miss_label);
81
80
 
82
81
  // Bail out if we have a JS global proxy object.
@@ -151,19 +150,100 @@ static void GenerateDictionaryLoad(MacroAssembler* masm,
151
150
  }
152
151
 
153
152
 
154
- // Helper function used to check that a value is either not an object
155
- // or is loaded if it is an object.
156
- static void GenerateCheckNonObjectOrLoaded(MacroAssembler* masm, Label* miss,
157
- Register value) {
153
+ static void GenerateNumberDictionaryLoad(MacroAssembler* masm,
154
+ Label* miss,
155
+ Register elements,
156
+ Register key,
157
+ Register r0,
158
+ Register r1,
159
+ Register r2) {
160
+ // Register use:
161
+ //
162
+ // elements - holds the slow-case elements of the receiver and is unchanged.
163
+ //
164
+ // key - holds the smi key on entry and is unchanged if a branch is
165
+ // performed to the miss label.
166
+ //
167
+ // Scratch registers:
168
+ //
169
+ // r0 - holds the untagged key on entry and holds the hash once computed.
170
+ // Holds the result on exit if the load succeeded.
171
+ //
172
+ // r1 - used to hold the capacity mask of the dictionary
173
+ //
174
+ // r2 - used for the index into the dictionary.
158
175
  Label done;
159
- // Check if the value is a Smi.
160
- __ JumpIfSmi(value, &done);
161
- // Check if the object has been loaded.
162
- __ movq(kScratchRegister, FieldOperand(value, JSFunction::kMapOffset));
163
- __ testb(FieldOperand(kScratchRegister, Map::kBitField2Offset),
164
- Immediate(1 << Map::kNeedsLoading));
165
- __ j(not_zero, miss);
176
+
177
+ // Compute the hash code from the untagged key. This must be kept in sync
178
+ // with ComputeIntegerHash in utils.h.
179
+ //
180
+ // hash = ~hash + (hash << 15);
181
+ __ movl(r1, r0);
182
+ __ notl(r0);
183
+ __ shll(r1, Immediate(15));
184
+ __ addl(r0, r1);
185
+ // hash = hash ^ (hash >> 12);
186
+ __ movl(r1, r0);
187
+ __ shrl(r1, Immediate(12));
188
+ __ xorl(r0, r1);
189
+ // hash = hash + (hash << 2);
190
+ __ leal(r0, Operand(r0, r0, times_4, 0));
191
+ // hash = hash ^ (hash >> 4);
192
+ __ movl(r1, r0);
193
+ __ shrl(r1, Immediate(4));
194
+ __ xorl(r0, r1);
195
+ // hash = hash * 2057;
196
+ __ imull(r0, r0, Immediate(2057));
197
+ // hash = hash ^ (hash >> 16);
198
+ __ movl(r1, r0);
199
+ __ shrl(r1, Immediate(16));
200
+ __ xorl(r0, r1);
201
+
202
+ // Compute capacity mask.
203
+ __ movq(r1, FieldOperand(elements, NumberDictionary::kCapacityOffset));
204
+ __ SmiToInteger32(r1, r1);
205
+ __ decl(r1);
206
+
207
+ // Generate an unrolled loop that performs a few probes before giving up.
208
+ const int kProbes = 4;
209
+ for (int i = 0; i < kProbes; i++) {
210
+ // Use r2 for index calculations and keep the hash intact in r0.
211
+ __ movq(r2, r0);
212
+ // Compute the masked index: (hash + i + i * i) & mask.
213
+ if (i > 0) {
214
+ __ addl(r2, Immediate(NumberDictionary::GetProbeOffset(i)));
215
+ }
216
+ __ and_(r2, r1);
217
+
218
+ // Scale the index by multiplying by the entry size.
219
+ ASSERT(NumberDictionary::kEntrySize == 3);
220
+ __ lea(r2, Operand(r2, r2, times_2, 0)); // r2 = r2 * 3
221
+
222
+ // Check if the key matches.
223
+ __ cmpq(key, FieldOperand(elements,
224
+ r2,
225
+ times_pointer_size,
226
+ NumberDictionary::kElementsStartOffset));
227
+ if (i != (kProbes - 1)) {
228
+ __ j(equal, &done);
229
+ } else {
230
+ __ j(not_equal, miss);
231
+ }
232
+ }
233
+
166
234
  __ bind(&done);
235
+ // Check that the value is a normal propety.
236
+ const int kDetailsOffset =
237
+ NumberDictionary::kElementsStartOffset + 2 * kPointerSize;
238
+ ASSERT_EQ(NORMAL, 0);
239
+ __ Test(FieldOperand(elements, r2, times_pointer_size, kDetailsOffset),
240
+ Smi::FromInt(PropertyDetails::TypeField::mask()));
241
+ __ j(not_zero, miss);
242
+
243
+ // Get the value at the masked, scaled index.
244
+ const int kValueOffset =
245
+ NumberDictionary::kElementsStartOffset + kPointerSize;
246
+ __ movq(r0, FieldOperand(elements, r2, times_pointer_size, kValueOffset));
167
247
  }
168
248
 
169
249
 
@@ -228,23 +308,38 @@ void KeyedStoreIC::RestoreInlinedVersion(Address address) {
228
308
  }
229
309
 
230
310
 
231
- void KeyedLoadIC::Generate(MacroAssembler* masm,
232
- ExternalReference const& f) {
311
+ void KeyedLoadIC::GenerateMiss(MacroAssembler* masm) {
233
312
  // ----------- S t a t e -------------
234
313
  // -- rsp[0] : return address
235
314
  // -- rsp[8] : name
236
315
  // -- rsp[16] : receiver
237
316
  // -----------------------------------
238
317
 
239
- __ movq(rax, Operand(rsp, kPointerSize));
240
- __ movq(rcx, Operand(rsp, 2 * kPointerSize));
241
318
  __ pop(rbx);
242
- __ push(rcx); // receiver
243
- __ push(rax); // name
319
+ __ push(Operand(rsp, 1 * kPointerSize)); // receiver
320
+ __ push(Operand(rsp, 1 * kPointerSize)); // name
244
321
  __ push(rbx); // return address
245
322
 
246
323
  // Perform tail call to the entry.
247
- __ TailCallRuntime(f, 2, 1);
324
+ ExternalReference ref = ExternalReference(IC_Utility(kKeyedLoadIC_Miss));
325
+ __ TailCallExternalReference(ref, 2, 1);
326
+ }
327
+
328
+
329
+ void KeyedLoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm) {
330
+ // ----------- S t a t e -------------
331
+ // -- rsp[0] : return address
332
+ // -- rsp[8] : name
333
+ // -- rsp[16] : receiver
334
+ // -----------------------------------
335
+
336
+ __ pop(rbx);
337
+ __ push(Operand(rsp, 1 * kPointerSize)); // receiver
338
+ __ push(Operand(rsp, 1 * kPointerSize)); // name
339
+ __ push(rbx); // return address
340
+
341
+ // Perform tail call to the entry.
342
+ __ TailCallRuntime(Runtime::kKeyedGetProperty, 2, 1);
248
343
  }
249
344
 
250
345
 
@@ -256,6 +351,7 @@ void KeyedLoadIC::GenerateGeneric(MacroAssembler* masm) {
256
351
  // -----------------------------------
257
352
  Label slow, check_string, index_int, index_string;
258
353
  Label check_pixel_array, probe_dictionary;
354
+ Label check_number_dictionary;
259
355
 
260
356
  // Load name and receiver.
261
357
  __ movq(rax, Operand(rsp, kPointerSize));
@@ -279,6 +375,9 @@ void KeyedLoadIC::GenerateGeneric(MacroAssembler* masm) {
279
375
 
280
376
  // Check that the key is a smi.
281
377
  __ JumpIfNotSmi(rax, &check_string);
378
+ // Save key in rbx in case we want it for the number dictionary
379
+ // case.
380
+ __ movq(rbx, rax);
282
381
  __ SmiToInteger32(rax, rax);
283
382
  // Get the elements array of the object.
284
383
  __ bind(&index_int);
@@ -306,7 +405,7 @@ void KeyedLoadIC::GenerateGeneric(MacroAssembler* masm) {
306
405
  __ bind(&check_pixel_array);
307
406
  __ CompareRoot(FieldOperand(rcx, HeapObject::kMapOffset),
308
407
  Heap::kPixelArrayMapRootIndex);
309
- __ j(not_equal, &slow);
408
+ __ j(not_equal, &check_number_dictionary);
310
409
  __ cmpl(rax, FieldOperand(rcx, PixelArray::kLengthOffset));
311
410
  __ j(above_equal, &slow);
312
411
  __ movq(rcx, FieldOperand(rcx, PixelArray::kExternalPointerOffset));
@@ -314,10 +413,21 @@ void KeyedLoadIC::GenerateGeneric(MacroAssembler* masm) {
314
413
  __ Integer32ToSmi(rax, rax);
315
414
  __ ret(0);
316
415
 
416
+ __ bind(&check_number_dictionary);
417
+ // Check whether the elements is a number dictionary.
418
+ // rax: untagged index
419
+ // rbx: key
420
+ // rcx: elements
421
+ __ CompareRoot(FieldOperand(rcx, HeapObject::kMapOffset),
422
+ Heap::kHashTableMapRootIndex);
423
+ __ j(not_equal, &slow);
424
+ GenerateNumberDictionaryLoad(masm, &slow, rcx, rbx, rax, rdx, rdi);
425
+ __ ret(0);
426
+
317
427
  // Slow case: Load name and receiver from stack and jump to runtime.
318
428
  __ bind(&slow);
319
429
  __ IncrementCounter(&Counters::keyed_load_generic_slow, 1);
320
- Generate(masm, ExternalReference(Runtime::kKeyedGetProperty));
430
+ GenerateRuntimeGetProperty(masm);
321
431
  __ bind(&check_string);
322
432
  // The key is not a smi.
323
433
  // Is it a string?
@@ -390,7 +500,6 @@ void KeyedLoadIC::GenerateGeneric(MacroAssembler* masm) {
390
500
  rdx,
391
501
  rax,
392
502
  DICTIONARY_CHECK_DONE);
393
- GenerateCheckNonObjectOrLoaded(masm, &slow, rcx);
394
503
  __ movq(rax, rcx);
395
504
  __ IncrementCounter(&Counters::keyed_load_generic_symbol, 1);
396
505
  __ ret(0);
@@ -414,7 +523,72 @@ void KeyedLoadIC::GenerateString(MacroAssembler* masm) {
414
523
  // -- rsp[8] : name
415
524
  // -- rsp[16] : receiver
416
525
  // -----------------------------------
417
- GenerateGeneric(masm);
526
+ Label miss;
527
+ Label index_not_smi;
528
+ Label index_out_of_range;
529
+ Label slow_char_code;
530
+ Label got_char_code;
531
+
532
+ Register receiver = rdx;
533
+ Register index = rax;
534
+ Register code = rbx;
535
+ Register scratch = rcx;
536
+
537
+ __ movq(index, Operand(rsp, 1 * kPointerSize));
538
+ __ movq(receiver, Operand(rsp, 2 * kPointerSize));
539
+
540
+ StringHelper::GenerateFastCharCodeAt(masm,
541
+ receiver,
542
+ index,
543
+ scratch,
544
+ code,
545
+ &miss, // When not a string.
546
+ &index_not_smi,
547
+ &index_out_of_range,
548
+ &slow_char_code);
549
+ // If we didn't bail out, code register contains smi tagged char
550
+ // code.
551
+ __ bind(&got_char_code);
552
+ StringHelper::GenerateCharFromCode(masm, code, rax, scratch, JUMP_FUNCTION);
553
+ #ifdef DEBUG
554
+ __ Abort("Unexpected fall-through from char from code tail call");
555
+ #endif
556
+
557
+ // Check if key is a heap number.
558
+ __ bind(&index_not_smi);
559
+ __ CompareRoot(FieldOperand(index, HeapObject::kMapOffset),
560
+ Heap::kHeapNumberMapRootIndex);
561
+ __ j(not_equal, &miss);
562
+
563
+ // Push receiver and key on the stack (now that we know they are a
564
+ // string and a number), and call runtime.
565
+ __ bind(&slow_char_code);
566
+ __ EnterInternalFrame();
567
+ __ push(receiver);
568
+ __ push(index);
569
+ __ CallRuntime(Runtime::kStringCharCodeAt, 2);
570
+ ASSERT(!code.is(rax));
571
+ __ movq(code, rax);
572
+ __ LeaveInternalFrame();
573
+
574
+ // Check if the runtime call returned NaN char code. If yes, return
575
+ // undefined. Otherwise, we can continue.
576
+ if (FLAG_debug_code) {
577
+ ASSERT(kSmiTag == 0);
578
+ __ JumpIfSmi(code, &got_char_code);
579
+ __ CompareRoot(FieldOperand(code, HeapObject::kMapOffset),
580
+ Heap::kHeapNumberMapRootIndex);
581
+ __ Assert(equal, "StringCharCodeAt must return smi or heap number");
582
+ }
583
+ __ CompareRoot(code, Heap::kNanValueRootIndex);
584
+ __ j(not_equal, &got_char_code);
585
+
586
+ __ bind(&index_out_of_range);
587
+ __ LoadRoot(rax, Heap::kUndefinedValueRootIndex);
588
+ __ ret(0);
589
+
590
+ __ bind(&miss);
591
+ GenerateMiss(masm);
418
592
  }
419
593
 
420
594
 
@@ -554,21 +728,54 @@ void KeyedLoadIC::GenerateExternalArray(MacroAssembler* masm,
554
728
  // Slow case: Load name and receiver from stack and jump to runtime.
555
729
  __ bind(&slow);
556
730
  __ IncrementCounter(&Counters::keyed_load_external_array_slow, 1);
557
- Generate(masm, ExternalReference(Runtime::kKeyedGetProperty));
731
+ GenerateRuntimeGetProperty(masm);
558
732
  }
559
733
 
560
734
 
561
- void KeyedLoadIC::GenerateMiss(MacroAssembler* masm) {
735
+ void KeyedLoadIC::GenerateIndexedInterceptor(MacroAssembler* masm) {
562
736
  // ----------- S t a t e -------------
563
737
  // -- rsp[0] : return address
564
- // -- rsp[8] : name
738
+ // -- rsp[8] : key
565
739
  // -- rsp[16] : receiver
566
740
  // -----------------------------------
567
- Generate(masm, ExternalReference(IC_Utility(kKeyedLoadIC_Miss)));
741
+ Label slow;
742
+
743
+ // Load key and receiver.
744
+ __ movq(rax, Operand(rsp, kPointerSize));
745
+ __ movq(rcx, Operand(rsp, 2 * kPointerSize));
746
+
747
+ // Check that the receiver isn't a smi.
748
+ __ JumpIfSmi(rcx, &slow);
749
+
750
+ // Check that the key is a smi.
751
+ __ JumpIfNotSmi(rax, &slow);
752
+
753
+ // Get the map of the receiver.
754
+ __ movq(rdx, FieldOperand(rcx, HeapObject::kMapOffset));
755
+
756
+ // Check that it has indexed interceptor and access checks
757
+ // are not enabled for this object.
758
+ __ movb(rdx, FieldOperand(rdx, Map::kBitFieldOffset));
759
+ __ andb(rdx, Immediate(kSlowCaseBitFieldMask));
760
+ __ cmpb(rdx, Immediate(1 << Map::kHasIndexedInterceptor));
761
+ __ j(not_zero, &slow);
762
+
763
+ // Everything is fine, call runtime.
764
+ __ pop(rdx);
765
+ __ push(rcx); // receiver
766
+ __ push(rax); // key
767
+ __ push(rdx); // return address
768
+
769
+ // Perform tail call to the entry.
770
+ __ TailCallExternalReference(ExternalReference(
771
+ IC_Utility(kKeyedLoadPropertyWithInterceptor)), 2, 1);
772
+
773
+ __ bind(&slow);
774
+ GenerateMiss(masm);
568
775
  }
569
776
 
570
777
 
571
- void KeyedStoreIC::Generate(MacroAssembler* masm, ExternalReference const& f) {
778
+ void KeyedStoreIC::GenerateMiss(MacroAssembler* masm) {
572
779
  // ----------- S t a t e -------------
573
780
  // -- rax : value
574
781
  // -- rsp[0] : return address
@@ -583,28 +790,27 @@ void KeyedStoreIC::Generate(MacroAssembler* masm, ExternalReference const& f) {
583
790
  __ push(rcx); // return address
584
791
 
585
792
  // Do tail-call to runtime routine.
586
- __ TailCallRuntime(f, 3, 1);
793
+ ExternalReference ref = ExternalReference(IC_Utility(kKeyedStoreIC_Miss));
794
+ __ TailCallExternalReference(ref, 3, 1);
587
795
  }
588
796
 
589
797
 
590
- void KeyedStoreIC::GenerateExtendStorage(MacroAssembler* masm) {
798
+ void KeyedStoreIC::GenerateRuntimeSetProperty(MacroAssembler* masm) {
591
799
  // ----------- S t a t e -------------
592
800
  // -- rax : value
593
- // -- rcx : transition map
594
801
  // -- rsp[0] : return address
595
802
  // -- rsp[8] : key
596
803
  // -- rsp[16] : receiver
597
804
  // -----------------------------------
598
805
 
599
- __ pop(rbx);
806
+ __ pop(rcx);
600
807
  __ push(Operand(rsp, 1 * kPointerSize)); // receiver
601
- __ push(rcx); // transition map
808
+ __ push(Operand(rsp, 1 * kPointerSize)); // key
602
809
  __ push(rax); // value
603
- __ push(rbx); // return address
810
+ __ push(rcx); // return address
604
811
 
605
812
  // Do tail-call to runtime routine.
606
- __ TailCallRuntime(
607
- ExternalReference(IC_Utility(kSharedStoreIC_ExtendStorage)), 3, 1);
813
+ __ TailCallRuntime(Runtime::kSetProperty, 3, 1);
608
814
  }
609
815
 
610
816
 
@@ -658,7 +864,7 @@ void KeyedStoreIC::GenerateGeneric(MacroAssembler* masm) {
658
864
 
659
865
  // Slow case: call runtime.
660
866
  __ bind(&slow);
661
- Generate(masm, ExternalReference(Runtime::kSetProperty));
867
+ GenerateRuntimeSetProperty(masm);
662
868
 
663
869
  // Check whether the elements is a pixel array.
664
870
  // rax: value
@@ -922,23 +1128,29 @@ void KeyedStoreIC::GenerateExternalArray(MacroAssembler* masm,
922
1128
 
923
1129
  // Slow case: call runtime.
924
1130
  __ bind(&slow);
925
- Generate(masm, ExternalReference(Runtime::kSetProperty));
1131
+ GenerateRuntimeSetProperty(masm);
926
1132
  }
927
1133
 
928
1134
 
929
1135
  void CallIC::GenerateMiss(MacroAssembler* masm, int argc) {
1136
+ // ----------- S t a t e -------------
1137
+ // rcx : function name
1138
+ // rsp[0] : return address
1139
+ // rsp[8] : argument argc
1140
+ // rsp[16] : argument argc - 1
1141
+ // ...
1142
+ // rsp[argc * 8] : argument 1
1143
+ // rsp[(argc + 1) * 8] : argument 0 = receiver
1144
+ // -----------------------------------
930
1145
  // Get the receiver of the function from the stack; 1 ~ return address.
931
1146
  __ movq(rdx, Operand(rsp, (argc + 1) * kPointerSize));
932
- // Get the name of the function to call from the stack.
933
- // 2 ~ receiver, return address.
934
- __ movq(rbx, Operand(rsp, (argc + 2) * kPointerSize));
935
1147
 
936
1148
  // Enter an internal frame.
937
1149
  __ EnterInternalFrame();
938
1150
 
939
1151
  // Push the receiver and the name of the function.
940
1152
  __ push(rdx);
941
- __ push(rbx);
1153
+ __ push(rcx);
942
1154
 
943
1155
  // Call the entry.
944
1156
  CEntryStub stub(1);
@@ -976,20 +1188,18 @@ Object* CallIC_Miss(Arguments args);
976
1188
 
977
1189
  void CallIC::GenerateMegamorphic(MacroAssembler* masm, int argc) {
978
1190
  // ----------- S t a t e -------------
979
- // rsp[0] return address
980
- // rsp[8] argument argc
981
- // rsp[16] argument argc - 1
1191
+ // rcx : function name
1192
+ // rsp[0] : return address
1193
+ // rsp[8] : argument argc
1194
+ // rsp[16] : argument argc - 1
982
1195
  // ...
983
- // rsp[argc * 8] argument 1
984
- // rsp[(argc + 1) * 8] argument 0 = reciever
985
- // rsp[(argc + 2) * 8] function name
1196
+ // rsp[argc * 8] : argument 1
1197
+ // rsp[(argc + 1) * 8] : argument 0 = receiver
986
1198
  // -----------------------------------
987
1199
  Label number, non_number, non_string, boolean, probe, miss;
988
1200
 
989
1201
  // Get the receiver of the function from the stack; 1 ~ return address.
990
1202
  __ movq(rdx, Operand(rsp, (argc + 1) * kPointerSize));
991
- // Get the name of the function from the stack; 2 ~ return address, receiver
992
- __ movq(rcx, Operand(rsp, (argc + 2) * kPointerSize));
993
1203
 
994
1204
  // Probe the stub cache.
995
1205
  Code::Flags flags =
@@ -1042,6 +1252,16 @@ static void GenerateNormalHelper(MacroAssembler* masm,
1042
1252
  int argc,
1043
1253
  bool is_global_object,
1044
1254
  Label* miss) {
1255
+ // ----------- S t a t e -------------
1256
+ // rcx : function name
1257
+ // rdx : receiver
1258
+ // rsp[0] : return address
1259
+ // rsp[8] : argument argc
1260
+ // rsp[16] : argument argc - 1
1261
+ // ...
1262
+ // rsp[argc * 8] : argument 1
1263
+ // rsp[(argc + 1) * 8] : argument 0 = receiver
1264
+ // -----------------------------------
1045
1265
  // Search dictionary - put result in register rdx.
1046
1266
  GenerateDictionaryLoad(masm, miss, rax, rdx, rbx, rcx, CHECK_DICTIONARY);
1047
1267
 
@@ -1052,10 +1272,6 @@ static void GenerateNormalHelper(MacroAssembler* masm,
1052
1272
  // Check that the value is a JavaScript function.
1053
1273
  __ CmpObjectType(rdx, JS_FUNCTION_TYPE, rdx);
1054
1274
  __ j(not_equal, miss);
1055
- // Check that the function has been loaded.
1056
- __ testb(FieldOperand(rdx, Map::kBitField2Offset),
1057
- Immediate(1 << Map::kNeedsLoading));
1058
- __ j(not_zero, miss);
1059
1275
 
1060
1276
  // Patch the receiver with the global proxy if necessary.
1061
1277
  if (is_global_object) {
@@ -1072,21 +1288,18 @@ static void GenerateNormalHelper(MacroAssembler* masm,
1072
1288
 
1073
1289
  void CallIC::GenerateNormal(MacroAssembler* masm, int argc) {
1074
1290
  // ----------- S t a t e -------------
1075
- // rsp[0] return address
1076
- // rsp[8] argument argc
1077
- // rsp[16] argument argc - 1
1291
+ // rcx : function name
1292
+ // rsp[0] : return address
1293
+ // rsp[8] : argument argc
1294
+ // rsp[16] : argument argc - 1
1078
1295
  // ...
1079
- // rsp[argc * 8] argument 1
1080
- // rsp[(argc + 1) * 8] argument 0 = reciever
1081
- // rsp[(argc + 2) * 8] function name
1296
+ // rsp[argc * 8] : argument 1
1297
+ // rsp[(argc + 1) * 8] : argument 0 = receiver
1082
1298
  // -----------------------------------
1083
-
1084
1299
  Label miss, global_object, non_global_object;
1085
1300
 
1086
1301
  // Get the receiver of the function from the stack.
1087
1302
  __ movq(rdx, Operand(rsp, (argc + 1) * kPointerSize));
1088
- // Get the name of the function from the stack.
1089
- __ movq(rcx, Operand(rsp, (argc + 2) * kPointerSize));
1090
1303
 
1091
1304
  // Check that the receiver isn't a smi.
1092
1305
  __ JumpIfSmi(rdx, &miss);
@@ -1153,22 +1366,21 @@ void LoadIC::ClearInlinedVersion(Address address) {
1153
1366
  }
1154
1367
 
1155
1368
 
1156
- void LoadIC::Generate(MacroAssembler* masm, ExternalReference const& f) {
1369
+ void LoadIC::GenerateMiss(MacroAssembler* masm) {
1157
1370
  // ----------- S t a t e -------------
1158
1371
  // -- rcx : name
1159
1372
  // -- rsp[0] : return address
1160
1373
  // -- rsp[8] : receiver
1161
1374
  // -----------------------------------
1162
1375
 
1163
- __ movq(rax, Operand(rsp, kPointerSize));
1164
-
1165
1376
  __ pop(rbx);
1166
- __ push(rax); // receiver
1377
+ __ push(Operand(rsp, 0)); // receiver
1167
1378
  __ push(rcx); // name
1168
1379
  __ push(rbx); // return address
1169
1380
 
1170
1381
  // Perform tail call to the entry.
1171
- __ TailCallRuntime(f, 2, 1);
1382
+ ExternalReference ref = ExternalReference(IC_Utility(kLoadIC_Miss));
1383
+ __ TailCallExternalReference(ref, 2, 1);
1172
1384
  }
1173
1385
 
1174
1386
 
@@ -1178,7 +1390,6 @@ void LoadIC::GenerateArrayLength(MacroAssembler* masm) {
1178
1390
  // -- rsp[0] : return address
1179
1391
  // -- rsp[8] : receiver
1180
1392
  // -----------------------------------
1181
-
1182
1393
  Label miss;
1183
1394
 
1184
1395
  __ movq(rax, Operand(rsp, kPointerSize));
@@ -1195,7 +1406,6 @@ void LoadIC::GenerateFunctionPrototype(MacroAssembler* masm) {
1195
1406
  // -- rsp[0] : return address
1196
1407
  // -- rsp[8] : receiver
1197
1408
  // -----------------------------------
1198
-
1199
1409
  Label miss;
1200
1410
 
1201
1411
  __ movq(rax, Operand(rsp, kPointerSize));
@@ -1226,24 +1436,12 @@ void LoadIC::GenerateMegamorphic(MacroAssembler* masm) {
1226
1436
  }
1227
1437
 
1228
1438
 
1229
- void LoadIC::GenerateMiss(MacroAssembler* masm) {
1230
- // ----------- S t a t e -------------
1231
- // -- rcx : name
1232
- // -- rsp[0] : return address
1233
- // -- rsp[8] : receiver
1234
- // -----------------------------------
1235
-
1236
- Generate(masm, ExternalReference(IC_Utility(kLoadIC_Miss)));
1237
- }
1238
-
1239
-
1240
1439
  void LoadIC::GenerateNormal(MacroAssembler* masm) {
1241
1440
  // ----------- S t a t e -------------
1242
1441
  // -- rcx : name
1243
1442
  // -- rsp[0] : return address
1244
1443
  // -- rsp[8] : receiver
1245
1444
  // -----------------------------------
1246
-
1247
1445
  Label miss, probe, global;
1248
1446
 
1249
1447
  __ movq(rax, Operand(rsp, kPointerSize));
@@ -1264,13 +1462,12 @@ void LoadIC::GenerateNormal(MacroAssembler* masm) {
1264
1462
 
1265
1463
  // Check for non-global object that requires access check.
1266
1464
  __ testl(FieldOperand(rbx, Map::kBitFieldOffset),
1267
- Immediate(1 << Map::kIsAccessCheckNeeded));
1465
+ Immediate(1 << Map::kIsAccessCheckNeeded));
1268
1466
  __ j(not_zero, &miss);
1269
1467
 
1270
1468
  // Search the dictionary placing the result in rax.
1271
1469
  __ bind(&probe);
1272
1470
  GenerateDictionaryLoad(masm, &miss, rdx, rax, rbx, rcx, CHECK_DICTIONARY);
1273
- GenerateCheckNonObjectOrLoaded(masm, &miss, rax);
1274
1471
  __ ret(0);
1275
1472
 
1276
1473
  // Global object access: Check access rights.
@@ -1281,7 +1478,7 @@ void LoadIC::GenerateNormal(MacroAssembler* masm) {
1281
1478
  // Cache miss: Restore receiver from stack and jump to runtime.
1282
1479
  __ bind(&miss);
1283
1480
  __ movq(rax, Operand(rsp, 1 * kPointerSize));
1284
- Generate(masm, ExternalReference(IC_Utility(kLoadIC_Miss)));
1481
+ GenerateMiss(masm);
1285
1482
  }
1286
1483
 
1287
1484
 
@@ -1291,18 +1488,16 @@ void LoadIC::GenerateStringLength(MacroAssembler* masm) {
1291
1488
  // -- rsp[0] : return address
1292
1489
  // -- rsp[8] : receiver
1293
1490
  // -----------------------------------
1294
-
1295
1491
  Label miss;
1296
1492
 
1297
1493
  __ movq(rax, Operand(rsp, kPointerSize));
1298
1494
 
1299
- StubCompiler::GenerateLoadStringLength(masm, rax, rdx, &miss);
1495
+ StubCompiler::GenerateLoadStringLength(masm, rax, rdx, rbx, &miss);
1300
1496
  __ bind(&miss);
1301
1497
  StubCompiler::GenerateLoadMiss(masm, Code::LOAD_IC);
1302
1498
  }
1303
1499
 
1304
1500
 
1305
-
1306
1501
  bool LoadIC::PatchInlinedLoad(Address address, Object* map, int offset) {
1307
1502
  // The address of the instruction following the call.
1308
1503
  Address test_instruction_address =
@@ -1330,59 +1525,93 @@ bool LoadIC::PatchInlinedLoad(Address address, Object* map, int offset) {
1330
1525
  return true;
1331
1526
  }
1332
1527
 
1333
- void StoreIC::Generate(MacroAssembler* masm, ExternalReference const& f) {
1528
+
1529
+ void StoreIC::GenerateMiss(MacroAssembler* masm) {
1334
1530
  // ----------- S t a t e -------------
1335
1531
  // -- rax : value
1336
1532
  // -- rcx : name
1533
+ // -- rdx : receiver
1337
1534
  // -- rsp[0] : return address
1338
- // -- rsp[8] : receiver
1339
1535
  // -----------------------------------
1536
+
1340
1537
  __ pop(rbx);
1341
- __ push(Operand(rsp, 0)); // receiver
1538
+ __ push(rdx); // receiver
1342
1539
  __ push(rcx); // name
1343
1540
  __ push(rax); // value
1344
1541
  __ push(rbx); // return address
1345
1542
 
1346
1543
  // Perform tail call to the entry.
1347
- __ TailCallRuntime(f, 3, 1);
1544
+ ExternalReference ref = ExternalReference(IC_Utility(kStoreIC_Miss));
1545
+ __ TailCallExternalReference(ref, 3, 1);
1348
1546
  }
1349
1547
 
1350
- void StoreIC::GenerateExtendStorage(MacroAssembler* masm) {
1351
- // ----------- S t a t e -------------
1352
- // -- rax : value
1353
- // -- rcx : Map (target of map transition)
1354
- // -- rsp[0] : return address
1355
- // -- rsp[8] : receiver
1356
- // -----------------------------------
1357
-
1358
- __ pop(rbx);
1359
- __ push(Operand(rsp, 0)); // receiver
1360
- __ push(rcx); // transition map
1361
- __ push(rax); // value
1362
- __ push(rbx); // return address
1363
-
1364
- // Perform tail call to the entry.
1365
- __ TailCallRuntime(
1366
- ExternalReference(IC_Utility(kSharedStoreIC_ExtendStorage)), 3, 1);
1367
- }
1368
1548
 
1369
1549
  void StoreIC::GenerateMegamorphic(MacroAssembler* masm) {
1370
1550
  // ----------- S t a t e -------------
1371
1551
  // -- rax : value
1372
1552
  // -- rcx : name
1553
+ // -- rdx : receiver
1373
1554
  // -- rsp[0] : return address
1374
- // -- rsp[8] : receiver
1375
1555
  // -----------------------------------
1376
1556
 
1377
1557
  // Get the receiver from the stack and probe the stub cache.
1378
- __ movq(rdx, Operand(rsp, kPointerSize));
1379
1558
  Code::Flags flags = Code::ComputeFlags(Code::STORE_IC,
1380
1559
  NOT_IN_LOOP,
1381
1560
  MONOMORPHIC);
1382
1561
  StubCache::GenerateProbe(masm, flags, rdx, rcx, rbx, no_reg);
1383
1562
 
1384
1563
  // Cache miss: Jump to runtime.
1385
- Generate(masm, ExternalReference(IC_Utility(kStoreIC_Miss)));
1564
+ GenerateMiss(masm);
1565
+ }
1566
+
1567
+
1568
+ void StoreIC::GenerateArrayLength(MacroAssembler* masm) {
1569
+ // ----------- S t a t e -------------
1570
+ // -- rax : value
1571
+ // -- rcx : name
1572
+ // -- rdx : receiver
1573
+ // -- rsp[0] : return address
1574
+ // -----------------------------------
1575
+ //
1576
+ // This accepts as a receiver anything JSObject::SetElementsLength accepts
1577
+ // (currently anything except for external and pixel arrays which means
1578
+ // anything with elements of FixedArray type.), but currently is restricted
1579
+ // to JSArray.
1580
+ // Value must be a number, but only smis are accepted as the most common case.
1581
+
1582
+ Label miss;
1583
+
1584
+ Register receiver = rdx;
1585
+ Register value = rax;
1586
+ Register scratch = rbx;
1587
+
1588
+ // Check that the receiver isn't a smi.
1589
+ __ JumpIfSmi(receiver, &miss);
1590
+
1591
+ // Check that the object is a JS array.
1592
+ __ CmpObjectType(receiver, JS_ARRAY_TYPE, scratch);
1593
+ __ j(not_equal, &miss);
1594
+
1595
+ // Check that elements are FixedArray.
1596
+ __ movq(scratch, FieldOperand(receiver, JSArray::kElementsOffset));
1597
+ __ CmpObjectType(scratch, FIXED_ARRAY_TYPE, scratch);
1598
+ __ j(not_equal, &miss);
1599
+
1600
+ // Check that value is a smi.
1601
+ __ JumpIfNotSmi(value, &miss);
1602
+
1603
+ // Prepare tail call to StoreIC_ArrayLength.
1604
+ __ pop(scratch);
1605
+ __ push(receiver);
1606
+ __ push(value);
1607
+ __ push(scratch); // return address
1608
+
1609
+ ExternalReference ref = ExternalReference(IC_Utility(kStoreIC_ArrayLength));
1610
+ __ TailCallExternalReference(ref, 2, 1);
1611
+
1612
+ __ bind(&miss);
1613
+
1614
+ GenerateMiss(masm);
1386
1615
  }
1387
1616
 
1388
1617