therubyracer 0.6.3 → 0.7.0.pre

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of therubyracer might be problematic. Click here for more details.

Files changed (520) hide show
  1. data/Rakefile +10 -9
  2. data/ext/v8/callbacks.cpp +15 -8
  3. data/ext/v8/converters.cpp +7 -8
  4. data/ext/v8/converters.h +0 -2
  5. data/ext/v8/extconf.rb +2 -0
  6. data/ext/v8/rr.cpp +169 -0
  7. data/ext/v8/rr.h +34 -0
  8. data/ext/v8/upstream/{2.0.6 → 2.1.10}/AUTHORS +8 -1
  9. data/ext/v8/upstream/{2.0.6 → 2.1.10}/ChangeLog +198 -0
  10. data/ext/v8/upstream/{2.0.6 → 2.1.10}/LICENSE +0 -0
  11. data/ext/v8/upstream/{2.0.6 → 2.1.10}/SConstruct +152 -38
  12. data/ext/v8/upstream/{2.0.6 → 2.1.10}/include/v8-debug.h +52 -4
  13. data/ext/v8/upstream/2.1.10/include/v8-profiler.h +176 -0
  14. data/ext/v8/upstream/{2.0.6 → 2.1.10}/include/v8.h +227 -48
  15. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/SConscript +60 -10
  16. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/accessors.cc +5 -39
  17. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/accessors.h +0 -0
  18. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/allocation.cc +0 -0
  19. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/allocation.h +0 -0
  20. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/api.cc +477 -57
  21. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/api.h +8 -4
  22. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/apinatives.js +1 -1
  23. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/apiutils.h +0 -0
  24. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arguments.h +5 -6
  25. data/ext/v8/upstream/{2.0.6/src/arm/assembler-thumb2-inl.h → 2.1.10/src/arm/assembler-arm-inl.h} +42 -27
  26. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/assembler-arm.cc +430 -216
  27. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/assembler-arm.h +199 -110
  28. data/ext/v8/upstream/{2.0.6/src/arm/assembler-arm-inl.h → 2.1.10/src/arm/assembler-thumb2-inl.h} +4 -18
  29. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/assembler-thumb2.cc +142 -85
  30. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/assembler-thumb2.h +18 -9
  31. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/builtins-arm.cc +127 -87
  32. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/codegen-arm-inl.h +3 -5
  33. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/codegen-arm.cc +4634 -1427
  34. data/ext/v8/upstream/2.1.10/src/arm/codegen-arm.h +946 -0
  35. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/constants-arm.cc +21 -3
  36. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/constants-arm.h +39 -13
  37. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/cpu-arm.cc +9 -3
  38. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/debug-arm.cc +34 -8
  39. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/disasm-arm.cc +262 -117
  40. data/ext/v8/upstream/2.1.10/src/arm/fast-codegen-arm.cc +238 -0
  41. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/frames-arm.cc +0 -0
  42. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/frames-arm.h +0 -0
  43. data/ext/v8/upstream/{2.0.6/src/arm/fast-codegen-arm.cc → 2.1.10/src/arm/full-codegen-arm.cc} +453 -283
  44. data/ext/v8/upstream/2.1.10/src/arm/ic-arm.cc +1833 -0
  45. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/jump-target-arm.cc +3 -29
  46. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/macro-assembler-arm.cc +564 -104
  47. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/macro-assembler-arm.h +255 -46
  48. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/regexp-macro-assembler-arm.cc +78 -104
  49. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/regexp-macro-assembler-arm.h +6 -22
  50. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/register-allocator-arm-inl.h +0 -3
  51. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/register-allocator-arm.cc +0 -0
  52. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/register-allocator-arm.h +2 -1
  53. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/simulator-arm.cc +557 -180
  54. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/simulator-arm.h +52 -4
  55. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/stub-cache-arm.cc +904 -240
  56. data/ext/v8/upstream/2.1.10/src/arm/virtual-frame-arm.cc +668 -0
  57. data/ext/v8/upstream/2.1.10/src/arm/virtual-frame-arm.h +503 -0
  58. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/array.js +82 -109
  59. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/assembler.cc +49 -13
  60. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/assembler.h +27 -5
  61. data/ext/v8/upstream/2.1.10/src/ast.cc +1138 -0
  62. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ast.h +354 -53
  63. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/bootstrapper.cc +609 -501
  64. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/bootstrapper.h +27 -8
  65. data/ext/v8/upstream/2.1.10/src/builtins.cc +1512 -0
  66. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/builtins.h +41 -25
  67. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/bytecodes-irregexp.h +0 -0
  68. data/ext/v8/upstream/2.1.10/src/cached-powers.h +119 -0
  69. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/char-predicates-inl.h +0 -0
  70. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/char-predicates.h +0 -0
  71. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/checks.cc +0 -0
  72. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/checks.h +25 -1
  73. data/ext/v8/upstream/2.1.10/src/circular-queue-inl.h +101 -0
  74. data/ext/v8/upstream/2.1.10/src/circular-queue.cc +121 -0
  75. data/ext/v8/upstream/2.1.10/src/circular-queue.h +129 -0
  76. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/code-stubs.cc +23 -8
  77. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/code-stubs.h +16 -4
  78. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/code.h +0 -0
  79. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/codegen-inl.h +6 -34
  80. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/codegen.cc +73 -92
  81. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/codegen.h +164 -68
  82. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/compilation-cache.cc +117 -73
  83. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/compilation-cache.h +18 -17
  84. data/ext/v8/upstream/2.1.10/src/compiler.cc +623 -0
  85. data/ext/v8/upstream/2.1.10/src/compiler.h +299 -0
  86. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/contexts.cc +0 -0
  87. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/contexts.h +8 -11
  88. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/conversions-inl.h +28 -13
  89. data/ext/v8/upstream/2.1.10/src/conversions.cc +1105 -0
  90. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/conversions.h +9 -4
  91. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/counters.cc +0 -0
  92. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/counters.h +1 -1
  93. data/ext/v8/upstream/2.1.10/src/cpu-profiler-inl.h +99 -0
  94. data/ext/v8/upstream/2.1.10/src/cpu-profiler.cc +494 -0
  95. data/ext/v8/upstream/2.1.10/src/cpu-profiler.h +277 -0
  96. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/cpu.h +0 -0
  97. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8-debug.cc +15 -4
  98. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8-debug.h +0 -0
  99. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8-posix.cc +18 -0
  100. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8-readline.cc +2 -2
  101. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8-windows.cc +0 -0
  102. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8.cc +10 -6
  103. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8.h +2 -0
  104. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8.js +43 -38
  105. data/ext/v8/upstream/2.1.10/src/data-flow.cc +755 -0
  106. data/ext/v8/upstream/2.1.10/src/data-flow.h +278 -0
  107. data/ext/v8/upstream/{2.0.6/src/date-delay.js → 2.1.10/src/date.js} +100 -110
  108. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/dateparser-inl.h +11 -2
  109. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/dateparser.cc +24 -26
  110. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/dateparser.h +8 -4
  111. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/debug-agent.cc +3 -1
  112. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/debug-agent.h +0 -0
  113. data/ext/v8/upstream/{2.0.6/src/debug-delay.js → 2.1.10/src/debug-debugger.js} +111 -15
  114. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/debug.cc +156 -96
  115. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/debug.h +53 -5
  116. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/disasm.h +0 -0
  117. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/disassembler.cc +2 -8
  118. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/disassembler.h +0 -0
  119. data/ext/v8/upstream/2.1.10/src/diy-fp.cc +58 -0
  120. data/ext/v8/upstream/2.1.10/src/diy-fp.h +117 -0
  121. data/ext/v8/upstream/2.1.10/src/double.h +169 -0
  122. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/dtoa-config.c +4 -3
  123. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/execution.cc +22 -22
  124. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/execution.h +17 -4
  125. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/factory.cc +70 -46
  126. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/factory.h +27 -17
  127. data/ext/v8/upstream/2.1.10/src/fast-codegen.cc +746 -0
  128. data/ext/v8/upstream/2.1.10/src/fast-codegen.h +161 -0
  129. data/ext/v8/upstream/2.1.10/src/fast-dtoa.cc +512 -0
  130. data/ext/v8/upstream/2.1.10/src/fast-dtoa.h +59 -0
  131. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/flag-definitions.h +32 -11
  132. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/flags.cc +0 -0
  133. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/flags.h +0 -0
  134. data/ext/v8/upstream/2.1.10/src/flow-graph.cc +763 -0
  135. data/ext/v8/upstream/2.1.10/src/flow-graph.h +180 -0
  136. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/frame-element.cc +1 -4
  137. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/frame-element.h +49 -11
  138. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/frames-inl.h +2 -0
  139. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/frames.cc +91 -17
  140. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/frames.h +24 -2
  141. data/ext/v8/upstream/{2.0.6/src/fast-codegen.cc → 2.1.10/src/full-codegen.cc} +549 -198
  142. data/ext/v8/upstream/{2.0.6/src/fast-codegen.h → 2.1.10/src/full-codegen.h} +109 -29
  143. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/func-name-inferrer.cc +0 -0
  144. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/func-name-inferrer.h +0 -0
  145. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/global-handles.cc +0 -0
  146. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/global-handles.h +0 -0
  147. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/globals.h +67 -43
  148. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/handles-inl.h +0 -0
  149. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/handles.cc +124 -129
  150. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/handles.h +33 -15
  151. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/hashmap.cc +0 -0
  152. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/hashmap.h +0 -0
  153. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/heap-inl.h +56 -12
  154. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/heap-profiler.cc +2 -2
  155. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/heap-profiler.h +2 -0
  156. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/heap.cc +413 -221
  157. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/heap.h +192 -67
  158. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/assembler-ia32-inl.h +6 -0
  159. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/assembler-ia32.cc +187 -32
  160. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/assembler-ia32.h +31 -4
  161. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/builtins-ia32.cc +160 -133
  162. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/codegen-ia32-inl.h +0 -0
  163. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/codegen-ia32.cc +5533 -2177
  164. data/ext/v8/upstream/{2.0.6/src/x64/codegen-x64.h → 2.1.10/src/ia32/codegen-ia32.h} +453 -134
  165. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/cpu-ia32.cc +0 -0
  166. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/debug-ia32.cc +63 -8
  167. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/disasm-ia32.cc +99 -16
  168. data/ext/v8/upstream/2.1.10/src/ia32/fast-codegen-ia32.cc +950 -0
  169. data/ext/v8/upstream/2.1.10/src/ia32/fast-codegen-ia32.h +155 -0
  170. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/frames-ia32.cc +0 -0
  171. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/frames-ia32.h +0 -0
  172. data/ext/v8/upstream/{2.0.6/src/ia32/fast-codegen-ia32.cc → 2.1.10/src/ia32/full-codegen-ia32.cc} +454 -253
  173. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/ic-ia32.cc +545 -390
  174. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/jump-target-ia32.cc +1 -0
  175. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/macro-assembler-ia32.cc +330 -139
  176. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/macro-assembler-ia32.h +96 -30
  177. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/regexp-macro-assembler-ia32.cc +73 -89
  178. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/regexp-macro-assembler-ia32.h +6 -21
  179. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/register-allocator-ia32-inl.h +0 -0
  180. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/register-allocator-ia32.cc +59 -5
  181. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/register-allocator-ia32.h +0 -0
  182. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/simulator-ia32.cc +0 -0
  183. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/simulator-ia32.h +2 -2
  184. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/stub-cache-ia32.cc +745 -303
  185. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/virtual-frame-ia32.cc +278 -71
  186. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/virtual-frame-ia32.h +78 -22
  187. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ic-inl.h +0 -0
  188. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ic.cc +172 -89
  189. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ic.h +51 -20
  190. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/interpreter-irregexp.cc +0 -0
  191. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/interpreter-irregexp.h +0 -0
  192. data/ext/v8/upstream/{2.0.6/src/json-delay.js → 2.1.10/src/json.js} +26 -12
  193. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/jsregexp.cc +151 -118
  194. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/jsregexp.h +31 -7
  195. data/ext/v8/upstream/2.1.10/src/jump-target-heavy-inl.h +51 -0
  196. data/ext/v8/upstream/{2.0.6/src/jump-target.cc → 2.1.10/src/jump-target-heavy.cc} +164 -184
  197. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/jump-target-inl.h +8 -9
  198. data/ext/v8/upstream/{2.0.6/src/usage-analyzer.h → 2.1.10/src/jump-target-light-inl.h} +9 -7
  199. data/ext/v8/upstream/2.1.10/src/jump-target-light.cc +86 -0
  200. data/ext/v8/upstream/2.1.10/src/jump-target.cc +155 -0
  201. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/jump-target.h +6 -0
  202. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/list-inl.h +0 -0
  203. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/list.h +2 -1
  204. data/ext/v8/upstream/2.1.10/src/liveedit-debugger.js +944 -0
  205. data/ext/v8/upstream/2.1.10/src/liveedit.cc +1468 -0
  206. data/ext/v8/upstream/2.1.10/src/liveedit.h +170 -0
  207. data/ext/v8/upstream/2.1.10/src/log-inl.h +59 -0
  208. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/log-utils.cc +3 -9
  209. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/log-utils.h +1 -4
  210. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/log.cc +198 -95
  211. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/log.h +50 -49
  212. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/macro-assembler.h +9 -0
  213. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/macros.py +30 -11
  214. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/mark-compact.cc +464 -152
  215. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/mark-compact.h +41 -20
  216. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/math.js +9 -8
  217. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/memory.h +0 -0
  218. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/messages.cc +1 -0
  219. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/messages.h +0 -0
  220. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/messages.js +46 -9
  221. data/ext/v8/upstream/2.1.10/src/mips/assembler-mips-inl.h +215 -0
  222. data/ext/v8/upstream/2.1.10/src/mips/assembler-mips.cc +1208 -0
  223. data/ext/v8/upstream/2.1.10/src/mips/assembler-mips.h +665 -0
  224. data/ext/v8/upstream/2.1.10/src/mips/builtins-mips.cc +202 -0
  225. data/ext/v8/upstream/2.1.10/src/mips/codegen-mips-inl.h +70 -0
  226. data/ext/v8/upstream/2.1.10/src/mips/codegen-mips.cc +1428 -0
  227. data/ext/v8/upstream/{2.0.6/src/arm/codegen-arm.h → 2.1.10/src/mips/codegen-mips.h} +103 -205
  228. data/ext/v8/upstream/2.1.10/src/mips/constants-mips.cc +323 -0
  229. data/ext/v8/upstream/2.1.10/src/mips/constants-mips.h +525 -0
  230. data/ext/v8/upstream/2.1.10/src/mips/cpu-mips.cc +69 -0
  231. data/ext/v8/upstream/2.1.10/src/mips/debug-mips.cc +128 -0
  232. data/ext/v8/upstream/2.1.10/src/mips/disasm-mips.cc +784 -0
  233. data/ext/v8/upstream/2.1.10/src/mips/fast-codegen-mips.cc +74 -0
  234. data/ext/v8/upstream/2.1.10/src/mips/frames-mips.cc +99 -0
  235. data/ext/v8/upstream/2.1.10/src/mips/frames-mips.h +164 -0
  236. data/ext/v8/upstream/2.1.10/src/mips/full-codegen-mips.cc +273 -0
  237. data/ext/v8/upstream/2.1.10/src/mips/ic-mips.cc +217 -0
  238. data/ext/v8/upstream/2.1.10/src/mips/jump-target-mips.cc +172 -0
  239. data/ext/v8/upstream/2.1.10/src/mips/macro-assembler-mips.cc +1323 -0
  240. data/ext/v8/upstream/2.1.10/src/mips/macro-assembler-mips.h +461 -0
  241. data/ext/v8/upstream/2.1.10/src/mips/register-allocator-mips-inl.h +137 -0
  242. data/ext/v8/upstream/2.1.10/src/mips/register-allocator-mips.cc +60 -0
  243. data/ext/v8/upstream/2.1.10/src/mips/register-allocator-mips.h +46 -0
  244. data/ext/v8/upstream/2.1.10/src/mips/simulator-mips.cc +1648 -0
  245. data/ext/v8/upstream/2.1.10/src/mips/simulator-mips.h +311 -0
  246. data/ext/v8/upstream/2.1.10/src/mips/stub-cache-mips.cc +400 -0
  247. data/ext/v8/upstream/2.1.10/src/mips/virtual-frame-mips.cc +316 -0
  248. data/ext/v8/upstream/{2.0.6/src/arm/virtual-frame-arm.h → 2.1.10/src/mips/virtual-frame-mips.h} +87 -71
  249. data/ext/v8/upstream/{2.0.6/src/mirror-delay.js → 2.1.10/src/mirror-debugger.js} +51 -45
  250. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/mksnapshot.cc +97 -10
  251. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/natives.h +6 -6
  252. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/objects-debug.cc +47 -5
  253. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/objects-inl.h +154 -38
  254. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/objects.cc +528 -280
  255. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/objects.h +302 -95
  256. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/oprofile-agent.cc +25 -33
  257. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/oprofile-agent.h +9 -1
  258. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/parser.cc +444 -72
  259. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/parser.h +4 -2
  260. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-freebsd.cc +32 -13
  261. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-linux.cc +59 -25
  262. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-macos.cc +30 -13
  263. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-nullos.cc +0 -0
  264. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-openbsd.cc +21 -2
  265. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-posix.cc +0 -18
  266. data/ext/v8/upstream/2.1.10/src/platform-solaris.cc +607 -0
  267. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-win32.cc +16 -17
  268. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform.h +25 -8
  269. data/ext/v8/upstream/2.1.10/src/powers-ten.h +2461 -0
  270. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/prettyprinter.cc +49 -29
  271. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/prettyprinter.h +3 -1
  272. data/ext/v8/upstream/2.1.10/src/profile-generator-inl.h +124 -0
  273. data/ext/v8/upstream/2.1.10/src/profile-generator.cc +583 -0
  274. data/ext/v8/upstream/2.1.10/src/profile-generator.h +364 -0
  275. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/property.cc +1 -1
  276. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/property.h +12 -24
  277. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler-irregexp-inl.h +2 -2
  278. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler-irregexp.cc +2 -2
  279. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler-irregexp.h +2 -2
  280. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler-tracer.cc +2 -2
  281. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler-tracer.h +0 -0
  282. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler.cc +33 -10
  283. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler.h +12 -4
  284. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-stack.cc +0 -0
  285. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-stack.h +0 -0
  286. data/ext/v8/upstream/{2.0.6/src/regexp-delay.js → 2.1.10/src/regexp.js} +180 -58
  287. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/register-allocator-inl.h +68 -1
  288. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/register-allocator.cc +5 -2
  289. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/register-allocator.h +42 -17
  290. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/rewriter.cc +110 -4
  291. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/rewriter.h +0 -0
  292. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/runtime.cc +2733 -623
  293. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/runtime.h +43 -20
  294. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/runtime.js +46 -35
  295. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scanner.cc +278 -36
  296. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scanner.h +97 -26
  297. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scopeinfo.cc +3 -3
  298. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scopeinfo.h +1 -0
  299. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scopes.cc +11 -12
  300. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scopes.h +0 -1
  301. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/serialize.cc +298 -175
  302. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/serialize.h +184 -40
  303. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/shell.h +0 -0
  304. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/simulator.h +2 -0
  305. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/smart-pointer.h +0 -0
  306. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/snapshot-common.cc +16 -31
  307. data/ext/v8/upstream/2.1.10/src/snapshot-empty.cc +50 -0
  308. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/snapshot.h +13 -1
  309. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/spaces-inl.h +35 -27
  310. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/spaces.cc +256 -42
  311. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/spaces.h +136 -42
  312. data/ext/v8/upstream/{2.0.6/src/zone-inl.h → 2.1.10/src/splay-tree-inl.h} +102 -89
  313. data/ext/v8/upstream/2.1.10/src/splay-tree.h +203 -0
  314. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/string-stream.cc +0 -0
  315. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/string-stream.h +0 -0
  316. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/string.js +260 -149
  317. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/stub-cache.cc +195 -69
  318. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/stub-cache.h +127 -12
  319. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/third_party/dtoa/COPYING +0 -0
  320. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/third_party/dtoa/dtoa.c +0 -0
  321. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/third_party/valgrind/valgrind.h +0 -0
  322. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/token.cc +0 -0
  323. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/token.h +0 -0
  324. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/top.cc +26 -31
  325. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/top.h +3 -4
  326. data/ext/v8/upstream/2.1.10/src/type-info.cc +53 -0
  327. data/ext/v8/upstream/2.1.10/src/type-info.h +244 -0
  328. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/unicode-inl.h +0 -0
  329. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/unicode.cc +0 -0
  330. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/unicode.h +0 -0
  331. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/uri.js +6 -6
  332. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/utils.cc +0 -37
  333. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/utils.h +121 -50
  334. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8-counters.cc +0 -0
  335. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8-counters.h +130 -98
  336. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8.cc +42 -11
  337. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8.h +4 -2
  338. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8natives.js +202 -37
  339. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8threads.cc +11 -0
  340. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8threads.h +15 -0
  341. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/variables.cc +7 -51
  342. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/variables.h +5 -35
  343. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/version.cc +3 -3
  344. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/version.h +0 -0
  345. data/ext/v8/upstream/2.1.10/src/virtual-frame-heavy-inl.h +152 -0
  346. data/ext/v8/upstream/{2.0.6/src/virtual-frame.cc → 2.1.10/src/virtual-frame-heavy.cc} +107 -176
  347. data/ext/v8/upstream/2.1.10/src/virtual-frame-inl.h +39 -0
  348. data/ext/v8/upstream/2.1.10/src/virtual-frame-light-inl.h +69 -0
  349. data/ext/v8/upstream/2.1.10/src/virtual-frame-light.cc +49 -0
  350. data/ext/v8/upstream/2.1.10/src/virtual-frame.cc +49 -0
  351. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/virtual-frame.h +2 -0
  352. data/ext/v8/upstream/{2.0.6/src/log-inl.h → 2.1.10/src/vm-state-inl.h} +28 -20
  353. data/ext/v8/upstream/{2.0.6/src/snapshot-empty.cc → 2.1.10/src/vm-state.cc} +5 -6
  354. data/ext/v8/upstream/2.1.10/src/vm-state.h +75 -0
  355. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/assembler-x64-inl.h +11 -0
  356. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/assembler-x64.cc +285 -93
  357. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/assembler-x64.h +81 -78
  358. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/builtins-x64.cc +130 -87
  359. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/codegen-x64-inl.h +0 -0
  360. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/codegen-x64.cc +4520 -1317
  361. data/ext/v8/upstream/{2.0.6/src/ia32/codegen-ia32.h → 2.1.10/src/x64/codegen-x64.h} +362 -141
  362. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/cpu-x64.cc +0 -0
  363. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/debug-x64.cc +20 -4
  364. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/disasm-x64.cc +121 -44
  365. data/ext/v8/upstream/2.1.10/src/x64/fast-codegen-x64.cc +246 -0
  366. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/frames-x64.cc +0 -0
  367. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/frames-x64.h +0 -0
  368. data/ext/v8/upstream/{2.0.6/src/x64/fast-codegen-x64.cc → 2.1.10/src/x64/full-codegen-x64.cc} +404 -231
  369. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/ic-x64.cc +346 -117
  370. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/jump-target-x64.cc +1 -0
  371. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/macro-assembler-x64.cc +537 -181
  372. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/macro-assembler-x64.h +140 -34
  373. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/regexp-macro-assembler-x64.cc +74 -96
  374. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/regexp-macro-assembler-x64.h +8 -25
  375. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/register-allocator-x64-inl.h +1 -1
  376. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/register-allocator-x64.cc +3 -0
  377. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/register-allocator-x64.h +0 -0
  378. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/simulator-x64.cc +0 -0
  379. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/simulator-x64.h +2 -2
  380. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/stub-cache-x64.cc +785 -288
  381. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/virtual-frame-x64.cc +128 -52
  382. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/virtual-frame-x64.h +40 -19
  383. data/ext/v8/upstream/2.1.10/src/zone-inl.h +82 -0
  384. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/zone.cc +1 -0
  385. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/zone.h +6 -90
  386. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/codemap.js +12 -0
  387. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/consarray.js +0 -0
  388. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/csvparser.js +22 -37
  389. data/ext/v8/upstream/2.1.10/tools/generate-ten-powers.scm +286 -0
  390. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/gyp/v8.gyp +86 -24
  391. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/js2c.py +22 -22
  392. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/jsmin.py +0 -0
  393. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/linux-tick-processor +10 -1
  394. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/linux-tick-processor.py +0 -0
  395. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/logreader.js +34 -16
  396. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/mac-nm +0 -0
  397. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/mac-tick-processor +0 -0
  398. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/annotate +0 -0
  399. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/common +0 -0
  400. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/dump +0 -0
  401. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/report +0 -0
  402. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/reset +0 -0
  403. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/run +0 -0
  404. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/shutdown +0 -0
  405. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/start +0 -0
  406. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/presubmit.py +0 -0
  407. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/process-heap-prof.py +0 -0
  408. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/profile.js +70 -0
  409. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/profile_view.js +0 -0
  410. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/run-valgrind.py +0 -0
  411. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/splaytree.js +0 -0
  412. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/splaytree.py +0 -0
  413. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/stats-viewer.py +0 -0
  414. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/test.py +7 -7
  415. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/tickprocessor-driver.js +7 -1
  416. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/tickprocessor.js +140 -9
  417. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/tickprocessor.py +40 -4
  418. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/utils.py +6 -0
  419. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/README.txt +0 -0
  420. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/arm.vsprops +1 -1
  421. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/common.vsprops +1 -2
  422. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/d8.vcproj +0 -6
  423. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/d8_arm.vcproj +193 -199
  424. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/d8_x64.vcproj +16 -8
  425. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/d8js2c.cmd +0 -0
  426. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/debug.vsprops +0 -0
  427. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/ia32.vsprops +5 -1
  428. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/js2c.cmd +1 -1
  429. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/release.vsprops +0 -0
  430. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8.sln +0 -0
  431. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8.vcproj +11 -7
  432. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_arm.sln +0 -0
  433. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_arm.vcproj +227 -223
  434. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_base.vcproj +137 -5
  435. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_base_arm.vcproj +116 -4
  436. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_base_x64.vcproj +125 -4
  437. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_cctest.vcproj +12 -6
  438. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_cctest_arm.vcproj +12 -6
  439. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_cctest_x64.vcproj +11 -11
  440. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_mksnapshot.vcproj +0 -6
  441. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_mksnapshot_x64.vcproj +0 -6
  442. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_process_sample.vcproj +0 -6
  443. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_process_sample_arm.vcproj +145 -151
  444. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_process_sample_x64.vcproj +16 -6
  445. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_shell_sample.vcproj +0 -6
  446. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_shell_sample_arm.vcproj +145 -151
  447. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_shell_sample_x64.vcproj +16 -8
  448. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_snapshot.vcproj +0 -0
  449. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_snapshot_cc.vcproj +0 -0
  450. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_snapshot_cc_x64.vcproj +0 -0
  451. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_snapshot_x64.vcproj +0 -0
  452. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_x64.sln +0 -0
  453. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_x64.vcproj +11 -7
  454. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/x64.vsprops +5 -1
  455. data/ext/v8/upstream/2.1.10/tools/windows-tick-processor.bat +29 -0
  456. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/windows-tick-processor.py +0 -0
  457. data/ext/v8/upstream/Makefile +8 -2
  458. data/ext/v8/v8.cpp +21 -73
  459. data/ext/v8/v8_array.cpp +56 -0
  460. data/ext/v8/v8_array.h +8 -0
  461. data/ext/v8/v8_callbacks.cpp +121 -0
  462. data/ext/v8/v8_callbacks.h +8 -0
  463. data/ext/v8/v8_cxt.cpp +74 -77
  464. data/ext/v8/v8_cxt.h +2 -9
  465. data/ext/v8/v8_date.cpp +26 -0
  466. data/ext/v8/v8_date.h +6 -0
  467. data/ext/v8/v8_exception.cpp +55 -0
  468. data/ext/v8/v8_exception.h +6 -0
  469. data/ext/v8/v8_external.cpp +50 -0
  470. data/ext/v8/v8_external.h +8 -0
  471. data/ext/v8/v8_func.cpp +76 -18
  472. data/ext/v8/v8_func.h +5 -4
  473. data/ext/v8/v8_msg.cpp +55 -46
  474. data/ext/v8/v8_msg.h +3 -11
  475. data/ext/v8/v8_obj.cpp +67 -36
  476. data/ext/v8/v8_obj.h +6 -8
  477. data/ext/v8/v8_ref.cpp +25 -9
  478. data/ext/v8/v8_ref.h +3 -5
  479. data/ext/v8/v8_script.cpp +17 -10
  480. data/ext/v8/v8_script.h +3 -3
  481. data/ext/v8/v8_str.cpp +34 -6
  482. data/ext/v8/v8_str.h +4 -2
  483. data/ext/v8/v8_template.cpp +195 -33
  484. data/ext/v8/v8_template.h +4 -5
  485. data/ext/v8/v8_try_catch.cpp +99 -0
  486. data/ext/v8/v8_try_catch.h +5 -0
  487. data/ext/v8/v8_value.cpp +164 -0
  488. data/ext/v8/v8_value.h +10 -0
  489. data/lib/v8.rb +3 -1
  490. data/lib/v8/access.rb +60 -0
  491. data/lib/v8/array.rb +15 -0
  492. data/lib/v8/callbacks.rb +88 -0
  493. data/lib/v8/cli.rb +1 -1
  494. data/lib/v8/context.rb +55 -66
  495. data/lib/v8/function.rb +20 -2
  496. data/lib/v8/object.rb +14 -12
  497. data/lib/v8/ruby_error.rb +3 -0
  498. data/lib/v8/to.rb +59 -7
  499. data/spec/ext/cxt_spec.rb +2 -15
  500. data/spec/ext/func_spec.rb +17 -10
  501. data/spec/ext/try_catch_spec.rb +32 -0
  502. data/spec/foo.rb +17 -0
  503. data/spec/redjs/jsapi_spec.rb +173 -96
  504. data/spec/spec_helper.rb +7 -0
  505. data/spec/v8/to_spec.rb +0 -1
  506. data/therubyracer.gemspec +6 -6
  507. metadata +493 -386
  508. data/ext/v8/upstream/2.0.6/src/arm/ic-arm.cc +0 -849
  509. data/ext/v8/upstream/2.0.6/src/arm/virtual-frame-arm.cc +0 -412
  510. data/ext/v8/upstream/2.0.6/src/ast.cc +0 -512
  511. data/ext/v8/upstream/2.0.6/src/builtins.cc +0 -851
  512. data/ext/v8/upstream/2.0.6/src/compiler.cc +0 -1132
  513. data/ext/v8/upstream/2.0.6/src/compiler.h +0 -107
  514. data/ext/v8/upstream/2.0.6/src/conversions.cc +0 -709
  515. data/ext/v8/upstream/2.0.6/src/usage-analyzer.cc +0 -426
  516. data/ext/v8/upstream/2.0.6/tools/windows-tick-processor.bat +0 -5
  517. data/ext/v8/upstream/no-strict-aliasing.patch +0 -13
  518. data/ext/v8/v8_standalone.cpp +0 -69
  519. data/ext/v8/v8_standalone.h +0 -31
  520. data/spec/ext/obj_spec.rb +0 -13
