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
@@ -0,0 +1,170 @@
1
+ // Copyright 2010 the V8 project authors. All rights reserved.
2
+ // Redistribution and use in source and binary forms, with or without
3
+ // modification, are permitted provided that the following conditions are
4
+ // met:
5
+ //
6
+ // * Redistributions of source code must retain the above copyright
7
+ // notice, this list of conditions and the following disclaimer.
8
+ // * Redistributions in binary form must reproduce the above
9
+ // copyright notice, this list of conditions and the following
10
+ // disclaimer in the documentation and/or other materials provided
11
+ // with the distribution.
12
+ // * Neither the name of Google Inc. nor the names of its
13
+ // contributors may be used to endorse or promote products derived
14
+ // from this software without specific prior written permission.
15
+ //
16
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+
28
+ #ifndef V8_LIVEEDIT_H_
29
+ #define V8_LIVEEDIT_H_
30
+
31
+
32
+
33
+ // Live Edit feature implementation.
34
+ // User should be able to change script on already running VM. This feature
35
+ // matches hot swap features in other frameworks.
36
+ //
37
+ // The basic use-case is when user spots some mistake in function body
38
+ // from debugger and wishes to change the algorithm without restart.
39
+ //
40
+ // A single change always has a form of a simple replacement (in pseudo-code):
41
+ // script.source[positions, positions+length] = new_string;
42
+ // Implementation first determines, which function's body includes this
43
+ // change area. Then both old and new versions of script are fully compiled
44
+ // in order to analyze, whether the function changed its outer scope
45
+ // expectations (or number of parameters). If it didn't, function's code is
46
+ // patched with a newly compiled code. If it did change, enclosing function
47
+ // gets patched. All inner functions are left untouched, whatever happened
48
+ // to them in a new script version. However, new version of code will
49
+ // instantiate newly compiled functions.
50
+
51
+
52
+ #include "compiler.h"
53
+
54
+ namespace v8 {
55
+ namespace internal {
56
+
57
+ // This class collects some specific information on structure of functions
58
+ // in a particular script. It gets called from compiler all the time, but
59
+ // actually records any data only when liveedit operation is in process;
60
+ // in any other time this class is very cheap.
61
+ //
62
+ // The primary interest of the Tracker is to record function scope structures
63
+ // in order to analyze whether function code maybe safely patched (with new
64
+ // code successfully reading existing data from function scopes). The Tracker
65
+ // also collects compiled function codes.
66
+ class LiveEditFunctionTracker {
67
+ public:
68
+ explicit LiveEditFunctionTracker(FunctionLiteral* fun);
69
+ ~LiveEditFunctionTracker();
70
+ void RecordFunctionInfo(Handle<SharedFunctionInfo> info,
71
+ FunctionLiteral* lit);
72
+ void RecordRootFunctionInfo(Handle<Code> code);
73
+
74
+ static bool IsActive();
75
+ };
76
+
77
+ #ifdef ENABLE_DEBUGGER_SUPPORT
78
+
79
+ class LiveEdit : AllStatic {
80
+ public:
81
+ static JSArray* GatherCompileInfo(Handle<Script> script,
82
+ Handle<String> source);
83
+
84
+ static void WrapSharedFunctionInfos(Handle<JSArray> array);
85
+
86
+ static Object* ReplaceFunctionCode(Handle<JSArray> new_compile_info_array,
87
+ Handle<JSArray> shared_info_array);
88
+
89
+ // Updates script field in FunctionSharedInfo.
90
+ static void SetFunctionScript(Handle<JSValue> function_wrapper,
91
+ Handle<Object> script_handle);
92
+
93
+ static Object* PatchFunctionPositions(
94
+ Handle<JSArray> shared_info_array, Handle<JSArray> position_change_array);
95
+
96
+ // For a script updates its source field. If old_script_name is provided
97
+ // (i.e. is a String), also creates a copy of the script with its original
98
+ // source and sends notification to debugger.
99
+ static Object* ChangeScriptSource(Handle<Script> original_script,
100
+ Handle<String> new_source,
101
+ Handle<Object> old_script_name);
102
+
103
+ // In a code of a parent function replaces original function as embedded
104
+ // object with a substitution one.
105
+ static void ReplaceRefToNestedFunction(Handle<JSValue> parent_function_shared,
106
+ Handle<JSValue> orig_function_shared,
107
+ Handle<JSValue> subst_function_shared);
108
+
109
+ // Checks listed functions on stack and return array with corresponding
110
+ // FunctionPatchabilityStatus statuses; extra array element may
111
+ // contain general error message. Modifies the current stack and
112
+ // has restart the lowest found frames and drops all other frames above
113
+ // if possible and if do_drop is true.
114
+ static Handle<JSArray> CheckAndDropActivations(
115
+ Handle<JSArray> shared_info_array, bool do_drop);
116
+
117
+ // A copy of this is in liveedit-debugger.js.
118
+ enum FunctionPatchabilityStatus {
119
+ FUNCTION_AVAILABLE_FOR_PATCH = 1,
120
+ FUNCTION_BLOCKED_ON_ACTIVE_STACK = 2,
121
+ FUNCTION_BLOCKED_ON_OTHER_STACK = 3,
122
+ FUNCTION_BLOCKED_UNDER_NATIVE_CODE = 4,
123
+ FUNCTION_REPLACED_ON_ACTIVE_STACK = 5
124
+ };
125
+
126
+ // Compares 2 strings line-by-line and returns diff in form of array of
127
+ // triplets (pos1, pos1_end, pos2_end) describing list of diff chunks.
128
+ static Handle<JSArray> CompareStringsLinewise(Handle<String> s1,
129
+ Handle<String> s2);
130
+ };
131
+
132
+
133
+ // A general-purpose comparator between 2 arrays.
134
+ class Comparator {
135
+ public:
136
+
137
+ // Holds 2 arrays of some elements allowing to compare any pair of
138
+ // element from the first array and element from the second array.
139
+ class Input {
140
+ public:
141
+ virtual int getLength1() = 0;
142
+ virtual int getLength2() = 0;
143
+ virtual bool equals(int index1, int index2) = 0;
144
+
145
+ protected:
146
+ virtual ~Input() {}
147
+ };
148
+
149
+ // Receives compare result as a series of chunks.
150
+ class Output {
151
+ public:
152
+ // Puts another chunk in result list. Note that technically speaking
153
+ // only 3 arguments actually needed with 4th being derivable.
154
+ virtual void AddChunk(int pos1, int pos2, int len1, int len2) = 0;
155
+
156
+ protected:
157
+ virtual ~Output() {}
158
+ };
159
+
160
+ // Finds the difference between 2 arrays of elements.
161
+ static void CalculateDifference(Input* input,
162
+ Output* result_writer);
163
+ };
164
+
165
+ #endif // ENABLE_DEBUGGER_SUPPORT
166
+
167
+
168
+ } } // namespace v8::internal
169
+
170
+ #endif /* V*_LIVEEDIT_H_ */
@@ -0,0 +1,59 @@
1
+ // Copyright 2006-2009 the V8 project authors. All rights reserved.
2
+ // Redistribution and use in source and binary forms, with or without
3
+ // modification, are permitted provided that the following conditions are
4
+ // met:
5
+ //
6
+ // * Redistributions of source code must retain the above copyright
7
+ // notice, this list of conditions and the following disclaimer.
8
+ // * Redistributions in binary form must reproduce the above
9
+ // copyright notice, this list of conditions and the following
10
+ // disclaimer in the documentation and/or other materials provided
11
+ // with the distribution.
12
+ // * Neither the name of Google Inc. nor the names of its
13
+ // contributors may be used to endorse or promote products derived
14
+ // from this software without specific prior written permission.
15
+ //
16
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+
28
+ #ifndef V8_LOG_INL_H_
29
+ #define V8_LOG_INL_H_
30
+
31
+ #include "log.h"
32
+ #include "cpu-profiler.h"
33
+
34
+ namespace v8 {
35
+ namespace internal {
36
+
37
+ #ifdef ENABLE_LOGGING_AND_PROFILING
38
+
39
+ Logger::LogEventsAndTags Logger::ToNativeByScript(Logger::LogEventsAndTags tag,
40
+ Script* script) {
41
+ if ((tag == FUNCTION_TAG || tag == LAZY_COMPILE_TAG || tag == SCRIPT_TAG)
42
+ && script->type()->value() == Script::TYPE_NATIVE) {
43
+ switch (tag) {
44
+ case FUNCTION_TAG: return NATIVE_FUNCTION_TAG;
45
+ case LAZY_COMPILE_TAG: return NATIVE_LAZY_COMPILE_TAG;
46
+ case SCRIPT_TAG: return NATIVE_SCRIPT_TAG;
47
+ default: return tag;
48
+ }
49
+ } else {
50
+ return tag;
51
+ }
52
+ }
53
+
54
+ #endif // ENABLE_LOGGING_AND_PROFILING
55
+
56
+
57
+ } } // namespace v8::internal
58
+
59
+ #endif // V8_LOG_INL_H_
@@ -196,6 +196,9 @@ int Log::GetLogLines(int from_pos, char* dest_buf, int max_size) {
196
196
  char* end_pos = dest_buf + actual_size - 1;
197
197
  while (end_pos >= dest_buf && *end_pos != '\n') --end_pos;
198
198
  actual_size = static_cast<int>(end_pos - dest_buf + 1);
199
+ // If the assertion below is hit, it means that there was no line end
200
+ // found --- something wrong has happened.
201
+ ASSERT(actual_size > 0);
199
202
  ASSERT(actual_size <= max_size);
200
203
  return actual_size;
201
204
  }
