therubyracer 0.7.4 → 0.7.5

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 (482) hide show
  1. data/History.txt +11 -0
  2. data/Rakefile +1 -1
  3. data/ext/v8/extconf.rb +0 -18
  4. data/ext/v8/rr.cpp +2 -2
  5. data/ext/v8/upstream/{2.1.10 → 2.3.3}/AUTHORS +1 -0
  6. data/ext/v8/upstream/{2.1.10 → 2.3.3}/ChangeLog +239 -0
  7. data/ext/v8/upstream/{2.1.10 → 2.3.3}/LICENSE +0 -0
  8. data/ext/v8/upstream/{2.1.10 → 2.3.3}/SConstruct +29 -17
  9. data/ext/v8/upstream/{2.1.10 → 2.3.3}/include/v8-debug.h +61 -3
  10. data/ext/v8/upstream/{2.1.10 → 2.3.3}/include/v8-profiler.h +182 -5
  11. data/ext/v8/upstream/{2.1.10 → 2.3.3}/include/v8.h +458 -257
  12. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/SConscript +2 -5
  13. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/accessors.cc +2 -2
  14. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/accessors.h +0 -0
  15. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/allocation.cc +0 -0
  16. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/allocation.h +0 -0
  17. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/api.cc +574 -30
  18. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/api.h +12 -10
  19. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/apinatives.js +0 -0
  20. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/apiutils.h +0 -0
  21. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arguments.h +0 -0
  22. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/assembler-arm-inl.h +38 -15
  23. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/assembler-arm.cc +646 -101
  24. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/assembler-arm.h +174 -15
  25. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/builtins-arm.cc +56 -47
  26. data/ext/v8/upstream/2.3.3/src/arm/codegen-arm-inl.h +48 -0
  27. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/codegen-arm.cc +2957 -1448
  28. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/codegen-arm.h +230 -74
  29. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/constants-arm.cc +25 -1
  30. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/constants-arm.h +16 -1
  31. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/cpu-arm.cc +4 -0
  32. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/debug-arm.cc +76 -6
  33. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/disasm-arm.cc +168 -20
  34. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/fast-codegen-arm.cc +5 -2
  35. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/frames-arm.cc +4 -4
  36. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/frames-arm.h +0 -0
  37. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/full-codegen-arm.cc +1558 -248
  38. data/ext/v8/upstream/2.3.3/src/arm/ic-arm.cc +2258 -0
  39. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/jump-target-arm.cc +55 -103
  40. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/macro-assembler-arm.cc +358 -185
  41. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/macro-assembler-arm.h +136 -41
  42. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/regexp-macro-assembler-arm.cc +26 -5
  43. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/regexp-macro-assembler-arm.h +0 -0
  44. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/register-allocator-arm-inl.h +0 -0
  45. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/register-allocator-arm.cc +4 -0
  46. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/register-allocator-arm.h +0 -0
  47. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/simulator-arm.cc +203 -22
  48. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/simulator-arm.h +7 -0
  49. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/stub-cache-arm.cc +531 -324
  50. data/ext/v8/upstream/2.3.3/src/arm/virtual-frame-arm-inl.h +59 -0
  51. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/virtual-frame-arm.cc +247 -81
  52. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/virtual-frame-arm.h +99 -83
  53. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/array.js +2 -2
  54. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/assembler.cc +6 -13
  55. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/assembler.h +36 -10
  56. data/ext/v8/upstream/2.3.3/src/ast-inl.h +81 -0
  57. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ast.cc +14 -0
  58. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ast.h +20 -35
  59. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/bootstrapper.cc +32 -1
  60. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/bootstrapper.h +0 -4
  61. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/builtins.cc +50 -33
  62. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/builtins.h +2 -0
  63. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/bytecodes-irregexp.h +0 -0
  64. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/cached-powers.h +0 -0
  65. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/char-predicates-inl.h +0 -0
  66. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/char-predicates.h +0 -0
  67. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/checks.cc +0 -0
  68. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/checks.h +8 -6
  69. data/ext/v8/upstream/2.3.3/src/circular-queue-inl.h +53 -0
  70. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/circular-queue.cc +0 -0
  71. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/circular-queue.h +0 -26
  72. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/code-stubs.cc +2 -4
  73. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/code-stubs.h +1 -0
  74. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/code.h +0 -0
  75. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/codegen-inl.h +0 -0
  76. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/codegen.cc +44 -13
  77. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/codegen.h +310 -31
  78. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/compilation-cache.cc +28 -0
  79. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/compilation-cache.h +3 -0
  80. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/compiler.cc +45 -14
  81. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/compiler.h +0 -0
  82. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/contexts.cc +11 -11
  83. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/contexts.h +0 -0
  84. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/conversions-inl.h +0 -0
  85. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/conversions.cc +25 -11
  86. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/conversions.h +0 -0
  87. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/counters.cc +0 -0
  88. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/counters.h +0 -0
  89. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/cpu-profiler-inl.h +2 -1
  90. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/cpu-profiler.cc +68 -24
  91. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/cpu-profiler.h +19 -11
  92. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/cpu.h +0 -0
  93. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8-debug.cc +0 -0
  94. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8-debug.h +0 -0
  95. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8-posix.cc +0 -0
  96. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8-readline.cc +0 -0
  97. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8-windows.cc +0 -0
  98. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8.cc +3 -0
  99. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8.h +0 -0
  100. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8.js +55 -2
  101. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/data-flow.cc +3 -0
  102. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/data-flow.h +0 -0
  103. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/date.js +68 -137
  104. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/dateparser-inl.h +0 -0
  105. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/dateparser.cc +2 -8
  106. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/dateparser.h +0 -0
  107. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/debug-agent.cc +3 -3
  108. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/debug-agent.h +0 -0
  109. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/debug-debugger.js +81 -23
  110. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/debug.cc +275 -81
  111. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/debug.h +85 -6
  112. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/disasm.h +0 -0
  113. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/disassembler.cc +1 -1
  114. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/disassembler.h +0 -0
  115. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/diy-fp.cc +0 -0
  116. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/diy-fp.h +0 -0
  117. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/double.h +0 -0
  118. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/dtoa-config.c +0 -0
  119. data/ext/v8/upstream/2.3.3/src/dtoa.cc +77 -0
  120. data/ext/v8/upstream/2.3.3/src/dtoa.h +81 -0
  121. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/execution.cc +111 -3
  122. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/execution.h +12 -1
  123. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/factory.cc +25 -3
  124. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/factory.h +16 -9
  125. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/fast-codegen.cc +0 -0
  126. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/fast-codegen.h +0 -0
  127. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/fast-dtoa.cc +2 -9
  128. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/fast-dtoa.h +1 -2
  129. data/ext/v8/upstream/2.3.3/src/fixed-dtoa.cc +405 -0
  130. data/ext/v8/upstream/{2.1.10/src/jump-target-light.cc → 2.3.3/src/fixed-dtoa.h} +22 -53
  131. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/flag-definitions.h +14 -6
  132. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/flags.cc +5 -9
  133. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/flags.h +0 -0
  134. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/flow-graph.cc +0 -0
  135. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/flow-graph.h +0 -0
  136. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/frame-element.cc +0 -0
  137. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/frame-element.h +0 -0
  138. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/frames-inl.h +0 -0
  139. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/frames.cc +5 -2
  140. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/frames.h +1 -0
  141. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/full-codegen.cc +387 -20
  142. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/full-codegen.h +102 -5
  143. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/func-name-inferrer.cc +0 -0
  144. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/func-name-inferrer.h +0 -0
  145. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/global-handles.cc +8 -4
  146. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/global-handles.h +0 -0
  147. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/globals.h +44 -7
  148. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/handles-inl.h +0 -0
  149. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/handles.cc +19 -0
  150. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/handles.h +8 -0
  151. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/hashmap.cc +0 -0
  152. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/hashmap.h +0 -0
  153. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/heap-inl.h +56 -14
  154. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/heap-profiler.cc +85 -1
  155. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/heap-profiler.h +45 -1
  156. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/heap.cc +994 -396
  157. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/heap.h +220 -65
  158. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/assembler-ia32-inl.h +41 -12
  159. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/assembler-ia32.cc +94 -24
  160. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/assembler-ia32.h +32 -4
  161. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/builtins-ia32.cc +42 -30
  162. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/codegen-ia32-inl.h +0 -0
  163. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/codegen-ia32.cc +1758 -916
  164. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/codegen-ia32.h +67 -74
  165. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/cpu-ia32.cc +4 -0
  166. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/debug-ia32.cc +46 -0
  167. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/disasm-ia32.cc +37 -6
  168. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/fast-codegen-ia32.cc +4 -0
  169. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/fast-codegen-ia32.h +0 -0
  170. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/frames-ia32.cc +4 -0
  171. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/frames-ia32.h +0 -0
  172. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/full-codegen-ia32.cc +1465 -198
  173. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/ic-ia32.cc +688 -367
  174. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/jump-target-ia32.cc +4 -0
  175. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/macro-assembler-ia32.cc +82 -180
  176. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/macro-assembler-ia32.h +41 -25
  177. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/regexp-macro-assembler-ia32.cc +68 -24
  178. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/regexp-macro-assembler-ia32.h +1 -2
  179. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/register-allocator-ia32-inl.h +0 -0
  180. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/register-allocator-ia32.cc +4 -0
  181. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/register-allocator-ia32.h +0 -0
  182. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/simulator-ia32.cc +0 -0
  183. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/simulator-ia32.h +0 -0
  184. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/stub-cache-ia32.cc +649 -302
  185. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/virtual-frame-ia32.cc +23 -1
  186. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/virtual-frame-ia32.h +18 -27
  187. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ic-inl.h +30 -3
  188. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ic.cc +384 -66
  189. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ic.h +65 -24
  190. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/interpreter-irregexp.cc +0 -0
  191. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/interpreter-irregexp.h +0 -0
  192. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/json.js +3 -3
  193. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jsregexp.cc +20 -4
  194. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jsregexp.h +0 -0
  195. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jump-target-heavy-inl.h +0 -0
  196. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jump-target-heavy.cc +79 -13
  197. data/ext/v8/upstream/{2.1.10/src/jump-target.h → 2.3.3/src/jump-target-heavy.h} +5 -47
  198. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jump-target-inl.h +0 -0
  199. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jump-target-light-inl.h +16 -2
  200. data/ext/v8/upstream/2.3.3/src/jump-target-light.cc +110 -0
  201. data/ext/v8/upstream/2.3.3/src/jump-target-light.h +192 -0
  202. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jump-target.cc +0 -64
  203. data/ext/v8/upstream/2.3.3/src/jump-target.h +90 -0
  204. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/list-inl.h +0 -0
  205. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/list.h +0 -0
  206. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/liveedit-debugger.js +141 -28
  207. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/liveedit.cc +19 -7
  208. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/liveedit.h +0 -0
  209. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/log-inl.h +0 -0
  210. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/log-utils.cc +0 -0
  211. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/log-utils.h +0 -0
  212. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/log.cc +12 -11
  213. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/log.h +12 -0
  214. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/macro-assembler.h +0 -16
  215. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/macros.py +21 -0
  216. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mark-compact.cc +120 -109
  217. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mark-compact.h +25 -37
  218. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/math.js +0 -0
  219. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/memory.h +0 -0
  220. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/messages.cc +8 -3
  221. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/messages.h +2 -1
  222. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/messages.js +15 -7
  223. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/assembler-mips-inl.h +0 -0
  224. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/assembler-mips.cc +12 -1
  225. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/assembler-mips.h +4 -1
  226. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/builtins-mips.cc +3 -0
  227. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/codegen-mips-inl.h +0 -0
  228. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/codegen-mips.cc +9 -0
  229. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/codegen-mips.h +1 -0
  230. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/constants-mips.cc +5 -0
  231. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/constants-mips.h +0 -0
  232. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/cpu-mips.cc +4 -0
  233. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/debug-mips.cc +3 -0
  234. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/disasm-mips.cc +3 -0
  235. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/fast-codegen-mips.cc +3 -0
  236. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/frames-mips.cc +3 -0
  237. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/frames-mips.h +0 -0
  238. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/full-codegen-mips.cc +5 -1
  239. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/ic-mips.cc +3 -0
  240. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/jump-target-mips.cc +3 -0
  241. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/macro-assembler-mips.cc +3 -0
  242. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/macro-assembler-mips.h +0 -0
  243. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/register-allocator-mips-inl.h +0 -0
  244. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/register-allocator-mips.cc +3 -0
  245. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/register-allocator-mips.h +0 -0
  246. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/simulator-mips.cc +3 -0
  247. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/simulator-mips.h +0 -0
  248. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/stub-cache-mips.cc +3 -0
  249. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/virtual-frame-mips.cc +3 -0
  250. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/virtual-frame-mips.h +0 -0
  251. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mirror-debugger.js +46 -4
  252. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mksnapshot.cc +0 -0
  253. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/natives.h +0 -0
  254. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/objects-debug.cc +8 -1
  255. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/objects-inl.h +235 -62
  256. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/objects.cc +497 -231
  257. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/objects.h +355 -149
  258. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/oprofile-agent.cc +0 -0
  259. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/oprofile-agent.h +0 -0
  260. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/parser.cc +31 -6
  261. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/parser.h +1 -1
  262. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-freebsd.cc +9 -6
  263. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-linux.cc +26 -6
  264. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-macos.cc +11 -6
  265. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-nullos.cc +0 -0
  266. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-openbsd.cc +6 -0
  267. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-posix.cc +0 -0
  268. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-solaris.cc +69 -23
  269. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-win32.cc +15 -11
  270. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform.h +10 -6
  271. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/powers-ten.h +0 -0
  272. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/prettyprinter.cc +0 -0
  273. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/prettyprinter.h +0 -0
  274. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/profile-generator-inl.h +26 -2
  275. data/ext/v8/upstream/2.3.3/src/profile-generator.cc +1830 -0
  276. data/ext/v8/upstream/2.3.3/src/profile-generator.h +853 -0
  277. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/property.cc +0 -0
  278. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/property.h +0 -0
  279. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler-irregexp-inl.h +0 -0
  280. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler-irregexp.cc +0 -0
  281. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler-irregexp.h +0 -0
  282. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler-tracer.cc +0 -0
  283. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler-tracer.h +0 -0
  284. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler.cc +1 -3
  285. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler.h +0 -0
  286. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-stack.cc +0 -0
  287. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-stack.h +0 -0
  288. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp.js +25 -4
  289. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/register-allocator-inl.h +0 -0
  290. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/register-allocator.cc +4 -3
  291. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/register-allocator.h +0 -0
  292. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/rewriter.cc +85 -8
  293. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/rewriter.h +0 -0
  294. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/runtime.cc +547 -221
  295. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/runtime.h +5 -1
  296. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/runtime.js +23 -31
  297. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/scanner.cc +12 -6
  298. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/scanner.h +60 -53
  299. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/scopeinfo.cc +156 -168
  300. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/scopeinfo.h +58 -62
  301. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/scopes.cc +0 -0
  302. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/scopes.h +0 -0
  303. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/serialize.cc +320 -242
  304. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/serialize.h +81 -48
  305. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/shell.h +0 -0
  306. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/simulator.h +0 -0
  307. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/smart-pointer.h +0 -0
  308. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/snapshot-common.cc +0 -0
  309. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/snapshot-empty.cc +0 -0
  310. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/snapshot.h +0 -0
  311. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/spaces-inl.h +177 -74
  312. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/spaces.cc +138 -315
  313. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/spaces.h +155 -124
  314. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/splay-tree-inl.h +0 -0
  315. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/splay-tree.h +0 -0
  316. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/string-stream.cc +0 -0
  317. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/string-stream.h +0 -0
  318. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/string.js +113 -119
  319. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/stub-cache.cc +242 -97
  320. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/stub-cache.h +118 -55
  321. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/third_party/dtoa/COPYING +0 -0
  322. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/third_party/dtoa/dtoa.c +4 -0
  323. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/third_party/valgrind/valgrind.h +0 -0
  324. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/token.cc +0 -0
  325. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/token.h +0 -0
  326. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/top.cc +107 -26
  327. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/top.h +9 -4
  328. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/type-info.cc +0 -0
  329. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/type-info.h +2 -2
  330. data/ext/v8/upstream/2.3.3/src/unbound-queue-inl.h +95 -0
  331. data/ext/v8/upstream/2.3.3/src/unbound-queue.h +67 -0
  332. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/unicode-inl.h +0 -0
  333. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/unicode.cc +0 -0
  334. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/unicode.h +0 -0
  335. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/uri.js +0 -0
  336. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/utils.cc +0 -0
  337. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/utils.h +83 -1
  338. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8-counters.cc +0 -0
  339. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8-counters.h +20 -0
  340. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8.cc +5 -1
  341. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8.h +0 -0
  342. data/ext/v8/upstream/2.3.3/src/v8dll-main.cc +39 -0
  343. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8natives.js +210 -33
  344. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8threads.cc +1 -1
  345. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8threads.h +1 -1
  346. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/variables.cc +0 -0
  347. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/variables.h +0 -0
  348. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/version.cc +3 -3
  349. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/version.h +0 -0
  350. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame-heavy-inl.h +40 -0
  351. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame-heavy.cc +0 -0
  352. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame-inl.h +0 -0
  353. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame-light-inl.h +106 -5
  354. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame-light.cc +4 -1
  355. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame.cc +0 -0
  356. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame.h +0 -0
  357. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/vm-state-inl.h +6 -3
  358. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/vm-state.cc +1 -1
  359. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/vm-state.h +6 -4
  360. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/assembler-x64-inl.h +42 -5
  361. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/assembler-x64.cc +285 -53
  362. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/assembler-x64.h +54 -18
  363. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/builtins-x64.cc +31 -33
  364. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/codegen-x64-inl.h +0 -0
  365. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/codegen-x64.cc +9787 -8722
  366. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/codegen-x64.h +82 -47
  367. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/cpu-x64.cc +4 -0
  368. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/debug-x64.cc +55 -6
  369. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/disasm-x64.cc +42 -19
  370. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/fast-codegen-x64.cc +4 -0
  371. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/frames-x64.cc +4 -0
  372. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/frames-x64.h +4 -0
  373. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/full-codegen-x64.cc +1487 -210
  374. data/ext/v8/upstream/2.3.3/src/x64/ic-x64.cc +1907 -0
  375. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/jump-target-x64.cc +4 -0
  376. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/macro-assembler-x64.cc +366 -338
  377. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/macro-assembler-x64.h +83 -38
  378. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/regexp-macro-assembler-x64.cc +82 -23
  379. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/regexp-macro-assembler-x64.h +1 -2
  380. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/register-allocator-x64-inl.h +6 -5
  381. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/register-allocator-x64.cc +4 -0
  382. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/register-allocator-x64.h +1 -1
  383. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/simulator-x64.cc +0 -0
  384. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/simulator-x64.h +0 -0
  385. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/stub-cache-x64.cc +556 -377
  386. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/virtual-frame-x64.cc +197 -98
  387. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/virtual-frame-x64.h +37 -28
  388. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/zone-inl.h +0 -0
  389. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/zone.cc +0 -0
  390. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/zone.h +0 -0
  391. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/codemap.js +0 -0
  392. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/consarray.js +0 -0
  393. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/csvparser.js +0 -0
  394. data/ext/v8/upstream/2.3.3/tools/gc-nvp-trace-processor.py +317 -0
  395. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/generate-ten-powers.scm +0 -0
  396. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/gyp/v8.gyp +87 -20
  397. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/js2c.py +19 -15
  398. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/jsmin.py +0 -0
  399. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/linux-tick-processor +0 -0
  400. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/linux-tick-processor.py +0 -0
  401. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/logreader.js +0 -0
  402. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/mac-nm +0 -0
  403. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/mac-tick-processor +0 -0
  404. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/annotate +0 -0
  405. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/common +0 -0
  406. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/dump +0 -0
  407. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/report +0 -0
  408. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/reset +0 -0
  409. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/run +0 -0
  410. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/shutdown +0 -0
  411. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/start +0 -0
  412. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/presubmit.py +0 -0
  413. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/process-heap-prof.py +0 -0
  414. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/profile.js +0 -0
  415. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/profile_view.js +0 -0
  416. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/run-valgrind.py +0 -0
  417. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/splaytree.js +0 -0
  418. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/splaytree.py +0 -0
  419. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/stats-viewer.py +25 -13
  420. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/test.py +0 -0
  421. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/tickprocessor-driver.js +0 -0
  422. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/tickprocessor.js +0 -0
  423. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/tickprocessor.py +0 -0
  424. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/utils.py +0 -0
  425. data/ext/v8/upstream/2.3.3/tools/v8.xcodeproj/project.pbxproj +1855 -0
  426. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/README.txt +0 -0
  427. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/arm.vsprops +0 -0
  428. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/common.vsprops +0 -0
  429. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/d8.vcproj +0 -0
  430. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/d8_arm.vcproj +0 -0
  431. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/d8_x64.vcproj +0 -0
  432. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/d8js2c.cmd +0 -0
  433. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/debug.vsprops +0 -0
  434. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/ia32.vsprops +0 -0
  435. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/js2c.cmd +0 -0
  436. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/release.vsprops +0 -0
  437. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8.sln +0 -0
  438. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8.vcproj +0 -0
  439. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_arm.sln +0 -0
  440. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_arm.vcproj +0 -0
  441. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_base.vcproj +40 -0
  442. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_base_arm.vcproj +20 -0
  443. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_base_x64.vcproj +16 -0
  444. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_cctest.vcproj +4 -0
  445. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_cctest_arm.vcproj +0 -0
  446. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_cctest_x64.vcproj +0 -0
  447. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_mksnapshot.vcproj +0 -0
  448. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_mksnapshot_x64.vcproj +0 -0
  449. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_process_sample.vcproj +0 -0
  450. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_process_sample_arm.vcproj +0 -0
  451. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_process_sample_x64.vcproj +0 -0
  452. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_shell_sample.vcproj +0 -0
  453. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_shell_sample_arm.vcproj +0 -0
  454. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_shell_sample_x64.vcproj +0 -0
  455. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_snapshot.vcproj +0 -0
  456. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_snapshot_cc.vcproj +0 -0
  457. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_snapshot_cc_x64.vcproj +0 -0
  458. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_snapshot_x64.vcproj +0 -0
  459. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_x64.sln +0 -0
  460. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_x64.vcproj +0 -0
  461. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/x64.vsprops +0 -0
  462. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/windows-tick-processor.bat +0 -0
  463. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/windows-tick-processor.py +0 -0
  464. data/ext/v8/upstream/Makefile +1 -1
  465. data/ext/v8/v8_template.cpp +94 -2
  466. data/ext/v8/v8_try_catch.cpp +2 -2
  467. data/lib/v8.rb +1 -1
  468. data/lib/v8/access.rb +93 -40
  469. data/lib/v8/cli.rb +1 -1
  470. data/lib/v8/function.rb +14 -2
  471. data/spec/redjs/jsapi_spec.rb +231 -42
  472. data/therubyracer.gemspec +3 -3
  473. metadata +463 -453
  474. data/ext/v8/upstream/2.1.10/src/arm/assembler-thumb2-inl.h +0 -263
  475. data/ext/v8/upstream/2.1.10/src/arm/assembler-thumb2.cc +0 -1878
  476. data/ext/v8/upstream/2.1.10/src/arm/assembler-thumb2.h +0 -1036
  477. data/ext/v8/upstream/2.1.10/src/arm/codegen-arm-inl.h +0 -72
  478. data/ext/v8/upstream/2.1.10/src/arm/ic-arm.cc +0 -1833
  479. data/ext/v8/upstream/2.1.10/src/circular-queue-inl.h +0 -101
  480. data/ext/v8/upstream/2.1.10/src/profile-generator.cc +0 -583
  481. data/ext/v8/upstream/2.1.10/src/profile-generator.h +0 -364
  482. data/ext/v8/upstream/2.1.10/src/x64/ic-x64.cc +0 -1621