@@ -38,6 +38,9 @@ class Snapshot {
38
38
  // could be found.
39
39
  static bool Initialize(const char* snapshot_file = NULL);
40
40
 
41
+ // Create a new context using the internal partial snapshot.
42
+ static Handle<Context> NewContextFromSnapshot();
43
+
41
44
  // Returns whether or not the snapshot is enabled.
42
45
  static bool IsEnabled() { return size_ != 0; }
43
46
 
@@ -47,7 +50,16 @@ class Snapshot {
47
50
 
48
51
  private:
49
52
  static const byte data_[];
50
- static int size_;
53
+ static const byte context_data_[];
54
+ static const int new_space_used_;
55
+ static const int pointer_space_used_;
56
+ static const int data_space_used_;
57
+ static const int code_space_used_;
58
+ static const int map_space_used_;
59
+ static const int cell_space_used_;
60
+ static const int large_space_used_;
61
+ static const int size_;
62
+ static const int context_size_;
51
63
 
52
64
  static bool Deserialize(const byte* content, int len);
53
65
 
@@ -35,32 +35,6 @@ namespace v8 {
35
35
  namespace internal {
36
36
 
37
37
 
38
- // -----------------------------------------------------------------------------
39
- // HeapObjectIterator
40
-
41
- bool HeapObjectIterator::has_next() {
42
- if (cur_addr_ < cur_limit_) {
43
- return true; // common case
44
- }
45
- ASSERT(cur_addr_ == cur_limit_);
46
- return HasNextInNextPage(); // slow path
47
- }
48
-
49
-
50
- HeapObject* HeapObjectIterator::next() {
51
- ASSERT(has_next());
52
-
53
- HeapObject* obj = HeapObject::FromAddress(cur_addr_);
54
- int obj_size = (size_func_ == NULL) ? obj->Size() : size_func_(obj);
55
- ASSERT_OBJECT_SIZE(obj_size);
56
-
57
- cur_addr_ += obj_size;
58
- ASSERT(cur_addr_ <= cur_limit_);
59
-
60
- return obj;
61
- }
62
-
63
-
64
38
  // -----------------------------------------------------------------------------
65
39
  // PageIterator
66
40
 
@@ -171,6 +145,40 @@ bool Page::IsRSetSet(Address address, int offset) {
171
145
  }
172
146
 
173
147
 
148
+ bool Page::GetPageFlag(PageFlag flag) {
149
+ return (flags & flag) != 0;
150
+ }
151
+
152
+
153
+ void Page::SetPageFlag(PageFlag flag, bool value) {
154
+ if (value) {
155
+ flags |= flag;
156
+ } else {
157
+ flags &= ~flag;
158
+ }
159
+ }
160
+
161
+
162
+ bool Page::WasInUseBeforeMC() {
163
+ return GetPageFlag(WAS_IN_USE_BEFORE_MC);
164
+ }
165
+
166
+
167
+ void Page::SetWasInUseBeforeMC(bool was_in_use) {
168
+ SetPageFlag(WAS_IN_USE_BEFORE_MC, was_in_use);
169
+ }
170
+
171
+
172
+ bool Page::IsLargeObjectPage() {
173
+ return !GetPageFlag(IS_NORMAL_PAGE);
174
+ }
175
+
176
+
177
+ void Page::SetIsLargeObjectPage(bool is_large_object_page) {
178
+ SetPageFlag(IS_NORMAL_PAGE, !is_large_object_page);
179
+ }
180
+
181
+
174
182
  // -----------------------------------------------------------------------------
175
183
  // MemoryAllocator
176
184
 
@@ -209,7 +217,7 @@ Page* MemoryAllocator::GetNextPage(Page* p) {
209
217
 
210
218
  int MemoryAllocator::GetChunkId(Page* p) {
211
219
  ASSERT(p->is_valid());
212
- return p->opaque_header & Page::kPageAlignmentMask;
220
+ return static_cast<int>(p->opaque_header & Page::kPageAlignmentMask);
213
221
  }
214
222
 
215
223
 
@@ -82,8 +82,8 @@ void HeapObjectIterator::Initialize(Address cur, Address end,
82
82
  }
83
83
 
84
84
 
85
- bool HeapObjectIterator::HasNextInNextPage() {
86
- if (cur_addr_ == end_addr_) return false;
85
+ HeapObject* HeapObjectIterator::FromNextPage() {
86
+ if (cur_addr_ == end_addr_) return NULL;
87
87
 
88
88
  Page* cur_page = Page::FromAllocationTop(cur_addr_);
89
89
  cur_page = cur_page->next_page();
@@ -92,12 +92,12 @@ bool HeapObjectIterator::HasNextInNextPage() {
92
92
  cur_addr_ = cur_page->ObjectAreaStart();
93
93
  cur_limit_ = (cur_page == end_page_) ? end_addr_ : cur_page->AllocationTop();
94
94
 
95
- if (cur_addr_ == end_addr_) return false;
95
+ if (cur_addr_ == end_addr_) return NULL;
96
96
  ASSERT(cur_addr_ < cur_limit_);
97
97
  #ifdef DEBUG
98
98
  Verify();
99
99
  #endif
100
- return true;
100
+ return FromCurrentPage();
101
101
  }
102
102
 
103
103
 
@@ -357,12 +357,18 @@ void* MemoryAllocator::AllocateRawMemory(const size_t requested,
357
357
  }
358
358
  int alloced = static_cast<int>(*allocated);
359
359
  size_ += alloced;
360
+ #ifdef DEBUG
361
+ ZapBlock(reinterpret_cast<Address>(mem), alloced);
362
+ #endif
360
363
  Counters::memory_allocated.Increment(alloced);
361
364
  return mem;
362
365
  }
363
366
 
364
367
 
365
368
  void MemoryAllocator::FreeRawMemory(void* mem, size_t length) {
369
+ #ifdef DEBUG
370
+ ZapBlock(reinterpret_cast<Address>(mem), length);
371
+ #endif
366
372
  if (CodeRange::contains(static_cast<Address>(mem))) {
367
373
  CodeRange::FreeRawMemory(mem, length);
368
374
  } else {
@@ -446,6 +452,9 @@ Page* MemoryAllocator::CommitPages(Address start, size_t size,
446
452
  if (!initial_chunk_->Commit(start, size, owner->executable() == EXECUTABLE)) {
447
453
  return Page::FromAddress(NULL);
448
454
  }
455
+ #ifdef DEBUG
456
+ ZapBlock(start, size);
457
+ #endif
449
458
  Counters::memory_allocated.Increment(static_cast<int>(size));
450
459
 
451
460
  // So long as we correctly overestimated the number of chunks we should not
@@ -467,10 +476,14 @@ bool MemoryAllocator::CommitBlock(Address start,
467
476
  ASSERT(InInitialChunk(start + size - 1));
468
477
 
469
478
  if (!initial_chunk_->Commit(start, size, executable)) return false;
479
+ #ifdef DEBUG
480
+ ZapBlock(start, size);
481
+ #endif
470
482
  Counters::memory_allocated.Increment(static_cast<int>(size));
471
483
  return true;
472
484
  }
473
485
 
486
+
474
487
  bool MemoryAllocator::UncommitBlock(Address start, size_t size) {
475
488
  ASSERT(start != NULL);
476
489
  ASSERT(size > 0);
@@ -483,6 +496,14 @@ bool MemoryAllocator::UncommitBlock(Address start, size_t size) {
483
496
  return true;
484
497
  }
485
498
 
499
+
500
+ void MemoryAllocator::ZapBlock(Address start, size_t size) {
501
+ for (size_t s = 0; s + kPointerSize <= size; s += kPointerSize) {
502
+ Memory::Address_at(start + s) = kZapValue;
503
+ }
504
+ }
505
+
506
+
486
507
  Page* MemoryAllocator::InitializePagesInChunk(int chunk_id, int pages_in_chunk,
487
508
  PagedSpace* owner) {
488
509
  ASSERT(IsValidChunk(chunk_id));
@@ -503,7 +524,7 @@ Page* MemoryAllocator::InitializePagesInChunk(int chunk_id, int pages_in_chunk,
503
524
  for (int i = 0; i < pages_in_chunk; i++) {
504
525
  Page* p = Page::FromAddress(page_addr);
505
526
  p->opaque_header = OffsetFrom(page_addr + Page::kPageSize) | chunk_id;
506
- p->is_normal_page = 1;
527
+ p->SetIsLargeObjectPage(false);
507
528
  page_addr += Page::kPageSize;
508
529
  }
509
530
 
@@ -547,6 +568,15 @@ Page* MemoryAllocator::FreePages(Page* p) {
547
568
  }
548
569
 
549
570
 
571
+ void MemoryAllocator::FreeAllPages(PagedSpace* space) {
572
+ for (int i = 0, length = chunks_.length(); i < length; i++) {
573
+ if (chunks_[i].owner() == space) {
574
+ DeleteChunk(i);
575
+ }
576
+ }
577
+ }
578
+
579
+
550
580
  void MemoryAllocator::DeleteChunk(int chunk_id) {
551
581
  ASSERT(IsValidChunk(chunk_id));
552
582
 
@@ -601,6 +631,74 @@ void MemoryAllocator::ReportStatistics() {
601
631
  #endif
602
632
 
603
633
 
634
+ void MemoryAllocator::RelinkPageListInChunkOrder(PagedSpace* space,
635
+ Page** first_page,
636
+ Page** last_page,
637
+ Page** last_page_in_use) {
638
+ Page* first = NULL;
639
+ Page* last = NULL;
640
+
641
+ for (int i = 0, length = chunks_.length(); i < length; i++) {
642
+ ChunkInfo& chunk = chunks_[i];
643
+
644
+ if (chunk.owner() == space) {
645
+ if (first == NULL) {
646
+ Address low = RoundUp(chunk.address(), Page::kPageSize);
647
+ first = Page::FromAddress(low);
648
+ }
649
+ last = RelinkPagesInChunk(i,
650
+ chunk.address(),
651
+ chunk.size(),
652
+ last,
653
+ last_page_in_use);
654
+ }
655
+ }
656
+
657
+ if (first_page != NULL) {
658
+ *first_page = first;
659
+ }
660
+
661
+ if (last_page != NULL) {
662
+ *last_page = last;
663
+ }
664
+ }
665
+
666
+
667
+ Page* MemoryAllocator::RelinkPagesInChunk(int chunk_id,
668
+ Address chunk_start,
669
+ size_t chunk_size,
670
+ Page* prev,
671
+ Page** last_page_in_use) {
672
+ Address page_addr = RoundUp(chunk_start, Page::kPageSize);
673
+ int pages_in_chunk = PagesInChunk(chunk_start, chunk_size);
674
+
675
+ if (prev->is_valid()) {
676
+ SetNextPage(prev, Page::FromAddress(page_addr));
677
+ }
678
+
679
+ for (int i = 0; i < pages_in_chunk; i++) {
680
+ Page* p = Page::FromAddress(page_addr);
681
+ p->opaque_header = OffsetFrom(page_addr + Page::kPageSize) | chunk_id;
682
+ page_addr += Page::kPageSize;
683
+
684
+ if (p->WasInUseBeforeMC()) {
685
+ *last_page_in_use = p;
686
+ }
687
+ }
688
+
689
+ // Set the next page of the last page to 0.
690
+ Page* last_page = Page::FromAddress(page_addr - Page::kPageSize);
691
+ last_page->opaque_header = OffsetFrom(0) | chunk_id;
692
+
693
+ if (last_page->WasInUseBeforeMC()) {
694
+ *last_page_in_use = last_page;
695
+ }
696
+
697
+ return last_page;
698
+ }
699
+
700
+
701
+
604
702
  // -----------------------------------------------------------------------------
605
703
  // PagedSpace implementation
606
704
 
@@ -656,6 +754,8 @@ bool PagedSpace::Setup(Address start, size_t size) {
656
754
  // Use first_page_ for allocation.
657
755
  SetAllocationInfo(&allocation_info_, first_page_);
658
756
 
757
+ page_list_is_chunk_ordered_ = true;
758
+
659
759
  return true;
660
760
  }
661
761
 
@@ -666,9 +766,8 @@ bool PagedSpace::HasBeenSetup() {
666
766
 
667
767
 
668
768
  void PagedSpace::TearDown() {
669
- first_page_ = MemoryAllocator::FreePages(first_page_);
670
- ASSERT(!first_page_->is_valid());
671
-
769
+ MemoryAllocator::FreeAllPages(this);
770
+ first_page_ = NULL;
672
771
  accounting_stats_.Clear();
673
772
  }
674
773
 
@@ -853,6 +952,12 @@ int PagedSpace::CountTotalPages() {
853
952
 
854
953
 
855
954
  void PagedSpace::Shrink() {
955
+ if (!page_list_is_chunk_ordered_) {
956
+ // We can't shrink space if pages is not chunk-ordered
957
+ // (see comment for class MemoryAllocator for definition).
958
+ return;
959
+ }
960
+
856
961
  // Release half of free pages.
857
962
  Page* top_page = AllocationTopPage();
858
963
  ASSERT(top_page->is_valid());
@@ -934,7 +1039,7 @@ void PagedSpace::Verify(ObjectVisitor* visitor) {
934
1039
  // The next page will be above the allocation top.
935
1040
  above_allocation_top = true;
936
1041
  } else {
937
- ASSERT(top == current_page->ObjectAreaEnd() - page_extra_);
1042
+ ASSERT(top == PageAllocationLimit(current_page));
938
1043
  }
939
1044
 
940
1045
  // It should be packed with objects from the bottom to the top.
@@ -1342,7 +1447,7 @@ static void ClearCodeKindStatistics() {
1342
1447
 
1343
1448
 
1344
1449
  static void ReportCodeKindStatistics() {
1345
- const char* table[Code::NUMBER_OF_KINDS];
1450
+ const char* table[Code::NUMBER_OF_KINDS] = { NULL };
1346
1451
 
1347
1452
  #define CASE(name) \
1348
1453
  case Code::name: table[Code::name] = #name; \
@@ -1358,6 +1463,7 @@ static void ReportCodeKindStatistics() {
1358
1463
  CASE(STORE_IC);
1359
1464
  CASE(KEYED_STORE_IC);
1360
1465
  CASE(CALL_IC);
1466
+ CASE(BINARY_OP_IC);
1361
1467
  }
1362
1468
  }
1363
1469
 
@@ -1392,7 +1498,7 @@ static void ReportHistogram(bool print_spill) {
1392
1498
  PrintF("\n Object Histogram:\n");
1393
1499
  for (int i = 0; i <= LAST_TYPE; i++) {
1394
1500
  if (heap_histograms[i].number() > 0) {
1395
- PrintF(" %-33s%10d (%10d bytes)\n",
1501
+ PrintF(" %-34s%10d (%10d bytes)\n",
1396
1502
  heap_histograms[i].name(),
1397
1503
  heap_histograms[i].number(),
1398
1504
  heap_histograms[i].bytes());
@@ -1409,7 +1515,7 @@ static void ReportHistogram(bool print_spill) {
1409
1515
  STRING_TYPE_LIST(INCREMENT)
1410
1516
  #undef INCREMENT
1411
1517
  if (string_number > 0) {
1412
- PrintF(" %-33s%10d (%10d bytes)\n\n", "STRING_TYPE", string_number,
1518
+ PrintF(" %-34s%10d (%10d bytes)\n\n", "STRING_TYPE", string_number,
1413
1519
  string_bytes);
1414
1520
  }
1415
1521
 
@@ -1437,7 +1543,8 @@ void NewSpace::ClearHistograms() {
1437
1543
  void NewSpace::CollectStatistics() {
1438
1544
  ClearHistograms();
1439
1545
  SemiSpaceIterator it(this);
1440
- while (it.has_next()) RecordAllocation(it.next());
1546
+ for (HeapObject* obj = it.next(); obj != NULL; obj = it.next())
1547
+ RecordAllocation(obj);
1441
1548
  }
1442
1549
 
1443
1550
 
@@ -1477,7 +1584,7 @@ void NewSpace::ReportStatistics() {
1477
1584
  PrintF("\n Object Histogram:\n");
1478
1585
  for (int i = 0; i <= LAST_TYPE; i++) {
1479
1586
  if (allocated_histogram_[i].number() > 0) {
1480
- PrintF(" %-33s%10d (%10d bytes)\n",
1587
+ PrintF(" %-34s%10d (%10d bytes)\n",
1481
1588
  allocated_histogram_[i].name(),
1482
1589
  allocated_histogram_[i].number(),
1483
1590
  allocated_histogram_[i].bytes());
@@ -1598,9 +1705,7 @@ void OldSpaceFreeList::RebuildSizeList() {
1598
1705
 
1599
1706
  int OldSpaceFreeList::Free(Address start, int size_in_bytes) {
1600
1707
  #ifdef DEBUG
1601
- for (int i = 0; i < size_in_bytes; i += kPointerSize) {
1602
- Memory::Address_at(start + i) = kZapValue;
1603
- }
1708
+ MemoryAllocator::ZapBlock(start, size_in_bytes);
1604
1709
  #endif
1605
1710
  FreeListNode* node = FreeListNode::FromAddress(start);
1606
1711
  node->set_size(size_in_bytes);
@@ -1732,9 +1837,7 @@ void FixedSizeFreeList::Reset() {
1732
1837
 
1733
1838
  void FixedSizeFreeList::Free(Address start) {
1734
1839
  #ifdef DEBUG
1735
- for (int i = 0; i < object_size_; i += kPointerSize) {
1736
- Memory::Address_at(start + i) = kZapValue;
1737
- }
1840
+ MemoryAllocator::ZapBlock(start, object_size_);
1738
1841
  #endif
1739
1842
  // We only use the freelists with mark-sweep.
1740
1843
  ASSERT(!MarkCompactCollector::IsCompacting());
@@ -1763,6 +1866,9 @@ Object* FixedSizeFreeList::Allocate() {
1763
1866
  // OldSpace implementation
1764
1867
 
1765
1868
  void OldSpace::PrepareForMarkCompact(bool will_compact) {
1869
+ // Call prepare of the super class.
1870
+ PagedSpace::PrepareForMarkCompact(will_compact);
1871
+
1766
1872
  if (will_compact) {
1767
1873
  // Reset relocation info. During a compacting collection, everything in
1768
1874
  // the space is considered 'available' and we will rediscover live data
@@ -1833,6 +1939,112 @@ bool NewSpace::ReserveSpace(int bytes) {
1833
1939
  }
1834
1940
 
1835
1941
 
1942
+ void PagedSpace::FreePages(Page* prev, Page* last) {
1943
+ if (last == AllocationTopPage()) {
1944
+ // Pages are already at the end of used pages.
1945
+ return;
1946
+ }
1947
+
1948
+ Page* first = NULL;
1949
+
1950
+ // Remove pages from the list.
1951
+ if (prev == NULL) {
1952
+ first = first_page_;
1953
+ first_page_ = last->next_page();
1954
+ } else {
1955
+ first = prev->next_page();
1956
+ MemoryAllocator::SetNextPage(prev, last->next_page());
1957
+ }
1958
+
1959
+ // Attach it after the last page.
1960
+ MemoryAllocator::SetNextPage(last_page_, first);
1961
+ last_page_ = last;
1962
+ MemoryAllocator::SetNextPage(last, NULL);
1963
+
1964
+ // Clean them up.
1965
+ do {
1966
+ first->ClearRSet();
1967
+ first = first->next_page();
1968
+ } while (first != NULL);
1969
+
1970
+ // Order of pages in this space might no longer be consistent with
1971
+ // order of pages in chunks.
1972
+ page_list_is_chunk_ordered_ = false;
1973
+ }
1974
+
1975
+
1976
+ void PagedSpace::PrepareForMarkCompact(bool will_compact) {
1977
+ if (will_compact) {
1978
+ // MarkCompact collector relies on WAS_IN_USE_BEFORE_MC page flag
1979
+ // to skip unused pages. Update flag value for all pages in space.
1980
+ PageIterator all_pages_iterator(this, PageIterator::ALL_PAGES);
1981
+ Page* last_in_use = AllocationTopPage();
1982
+ bool in_use = true;
1983
+
1984
+ while (all_pages_iterator.has_next()) {
1985
+ Page* p = all_pages_iterator.next();
1986
+ p->SetWasInUseBeforeMC(in_use);
1987
+ if (p == last_in_use) {
1988
+ // We passed a page containing allocation top. All consequent
1989
+ // pages are not used.
1990
+ in_use = false;
1991
+ }
1992
+ }
1993
+
1994
+ if (!page_list_is_chunk_ordered_) {
1995
+ Page* new_last_in_use = Page::FromAddress(NULL);
1996
+ MemoryAllocator::RelinkPageListInChunkOrder(this,
1997
+ &first_page_,
1998
+ &last_page_,
1999
+ &new_last_in_use);
2000
+ ASSERT(new_last_in_use->is_valid());
2001
+
2002
+ if (new_last_in_use != last_in_use) {
2003
+ // Current allocation top points to a page which is now in the middle
2004
+ // of page list. We should move allocation top forward to the new last
2005
+ // used page so various object iterators will continue to work properly.
2006
+
2007
+ int size_in_bytes = static_cast<int>(PageAllocationLimit(last_in_use) -
2008
+ last_in_use->AllocationTop());
2009
+
2010
+ if (size_in_bytes > 0) {
2011
+ // There is still some space left on this page. Create a fake
2012
+ // object which will occupy all free space on this page.
2013
+ // Otherwise iterators would not be able to scan this page
2014
+ // correctly.
2015
+
2016
+ Heap::CreateFillerObjectAt(last_in_use->AllocationTop(),
2017
+ size_in_bytes);
2018
+ }
2019
+
2020
+ // New last in use page was in the middle of the list before
2021
+ // sorting so it full.
2022
+ SetTop(new_last_in_use->AllocationTop());
2023
+
2024
+ ASSERT(AllocationTopPage() == new_last_in_use);
2025
+ ASSERT(AllocationTopPage()->WasInUseBeforeMC());
2026
+ }
2027
+
2028
+ PageIterator pages_in_use_iterator(this, PageIterator::PAGES_IN_USE);
2029
+ while (pages_in_use_iterator.has_next()) {
2030
+ Page* p = pages_in_use_iterator.next();
2031
+ if (!p->WasInUseBeforeMC()) {
2032
+ // Empty page is in the middle of a sequence of used pages.
2033
+ // Create a fake object which will occupy all free space on this page.
2034
+ // Otherwise iterators would not be able to scan this page correctly.
2035
+ int size_in_bytes = static_cast<int>(PageAllocationLimit(p) -
2036
+ p->ObjectAreaStart());
2037
+
2038
+ Heap::CreateFillerObjectAt(p->ObjectAreaStart(), size_in_bytes);
2039
+ }
2040
+ }
2041
+
2042
+ page_list_is_chunk_ordered_ = true;
2043
+ }
2044
+ }
2045
+ }
2046
+
2047
+
1836
2048
  bool PagedSpace::ReserveSpace(int bytes) {
1837
2049
  Address limit = allocation_info_.limit;
1838
2050
  Address top = allocation_info_.top;
@@ -2054,8 +2266,7 @@ static void CollectCommentStatistics(RelocIterator* it) {
2054
2266
  // - by code comment
2055
2267
  void PagedSpace::CollectCodeStatistics() {
2056
2268
  HeapObjectIterator obj_it(this);
2057
- while (obj_it.has_next()) {
2058
- HeapObject* obj = obj_it.next();
2269
+ for (HeapObject* obj = obj_it.next(); obj != NULL; obj = obj_it.next()) {
2059
2270
  if (obj->IsCode()) {
2060
2271
  Code* code = Code::cast(obj);
2061
2272
  code_kind_statistics[code->kind()] += code->Size();
@@ -2157,7 +2368,8 @@ void OldSpace::ReportStatistics() {
2157
2368
 
2158
2369
  ClearHistograms();
2159
2370
  HeapObjectIterator obj_it(this);
2160
- while (obj_it.has_next()) { CollectHistogramInfo(obj_it.next()); }
2371
+ for (HeapObject* obj = obj_it.next(); obj != NULL; obj = obj_it.next())
2372
+ CollectHistogramInfo(obj);
2161
2373
  ReportHistogram(true);
2162
2374
  }
2163
2375
 
@@ -2244,6 +2456,9 @@ void OldSpace::PrintRSet() { DoPrintRSet("old"); }
2244
2456
  // FixedSpace implementation
2245
2457
 
2246
2458
  void FixedSpace::PrepareForMarkCompact(bool will_compact) {
2459
+ // Call prepare of the super class.
2460
+ PagedSpace::PrepareForMarkCompact(will_compact);
2461
+
2247
2462
  if (will_compact) {
2248
2463
  // Reset relocation info.
2249
2464
  MCResetRelocationInfo();
@@ -2341,7 +2556,7 @@ HeapObject* FixedSpace::SlowAllocateRaw(int size_in_bytes) {
2341
2556
  HeapObject* FixedSpace::AllocateInNextPage(Page* current_page,
2342
2557
  int size_in_bytes) {
2343
2558
  ASSERT(current_page->next_page()->is_valid());
2344
- ASSERT(current_page->ObjectAreaEnd() - allocation_info_.top == page_extra_);
2559
+ ASSERT(allocation_info_.top == PageAllocationLimit(current_page));
2345
2560
  ASSERT_EQ(object_size_in_bytes_, size_in_bytes);
2346
2561
  accounting_stats_.WasteBytes(page_extra_);
2347
2562
  SetAllocationInfo(&allocation_info_, current_page->next_page());
@@ -2393,7 +2608,8 @@ void FixedSpace::ReportStatistics() {
2393
2608
 
2394
2609
  ClearHistograms();
2395
2610
  HeapObjectIterator obj_it(this);
2396
- while (obj_it.has_next()) { CollectHistogramInfo(obj_it.next()); }
2611
+ for (HeapObject* obj = obj_it.next(); obj != NULL; obj = obj_it.next())
2612
+ CollectHistogramInfo(obj);
2397
2613
  ReportHistogram(false);
2398
2614
  }
2399
2615
 
@@ -2462,7 +2678,8 @@ LargeObjectIterator::LargeObjectIterator(LargeObjectSpace* space,
2462
2678
 
2463
2679
 
2464
2680
  HeapObject* LargeObjectIterator::next() {
2465
- ASSERT(has_next());
2681
+ if (current_ == NULL) return NULL;
2682
+
2466
2683
  HeapObject* object = current_->GetObject();
2467
2684
  current_ = current_->next();
2468
2685
  return object;
@@ -2584,7 +2801,7 @@ Object* LargeObjectSpace::AllocateRawInternal(int requested_size,
2584
2801
  // large object page. If the chunk_size happened to be written there, its
2585
2802
  // low order bit should already be clear.
2586
2803
  ASSERT((chunk_size & 0x1) == 0);
2587
- page->is_normal_page &= ~0x1;
2804
+ page->SetIsLargeObjectPage(true);
2588
2805
  page->ClearRSet();
2589
2806
  int extra_bytes = requested_size - object_size;
2590
2807
  if (extra_bytes > 0) {
@@ -2639,8 +2856,7 @@ void LargeObjectSpace::ClearRSet() {
2639
2856
  ASSERT(Page::is_rset_in_use());
2640
2857
 
2641
2858
  LargeObjectIterator it(this);
2642
- while (it.has_next()) {
2643
- HeapObject* object = it.next();
2859
+ for (HeapObject* object = it.next(); object != NULL; object = it.next()) {
2644
2860
  // We only have code, sequential strings, or fixed arrays in large
2645
2861
  // object space, and only fixed arrays need remembered set support.
2646
2862
  if (object->IsFixedArray()) {
@@ -2668,11 +2884,10 @@ void LargeObjectSpace::IterateRSet(ObjectSlotCallback copy_object_func) {
2668
2884
  30);
2669
2885
 
2670
2886
  LargeObjectIterator it(this);
2671
- while (it.has_next()) {
2887
+ for (HeapObject* object = it.next(); object != NULL; object = it.next()) {
2672
2888
  // We only have code, sequential strings, or fixed arrays in large
2673
2889
  // object space, and only fixed arrays can possibly contain pointers to
2674
2890
  // the young generation.
2675
- HeapObject* object = it.next();
2676
2891
  if (object->IsFixedArray()) {
2677
2892
  // Iterate the normal page remembered set range.
2678
2893
  Page* page = Page::FromAddress(object->address());
@@ -2718,9 +2933,7 @@ void LargeObjectSpace::FreeUnmarkedObjects() {
2718
2933
  }
2719
2934
 
2720
2935
  // Free the chunk.
2721
- if (object->IsCode()) {
2722
- LOG(CodeDeleteEvent(object->address()));
2723
- }
2936
+ MarkCompactCollector::ReportDeleteIfNeeded(object);
2724
2937
  size_ -= static_cast<int>(chunk_size);
2725
2938
  page_count_--;
2726
2939
  MemoryAllocator::FreeRawMemory(chunk_address, chunk_size);
@@ -2732,6 +2945,9 @@ void LargeObjectSpace::FreeUnmarkedObjects() {
2732
2945
 
2733
2946
  bool LargeObjectSpace::Contains(HeapObject* object) {
2734
2947
  Address address = object->address();
2948
+ if (Heap::new_space()->Contains(address)) {
2949
+ return false;
2950
+ }
2735
2951
  Page* page = Page::FromAddress(address);
2736
2952
 
2737
2953
  SLOW_ASSERT(!page->IsLargeObjectPage()
@@ -2800,8 +3016,8 @@ void LargeObjectSpace::Verify() {
2800
3016
 
2801
3017
  void LargeObjectSpace::Print() {
2802
3018
  LargeObjectIterator it(this);
2803
- while (it.has_next()) {
2804
- it.next()->Print();
3019
+ for (HeapObject* obj = it.next(); obj != NULL; obj = it.next()) {
3020
+ obj->Print();
2805
3021
  }
2806
3022
  }
2807
3023
 
@@ -2811,9 +3027,9 @@ void LargeObjectSpace::ReportStatistics() {
2811
3027
  int num_objects = 0;
2812
3028
  ClearHistograms();
2813
3029
  LargeObjectIterator it(this);
2814
- while (it.has_next()) {
3030
+ for (HeapObject* obj = it.next(); obj != NULL; obj = it.next()) {
2815
3031
  num_objects++;
2816
- CollectHistogramInfo(it.next());
3032
+ CollectHistogramInfo(obj);
2817
3033
  }
2818
3034
 
2819
3035
  PrintF(" number of objects %d\n", num_objects);
@@ -2823,8 +3039,7 @@ void LargeObjectSpace::ReportStatistics() {
2823
3039
 
2824
3040
  void LargeObjectSpace::CollectCodeStatistics() {
2825
3041
  LargeObjectIterator obj_it(this);
2826
- while (obj_it.has_next()) {
2827
- HeapObject* obj = obj_it.next();
3042
+ for (HeapObject* obj = obj_it.next(); obj != NULL; obj = obj_it.next()) {
2828
3043
  if (obj->IsCode()) {
2829
3044
  Code* code = Code::cast(obj);
2830
3045
  code_kind_statistics[code->kind()] += code->Size();
@@ -2835,8 +3050,7 @@ void LargeObjectSpace::CollectCodeStatistics() {
2835
3050
 
2836
3051
  void LargeObjectSpace::PrintRSet() {
2837
3052
  LargeObjectIterator it(this);
2838
- while (it.has_next()) {
2839
- HeapObject* object = it.next();
3053
+ for (HeapObject* object = it.next(); object != NULL; object = it.next()) {
2840
3054
  if (object->IsFixedArray()) {
2841
3055
  Page* page = Page::FromAddress(object->address());
2842
3056