@@ -351,15 +354,6 @@ void LogMessageBuilder::WriteToLogFile() {
351
354
  }
352
355
 
353
356
 
354
- void LogMessageBuilder::WriteCStringToLogFile(const char* str) {
355
- const int len = StrLength(str);
356
- const int written = Log::Write(str, len);
357
- if (written != len && write_failure_handler != NULL) {
358
- write_failure_handler();
359
- }
360
- }
361
-
362
-
363
357
  // Formatting string for back references to the whole line. E.g. "#2" means
364
358
  // "the second line above".
365
359
  const char* LogRecordCompressor::kLineBackwardReferenceFormat = "#%d";
@@ -115,7 +115,7 @@ class Log : public AllStatic {
115
115
  }
116
116
 
117
117
  // Size of buffer used for formatting log messages.
118
- static const int kMessageBufferSize = 2048;
118
+ static const int kMessageBufferSize = v8::V8::kMinimumSizeForLogLinesBuffer;
119
119
 
120
120
  private:
121
121
  typedef int (*WritePtr)(const char* msg, int length);
@@ -268,9 +268,6 @@ class LogMessageBuilder BASE_EMBEDDED {
268
268
  // Write the log message to the log file currently opened.
269
269
  void WriteToLogFile();
270
270
 
271
- // Write a null-terminated string to to the log file currently opened.
272
- void WriteCStringToLogFile(const char* str);
273
-
274
271
  // A handler that is called when Log::Write fails.
275
272
  typedef void (*WriteFailureHandler)();
276
273
 
@@ -143,30 +143,32 @@ bool Profiler::paused_ = false;
143
143
  // StackTracer implementation
144
144
  //
145
145
  void StackTracer::Trace(TickSample* sample) {
146
- if (sample->state == GC) {
147
- sample->frames_count = 0;
148
- return;
149
- }
146
+ sample->function = NULL;
147
+ sample->frames_count = 0;
148
+
149
+ if (sample->state == GC) return;
150
150
 
151
151
  const Address js_entry_sp = Top::js_entry_sp(Top::GetCurrentThread());
152
152
  if (js_entry_sp == 0) {
153
153
  // Not executing JS now.
154
- sample->frames_count = 0;
155
154
  return;
156
155
  }
157
156
 
157
+ const Address functionAddr =
158
+ sample->fp + JavaScriptFrameConstants::kFunctionOffset;
159
+ if (SafeStackFrameIterator::IsWithinBounds(sample->sp, js_entry_sp,
160
+ functionAddr)) {
161
+ sample->function = Memory::Address_at(functionAddr) - kHeapObjectTag;
162
+ }
163
+
158
164
  int i = 0;
159
- const Address callback = Logger::current_state_ != NULL ?
160
- Logger::current_state_->external_callback() : NULL;
165
+ const Address callback = VMState::external_callback();
161
166
  if (callback != NULL) {
162
167
  sample->stack[i++] = callback;
163
168
  }
164
169
 
165
- SafeStackTraceFrameIterator it(
166
- reinterpret_cast<Address>(sample->fp),
167
- reinterpret_cast<Address>(sample->sp),
168
- reinterpret_cast<Address>(sample->sp),
169
- js_entry_sp);
170
+ SafeStackTraceFrameIterator it(sample->fp, sample->sp,
171
+ sample->sp, js_entry_sp);
170
172
  while (!it.done() && i < TickSample::kMaxFramesCount) {
171
173
  sample->stack[i++] = it.frame()->pc();
172
174
  it.Advance();
@@ -320,12 +322,12 @@ void Profiler::Run() {
320
322
  //
321
323
  Ticker* Logger::ticker_ = NULL;
322
324
  Profiler* Logger::profiler_ = NULL;
323
- VMState* Logger::current_state_ = NULL;
324
- VMState Logger::bottom_state_(EXTERNAL);
325
325
  SlidingStateWindow* Logger::sliding_state_window_ = NULL;
326
326
  const char** Logger::log_events_ = NULL;
327
327
  CompressionHelper* Logger::compression_helper_ = NULL;
328
- bool Logger::is_logging_ = false;
328
+ int Logger::logging_nesting_ = 0;
329
+ int Logger::cpu_profiler_nesting_ = 0;
330
+ int Logger::heap_profiler_nesting_ = 0;
329
331
 
330
332
  #define DECLARE_LONG_EVENT(ignore1, long_name, ignore2) long_name,
331
333
  const char* kLongLogEventsNames[Logger::NUMBER_OF_LOG_EVENTS] = {
@@ -364,15 +366,6 @@ void Logger::LogAliases() {
364
366
  #endif // ENABLE_LOGGING_AND_PROFILING
365
367
 
366
368
 
367
- void Logger::Preamble(const char* content) {
368
- #ifdef ENABLE_LOGGING_AND_PROFILING
369
- if (!Log::IsEnabled() || !FLAG_log_code) return;
370
- LogMessageBuilder msg;
371
- msg.WriteCStringToLogFile(content);
372
- #endif
373
- }
374
-
375
-
376
369
  void Logger::StringEvent(const char* name, const char* value) {
377
370
  #ifdef ENABLE_LOGGING_AND_PROFILING
378
371
  if (FLAG_log) UncheckedStringEvent(name, value);
@@ -392,12 +385,19 @@ void Logger::UncheckedStringEvent(const char* name, const char* value) {
392
385
 
393
386
  void Logger::IntEvent(const char* name, int value) {
394
387
  #ifdef ENABLE_LOGGING_AND_PROFILING
395
- if (!Log::IsEnabled() || !FLAG_log) return;
388
+ if (FLAG_log) UncheckedIntEvent(name, value);
389
+ #endif
390
+ }
391
+
392
+
393
+ #ifdef ENABLE_LOGGING_AND_PROFILING
394
+ void Logger::UncheckedIntEvent(const char* name, int value) {
395
+ if (!Log::IsEnabled()) return;
396
396
  LogMessageBuilder msg;
397
397
  msg.Append("%s,%d\n", name, value);
398
398
  msg.WriteToLogFile();
399
- #endif
400
399
  }
400
+ #endif
401
401
 
402
402
 
403
403
  void Logger::HandleEvent(const char* name, Object** location) {
@@ -837,10 +837,77 @@ void Logger::RegExpCodeCreateEvent(Code* code, String* source) {
837
837
 
838
838
  void Logger::CodeMoveEvent(Address from, Address to) {
839
839
  #ifdef ENABLE_LOGGING_AND_PROFILING
840
+ MoveEventInternal(CODE_MOVE_EVENT, from, to);
841
+ #endif
842
+ }
843
+
844
+
845
+ void Logger::CodeDeleteEvent(Address from) {
846
+ #ifdef ENABLE_LOGGING_AND_PROFILING
847
+ DeleteEventInternal(CODE_DELETE_EVENT, from);
848
+ #endif
849
+ }
850
+
851
+
852
+ void Logger::SnapshotPositionEvent(Address addr, int pos) {
853
+ #ifdef ENABLE_LOGGING_AND_PROFILING
854
+ if (!Log::IsEnabled() || !FLAG_log_snapshot_positions) return;
855
+ LogMessageBuilder msg;
856
+ msg.Append("%s,", log_events_[SNAPSHOT_POSITION_EVENT]);
857
+ msg.AppendAddress(addr);
858
+ msg.Append(",%d", pos);
859
+ if (FLAG_compress_log) {
860
+ ASSERT(compression_helper_ != NULL);
861
+ if (!compression_helper_->HandleMessage(&msg)) return;
862
+ }
863
+ msg.Append('\n');
864
+ msg.WriteToLogFile();
865
+ #endif
866
+ }
867
+
868
+
869
+ void Logger::FunctionCreateEvent(JSFunction* function) {
870
+ #ifdef ENABLE_LOGGING_AND_PROFILING
871
+ static Address prev_code = NULL;
872
+ if (!Log::IsEnabled() || !FLAG_log_code) return;
873
+ LogMessageBuilder msg;
874
+ msg.Append("%s,", log_events_[FUNCTION_CREATION_EVENT]);
875
+ msg.AppendAddress(function->address());
876
+ msg.Append(',');
877
+ msg.AppendAddress(function->code()->address(), prev_code);
878
+ prev_code = function->code()->address();
879
+ if (FLAG_compress_log) {
880
+ ASSERT(compression_helper_ != NULL);
881
+ if (!compression_helper_->HandleMessage(&msg)) return;
882
+ }
883
+ msg.Append('\n');
884
+ msg.WriteToLogFile();
885
+ #endif
886
+ }
887
+
888
+
889
+ void Logger::FunctionMoveEvent(Address from, Address to) {
890
+ #ifdef ENABLE_LOGGING_AND_PROFILING
891
+ MoveEventInternal(FUNCTION_MOVE_EVENT, from, to);
892
+ #endif
893
+ }
894
+
895
+
896
+ void Logger::FunctionDeleteEvent(Address from) {
897
+ #ifdef ENABLE_LOGGING_AND_PROFILING
898
+ DeleteEventInternal(FUNCTION_DELETE_EVENT, from);
899
+ #endif
900
+ }
901
+
902
+
903
+ #ifdef ENABLE_LOGGING_AND_PROFILING
904
+ void Logger::MoveEventInternal(LogEventsAndTags event,
905
+ Address from,
906
+ Address to) {
840
907
  static Address prev_to_ = NULL;
841
908
  if (!Log::IsEnabled() || !FLAG_log_code) return;
842
909
  LogMessageBuilder msg;
843
- msg.Append("%s,", log_events_[CODE_MOVE_EVENT]);
910
+ msg.Append("%s,", log_events_[event]);
844
911
  msg.AppendAddress(from);
845
912
  msg.Append(',');
846
913
  msg.AppendAddress(to, prev_to_);
@@ -851,15 +918,15 @@ void Logger::CodeMoveEvent(Address from, Address to) {
851
918
  }
852
919
  msg.Append('\n');
853
920
  msg.WriteToLogFile();
854
- #endif
855
921
  }
922
+ #endif
856
923
 
857
924
 
858
- void Logger::CodeDeleteEvent(Address from) {
859
925
  #ifdef ENABLE_LOGGING_AND_PROFILING
926
+ void Logger::DeleteEventInternal(LogEventsAndTags event, Address from) {
860
927
  if (!Log::IsEnabled() || !FLAG_log_code) return;
861
928
  LogMessageBuilder msg;
862
- msg.Append("%s,", log_events_[CODE_DELETE_EVENT]);
929
+ msg.Append("%s,", log_events_[event]);
863
930
  msg.AppendAddress(from);
864
931
  if (FLAG_compress_log) {
865
932
  ASSERT(compression_helper_ != NULL);
@@ -867,8 +934,8 @@ void Logger::CodeDeleteEvent(Address from) {
867
934
  }
868
935
  msg.Append('\n');
869
936
  msg.WriteToLogFile();
870
- #endif
871
937
  }
938
+ #endif
872
939
 
873
940
 
874
941
  void Logger::ResourceEvent(const char* name, const char* tag) {
@@ -1052,13 +1119,17 @@ void Logger::DebugEvent(const char* event_type, Vector<uint16_t> parameter) {
1052
1119
  void Logger::TickEvent(TickSample* sample, bool overflow) {
1053
1120
  if (!Log::IsEnabled() || !FLAG_prof) return;
1054
1121
  static Address prev_sp = NULL;
1122
+ static Address prev_function = NULL;
1055
1123
  LogMessageBuilder msg;
1056
1124
  msg.Append("%s,", log_events_[TICK_EVENT]);
1057
- Address prev_addr = reinterpret_cast<Address>(sample->pc);
1125
+ Address prev_addr = sample->pc;
1058
1126
  msg.AppendAddress(prev_addr);
1059
1127
  msg.Append(',');
1060
- msg.AppendAddress(reinterpret_cast<Address>(sample->sp), prev_sp);
1061
- prev_sp = reinterpret_cast<Address>(sample->sp);
1128
+ msg.AppendAddress(sample->sp, prev_sp);
1129
+ prev_sp = sample->sp;
1130
+ msg.Append(',');
1131
+ msg.AppendAddress(sample->function, prev_function);
1132
+ prev_function = sample->function;
1062
1133
  msg.Append(",%d", static_cast<int>(sample->state));
1063
1134
  if (overflow) {
1064
1135
  msg.Append(",overflow");
@@ -1089,52 +1160,60 @@ int Logger::GetActiveProfilerModules() {
1089
1160
  }
1090
1161
 
1091
1162
 
1092
- void Logger::PauseProfiler(int flags) {
1163
+ void Logger::PauseProfiler(int flags, int tag) {
1093
1164
  if (!Log::IsEnabled()) return;
1094
- const int active_modules = GetActiveProfilerModules();
1095
- const int modules_to_disable = active_modules & flags;
1096
- if (modules_to_disable == PROFILER_MODULE_NONE) return;
1097
-
1098
- if (modules_to_disable & PROFILER_MODULE_CPU) {
1099
- profiler_->pause();
1100
- if (FLAG_prof_lazy) {
1101
- if (!FLAG_sliding_state_window) ticker_->Stop();
1102
- FLAG_log_code = false;
1103
- // Must be the same message as Log::kDynamicBufferSeal.
1104
- LOG(UncheckedStringEvent("profiler", "pause"));
1165
+ if (flags & PROFILER_MODULE_CPU) {
1166
+ // It is OK to have negative nesting.
1167
+ if (--cpu_profiler_nesting_ == 0) {
1168
+ profiler_->pause();
1169
+ if (FLAG_prof_lazy) {
1170
+ if (!FLAG_sliding_state_window) ticker_->Stop();
1171
+ FLAG_log_code = false;
1172
+ // Must be the same message as Log::kDynamicBufferSeal.
1173
+ LOG(UncheckedStringEvent("profiler", "pause"));
1174
+ }
1175
+ --logging_nesting_;
1105
1176
  }
1106
1177
  }
1107
- if (modules_to_disable &
1178
+ if (flags &
1108
1179
  (PROFILER_MODULE_HEAP_STATS | PROFILER_MODULE_JS_CONSTRUCTORS)) {
1109
- FLAG_log_gc = false;
1180
+ if (--heap_profiler_nesting_ == 0) {
1181
+ FLAG_log_gc = false;
1182
+ --logging_nesting_;
1183
+ }
1110
1184
  }
1111
- // Turn off logging if no active modules remain.
1112
- if ((active_modules & ~flags) == PROFILER_MODULE_NONE) {
1113
- is_logging_ = false;
1185
+ if (tag != 0) {
1186
+ UncheckedIntEvent("close-tag", tag);
1114
1187
  }
1115
1188
  }
1116
1189
 
1117
1190
 
1118
- void Logger::ResumeProfiler(int flags) {
1191
+ void Logger::ResumeProfiler(int flags, int tag) {
1119
1192
  if (!Log::IsEnabled()) return;
1120
- const int modules_to_enable = ~GetActiveProfilerModules() & flags;
1121
- if (modules_to_enable != PROFILER_MODULE_NONE) {
1122
- is_logging_ = true;
1123
- }
1124
- if (modules_to_enable & PROFILER_MODULE_CPU) {
1125
- if (FLAG_prof_lazy) {
1126
- profiler_->Engage();
1127
- LOG(UncheckedStringEvent("profiler", "resume"));
1128
- FLAG_log_code = true;
1129
- LogCompiledFunctions();
1130
- LogAccessorCallbacks();
1131
- if (!FLAG_sliding_state_window) ticker_->Start();
1193
+ if (tag != 0) {
1194
+ UncheckedIntEvent("open-tag", tag);
1195
+ }
1196
+ if (flags & PROFILER_MODULE_CPU) {
1197
+ if (cpu_profiler_nesting_++ == 0) {
1198
+ ++logging_nesting_;
1199
+ if (FLAG_prof_lazy) {
1200
+ profiler_->Engage();
1201
+ LOG(UncheckedStringEvent("profiler", "resume"));
1202
+ FLAG_log_code = true;
1203
+ LogCompiledFunctions();
1204
+ LogFunctionObjects();
1205
+ LogAccessorCallbacks();
1206
+ if (!FLAG_sliding_state_window) ticker_->Start();
1207
+ }
1208
+ profiler_->resume();
1132
1209
  }
1133
- profiler_->resume();
1134
1210
  }
1135
- if (modules_to_enable &
1211
+ if (flags &
1136
1212
  (PROFILER_MODULE_HEAP_STATS | PROFILER_MODULE_JS_CONSTRUCTORS)) {
1137
- FLAG_log_gc = true;
1213
+ if (heap_profiler_nesting_++ == 0) {
1214
+ ++logging_nesting_;
1215
+ FLAG_log_gc = true;
1216
+ }
1138
1217
  }
1139
1218
  }
1140
1219
 
@@ -1143,7 +1222,7 @@ void Logger::ResumeProfiler(int flags) {
1143
1222
  // either from main or Profiler's thread.
1144
1223
  void Logger::StopLoggingAndProfiling() {
1145
1224
  Log::stop();
1146
- PauseProfiler(PROFILER_MODULE_CPU);
1225
+ PauseProfiler(PROFILER_MODULE_CPU, 0);
1147
1226
  }
1148
1227
 
1149
1228
 
@@ -1161,9 +1240,7 @@ static int EnumerateCompiledFunctions(Handle<SharedFunctionInfo>* sfis) {
1161
1240
  AssertNoAllocation no_alloc;
1162
1241
  int compiled_funcs_count = 0;
1163
1242
  HeapIterator iterator;
1164
- while (iterator.has_next()) {
1165
- HeapObject* obj = iterator.next();
1166
- ASSERT(obj != NULL);
1243
+ for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) {
1167
1244
  if (!obj->IsSharedFunctionInfo()) continue;
1168
1245
  SharedFunctionInfo* sfi = SharedFunctionInfo::cast(obj);
1169
1246
  if (sfi->is_compiled()
@@ -1186,8 +1263,12 @@ void Logger::LogCodeObject(Object* object) {
1186
1263
  switch (code_object->kind()) {
1187
1264
  case Code::FUNCTION:
1188
1265
  return; // We log this later using LogCompiledFunctions.
1266
+ case Code::BINARY_OP_IC:
1267
+ // fall through
1189
1268
  case Code::STUB:
1190
- description = CodeStub::MajorName(code_object->major_key());
1269
+ description = CodeStub::MajorName(code_object->major_key(), true);
1270
+ if (description == NULL)
1271
+ description = "A stub from the snapshot";
1191
1272
  tag = Logger::STUB_TAG;
1192
1273
  break;
1193
1274
  case Code::BUILTIN:
@@ -1215,7 +1296,16 @@ void Logger::LogCodeObject(Object* object) {
1215
1296
  tag = Logger::CALL_IC_TAG;
1216
1297
  break;
1217
1298
  }
1218
- LOG(CodeCreateEvent(tag, code_object, description));
1299
+ PROFILE(CodeCreateEvent(tag, code_object, description));
1300
+ }
1301
+ }
1302
+
1303
+
1304
+ void Logger::LogCodeObjects() {
1305
+ AssertNoAllocation no_alloc;
1306
+ HeapIterator iterator;
1307
+ for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) {
1308
+ if (obj->IsCode()) LogCodeObject(obj);
1219
1309
  }
1220
1310
  }
1221
1311
 
@@ -1240,31 +1330,33 @@ void Logger::LogCompiledFunctions() {
1240
1330
  Handle<String> script_name(String::cast(script->name()));
1241
1331
  int line_num = GetScriptLineNumber(script, shared->start_position());
1242
1332
  if (line_num > 0) {
1243
- LOG(CodeCreateEvent(Logger::LAZY_COMPILE_TAG,
1244
- shared->code(), *func_name,
1245
- *script_name, line_num + 1));
1333
+ PROFILE(CodeCreateEvent(
1334
+ Logger::ToNativeByScript(Logger::LAZY_COMPILE_TAG, *script),
1335
+ shared->code(), *func_name,
1336
+ *script_name, line_num + 1));
1246
1337
  } else {
1247
- // Can't distinguish enum and script here, so always use Script.
1248
- LOG(CodeCreateEvent(Logger::SCRIPT_TAG,
1249
- shared->code(), *script_name));
1338
+ // Can't distinguish eval and script here, so always use Script.
1339
+ PROFILE(CodeCreateEvent(
1340
+ Logger::ToNativeByScript(Logger::SCRIPT_TAG, *script),
1341
+ shared->code(), *script_name));
1250
1342
  }
1251
1343
  } else {
1252
- LOG(CodeCreateEvent(
1253
- Logger::LAZY_COMPILE_TAG, shared->code(), *func_name));
1344
+ PROFILE(CodeCreateEvent(
1345
+ Logger::ToNativeByScript(Logger::LAZY_COMPILE_TAG, *script),
1346
+ shared->code(), *func_name));
1254
1347
  }
1255
- } else if (shared->function_data()->IsFunctionTemplateInfo()) {
1348
+ } else if (shared->IsApiFunction()) {
1256
1349
  // API function.
1257
- FunctionTemplateInfo* fun_data =
1258
- FunctionTemplateInfo::cast(shared->function_data());
1350
+ FunctionTemplateInfo* fun_data = shared->get_api_func_data();
1259
1351
  Object* raw_call_data = fun_data->call_code();
1260
1352
  if (!raw_call_data->IsUndefined()) {
1261
1353
  CallHandlerInfo* call_data = CallHandlerInfo::cast(raw_call_data);
1262
1354
  Object* callback_obj = call_data->callback();
1263
1355
  Address entry_point = v8::ToCData<Address>(callback_obj);
1264
- LOG(CallbackEvent(*func_name, entry_point));
1356
+ PROFILE(CallbackEvent(*func_name, entry_point));
1265
1357
  }
1266
1358
  } else {
1267
- LOG(CodeCreateEvent(
1359
+ PROFILE(CodeCreateEvent(
1268
1360
  Logger::LAZY_COMPILE_TAG, shared->code(), *func_name));
1269
1361
  }
1270
1362
  }
@@ -1273,23 +1365,33 @@ void Logger::LogCompiledFunctions() {
1273
1365
  }
1274
1366
 
1275
1367
 
1368
+ void Logger::LogFunctionObjects() {
1369
+ AssertNoAllocation no_alloc;
1370
+ HeapIterator iterator;
1371
+ for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) {
1372
+ if (!obj->IsJSFunction()) continue;
1373
+ JSFunction* jsf = JSFunction::cast(obj);
1374
+ if (!jsf->is_compiled()) continue;
1375
+ PROFILE(FunctionCreateEvent(jsf));
1376
+ }
1377
+ }
1378
+
1379
+
1276
1380
  void Logger::LogAccessorCallbacks() {
1277
1381
  AssertNoAllocation no_alloc;
1278
1382
  HeapIterator iterator;
1279
- while (iterator.has_next()) {
1280
- HeapObject* obj = iterator.next();
1281
- ASSERT(obj != NULL);
1383
+ for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) {
1282
1384
  if (!obj->IsAccessorInfo()) continue;
1283
1385
  AccessorInfo* ai = AccessorInfo::cast(obj);
1284
1386
  if (!ai->name()->IsString()) continue;
1285
1387
  String* name = String::cast(ai->name());
1286
1388
  Address getter_entry = v8::ToCData<Address>(ai->getter());
1287
1389
  if (getter_entry != 0) {
1288
- LOG(GetterCallbackEvent(name, getter_entry));
1390
+ PROFILE(GetterCallbackEvent(name, getter_entry));
1289
1391
  }
1290
1392
  Address setter_entry = v8::ToCData<Address>(ai->setter());
1291
1393
  if (setter_entry != 0) {
1292
- LOG(SetterCallbackEvent(name, setter_entry));
1394
+ PROFILE(SetterCallbackEvent(name, setter_entry));
1293
1395
  }
1294
1396
  }
1295
1397
  }
@@ -1372,7 +1474,7 @@ bool Logger::Setup() {
1372
1474
  }
1373
1475
  }
1374
1476
 
1375
- current_state_ = &bottom_state_;
1477
+ ASSERT(VMState::is_outermost_external());
1376
1478
 
1377
1479
  ticker_ = new Ticker(kSamplingIntervalMs);
1378
1480
 
@@ -1386,14 +1488,16 @@ bool Logger::Setup() {
1386
1488
  compression_helper_ = new CompressionHelper(kCompressionWindowSize);
1387
1489
  }
1388
1490
 
1389
- is_logging_ = start_logging;
1491
+ if (start_logging) {
1492
+ logging_nesting_ = 1;
1493
+ }
1390
1494
 
1391
1495
  if (FLAG_prof) {
1392
1496
  profiler_ = new Profiler();
1393
1497
  if (!FLAG_prof_auto) {
1394
1498
  profiler_->pause();
1395
1499
  } else {
1396
- is_logging_ = true;
1500
+ logging_nesting_ = 1;
1397
1501
  }
1398
1502
  if (!FLAG_prof_lazy) {
1399
1503
  profiler_->Engage();
@@ -1453,5 +1557,4 @@ void Logger::EnableSlidingStateWindow() {
1453
1557
  #endif
1454
1558
  }
1455
1559
 
1456
-
1457
1560
  } } // namespace v8::internal