@@ -106,6 +106,18 @@ class CompressionHelper;
106
106
  V(CALL_MISS_TAG, "CallMiss", "cm") \
107
107
  V(CALL_NORMAL_TAG, "CallNormal", "cn") \
108
108
  V(CALL_PRE_MONOMORPHIC_TAG, "CallPreMonomorphic", "cpm") \
109
+ V(KEYED_CALL_DEBUG_BREAK_TAG, "KeyedCallDebugBreak", "kcdb") \
110
+ V(KEYED_CALL_DEBUG_PREPARE_STEP_IN_TAG, \
111
+ "KeyedCallDebugPrepareStepIn", \
112
+ "kcdbsi") \
113
+ V(KEYED_CALL_IC_TAG, "KeyedCallIC", "kcic") \
114
+ V(KEYED_CALL_INITIALIZE_TAG, "KeyedCallInitialize", "kci") \
115
+ V(KEYED_CALL_MEGAMORPHIC_TAG, "KeyedCallMegamorphic", "kcmm") \
116
+ V(KEYED_CALL_MISS_TAG, "KeyedCallMiss", "kcm") \
117
+ V(KEYED_CALL_NORMAL_TAG, "KeyedCallNormal", "kcn") \
118
+ V(KEYED_CALL_PRE_MONOMORPHIC_TAG, \
119
+ "KeyedCallPreMonomorphic", \
120
+ "kcpm") \
109
121
  V(CALLBACK_TAG, "Callback", "cb") \
