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
@@ -41,6 +41,7 @@ namespace internal {
41
41
  && (info).top <= (space).high() \
42
42
  && (info).limit == (space).high())
43
43
 
44
+ intptr_t Page::watermark_invalidated_mark_ = Page::WATERMARK_INVALIDATED;
44
45
 
45
46
  // ----------------------------------------------------------------------------
46
47
  // HeapObjectIterator
@@ -138,13 +139,6 @@ PageIterator::PageIterator(PagedSpace* space, Mode mode) : space_(space) {
138
139
  }
139
140
 
140
141
 
141
- // -----------------------------------------------------------------------------
142
- // Page
143
-
144
- #ifdef DEBUG
145
- Page::RSetState Page::rset_state_ = Page::IN_USE;
146
- #endif
147
-
148
142
  // -----------------------------------------------------------------------------
149
143
  // CodeRange
150
144
 
@@ -348,7 +342,9 @@ void MemoryAllocator::TearDown() {
348
342
  void* MemoryAllocator::AllocateRawMemory(const size_t requested,
349
343
  size_t* allocated,
350
344
  Executability executable) {
351
- if (size_ + static_cast<int>(requested) > capacity_) return NULL;
345
+ if (size_ + static_cast<size_t>(requested) > static_cast<size_t>(capacity_)) {
346
+ return NULL;
347
+ }
352
348
  void* mem;
353
349
  if (executable == EXECUTABLE && CodeRange::exists()) {
354
350
  mem = CodeRange::AllocateRawMemory(requested, allocated);
@@ -524,7 +520,10 @@ Page* MemoryAllocator::InitializePagesInChunk(int chunk_id, int pages_in_chunk,
524
520
  for (int i = 0; i < pages_in_chunk; i++) {
525
521
  Page* p = Page::FromAddress(page_addr);
526
522
  p->opaque_header = OffsetFrom(page_addr + Page::kPageSize) | chunk_id;
523
+ p->InvalidateWatermark(true);
527
524
  p->SetIsLargeObjectPage(false);
525
+ p->SetAllocationWatermark(p->ObjectAreaStart());
526
+ p->SetCachedAllocationWatermark(p->ObjectAreaStart());
528
527
  page_addr += Page::kPageSize;
529
528
  }
530
529
 
@@ -681,6 +680,7 @@ Page* MemoryAllocator::RelinkPagesInChunk(int chunk_id,
681
680
  p->opaque_header = OffsetFrom(page_addr + Page::kPageSize) | chunk_id;
682
681
  page_addr += Page::kPageSize;
683
682
 
683
+ p->InvalidateWatermark(true);
684
684
  if (p->WasInUseBeforeMC()) {
685
685
  *last_page_in_use = p;
686
686
  }
@@ -744,10 +744,10 @@ bool PagedSpace::Setup(Address start, size_t size) {
744
744
  accounting_stats_.ExpandSpace(num_pages * Page::kObjectAreaSize);
745
745
  ASSERT(Capacity() <= max_capacity_);
746
746
 
747
- // Sequentially initialize remembered sets in the newly allocated
747
+ // Sequentially clear region marks in the newly allocated
748
748
  // pages and cache the current last page in the space.
749
749
  for (Page* p = first_page_; p->is_valid(); p = p->next_page()) {
750
- p->ClearRSet();
750
+ p->SetRegionMarks(Page::kAllRegionsCleanMarks);
751
751
  last_page_ = p;
752
752
  }
753
753
 
@@ -794,10 +794,10 @@ void PagedSpace::Unprotect() {
794
794
  #endif
795
795
 
796
796
 
797
- void PagedSpace::ClearRSet() {
797
+ void PagedSpace::MarkAllPagesClean() {
798
798
  PageIterator it(this, PageIterator::ALL_PAGES);
799
799
  while (it.has_next()) {
800
- it.next()->ClearRSet();
800
+ it.next()->SetRegionMarks(Page::kAllRegionsCleanMarks);
801
801
  }
802
802
  }
803
803
 
@@ -900,7 +900,8 @@ HeapObject* PagedSpace::SlowMCAllocateRaw(int size_in_bytes) {
900
900
  // of forwarding addresses is as an offset in terms of live bytes, so we
901
901
  // need quick access to the allocation top of each page to decode
902
902
  // forwarding addresses.
903
- current_page->mc_relocation_top = mc_forwarding_info_.top;
903
+ current_page->SetAllocationWatermark(mc_forwarding_info_.top);
904
+ current_page->next_page()->InvalidateWatermark(true);
904
905
  SetAllocationInfo(&mc_forwarding_info_, current_page->next_page());
905
906
  return AllocateLinearly(&mc_forwarding_info_, size_in_bytes);
906
907
  }
@@ -928,10 +929,10 @@ bool PagedSpace::Expand(Page* last_page) {
928
929
 
929
930
  MemoryAllocator::SetNextPage(last_page, p);
930
931
 
931
- // Sequentially clear remembered set of new pages and and cache the
932
+ // Sequentially clear region marks of new pages and and cache the
932
933
  // new last page in the space.
933
934
  while (p->is_valid()) {
934
- p->ClearRSet();
935
+ p->SetRegionMarks(Page::kAllRegionsCleanMarks);
935
936
  last_page_ = p;
936
937
  p = p->next_page();
937
938
  }
@@ -1030,16 +1031,11 @@ void PagedSpace::Verify(ObjectVisitor* visitor) {
1030
1031
  if (above_allocation_top) {
1031
1032
  // We don't care what's above the allocation top.
1032
1033
  } else {
1033
- // Unless this is the last page in the space containing allocated
1034
- // objects, the allocation top should be at a constant offset from the
1035
- // object area end.
1036
1034
  Address top = current_page->AllocationTop();
1037
1035
  if (current_page == top_page) {
1038
1036
  ASSERT(top == allocation_info_.top);
1039
1037
  // The next page will be above the allocation top.
1040
1038
  above_allocation_top = true;
1041
- } else {
1042
- ASSERT(top == PageAllocationLimit(current_page));
1043
1039
  }
1044
1040
 
1045
1041
  // It should be packed with objects from the bottom to the top.
@@ -1060,8 +1056,8 @@ void PagedSpace::Verify(ObjectVisitor* visitor) {
1060
1056
  object->Verify();
1061
1057
 
1062
1058
  // All the interior pointers should be contained in the heap and
1063
- // have their remembered set bits set if required as determined
1064
- // by the visitor.
1059
+ // have page regions covering intergenerational references should be
1060
+ // marked dirty.
1065
1061
  int size = object->Size();
1066
1062
  object->IterateBody(map->instance_type(), size, visitor);
1067
1063
 
@@ -1120,7 +1116,7 @@ bool NewSpace::Setup(Address start, int size) {
1120
1116
 
1121
1117
  start_ = start;
1122
1118
  address_mask_ = ~(size - 1);
1123
- object_mask_ = address_mask_ | kHeapObjectTag;
1119
+ object_mask_ = address_mask_ | kHeapObjectTagMask;
1124
1120
  object_expected_ = reinterpret_cast<uintptr_t>(start) | kHeapObjectTag;
1125
1121
 
1126
1122
  allocation_info_.top = to_space_.low();
@@ -1324,7 +1320,7 @@ bool SemiSpace::Setup(Address start,
1324
1320
 
1325
1321
  start_ = start;
1326
1322
  address_mask_ = ~(maximum_capacity - 1);
1327
- object_mask_ = address_mask_ | kHeapObjectTag;
1323
+ object_mask_ = address_mask_ | kHeapObjectTagMask;
1328
1324
  object_expected_ = reinterpret_cast<uintptr_t>(start) | kHeapObjectTag;
1329
1325
  age_mark_ = start_;
1330
1326
 
@@ -1463,6 +1459,7 @@ static void ReportCodeKindStatistics() {
1463
1459
  CASE(STORE_IC);
1464
1460
  CASE(KEYED_STORE_IC);
1465
1461
  CASE(CALL_IC);
1462
+ CASE(KEYED_CALL_IC);
1466
1463
  CASE(BINARY_OP_IC);
1467
1464
  }
1468
1465
  }
@@ -1634,7 +1631,7 @@ void FreeListNode::set_size(int size_in_bytes) {
1634
1631
  // If the block is too small (eg, one or two words), to hold both a size
1635
1632
  // field and a next pointer, we give it a filler map that gives it the
1636
1633
  // correct size.
1637
- if (size_in_bytes > ByteArray::kAlignedSize) {
1634
+ if (size_in_bytes > ByteArray::kHeaderSize) {
1638
1635
  set_map(Heap::raw_unchecked_byte_array_map());
1639
1636
  // Can't use ByteArray::cast because it fails during deserialization.
1640
1637
  ByteArray* this_as_byte_array = reinterpret_cast<ByteArray*>(this);
@@ -1831,7 +1828,7 @@ FixedSizeFreeList::FixedSizeFreeList(AllocationSpace owner, int object_size)
1831
1828
 
1832
1829
  void FixedSizeFreeList::Reset() {
1833
1830
  available_ = 0;
1834
- head_ = NULL;
1831
+ head_ = tail_ = NULL;
1835
1832
  }
1836
1833
 
1837
1834
 
@@ -1843,8 +1840,13 @@ void FixedSizeFreeList::Free(Address start) {
1843
1840
  ASSERT(!MarkCompactCollector::IsCompacting());
1844
1841
  FreeListNode* node = FreeListNode::FromAddress(start);
1845
1842
  node->set_size(object_size_);
1846
- node->set_next(head_);
1847
- head_ = node->address();
1843
+ node->set_next(NULL);
1844
+ if (head_ == NULL) {
1845
+ tail_ = head_ = node->address();
1846
+ } else {
1847
+ FreeListNode::FromAddress(tail_)->set_next(node->address());
1848
+ tail_ = node->address();
1849
+ }
1848
1850
  available_ += object_size_;
1849
1851
  }
1850
1852
 
@@ -1907,15 +1909,14 @@ void OldSpace::MCCommitRelocationInfo() {
1907
1909
  Page* p = it.next();
1908
1910
  // Space below the relocation pointer is allocated.
1909
1911
  computed_size +=
1910
- static_cast<int>(p->mc_relocation_top - p->ObjectAreaStart());
1912
+ static_cast<int>(p->AllocationWatermark() - p->ObjectAreaStart());
1911
1913
  if (it.has_next()) {
1912
- // Free the space at the top of the page. We cannot use
1913
- // p->mc_relocation_top after the call to Free (because Free will clear
1914
- // remembered set bits).
1914
+ // Free the space at the top of the page.
1915
1915
  int extra_size =
1916
- static_cast<int>(p->ObjectAreaEnd() - p->mc_relocation_top);
1916
+ static_cast<int>(p->ObjectAreaEnd() - p->AllocationWatermark());
1917
1917
  if (extra_size > 0) {
1918
- int wasted_bytes = free_list_.Free(p->mc_relocation_top, extra_size);
1918
+ int wasted_bytes = free_list_.Free(p->AllocationWatermark(),
1919
+ extra_size);
1919
1920
  // The bytes we have just "freed" to add to the free list were
1920
1921
  // already accounted as available.
1921
1922
  accounting_stats_.WasteBytes(wasted_bytes);
@@ -1963,7 +1964,10 @@ void PagedSpace::FreePages(Page* prev, Page* last) {
1963
1964
 
1964
1965
  // Clean them up.
1965
1966
  do {
1966
- first->ClearRSet();
1967
+ first->InvalidateWatermark(true);
1968
+ first->SetAllocationWatermark(first->ObjectAreaStart());
1969
+ first->SetCachedAllocationWatermark(first->ObjectAreaStart());
1970
+ first->SetRegionMarks(Page::kAllRegionsCleanMarks);
1967
1971
  first = first->next_page();
1968
1972
  } while (first != NULL);
1969
1973
 
@@ -2003,6 +2007,7 @@ void PagedSpace::PrepareForMarkCompact(bool will_compact) {
2003
2007
  // Current allocation top points to a page which is now in the middle
2004
2008
  // of page list. We should move allocation top forward to the new last
2005
2009
  // used page so various object iterators will continue to work properly.
2010
+ last_in_use->SetAllocationWatermark(last_in_use->AllocationTop());
2006
2011
 
2007
2012
  int size_in_bytes = static_cast<int>(PageAllocationLimit(last_in_use) -
2008
2013
  last_in_use->AllocationTop());
@@ -2035,6 +2040,7 @@ void PagedSpace::PrepareForMarkCompact(bool will_compact) {
2035
2040
  int size_in_bytes = static_cast<int>(PageAllocationLimit(p) -
2036
2041
  p->ObjectAreaStart());
2037
2042
 
2043
+ p->SetAllocationWatermark(p->ObjectAreaStart());
2038
2044
  Heap::CreateFillerObjectAt(p->ObjectAreaStart(), size_in_bytes);
2039
2045
  }
2040
2046
  }
@@ -2066,6 +2072,7 @@ bool PagedSpace::ReserveSpace(int bytes) {
2066
2072
  if (!reserved_page->is_valid()) return false;
2067
2073
  }
2068
2074
  ASSERT(TopPageOf(allocation_info_)->next_page()->is_valid());
2075
+ TopPageOf(allocation_info_)->next_page()->InvalidateWatermark(true);
2069
2076
  SetAllocationInfo(&allocation_info_,
2070
2077
  TopPageOf(allocation_info_)->next_page());
2071
2078
  return true;
@@ -2100,7 +2107,20 @@ HeapObject* OldSpace::SlowAllocateRaw(int size_in_bytes) {
2100
2107
  accounting_stats_.WasteBytes(wasted_bytes);
2101
2108
  if (!result->IsFailure()) {
2102
2109
  accounting_stats_.AllocateBytes(size_in_bytes);
2103
- return HeapObject::cast(result);
2110
+
2111
+ HeapObject* obj = HeapObject::cast(result);
2112
+ Page* p = Page::FromAddress(obj->address());
2113
+
2114
+ if (obj->address() >= p->AllocationWatermark()) {
2115
+ // There should be no hole between the allocation watermark
2116
+ // and allocated object address.
2117
+ // Memory above the allocation watermark was not swept and
2118
+ // might contain garbage pointers to new space.
2119
+ ASSERT(obj->address() == p->AllocationWatermark());
2120
+ p->SetAllocationWatermark(obj->address() + size_in_bytes);
2121
+ }
2122
+
2123
+ return obj;
2104
2124
  }
2105
2125
  }
2106
2126
 
@@ -2123,6 +2143,7 @@ HeapObject* OldSpace::SlowAllocateRaw(int size_in_bytes) {
2123
2143
 
2124
2144
 
2125
2145
  void OldSpace::PutRestOfCurrentPageOnFreeList(Page* current_page) {
2146
+ current_page->SetAllocationWatermark(allocation_info_.top);
2126
2147
  int free_size =
2127
2148
  static_cast<int>(current_page->ObjectAreaEnd() - allocation_info_.top);
2128
2149
  if (free_size > 0) {
@@ -2133,6 +2154,7 @@ void OldSpace::PutRestOfCurrentPageOnFreeList(Page* current_page) {
2133
2154
 
2134
2155
 
2135
2156
  void FixedSpace::PutRestOfCurrentPageOnFreeList(Page* current_page) {
2157
+ current_page->SetAllocationWatermark(allocation_info_.top);
2136
2158
  int free_size =
2137
2159
  static_cast<int>(current_page->ObjectAreaEnd() - allocation_info_.top);
2138
2160
  // In the fixed space free list all the free list items have the right size.
@@ -2152,8 +2174,10 @@ void FixedSpace::PutRestOfCurrentPageOnFreeList(Page* current_page) {
2152
2174
  HeapObject* OldSpace::AllocateInNextPage(Page* current_page,
2153
2175
  int size_in_bytes) {
2154
2176
  ASSERT(current_page->next_page()->is_valid());
2177
+ Page* next_page = current_page->next_page();
2178
+ next_page->ClearGCFields();
2155
2179
  PutRestOfCurrentPageOnFreeList(current_page);
2156
- SetAllocationInfo(&allocation_info_, current_page->next_page());
2180
+ SetAllocationInfo(&allocation_info_, next_page);
2157
2181
  return AllocateLinearly(&allocation_info_, size_in_bytes);
2158
2182
  }
2159
2183
 
@@ -2283,8 +2307,8 @@ void PagedSpace::CollectCodeStatistics() {
2283
2307
  }
2284
2308
 
2285
2309
  ASSERT(code->instruction_start() <= prev_pc &&
2286
- prev_pc <= code->relocation_start());
2287
- delta += static_cast<int>(code->relocation_start() - prev_pc);
2310
+ prev_pc <= code->instruction_end());
2311
+ delta += static_cast<int>(code->instruction_end() - prev_pc);
2288
2312
  EnterComment("NoComment", delta);
2289
2313
  }
2290
2314
  }
@@ -2296,160 +2320,12 @@ void OldSpace::ReportStatistics() {
2296
2320
  PrintF(" capacity: %d, waste: %d, available: %d, %%%d\n",
2297
2321
  Capacity(), Waste(), Available(), pct);
2298
2322
 
2299
- // Report remembered set statistics.
2300
- int rset_marked_pointers = 0;
2301
- int rset_marked_arrays = 0;
2302
- int rset_marked_array_elements = 0;
2303
- int cross_gen_pointers = 0;
2304
- int cross_gen_array_elements = 0;
2305
-
2306
- PageIterator page_it(this, PageIterator::PAGES_IN_USE);
2307
- while (page_it.has_next()) {
2308
- Page* p = page_it.next();
2309
-
2310
- for (Address rset_addr = p->RSetStart();
2311
- rset_addr < p->RSetEnd();
2312
- rset_addr += kIntSize) {
2313
- int rset = Memory::int_at(rset_addr);
2314
- if (rset != 0) {
2315
- // Bits were set
2316
- int intoff =
2317
- static_cast<int>(rset_addr - p->address() - Page::kRSetOffset);
2318
- int bitoff = 0;
2319
- for (; bitoff < kBitsPerInt; ++bitoff) {
2320
- if ((rset & (1 << bitoff)) != 0) {
2321
- int bitpos = intoff*kBitsPerByte + bitoff;
2322
- Address slot = p->OffsetToAddress(bitpos << kObjectAlignmentBits);
2323
- Object** obj = reinterpret_cast<Object**>(slot);
2324
- if (*obj == Heap::raw_unchecked_fixed_array_map()) {
2325
- rset_marked_arrays++;
2326
- FixedArray* fa = FixedArray::cast(HeapObject::FromAddress(slot));
2327
-
2328
- rset_marked_array_elements += fa->length();
2329
- // Manually inline FixedArray::IterateBody
2330
- Address elm_start = slot + FixedArray::kHeaderSize;
2331
- Address elm_stop = elm_start + fa->length() * kPointerSize;
2332
- for (Address elm_addr = elm_start;
2333
- elm_addr < elm_stop; elm_addr += kPointerSize) {
2334
- // Filter non-heap-object pointers
2335
- Object** elm_p = reinterpret_cast<Object**>(elm_addr);
2336
- if (Heap::InNewSpace(*elm_p))
2337
- cross_gen_array_elements++;
2338
- }
2339
- } else {
2340
- rset_marked_pointers++;
2341
- if (Heap::InNewSpace(*obj))
2342
- cross_gen_pointers++;
2343
- }
2344
- }
2345
- }
2346
- }
2347
- }
2348
- }
2349
-
2350
- pct = rset_marked_pointers == 0 ?
2351
- 0 : cross_gen_pointers * 100 / rset_marked_pointers;
2352
- PrintF(" rset-marked pointers %d, to-new-space %d (%%%d)\n",
2353
- rset_marked_pointers, cross_gen_pointers, pct);
2354
- PrintF(" rset_marked arrays %d, ", rset_marked_arrays);
2355
- PrintF(" elements %d, ", rset_marked_array_elements);
2356
- pct = rset_marked_array_elements == 0 ? 0
2357
- : cross_gen_array_elements * 100 / rset_marked_array_elements;
2358
- PrintF(" pointers to new space %d (%%%d)\n", cross_gen_array_elements, pct);
2359
- PrintF(" total rset-marked bits %d\n",
2360
- (rset_marked_pointers + rset_marked_arrays));
2361
- pct = (rset_marked_pointers + rset_marked_array_elements) == 0 ? 0
2362
- : (cross_gen_pointers + cross_gen_array_elements) * 100 /
2363
- (rset_marked_pointers + rset_marked_array_elements);
2364
- PrintF(" total rset pointers %d, true cross generation ones %d (%%%d)\n",
2365
- (rset_marked_pointers + rset_marked_array_elements),
2366
- (cross_gen_pointers + cross_gen_array_elements),
2367
- pct);
2368
-
2369
2323
  ClearHistograms();
2370
2324
  HeapObjectIterator obj_it(this);
2371
2325
  for (HeapObject* obj = obj_it.next(); obj != NULL; obj = obj_it.next())
2372
2326
  CollectHistogramInfo(obj);
2373
2327
  ReportHistogram(true);
2374
2328
  }
2375
-
2376
-
2377
- // Dump the range of remembered set words between [start, end) corresponding
2378
- // to the pointers starting at object_p. The allocation_top is an object
2379
- // pointer which should not be read past. This is important for large object
2380
- // pages, where some bits in the remembered set range do not correspond to
2381
- // allocated addresses.
2382
- static void PrintRSetRange(Address start, Address end, Object** object_p,
2383
- Address allocation_top) {
2384
- Address rset_address = start;
2385
-
2386
- // If the range starts on on odd numbered word (eg, for large object extra
2387
- // remembered set ranges), print some spaces.
2388
- if ((reinterpret_cast<uintptr_t>(start) / kIntSize) % 2 == 1) {
2389
- PrintF(" ");
2390
- }
2391
-
2392
- // Loop over all the words in the range.
2393
- while (rset_address < end) {
2394
- uint32_t rset_word = Memory::uint32_at(rset_address);
2395
- int bit_position = 0;
2396
-
2397
- // Loop over all the bits in the word.
2398
- while (bit_position < kBitsPerInt) {
2399
- if (object_p == reinterpret_cast<Object**>(allocation_top)) {
2400
- // Print a bar at the allocation pointer.
2401
- PrintF("|");
2402
- } else if (object_p > reinterpret_cast<Object**>(allocation_top)) {
2403
- // Do not dereference object_p past the allocation pointer.
2404
- PrintF("#");
2405
- } else if ((rset_word & (1 << bit_position)) == 0) {
2406
- // Print a dot for zero bits.
2407
- PrintF(".");
2408
- } else if (Heap::InNewSpace(*object_p)) {
2409
- // Print an X for one bits for pointers to new space.
2410
- PrintF("X");
2411
- } else {
2412
- // Print a circle for one bits for pointers to old space.
2413
- PrintF("o");
2414
- }
2415
-
2416
- // Print a space after every 8th bit except the last.
2417
- if (bit_position % 8 == 7 && bit_position != (kBitsPerInt - 1)) {
2418
- PrintF(" ");
2419
- }
2420
-
2421
- // Advance to next bit.
2422
- bit_position++;
2423
- object_p++;
2424
- }
2425
-
2426
- // Print a newline after every odd numbered word, otherwise a space.
2427
- if ((reinterpret_cast<uintptr_t>(rset_address) / kIntSize) % 2 == 1) {
2428
- PrintF("\n");
2429
- } else {
2430
- PrintF(" ");
2431
- }
2432
-
2433
- // Advance to next remembered set word.
2434
- rset_address += kIntSize;
2435
- }
2436
- }
2437
-
2438
-
2439
- void PagedSpace::DoPrintRSet(const char* space_name) {
2440
- PageIterator it(this, PageIterator::PAGES_IN_USE);
2441
- while (it.has_next()) {
2442
- Page* p = it.next();
2443
- PrintF("%s page 0x%x:\n", space_name, p);
2444
- PrintRSetRange(p->RSetStart(), p->RSetEnd(),
2445
- reinterpret_cast<Object**>(p->ObjectAreaStart()),
2446
- p->AllocationTop());
2447
- PrintF("\n");
2448
- }
2449
- }
2450
-
2451
-
2452
- void OldSpace::PrintRSet() { DoPrintRSet("old"); }
2453
2329
  #endif
2454
2330
 
2455
2331
  // -----------------------------------------------------------------------------
@@ -2499,6 +2375,7 @@ void FixedSpace::MCCommitRelocationInfo() {
2499
2375
  if (it.has_next()) {
2500
2376
  accounting_stats_.WasteBytes(
2501
2377
  static_cast<int>(page->ObjectAreaEnd() - page_top));
2378
+ page->SetAllocationWatermark(page_top);
2502
2379
  }
2503
2380
  }
2504
2381
 
@@ -2528,7 +2405,19 @@ HeapObject* FixedSpace::SlowAllocateRaw(int size_in_bytes) {
2528
2405
  Object* result = free_list_.Allocate();
2529
2406
  if (!result->IsFailure()) {
2530
2407
  accounting_stats_.AllocateBytes(size_in_bytes);
2531
- return HeapObject::cast(result);
2408
+ HeapObject* obj = HeapObject::cast(result);
2409
+ Page* p = Page::FromAddress(obj->address());
2410
+
2411
+ if (obj->address() >= p->AllocationWatermark()) {
2412
+ // There should be no hole between the allocation watermark
2413
+ // and allocated object address.
2414
+ // Memory above the allocation watermark was not swept and
2415
+ // might contain garbage pointers to new space.
2416
+ ASSERT(obj->address() == p->AllocationWatermark());
2417
+ p->SetAllocationWatermark(obj->address() + size_in_bytes);
2418
+ }
2419
+
2420
+ return obj;
2532
2421
  }
2533
2422
  }
2534
2423
 
@@ -2558,8 +2447,11 @@ HeapObject* FixedSpace::AllocateInNextPage(Page* current_page,
2558
2447
  ASSERT(current_page->next_page()->is_valid());
2559
2448
  ASSERT(allocation_info_.top == PageAllocationLimit(current_page));
2560
2449
  ASSERT_EQ(object_size_in_bytes_, size_in_bytes);
2450
+ Page* next_page = current_page->next_page();
2451
+ next_page->ClearGCFields();
2452
+ current_page->SetAllocationWatermark(allocation_info_.top);
2561
2453
  accounting_stats_.WasteBytes(page_extra_);
2562
- SetAllocationInfo(&allocation_info_, current_page->next_page());
2454
+ SetAllocationInfo(&allocation_info_, next_page);
2563
2455
  return AllocateLinearly(&allocation_info_, size_in_bytes);
2564
2456
  }
2565
2457
 
@@ -2570,51 +2462,12 @@ void FixedSpace::ReportStatistics() {
2570
2462
  PrintF(" capacity: %d, waste: %d, available: %d, %%%d\n",
2571
2463
  Capacity(), Waste(), Available(), pct);
2572
2464
 
2573
- // Report remembered set statistics.
2574
- int rset_marked_pointers = 0;
2575
- int cross_gen_pointers = 0;
2576
-
2577
- PageIterator page_it(this, PageIterator::PAGES_IN_USE);
2578
- while (page_it.has_next()) {
2579
- Page* p = page_it.next();
2580
-
2581
- for (Address rset_addr = p->RSetStart();
2582
- rset_addr < p->RSetEnd();
2583
- rset_addr += kIntSize) {
2584
- int rset = Memory::int_at(rset_addr);
2585
- if (rset != 0) {
2586
- // Bits were set
2587
- int intoff =
2588
- static_cast<int>(rset_addr - p->address() - Page::kRSetOffset);
2589
- int bitoff = 0;
2590
- for (; bitoff < kBitsPerInt; ++bitoff) {
2591
- if ((rset & (1 << bitoff)) != 0) {
2592
- int bitpos = intoff*kBitsPerByte + bitoff;
2593
- Address slot = p->OffsetToAddress(bitpos << kObjectAlignmentBits);
2594
- Object** obj = reinterpret_cast<Object**>(slot);
2595
- rset_marked_pointers++;
2596
- if (Heap::InNewSpace(*obj))
2597
- cross_gen_pointers++;
2598
- }
2599
- }
2600
- }
2601
- }
2602
- }
2603
-
2604
- pct = rset_marked_pointers == 0 ?
2605
- 0 : cross_gen_pointers * 100 / rset_marked_pointers;
2606
- PrintF(" rset-marked pointers %d, to-new-space %d (%%%d)\n",
2607
- rset_marked_pointers, cross_gen_pointers, pct);
2608
-
2609
2465
  ClearHistograms();
2610
2466
  HeapObjectIterator obj_it(this);
2611
2467
  for (HeapObject* obj = obj_it.next(); obj != NULL; obj = obj_it.next())
2612
2468
  CollectHistogramInfo(obj);
2613
2469
  ReportHistogram(false);
2614
2470
  }
2615
-
2616
-
2617
- void FixedSpace::PrintRSet() { DoPrintRSet(name_); }
2618
2471
  #endif
2619
2472
 
2620
2473
 
@@ -2793,8 +2646,7 @@ Object* LargeObjectSpace::AllocateRawInternal(int requested_size,
2793
2646
  chunk->set_size(chunk_size);
2794
2647
  first_chunk_ = chunk;
2795
2648
 
2796
- // Set the object address and size in the page header and clear its
2797
- // remembered set.
2649
+ // Initialize page header.
2798
2650
  Page* page = Page::FromAddress(RoundUp(chunk->address(), Page::kPageSize));
2799
2651
  Address object_address = page->ObjectAreaStart();
2800
2652
  // Clear the low order bit of the second word in the page to flag it as a
@@ -2802,13 +2654,7 @@ Object* LargeObjectSpace::AllocateRawInternal(int requested_size,
2802
2654
  // low order bit should already be clear.
2803
2655
  ASSERT((chunk_size & 0x1) == 0);
2804
2656
  page->SetIsLargeObjectPage(true);
2805
- page->ClearRSet();
2806
- int extra_bytes = requested_size - object_size;
2807
- if (extra_bytes > 0) {
2808
- // The extra memory for the remembered set should be cleared.
2809
- memset(object_address + object_size, 0, extra_bytes);
2810
- }
2811
-
2657
+ page->SetRegionMarks(Page::kAllRegionsCleanMarks);
2812
2658
  return HeapObject::FromAddress(object_address);
2813
2659
  }
2814
2660
 
@@ -2823,8 +2669,7 @@ Object* LargeObjectSpace::AllocateRawCode(int size_in_bytes) {
2823
2669
 
2824
2670
  Object* LargeObjectSpace::AllocateRawFixedArray(int size_in_bytes) {
2825
2671
  ASSERT(0 < size_in_bytes);
2826
- int extra_rset_bytes = ExtraRSetBytesFor(size_in_bytes);
2827
- return AllocateRawInternal(size_in_bytes + extra_rset_bytes,
2672
+ return AllocateRawInternal(size_in_bytes,
2828
2673
  size_in_bytes,
2829
2674
  NOT_EXECUTABLE);
2830
2675
  }
@@ -2851,59 +2696,61 @@ Object* LargeObjectSpace::FindObject(Address a) {
2851
2696
  return Failure::Exception();
2852
2697
  }
2853
2698
 
2854
-
2855
- void LargeObjectSpace::ClearRSet() {
2856
- ASSERT(Page::is_rset_in_use());
2857
-
2858
- LargeObjectIterator it(this);
2859
- for (HeapObject* object = it.next(); object != NULL; object = it.next()) {
2860
- // We only have code, sequential strings, or fixed arrays in large
2861
- // object space, and only fixed arrays need remembered set support.
2862
- if (object->IsFixedArray()) {
2863
- // Clear the normal remembered set region of the page;
2864
- Page* page = Page::FromAddress(object->address());
2865
- page->ClearRSet();
2866
-
2867
- // Clear the extra remembered set.
2868
- int size = object->Size();
2869
- int extra_rset_bytes = ExtraRSetBytesFor(size);
2870
- memset(object->address() + size, 0, extra_rset_bytes);
2871
- }
2872
- }
2873
- }
2874
-
2875
-
2876
- void LargeObjectSpace::IterateRSet(ObjectSlotCallback copy_object_func) {
2877
- ASSERT(Page::is_rset_in_use());
2878
-
2879
- static void* lo_rset_histogram = StatsTable::CreateHistogram(
2880
- "V8.RSetLO",
2881
- 0,
2882
- // Keeping this histogram's buckets the same as the paged space histogram.
2883
- Page::kObjectAreaSize / kPointerSize,
2884
- 30);
2885
-
2699
+ void LargeObjectSpace::IterateDirtyRegions(ObjectSlotCallback copy_object) {
2886
2700
  LargeObjectIterator it(this);
2887
2701
  for (HeapObject* object = it.next(); object != NULL; object = it.next()) {
2888
2702
  // We only have code, sequential strings, or fixed arrays in large
2889
2703
  // object space, and only fixed arrays can possibly contain pointers to
2890
2704
  // the young generation.
2891
2705
  if (object->IsFixedArray()) {
2892
- // Iterate the normal page remembered set range.
2893
2706
  Page* page = Page::FromAddress(object->address());
2894
- Address object_end = object->address() + object->Size();
2895
- int count = Heap::IterateRSetRange(page->ObjectAreaStart(),
2896
- Min(page->ObjectAreaEnd(), object_end),
2897
- page->RSetStart(),
2898
- copy_object_func);
2899
-
2900
- // Iterate the extra array elements.
2901
- if (object_end > page->ObjectAreaEnd()) {
2902
- count += Heap::IterateRSetRange(page->ObjectAreaEnd(), object_end,
2903
- object_end, copy_object_func);
2904
- }
2905
- if (lo_rset_histogram != NULL) {
2906
- StatsTable::AddHistogramSample(lo_rset_histogram, count);
2707
+ uint32_t marks = page->GetRegionMarks();
2708
+ uint32_t newmarks = Page::kAllRegionsCleanMarks;
2709
+
2710
+ if (marks != Page::kAllRegionsCleanMarks) {
2711
+ // For a large page a single dirty mark corresponds to several
2712
+ // regions (modulo 32). So we treat a large page as a sequence of
2713
+ // normal pages of size Page::kPageSize having same dirty marks
2714
+ // and subsequently iterate dirty regions on each of these pages.
2715
+ Address start = object->address();
2716
+ Address end = page->ObjectAreaEnd();
2717
+ Address object_end = start + object->Size();
2718
+
2719
+ // Iterate regions of the first normal page covering object.
2720
+ uint32_t first_region_number = page->GetRegionNumberForAddress(start);
2721
+ newmarks |=
2722
+ Heap::IterateDirtyRegions(marks >> first_region_number,
2723
+ start,
2724
+ end,
2725
+ &Heap::IteratePointersInDirtyRegion,
2726
+ copy_object) << first_region_number;
2727
+
2728
+ start = end;
2729
+ end = start + Page::kPageSize;
2730
+ while (end <= object_end) {
2731
+ // Iterate next 32 regions.
2732
+ newmarks |=
2733
+ Heap::IterateDirtyRegions(marks,
2734
+ start,
2735
+ end,
2736
+ &Heap::IteratePointersInDirtyRegion,
2737
+ copy_object);
2738
+ start = end;
2739
+ end = start + Page::kPageSize;
2740
+ }
2741
+
2742
+ if (start != object_end) {
2743
+ // Iterate the last piece of an object which is less than
2744
+ // Page::kPageSize.
2745
+ newmarks |=
2746
+ Heap::IterateDirtyRegions(marks,
2747
+ start,
2748
+ object_end,
2749
+ &Heap::IteratePointersInDirtyRegion,
2750
+ copy_object);
2751
+ }
2752
+
2753
+ page->SetRegionMarks(newmarks);
2907
2754
  }
2908
2755
  }
2909
2756
  }
@@ -2995,7 +2842,7 @@ void LargeObjectSpace::Verify() {
2995
2842
  } else if (object->IsFixedArray()) {
2996
2843
  // We loop over fixed arrays ourselves, rather then using the visitor,
2997
2844
  // because the visitor doesn't support the start/offset iteration
2998
- // needed for IsRSetSet.
2845
+ // needed for IsRegionDirty.
2999
2846
  FixedArray* array = FixedArray::cast(object);
3000
2847
  for (int j = 0; j < array->length(); j++) {
3001
2848
  Object* element = array->get(j);
@@ -3004,8 +2851,11 @@ void LargeObjectSpace::Verify() {
3004
2851
  ASSERT(Heap::Contains(element_object));
3005
2852
  ASSERT(element_object->map()->IsMap());
3006
2853
  if (Heap::InNewSpace(element_object)) {
3007
- ASSERT(Page::IsRSetSet(object->address(),
3008
- FixedArray::kHeaderSize + j * kPointerSize));
2854
+ Address array_addr = object->address();
2855
+ Address element_addr = array_addr + FixedArray::kHeaderSize +
2856
+ j * kPointerSize;
2857
+
2858
+ ASSERT(Page::FromAddress(array_addr)->IsRegionDirty(element_addr));
3009
2859
  }
3010
2860
  }
3011
2861
  }
@@ -3046,33 +2896,6 @@ void LargeObjectSpace::CollectCodeStatistics() {
3046
2896
  }
3047
2897
  }
3048
2898
  }
3049
-
3050
-
3051
- void LargeObjectSpace::PrintRSet() {
3052
- LargeObjectIterator it(this);
3053
- for (HeapObject* object = it.next(); object != NULL; object = it.next()) {
3054
- if (object->IsFixedArray()) {
3055
- Page* page = Page::FromAddress(object->address());
3056
-
3057
- Address allocation_top = object->address() + object->Size();
3058
- PrintF("large page 0x%x:\n", page);
3059
- PrintRSetRange(page->RSetStart(), page->RSetEnd(),
3060
- reinterpret_cast<Object**>(object->address()),
3061
- allocation_top);
3062
- int extra_array_bytes = object->Size() - Page::kObjectAreaSize;
3063
- int extra_rset_bits = RoundUp(extra_array_bytes / kPointerSize,
3064
- kBitsPerInt);
3065
- PrintF("------------------------------------------------------------"
3066
- "-----------\n");
3067
- PrintRSetRange(allocation_top,
3068
- allocation_top + extra_rset_bits / kBitsPerByte,
3069
- reinterpret_cast<Object**>(object->address()
3070
- + Page::kObjectAreaSize),
3071
- allocation_top);
3072
- PrintF("\n");
3073
- }
3074
- }
3075
- }
3076
2899
  #endif // DEBUG
3077
2900
 
3078
2901
  } } // namespace v8::internal