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
@@ -37,7 +37,7 @@ namespace internal {
37
37
  // Scope information represents information about a functions's
38
38
  // scopes (currently only one, because we don't do any inlining)
39
39
  // and the allocation of the scope's variables. Scope information
40
- // is stored in a compressed form with Code objects and is used
40
+ // is stored in a compressed form in FixedArray objects and is used
41
41
  // at runtime (stack dumps, deoptimization, etc.).
42
42
  //
43
43
  // Historical note: In other VMs built by this team, ScopeInfo was
@@ -54,23 +54,11 @@ class ScopeInfo BASE_EMBEDDED {
54
54
  // Create a ScopeInfo instance from a scope.
55
55
  explicit ScopeInfo(Scope* scope);
56
56
 
57
- // Create a ScopeInfo instance from a Code object.
58
- explicit ScopeInfo(Code* code);
59
-
60
- // Write the ScopeInfo data into a Code object, and returns the
61
- // amount of space that was needed. If no Code object is provided
62
- // (NULL handle), Serialize() only returns the amount of space needed.
63
- //
64
- // This operations requires that the Code object has the correct amount
65
- // of space for the ScopeInfo data; otherwise the operation fails (fatal
66
- // error). Any existing scope info in the Code object is simply overwritten.
67
- int Serialize(Code* code);
68
-
69
- // Garbage collection support for scope info embedded in Code objects.
70
- // This code is in ScopeInfo because only here we should have to know
71
- // about the encoding.
72
- static void IterateScopeInfo(Code* code, ObjectVisitor* v);
57
+ // Create a ScopeInfo instance from SerializedScopeInfo.
58
+ explicit ScopeInfo(SerializedScopeInfo* data);
73
59
 
60
+ // Creates a SerializedScopeInfo holding the serialized scope info.
61
+ Handle<SerializedScopeInfo> Serialize();
74
62
 
75
63
  // --------------------------------------------------------------------------
76
64
  // Lookup
@@ -95,89 +83,97 @@ class ScopeInfo BASE_EMBEDDED {
95
83
  int NumberOfLocals() const;
96
84
 
97
85
  // --------------------------------------------------------------------------
98
- // The following functions provide quick access to scope info details
99
- // for runtime routines w/o the need to explicitly create a ScopeInfo
100
- // object.
101
- //
102
- // ScopeInfo is the only class which should have to know about the
103
- // encoding of it's information in a Code object, which is why these
104
- // functions are in this class.
86
+ // Debugging support
87
+
88
+ #ifdef DEBUG
89
+ void Print();
90
+ #endif
91
+
92
+ private:
93
+ Handle<String> function_name_;
94
+ bool calls_eval_;
95
+ List<Handle<String>, Allocator > parameters_;
96
+ List<Handle<String>, Allocator > stack_slots_;
97
+ List<Handle<String>, Allocator > context_slots_;
98
+ List<Variable::Mode, Allocator > context_modes_;
99
+ };
100
+
101
+
102
+ // This object provides quick access to scope info details for runtime
103
+ // routines w/o the need to explicitly create a ScopeInfo object.
104
+ class SerializedScopeInfo : public FixedArray {
105
+ public :
106
+
107
+ static SerializedScopeInfo* cast(Object* object) {
108
+ ASSERT(object->IsFixedArray());
109
+ return reinterpret_cast<SerializedScopeInfo*>(object);
110
+ }
105
111
 
106
112
  // Does this scope call eval.
107
- static bool CallsEval(Code* code);
113
+ bool CallsEval();
108
114
 
109
115
  // Return the number of stack slots for code.
110
- static int NumberOfStackSlots(Code* code);
116
+ int NumberOfStackSlots();
111
117
 
112
118
  // Return the number of context slots for code.
113
- static int NumberOfContextSlots(Code* code);
119
+ int NumberOfContextSlots();
120
+
121
+ // Return if this has context slots besides MIN_CONTEXT_SLOTS;
122
+ bool HasHeapAllocatedLocals();
114
123
 
115
- // Lookup support for scope info embedded in Code objects. Returns
124
+ // Lookup support for serialized scope info. Returns the
116
125
  // the stack slot index for a given slot name if the slot is
117
126
  // present; otherwise returns a value < 0. The name must be a symbol
118
127
  // (canonicalized).
119
- static int StackSlotIndex(Code* code, String* name);
128
+ int StackSlotIndex(String* name);
120
129
 
121
- // Lookup support for scope info embedded in Code objects. Returns the
130
+ // Lookup support for serialized scope info. Returns the
122
131
  // context slot index for a given slot name if the slot is present; otherwise
123
132
  // returns a value < 0. The name must be a symbol (canonicalized).
124
133
  // If the slot is present and mode != NULL, sets *mode to the corresponding
125
134
  // mode for that variable.
126
- static int ContextSlotIndex(Code* code, String* name, Variable::Mode* mode);
135
+ int ContextSlotIndex(String* name, Variable::Mode* mode);
127
136
 
128
- // Lookup support for scope info embedded in Code objects. Returns the
137
+ // Lookup support for serialized scope info. Returns the
129
138
  // parameter index for a given parameter name if the parameter is present;
130
139
  // otherwise returns a value < 0. The name must be a symbol (canonicalized).
131
- static int ParameterIndex(Code* code, String* name);
140
+ int ParameterIndex(String* name);
132
141
 
133
- // Lookup support for scope info embedded in Code objects. Returns the
142
+ // Lookup support for serialized scope info. Returns the
134
143
  // function context slot index if the function name is present (named
135
144
  // function expressions, only), otherwise returns a value < 0. The name
136
145
  // must be a symbol (canonicalized).
137
- static int FunctionContextSlotIndex(Code* code, String* name);
146
+ int FunctionContextSlotIndex(String* name);
138
147
 
139
- // --------------------------------------------------------------------------
140
- // Debugging support
148
+ static Handle<SerializedScopeInfo> Create(Scope* scope);
141
149
 
142
- #ifdef DEBUG
143
- void Print();
144
- #endif
150
+ // Serializes empty scope info.
151
+ static SerializedScopeInfo* Empty();
145
152
 
146
153
  private:
147
- Handle<String> function_name_;
148
- bool calls_eval_;
149
- List<Handle<String>, Allocator > parameters_;
150
- List<Handle<String>, Allocator > stack_slots_;
151
- List<Handle<String>, Allocator > context_slots_;
152
- List<Variable::Mode, Allocator > context_modes_;
153
- };
154
154
 
155
- class ZoneScopeInfo: public ScopeInfo<ZoneListAllocationPolicy> {
156
- public:
157
- // Create a ZoneScopeInfo instance from a scope.
158
- explicit ZoneScopeInfo(Scope* scope)
159
- : ScopeInfo<ZoneListAllocationPolicy>(scope) {}
155
+ inline Object** ContextEntriesAddr();
156
+
157
+ inline Object** ParameterEntriesAddr();
160
158
 
161
- // Create a ZoneScopeInfo instance from a Code object.
162
- explicit ZoneScopeInfo(Code* code)
163
- : ScopeInfo<ZoneListAllocationPolicy>(code) {}
159
+ inline Object** StackSlotEntriesAddr();
164
160
  };
165
161
 
166
162
 
167
- // Cache for mapping (code, property name) into context slot index.
163
+ // Cache for mapping (data, property name) into context slot index.
168
164
  // The cache contains both positive and negative results.
169
165
  // Slot index equals -1 means the property is absent.
170
166
  // Cleared at startup and prior to mark sweep collection.
171
167
  class ContextSlotCache {
172
168
  public:
173
- // Lookup context slot index for (code, name).
169
+ // Lookup context slot index for (data, name).
174
170
  // If absent, kNotFound is returned.
175
- static int Lookup(Code* code,
171
+ static int Lookup(Object* data,
176
172
  String* name,
177
173
  Variable::Mode* mode);
178
174
 
179
175
  // Update an element in the cache.
180
- static void Update(Code* code,
176
+ static void Update(Object* data,
181
177
  String* name,
182
178
  Variable::Mode mode,
183
179
  int slot_index);
@@ -187,10 +183,10 @@ class ContextSlotCache {
187
183
 
188
184
  static const int kNotFound = -2;
189
185
  private:
190
- inline static int Hash(Code* code, String* name);
186
+ inline static int Hash(Object* data, String* name);
191
187
 
192
188
  #ifdef DEBUG
193
- static void ValidateEntry(Code* code,
189
+ static void ValidateEntry(Object* data,
194
190
  String* name,
195
191
  Variable::Mode mode,
196
192
  int slot_index);
@@ -198,7 +194,7 @@ class ContextSlotCache {
198
194
 
199
195
  static const int kLength = 256;
200
196
  struct Key {
201
- Code* code;
197
+ Object* data;
202
198
  String* name;
203
199
  };
204
200
 
File without changes
File without changes
@@ -229,6 +229,10 @@ void ExternalReferenceTable::PopulateTable() {
229
229
  DEBUG_ADDRESS,
230
230
  Debug::k_after_break_target_address << kDebugIdShift,
231
231
  "Debug::after_break_target_address()");
232
+ Add(Debug_Address(Debug::k_debug_break_slot_address).address(),
233
+ DEBUG_ADDRESS,
234
+ Debug::k_debug_break_slot_address << kDebugIdShift,
235
+ "Debug::debug_break_slot_address()");
232
236
  Add(Debug_Address(Debug::k_debug_break_return_address).address(),
233
237
  DEBUG_ADDRESS,
234
238
  Debug::k_debug_break_return_address << kDebugIdShift,
@@ -356,102 +360,108 @@ void ExternalReferenceTable::PopulateTable() {
356
360
  UNCLASSIFIED,
357
361
  5,
358
362
  "StackGuard::address_of_real_jslimit()");
363
+ #ifndef V8_INTERPRETED_REGEXP
359
364
  Add(ExternalReference::address_of_regexp_stack_limit().address(),
360
365
  UNCLASSIFIED,
361
366
  6,
362
367
  "RegExpStack::limit_address()");
363
- Add(ExternalReference::new_space_start().address(),
368
+ Add(ExternalReference::address_of_regexp_stack_memory_address().address(),
364
369
  UNCLASSIFIED,
365
370
  7,
371
+ "RegExpStack::memory_address()");
372
+ Add(ExternalReference::address_of_regexp_stack_memory_size().address(),
373
+ UNCLASSIFIED,
374
+ 8,
375
+ "RegExpStack::memory_size()");
376
+ Add(ExternalReference::address_of_static_offsets_vector().address(),
377
+ UNCLASSIFIED,
378
+ 9,
379
+ "OffsetsVector::static_offsets_vector");
380
+ #endif // V8_INTERPRETED_REGEXP
381
+ Add(ExternalReference::new_space_start().address(),
382
+ UNCLASSIFIED,
383
+ 10,
366
384
  "Heap::NewSpaceStart()");
367
385
  Add(ExternalReference::new_space_mask().address(),
368
386
  UNCLASSIFIED,
369
- 8,
387
+ 11,
370
388
  "Heap::NewSpaceMask()");
371
389
  Add(ExternalReference::heap_always_allocate_scope_depth().address(),
372
390
  UNCLASSIFIED,
373
- 9,
391
+ 12,
374
392
  "Heap::always_allocate_scope_depth()");
375
393
  Add(ExternalReference::new_space_allocation_limit_address().address(),
376
394
  UNCLASSIFIED,
377
- 10,
395
+ 13,
378
396
  "Heap::NewSpaceAllocationLimitAddress()");
379
397
  Add(ExternalReference::new_space_allocation_top_address().address(),
380
398
  UNCLASSIFIED,
381
- 11,
399
+ 14,
382
400
  "Heap::NewSpaceAllocationTopAddress()");
383
401
  #ifdef ENABLE_DEBUGGER_SUPPORT
384
402
  Add(ExternalReference::debug_break().address(),
385
403
  UNCLASSIFIED,
386
- 12,
404
+ 15,
387
405
  "Debug::Break()");
388
406
  Add(ExternalReference::debug_step_in_fp_address().address(),
389
407
  UNCLASSIFIED,
390
- 13,
408
+ 16,
391
409
  "Debug::step_in_fp_addr()");
392
410
  #endif
393
411
  Add(ExternalReference::double_fp_operation(Token::ADD).address(),
394
412
  UNCLASSIFIED,
395
- 14,
413
+ 17,
396
414
  "add_two_doubles");
397
415
  Add(ExternalReference::double_fp_operation(Token::SUB).address(),
398
416
  UNCLASSIFIED,
399
- 15,
417
+ 18,
400
418
  "sub_two_doubles");
401
419
  Add(ExternalReference::double_fp_operation(Token::MUL).address(),
402
420
  UNCLASSIFIED,
403
- 16,
421
+ 19,
404
422
  "mul_two_doubles");
405
423
  Add(ExternalReference::double_fp_operation(Token::DIV).address(),
406
424
  UNCLASSIFIED,
407
- 17,
425
+ 20,
408
426
  "div_two_doubles");
409
427
  Add(ExternalReference::double_fp_operation(Token::MOD).address(),
410
428
  UNCLASSIFIED,
411
- 18,
429
+ 21,
412
430
  "mod_two_doubles");
413
431
  Add(ExternalReference::compare_doubles().address(),
414
432
  UNCLASSIFIED,
415
- 19,
433
+ 22,
416
434
  "compare_doubles");
417
- Add(ExternalReference::compile_array_pop_call().address(),
418
- UNCLASSIFIED,
419
- 20,
420
- "compile_array_pop");
421
- Add(ExternalReference::compile_array_push_call().address(),
422
- UNCLASSIFIED,
423
- 21,
424
- "compile_array_push");
425
435
  #ifndef V8_INTERPRETED_REGEXP
426
436
  Add(ExternalReference::re_case_insensitive_compare_uc16().address(),
427
437
  UNCLASSIFIED,
428
- 22,
438
+ 23,
429
439
  "NativeRegExpMacroAssembler::CaseInsensitiveCompareUC16()");
430
440
  Add(ExternalReference::re_check_stack_guard_state().address(),
431
441
  UNCLASSIFIED,
432
- 23,
442
+ 24,
433
443
  "RegExpMacroAssembler*::CheckStackGuardState()");
434
444
  Add(ExternalReference::re_grow_stack().address(),
435
445
  UNCLASSIFIED,
436
- 24,
446
+ 25,
437
447
  "NativeRegExpMacroAssembler::GrowStack()");
438
448
  Add(ExternalReference::re_word_character_map().address(),
439
449
  UNCLASSIFIED,
440
- 25,
450
+ 26,
441
451
  "NativeRegExpMacroAssembler::word_character_map");
442
452
  #endif // V8_INTERPRETED_REGEXP
443
453
  // Keyed lookup cache.
444
454
  Add(ExternalReference::keyed_lookup_cache_keys().address(),
445
455
  UNCLASSIFIED,
446
- 26,
456
+ 27,
447
457
  "KeyedLookupCache::keys()");
448
458
  Add(ExternalReference::keyed_lookup_cache_field_offsets().address(),
449
459
  UNCLASSIFIED,
450
- 27,
460
+ 28,
451
461
  "KeyedLookupCache::field_offsets()");
452
462
  Add(ExternalReference::transcendental_cache_array_address().address(),
453
463
  UNCLASSIFIED,
454
- 28,
464
+ 29,
455
465
  "TranscendentalCache::caches()");
456
466
  }
457
467
 
@@ -665,30 +675,175 @@ void Deserializer::ReadObject(int space_number,
665
675
  LOG(SnapshotPositionEvent(address, source_->position()));
666
676
  }
667
677
  ReadChunk(current, limit, space_number, address);
678
+
679
+ if (space == Heap::map_space()) {
680
+ ASSERT(size == Map::kSize);
681
+ HeapObject* obj = HeapObject::FromAddress(address);
682
+ Map* map = reinterpret_cast<Map*>(obj);
683
+ map->set_scavenger(Heap::GetScavenger(map->instance_type(),
684
+ map->instance_size()));
685
+ }
668
686
  }
669
687
 
670
688
 
671
- #define ONE_CASE_PER_SPACE(base_tag) \
672
- case (base_tag) + NEW_SPACE: /* NOLINT */ \
673
- case (base_tag) + OLD_POINTER_SPACE: /* NOLINT */ \
674
- case (base_tag) + OLD_DATA_SPACE: /* NOLINT */ \
675
- case (base_tag) + CODE_SPACE: /* NOLINT */ \
676
- case (base_tag) + MAP_SPACE: /* NOLINT */ \
677
- case (base_tag) + CELL_SPACE: /* NOLINT */ \
678
- case (base_tag) + kLargeData: /* NOLINT */ \
679
- case (base_tag) + kLargeCode: /* NOLINT */ \
680
- case (base_tag) + kLargeFixedArray: /* NOLINT */
689
+ // This macro is always used with a constant argument so it should all fold
690
+ // away to almost nothing in the generated code. It might be nicer to do this
691
+ // with the ternary operator but there are type issues with that.
692
+ #define ASSIGN_DEST_SPACE(space_number) \
693
+ Space* dest_space; \
694
+ if (space_number == NEW_SPACE) { \
695
+ dest_space = Heap::new_space(); \
696
+ } else if (space_number == OLD_POINTER_SPACE) { \
697
+ dest_space = Heap::old_pointer_space(); \
698
+ } else if (space_number == OLD_DATA_SPACE) { \
699
+ dest_space = Heap::old_data_space(); \
700
+ } else if (space_number == CODE_SPACE) { \
701
+ dest_space = Heap::code_space(); \
702
+ } else if (space_number == MAP_SPACE) { \
703
+ dest_space = Heap::map_space(); \
704
+ } else if (space_number == CELL_SPACE) { \
705
+ dest_space = Heap::cell_space(); \
706
+ } else { \
707
+ ASSERT(space_number >= LO_SPACE); \
708
+ dest_space = Heap::lo_space(); \
709
+ }
710
+
711
+
712
+ static const int kUnknownOffsetFromStart = -1;
681
713
 
682
714
 
683
715
  void Deserializer::ReadChunk(Object** current,
684
716
  Object** limit,
685
- int space,
717
+ int source_space,
686
718
  Address address) {
687
719
  while (current < limit) {
688
720
  int data = source_->Get();
689
721
  switch (data) {
722
+ #define CASE_STATEMENT(where, how, within, space_number) \
723
+ case where + how + within + space_number: \
724
+ ASSERT((where & ~kPointedToMask) == 0); \
725
+ ASSERT((how & ~kHowToCodeMask) == 0); \
726
+ ASSERT((within & ~kWhereToPointMask) == 0); \
727
+ ASSERT((space_number & ~kSpaceMask) == 0);
728
+
729
+ #define CASE_BODY(where, how, within, space_number_if_any, offset_from_start) \
730
+ { \
731
+ bool emit_write_barrier = false; \
732
+ bool current_was_incremented = false; \
733
+ int space_number = space_number_if_any == kAnyOldSpace ? \
734
+ (data & kSpaceMask) : space_number_if_any; \
735
+ if (where == kNewObject && how == kPlain && within == kStartOfObject) {\
736
+ ASSIGN_DEST_SPACE(space_number) \
737
+ ReadObject(space_number, dest_space, current); \
738
+ emit_write_barrier = \
739
+ (space_number == NEW_SPACE && source_space != NEW_SPACE); \
740
+ } else { \
741
+ Object* new_object = NULL; /* May not be a real Object pointer. */ \
742
+ if (where == kNewObject) { \
743
+ ASSIGN_DEST_SPACE(space_number) \
744
+ ReadObject(space_number, dest_space, &new_object); \
745
+ } else if (where == kRootArray) { \
746
+ int root_id = source_->GetInt(); \
747
+ new_object = Heap::roots_address()[root_id]; \
748
+ } else if (where == kPartialSnapshotCache) { \
749
+ int cache_index = source_->GetInt(); \
750
+ new_object = partial_snapshot_cache_[cache_index]; \
751
+ } else if (where == kExternalReference) { \
752
+ int reference_id = source_->GetInt(); \
753
+ Address address = \
754
+ external_reference_decoder_->Decode(reference_id); \
755
+ new_object = reinterpret_cast<Object*>(address); \
756
+ } else if (where == kBackref) { \
757
+ emit_write_barrier = \
758
+ (space_number == NEW_SPACE && source_space != NEW_SPACE); \
759
+ new_object = GetAddressFromEnd(data & kSpaceMask); \
760
+ } else { \
761
+ ASSERT(where == kFromStart); \
762
+ if (offset_from_start == kUnknownOffsetFromStart) { \
763
+ emit_write_barrier = \
764
+ (space_number == NEW_SPACE && source_space != NEW_SPACE); \
765
+ new_object = GetAddressFromStart(data & kSpaceMask); \
766
+ } else { \
767
+ Address object_address = pages_[space_number][0] + \
768
+ (offset_from_start << kObjectAlignmentBits); \
769
+ new_object = HeapObject::FromAddress(object_address); \
770
+ } \
771
+ } \
772
+ if (within == kFirstInstruction) { \
773
+ Code* new_code_object = reinterpret_cast<Code*>(new_object); \
774
+ new_object = reinterpret_cast<Object*>( \
775
+ new_code_object->instruction_start()); \
776
+ } \
777
+ if (how == kFromCode) { \
778
+ Address location_of_branch_data = \
779
+ reinterpret_cast<Address>(current); \
780
+ Assembler::set_target_at(location_of_branch_data, \
781
+ reinterpret_cast<Address>(new_object)); \
782
+ if (within == kFirstInstruction) { \
783
+ location_of_branch_data += Assembler::kCallTargetSize; \
784
+ current = reinterpret_cast<Object**>(location_of_branch_data); \
785
+ current_was_incremented = true; \
786
+ } \
787
+ } else { \
788
+ *current = new_object; \
789
+ } \
790
+ } \
791
+ if (emit_write_barrier) { \
792
+ Heap::RecordWrite(address, static_cast<int>( \
793
+ reinterpret_cast<Address>(current) - address)); \
794
+ } \
795
+ if (!current_was_incremented) { \
796
+ current++; /* Increment current if it wasn't done above. */ \
797
+ } \
798
+ break; \
799
+ } \
800
+
801
+ // This generates a case and a body for each space. The large object spaces are
802
+ // very rare in snapshots so they are grouped in one body.
803
+ #define ONE_PER_SPACE(where, how, within) \
804
+ CASE_STATEMENT(where, how, within, NEW_SPACE) \
805
+ CASE_BODY(where, how, within, NEW_SPACE, kUnknownOffsetFromStart) \
806
+ CASE_STATEMENT(where, how, within, OLD_DATA_SPACE) \
807
+ CASE_BODY(where, how, within, OLD_DATA_SPACE, kUnknownOffsetFromStart) \
808
+ CASE_STATEMENT(where, how, within, OLD_POINTER_SPACE) \
809
+ CASE_BODY(where, how, within, OLD_POINTER_SPACE, kUnknownOffsetFromStart) \
810
+ CASE_STATEMENT(where, how, within, CODE_SPACE) \
811
+ CASE_BODY(where, how, within, CODE_SPACE, kUnknownOffsetFromStart) \
812
+ CASE_STATEMENT(where, how, within, CELL_SPACE) \
813
+ CASE_BODY(where, how, within, CELL_SPACE, kUnknownOffsetFromStart) \
814
+ CASE_STATEMENT(where, how, within, MAP_SPACE) \
815
+ CASE_BODY(where, how, within, MAP_SPACE, kUnknownOffsetFromStart) \
816
+ CASE_STATEMENT(where, how, within, kLargeData) \
817
+ CASE_STATEMENT(where, how, within, kLargeCode) \
818
+ CASE_STATEMENT(where, how, within, kLargeFixedArray) \
819
+ CASE_BODY(where, how, within, kAnyOldSpace, kUnknownOffsetFromStart)
820
+
821
+ // This generates a case and a body for the new space (which has to do extra
822
+ // write barrier handling) and handles the other spaces with 8 fall-through
823
+ // cases and one body.
824
+ #define ALL_SPACES(where, how, within) \
825
+ CASE_STATEMENT(where, how, within, NEW_SPACE) \
826
+ CASE_BODY(where, how, within, NEW_SPACE, kUnknownOffsetFromStart) \
827
+ CASE_STATEMENT(where, how, within, OLD_DATA_SPACE) \
828
+ CASE_STATEMENT(where, how, within, OLD_POINTER_SPACE) \
829
+ CASE_STATEMENT(where, how, within, CODE_SPACE) \
830
+ CASE_STATEMENT(where, how, within, CELL_SPACE) \
831
+ CASE_STATEMENT(where, how, within, MAP_SPACE) \
832
+ CASE_STATEMENT(where, how, within, kLargeData) \
833
+ CASE_STATEMENT(where, how, within, kLargeCode) \
834
+ CASE_STATEMENT(where, how, within, kLargeFixedArray) \
835
+ CASE_BODY(where, how, within, kAnyOldSpace, kUnknownOffsetFromStart)
836
+
837
+ #define EMIT_COMMON_REFERENCE_PATTERNS(pseudo_space_number, \
838
+ space_number, \
839
+ offset_from_start) \
840
+ CASE_STATEMENT(kFromStart, kPlain, kStartOfObject, pseudo_space_number) \
841
+ CASE_BODY(kFromStart, kPlain, kStartOfObject, space_number, offset_from_start)
842
+
843
+ // We generate 15 cases and bodies that process special tags that combine
844
+ // the raw data tag and the length into one byte.
690
845
  #define RAW_CASE(index, size) \
691
- case RAW_DATA_SERIALIZATION + index: { \
846
+ case kRawData + index: { \
692
847
  byte* raw_data_out = reinterpret_cast<byte*>(current); \
693
848
  source_->CopyRaw(raw_data_out, size); \
694
849
  current = reinterpret_cast<Object**>(raw_data_out + size); \
@@ -696,144 +851,77 @@ void Deserializer::ReadChunk(Object** current,
696
851
  }
697
852
  COMMON_RAW_LENGTHS(RAW_CASE)
698
853
  #undef RAW_CASE
699
- case RAW_DATA_SERIALIZATION: {
854
+
855
+ // Deserialize a chunk of raw data that doesn't have one of the popular
856
+ // lengths.
857
+ case kRawData: {
700
858
  int size = source_->GetInt();
701
859
  byte* raw_data_out = reinterpret_cast<byte*>(current);
702
860
  source_->CopyRaw(raw_data_out, size);
703
861
  current = reinterpret_cast<Object**>(raw_data_out + size);
704
862
  break;
705
863
  }
706
- case OBJECT_SERIALIZATION + NEW_SPACE: {
707
- ReadObject(NEW_SPACE, Heap::new_space(), current);
708
- if (space != NEW_SPACE) {
709
- Heap::RecordWrite(address, static_cast<int>(
710
- reinterpret_cast<Address>(current) - address));
711
- }
712
- current++;
713
- break;
714
- }
715
- case OBJECT_SERIALIZATION + OLD_DATA_SPACE:
716
- ReadObject(OLD_DATA_SPACE, Heap::old_data_space(), current++);
717
- break;
718
- case OBJECT_SERIALIZATION + OLD_POINTER_SPACE:
719
- ReadObject(OLD_POINTER_SPACE, Heap::old_pointer_space(), current++);
720
- break;
721
- case OBJECT_SERIALIZATION + MAP_SPACE:
722
- ReadObject(MAP_SPACE, Heap::map_space(), current++);
723
- break;
724
- case OBJECT_SERIALIZATION + CODE_SPACE:
725
- ReadObject(CODE_SPACE, Heap::code_space(), current++);
726
- break;
727
- case OBJECT_SERIALIZATION + CELL_SPACE:
728
- ReadObject(CELL_SPACE, Heap::cell_space(), current++);
729
- break;
730
- case OBJECT_SERIALIZATION + kLargeData:
731
- ReadObject(kLargeData, Heap::lo_space(), current++);
732
- break;
733
- case OBJECT_SERIALIZATION + kLargeCode:
734
- ReadObject(kLargeCode, Heap::lo_space(), current++);
735
- break;
736
- case OBJECT_SERIALIZATION + kLargeFixedArray:
737
- ReadObject(kLargeFixedArray, Heap::lo_space(), current++);
738
- break;
739
- case CODE_OBJECT_SERIALIZATION + kLargeCode: {
740
- Object* new_code_object = NULL;
741
- ReadObject(kLargeCode, Heap::lo_space(), &new_code_object);
742
- Code* code_object = reinterpret_cast<Code*>(new_code_object);
743
- // Setting a branch/call to another code object from code.
744
- Address location_of_branch_data = reinterpret_cast<Address>(current);
745
- Assembler::set_target_at(location_of_branch_data,
746
- code_object->instruction_start());
747
- location_of_branch_data += Assembler::kCallTargetSize;
748
- current = reinterpret_cast<Object**>(location_of_branch_data);
749
- break;
750
- }
751
- case CODE_OBJECT_SERIALIZATION + CODE_SPACE: {
752
- Object* new_code_object = NULL;
753
- ReadObject(CODE_SPACE, Heap::code_space(), &new_code_object);
754
- Code* code_object = reinterpret_cast<Code*>(new_code_object);
755
- // Setting a branch/call to another code object from code.
756
- Address location_of_branch_data = reinterpret_cast<Address>(current);
757
- Assembler::set_target_at(location_of_branch_data,
758
- code_object->instruction_start());
759
- location_of_branch_data += Assembler::kCallTargetSize;
760
- current = reinterpret_cast<Object**>(location_of_branch_data);
761
- break;
762
- }
763
- ONE_CASE_PER_SPACE(BACKREF_SERIALIZATION) {
764
- // Write a backreference to an object we unpacked earlier.
765
- int backref_space = (data & kSpaceMask);
766
- if (backref_space == NEW_SPACE && space != NEW_SPACE) {
767
- Heap::RecordWrite(address, static_cast<int>(
768
- reinterpret_cast<Address>(current) - address));
769
- }
770
- *current++ = GetAddressFromEnd(backref_space);
771
- break;
772
- }
773
- ONE_CASE_PER_SPACE(REFERENCE_SERIALIZATION) {
774
- // Write a reference to an object we unpacked earlier.
775
- int reference_space = (data & kSpaceMask);
776
- if (reference_space == NEW_SPACE && space != NEW_SPACE) {
777
- Heap::RecordWrite(address, static_cast<int>(
778
- reinterpret_cast<Address>(current) - address));
779
- }
780
- *current++ = GetAddressFromStart(reference_space);
781
- break;
782
- }
783
- #define COMMON_REFS_CASE(index, reference_space, address) \
784
- case REFERENCE_SERIALIZATION + index: { \
785
- ASSERT(SpaceIsPaged(reference_space)); \
786
- Address object_address = \
787
- pages_[reference_space][0] + (address << kObjectAlignmentBits); \
788
- *current++ = HeapObject::FromAddress(object_address); \
789
- break; \
790
- }
791
- COMMON_REFERENCE_PATTERNS(COMMON_REFS_CASE)
792
- #undef COMMON_REFS_CASE
793
- ONE_CASE_PER_SPACE(CODE_BACKREF_SERIALIZATION) {
794
- int backref_space = (data & kSpaceMask);
795
- // Can't use Code::cast because heap is not set up yet and assertions
796
- // will fail.
797
- Code* code_object =
798
- reinterpret_cast<Code*>(GetAddressFromEnd(backref_space));
799
- // Setting a branch/call to previously decoded code object from code.
800
- Address location_of_branch_data = reinterpret_cast<Address>(current);
801
- Assembler::set_target_at(location_of_branch_data,
802
- code_object->instruction_start());
803
- location_of_branch_data += Assembler::kCallTargetSize;
804
- current = reinterpret_cast<Object**>(location_of_branch_data);
805
- break;
806
- }
807
- ONE_CASE_PER_SPACE(CODE_REFERENCE_SERIALIZATION) {
808
- int backref_space = (data & kSpaceMask);
809
- // Can't use Code::cast because heap is not set up yet and assertions
810
- // will fail.
811
- Code* code_object =
812
- reinterpret_cast<Code*>(GetAddressFromStart(backref_space));
813
- // Setting a branch/call to previously decoded code object from code.
814
- Address location_of_branch_data = reinterpret_cast<Address>(current);
815
- Assembler::set_target_at(location_of_branch_data,
816
- code_object->instruction_start());
817
- location_of_branch_data += Assembler::kCallTargetSize;
818
- current = reinterpret_cast<Object**>(location_of_branch_data);
819
- break;
820
- }
821
- case EXTERNAL_REFERENCE_SERIALIZATION: {
822
- int reference_id = source_->GetInt();
823
- Address address = external_reference_decoder_->Decode(reference_id);
824
- *current++ = reinterpret_cast<Object*>(address);
825
- break;
826
- }
827
- case EXTERNAL_BRANCH_TARGET_SERIALIZATION: {
828
- int reference_id = source_->GetInt();
829
- Address address = external_reference_decoder_->Decode(reference_id);
830
- Address location_of_branch_data = reinterpret_cast<Address>(current);
831
- Assembler::set_external_target_at(location_of_branch_data, address);
832
- location_of_branch_data += Assembler::kExternalTargetSize;
833
- current = reinterpret_cast<Object**>(location_of_branch_data);
834
- break;
835
- }
836
- case START_NEW_PAGE_SERIALIZATION: {
864
+
865
+ // Deserialize a new object and write a pointer to it to the current
866
+ // object.
867
+ ONE_PER_SPACE(kNewObject, kPlain, kStartOfObject)
868
+ // Deserialize a new code object and write a pointer to its first
869
+ // instruction to the current code object.
870
+ ONE_PER_SPACE(kNewObject, kFromCode, kFirstInstruction)
871
+ // Find a recently deserialized object using its offset from the current
872
+ // allocation point and write a pointer to it to the current object.
873
+ ALL_SPACES(kBackref, kPlain, kStartOfObject)
874
+ // Find a recently deserialized code object using its offset from the
875
+ // current allocation point and write a pointer to its first instruction
876
+ // to the current code object.
877
+ ALL_SPACES(kBackref, kFromCode, kFirstInstruction)
878
+ // Find an already deserialized object using its offset from the start
879
+ // and write a pointer to it to the current object.
880
+ ALL_SPACES(kFromStart, kPlain, kStartOfObject)
881
+ // Find an already deserialized code object using its offset from the
882
+ // start and write a pointer to its first instruction to the current code
883
+ // object.
884
+ ALL_SPACES(kFromStart, kFromCode, kFirstInstruction)
885
+ // Find an already deserialized object at one of the predetermined popular
886
+ // offsets from the start and write a pointer to it in the current object.
887
+ COMMON_REFERENCE_PATTERNS(EMIT_COMMON_REFERENCE_PATTERNS)
888
+ // Find an object in the roots array and write a pointer to it to the
889
+ // current object.
890
+ CASE_STATEMENT(kRootArray, kPlain, kStartOfObject, 0)
891
+ CASE_BODY(kRootArray, kPlain, kStartOfObject, 0, kUnknownOffsetFromStart)
892
+ // Find an object in the partial snapshots cache and write a pointer to it
893
+ // to the current object.
894
+ CASE_STATEMENT(kPartialSnapshotCache, kPlain, kStartOfObject, 0)
895
+ CASE_BODY(kPartialSnapshotCache,
896
+ kPlain,
897
+ kStartOfObject,
898
+ 0,
899
+ kUnknownOffsetFromStart)
900
+ // Find an external reference and write a pointer to it to the current
901
+ // object.
902
+ CASE_STATEMENT(kExternalReference, kPlain, kStartOfObject, 0)
903
+ CASE_BODY(kExternalReference,
904
+ kPlain,
905
+ kStartOfObject,
906
+ 0,
907
+ kUnknownOffsetFromStart)
908
+ // Find an external reference and write a pointer to it in the current
909
+ // code object.
910
+ CASE_STATEMENT(kExternalReference, kFromCode, kStartOfObject, 0)
911
+ CASE_BODY(kExternalReference,
912
+ kFromCode,
913
+ kStartOfObject,
914
+ 0,
915
+ kUnknownOffsetFromStart)
916
+
917
+ #undef CASE_STATEMENT
918
+ #undef CASE_BODY
919
+ #undef ONE_PER_SPACE
920
+ #undef ALL_SPACES
921
+ #undef EMIT_COMMON_REFERENCE_PATTERNS
922
+ #undef ASSIGN_DEST_SPACE
923
+
924
+ case kNewPage: {
837
925
  int space = source_->Get();
838
926
  pages_[space].Add(last_object_address_);
839
927
  if (space == CODE_SPACE) {
@@ -841,7 +929,8 @@ void Deserializer::ReadChunk(Object** current,
841
929
  }
842
930
  break;
843
931
  }
844
- case NATIVES_STRING_RESOURCE: {
932
+
933
+ case kNativesStringResource: {
845
934
  int index = source_->Get();
846
935
  Vector<const char> source_vector = Natives::GetScriptSource(index);
847
936
  NativesExternalStringResource* resource =
@@ -849,21 +938,13 @@ void Deserializer::ReadChunk(Object** current,
849
938
  *current++ = reinterpret_cast<Object*>(resource);
850
939
  break;
851
940
  }
852
- case ROOT_SERIALIZATION: {
853
- int root_id = source_->GetInt();
854
- *current++ = Heap::roots_address()[root_id];
855
- break;
856
- }
857
- case PARTIAL_SNAPSHOT_CACHE_ENTRY: {
858
- int cache_index = source_->GetInt();
859
- *current++ = partial_snapshot_cache_[cache_index];
860
- break;
861
- }
862
- case SYNCHRONIZE: {
941
+
942
+ case kSynchronize: {
863
943
  // If we get here then that indicates that you have a mismatch between
864
944
  // the number of GC roots when serializing and deserializing.
865
945
  UNREACHABLE();
866
946
  }
947
+
867
948
  default:
868
949
  UNREACHABLE();
869
950
  }
@@ -888,7 +969,7 @@ void Deserializer::Synchronize(const char* tag) {
888
969
  int data = source_->Get();
889
970
  // If this assert fails then that indicates that you have a mismatch between
890
971
  // the number of GC roots when serializing and deserializing.
891
- ASSERT_EQ(SYNCHRONIZE, data);
972
+ ASSERT_EQ(kSynchronize, data);
892
973
  do {
893
974
  int character = source_->Get();
894
975
  if (character == 0) break;
@@ -903,7 +984,7 @@ void Deserializer::Synchronize(const char* tag) {
903
984
 
904
985
 
905
986
  void Serializer::Synchronize(const char* tag) {
906
- sink_->Put(SYNCHRONIZE, tag);
987
+ sink_->Put(kSynchronize, tag);
907
988
  int character;
908
989
  do {
909
990
  character = *tag++;
@@ -965,13 +1046,13 @@ void PartialSerializer::Serialize(Object** object) {
965
1046
  void Serializer::VisitPointers(Object** start, Object** end) {
966
1047
  for (Object** current = start; current < end; current++) {
967
1048
  if ((*current)->IsSmi()) {
968
- sink_->Put(RAW_DATA_SERIALIZATION, "RawData");
1049
+ sink_->Put(kRawData, "RawData");
969
1050
  sink_->PutInt(kPointerSize, "length");
970
1051
  for (int i = 0; i < kPointerSize; i++) {
971
1052
  sink_->Put(reinterpret_cast<byte*>(current)[i], "Byte");
972
1053
  }
973
1054
  } else {
974
- SerializeObject(*current, TAGGED_REPRESENTATION);
1055
+ SerializeObject(*current, kPlain, kStartOfObject);
975
1056
  }
976
1057
  }
977
1058
  }
@@ -1041,7 +1122,8 @@ int PartialSerializer::RootIndex(HeapObject* heap_object) {
1041
1122
  void Serializer::SerializeReferenceToPreviousObject(
1042
1123
  int space,
1043
1124
  int address,
1044
- ReferenceRepresentation reference_representation) {
1125
+ HowToCode how_to_code,
1126
+ WhereToPoint where_to_point) {
1045
1127
  int offset = CurrentAllocationAddress(space) - address;
1046
1128
  bool from_start = true;
1047
1129
  if (SpaceIsPaged(space)) {
@@ -1062,43 +1144,30 @@ void Serializer::SerializeReferenceToPreviousObject(
1062
1144
  // If we are actually dealing with real offsets (and not a numbering of
1063
1145
  // all objects) then we should shift out the bits that are always 0.
1064
1146
  if (!SpaceIsLarge(space)) address >>= kObjectAlignmentBits;
1065
- // On some architectures references between code objects are encoded
1066
- // specially (as relative offsets). Such references have their own
1067
- // special tags to simplify the deserializer.
1068
- if (reference_representation == CODE_TARGET_REPRESENTATION) {
1069
- if (from_start) {
1070
- sink_->Put(CODE_REFERENCE_SERIALIZATION + space, "RefCodeSer");
1071
- sink_->PutInt(address, "address");
1072
- } else {
1073
- sink_->Put(CODE_BACKREF_SERIALIZATION + space, "BackRefCodeSer");
1074
- sink_->PutInt(address, "address");
1075
- }
1076
- } else {
1077
- // Regular absolute references.
1078
- CHECK_EQ(TAGGED_REPRESENTATION, reference_representation);
1079
- if (from_start) {
1080
- // There are some common offsets that have their own specialized encoding.
1081
- #define COMMON_REFS_CASE(tag, common_space, common_offset) \
1082
- if (space == common_space && address == common_offset) { \
1083
- sink_->PutSection(tag + REFERENCE_SERIALIZATION, "RefSer"); \
1084
- } else /* NOLINT */
1085
- COMMON_REFERENCE_PATTERNS(COMMON_REFS_CASE)
1147
+ if (from_start) {
1148
+ #define COMMON_REFS_CASE(pseudo_space, actual_space, offset) \
1149
+ if (space == actual_space && address == offset && \
1150
+ how_to_code == kPlain && where_to_point == kStartOfObject) { \
1151
+ sink_->Put(kFromStart + how_to_code + where_to_point + \
1152
+ pseudo_space, "RefSer"); \
1153
+ } else /* NOLINT */
1154
+ COMMON_REFERENCE_PATTERNS(COMMON_REFS_CASE)
1086
1155
  #undef COMMON_REFS_CASE
1087
- { /* NOLINT */
1088
- sink_->Put(REFERENCE_SERIALIZATION + space, "RefSer");
1089
- sink_->PutInt(address, "address");
1090
- }
1091
- } else {
1092
- sink_->Put(BACKREF_SERIALIZATION + space, "BackRefSer");
1156
+ { /* NOLINT */
1157
+ sink_->Put(kFromStart + how_to_code + where_to_point + space, "RefSer");
1093
1158
  sink_->PutInt(address, "address");
1094
1159
  }
1160
+ } else {
1161
+ sink_->Put(kBackref + how_to_code + where_to_point + space, "BackRefSer");
1162
+ sink_->PutInt(address, "address");
1095
1163
  }
1096
1164
  }
1097
1165
 
1098
1166
 
1099
1167
  void StartupSerializer::SerializeObject(
1100
1168
  Object* o,
1101
- ReferenceRepresentation reference_representation) {
1169
+ HowToCode how_to_code,
1170
+ WhereToPoint where_to_point) {
1102
1171
  CHECK(o->IsHeapObject());
1103
1172
  HeapObject* heap_object = HeapObject::cast(o);
1104
1173
 
@@ -1107,13 +1176,15 @@ void StartupSerializer::SerializeObject(
1107
1176
  int address = address_mapper_.MappedTo(heap_object);
1108
1177
  SerializeReferenceToPreviousObject(space,
1109
1178
  address,
1110
- reference_representation);
1179
+ how_to_code,
1180
+ where_to_point);
1111
1181
  } else {
1112
1182
  // Object has not yet been serialized. Serialize it here.
1113
1183
  ObjectSerializer object_serializer(this,
1114
1184
  heap_object,
1115
1185
  sink_,
1116
- reference_representation);
1186
+ how_to_code,
1187
+ where_to_point);
1117
1188
  object_serializer.Serialize();
1118
1189
  }
1119
1190
  }
@@ -1123,7 +1194,7 @@ void StartupSerializer::SerializeWeakReferences() {
1123
1194
  for (int i = partial_snapshot_cache_length_;
1124
1195
  i < kPartialSnapshotCacheCapacity;
1125
1196
  i++) {
1126
- sink_->Put(ROOT_SERIALIZATION, "RootSerialization");
1197
+ sink_->Put(kRootArray + kPlain + kStartOfObject, "RootSerialization");
1127
1198
  sink_->PutInt(Heap::kUndefinedValueRootIndex, "root_index");
1128
1199
  }
1129
1200
  Heap::IterateWeakRoots(this, VISIT_ALL);
@@ -1132,20 +1203,22 @@ void StartupSerializer::SerializeWeakReferences() {
1132
1203
 
1133
1204
  void PartialSerializer::SerializeObject(
1134
1205
  Object* o,
1135
- ReferenceRepresentation reference_representation) {
1206
+ HowToCode how_to_code,
1207
+ WhereToPoint where_to_point) {
1136
1208
  CHECK(o->IsHeapObject());
1137
1209
  HeapObject* heap_object = HeapObject::cast(o);
1138
1210
 
1139
1211
  int root_index;
1140
1212
  if ((root_index = RootIndex(heap_object)) != kInvalidRootIndex) {
1141
- sink_->Put(ROOT_SERIALIZATION, "RootSerialization");
1213
+ sink_->Put(kRootArray + how_to_code + where_to_point, "RootSerialization");
1142
1214
  sink_->PutInt(root_index, "root_index");
1143
1215
  return;
1144
1216
  }
1145
1217
 
1146
1218
  if (ShouldBeInThePartialSnapshotCache(heap_object)) {
1147
1219
  int cache_index = PartialSnapshotCacheIndex(heap_object);
1148
- sink_->Put(PARTIAL_SNAPSHOT_CACHE_ENTRY, "PartialSnapshotCache");
1220
+ sink_->Put(kPartialSnapshotCache + how_to_code + where_to_point,
1221
+ "PartialSnapshotCache");
1149
1222
  sink_->PutInt(cache_index, "partial_snapshot_cache_index");
1150
1223
  return;
1151
1224
  }
@@ -1163,13 +1236,15 @@ void PartialSerializer::SerializeObject(
1163
1236
  int address = address_mapper_.MappedTo(heap_object);
1164
1237
  SerializeReferenceToPreviousObject(space,
1165
1238
  address,
1166
- reference_representation);
1239
+ how_to_code,
1240
+ where_to_point);
1167
1241
  } else {
1168
1242
  // Object has not yet been serialized. Serialize it here.
1169
1243
  ObjectSerializer serializer(this,
1170
1244
  heap_object,
1171
1245
  sink_,
1172
- reference_representation);
1246
+ how_to_code,
1247
+ where_to_point);
1173
1248
  serializer.Serialize();
1174
1249
  }
1175
1250
  }
@@ -1179,12 +1254,8 @@ void Serializer::ObjectSerializer::Serialize() {
1179
1254
  int space = Serializer::SpaceOfObject(object_);
1180
1255
  int size = object_->Size();
1181
1256
 
1182
- if (reference_representation_ == TAGGED_REPRESENTATION) {
1183
- sink_->Put(OBJECT_SERIALIZATION + space, "ObjectSerialization");
1184
- } else {
1185
- CHECK_EQ(CODE_TARGET_REPRESENTATION, reference_representation_);
1186
- sink_->Put(CODE_OBJECT_SERIALIZATION + space, "ObjectSerialization");
1187
- }
1257
+ sink_->Put(kNewObject + reference_representation_ + space,
1258
+ "ObjectSerialization");
1188
1259
  sink_->PutInt(size >> kObjectAlignmentBits, "Size in words");
1189
1260
 
1190
1261
  LOG(SnapshotPositionEvent(object_->address(), sink_->Position()));
@@ -1194,12 +1265,12 @@ void Serializer::ObjectSerializer::Serialize() {
1194
1265
  int offset = serializer_->Allocate(space, size, &start_new_page);
1195
1266
  serializer_->address_mapper()->AddMapping(object_, offset);
1196
1267
  if (start_new_page) {
1197
- sink_->Put(START_NEW_PAGE_SERIALIZATION, "NewPage");
1268
+ sink_->Put(kNewPage, "NewPage");
1198
1269
  sink_->PutSection(space, "NewPageSpace");
1199
1270
  }
1200
1271
 
1201
1272
  // Serialize the map (first word of the object).
1202
- serializer_->SerializeObject(object_->map(), TAGGED_REPRESENTATION);
1273
+ serializer_->SerializeObject(object_->map(), kPlain, kStartOfObject);
1203
1274
 
1204
1275
  // Serialize the rest of the object.
1205
1276
  CHECK_EQ(0, bytes_processed_so_far_);
@@ -1217,7 +1288,7 @@ void Serializer::ObjectSerializer::VisitPointers(Object** start,
1217
1288
  if (current < end) OutputRawData(reinterpret_cast<Address>(current));
1218
1289
 
1219
1290
  while (current < end && !(*current)->IsSmi()) {
1220
- serializer_->SerializeObject(*current, TAGGED_REPRESENTATION);
1291
+ serializer_->SerializeObject(*current, kPlain, kStartOfObject);
1221
1292
  bytes_processed_so_far_ += kPointerSize;
1222
1293
  current++;
1223
1294
  }
@@ -1231,7 +1302,7 @@ void Serializer::ObjectSerializer::VisitExternalReferences(Address* start,
1231
1302
  OutputRawData(references_start);
1232
1303
 
1233
1304
  for (Address* current = start; current < end; current++) {
1234
- sink_->Put(EXTERNAL_REFERENCE_SERIALIZATION, "ExternalReference");
1305
+ sink_->Put(kExternalReference + kPlain + kStartOfObject, "ExternalRef");
1235
1306
  int reference_id = serializer_->EncodeExternalReference(*current);
1236
1307
  sink_->PutInt(reference_id, "reference id");
1237
1308
  }
@@ -1245,9 +1316,16 @@ void Serializer::ObjectSerializer::VisitRuntimeEntry(RelocInfo* rinfo) {
1245
1316
  Address target = rinfo->target_address();
1246
1317
  uint32_t encoding = serializer_->EncodeExternalReference(target);
1247
1318
  CHECK(target == NULL ? encoding == 0 : encoding != 0);
1248
- sink_->Put(EXTERNAL_BRANCH_TARGET_SERIALIZATION, "ExternalReference");
1319
+ int representation;
1320
+ // Can't use a ternary operator because of gcc.
1321
+ if (rinfo->IsCodedSpecially()) {
1322
+ representation = kStartOfObject + kFromCode;
1323
+ } else {
1324
+ representation = kStartOfObject + kPlain;
1325
+ }
1326
+ sink_->Put(kExternalReference + representation, "ExternalReference");
1249
1327
  sink_->PutInt(encoding, "reference id");
1250
- bytes_processed_so_far_ += Assembler::kExternalTargetSize;
1328
+ bytes_processed_so_far_ += rinfo->target_address_size();
1251
1329
  }
1252
1330
 
1253
1331
 
@@ -1256,8 +1334,8 @@ void Serializer::ObjectSerializer::VisitCodeTarget(RelocInfo* rinfo) {
1256
1334
  Address target_start = rinfo->target_address_address();
1257
1335
  OutputRawData(target_start);
1258
1336
  Code* target = Code::GetCodeFromTargetAddress(rinfo->target_address());
1259
- serializer_->SerializeObject(target, CODE_TARGET_REPRESENTATION);
1260
- bytes_processed_so_far_ += Assembler::kCallTargetSize;
1337
+ serializer_->SerializeObject(target, kFromCode, kFirstInstruction);
1338
+ bytes_processed_so_far_ += rinfo->target_address_size();
1261
1339
  }
1262
1340
 
1263
1341
 
@@ -1272,7 +1350,7 @@ void Serializer::ObjectSerializer::VisitExternalAsciiString(
1272
1350
  typedef v8::String::ExternalAsciiStringResource Resource;
1273
1351
  Resource* resource = string->resource();
1274
1352
  if (resource == *resource_pointer) {
1275
- sink_->Put(NATIVES_STRING_RESOURCE, "NativesStringResource");
1353
+ sink_->Put(kNativesStringResource, "NativesStringResource");
1276
1354
  sink_->PutSection(i, "NativesStringResourceEnd");
1277
1355
  bytes_processed_so_far_ += sizeof(resource);
1278
1356
  return;
@@ -1296,12 +1374,12 @@ void Serializer::ObjectSerializer::OutputRawData(Address up_to) {
1296
1374
  Address base = object_start + bytes_processed_so_far_;
1297
1375
  #define RAW_CASE(index, length) \
1298
1376
  if (skipped == length) { \
1299
- sink_->PutSection(RAW_DATA_SERIALIZATION + index, "RawDataFixed"); \
1377
+ sink_->PutSection(kRawData + index, "RawDataFixed"); \
1300
1378
  } else /* NOLINT */
1301
1379
  COMMON_RAW_LENGTHS(RAW_CASE)
1302
1380
  #undef RAW_CASE
1303
1381
  { /* NOLINT */
1304
- sink_->Put(RAW_DATA_SERIALIZATION, "RawData");
1382
+ sink_->Put(kRawData, "RawData");
1305
1383
  sink_->PutInt(skipped, "length");
1306
1384
  }
1307
1385
  for (int i = 0; i < skipped; i++) {