110
122
  V(EVAL_TAG, "Eval", "e") \
111
123
  V(FUNCTION_TAG, "Function", "f") \
@@ -50,17 +50,6 @@ enum HandlerType {
50
50
  };
51
51
 
52
52
 
53
- // Flags used for the AllocateInNewSpace functions.
54
- enum AllocationFlags {
55
- // No special flags.
56
- NO_ALLOCATION_FLAGS = 0,
57
- // Return the pointer to the allocated already tagged as a heap object.
58
- TAG_OBJECT = 1 << 0,
59
- // The content of the result register already contains the allocation top in
60
- // new space.
61
- RESULT_CONTAINS_TOP = 1 << 1
62
- };
63
-
64
53
  // Invalid depth in prototype chain.
65
54
  const int kInvalidProtoDepth = -1;
66
55
 
@@ -79,13 +68,8 @@ const int kInvalidProtoDepth = -1;
79
68
  #elif V8_TARGET_ARCH_ARM
80
69
  #include "arm/constants-arm.h"
81
70
  #include "assembler.h"
82
- #ifdef V8_ARM_VARIANT_THUMB
83
- #include "arm/assembler-thumb2.h"
84
- #include "arm/assembler-thumb2-inl.h"
85
- #else
86
71
  #include "arm/assembler-arm.h"
