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
@@ -30,6 +30,7 @@
30
30
  #include "codegen-inl.h"
31
31
  #include "jump-target-inl.h"
32
32
  #include "register-allocator-inl.h"
33
+ #include "virtual-frame-inl.h"
33
34
 
34
35
  namespace v8 {
35
36
  namespace internal {
@@ -41,40 +41,46 @@ namespace internal {
41
41
 
42
42
  MacroAssembler::MacroAssembler(void* buffer, int size)
43
43
  : Assembler(buffer, size),
44
- unresolved_(0),
45
44
  generating_stub_(false),
46
45
  allow_stub_calls_(true),
47
46
  code_object_(Heap::undefined_value()) {
48
47
  }
49
48
 
50
49
 
51
- static void RecordWriteHelper(MacroAssembler* masm,
52
- Register object,
53
- Register addr,
54
- Register scratch) {
50
+ void MacroAssembler::RecordWriteHelper(Register object,
51
+ Register addr,
52
+ Register scratch) {
53
+ if (FLAG_debug_code) {
54
+ // Check that the object is not in new space.
55
+ Label not_in_new_space;
56
+ InNewSpace(object, scratch, not_equal, &not_in_new_space);
57
+ Abort("new-space object passed to RecordWriteHelper");
58
+ bind(&not_in_new_space);
59
+ }
60
+
55
61
  Label fast;
56
62
 
57
63
  // Compute the page start address from the heap object pointer, and reuse
58
64
  // the 'object' register for it.
59
- masm->and_(object, ~Page::kPageAlignmentMask);
65
+ and_(object, ~Page::kPageAlignmentMask);
60
66
  Register page_start = object;
61
67
 
62
68
  // Compute the bit addr in the remembered set/index of the pointer in the
63
69
  // page. Reuse 'addr' as pointer_offset.
64
- masm->sub(addr, Operand(page_start));
65
- masm->shr(addr, kObjectAlignmentBits);
70
+ sub(addr, Operand(page_start));
71
+ shr(addr, kObjectAlignmentBits);
66
72
  Register pointer_offset = addr;
67
73
 
68
74
  // If the bit offset lies beyond the normal remembered set range, it is in
69
75
  // the extra remembered set area of a large object.
70
- masm->cmp(pointer_offset, Page::kPageSize / kPointerSize);
71
- masm->j(less, &fast);
76
+ cmp(pointer_offset, Page::kPageSize / kPointerSize);
77
+ j(less, &fast);
72
78
 
73
79
  // Adjust 'page_start' so that addressing using 'pointer_offset' hits the
74
80
  // extra remembered set after the large object.
75
81
 
76
82
  // Find the length of the large object (FixedArray).
77
- masm->mov(scratch, Operand(page_start, Page::kObjectStartOffset
83
+ mov(scratch, Operand(page_start, Page::kObjectStartOffset
78
84
  + FixedArray::kLengthOffset));
79
85
  Register array_length = scratch;
80
86
 
@@ -84,59 +90,41 @@ static void RecordWriteHelper(MacroAssembler* masm,
84
90
  // Add the delta between the end of the normal RSet and the start of the
85
91
  // extra RSet to 'page_start', so that addressing the bit using
86
92
  // 'pointer_offset' hits the extra RSet words.
87
- masm->lea(page_start,
88
- Operand(page_start, array_length, times_pointer_size,
89
- Page::kObjectStartOffset + FixedArray::kHeaderSize
90
- - Page::kRSetEndOffset));
93
+ lea(page_start,
94
+ Operand(page_start, array_length, times_pointer_size,
95
+ Page::kObjectStartOffset + FixedArray::kHeaderSize
96
+ - Page::kRSetEndOffset));
91
97
 
92
98
  // NOTE: For now, we use the bit-test-and-set (bts) x86 instruction
93
99
  // to limit code size. We should probably evaluate this decision by
94
100
  // measuring the performance of an equivalent implementation using
95
101
  // "simpler" instructions
96
- masm->bind(&fast);
97
- masm->bts(Operand(page_start, Page::kRSetOffset), pointer_offset);
102
+ bind(&fast);
103
+ bts(Operand(page_start, Page::kRSetOffset), pointer_offset);
98
104
  }
99
105
 
100
106
 
101
- class RecordWriteStub : public CodeStub {
102
- public:
103
- RecordWriteStub(Register object, Register addr, Register scratch)
104
- : object_(object), addr_(addr), scratch_(scratch) { }
105
-
106
- void Generate(MacroAssembler* masm);
107
-
108
- private:
109
- Register object_;
110
- Register addr_;
111
- Register scratch_;
112
-
113
- #ifdef DEBUG
114
- void Print() {
115
- PrintF("RecordWriteStub (object reg %d), (addr reg %d), (scratch reg %d)\n",
116
- object_.code(), addr_.code(), scratch_.code());
117
- }
118
- #endif
119
-
120
- // Minor key encoding in 12 bits of three registers (object, address and
121
- // scratch) OOOOAAAASSSS.
122
- class ScratchBits: public BitField<uint32_t, 0, 4> {};
123
- class AddressBits: public BitField<uint32_t, 4, 4> {};
124
- class ObjectBits: public BitField<uint32_t, 8, 4> {};
125
-
126
- Major MajorKey() { return RecordWrite; }
127
-
128
- int MinorKey() {
129
- // Encode the registers.
130
- return ObjectBits::encode(object_.code()) |
131
- AddressBits::encode(addr_.code()) |
132
- ScratchBits::encode(scratch_.code());
107
+ void MacroAssembler::InNewSpace(Register object,
108
+ Register scratch,
109
+ Condition cc,
110
+ Label* branch) {
111
+ ASSERT(cc == equal || cc == not_equal);
112
+ if (Serializer::enabled()) {
113
+ // Can't do arithmetic on external references if it might get serialized.
114
+ mov(scratch, Operand(object));
115
+ // The mask isn't really an address. We load it as an external reference in
116
+ // case the size of the new space is different between the snapshot maker
117
+ // and the running system.
118
+ and_(Operand(scratch), Immediate(ExternalReference::new_space_mask()));
119
+ cmp(Operand(scratch), Immediate(ExternalReference::new_space_start()));
120
+ j(cc, branch);
121
+ } else {
122
+ int32_t new_space_start = reinterpret_cast<int32_t>(
123
+ ExternalReference::new_space_start().address());
124
+ lea(scratch, Operand(object, -new_space_start));
125
+ and_(scratch, Heap::NewSpaceMask());
126
+ j(cc, branch);
133
127
  }
134
- };
135
-
136
-
137
- void RecordWriteStub::Generate(MacroAssembler* masm) {
138
- RecordWriteHelper(masm, object_, addr_, scratch_);
139
- masm->ret(0);
140
128
  }
141
129
 
142
130
 
@@ -147,9 +135,14 @@ void RecordWriteStub::Generate(MacroAssembler* masm) {
147
135
  // All registers are clobbered by the operation.
148
136
  void MacroAssembler::RecordWrite(Register object, int offset,
149
137
  Register value, Register scratch) {
138
+ // The compiled code assumes that record write doesn't change the
139
+ // context register, so we check that none of the clobbered
140
+ // registers are esi.
141
+ ASSERT(!object.is(esi) && !value.is(esi) && !scratch.is(esi));
142
+
150
143
  // First, check if a remembered set write is even needed. The tests below
151
144
  // catch stores of Smis and stores into young gen (which does not have space
152
- // for the remembered set bits.
145
+ // for the remembered set bits).
153
146
  Label done;
154
147
 
155
148
  // Skip barrier if writing a smi.
@@ -157,21 +150,19 @@ void MacroAssembler::RecordWrite(Register object, int offset,
157
150
  test(value, Immediate(kSmiTagMask));
158
151
  j(zero, &done);
159
152
 
160
- if (Serializer::enabled()) {
161
- // Can't do arithmetic on external references if it might get serialized.
162
- mov(value, Operand(object));
163
- and_(value, Heap::NewSpaceMask());
164
- cmp(Operand(value), Immediate(ExternalReference::new_space_start()));
165
- j(equal, &done);
166
- } else {
167
- int32_t new_space_start = reinterpret_cast<int32_t>(
168
- ExternalReference::new_space_start().address());
169
- lea(value, Operand(object, -new_space_start));
170
- and_(value, Heap::NewSpaceMask());
171
- j(equal, &done);
172
- }
153
+ InNewSpace(object, value, equal, &done);
173
154
 
174
- if ((offset > 0) && (offset < Page::kMaxHeapObjectSize)) {
155
+ // The offset is relative to a tagged or untagged HeapObject pointer,
156
+ // so either offset or offset + kHeapObjectTag must be a
157
+ // multiple of kPointerSize.
158
+ ASSERT(IsAligned(offset, kPointerSize) ||
159
+ IsAligned(offset + kHeapObjectTag, kPointerSize));
160
+
161
+ // We use optimized write barrier code if the word being written to is not in
162
+ // a large object chunk or is in the first page of a large object chunk.
163
+ // We make sure that an offset is inside the right limits whether it is
164
+ // tagged or untagged.
165
+ if ((offset > 0) && (offset < Page::kMaxHeapObjectSize - kHeapObjectTag)) {
175
166
  // Compute the bit offset in the remembered set, leave it in 'value'.
176
167
  lea(value, Operand(object, offset));
177
168
  and_(value, Page::kPageAlignmentMask);
@@ -202,7 +193,7 @@ void MacroAssembler::RecordWrite(Register object, int offset,
202
193
  // If we are already generating a shared stub, not inlining the
203
194
  // record write code isn't going to save us any memory.
204
195
  if (generating_stub()) {
205
- RecordWriteHelper(this, object, dst, value);
196
+ RecordWriteHelper(object, dst, value);
206
197
  } else {
207
198
  RecordWriteStub stub(object, dst, value);
208
199
  CallStub(&stub);
@@ -210,6 +201,14 @@ void MacroAssembler::RecordWrite(Register object, int offset,
210
201
  }
211
202
 
212
203
  bind(&done);
204
+
205
+ // Clobber all input registers when running with the debug-code flag
206
+ // turned on to provoke errors.
207
+ if (FLAG_debug_code) {
208
+ mov(object, Immediate(BitCast<int32_t>(kZapValue)));
209
+ mov(value, Immediate(BitCast<int32_t>(kZapValue)));
210
+ mov(scratch, Immediate(BitCast<int32_t>(kZapValue)));
211
+ }
213
212
  }
214
213
 
215
214
 
@@ -295,6 +294,13 @@ void MacroAssembler::CopyRegistersFromStackToMemory(Register base,
295
294
  }
296
295
  }
297
296
  }
297
+
298
+ void MacroAssembler::DebugBreak() {
299
+ Set(eax, Immediate(0));
300
+ mov(ebx, Immediate(ExternalReference(Runtime::kDebugBreak)));
301
+ CEntryStub ces(1);
302
+ call(ces.GetCode(), RelocInfo::DEBUG_BREAK);
303
+ }
298
304
  #endif
299
305
 
300
306
  void MacroAssembler::Set(Register dst, const Immediate& x) {
@@ -325,6 +331,19 @@ void MacroAssembler::CmpInstanceType(Register map, InstanceType type) {
325
331
  }
326
332
 
327
333
 
334
+ void MacroAssembler::CheckMap(Register obj,
335
+ Handle<Map> map,
336
+ Label* fail,
337
+ bool is_heap_object) {
338
+ if (!is_heap_object) {
339
+ test(obj, Immediate(kSmiTagMask));
340
+ j(zero, fail);
341
+ }
342
+ cmp(FieldOperand(obj, HeapObject::kMapOffset), Immediate(map));
343
+ j(not_equal, fail);
344
+ }
345
+
346
+
328
347
  Condition MacroAssembler::IsObjectStringType(Register heap_object,
329
348
  Register map,
330
349
  Register instance_type) {
@@ -351,6 +370,23 @@ void MacroAssembler::FCmp() {
351
370
  }
352
371
 
353
372
 
373
+ void MacroAssembler::AbortIfNotNumber(Register object) {
374
+ Label ok;
375
+ test(object, Immediate(kSmiTagMask));
376
+ j(zero, &ok);
377
+ cmp(FieldOperand(object, HeapObject::kMapOffset),
378
+ Factory::heap_number_map());
379
+ Assert(equal, "Operand not a number");
380
+ bind(&ok);
381
+ }
382
+
383
+
384
+ void MacroAssembler::AbortIfNotSmi(Register object) {
385
+ test(object, Immediate(kSmiTagMask));
386
+ Assert(equal, "Operand not a smi");
387
+ }
388
+
389
+
354
390
  void MacroAssembler::EnterFrame(StackFrame::Type type) {
355
391
  push(ebp);
356
392
  mov(ebp, Operand(esp));
@@ -383,12 +419,8 @@ void MacroAssembler::EnterExitFramePrologue(ExitFrame::Mode mode) {
383
419
 
384
420
  // Reserve room for entry stack pointer and push the debug marker.
385
421
  ASSERT(ExitFrameConstants::kSPOffset == -1 * kPointerSize);
386
- push(Immediate(0)); // saved entry sp, patched before call
387
- if (mode == ExitFrame::MODE_DEBUG) {
388
- push(Immediate(0));
389
- } else {
390
- push(Immediate(CodeObject()));
391
- }
422
+ push(Immediate(0)); // Saved entry sp, patched before call.
423
+ push(Immediate(CodeObject())); // Accessed from ExitFrame::code_slot.
392
424
 
393
425
  // Save the frame pointer and the context in top.
394
426
  ExternalReference c_entry_fp_address(Top::k_c_entry_fp_address);
@@ -525,6 +557,7 @@ void MacroAssembler::PopTryHandler() {
525
557
  Register MacroAssembler::CheckMaps(JSObject* object, Register object_reg,
526
558
  JSObject* holder, Register holder_reg,
527
559
  Register scratch,
560
+ int save_at_depth,
528
561
  Label* miss) {
529
562
  // Make sure there's no overlap between scratch and the other
530
563
  // registers.
@@ -532,7 +565,11 @@ Register MacroAssembler::CheckMaps(JSObject* object, Register object_reg,
532
565
 
533
566
  // Keep track of the current object in register reg.
534
567
  Register reg = object_reg;
535
- int depth = 1;
568
+ int depth = 0;
569
+
570
+ if (save_at_depth == depth) {
571
+ mov(Operand(esp, kPointerSize), object_reg);
572
+ }
536
573
 
537
574
  // Check the maps in the prototype chain.
538
575
  // Traverse the prototype chain from the object and do map checks.
@@ -564,7 +601,6 @@ Register MacroAssembler::CheckMaps(JSObject* object, Register object_reg,
564
601
  // to it in the code. Load it from the map.
565
602
  reg = holder_reg; // from now the object is in holder_reg
566
603
  mov(reg, FieldOperand(scratch, Map::kPrototypeOffset));
567
-
568
604
  } else {
569
605
  // Check the map of the current object.
570
606
  cmp(FieldOperand(reg, HeapObject::kMapOffset),
@@ -582,6 +618,10 @@ Register MacroAssembler::CheckMaps(JSObject* object, Register object_reg,
582
618
  mov(reg, Handle<JSObject>(prototype));
583
619
  }
584
620
 
621
+ if (save_at_depth == depth) {
622
+ mov(Operand(esp, kPointerSize), reg);
623
+ }
624
+
585
625
  // Go to the next object in the prototype chain.
586
626
  object = prototype;
587
627
  }
@@ -592,7 +632,7 @@ Register MacroAssembler::CheckMaps(JSObject* object, Register object_reg,
592
632
  j(not_equal, miss, not_taken);
593
633
 
594
634
  // Log the check depth.
595
- LOG(IntEvent("check-maps-depth", depth));
635
+ LOG(IntEvent("check-maps-depth", depth + 1));
596
636
 
597
637
  // Perform security check for access to the global object and return
598
638
  // the holder register.
@@ -870,7 +910,9 @@ void MacroAssembler::AllocateTwoByteString(Register result,
870
910
  // Set the map, length and hash field.
871
911
  mov(FieldOperand(result, HeapObject::kMapOffset),
872
912
  Immediate(Factory::string_map()));
873
- mov(FieldOperand(result, String::kLengthOffset), length);
913
+ mov(scratch1, length);
914
+ SmiTag(scratch1);
915
+ mov(FieldOperand(result, String::kLengthOffset), scratch1);
874
916
  mov(FieldOperand(result, String::kHashFieldOffset),
875
917
  Immediate(String::kEmptyHashField));
876
918
  }
@@ -903,7 +945,9 @@ void MacroAssembler::AllocateAsciiString(Register result,
903
945
  // Set the map, length and hash field.
904
946
  mov(FieldOperand(result, HeapObject::kMapOffset),
905
947
  Immediate(Factory::ascii_string_map()));
906
- mov(FieldOperand(result, String::kLengthOffset), length);
948
+ mov(scratch1, length);
949
+ SmiTag(scratch1);
950
+ mov(FieldOperand(result, String::kLengthOffset), scratch1);
907
951
  mov(FieldOperand(result, String::kHashFieldOffset),
908
952
  Immediate(String::kEmptyHashField));
909
953
  }
@@ -1098,9 +1142,23 @@ void MacroAssembler::CallRuntime(Runtime::Function* f, int num_arguments) {
1098
1142
  return;
1099
1143
  }
1100
1144
 
1101
- Runtime::FunctionId function_id =
1102
- static_cast<Runtime::FunctionId>(f->stub_id);
1103
- RuntimeStub stub(function_id, num_arguments);
1145
+ // TODO(1236192): Most runtime routines don't need the number of
1146
+ // arguments passed in because it is constant. At some point we
1147
+ // should remove this need and make the runtime routine entry code
1148
+ // smarter.
1149
+ Set(eax, Immediate(num_arguments));
1150
+ mov(ebx, Immediate(ExternalReference(f)));
1151
+ CEntryStub ces(1);
1152
+ CallStub(&ces);
1153
+ }
1154
+
1155
+
1156
+ void MacroAssembler::CallExternalReference(ExternalReference ref,
1157
+ int num_arguments) {
1158
+ mov(eax, Immediate(num_arguments));
1159
+ mov(ebx, Immediate(ref));
1160
+
1161
+ CEntryStub stub(1);
1104
1162
  CallStub(&stub);
1105
1163
  }
1106
1164
 
@@ -1114,22 +1172,33 @@ Object* MacroAssembler::TryCallRuntime(Runtime::Function* f,
1114
1172
  return Heap::undefined_value();
1115
1173
  }
1116
1174
 
1117
- Runtime::FunctionId function_id =
1118
- static_cast<Runtime::FunctionId>(f->stub_id);
1119
- RuntimeStub stub(function_id, num_arguments);
1120
- return TryCallStub(&stub);
1175
+ // TODO(1236192): Most runtime routines don't need the number of
1176
+ // arguments passed in because it is constant. At some point we
1177
+ // should remove this need and make the runtime routine entry code
1178
+ // smarter.
1179
+ Set(eax, Immediate(num_arguments));
1180
+ mov(ebx, Immediate(ExternalReference(f)));
1181
+ CEntryStub ces(1);
1182
+ return TryCallStub(&ces);
1121
1183
  }
1122
1184
 
1123
1185
 
1124
- void MacroAssembler::TailCallRuntime(const ExternalReference& ext,
1125
- int num_arguments,
1126
- int result_size) {
1186
+ void MacroAssembler::TailCallExternalReference(const ExternalReference& ext,
1187
+ int num_arguments,
1188
+ int result_size) {
1127
1189
  // TODO(1236192): Most runtime routines don't need the number of
1128
1190
  // arguments passed in because it is constant. At some point we
1129
1191
  // should remove this need and make the runtime routine entry code
1130
1192
  // smarter.
1131
1193
  Set(eax, Immediate(num_arguments));
1132
- JumpToRuntime(ext);
1194
+ JumpToExternalReference(ext);
1195
+ }
1196
+
1197
+
1198
+ void MacroAssembler::TailCallRuntime(Runtime::FunctionId fid,
1199
+ int num_arguments,
1200
+ int result_size) {
1201
+ TailCallExternalReference(ExternalReference(fid), num_arguments, result_size);
1133
1202
  }
1134
1203
 
1135
1204
 
@@ -1199,7 +1268,7 @@ Object* MacroAssembler::TryPopHandleScope(Register saved, Register scratch) {
1199
1268
  }
1200
1269
 
1201
1270
 
1202
- void MacroAssembler::JumpToRuntime(const ExternalReference& ext) {
1271
+ void MacroAssembler::JumpToExternalReference(const ExternalReference& ext) {
1203
1272
  // Set the entry point and jump to the C entry runtime stub.
1204
1273
  mov(ebx, Immediate(ext));
1205
1274
  CEntryStub ces(1);
@@ -1321,10 +1390,22 @@ void MacroAssembler::InvokeFunction(Register fun,
1321
1390
  }
1322
1391
 
1323
1392
 
1324
- void MacroAssembler::InvokeBuiltin(Builtins::JavaScript id, InvokeFlag flag) {
1325
- bool resolved;
1326
- Handle<Code> code = ResolveBuiltin(id, &resolved);
1393
+ void MacroAssembler::InvokeFunction(JSFunction* function,
1394
+ const ParameterCount& actual,
1395
+ InvokeFlag flag) {
1396
+ ASSERT(function->is_compiled());
1397
+ // Get the function and setup the context.
1398
+ mov(edi, Immediate(Handle<JSFunction>(function)));
1399
+ mov(esi, FieldOperand(edi, JSFunction::kContextOffset));
1400
+
1401
+ // Invoke the cached code.
1402
+ Handle<Code> code(function->code());
1403
+ ParameterCount expected(function->shared()->formal_parameter_count());
1404
+ InvokeCode(code, expected, actual, RelocInfo::CODE_TARGET, flag);
1405
+ }
1327
1406
 
1407
+
1408
+ void MacroAssembler::InvokeBuiltin(Builtins::JavaScript id, InvokeFlag flag) {
1328
1409
  // Calls are not allowed in some stubs.
1329
1410
  ASSERT(flag == JUMP_FUNCTION || allow_stub_calls());
1330
1411
 
@@ -1332,55 +1413,34 @@ void MacroAssembler::InvokeBuiltin(Builtins::JavaScript id, InvokeFlag flag) {
1332
1413
  // arguments match the expected number of arguments. Fake a
1333
1414
  // parameter count to avoid emitting code to do the check.
1334
1415
  ParameterCount expected(0);
1335
- InvokeCode(Handle<Code>(code), expected, expected,
1336
- RelocInfo::CODE_TARGET, flag);
1337
-
1338
- const char* name = Builtins::GetName(id);
1339
- int argc = Builtins::GetArgumentsCount(id);
1340
-
1341
- if (!resolved) {
1342
- uint32_t flags =
1343
- Bootstrapper::FixupFlagsArgumentsCount::encode(argc) |
1344
- Bootstrapper::FixupFlagsUseCodeObject::encode(false);
1345
- Unresolved entry = { pc_offset() - sizeof(int32_t), flags, name };
1346
- unresolved_.Add(entry);
1347
- }
1416
+ GetBuiltinEntry(edx, id);
1417
+ InvokeCode(Operand(edx), expected, expected, flag);
1348
1418
  }
1349
1419
 
1350
1420
 
1351
1421
  void MacroAssembler::GetBuiltinEntry(Register target, Builtins::JavaScript id) {
1352
- bool resolved;
1353
- Handle<Code> code = ResolveBuiltin(id, &resolved);
1354
-
1355
- const char* name = Builtins::GetName(id);
1356
- int argc = Builtins::GetArgumentsCount(id);
1357
-
1358
- mov(Operand(target), Immediate(code));
1359
- if (!resolved) {
1360
- uint32_t flags =
1361
- Bootstrapper::FixupFlagsArgumentsCount::encode(argc) |
1362
- Bootstrapper::FixupFlagsUseCodeObject::encode(true);
1363
- Unresolved entry = { pc_offset() - sizeof(int32_t), flags, name };
1364
- unresolved_.Add(entry);
1365
- }
1366
- add(Operand(target), Immediate(Code::kHeaderSize - kHeapObjectTag));
1367
- }
1422
+ ASSERT(!target.is(edi));
1368
1423
 
1424
+ // Load the builtins object into target register.
1425
+ mov(target, Operand(esi, Context::SlotOffset(Context::GLOBAL_INDEX)));
1426
+ mov(target, FieldOperand(target, GlobalObject::kBuiltinsOffset));
1369
1427
 
1370
- Handle<Code> MacroAssembler::ResolveBuiltin(Builtins::JavaScript id,
1371
- bool* resolved) {
1372
- // Move the builtin function into the temporary function slot by
1373
- // reading it from the builtins object. NOTE: We should be able to
1374
- // reduce this to two instructions by putting the function table in
1375
- // the global object instead of the "builtins" object and by using a
1376
- // real register for the function.
1377
- mov(edx, Operand(esi, Context::SlotOffset(Context::GLOBAL_INDEX)));
1378
- mov(edx, FieldOperand(edx, GlobalObject::kBuiltinsOffset));
1379
- int builtins_offset =
1380
- JSBuiltinsObject::kJSBuiltinsOffset + (id * kPointerSize);
1381
- mov(edi, FieldOperand(edx, builtins_offset));
1428
+ // Load the JavaScript builtin function from the builtins object.
1429
+ mov(edi, FieldOperand(target, JSBuiltinsObject::OffsetOfFunctionWithId(id)));
1382
1430
 
1383
- return Builtins::GetCode(id, resolved);
1431
+ // Load the code entry point from the builtins object.
1432
+ mov(target, FieldOperand(target, JSBuiltinsObject::OffsetOfCodeWithId(id)));
1433
+ if (FLAG_debug_code) {
1434
+ // Make sure the code objects in the builtins object and in the
1435
+ // builtin function are the same.
1436
+ push(target);
1437
+ mov(target, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset));
1438
+ mov(target, FieldOperand(target, SharedFunctionInfo::kCodeOffset));
1439
+ cmp(target, Operand(esp, 0));
1440
+ Assert(equal, "Builtin code object changed");
1441
+ pop(target);
1442
+ }
1443
+ lea(target, FieldOperand(target, Code::kHeaderSize));
1384
1444
  }
1385
1445
 
1386
1446
 
@@ -1454,6 +1514,36 @@ void MacroAssembler::DecrementCounter(StatsCounter* counter, int value) {
1454
1514
  }
1455
1515
 
1456
1516
 
1517
+ void MacroAssembler::IncrementCounter(Condition cc,
1518
+ StatsCounter* counter,
1519
+ int value) {
1520
+ ASSERT(value > 0);
1521
+ if (FLAG_native_code_counters && counter->Enabled()) {
1522
+ Label skip;
1523
+ j(NegateCondition(cc), &skip);
1524
+ pushfd();
1525
+ IncrementCounter(counter, value);
1526
+ popfd();
1527
+ bind(&skip);
1528
+ }
1529
+ }
1530
+
1531
+
1532
+ void MacroAssembler::DecrementCounter(Condition cc,
1533
+ StatsCounter* counter,
1534
+ int value) {
1535
+ ASSERT(value > 0);
1536
+ if (FLAG_native_code_counters && counter->Enabled()) {
1537
+ Label skip;
1538
+ j(NegateCondition(cc), &skip);
1539
+ pushfd();
1540
+ DecrementCounter(counter, value);
1541
+ popfd();
1542
+ bind(&skip);
1543
+ }
1544
+ }
1545
+
1546
+
1457
1547
  void MacroAssembler::Assert(Condition cc, const char* msg) {
1458
1548
  if (FLAG_debug_code) Check(cc, msg);
1459
1549
  }
@@ -1468,6 +1558,21 @@ void MacroAssembler::Check(Condition cc, const char* msg) {
1468
1558
  }
1469
1559
 
1470
1560
 
1561
+ void MacroAssembler::CheckStackAlignment() {
1562
+ int frame_alignment = OS::ActivationFrameAlignment();
1563
+ int frame_alignment_mask = frame_alignment - 1;
1564
+ if (frame_alignment > kPointerSize) {
1565
+ ASSERT(IsPowerOf2(frame_alignment));
1566
+ Label alignment_as_expected;
1567
+ test(esp, Immediate(frame_alignment_mask));
1568
+ j(zero, &alignment_as_expected);
1569
+ // Abort if stack is not aligned.
1570
+ int3();
1571
+ bind(&alignment_as_expected);
1572
+ }
1573
+ }
1574
+
1575
+
1471
1576
  void MacroAssembler::Abort(const char* msg) {
1472
1577
  // We want to pass the msg string like a smi to avoid GC
1473
1578
  // problems, however msg is not guaranteed to be aligned
@@ -1495,6 +1600,92 @@ void MacroAssembler::Abort(const char* msg) {
1495
1600
  }
1496
1601
 
1497
1602
 
1603
+ void MacroAssembler::JumpIfInstanceTypeIsNotSequentialAscii(
1604
+ Register instance_type,
1605
+ Register scratch,
1606
+ Label* failure) {
1607
+ if (!scratch.is(instance_type)) {
1608
+ mov(scratch, instance_type);
1609
+ }
1610
+ and_(scratch,
1611
+ kIsNotStringMask | kStringRepresentationMask | kStringEncodingMask);
1612
+ cmp(scratch, kStringTag | kSeqStringTag | kAsciiStringTag);
1613
+ j(not_equal, failure);
1614
+ }
1615
+
1616
+
1617
+ void MacroAssembler::JumpIfNotBothSequentialAsciiStrings(Register object1,
1618
+ Register object2,
1619
+ Register scratch1,
1620
+ Register scratch2,
1621
+ Label* failure) {
1622
+ // Check that both objects are not smis.
1623
+ ASSERT_EQ(0, kSmiTag);
1624
+ mov(scratch1, Operand(object1));
1625
+ and_(scratch1, Operand(object2));
1626
+ test(scratch1, Immediate(kSmiTagMask));
1627
+ j(zero, failure);
1628
+
1629
+ // Load instance type for both strings.
1630
+ mov(scratch1, FieldOperand(object1, HeapObject::kMapOffset));
1631
+ mov(scratch2, FieldOperand(object2, HeapObject::kMapOffset));
1632
+ movzx_b(scratch1, FieldOperand(scratch1, Map::kInstanceTypeOffset));
1633
+ movzx_b(scratch2, FieldOperand(scratch2, Map::kInstanceTypeOffset));
1634
+
1635
+ // Check that both are flat ascii strings.
1636
+ const int kFlatAsciiStringMask =
1637
+ kIsNotStringMask | kStringRepresentationMask | kStringEncodingMask;
1638
+ const int kFlatAsciiStringTag = ASCII_STRING_TYPE;
1639
+ // Interleave bits from both instance types and compare them in one check.
1640
+ ASSERT_EQ(0, kFlatAsciiStringMask & (kFlatAsciiStringMask << 3));
1641
+ and_(scratch1, kFlatAsciiStringMask);
1642
+ and_(scratch2, kFlatAsciiStringMask);
1643
+ lea(scratch1, Operand(scratch1, scratch2, times_8, 0));
1644
+ cmp(scratch1, kFlatAsciiStringTag | (kFlatAsciiStringTag << 3));
1645
+ j(not_equal, failure);
1646
+ }
1647
+
1648
+
1649
+ void MacroAssembler::PrepareCallCFunction(int num_arguments, Register scratch) {
1650
+ int frameAlignment = OS::ActivationFrameAlignment();
1651
+ if (frameAlignment != 0) {
1652
+ // Make stack end at alignment and make room for num_arguments words
1653
+ // and the original value of esp.
1654
+ mov(scratch, esp);
1655
+ sub(Operand(esp), Immediate((num_arguments + 1) * kPointerSize));
1656
+ ASSERT(IsPowerOf2(frameAlignment));
1657
+ and_(esp, -frameAlignment);
1658
+ mov(Operand(esp, num_arguments * kPointerSize), scratch);
1659
+ } else {
1660
+ sub(Operand(esp), Immediate(num_arguments * kPointerSize));
1661
+ }
1662
+ }
1663
+
1664
+
1665
+ void MacroAssembler::CallCFunction(ExternalReference function,
1666
+ int num_arguments) {
1667
+ // Trashing eax is ok as it will be the return value.
1668
+ mov(Operand(eax), Immediate(function));
1669
+ CallCFunction(eax, num_arguments);
1670
+ }
1671
+
1672
+
1673
+ void MacroAssembler::CallCFunction(Register function,
1674
+ int num_arguments) {
1675
+ // Check stack alignment.
1676
+ if (FLAG_debug_code) {
1677
+ CheckStackAlignment();
1678
+ }
1679
+
1680
+ call(Operand(function));
1681
+ if (OS::ActivationFrameAlignment() != 0) {
1682
+ mov(esp, Operand(esp, num_arguments * kPointerSize));
1683
+ } else {
1684
+ add(Operand(esp), Immediate(num_arguments * sizeof(int32_t)));
1685
+ }
1686
+ }
1687
+
1688
+
1498
1689
  CodePatcher::CodePatcher(byte* address, int size)
1499
1690
  : address_(address), size_(size), masm_(address, size + Assembler::kGap) {
1500
1691
  // Create a new macro assembler pointing to the address of the code to patch.