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
@@ -28,6 +28,7 @@
28
28
  #ifndef V8_IA32_VIRTUAL_FRAME_IA32_H_
29
29
  #define V8_IA32_VIRTUAL_FRAME_IA32_H_
30
30
 
31
+ #include "type-info.h"
31
32
  #include "register-allocator.h"
32
33
  #include "scopes.h"
33
34
 
@@ -72,17 +73,18 @@ class VirtualFrame: public ZoneObject {
72
73
  static const int kIllegalIndex = -1;
73
74
 
74
75
  // Construct an initial virtual frame on entry to a JS function.
75
- VirtualFrame();
76
+ inline VirtualFrame();
76
77
 
77
78
  // Construct a virtual frame as a clone of an existing one.
78
- explicit VirtualFrame(VirtualFrame* original);
79
+ explicit inline VirtualFrame(VirtualFrame* original);
79
80
 
80
81
  CodeGenerator* cgen() { return CodeGeneratorScope::Current(); }
81
82
 
82
83
  MacroAssembler* masm() { return cgen()->masm(); }
83
84
 
84
85
  // Create a duplicate of an existing valid frame element.
85
- FrameElement CopyElementAt(int index);
86
+ FrameElement CopyElementAt(int index,
87
+ TypeInfo info = TypeInfo::Uninitialized());
86
88
 
87
89
  // The number of elements on the virtual frame.
88
90
  int element_count() { return elements_.length(); }
@@ -136,7 +138,7 @@ class VirtualFrame: public ZoneObject {
136
138
  void ForgetElements(int count);
137
139
 
138
140
  // Spill all values from the frame to memory.
139
- void SpillAll();
141
+ inline void SpillAll();
140
142
 
141
143
  // Spill all occurrences of a specific register from the frame.
142
144
  void Spill(Register reg) {
@@ -197,7 +199,7 @@ class VirtualFrame: public ZoneObject {
197
199
  // Prepare for returning from the frame by spilling locals. This
198
200
  // avoids generating unnecessary merge code when jumping to the
199
201
  // shared return site. Emits code for spills.
200
- void PrepareForReturn();
202
+ inline void PrepareForReturn();
201
203
 
202
204
  // Number of local variables after when we use a loop for allocating.
203
205
  static const int kLocalVarBound = 10;
@@ -240,6 +242,11 @@ class VirtualFrame: public ZoneObject {
240
242
  PushFrameSlotAt(local0_index() + index);
241
243
  }
242
244
 
245
+ // Push a copy of the value of a local frame slot on top of the frame.
246
+ void UntaggedPushLocalAt(int index) {
247
+ UntaggedPushFrameSlotAt(local0_index() + index);
248
+ }
249
+
243
250
  // Push the value of a local frame slot on top of the frame and invalidate
244
251
  // the local slot. The slot should be written to before trying to read
245
252
  // from it again.
@@ -280,6 +287,11 @@ class VirtualFrame: public ZoneObject {
280
287
  PushFrameSlotAt(param0_index() + index);
281
288
  }
282
289
 
290
+ // Push a copy of the value of a parameter frame slot on top of the frame.
291
+ void UntaggedPushParameterAt(int index) {
292
+ UntaggedPushFrameSlotAt(param0_index() + index);
293
+ }
294
+
283
295
  // Push the value of a paramter frame slot on top of the frame and
284
296
  // invalidate the parameter slot. The slot should be written to before
285
297
  // trying to read from it again.
@@ -319,26 +331,34 @@ class VirtualFrame: public ZoneObject {
319
331
  // arguments are consumed by the call.
320
332
  Result CallStub(CodeStub* stub, Result* arg0, Result* arg1);
321
333
 
334
+ // Call JS function from top of the stack with arguments
335
+ // taken from the stack.
336
+ Result CallJSFunction(int arg_count);
337
+
322
338
  // Call runtime given the number of arguments expected on (and
323
339
  // removed from) the stack.
324
340
  Result CallRuntime(Runtime::Function* f, int arg_count);
325
341
  Result CallRuntime(Runtime::FunctionId id, int arg_count);
326
342
 
343
+ #ifdef ENABLE_DEBUGGER_SUPPORT
344
+ void DebugBreak();
345
+ #endif
346
+
327
347
  // Invoke builtin given the number of arguments it expects on (and
328
348
  // removes from) the stack.
329
349
  Result InvokeBuiltin(Builtins::JavaScript id, InvokeFlag flag, int arg_count);
330
350
 
331
351
  // Call load IC. Name and receiver are found on top of the frame.
332
- // Receiver is not dropped.
352
+ // Both are dropped.
333
353
  Result CallLoadIC(RelocInfo::Mode mode);
334
354
 
335
355
  // Call keyed load IC. Key and receiver are found on top of the
336
- // frame. They are not dropped.
356
+ // frame. Both are dropped.
337
357
  Result CallKeyedLoadIC(RelocInfo::Mode mode);
338
358
 
339
- // Call store IC. Name, value, and receiver are found on top of the
340
- // frame. Receiver is not dropped.
341
- Result CallStoreIC();
359
+ // Call store IC. If the load is contextual, value is found on top of the
360
+ // frame. If not, value and receiver are on the frame. Both are dropped.
361
+ Result CallStoreIC(Handle<String> name, bool is_contextual);
342
362
 
343
363
  // Call keyed store IC. Value, key, and receiver are found on top
344
364
  // of the frame. Key and receiver are not dropped.
@@ -381,16 +401,19 @@ class VirtualFrame: public ZoneObject {
381
401
 
382
402
  // Push an element on top of the expression stack and emit a
383
403
  // corresponding push instruction.
384
- void EmitPush(Register reg);
385
- void EmitPush(Operand operand);
386
- void EmitPush(Immediate immediate);
404
+ void EmitPush(Register reg,
405
+ TypeInfo info = TypeInfo::Unknown());
406
+ void EmitPush(Operand operand,
407
+ TypeInfo info = TypeInfo::Unknown());
408
+ void EmitPush(Immediate immediate,
409
+ TypeInfo info = TypeInfo::Unknown());
387
410
 
388
411
  // Push an element on the virtual frame.
389
- void Push(Register reg);
390
- void Push(Handle<Object> value);
391
- void Push(Smi* value) {
392
- Push(Handle<Object> (value));
393
- }
412
+ inline void Push(Register reg, TypeInfo info = TypeInfo::Unknown());
413
+ inline void Push(Handle<Object> value);
414
+ inline void Push(Smi* value);
415
+
416
+ void PushUntaggedElement(Handle<Object> value);
394
417
 
395
418
  // Pushing a result invalidates it (its contents become owned by the
396
419
  // frame).
@@ -398,18 +421,38 @@ class VirtualFrame: public ZoneObject {
398
421
  // This assert will trigger if you try to push the same value twice.
399
422
  ASSERT(result->is_valid());
400
423
  if (result->is_register()) {
401
- Push(result->reg());
424
+ Push(result->reg(), result->type_info());
402
425
  } else {
403
426
  ASSERT(result->is_constant());
404
427
  Push(result->handle());
405
428
  }
429
+ if (cgen()->in_safe_int32_mode()) {
430
+ ASSERT(result->is_untagged_int32());
431
+ elements_[element_count() - 1].set_untagged_int32(true);
432
+ }
406
433
  result->Unuse();
407
434
  }
408
435
 
436
+ // Pushing an expression expects that the expression is trivial (according
437
+ // to Expression::IsTrivial).
438
+ void Push(Expression* expr);
439
+
409
440
  // Nip removes zero or more elements from immediately below the top
410
441
  // of the frame, leaving the previous top-of-frame value on top of
411
442
  // the frame. Nip(k) is equivalent to x = Pop(), Drop(k), Push(x).
412
- void Nip(int num_dropped);
443
+ inline void Nip(int num_dropped);
444
+
445
+ // Check that the frame has no elements containing untagged int32 elements.
446
+ bool HasNoUntaggedInt32Elements() {
447
+ for (int i = 0; i < element_count(); ++i) {
448
+ if (elements_[i].is_untagged_int32()) return false;
449
+ }
450
+ return true;
451
+ }
452
+
453
+ // Update the type information of a variable frame element directly.
454
+ inline void SetTypeForLocalAt(int index, TypeInfo info);
455
+ inline void SetTypeForParamAt(int index, TypeInfo info);
413
456
 
414
457
  private:
415
458
  static const int kLocal0Offset = JavaScriptFrameConstants::kLocal0Offset;
@@ -517,7 +560,12 @@ class VirtualFrame: public ZoneObject {
517
560
 
518
561
  // Push a copy of a frame slot (typically a local or parameter) on top of
519
562
  // the frame.
520
- void PushFrameSlotAt(int index);
563
+ inline void PushFrameSlotAt(int index);
564
+
565
+ // Push a copy of a frame slot (typically a local or parameter) on top of
566
+ // the frame, at an untagged int32 value. Bails out if the value is not
567
+ // an int32.
568
+ void UntaggedPushFrameSlotAt(int index);
521
569
 
522
570
  // Push a the value of a frame slot (typically a local or parameter) on
523
571
  // top of the frame and invalidate the slot.
@@ -560,6 +608,14 @@ class VirtualFrame: public ZoneObject {
560
608
  // Register counts are correctly updated.
561
609
  int InvalidateFrameSlotAt(int index);
562
610
 
611
+ // This function assumes that a and b are the only results that could be in
612
+ // the registers a_reg or b_reg. Other results can be live, but must not
613
+ // be in the registers a_reg or b_reg. The results a and b are invalidated.
614
+ void MoveResultsToRegisters(Result* a,
615
+ Result* b,
616
+ Register a_reg,
617
+ Register b_reg);
618
+
563
619
  // Call a code stub that has already been prepared for calling (via
564
620
  // PrepareForCall).
565
621
  Result RawCallStub(CodeStub* stub);
@@ -568,7 +624,7 @@ class VirtualFrame: public ZoneObject {
568
624
  // (via PrepareForCall).
569
625
  Result RawCallCodeObject(Handle<Code> code, RelocInfo::Mode rmode);
570
626
 
571
- bool Equals(VirtualFrame* other);
627
+ inline bool Equals(VirtualFrame* other);
572
628
 
573
629
  // Classes that need raw access to the elements_ array.
574
630
  friend class DeferredCode;
@@ -63,7 +63,9 @@ void IC::TraceIC(const char* type,
63
63
  Code* new_target,
64
64
  const char* extra_info) {
65
65
  if (FLAG_trace_ic) {
66
- State new_state = StateFrom(new_target, Heap::undefined_value());
66
+ State new_state = StateFrom(new_target,
67
+ Heap::undefined_value(),
68
+ Heap::undefined_value());
67
69
  PrintF("[%s (%c->%c)%s", type,
68
70
  TransitionMarkFromState(old_state),
69
71
  TransitionMarkFromState(new_state),
@@ -132,7 +134,7 @@ Address IC::OriginalCodeAddress() {
132
134
  }
133
135
  #endif
134
136
 
135
- IC::State IC::StateFrom(Code* target, Object* receiver) {
137
+ IC::State IC::StateFrom(Code* target, Object* receiver, Object* name) {
136
138
  IC::State state = target->ic_state();
137
139
 
138
140
  if (state != MONOMORPHIC) return state;
@@ -148,7 +150,7 @@ IC::State IC::StateFrom(Code* target, Object* receiver) {
148
150
  // the receiver map's code cache. Therefore, if the current target
149
151
  // is in the receiver map's code cache, the inline cache failed due
150
152
  // to prototype check failure.
151
- int index = map->IndexInCodeCache(target);
153
+ int index = map->IndexInCodeCache(name, target);
152
154
  if (index >= 0) {
153
155
  // For keyed load/store, the most likely cause of cache failure is
154
156
  // that the key has changed. We do not distinguish between
@@ -160,7 +162,7 @@ IC::State IC::StateFrom(Code* target, Object* receiver) {
160
162
 
161
163
  // Remove the target from the code cache to avoid hitting the same
162
164
  // invalid stub again.
163
- map->RemoveFromCodeCache(index);
165
+ map->RemoveFromCodeCache(String::cast(name), target, index);
164
166
 
165
167
  return MONOMORPHIC_PROTOTYPE_FAILURE;
166
168
  }
@@ -222,6 +224,8 @@ void IC::Clear(Address address) {
222
224
  case Code::STORE_IC: return StoreIC::Clear(address, target);
223
225
  case Code::KEYED_STORE_IC: return KeyedStoreIC::Clear(address, target);
224
226
  case Code::CALL_IC: return CallIC::Clear(address, target);
227
+ case Code::BINARY_OP_IC: return; // Clearing these is tricky and does not
228
+ // make any performance difference.
225
229
  default: UNREACHABLE();
226
230
  }
227
231
  }
@@ -330,10 +334,11 @@ static void LookupForRead(Object* object,
330
334
  while (true) {
331
335
  object->Lookup(name, lookup);
332
336
  // Besides normal conditions (property not found or it's not
333
- // an interceptor), bail out of lookup is not cacheable: we won't
337
+ // an interceptor), bail out if lookup is not cacheable: we won't
334
338
  // be able to IC it anyway and regular lookup should work fine.
335
- if (lookup->IsNotFound() || lookup->type() != INTERCEPTOR ||
336
- !lookup->IsCacheable()) {
339
+ if (!lookup->IsFound()
340
+ || (lookup->type() != INTERCEPTOR)
341
+ || !lookup->IsCacheable()) {
337
342
  return;
338
343
  }
339
344
 
@@ -343,7 +348,7 @@ static void LookupForRead(Object* object,
343
348
  }
344
349
 
345
350
  holder->LocalLookupRealNamedProperty(name, lookup);
346
- if (lookup->IsValid()) {
351
+ if (lookup->IsProperty()) {
347
352
  ASSERT(lookup->type() != INTERCEPTOR);
348
353
  return;
349
354
  }
@@ -378,6 +383,18 @@ Object* CallIC::TryCallAsFunction(Object* object) {
378
383
  return *delegate;
379
384
  }
380
385
 
386
+ void CallIC::ReceiverToObject(Handle<Object> object) {
387
+ HandleScope scope;
388
+ Handle<Object> receiver(object);
389
+
390
+ // Change the receiver to the result of calling ToObject on it.
391
+ const int argc = this->target()->arguments_count();
392
+ StackFrameLocator locator;
393
+ JavaScriptFrame* frame = locator.FindJavaScriptFrame(0);
394
+ int index = frame->ComputeExpressionsCount() - (argc + 1);
395
+ frame->SetExpression(index, *Factory::ToObject(object));
396
+ }
397
+
381
398
 
382
399
  Object* CallIC::LoadFunction(State state,
383
400
  Handle<Object> object,
@@ -388,6 +405,10 @@ Object* CallIC::LoadFunction(State state,
388
405
  return TypeError("non_object_property_call", object, name);
389
406
  }
390
407
 
408
+ if (object->IsString() || object->IsNumber() || object->IsBoolean()) {
409
+ ReceiverToObject(object);
410
+ }
411
+
391
412
  // Check if the name is trivially convertible to an index and get
392
413
  // the element if so.
393
414
  uint32_t index;
@@ -406,7 +427,7 @@ Object* CallIC::LoadFunction(State state,
406
427
  LookupResult lookup;
407
428
  LookupForRead(*object, *name, &lookup);
408
429
 
409
- if (!lookup.IsValid()) {
430
+ if (!lookup.IsProperty()) {
410
431
  // If the object does not have the requested property, check which
411
432
  // exception we need to throw.
412
433
  if (IsContextual(object)) {
@@ -416,7 +437,7 @@ Object* CallIC::LoadFunction(State state,
416
437
  }
417
438
 
418
439
  // Lookup is valid: Update inline cache and stub cache.
419
- if (FLAG_use_ic && lookup.IsLoaded()) {
440
+ if (FLAG_use_ic) {
420
441
  UpdateCaches(&lookup, state, object, name);
421
442
  }
422
443
 
@@ -438,17 +459,6 @@ Object* CallIC::LoadFunction(State state,
438
459
  ASSERT(result != Heap::the_hole_value());
439
460
 
440
461
  if (result->IsJSFunction()) {
441
- // Check if there is an optimized (builtin) version of the function.
442
- // Ignored this will degrade performance for Array.prototype.{push,pop}.
443
- // Please note we only return the optimized function iff
444
- // the JSObject has FastElements.
445
- if (object->IsJSObject() && JSObject::cast(*object)->HasFastElements()) {
446
- Object* opt = Top::LookupSpecialFunction(JSObject::cast(*object),
447
- lookup.holder(),
448
- JSFunction::cast(result));
449
- if (opt->IsJSFunction()) return opt;
450
- }
451
-
452
462
  #ifdef ENABLE_DEBUGGER_SUPPORT
453
463
  // Handle stepping into a function if step into is active.
454
464
  if (Debug::StepInActive()) {
@@ -475,9 +485,8 @@ void CallIC::UpdateCaches(LookupResult* lookup,
475
485
  State state,
476
486
  Handle<Object> object,
477
487
  Handle<String> name) {
478
- ASSERT(lookup->IsLoaded());
479
488
  // Bail out if we didn't find a result.
480
- if (!lookup->IsValid() || !lookup->IsCacheable()) return;
489
+ if (!lookup->IsProperty() || !lookup->IsCacheable()) return;
481
490
 
482
491
  // Compute the number of arguments.
483
492
  int argc = target()->arguments_count();
@@ -606,7 +615,8 @@ Object* LoadIC::Load(State state, Handle<Object> object, Handle<String> name) {
606
615
  }
607
616
 
608
617
  // Use specialized code for getting prototype of functions.
609
- if (object->IsJSFunction() && name->Equals(Heap::prototype_symbol())) {
618
+ if (object->IsJSFunction() && name->Equals(Heap::prototype_symbol()) &&
619
+ JSFunction::cast(*object)->should_have_prototype()) {
610
620
  #ifdef DEBUG
611
621
  if (FLAG_trace_ic) PrintF("[LoadIC : +#prototype /function]\n");
612
622
  #endif
@@ -626,8 +636,8 @@ Object* LoadIC::Load(State state, Handle<Object> object, Handle<String> name) {
626
636
  LookupResult lookup;
627
637
  LookupForRead(*object, *name, &lookup);
628
638
 
629
- // If lookup is invalid, check if we need to throw an exception.
630
- if (!lookup.IsValid()) {
639
+ // If we did not find a property, check if we need to throw an exception.
640
+ if (!lookup.IsProperty()) {
631
641
  if (FLAG_strict || IsContextual(object)) {
632
642
  return ReferenceError("not_defined", name);
633
643
  }
@@ -637,8 +647,7 @@ Object* LoadIC::Load(State state, Handle<Object> object, Handle<String> name) {
637
647
  bool can_be_inlined =
638
648
  FLAG_use_ic &&
639
649
  state == PREMONOMORPHIC &&
640
- lookup.IsValid() &&
641
- lookup.IsLoaded() &&
650
+ lookup.IsProperty() &&
642
651
  lookup.IsCacheable() &&
643
652
  lookup.holder() == *object &&
644
653
  lookup.type() == FIELD &&
@@ -660,12 +669,12 @@ Object* LoadIC::Load(State state, Handle<Object> object, Handle<String> name) {
660
669
  }
661
670
 
662
671
  // Update inline cache and stub cache.
663
- if (FLAG_use_ic && lookup.IsLoaded()) {
672
+ if (FLAG_use_ic) {
664
673
  UpdateCaches(&lookup, state, object, name);
665
674
  }
666
675
 
667
676
  PropertyAttributes attr;
668
- if (lookup.IsValid() && lookup.type() == INTERCEPTOR) {
677
+ if (lookup.IsProperty() && lookup.type() == INTERCEPTOR) {
669
678
  // Get the property.
670
679
  Object* result = object->GetProperty(*object, &lookup, *name, &attr);
671
680
  if (result->IsFailure()) return result;
@@ -686,9 +695,8 @@ void LoadIC::UpdateCaches(LookupResult* lookup,
686
695
  State state,
687
696
  Handle<Object> object,
688
697
  Handle<String> name) {
689
- ASSERT(lookup->IsLoaded());
690
- // Bail out if we didn't find a result.
691
- if (!lookup->IsValid() || !lookup->IsCacheable()) return;
698
+ // Bail out if the result is not cacheable.
699
+ if (!lookup->IsCacheable()) return;
692
700
 
693
701
  // Loading properties from values is not common, so don't try to
694
702
  // deal with non-JS objects here.
@@ -702,6 +710,9 @@ void LoadIC::UpdateCaches(LookupResult* lookup,
702
710
  // Set the target to the pre monomorphic stub to delay
703
711
  // setting the monomorphic state.
704
712
  code = pre_monomorphic_stub();
713
+ } else if (!lookup->IsProperty()) {
714
+ // Nonexistent property. The result is undefined.
715
+ code = StubCache::ComputeLoadNonexistent(*name, *receiver);
705
716
  } else {
706
717
  // Compute monomorphic stub.
707
718
  switch (lookup->type()) {
@@ -814,7 +825,8 @@ Object* KeyedLoadIC::Load(State state,
814
825
  }
815
826
 
816
827
  // Use specialized code for getting prototype of functions.
817
- if (object->IsJSFunction() && name->Equals(Heap::prototype_symbol())) {
828
+ if (object->IsJSFunction() && name->Equals(Heap::prototype_symbol()) &&
829
+ JSFunction::cast(*object)->should_have_prototype()) {
818
830
  Handle<JSFunction> function = Handle<JSFunction>::cast(object);
819
831
  Object* code =
820
832
  StubCache::ComputeKeyedLoadFunctionPrototype(*name, *function);
@@ -841,19 +853,19 @@ Object* KeyedLoadIC::Load(State state,
841
853
  LookupResult lookup;
842
854
  LookupForRead(*object, *name, &lookup);
843
855
 
844
- // If lookup is invalid, check if we need to throw an exception.
845
- if (!lookup.IsValid()) {
856
+ // If we did not find a property, check if we need to throw an exception.
857
+ if (!lookup.IsProperty()) {
846
858
  if (FLAG_strict || IsContextual(object)) {
847
859
  return ReferenceError("not_defined", name);
848
860
  }
849
861
  }
850
862
 
851
- if (FLAG_use_ic && lookup.IsLoaded()) {
863
+ if (FLAG_use_ic) {
852
864
  UpdateCaches(&lookup, state, object, name);
853
865
  }
854
866
 
855
867
  PropertyAttributes attr;
856
- if (lookup.IsValid() && lookup.type() == INTERCEPTOR) {
868
+ if (lookup.IsProperty() && lookup.type() == INTERCEPTOR) {
857
869
  // Get the property.
858
870
  Object* result = object->GetProperty(*object, &lookup, *name, &attr);
859
871
  if (result->IsFailure()) return result;
@@ -880,6 +892,8 @@ Object* KeyedLoadIC::Load(State state,
880
892
  Handle<JSObject> receiver = Handle<JSObject>::cast(object);
881
893
  if (receiver->HasExternalArrayElements()) {
882
894
  stub = external_array_stub(receiver->GetElementsKind());
895
+ } else if (receiver->HasIndexedInterceptor()) {
896
+ stub = indexed_interceptor_stub();
883
897
  }
884
898
  }
885
899
  set_target(stub);
@@ -901,9 +915,8 @@ Object* KeyedLoadIC::Load(State state,
901
915
 
902
916
  void KeyedLoadIC::UpdateCaches(LookupResult* lookup, State state,
903
917
  Handle<Object> object, Handle<String> name) {
904
- ASSERT(lookup->IsLoaded());
905
918
  // Bail out if we didn't find a result.
906
- if (!lookup->IsValid() || !lookup->IsCacheable()) return;
919
+ if (!lookup->IsProperty() || !lookup->IsCacheable()) return;
907
920
 
908
921
  if (!object->IsJSObject()) return;
909
922
  Handle<JSObject> receiver = Handle<JSObject>::cast(object);
@@ -976,14 +989,12 @@ void KeyedLoadIC::UpdateCaches(LookupResult* lookup, State state,
976
989
 
977
990
  static bool StoreICableLookup(LookupResult* lookup) {
978
991
  // Bail out if we didn't find a result.
979
- if (!lookup->IsValid() || !lookup->IsCacheable()) return false;
992
+ if (!lookup->IsPropertyOrTransition() || !lookup->IsCacheable()) return false;
980
993
 
981
994
  // If the property is read-only, we leave the IC in its current
982
995
  // state.
983
996
  if (lookup->IsReadOnly()) return false;
984
997
 
985
- if (!lookup->IsLoaded()) return false;
986
-
987
998
  return true;
988
999
  }
989
1000
 
@@ -1030,6 +1041,20 @@ Object* StoreIC::Store(State state,
1030
1041
  return *value;
1031
1042
  }
1032
1043
 
1044
+
1045
+ // Use specialized code for setting the length of arrays.
1046
+ if (receiver->IsJSArray()
1047
+ && name->Equals(Heap::length_symbol())
1048
+ && receiver->AllowsSetElementsLength()) {
1049
+ #ifdef DEBUG
1050
+ if (FLAG_trace_ic) PrintF("[StoreIC : +#length /array]\n");
1051
+ #endif
1052
+ Code* target = Builtins::builtin(Builtins::StoreIC_ArrayLength);
1053
+ set_target(target);
1054
+ StubCache::Set(*name, HeapObject::cast(*object)->map(), target);
1055
+ return receiver->SetProperty(*name, *value, NONE);
1056
+ }
1057
+
1033
1058
  // Lookup the property locally in the receiver.
1034
1059
  if (FLAG_use_ic && !receiver->IsJSGlobalProxy()) {
1035
1060
  LookupResult lookup;
@@ -1048,7 +1073,6 @@ void StoreIC::UpdateCaches(LookupResult* lookup,
1048
1073
  Handle<JSObject> receiver,
1049
1074
  Handle<String> name,
1050
1075
  Handle<Object> value) {
1051
- ASSERT(lookup->IsLoaded());
1052
1076
  // Skip JSGlobalProxy.
1053
1077
  ASSERT(!receiver->IsJSGlobalProxy());
1054
1078
 
@@ -1156,7 +1180,7 @@ Object* KeyedStoreIC::Store(State state,
1156
1180
  receiver->LocalLookup(*name, &lookup);
1157
1181
 
1158
1182
  // Update inline cache and stub cache.
1159
- if (FLAG_use_ic && lookup.IsLoaded()) {
1183
+ if (FLAG_use_ic) {
1160
1184
  UpdateCaches(&lookup, state, receiver, name, value);
1161
1185
  }
1162
1186
 
@@ -1190,13 +1214,11 @@ void KeyedStoreIC::UpdateCaches(LookupResult* lookup,
1190
1214
  Handle<JSObject> receiver,
1191
1215
  Handle<String> name,
1192
1216
  Handle<Object> value) {
1193
- ASSERT(lookup->IsLoaded());
1194
-
1195
1217
  // Skip JSGlobalProxy.
1196
1218
  if (receiver->IsJSGlobalProxy()) return;
1197
1219
 
1198
1220
  // Bail out if we didn't find a result.
1199
- if (!lookup->IsValid() || !lookup->IsCacheable()) return;
1221
+ if (!lookup->IsPropertyOrTransition() || !lookup->IsCacheable()) return;
1200
1222
 
1201
1223
  // If the property is read-only, we leave the IC in its current
1202
1224
  // state.
@@ -1266,7 +1288,7 @@ Object* CallIC_Miss(Arguments args) {
1266
1288
  NoHandleAllocation na;
1267
1289
  ASSERT(args.length() == 2);
1268
1290
  CallIC ic;
1269
- IC::State state = IC::StateFrom(ic.target(), args[0]);
1291
+ IC::State state = IC::StateFrom(ic.target(), args[0], args[1]);
1270
1292
  Object* result =
1271
1293
  ic.LoadFunction(state, args.at<Object>(0), args.at<String>(1));
1272
1294
 
@@ -1286,9 +1308,9 @@ Object* CallIC_Miss(Arguments args) {
1286
1308
  Handle<JSFunction> function = Handle<JSFunction>(JSFunction::cast(result));
1287
1309
  InLoopFlag in_loop = ic.target()->ic_in_loop();
1288
1310
  if (in_loop == IN_LOOP) {
1289
- CompileLazyInLoop(function, CLEAR_EXCEPTION);
1311
+ CompileLazyInLoop(function, args.at<Object>(0), CLEAR_EXCEPTION);
1290
1312
  } else {
1291
- CompileLazy(function, CLEAR_EXCEPTION);
1313
+ CompileLazy(function, args.at<Object>(0), CLEAR_EXCEPTION);
1292
1314
  }
1293
1315
  return *function;
1294
1316
  }
@@ -1299,52 +1321,45 @@ Object* LoadIC_Miss(Arguments args) {
1299
1321
  NoHandleAllocation na;
1300
1322
  ASSERT(args.length() == 2);
1301
1323
  LoadIC ic;
1302
- IC::State state = IC::StateFrom(ic.target(), args[0]);
1324
+ IC::State state = IC::StateFrom(ic.target(), args[0], args[1]);
1303
1325
  return ic.Load(state, args.at<Object>(0), args.at<String>(1));
1304
1326
  }
1305
1327
 
1306
1328
 
1307
- void LoadIC::GenerateInitialize(MacroAssembler* masm) {
1308
- Generate(masm, ExternalReference(IC_Utility(kLoadIC_Miss)));
1309
- }
1310
-
1311
-
1312
- void LoadIC::GeneratePreMonomorphic(MacroAssembler* masm) {
1313
- Generate(masm, ExternalReference(IC_Utility(kLoadIC_Miss)));
1314
- }
1315
-
1316
-
1317
1329
  // Used from ic_<arch>.cc
1318
1330
  Object* KeyedLoadIC_Miss(Arguments args) {
1319
1331
  NoHandleAllocation na;
1320
1332
  ASSERT(args.length() == 2);
1321
1333
  KeyedLoadIC ic;
1322
- IC::State state = IC::StateFrom(ic.target(), args[0]);
1334
+ IC::State state = IC::StateFrom(ic.target(), args[0], args[1]);
1323
1335
  return ic.Load(state, args.at<Object>(0), args.at<Object>(1));
1324
1336
  }
1325
1337
 
1326
1338
 
1327
- void KeyedLoadIC::GenerateInitialize(MacroAssembler* masm) {
1328
- Generate(masm, ExternalReference(IC_Utility(kKeyedLoadIC_Miss)));
1329
- }
1330
-
1331
-
1332
- void KeyedLoadIC::GeneratePreMonomorphic(MacroAssembler* masm) {
1333
- Generate(masm, ExternalReference(IC_Utility(kKeyedLoadIC_Miss)));
1334
- }
1335
-
1336
-
1337
1339
  // Used from ic_<arch>.cc.
1338
1340
  Object* StoreIC_Miss(Arguments args) {
1339
1341
  NoHandleAllocation na;
1340
1342
  ASSERT(args.length() == 3);
1341
1343
  StoreIC ic;
1342
- IC::State state = IC::StateFrom(ic.target(), args[0]);
1344
+ IC::State state = IC::StateFrom(ic.target(), args[0], args[1]);
1343
1345
  return ic.Store(state, args.at<Object>(0), args.at<String>(1),
1344
1346
  args.at<Object>(2));
1345
1347
  }
1346
1348
 
1347
1349
 
1350
+ Object* StoreIC_ArrayLength(Arguments args) {
1351
+ NoHandleAllocation nha;
1352
+
1353
+ ASSERT(args.length() == 2);
1354
+ JSObject* receiver = JSObject::cast(args[0]);
1355
+ Object* len = args[1];
1356
+
1357
+ Object* result = receiver->SetElementsLength(len);
1358
+ if (result->IsFailure()) return result;
1359
+ return len;
1360
+ }
1361
+
1362
+
1348
1363
  // Extend storage is called in a store inline cache when
1349
1364
  // it is necessary to extend the properties array of a
1350
1365
  // JSObject.
@@ -1379,34 +1394,102 @@ Object* SharedStoreIC_ExtendStorage(Arguments args) {
1379
1394
  }
1380
1395
 
1381
1396
 
1382
- void StoreIC::GenerateInitialize(MacroAssembler* masm) {
1383
- Generate(masm, ExternalReference(IC_Utility(kStoreIC_Miss)));
1384
- }
1385
-
1386
-
1387
- void StoreIC::GenerateMiss(MacroAssembler* masm) {
1388
- Generate(masm, ExternalReference(IC_Utility(kStoreIC_Miss)));
1389
- }
1390
-
1391
-
1392
1397
  // Used from ic_<arch>.cc.
1393
1398
  Object* KeyedStoreIC_Miss(Arguments args) {
1394
1399
  NoHandleAllocation na;
1395
1400
  ASSERT(args.length() == 3);
1396
1401
  KeyedStoreIC ic;
1397
- IC::State state = IC::StateFrom(ic.target(), args[0]);
1402
+ IC::State state = IC::StateFrom(ic.target(), args[0], args[1]);
1398
1403
  return ic.Store(state, args.at<Object>(0), args.at<Object>(1),
1399
1404
  args.at<Object>(2));
1400
1405
  }
1401
1406
 
1402
1407
 
1403
- void KeyedStoreIC::GenerateInitialize(MacroAssembler* masm) {
1404
- Generate(masm, ExternalReference(IC_Utility(kKeyedStoreIC_Miss)));
1408
+ void BinaryOpIC::patch(Code* code) {
1409
+ set_target(code);
1405
1410
  }
1406
1411
 
1407
1412
 
1408
- void KeyedStoreIC::GenerateMiss(MacroAssembler* masm) {
1409
- Generate(masm, ExternalReference(IC_Utility(kKeyedStoreIC_Miss)));
1413
+ const char* BinaryOpIC::GetName(TypeInfo type_info) {
1414
+ switch (type_info) {
1415
+ case DEFAULT: return "Default";
1416
+ case GENERIC: return "Generic";
1417
+ case HEAP_NUMBERS: return "HeapNumbers";
1418
+ case STRINGS: return "Strings";
1419
+ default: return "Invalid";
1420
+ }
1421
+ }
1422
+
1423
+
1424
+ BinaryOpIC::State BinaryOpIC::ToState(TypeInfo type_info) {
1425
+ switch (type_info) {
1426
+ // DEFAULT is mapped to UNINITIALIZED so that calls to DEFAULT stubs
1427
+ // are not cleared at GC.
1428
+ case DEFAULT: return UNINITIALIZED;
1429
+
1430
+ // Could have mapped GENERIC to MONOMORPHIC just as well but MEGAMORPHIC is
1431
+ // conceptually closer.
1432
+ case GENERIC: return MEGAMORPHIC;
1433
+
1434
+ default: return MONOMORPHIC;
1435
+ }
1436
+ }
1437
+
1438
+
1439
+ BinaryOpIC::TypeInfo BinaryOpIC::GetTypeInfo(Object* left,
1440
+ Object* right) {
1441
+ if (left->IsSmi() && right->IsSmi()) {
1442
+ return GENERIC;
1443
+ }
1444
+
1445
+ if (left->IsNumber() && right->IsNumber()) {
1446
+ return HEAP_NUMBERS;
1447
+ }
1448
+
1449
+ if (left->IsString() || right->IsString()) {
1450
+ // Patching for fast string ADD makes sense even if only one of the
1451
+ // arguments is a string.
1452
+ return STRINGS;
1453
+ }
1454
+
1455
+ return GENERIC;
1456
+ }
1457
+
1458
+
1459
+ // defined in codegen-<arch>.cc
1460
+ Handle<Code> GetBinaryOpStub(int key, BinaryOpIC::TypeInfo type_info);
1461
+
1462
+
1463
+ Object* BinaryOp_Patch(Arguments args) {
1464
+ ASSERT(args.length() == 6);
1465
+
1466
+ Handle<Object> left = args.at<Object>(0);
1467
+ Handle<Object> right = args.at<Object>(1);
1468
+ Handle<Object> result = args.at<Object>(2);
1469
+ int key = Smi::cast(args[3])->value();
1470
+ #ifdef DEBUG
1471
+ Token::Value op = static_cast<Token::Value>(Smi::cast(args[4])->value());
1472
+ BinaryOpIC::TypeInfo prev_type_info =
1473
+ static_cast<BinaryOpIC::TypeInfo>(Smi::cast(args[5])->value());
1474
+ #endif // DEBUG
1475
+ { HandleScope scope;
1476
+ BinaryOpIC::TypeInfo type_info = BinaryOpIC::GetTypeInfo(*left, *right);
1477
+ Handle<Code> code = GetBinaryOpStub(key, type_info);
1478
+ if (!code.is_null()) {
1479
+ BinaryOpIC ic;
1480
+ ic.patch(*code);
1481
+ #ifdef DEBUG
1482
+ if (FLAG_trace_ic) {
1483
+ PrintF("[BinaryOpIC (%s->%s)#%s]\n",
1484
+ BinaryOpIC::GetName(prev_type_info),
1485
+ BinaryOpIC::GetName(type_info),
1486
+ Token::Name(op));
1487
+ }
1488
+ #endif // DEBUG
1489
+ }
1490
+ }
1491
+
1492
+ return *result;
1410
1493
  }
1411
1494
 
1412
1495