87
72
  #include "arm/assembler-arm-inl.h"
88
- #endif
89
73
  #include "code.h" // must be after assembler_*.h
90
74
  #include "arm/macro-assembler-arm.h"
91
75
  #elif V8_TARGET_ARCH_MIPS
@@ -112,9 +112,16 @@ macro IS_GLOBAL(arg) = (%_ClassOf(arg) === 'global');
112
112
  macro IS_UNDETECTABLE(arg) = (%_IsUndetectableObject(arg));
113
113
  macro FLOOR(arg) = $floor(arg);
114
114
 
115
+ # Macro for ECMAScript 5 queries of the type:
116
+ # "Type(O) is object."
117
+ # This is the same as being either a function or an object in V8 terminology.
118
+ # In addition, an undetectable object is also included by this.
119
+ macro IS_SPEC_OBJECT(arg) = (%_IsSpecObject(arg));
120
+
115
121
  # Inline macros. Use %IS_VAR to make sure arg is evaluated only once.
116
122
  macro NUMBER_IS_NAN(arg) = (!%_IsSmi(%IS_VAR(arg)) && !(arg == arg));
117
123
  macro TO_INTEGER(arg) = (%_IsSmi(%IS_VAR(arg)) ? arg : ToInteger(arg));
124
+ macro TO_INTEGER_MAP_MINUS_ZERO(arg) = (%_IsSmi(%IS_VAR(arg)) ? arg : %NumberToIntegerMapMinusZero(ToNumber(arg)));
118
125
  macro TO_INT32(arg) = (%_IsSmi(%IS_VAR(arg)) ? arg : (arg >> 0));
119
126
  macro TO_UINT32(arg) = (arg >>> 0);
120
127
  macro TO_STRING_INLINE(arg) = (IS_STRING(%IS_VAR(arg)) ? arg : NonStringToString(arg));
@@ -140,11 +147,15 @@ macro DATE_VALUE(arg) = (%_ClassOf(arg) === 'Date' ? %_ValueOf(arg) : ThrowDateT
140
147
  macro DAY(time) = ($floor(time / 86400000));
141
148
  macro MONTH_FROM_TIME(time) = (MonthFromTime(time));
142
149
  macro DATE_FROM_TIME(time) = (DateFromTime(time));
150
+ macro NAN_OR_DATE_FROM_TIME(time) = (NUMBER_IS_NAN(time) ? time : DATE_FROM_TIME(time));
143
151
  macro YEAR_FROM_TIME(time) = (YearFromTime(time));
144
152
  macro HOUR_FROM_TIME(time) = (Modulo($floor(time / 3600000), 24));
145
153
  macro MIN_FROM_TIME(time) = (Modulo($floor(time / 60000), 60));
154
+ macro NAN_OR_MIN_FROM_TIME(time) = (NUMBER_IS_NAN(time) ? time : MIN_FROM_TIME(time));
146
155
  macro SEC_FROM_TIME(time) = (Modulo($floor(time / 1000), 60));
156
+ macro NAN_OR_SEC_FROM_TIME(time) = (NUMBER_IS_NAN(time) ? time : SEC_FROM_TIME(time));
147
157
  macro MS_FROM_TIME(time) = (Modulo(time, 1000));
158
+ macro NAN_OR_MS_FROM_TIME(time) = (NUMBER_IS_NAN(time) ? time : MS_FROM_TIME(time));
148
159
 
149
160
  # Last input and last subject of regexp matches.
150
161
  macro LAST_SUBJECT(array) = ((array)[1]);
@@ -154,3 +165,13 @@ macro LAST_INPUT(array) = ((array)[2]);
154
165
  macro CAPTURE(index) = (3 + (index));
155
166
  const CAPTURE0 = 3;
156
167
  const CAPTURE1 = 4;
168
+
169
+ # PropertyDescriptor return value indices - must match
170
+ # PropertyDescriptorIndices in runtime.cc.
171
+ const IS_ACCESSOR_INDEX = 0;
172
+ const VALUE_INDEX = 1;
173
+ const GETTER_INDEX = 2;
174
+ const SETTER_INDEX = 3;
175
+ const WRITABLE_INDEX = 4;
176
+ const ENUMERABLE_INDEX = 5;
177
+ const CONFIGURABLE_INDEX = 6;
@@ -28,6 +28,7 @@
28
28
  #include "v8.h"
29
29
 
30
30
  #include "execution.h"
31
+ #include "heap-profiler.h"
31
32
  #include "global-handles.h"
32
33
  #include "ic-inl.h"
33
34
  #include "mark-compact.h"
@@ -78,14 +79,12 @@ void MarkCompactCollector::CollectGarbage() {
78
79
  SweepLargeObjectSpace();
79
80
 
80
81
  if (IsCompacting()) {
82
+ GCTracer::Scope gc_scope(tracer_, GCTracer::Scope::MC_COMPACT);
81
83
  EncodeForwardingAddresses();
82
84
 
83
85
  UpdatePointers();
84
86
 
85
87
  RelocateObjects();
86
-
87
- RebuildRSets();
88
-
89
88
  } else {
90
89
  SweepSpaces();
91
90
  }
@@ -120,14 +119,6 @@ void MarkCompactCollector::Prepare(GCTracer* tracer) {
120
119
  compacting_collection_ = false;
121
120
  if (FLAG_collect_maps) CreateBackPointers();
122
121
 
123
- #ifdef DEBUG
124
- if (compacting_collection_) {
125
- // We will write bookkeeping information to the remembered set area
126
- // starting now.
127
- Page::set_rset_state(Page::NOT_IN_USE);
128
- }
129
- #endif
130
-
131
122
  PagedSpaces spaces;
132
123
  for (PagedSpace* space = spaces.next();
133
124
  space != NULL; space = spaces.next()) {
@@ -149,7 +140,7 @@ void MarkCompactCollector::Prepare(GCTracer* tracer) {
149
140
 
150
141
  void MarkCompactCollector::Finish() {
151
142
  #ifdef DEBUG
152
- ASSERT(state_ == SWEEP_SPACES || state_ == REBUILD_RSETS);
143
+ ASSERT(state_ == SWEEP_SPACES || state_ == RELOCATE_OBJECTS);
153
144
  state_ = IDLE;
154
145
  #endif
155
146
  // The stub cache is not traversed during GC; clear the cache to
@@ -243,8 +234,8 @@ static inline HeapObject* ShortCircuitConsString(Object** p) {
243
234
  }
244
235
 
245
236
  // Since we don't have the object's start, it is impossible to update the
246
- // remembered set. Therefore, we only replace the string with its left
247
- // substring when the remembered set does not change.
237
+ // page dirty marks. Therefore, we only replace the string with its left
238
+ // substring when page dirty marks do not change.
248
239
  Object* first = reinterpret_cast<ConsString*>(object)->unchecked_first();
249
240
  if (!Heap::InNewSpace(object) && Heap::InNewSpace(first)) return object;
250
241
 
@@ -283,8 +274,10 @@ class MarkingVisitor : public ObjectVisitor {
283
274
  }
284
275
 
285
276
  void VisitDebugTarget(RelocInfo* rinfo) {
286
- ASSERT(RelocInfo::IsJSReturn(rinfo->rmode()) &&
287
- rinfo->IsPatchedReturnSequence());
277
+ ASSERT((RelocInfo::IsJSReturn(rinfo->rmode()) &&
278
+ rinfo->IsPatchedReturnSequence()) ||
279
+ (RelocInfo::IsDebugBreakSlot(rinfo->rmode()) &&
280
+ rinfo->IsPatchedDebugBreakSlotSequence()));
288
281
  HeapObject* code = Code::GetCodeFromTargetAddress(rinfo->call_address());
289
282
  MarkCompactCollector::MarkObject(code);
290
283
  }
@@ -433,8 +426,10 @@ void MarkCompactCollector::MarkMapContents(Map* map) {
433
426
  // Since the descriptor array has been marked already, it is fine
434
427
  // that one of these fields contains a pointer to it.
435
428
  MarkingVisitor visitor; // Has no state or contents.
436
- visitor.VisitPointers(HeapObject::RawField(map, Map::kPrototypeOffset),
437
- HeapObject::RawField(map, Map::kSize));
429
+ visitor.VisitPointers(HeapObject::RawField(map,
430
+ Map::kPointerFieldsBeginOffset),
431
+ HeapObject::RawField(map,
432
+ Map::kPointerFieldsEndOffset));
438
433
  }
439
434
 
440
435
 
@@ -678,6 +673,7 @@ void MarkCompactCollector::ProcessObjectGroups(MarkingVisitor* visitor) {
678
673
 
679
674
 
680
675
  void MarkCompactCollector::MarkLiveObjects() {
676
+ GCTracer::Scope gc_scope(tracer_, GCTracer::Scope::MC_MARK);
681
677
  #ifdef DEBUG
682
678
  ASSERT(state_ == PREPARE_GC);
683
679
  state_ = MARK_LIVE_OBJECTS;
@@ -774,6 +770,7 @@ void MarkCompactCollector::SweepLargeObjectSpace() {
774
770
  Heap::lo_space()->FreeUnmarkedObjects();
775
771
  }
776
772
 
773
+
777
774
  // Safe to use during marking phase only.
778
775
  bool MarkCompactCollector::SafeIsMap(HeapObject* object) {
779
776
  MapWord metamap = object->map_word();
@@ -781,6 +778,7 @@ bool MarkCompactCollector::SafeIsMap(HeapObject* object) {
781
778
  return metamap.ToMap()->instance_type() == MAP_TYPE;
782
779
  }
783
780
 
781
+
784
782
  void MarkCompactCollector::ClearNonLiveTransitions() {
785
783
  HeapObjectIterator map_iterator(Heap::map_space(), &CountMarkedCallback);
786
784
  // Iterate over the map space, setting map transitions that go from
@@ -1076,13 +1074,18 @@ void MarkCompactCollector::EncodeForwardingAddressesInPagedSpace(
1076
1074
  // first word of object without any encoding. If object is dead we are writing
1077
1075
  // NULL as a forwarding address.
1078
1076
  // The second pass updates pointers to new space in all spaces. It is possible
1079
- // to encounter pointers to dead objects during traversal of remembered set for
1080
- // map space because remembered set bits corresponding to dead maps are cleared
1081
- // later during map space sweeping.
1082
- static void MigrateObject(Address dst, Address src, int size) {
1083
- Heap::CopyBlock(reinterpret_cast<Object**>(dst),
1084
- reinterpret_cast<Object**>(src),
1085
- size);
1077
+ // to encounter pointers to dead objects during traversal of dirty regions we
1078
+ // should clear them to avoid encountering them during next dirty regions
1079
+ // iteration.
1080
+ static void MigrateObject(Address dst,
1081
+ Address src,
1082
+ int size,
1083
+ bool to_old_space) {
1084
+ if (to_old_space) {
1085
+ Heap::CopyBlockToOldSpaceAndUpdateRegionMarks(dst, src, size);
1086
+ } else {
1087
+ Heap::CopyBlock(dst, src, size);
1088
+ }
1086
1089
 
1087
1090
  Memory::Address_at(src) = dst;
1088
1091
  }
@@ -1108,8 +1111,10 @@ class PointersToNewGenUpdatingVisitor: public ObjectVisitor {
1108
1111
  }
1109
1112
 
1110
1113
  void VisitDebugTarget(RelocInfo* rinfo) {
1111
- ASSERT(RelocInfo::IsJSReturn(rinfo->rmode()) &&
1112
- rinfo->IsPatchedReturnSequence());
1114
+ ASSERT((RelocInfo::IsJSReturn(rinfo->rmode()) &&
1115
+ rinfo->IsPatchedReturnSequence()) ||
1116
+ (RelocInfo::IsDebugBreakSlot(rinfo->rmode()) &&
1117
+ rinfo->IsPatchedDebugBreakSlotSequence()));
1113
1118
  Object* target = Code::GetCodeFromTargetAddress(rinfo->call_address());
1114
1119
  VisitPointer(&target);
1115
1120
  rinfo->set_call_address(Code::cast(target)->instruction_start());
@@ -1129,6 +1134,7 @@ class PointersToNewGenUpdatingVisitor: public ObjectVisitor {
1129
1134
  }
1130
1135
  };
1131
1136
 
1137
+
1132
1138
  // Visitor for updating pointers from live objects in old spaces to new space.
1133
1139
  // It can encounter pointers to dead objects in new space when traversing map
1134
1140
  // space (see comment for MigrateObject).
@@ -1140,10 +1146,13 @@ static void UpdatePointerToNewGen(HeapObject** p) {
1140
1146
 
1141
1147
  Address new_addr = Memory::Address_at(old_addr);
1142
1148
 
1143
- // Object pointed by *p is dead. Update is not required.
1144
- if (new_addr == NULL) return;
1145
-
1146
- *p = HeapObject::FromAddress(new_addr);
1149
+ if (new_addr == NULL) {
1150
+ // We encountered pointer to a dead object. Clear it so we will
1151
+ // not visit it again during next iteration of dirty regions.
1152
+ *p = NULL;
1153
+ } else {
1154
+ *p = HeapObject::FromAddress(new_addr);
1155
+ }
1147
1156
  }
1148
1157
 
1149
1158
 
@@ -1161,8 +1170,9 @@ static bool TryPromoteObject(HeapObject* object, int object_size) {
1161
1170
  result = Heap::lo_space()->AllocateRawFixedArray(object_size);
1162
1171
  if (!result->IsFailure()) {
1163
1172
  HeapObject* target = HeapObject::cast(result);
1164
- MigrateObject(target->address(), object->address(), object_size);
1165
- Heap::UpdateRSet(target);
1173
+ MigrateObject(target->address(), object->address(), object_size, true);
1174
+ MarkCompactCollector::tracer()->
1175
+ increment_promoted_objects_size(object_size);
1166
1176
  return true;
1167
1177
  }
1168
1178
  } else {
@@ -1173,10 +1183,12 @@ static bool TryPromoteObject(HeapObject* object, int object_size) {
1173
1183
  result = target_space->AllocateRaw(object_size);
1174
1184
  if (!result->IsFailure()) {
1175
1185
  HeapObject* target = HeapObject::cast(result);
1176
- MigrateObject(target->address(), object->address(), object_size);
1177
- if (target_space == Heap::old_pointer_space()) {
1178
- Heap::UpdateRSet(target);
1179
- }
1186
+ MigrateObject(target->address(),
1187
+ object->address(),
1188
+ object_size,
1189
+ target_space == Heap::old_pointer_space());
1190
+ MarkCompactCollector::tracer()->
1191
+ increment_promoted_objects_size(object_size);
1180
1192
  return true;
1181
1193
  }
1182
1194
  }
@@ -1216,14 +1228,16 @@ static void SweepNewSpace(NewSpace* space) {
1216
1228
  continue;
1217
1229
  }
1218
1230
 
1219
- // Promotion either failed or not required.
1220
- // Copy the content of the object.
1231
+ // Promotion failed. Just migrate object to another semispace.
1221
1232
  Object* target = space->AllocateRaw(size);
1222
1233
 
1223
1234
  // Allocation cannot fail at this point: semispaces are of equal size.
1224
1235
  ASSERT(!target->IsFailure());
1225
1236
 
1226
- MigrateObject(HeapObject::cast(target)->address(), current, size);
1237
+ MigrateObject(HeapObject::cast(target)->address(),
1238
+ current,
1239
+ size,
1240
+ false);
1227
1241
  } else {
1228
1242
  size = object->Size();
1229
1243
  Memory::Address_at(current) = NULL;
@@ -1249,9 +1263,12 @@ static void SweepNewSpace(NewSpace* space) {
1249
1263
  Heap::IterateRoots(&updating_visitor, VISIT_ALL_IN_SCAVENGE);
1250
1264
 
1251
1265
  // Update pointers in old spaces.
1252
- Heap::IterateRSet(Heap::old_pointer_space(), &UpdatePointerToNewGen);
1253
- Heap::IterateRSet(Heap::map_space(), &UpdatePointerToNewGen);
1254
- Heap::lo_space()->IterateRSet(&UpdatePointerToNewGen);
1266
+ Heap::IterateDirtyRegions(Heap::old_pointer_space(),
1267
+ &Heap::IteratePointersInDirtyRegion,
1268
+ &UpdatePointerToNewGen,
1269
+ Heap::WATERMARK_SHOULD_BE_VALID);
1270
+
1271
+ Heap::lo_space()->IterateDirtyRegions(&UpdatePointerToNewGen);
1255
1272
 
1256
1273
  // Update pointers from cells.
1257
1274
  HeapObjectIterator cell_iterator(Heap::cell_space());
@@ -1317,7 +1334,10 @@ static void SweepSpace(PagedSpace* space, DeallocateFunction dealloc) {
1317
1334
  MarkCompactCollector::tracer()->decrement_marked_count();
1318
1335
 
1319
1336
  if (!is_previous_alive) { // Transition from free to live.
1320
- dealloc(free_start, static_cast<int>(current - free_start), true);
1337
+ dealloc(free_start,
1338
+ static_cast<int>(current - free_start),
1339
+ true,
1340
+ false);
1321
1341
  is_previous_alive = true;
1322
1342
  }
1323
1343
  } else {
@@ -1347,7 +1367,7 @@ static void SweepSpace(PagedSpace* space, DeallocateFunction dealloc) {
1347
1367
  // without putting anything into free list.
1348
1368
  int size_in_bytes = static_cast<int>(p->AllocationTop() - free_start);
1349
1369
  if (size_in_bytes > 0) {
1350
- dealloc(free_start, size_in_bytes, false);
1370
+ dealloc(free_start, size_in_bytes, false, true);
1351
1371
  }
1352
1372
  }
1353
1373
  } else {
@@ -1361,7 +1381,9 @@ static void SweepSpace(PagedSpace* space, DeallocateFunction dealloc) {
1361
1381
  // If there is a free ending area on one of the previous pages we have
1362
1382
  // deallocate that area and put it on the free list.
1363
1383
  if (last_free_size > 0) {
1364
- dealloc(last_free_start, last_free_size, true);
1384
+ Page::FromAddress(last_free_start)->
1385
+ SetAllocationWatermark(last_free_start);
1386
+ dealloc(last_free_start, last_free_size, true, true);
1365
1387
  last_free_start = NULL;
1366
1388
  last_free_size = 0;
1367
1389
  }
@@ -1392,7 +1414,7 @@ static void SweepSpace(PagedSpace* space, DeallocateFunction dealloc) {
1392
1414
  // There was a free ending area on the previous page.
1393
1415
  // Deallocate it without putting it into freelist and move allocation
1394
1416
  // top to the beginning of this free area.
1395
- dealloc(last_free_start, last_free_size, false);
1417
+ dealloc(last_free_start, last_free_size, false, true);
1396
1418
  new_allocation_top = last_free_start;
1397
1419
  }
1398
1420
 
@@ -1415,34 +1437,36 @@ static void SweepSpace(PagedSpace* space, DeallocateFunction dealloc) {
1415
1437
 
1416
1438
  void MarkCompactCollector::DeallocateOldPointerBlock(Address start,
1417
1439
  int size_in_bytes,
1418
- bool add_to_freelist) {
1419
- Heap::ClearRSetRange(start, size_in_bytes);
1440
+ bool add_to_freelist,
1441
+ bool last_on_page) {
1420
1442
  Heap::old_pointer_space()->Free(start, size_in_bytes, add_to_freelist);
1421
1443
  }
1422
1444
 
1423
1445
 
1424
1446
  void MarkCompactCollector::DeallocateOldDataBlock(Address start,
1425
1447
  int size_in_bytes,
1426
- bool add_to_freelist) {
1448
+ bool add_to_freelist,
1449
+ bool last_on_page) {
1427
1450
  Heap::old_data_space()->Free(start, size_in_bytes, add_to_freelist);
1428
1451
  }
1429
1452
 
1430
1453
 
1431
1454
  void MarkCompactCollector::DeallocateCodeBlock(Address start,
1432
1455
  int size_in_bytes,
1433
- bool add_to_freelist) {
1456
+ bool add_to_freelist,
1457
+ bool last_on_page) {
1434
1458
  Heap::code_space()->Free(start, size_in_bytes, add_to_freelist);
1435
1459
  }
1436
1460
 
1437
1461
 
1438
1462
  void MarkCompactCollector::DeallocateMapBlock(Address start,
1439
1463
  int size_in_bytes,
1440
- bool add_to_freelist) {
1464
+ bool add_to_freelist,
1465
+ bool last_on_page) {
1441
1466
  // Objects in map space are assumed to have size Map::kSize and a
1442
1467
  // valid map in their first word. Thus, we break the free block up into
1443
1468
  // chunks and free them separately.
1444
1469
  ASSERT(size_in_bytes % Map::kSize == 0);
1445
- Heap::ClearRSetRange(start, size_in_bytes);
1446
1470
  Address end = start + size_in_bytes;
1447
1471
  for (Address a = start; a < end; a += Map::kSize) {
1448
1472
  Heap::map_space()->Free(a, add_to_freelist);
@@ -1452,13 +1476,13 @@ void MarkCompactCollector::DeallocateMapBlock(Address start,
1452
1476
 
1453
1477
  void MarkCompactCollector::DeallocateCellBlock(Address start,
1454
1478
  int size_in_bytes,
1455
- bool add_to_freelist) {
1479
+ bool add_to_freelist,
1480
+ bool last_on_page) {
1456
1481
  // Free-list elements in cell space are assumed to have a fixed size.
1457
1482
  // We break the free block into chunks and add them to the free list
1458
1483
  // individually.
1459
1484
  int size = Heap::cell_space()->object_size_in_bytes();
1460
1485
  ASSERT(size_in_bytes % size == 0);
1461
- Heap::ClearRSetRange(start, size_in_bytes);
1462
1486
  Address end = start + size_in_bytes;
1463
1487
  for (Address a = start; a < end; a += size) {
1464
1488
  Heap::cell_space()->Free(a, add_to_freelist);
@@ -1557,20 +1581,6 @@ class MapCompact {
1557
1581
  GlobalHandles::IterateWeakRoots(&map_updating_visitor_);
1558
1582
  }
1559
1583
 
1560
- void FinishMapSpace() {
1561
- // Iterate through to space and finish move.
1562
- MapIterator it;
1563
- HeapObject* o = it.next();
1564
- for (; o != first_map_to_evacuate_; o = it.next()) {
1565
- ASSERT(o != NULL);
1566
- Map* map = reinterpret_cast<Map*>(o);
1567
- ASSERT(!map->IsMarked());
1568
- ASSERT(!map->IsOverflowed());
1569
- ASSERT(map->IsMap());
1570
- Heap::UpdateRSet(map);
1571
- }
1572
- }
1573
-
1574
1584
  void UpdateMapPointersInPagedSpace(PagedSpace* space) {
1575
1585
  ASSERT(space != Heap::map_space());
1576
1586
 
@@ -1663,9 +1673,9 @@ class MapCompact {
1663
1673
 
1664
1674
  ASSERT(Map::kSize % 4 == 0);
1665
1675
 
1666
- Heap::CopyBlock(reinterpret_cast<Object**>(vacant_map->address()),
1667
- reinterpret_cast<Object**>(map_to_evacuate->address()),
1668
- Map::kSize);
1676
+ Heap::CopyBlockToOldSpaceAndUpdateRegionMarks(vacant_map->address(),
1677
+ map_to_evacuate->address(),
1678
+ Map::kSize);
1669
1679
 
1670
1680
  ASSERT(vacant_map->IsMap()); // Due to memcpy above.
1671
1681
 
@@ -1735,6 +1745,8 @@ MapCompact::MapUpdatingVisitor MapCompact::map_updating_visitor_;
1735
1745
 
1736
1746
 
1737
1747
  void MarkCompactCollector::SweepSpaces() {
1748
+ GCTracer::Scope gc_scope(tracer_, GCTracer::Scope::MC_SWEEP);
1749
+
1738
1750
  ASSERT(state_ == SWEEP_SPACES);
1739
1751
  ASSERT(!IsCompacting());
1740
1752
  // Noncompacting collections simply sweep the spaces to clear the mark
@@ -1748,6 +1760,12 @@ void MarkCompactCollector::SweepSpaces() {
1748
1760
  SweepSpace(Heap::cell_space(), &DeallocateCellBlock);
1749
1761
  SweepNewSpace(Heap::new_space());
1750
1762
  SweepSpace(Heap::map_space(), &DeallocateMapBlock);
1763
+
1764
+ Heap::IterateDirtyRegions(Heap::map_space(),
1765
+ &Heap::IteratePointersInDirtyMapsRegion,
1766
+ &UpdatePointerToNewGen,
1767
+ Heap::WATERMARK_SHOULD_BE_VALID);
1768
+
1751
1769
  int live_maps_size = Heap::map_space()->Size();
1752
1770
  int live_maps = live_maps_size / Map::kSize;
1753
1771
  ASSERT(live_map_objects_size_ == live_maps_size);
@@ -1758,7 +1776,6 @@ void MarkCompactCollector::SweepSpaces() {
1758
1776
  map_compact.CompactMaps();
1759
1777
  map_compact.UpdateMapPointersInRoots();
1760
1778
 
1761
- map_compact.FinishMapSpace();
1762
1779
  PagedSpaces spaces;
1763
1780
  for (PagedSpace* space = spaces.next();
1764
1781
  space != NULL; space = spaces.next()) {
@@ -1846,8 +1863,10 @@ class UpdatingVisitor: public ObjectVisitor {
1846
1863
  }
1847
1864
 
1848
1865
  void VisitDebugTarget(RelocInfo* rinfo) {
1849
- ASSERT(RelocInfo::IsJSReturn(rinfo->rmode()) &&
1850
- rinfo->IsPatchedReturnSequence());
1866
+ ASSERT((RelocInfo::IsJSReturn(rinfo->rmode()) &&
1867
+ rinfo->IsPatchedReturnSequence()) ||
1868
+ (RelocInfo::IsDebugBreakSlot(rinfo->rmode()) &&
1869
+ rinfo->IsPatchedDebugBreakSlotSequence()));
1851
1870
  Object* target = Code::GetCodeFromTargetAddress(rinfo->call_address());
1852
1871
  VisitPointer(&target);
1853
1872
  rinfo->set_call_address(
@@ -2031,9 +2050,8 @@ Address MarkCompactCollector::GetForwardingAddressInOldSpace(HeapObject* obj) {
2031
2050
  Page* forwarded_page = Page::FromAddress(first_forwarded);
2032
2051
  int forwarded_offset = forwarded_page->Offset(first_forwarded);
2033
2052
 
2034
- // Find end of allocation of in the page of first_forwarded.
2035
- Address mc_top = forwarded_page->mc_relocation_top;
2036
- int mc_top_offset = forwarded_page->Offset(mc_top);
2053
+ // Find end of allocation in the page of first_forwarded.
2054
+ int mc_top_offset = forwarded_page->AllocationWatermarkOffset();
2037
2055
 
2038
2056
  // Check if current object's forward pointer is in the same page
2039
2057
  // as the first live object's forwarding pointer
@@ -2050,7 +2068,7 @@ Address MarkCompactCollector::GetForwardingAddressInOldSpace(HeapObject* obj) {
2050
2068
  offset += Page::kObjectStartOffset;
2051
2069
 
2052
2070
  ASSERT_PAGE_OFFSET(offset);
2053
- ASSERT(next_page->OffsetToAddress(offset) < next_page->mc_relocation_top);
2071
+ ASSERT(next_page->OffsetToAddress(offset) < next_page->AllocationTop());
2054
2072
 
2055
2073
  return next_page->OffsetToAddress(offset);
2056
2074
  }
@@ -2095,16 +2113,12 @@ void MarkCompactCollector::RelocateObjects() {
2095
2113
  // Flip from and to spaces
2096
2114
  Heap::new_space()->Flip();
2097
2115
 
2116
+ Heap::new_space()->MCCommitRelocationInfo();
2117
+
2098
2118
  // Set age_mark to bottom in to space
2099
2119
  Address mark = Heap::new_space()->bottom();
2100
2120
  Heap::new_space()->set_age_mark(mark);
2101
2121
 
2102
- Heap::new_space()->MCCommitRelocationInfo();
2103
- #ifdef DEBUG
2104
- // It is safe to write to the remembered sets as remembered sets on a
2105
- // page-by-page basis after committing the m-c forwarding pointer.
2106
- Page::set_rset_state(Page::IN_USE);
2107
- #endif
2108
2122
  PagedSpaces spaces;
2109
2123
  for (PagedSpace* space = spaces.next(); space != NULL; space = spaces.next())
2110
2124
  space->MCCommitRelocationInfo();
@@ -2131,9 +2145,9 @@ int MarkCompactCollector::RelocateMapObject(HeapObject* obj) {
2131
2145
 
2132
2146
  if (new_addr != old_addr) {
2133
2147
  // Move contents.
2134
- Heap::MoveBlock(reinterpret_cast<Object**>(new_addr),
2135
- reinterpret_cast<Object**>(old_addr),
2136
- Map::kSize);
2148
+ Heap::MoveBlockToOldSpaceAndUpdateRegionMarks(new_addr,
2149
+ old_addr,
2150
+ Map::kSize);
2137
2151
  }
2138
2152
 
2139
2153
  #ifdef DEBUG
@@ -2190,9 +2204,13 @@ int MarkCompactCollector::RelocateOldNonCodeObject(HeapObject* obj,
2190
2204
 
2191
2205
  if (new_addr != old_addr) {
2192
2206
  // Move contents.
2193
- Heap::MoveBlock(reinterpret_cast<Object**>(new_addr),
2194
- reinterpret_cast<Object**>(old_addr),
2195
- obj_size);
2207
+ if (space == Heap::old_data_space()) {
2208
+ Heap::MoveBlock(new_addr, old_addr, obj_size);
2209
+ } else {
2210
+ Heap::MoveBlockToOldSpaceAndUpdateRegionMarks(new_addr,
2211
+ old_addr,
2212
+ obj_size);
2213
+ }
2196
2214
  }
2197
2215
 
2198
2216
  ASSERT(!HeapObject::FromAddress(new_addr)->IsCode());
@@ -2201,6 +2219,7 @@ int MarkCompactCollector::RelocateOldNonCodeObject(HeapObject* obj,
2201
2219
  if (copied_to->IsJSFunction()) {
2202
2220
  PROFILE(FunctionMoveEvent(old_addr, new_addr));
2203
2221
  }
2222
+ HEAP_PROFILE(ObjectMoveEvent(old_addr, new_addr));
2204
2223
 
2205
2224
  return obj_size;
2206
2225
  }
@@ -2237,9 +2256,7 @@ int MarkCompactCollector::RelocateCodeObject(HeapObject* obj) {
2237
2256
 
2238
2257
  if (new_addr != old_addr) {
2239
2258
  // Move contents.
2240
- Heap::MoveBlock(reinterpret_cast<Object**>(new_addr),
2241
- reinterpret_cast<Object**>(old_addr),
2242
- obj_size);
2259
+ Heap::MoveBlock(new_addr, old_addr, obj_size);
2243
2260
  }
2244
2261
 
2245
2262
  HeapObject* copied_to = HeapObject::FromAddress(new_addr);
@@ -2249,6 +2266,7 @@ int MarkCompactCollector::RelocateCodeObject(HeapObject* obj) {
2249
2266
  // Notify the logger that compiled code has moved.
2250
2267
  PROFILE(CodeMoveEvent(old_addr, new_addr));
2251
2268
  }
2269
+ HEAP_PROFILE(ObjectMoveEvent(old_addr, new_addr));
2252
2270
 
2253
2271
  return obj_size;
2254
2272
  }
@@ -2275,9 +2293,13 @@ int MarkCompactCollector::RelocateNewObject(HeapObject* obj) {
2275
2293
  #endif
2276
2294
 
2277
2295
  // New and old addresses cannot overlap.
2278
- Heap::CopyBlock(reinterpret_cast<Object**>(new_addr),
2279
- reinterpret_cast<Object**>(old_addr),
2280
- obj_size);
2296
+ if (Heap::InNewSpace(HeapObject::FromAddress(new_addr))) {
2297
+ Heap::CopyBlock(new_addr, old_addr, obj_size);
2298
+ } else {
2299
+ Heap::CopyBlockToOldSpaceAndUpdateRegionMarks(new_addr,
2300
+ old_addr,
2301
+ obj_size);
2302
+ }
2281
2303
 
2282
2304
  #ifdef DEBUG
2283
2305
  if (FLAG_gc_verbose) {
@@ -2289,23 +2311,12 @@ int MarkCompactCollector::RelocateNewObject(HeapObject* obj) {
2289
2311
  if (copied_to->IsJSFunction()) {
2290
2312
  PROFILE(FunctionMoveEvent(old_addr, new_addr));
2291
2313
  }
2314
+ HEAP_PROFILE(ObjectMoveEvent(old_addr, new_addr));
2292
2315
 
2293
2316
  return obj_size;
2294
2317
  }
2295
2318
 
2296
2319
 
2297
- // -------------------------------------------------------------------------
2298
- // Phase 5: rebuild remembered sets
2299
-
2300
- void MarkCompactCollector::RebuildRSets() {
2301
- #ifdef DEBUG
2302
- ASSERT(state_ == RELOCATE_OBJECTS);
2303
- state_ = REBUILD_RSETS;
2304
- #endif
2305
- Heap::RebuildRSets();
2306
- }
2307
-
2308
-
2309
2320
  void MarkCompactCollector::ReportDeleteIfNeeded(HeapObject* obj) {
2310
2321
  #ifdef ENABLE_LOGGING_AND_PROFILING
2311
2322
  if (obj->IsCode()) {