libv8 3.11.8.17 → 3.16.14.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (754) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -2
  3. data/Gemfile +1 -1
  4. data/Rakefile +6 -7
  5. data/lib/libv8/version.rb +1 -1
  6. data/vendor/v8/.gitignore +24 -3
  7. data/vendor/v8/AUTHORS +7 -0
  8. data/vendor/v8/ChangeLog +839 -0
  9. data/vendor/v8/DEPS +1 -1
  10. data/vendor/v8/Makefile.android +92 -0
  11. data/vendor/v8/OWNERS +11 -0
  12. data/vendor/v8/PRESUBMIT.py +71 -0
  13. data/vendor/v8/SConstruct +34 -39
  14. data/vendor/v8/build/android.gypi +56 -37
  15. data/vendor/v8/build/common.gypi +112 -30
  16. data/vendor/v8/build/gyp_v8 +1 -1
  17. data/vendor/v8/build/standalone.gypi +15 -11
  18. data/vendor/v8/include/v8-debug.h +9 -1
  19. data/vendor/v8/include/v8-preparser.h +4 -3
  20. data/vendor/v8/include/v8-profiler.h +25 -25
  21. data/vendor/v8/include/v8-testing.h +4 -3
  22. data/vendor/v8/include/v8.h +994 -540
  23. data/vendor/v8/preparser/preparser-process.cc +3 -3
  24. data/vendor/v8/samples/lineprocessor.cc +20 -27
  25. data/vendor/v8/samples/process.cc +18 -14
  26. data/vendor/v8/samples/shell.cc +16 -15
  27. data/vendor/v8/src/SConscript +15 -14
  28. data/vendor/v8/src/accessors.cc +169 -77
  29. data/vendor/v8/src/accessors.h +4 -0
  30. data/vendor/v8/src/allocation-inl.h +2 -2
  31. data/vendor/v8/src/allocation.h +7 -7
  32. data/vendor/v8/src/api.cc +810 -497
  33. data/vendor/v8/src/api.h +85 -60
  34. data/vendor/v8/src/arm/assembler-arm-inl.h +179 -22
  35. data/vendor/v8/src/arm/assembler-arm.cc +633 -264
  36. data/vendor/v8/src/arm/assembler-arm.h +264 -197
  37. data/vendor/v8/src/arm/builtins-arm.cc +117 -27
  38. data/vendor/v8/src/arm/code-stubs-arm.cc +1241 -700
  39. data/vendor/v8/src/arm/code-stubs-arm.h +35 -138
  40. data/vendor/v8/src/arm/codegen-arm.cc +285 -16
  41. data/vendor/v8/src/arm/codegen-arm.h +22 -0
  42. data/vendor/v8/src/arm/constants-arm.cc +5 -3
  43. data/vendor/v8/src/arm/constants-arm.h +24 -11
  44. data/vendor/v8/src/arm/debug-arm.cc +3 -3
  45. data/vendor/v8/src/arm/deoptimizer-arm.cc +382 -92
  46. data/vendor/v8/src/arm/disasm-arm.cc +61 -12
  47. data/vendor/v8/src/arm/frames-arm.h +0 -14
  48. data/vendor/v8/src/arm/full-codegen-arm.cc +332 -304
  49. data/vendor/v8/src/arm/ic-arm.cc +180 -259
  50. data/vendor/v8/src/arm/lithium-arm.cc +364 -316
  51. data/vendor/v8/src/arm/lithium-arm.h +512 -275
  52. data/vendor/v8/src/arm/lithium-codegen-arm.cc +1768 -809
  53. data/vendor/v8/src/arm/lithium-codegen-arm.h +97 -35
  54. data/vendor/v8/src/arm/lithium-gap-resolver-arm.cc +12 -5
  55. data/vendor/v8/src/arm/macro-assembler-arm.cc +439 -228
  56. data/vendor/v8/src/arm/macro-assembler-arm.h +116 -70
  57. data/vendor/v8/src/arm/regexp-macro-assembler-arm.cc +54 -44
  58. data/vendor/v8/src/arm/regexp-macro-assembler-arm.h +3 -10
  59. data/vendor/v8/src/arm/simulator-arm.cc +272 -238
  60. data/vendor/v8/src/arm/simulator-arm.h +38 -8
  61. data/vendor/v8/src/arm/stub-cache-arm.cc +522 -895
  62. data/vendor/v8/src/array.js +101 -70
  63. data/vendor/v8/src/assembler.cc +270 -19
  64. data/vendor/v8/src/assembler.h +110 -15
  65. data/vendor/v8/src/ast.cc +79 -69
  66. data/vendor/v8/src/ast.h +255 -301
  67. data/vendor/v8/src/atomicops.h +7 -1
  68. data/vendor/v8/src/atomicops_internals_tsan.h +335 -0
  69. data/vendor/v8/src/bootstrapper.cc +481 -418
  70. data/vendor/v8/src/bootstrapper.h +4 -4
  71. data/vendor/v8/src/builtins.cc +498 -311
  72. data/vendor/v8/src/builtins.h +75 -47
  73. data/vendor/v8/src/checks.cc +2 -1
  74. data/vendor/v8/src/checks.h +8 -0
  75. data/vendor/v8/src/code-stubs-hydrogen.cc +253 -0
  76. data/vendor/v8/src/code-stubs.cc +249 -84
  77. data/vendor/v8/src/code-stubs.h +501 -169
  78. data/vendor/v8/src/codegen.cc +36 -18
  79. data/vendor/v8/src/codegen.h +25 -3
  80. data/vendor/v8/src/collection.js +54 -17
  81. data/vendor/v8/src/compilation-cache.cc +24 -16
  82. data/vendor/v8/src/compilation-cache.h +15 -6
  83. data/vendor/v8/src/compiler.cc +497 -195
  84. data/vendor/v8/src/compiler.h +246 -38
  85. data/vendor/v8/src/contexts.cc +64 -24
  86. data/vendor/v8/src/contexts.h +60 -29
  87. data/vendor/v8/src/conversions-inl.h +24 -14
  88. data/vendor/v8/src/conversions.h +7 -4
  89. data/vendor/v8/src/counters.cc +21 -12
  90. data/vendor/v8/src/counters.h +44 -16
  91. data/vendor/v8/src/cpu-profiler.h +1 -1
  92. data/vendor/v8/src/d8-debug.cc +2 -2
  93. data/vendor/v8/src/d8-readline.cc +13 -2
  94. data/vendor/v8/src/d8.cc +681 -273
  95. data/vendor/v8/src/d8.gyp +4 -4
  96. data/vendor/v8/src/d8.h +38 -18
  97. data/vendor/v8/src/d8.js +0 -617
  98. data/vendor/v8/src/data-flow.h +55 -0
  99. data/vendor/v8/src/date.js +1 -42
  100. data/vendor/v8/src/dateparser-inl.h +5 -1
  101. data/vendor/v8/src/debug-agent.cc +10 -15
  102. data/vendor/v8/src/debug-debugger.js +147 -149
  103. data/vendor/v8/src/debug.cc +323 -164
  104. data/vendor/v8/src/debug.h +26 -14
  105. data/vendor/v8/src/deoptimizer.cc +765 -290
  106. data/vendor/v8/src/deoptimizer.h +130 -28
  107. data/vendor/v8/src/disassembler.cc +10 -4
  108. data/vendor/v8/src/elements-kind.cc +7 -2
  109. data/vendor/v8/src/elements-kind.h +19 -0
  110. data/vendor/v8/src/elements.cc +607 -285
  111. data/vendor/v8/src/elements.h +36 -13
  112. data/vendor/v8/src/execution.cc +52 -31
  113. data/vendor/v8/src/execution.h +4 -4
  114. data/vendor/v8/src/extensions/externalize-string-extension.cc +5 -4
  115. data/vendor/v8/src/extensions/gc-extension.cc +5 -1
  116. data/vendor/v8/src/extensions/statistics-extension.cc +153 -0
  117. data/vendor/v8/src/{inspector.h → extensions/statistics-extension.h} +12 -23
  118. data/vendor/v8/src/factory.cc +101 -134
  119. data/vendor/v8/src/factory.h +36 -31
  120. data/vendor/v8/src/flag-definitions.h +102 -25
  121. data/vendor/v8/src/flags.cc +9 -5
  122. data/vendor/v8/src/frames-inl.h +10 -0
  123. data/vendor/v8/src/frames.cc +116 -26
  124. data/vendor/v8/src/frames.h +96 -12
  125. data/vendor/v8/src/full-codegen.cc +219 -74
  126. data/vendor/v8/src/full-codegen.h +63 -21
  127. data/vendor/v8/src/func-name-inferrer.cc +8 -7
  128. data/vendor/v8/src/func-name-inferrer.h +5 -3
  129. data/vendor/v8/src/gdb-jit.cc +71 -57
  130. data/vendor/v8/src/global-handles.cc +230 -101
  131. data/vendor/v8/src/global-handles.h +26 -27
  132. data/vendor/v8/src/globals.h +17 -19
  133. data/vendor/v8/src/handles-inl.h +59 -12
  134. data/vendor/v8/src/handles.cc +180 -200
  135. data/vendor/v8/src/handles.h +80 -11
  136. data/vendor/v8/src/hashmap.h +60 -40
  137. data/vendor/v8/src/heap-inl.h +107 -45
  138. data/vendor/v8/src/heap-profiler.cc +38 -19
  139. data/vendor/v8/src/heap-profiler.h +24 -14
  140. data/vendor/v8/src/heap.cc +1123 -738
  141. data/vendor/v8/src/heap.h +385 -146
  142. data/vendor/v8/src/hydrogen-instructions.cc +700 -217
  143. data/vendor/v8/src/hydrogen-instructions.h +1158 -472
  144. data/vendor/v8/src/hydrogen.cc +3319 -1662
  145. data/vendor/v8/src/hydrogen.h +411 -170
  146. data/vendor/v8/src/ia32/assembler-ia32-inl.h +46 -16
  147. data/vendor/v8/src/ia32/assembler-ia32.cc +131 -61
  148. data/vendor/v8/src/ia32/assembler-ia32.h +115 -57
  149. data/vendor/v8/src/ia32/builtins-ia32.cc +99 -5
  150. data/vendor/v8/src/ia32/code-stubs-ia32.cc +787 -495
  151. data/vendor/v8/src/ia32/code-stubs-ia32.h +10 -100
  152. data/vendor/v8/src/ia32/codegen-ia32.cc +227 -23
  153. data/vendor/v8/src/ia32/codegen-ia32.h +14 -0
  154. data/vendor/v8/src/ia32/deoptimizer-ia32.cc +428 -87
  155. data/vendor/v8/src/ia32/disasm-ia32.cc +28 -1
  156. data/vendor/v8/src/ia32/frames-ia32.h +6 -16
  157. data/vendor/v8/src/ia32/full-codegen-ia32.cc +280 -272
  158. data/vendor/v8/src/ia32/ic-ia32.cc +150 -250
  159. data/vendor/v8/src/ia32/lithium-codegen-ia32.cc +1600 -517
  160. data/vendor/v8/src/ia32/lithium-codegen-ia32.h +90 -24
  161. data/vendor/v8/src/ia32/lithium-gap-resolver-ia32.cc +10 -6
  162. data/vendor/v8/src/ia32/lithium-gap-resolver-ia32.h +2 -2
  163. data/vendor/v8/src/ia32/lithium-ia32.cc +405 -302
  164. data/vendor/v8/src/ia32/lithium-ia32.h +526 -271
  165. data/vendor/v8/src/ia32/macro-assembler-ia32.cc +378 -119
  166. data/vendor/v8/src/ia32/macro-assembler-ia32.h +62 -28
  167. data/vendor/v8/src/ia32/regexp-macro-assembler-ia32.cc +43 -30
  168. data/vendor/v8/src/ia32/regexp-macro-assembler-ia32.h +2 -10
  169. data/vendor/v8/src/ia32/stub-cache-ia32.cc +492 -678
  170. data/vendor/v8/src/ic-inl.h +9 -4
  171. data/vendor/v8/src/ic.cc +836 -923
  172. data/vendor/v8/src/ic.h +228 -247
  173. data/vendor/v8/src/incremental-marking-inl.h +26 -30
  174. data/vendor/v8/src/incremental-marking.cc +276 -248
  175. data/vendor/v8/src/incremental-marking.h +29 -37
  176. data/vendor/v8/src/interface.cc +34 -25
  177. data/vendor/v8/src/interface.h +69 -25
  178. data/vendor/v8/src/interpreter-irregexp.cc +2 -2
  179. data/vendor/v8/src/isolate.cc +382 -76
  180. data/vendor/v8/src/isolate.h +109 -56
  181. data/vendor/v8/src/json-parser.h +217 -104
  182. data/vendor/v8/src/json-stringifier.h +745 -0
  183. data/vendor/v8/src/json.js +10 -132
  184. data/vendor/v8/src/jsregexp-inl.h +106 -0
  185. data/vendor/v8/src/jsregexp.cc +517 -285
  186. data/vendor/v8/src/jsregexp.h +145 -117
  187. data/vendor/v8/src/list-inl.h +35 -22
  188. data/vendor/v8/src/list.h +46 -19
  189. data/vendor/v8/src/lithium-allocator-inl.h +22 -2
  190. data/vendor/v8/src/lithium-allocator.cc +85 -70
  191. data/vendor/v8/src/lithium-allocator.h +21 -39
  192. data/vendor/v8/src/lithium.cc +259 -5
  193. data/vendor/v8/src/lithium.h +131 -32
  194. data/vendor/v8/src/liveedit-debugger.js +52 -3
  195. data/vendor/v8/src/liveedit.cc +393 -113
  196. data/vendor/v8/src/liveedit.h +7 -3
  197. data/vendor/v8/src/log-utils.cc +4 -2
  198. data/vendor/v8/src/log.cc +170 -140
  199. data/vendor/v8/src/log.h +62 -11
  200. data/vendor/v8/src/macro-assembler.h +17 -0
  201. data/vendor/v8/src/macros.py +2 -0
  202. data/vendor/v8/src/mark-compact-inl.h +3 -23
  203. data/vendor/v8/src/mark-compact.cc +801 -830
  204. data/vendor/v8/src/mark-compact.h +154 -47
  205. data/vendor/v8/src/marking-thread.cc +85 -0
  206. data/vendor/v8/src/{inspector.cc → marking-thread.h} +32 -24
  207. data/vendor/v8/src/math.js +12 -18
  208. data/vendor/v8/src/messages.cc +18 -8
  209. data/vendor/v8/src/messages.js +314 -261
  210. data/vendor/v8/src/mips/assembler-mips-inl.h +58 -6
  211. data/vendor/v8/src/mips/assembler-mips.cc +92 -75
  212. data/vendor/v8/src/mips/assembler-mips.h +54 -60
  213. data/vendor/v8/src/mips/builtins-mips.cc +116 -17
  214. data/vendor/v8/src/mips/code-stubs-mips.cc +919 -556
  215. data/vendor/v8/src/mips/code-stubs-mips.h +22 -131
  216. data/vendor/v8/src/mips/codegen-mips.cc +281 -6
  217. data/vendor/v8/src/mips/codegen-mips.h +22 -0
  218. data/vendor/v8/src/mips/constants-mips.cc +2 -0
  219. data/vendor/v8/src/mips/constants-mips.h +12 -2
  220. data/vendor/v8/src/mips/deoptimizer-mips.cc +286 -50
  221. data/vendor/v8/src/mips/disasm-mips.cc +13 -0
  222. data/vendor/v8/src/mips/full-codegen-mips.cc +297 -284
  223. data/vendor/v8/src/mips/ic-mips.cc +182 -263
  224. data/vendor/v8/src/mips/lithium-codegen-mips.cc +1208 -556
  225. data/vendor/v8/src/mips/lithium-codegen-mips.h +72 -19
  226. data/vendor/v8/src/mips/lithium-gap-resolver-mips.cc +9 -2
  227. data/vendor/v8/src/mips/lithium-mips.cc +290 -302
  228. data/vendor/v8/src/mips/lithium-mips.h +463 -266
  229. data/vendor/v8/src/mips/macro-assembler-mips.cc +208 -115
  230. data/vendor/v8/src/mips/macro-assembler-mips.h +67 -24
  231. data/vendor/v8/src/mips/regexp-macro-assembler-mips.cc +40 -25
  232. data/vendor/v8/src/mips/regexp-macro-assembler-mips.h +3 -9
  233. data/vendor/v8/src/mips/simulator-mips.cc +112 -40
  234. data/vendor/v8/src/mips/simulator-mips.h +5 -0
  235. data/vendor/v8/src/mips/stub-cache-mips.cc +502 -884
  236. data/vendor/v8/src/mirror-debugger.js +157 -30
  237. data/vendor/v8/src/mksnapshot.cc +88 -14
  238. data/vendor/v8/src/object-observe.js +235 -0
  239. data/vendor/v8/src/objects-debug.cc +178 -176
  240. data/vendor/v8/src/objects-inl.h +1333 -486
  241. data/vendor/v8/src/objects-printer.cc +125 -43
  242. data/vendor/v8/src/objects-visiting-inl.h +578 -6
  243. data/vendor/v8/src/objects-visiting.cc +2 -2
  244. data/vendor/v8/src/objects-visiting.h +172 -79
  245. data/vendor/v8/src/objects.cc +3533 -2885
  246. data/vendor/v8/src/objects.h +1352 -1131
  247. data/vendor/v8/src/optimizing-compiler-thread.cc +152 -0
  248. data/vendor/v8/src/optimizing-compiler-thread.h +111 -0
  249. data/vendor/v8/src/parser.cc +390 -500
  250. data/vendor/v8/src/parser.h +45 -33
  251. data/vendor/v8/src/platform-cygwin.cc +10 -21
  252. data/vendor/v8/src/platform-freebsd.cc +36 -41
  253. data/vendor/v8/src/platform-linux.cc +160 -124
  254. data/vendor/v8/src/platform-macos.cc +30 -27
  255. data/vendor/v8/src/platform-nullos.cc +17 -1
  256. data/vendor/v8/src/platform-openbsd.cc +19 -50
  257. data/vendor/v8/src/platform-posix.cc +14 -0
  258. data/vendor/v8/src/platform-solaris.cc +20 -53
  259. data/vendor/v8/src/platform-win32.cc +49 -26
  260. data/vendor/v8/src/platform.h +40 -1
  261. data/vendor/v8/src/preparser.cc +8 -5
  262. data/vendor/v8/src/preparser.h +2 -2
  263. data/vendor/v8/src/prettyprinter.cc +16 -0
  264. data/vendor/v8/src/prettyprinter.h +2 -0
  265. data/vendor/v8/src/profile-generator-inl.h +1 -0
  266. data/vendor/v8/src/profile-generator.cc +209 -147
  267. data/vendor/v8/src/profile-generator.h +15 -12
  268. data/vendor/v8/src/property-details.h +46 -31
  269. data/vendor/v8/src/property.cc +27 -46
  270. data/vendor/v8/src/property.h +163 -83
  271. data/vendor/v8/src/proxy.js +7 -2
  272. data/vendor/v8/src/regexp-macro-assembler-irregexp.cc +4 -13
  273. data/vendor/v8/src/regexp-macro-assembler-irregexp.h +1 -2
  274. data/vendor/v8/src/regexp-macro-assembler-tracer.cc +1 -11
  275. data/vendor/v8/src/regexp-macro-assembler-tracer.h +0 -1
  276. data/vendor/v8/src/regexp-macro-assembler.cc +31 -14
  277. data/vendor/v8/src/regexp-macro-assembler.h +14 -11
  278. data/vendor/v8/src/regexp-stack.cc +1 -0
  279. data/vendor/v8/src/regexp.js +9 -8
  280. data/vendor/v8/src/rewriter.cc +18 -7
  281. data/vendor/v8/src/runtime-profiler.cc +52 -43
  282. data/vendor/v8/src/runtime-profiler.h +0 -25
  283. data/vendor/v8/src/runtime.cc +2006 -2023
  284. data/vendor/v8/src/runtime.h +56 -49
  285. data/vendor/v8/src/safepoint-table.cc +12 -18
  286. data/vendor/v8/src/safepoint-table.h +11 -8
  287. data/vendor/v8/src/scanner.cc +1 -0
  288. data/vendor/v8/src/scanner.h +4 -10
  289. data/vendor/v8/src/scopeinfo.cc +35 -9
  290. data/vendor/v8/src/scopeinfo.h +64 -3
  291. data/vendor/v8/src/scopes.cc +251 -156
  292. data/vendor/v8/src/scopes.h +61 -27
  293. data/vendor/v8/src/serialize.cc +348 -396
  294. data/vendor/v8/src/serialize.h +125 -114
  295. data/vendor/v8/src/small-pointer-list.h +11 -11
  296. data/vendor/v8/src/{smart-array-pointer.h → smart-pointers.h} +64 -15
  297. data/vendor/v8/src/snapshot-common.cc +64 -15
  298. data/vendor/v8/src/snapshot-empty.cc +7 -1
  299. data/vendor/v8/src/snapshot.h +9 -2
  300. data/vendor/v8/src/spaces-inl.h +17 -0
  301. data/vendor/v8/src/spaces.cc +477 -183
  302. data/vendor/v8/src/spaces.h +238 -58
  303. data/vendor/v8/src/splay-tree-inl.h +8 -7
  304. data/vendor/v8/src/splay-tree.h +24 -10
  305. data/vendor/v8/src/store-buffer.cc +12 -5
  306. data/vendor/v8/src/store-buffer.h +2 -4
  307. data/vendor/v8/src/string-search.h +22 -6
  308. data/vendor/v8/src/string-stream.cc +11 -8
  309. data/vendor/v8/src/string.js +47 -15
  310. data/vendor/v8/src/stub-cache.cc +461 -224
  311. data/vendor/v8/src/stub-cache.h +164 -102
  312. data/vendor/v8/src/sweeper-thread.cc +105 -0
  313. data/vendor/v8/src/sweeper-thread.h +81 -0
  314. data/vendor/v8/src/token.h +1 -0
  315. data/vendor/v8/src/transitions-inl.h +220 -0
  316. data/vendor/v8/src/transitions.cc +160 -0
  317. data/vendor/v8/src/transitions.h +207 -0
  318. data/vendor/v8/src/type-info.cc +182 -181
  319. data/vendor/v8/src/type-info.h +31 -19
  320. data/vendor/v8/src/unicode-inl.h +62 -106
  321. data/vendor/v8/src/unicode.cc +57 -67
  322. data/vendor/v8/src/unicode.h +45 -91
  323. data/vendor/v8/src/uri.js +57 -29
  324. data/vendor/v8/src/utils.h +105 -5
  325. data/vendor/v8/src/v8-counters.cc +54 -11
  326. data/vendor/v8/src/v8-counters.h +134 -19
  327. data/vendor/v8/src/v8.cc +29 -29
  328. data/vendor/v8/src/v8.h +1 -0
  329. data/vendor/v8/src/v8conversions.cc +26 -22
  330. data/vendor/v8/src/v8globals.h +56 -43
  331. data/vendor/v8/src/v8natives.js +83 -30
  332. data/vendor/v8/src/v8threads.cc +42 -21
  333. data/vendor/v8/src/v8threads.h +4 -1
  334. data/vendor/v8/src/v8utils.cc +9 -93
  335. data/vendor/v8/src/v8utils.h +37 -33
  336. data/vendor/v8/src/variables.cc +6 -3
  337. data/vendor/v8/src/variables.h +6 -13
  338. data/vendor/v8/src/version.cc +2 -2
  339. data/vendor/v8/src/vm-state-inl.h +11 -0
  340. data/vendor/v8/src/x64/assembler-x64-inl.h +39 -8
  341. data/vendor/v8/src/x64/assembler-x64.cc +78 -64
  342. data/vendor/v8/src/x64/assembler-x64.h +38 -33
  343. data/vendor/v8/src/x64/builtins-x64.cc +105 -7
  344. data/vendor/v8/src/x64/code-stubs-x64.cc +790 -413
  345. data/vendor/v8/src/x64/code-stubs-x64.h +10 -106
  346. data/vendor/v8/src/x64/codegen-x64.cc +210 -8
  347. data/vendor/v8/src/x64/codegen-x64.h +20 -1
  348. data/vendor/v8/src/x64/deoptimizer-x64.cc +336 -75
  349. data/vendor/v8/src/x64/disasm-x64.cc +15 -0
  350. data/vendor/v8/src/x64/frames-x64.h +0 -14
  351. data/vendor/v8/src/x64/full-codegen-x64.cc +293 -270
  352. data/vendor/v8/src/x64/ic-x64.cc +153 -251
  353. data/vendor/v8/src/x64/lithium-codegen-x64.cc +1379 -531
  354. data/vendor/v8/src/x64/lithium-codegen-x64.h +67 -23
  355. data/vendor/v8/src/x64/lithium-gap-resolver-x64.cc +2 -2
  356. data/vendor/v8/src/x64/lithium-x64.cc +349 -289
  357. data/vendor/v8/src/x64/lithium-x64.h +460 -250
  358. data/vendor/v8/src/x64/macro-assembler-x64.cc +350 -177
  359. data/vendor/v8/src/x64/macro-assembler-x64.h +67 -49
  360. data/vendor/v8/src/x64/regexp-macro-assembler-x64.cc +46 -33
  361. data/vendor/v8/src/x64/regexp-macro-assembler-x64.h +2 -3
  362. data/vendor/v8/src/x64/stub-cache-x64.cc +484 -653
  363. data/vendor/v8/src/zone-inl.h +9 -27
  364. data/vendor/v8/src/zone.cc +5 -5
  365. data/vendor/v8/src/zone.h +53 -27
  366. data/vendor/v8/test/benchmarks/testcfg.py +5 -0
  367. data/vendor/v8/test/cctest/cctest.cc +4 -0
  368. data/vendor/v8/test/cctest/cctest.gyp +3 -1
  369. data/vendor/v8/test/cctest/cctest.h +57 -9
  370. data/vendor/v8/test/cctest/cctest.status +15 -15
  371. data/vendor/v8/test/cctest/test-accessors.cc +26 -0
  372. data/vendor/v8/test/cctest/test-alloc.cc +22 -30
  373. data/vendor/v8/test/cctest/test-api.cc +1943 -314
  374. data/vendor/v8/test/cctest/test-assembler-arm.cc +133 -13
  375. data/vendor/v8/test/cctest/test-assembler-ia32.cc +1 -1
  376. data/vendor/v8/test/cctest/test-assembler-mips.cc +12 -0
  377. data/vendor/v8/test/cctest/test-ast.cc +4 -2
  378. data/vendor/v8/test/cctest/test-compiler.cc +61 -29
  379. data/vendor/v8/test/cctest/test-dataflow.cc +2 -2
  380. data/vendor/v8/test/cctest/test-debug.cc +212 -33
  381. data/vendor/v8/test/cctest/test-decls.cc +257 -11
  382. data/vendor/v8/test/cctest/test-dictionary.cc +24 -10
  383. data/vendor/v8/test/cctest/test-disasm-arm.cc +118 -1
  384. data/vendor/v8/test/cctest/test-disasm-ia32.cc +3 -2
  385. data/vendor/v8/test/cctest/test-flags.cc +14 -1
  386. data/vendor/v8/test/cctest/test-func-name-inference.cc +7 -4
  387. data/vendor/v8/test/cctest/test-global-object.cc +51 -0
  388. data/vendor/v8/test/cctest/test-hashing.cc +32 -23
  389. data/vendor/v8/test/cctest/test-heap-profiler.cc +131 -77
  390. data/vendor/v8/test/cctest/test-heap.cc +1084 -143
  391. data/vendor/v8/test/cctest/test-list.cc +1 -1
  392. data/vendor/v8/test/cctest/test-liveedit.cc +3 -2
  393. data/vendor/v8/test/cctest/test-lockers.cc +12 -13
  394. data/vendor/v8/test/cctest/test-log.cc +10 -8
  395. data/vendor/v8/test/cctest/test-macro-assembler-x64.cc +2 -2
  396. data/vendor/v8/test/cctest/test-mark-compact.cc +44 -22
  397. data/vendor/v8/test/cctest/test-object-observe.cc +434 -0
  398. data/vendor/v8/test/cctest/test-parsing.cc +86 -39
  399. data/vendor/v8/test/cctest/test-platform-linux.cc +6 -0
  400. data/vendor/v8/test/cctest/test-platform-win32.cc +7 -0
  401. data/vendor/v8/test/cctest/test-random.cc +5 -4
  402. data/vendor/v8/test/cctest/test-regexp.cc +137 -101
  403. data/vendor/v8/test/cctest/test-serialize.cc +150 -230
  404. data/vendor/v8/test/cctest/test-sockets.cc +1 -1
  405. data/vendor/v8/test/cctest/test-spaces.cc +139 -0
  406. data/vendor/v8/test/cctest/test-strings.cc +736 -74
  407. data/vendor/v8/test/cctest/test-thread-termination.cc +10 -11
  408. data/vendor/v8/test/cctest/test-threads.cc +4 -4
  409. data/vendor/v8/test/cctest/test-utils.cc +16 -0
  410. data/vendor/v8/test/cctest/test-weakmaps.cc +7 -3
  411. data/vendor/v8/test/cctest/testcfg.py +64 -5
  412. data/vendor/v8/test/es5conform/testcfg.py +5 -0
  413. data/vendor/v8/test/message/message.status +1 -1
  414. data/vendor/v8/test/message/overwritten-builtins.out +3 -0
  415. data/vendor/v8/test/message/testcfg.py +89 -8
  416. data/vendor/v8/test/message/try-catch-finally-no-message.out +26 -26
  417. data/vendor/v8/test/mjsunit/accessor-map-sharing.js +18 -2
  418. data/vendor/v8/test/mjsunit/allocation-site-info.js +126 -0
  419. data/vendor/v8/test/mjsunit/array-bounds-check-removal.js +62 -1
  420. data/vendor/v8/test/mjsunit/array-iteration.js +1 -1
  421. data/vendor/v8/test/mjsunit/array-literal-transitions.js +2 -0
  422. data/vendor/v8/test/mjsunit/array-natives-elements.js +317 -0
  423. data/vendor/v8/test/mjsunit/array-reduce.js +8 -8
  424. data/vendor/v8/test/mjsunit/array-slice.js +12 -0
  425. data/vendor/v8/test/mjsunit/array-store-and-grow.js +4 -1
  426. data/vendor/v8/test/mjsunit/assert-opt-and-deopt.js +1 -1
  427. data/vendor/v8/test/mjsunit/bugs/bug-2337.js +53 -0
  428. data/vendor/v8/test/mjsunit/compare-known-objects-slow.js +69 -0
  429. data/vendor/v8/test/mjsunit/compiler/alloc-object-huge.js +3 -1
  430. data/vendor/v8/test/mjsunit/compiler/inline-accessors.js +368 -0
  431. data/vendor/v8/test/mjsunit/compiler/inline-arguments.js +87 -1
  432. data/vendor/v8/test/mjsunit/compiler/inline-closures.js +49 -0
  433. data/vendor/v8/test/mjsunit/compiler/inline-construct.js +55 -43
  434. data/vendor/v8/test/mjsunit/compiler/inline-literals.js +39 -0
  435. data/vendor/v8/test/mjsunit/compiler/multiply-add.js +69 -0
  436. data/vendor/v8/test/mjsunit/compiler/optimized-closures.js +57 -0
  437. data/vendor/v8/test/mjsunit/compiler/parallel-proto-change.js +44 -0
  438. data/vendor/v8/test/mjsunit/compiler/property-static.js +69 -0
  439. data/vendor/v8/test/mjsunit/compiler/proto-chain-constant.js +55 -0
  440. data/vendor/v8/test/mjsunit/compiler/proto-chain-load.js +44 -0
  441. data/vendor/v8/test/mjsunit/compiler/regress-gvn.js +3 -2
  442. data/vendor/v8/test/mjsunit/compiler/regress-or.js +6 -2
  443. data/vendor/v8/test/mjsunit/compiler/rotate.js +224 -0
  444. data/vendor/v8/test/mjsunit/compiler/uint32.js +173 -0
  445. data/vendor/v8/test/mjsunit/count-based-osr.js +2 -1
  446. data/vendor/v8/test/mjsunit/d8-os.js +3 -3
  447. data/vendor/v8/test/mjsunit/date-parse.js +3 -0
  448. data/vendor/v8/test/mjsunit/date.js +22 -0
  449. data/vendor/v8/test/mjsunit/debug-break-inline.js +1 -0
  450. data/vendor/v8/test/mjsunit/debug-evaluate-locals-optimized-double.js +22 -12
  451. data/vendor/v8/test/mjsunit/debug-evaluate-locals-optimized.js +21 -10
  452. data/vendor/v8/test/mjsunit/debug-liveedit-compile-error.js +60 -0
  453. data/vendor/v8/test/mjsunit/debug-liveedit-double-call.js +142 -0
  454. data/vendor/v8/test/mjsunit/debug-liveedit-literals.js +94 -0
  455. data/vendor/v8/test/mjsunit/debug-liveedit-restart-frame.js +153 -0
  456. data/vendor/v8/test/mjsunit/debug-multiple-breakpoints.js +1 -1
  457. data/vendor/v8/test/mjsunit/debug-script-breakpoints-closure.js +67 -0
  458. data/vendor/v8/test/mjsunit/debug-script-breakpoints-nested.js +82 -0
  459. data/vendor/v8/test/mjsunit/debug-script.js +4 -2
  460. data/vendor/v8/test/mjsunit/debug-set-variable-value.js +308 -0
  461. data/vendor/v8/test/mjsunit/debug-stepout-scope-part1.js +190 -0
  462. data/vendor/v8/test/mjsunit/debug-stepout-scope-part2.js +83 -0
  463. data/vendor/v8/test/mjsunit/debug-stepout-scope-part3.js +80 -0
  464. data/vendor/v8/test/mjsunit/debug-stepout-scope-part4.js +80 -0
  465. data/vendor/v8/test/mjsunit/debug-stepout-scope-part5.js +77 -0
  466. data/vendor/v8/test/mjsunit/debug-stepout-scope-part6.js +79 -0
  467. data/vendor/v8/test/mjsunit/debug-stepout-scope-part7.js +79 -0
  468. data/vendor/v8/test/mjsunit/{debug-stepout-scope.js → debug-stepout-scope-part8.js} +0 -189
  469. data/vendor/v8/test/mjsunit/delete-non-configurable.js +74 -0
  470. data/vendor/v8/test/mjsunit/deopt-minus-zero.js +56 -0
  471. data/vendor/v8/test/mjsunit/elements-kind.js +6 -4
  472. data/vendor/v8/test/mjsunit/elements-length-no-holey.js +33 -0
  473. data/vendor/v8/test/mjsunit/elements-transition-hoisting.js +46 -19
  474. data/vendor/v8/test/mjsunit/error-accessors.js +54 -0
  475. data/vendor/v8/test/mjsunit/error-constructors.js +1 -14
  476. data/vendor/v8/test/mjsunit/error-tostring.js +8 -0
  477. data/vendor/v8/test/mjsunit/eval-stack-trace.js +204 -0
  478. data/vendor/v8/test/mjsunit/external-array.js +364 -1
  479. data/vendor/v8/test/mjsunit/fast-array-length.js +37 -0
  480. data/vendor/v8/test/mjsunit/fast-non-keyed.js +113 -0
  481. data/vendor/v8/test/mjsunit/fast-prototype.js +117 -0
  482. data/vendor/v8/test/mjsunit/function-call.js +14 -18
  483. data/vendor/v8/test/mjsunit/fuzz-natives-part1.js +230 -0
  484. data/vendor/v8/test/mjsunit/fuzz-natives-part2.js +229 -0
  485. data/vendor/v8/test/mjsunit/fuzz-natives-part3.js +229 -0
  486. data/vendor/v8/test/mjsunit/{fuzz-natives.js → fuzz-natives-part4.js} +12 -2
  487. data/vendor/v8/test/mjsunit/generated-transition-stub.js +218 -0
  488. data/vendor/v8/test/mjsunit/greedy.js +1 -1
  489. data/vendor/v8/test/mjsunit/harmony/block-conflicts.js +2 -1
  490. data/vendor/v8/test/mjsunit/harmony/block-let-crankshaft.js +1 -1
  491. data/vendor/v8/test/mjsunit/harmony/collections.js +69 -11
  492. data/vendor/v8/test/mjsunit/harmony/debug-blockscopes.js +2 -2
  493. data/vendor/v8/test/mjsunit/harmony/module-linking.js +180 -3
  494. data/vendor/v8/test/mjsunit/harmony/module-parsing.js +31 -0
  495. data/vendor/v8/test/mjsunit/harmony/module-recompile.js +87 -0
  496. data/vendor/v8/test/mjsunit/harmony/module-resolution.js +15 -2
  497. data/vendor/v8/test/mjsunit/harmony/object-observe.js +1056 -0
  498. data/vendor/v8/test/mjsunit/harmony/proxies-json.js +178 -0
  499. data/vendor/v8/test/mjsunit/harmony/proxies.js +25 -10
  500. data/vendor/v8/test/mjsunit/json-parser-recursive.js +33 -0
  501. data/vendor/v8/test/mjsunit/json-stringify-recursive.js +52 -0
  502. data/vendor/v8/test/mjsunit/json.js +38 -2
  503. data/vendor/v8/test/mjsunit/json2.js +153 -0
  504. data/vendor/v8/test/mjsunit/limit-locals.js +5 -4
  505. data/vendor/v8/test/mjsunit/manual-parallel-recompile.js +79 -0
  506. data/vendor/v8/test/mjsunit/math-exp-precision.js +64 -0
  507. data/vendor/v8/test/mjsunit/math-floor-negative.js +59 -0
  508. data/vendor/v8/test/mjsunit/math-floor-of-div-minus-zero.js +41 -0
  509. data/vendor/v8/test/mjsunit/math-floor-of-div-nosudiv.js +288 -0
  510. data/vendor/v8/test/mjsunit/math-floor-of-div.js +81 -9
  511. data/vendor/v8/test/mjsunit/{math-floor.js → math-floor-part1.js} +1 -72
  512. data/vendor/v8/test/mjsunit/math-floor-part2.js +76 -0
  513. data/vendor/v8/test/mjsunit/math-floor-part3.js +78 -0
  514. data/vendor/v8/test/mjsunit/math-floor-part4.js +76 -0
  515. data/vendor/v8/test/mjsunit/mirror-object.js +43 -9
  516. data/vendor/v8/test/mjsunit/mjsunit.js +1 -1
  517. data/vendor/v8/test/mjsunit/mjsunit.status +52 -27
  518. data/vendor/v8/test/mjsunit/mul-exhaustive-part1.js +491 -0
  519. data/vendor/v8/test/mjsunit/mul-exhaustive-part10.js +470 -0
  520. data/vendor/v8/test/mjsunit/mul-exhaustive-part2.js +525 -0
  521. data/vendor/v8/test/mjsunit/mul-exhaustive-part3.js +532 -0
  522. data/vendor/v8/test/mjsunit/mul-exhaustive-part4.js +509 -0
  523. data/vendor/v8/test/mjsunit/mul-exhaustive-part5.js +505 -0
  524. data/vendor/v8/test/mjsunit/mul-exhaustive-part6.js +554 -0
  525. data/vendor/v8/test/mjsunit/mul-exhaustive-part7.js +497 -0
  526. data/vendor/v8/test/mjsunit/mul-exhaustive-part8.js +526 -0
  527. data/vendor/v8/test/mjsunit/mul-exhaustive-part9.js +533 -0
  528. data/vendor/v8/test/mjsunit/new-function.js +34 -0
  529. data/vendor/v8/test/mjsunit/numops-fuzz-part1.js +1172 -0
  530. data/vendor/v8/test/mjsunit/numops-fuzz-part2.js +1178 -0
  531. data/vendor/v8/test/mjsunit/numops-fuzz-part3.js +1178 -0
  532. data/vendor/v8/test/mjsunit/numops-fuzz-part4.js +1177 -0
  533. data/vendor/v8/test/mjsunit/object-define-property.js +107 -2
  534. data/vendor/v8/test/mjsunit/override-read-only-property.js +6 -4
  535. data/vendor/v8/test/mjsunit/packed-elements.js +2 -2
  536. data/vendor/v8/test/mjsunit/parse-int-float.js +4 -4
  537. data/vendor/v8/test/mjsunit/pixel-array-rounding.js +1 -1
  538. data/vendor/v8/test/mjsunit/readonly.js +228 -0
  539. data/vendor/v8/test/mjsunit/regexp-capture-3.js +16 -18
  540. data/vendor/v8/test/mjsunit/regexp-capture.js +2 -0
  541. data/vendor/v8/test/mjsunit/regexp-global.js +122 -0
  542. data/vendor/v8/test/mjsunit/regexp-results-cache.js +78 -0
  543. data/vendor/v8/test/mjsunit/regress/regress-1117.js +12 -3
  544. data/vendor/v8/test/mjsunit/regress/regress-1118.js +1 -1
  545. data/vendor/v8/test/mjsunit/regress/regress-115100.js +36 -0
  546. data/vendor/v8/test/mjsunit/regress/regress-1199637.js +1 -3
  547. data/vendor/v8/test/mjsunit/regress/regress-121407.js +1 -1
  548. data/vendor/v8/test/mjsunit/regress/regress-131923.js +30 -0
  549. data/vendor/v8/test/mjsunit/regress/regress-131994.js +70 -0
  550. data/vendor/v8/test/mjsunit/regress/regress-133211.js +35 -0
  551. data/vendor/v8/test/mjsunit/regress/regress-133211b.js +39 -0
  552. data/vendor/v8/test/mjsunit/regress/regress-136048.js +34 -0
  553. data/vendor/v8/test/mjsunit/regress/regress-137768.js +73 -0
  554. data/vendor/v8/test/mjsunit/regress/regress-143967.js +34 -0
  555. data/vendor/v8/test/mjsunit/regress/regress-145201.js +107 -0
  556. data/vendor/v8/test/mjsunit/regress/regress-147497.js +45 -0
  557. data/vendor/v8/test/mjsunit/regress/regress-148378.js +38 -0
  558. data/vendor/v8/test/mjsunit/regress/regress-1563.js +1 -1
  559. data/vendor/v8/test/mjsunit/regress/regress-1591.js +48 -0
  560. data/vendor/v8/test/mjsunit/regress/regress-164442.js +45 -0
  561. data/vendor/v8/test/mjsunit/regress/regress-165637.js +61 -0
  562. data/vendor/v8/test/mjsunit/regress/regress-166379.js +39 -0
  563. data/vendor/v8/test/mjsunit/regress/regress-166553.js +33 -0
  564. data/vendor/v8/test/mjsunit/regress/regress-1692.js +1 -1
  565. data/vendor/v8/test/mjsunit/regress/regress-171641.js +40 -0
  566. data/vendor/v8/test/mjsunit/regress/regress-1980.js +1 -1
  567. data/vendor/v8/test/mjsunit/regress/regress-2073.js +99 -0
  568. data/vendor/v8/test/mjsunit/regress/regress-2119.js +36 -0
  569. data/vendor/v8/test/mjsunit/regress/regress-2156.js +39 -0
  570. data/vendor/v8/test/mjsunit/regress/regress-2163.js +70 -0
  571. data/vendor/v8/test/mjsunit/regress/regress-2170.js +58 -0
  572. data/vendor/v8/test/mjsunit/regress/regress-2172.js +35 -0
  573. data/vendor/v8/test/mjsunit/regress/regress-2185-2.js +145 -0
  574. data/vendor/v8/test/mjsunit/regress/regress-2185.js +38 -0
  575. data/vendor/v8/test/mjsunit/regress/regress-2186.js +49 -0
  576. data/vendor/v8/test/mjsunit/regress/regress-2193.js +58 -0
  577. data/vendor/v8/test/mjsunit/regress/regress-2219.js +32 -0
  578. data/vendor/v8/test/mjsunit/regress/regress-2225.js +65 -0
  579. data/vendor/v8/test/mjsunit/regress/regress-2226.js +36 -0
  580. data/vendor/v8/test/mjsunit/regress/regress-2234.js +41 -0
  581. data/vendor/v8/test/mjsunit/regress/regress-2243.js +31 -0
  582. data/vendor/v8/test/mjsunit/regress/regress-2249.js +33 -0
  583. data/vendor/v8/test/mjsunit/regress/regress-2250.js +68 -0
  584. data/vendor/v8/test/mjsunit/regress/regress-2261.js +113 -0
  585. data/vendor/v8/test/mjsunit/regress/regress-2263.js +30 -0
  586. data/vendor/v8/test/mjsunit/regress/regress-2284.js +32 -0
  587. data/vendor/v8/test/mjsunit/regress/regress-2285.js +32 -0
  588. data/vendor/v8/test/mjsunit/regress/regress-2286.js +32 -0
  589. data/vendor/v8/test/mjsunit/regress/regress-2289.js +34 -0
  590. data/vendor/v8/test/mjsunit/regress/regress-2291.js +36 -0
  591. data/vendor/v8/test/mjsunit/regress/regress-2294.js +70 -0
  592. data/vendor/v8/test/mjsunit/regress/regress-2296.js +40 -0
  593. data/vendor/v8/test/mjsunit/regress/regress-2315.js +40 -0
  594. data/vendor/v8/test/mjsunit/regress/regress-2318.js +66 -0
  595. data/vendor/v8/test/mjsunit/regress/regress-2322.js +36 -0
  596. data/vendor/v8/test/mjsunit/regress/regress-2326.js +54 -0
  597. data/vendor/v8/test/mjsunit/regress/regress-2336.js +53 -0
  598. data/vendor/v8/test/mjsunit/regress/regress-2339.js +59 -0
  599. data/vendor/v8/test/mjsunit/regress/regress-2346.js +123 -0
  600. data/vendor/v8/test/mjsunit/regress/regress-2373.js +29 -0
  601. data/vendor/v8/test/mjsunit/regress/regress-2374.js +33 -0
  602. data/vendor/v8/test/mjsunit/regress/regress-2398.js +41 -0
  603. data/vendor/v8/test/mjsunit/regress/regress-2410.js +36 -0
  604. data/vendor/v8/test/mjsunit/regress/regress-2416.js +75 -0
  605. data/vendor/v8/test/mjsunit/regress/regress-2419.js +37 -0
  606. data/vendor/v8/test/mjsunit/regress/regress-2433.js +36 -0
  607. data/vendor/v8/test/mjsunit/regress/regress-2437.js +156 -0
  608. data/vendor/v8/test/mjsunit/regress/regress-2438.js +52 -0
  609. data/vendor/v8/test/mjsunit/regress/regress-2443.js +129 -0
  610. data/vendor/v8/test/mjsunit/regress/regress-2444.js +120 -0
  611. data/vendor/v8/test/mjsunit/regress/regress-2489.js +50 -0
  612. data/vendor/v8/test/mjsunit/regress/regress-2499.js +40 -0
  613. data/vendor/v8/test/mjsunit/regress/regress-334.js +1 -1
  614. data/vendor/v8/test/mjsunit/regress/regress-492.js +39 -1
  615. data/vendor/v8/test/mjsunit/regress/regress-builtin-array-op.js +38 -0
  616. data/vendor/v8/test/mjsunit/regress/regress-cnlt-elements.js +43 -0
  617. data/vendor/v8/test/mjsunit/regress/regress-cnlt-enum-indices.js +45 -0
  618. data/vendor/v8/test/mjsunit/regress/regress-cntl-descriptors-enum.js +46 -0
  619. data/vendor/v8/test/mjsunit/regress/regress-convert-enum.js +60 -0
  620. data/vendor/v8/test/mjsunit/regress/regress-convert-enum2.js +46 -0
  621. data/vendor/v8/test/mjsunit/regress/regress-convert-transition.js +40 -0
  622. data/vendor/v8/test/mjsunit/regress/regress-crbug-119926.js +3 -1
  623. data/vendor/v8/test/mjsunit/regress/regress-crbug-125148.js +90 -0
  624. data/vendor/v8/test/mjsunit/regress/regress-crbug-134055.js +63 -0
  625. data/vendor/v8/test/mjsunit/regress/regress-crbug-134609.js +59 -0
  626. data/vendor/v8/test/mjsunit/regress/regress-crbug-135008.js +45 -0
  627. data/vendor/v8/test/mjsunit/regress/regress-crbug-135066.js +55 -0
  628. data/vendor/v8/test/mjsunit/regress/regress-crbug-137689.js +47 -0
  629. data/vendor/v8/test/mjsunit/regress/regress-crbug-138887.js +48 -0
  630. data/vendor/v8/test/mjsunit/regress/regress-crbug-140083.js +44 -0
  631. data/vendor/v8/test/mjsunit/regress/regress-crbug-142087.js +38 -0
  632. data/vendor/v8/test/mjsunit/regress/regress-crbug-142218.js +44 -0
  633. data/vendor/v8/test/mjsunit/regress/regress-crbug-145961.js +39 -0
  634. data/vendor/v8/test/mjsunit/regress/regress-crbug-146910.js +33 -0
  635. data/vendor/v8/test/mjsunit/regress/regress-crbug-147475.js +48 -0
  636. data/vendor/v8/test/mjsunit/regress/regress-crbug-148376.js +35 -0
  637. data/vendor/v8/test/mjsunit/regress/regress-crbug-150545.js +53 -0
  638. data/vendor/v8/test/mjsunit/regress/regress-crbug-150729.js +39 -0
  639. data/vendor/v8/test/mjsunit/regress/regress-crbug-157019.js +54 -0
  640. data/vendor/v8/test/mjsunit/regress/regress-crbug-157520.js +38 -0
  641. data/vendor/v8/test/mjsunit/regress/regress-crbug-158185.js +39 -0
  642. data/vendor/v8/test/mjsunit/regress/regress-crbug-160010.js +35 -0
  643. data/vendor/v8/test/mjsunit/regress/regress-crbug-162085.js +71 -0
  644. data/vendor/v8/test/mjsunit/regress/regress-crbug-168545.js +34 -0
  645. data/vendor/v8/test/mjsunit/regress/regress-crbug-170856.js +33 -0
  646. data/vendor/v8/test/mjsunit/regress/regress-crbug-172345.js +34 -0
  647. data/vendor/v8/test/mjsunit/regress/regress-crbug-173974.js +36 -0
  648. data/vendor/v8/test/mjsunit/regress/regress-crbug-18639.js +9 -5
  649. data/vendor/v8/test/mjsunit/regress/regress-debug-code-recompilation.js +2 -1
  650. data/vendor/v8/test/mjsunit/regress/regress-deep-proto.js +45 -0
  651. data/vendor/v8/test/mjsunit/regress/regress-delete-empty-double.js +40 -0
  652. data/vendor/v8/test/mjsunit/regress/regress-iteration-order.js +42 -0
  653. data/vendor/v8/test/mjsunit/regress/regress-json-stringify-gc.js +41 -0
  654. data/vendor/v8/test/mjsunit/regress/regress-latin-1.js +78 -0
  655. data/vendor/v8/test/mjsunit/regress/regress-load-elements.js +49 -0
  656. data/vendor/v8/test/mjsunit/regress/regress-observe-empty-double-array.js +38 -0
  657. data/vendor/v8/test/mjsunit/regress/regress-undefined-store-keyed-fast-element.js +37 -0
  658. data/vendor/v8/test/mjsunit/shift-for-integer-div.js +59 -0
  659. data/vendor/v8/test/mjsunit/stack-traces-gc.js +119 -0
  660. data/vendor/v8/test/mjsunit/stack-traces-overflow.js +122 -0
  661. data/vendor/v8/test/mjsunit/stack-traces.js +39 -1
  662. data/vendor/v8/test/mjsunit/str-to-num.js +7 -2
  663. data/vendor/v8/test/mjsunit/strict-mode.js +36 -11
  664. data/vendor/v8/test/mjsunit/string-charcodeat.js +3 -0
  665. data/vendor/v8/test/mjsunit/string-natives.js +72 -0
  666. data/vendor/v8/test/mjsunit/string-split.js +17 -0
  667. data/vendor/v8/test/mjsunit/testcfg.py +76 -6
  668. data/vendor/v8/test/mjsunit/tools/tickprocessor.js +4 -1
  669. data/vendor/v8/test/mjsunit/try-finally-continue.js +72 -0
  670. data/vendor/v8/test/mjsunit/typed-array-slice.js +61 -0
  671. data/vendor/v8/test/mjsunit/unbox-double-arrays.js +2 -0
  672. data/vendor/v8/test/mjsunit/uri.js +12 -0
  673. data/vendor/v8/test/mjsunit/with-readonly.js +4 -2
  674. data/vendor/v8/test/mozilla/mozilla.status +19 -113
  675. data/vendor/v8/test/mozilla/testcfg.py +122 -3
  676. data/vendor/v8/test/preparser/preparser.status +5 -0
  677. data/vendor/v8/test/preparser/strict-identifiers.pyt +1 -1
  678. data/vendor/v8/test/preparser/testcfg.py +101 -5
  679. data/vendor/v8/test/sputnik/sputnik.status +1 -1
  680. data/vendor/v8/test/sputnik/testcfg.py +5 -0
  681. data/vendor/v8/test/test262/README +2 -2
  682. data/vendor/v8/test/test262/test262.status +13 -36
  683. data/vendor/v8/test/test262/testcfg.py +102 -8
  684. data/vendor/v8/tools/android-build.sh +0 -0
  685. data/vendor/v8/tools/android-ll-prof.sh +69 -0
  686. data/vendor/v8/tools/android-run.py +109 -0
  687. data/vendor/v8/tools/android-sync.sh +105 -0
  688. data/vendor/v8/tools/bash-completion.sh +0 -0
  689. data/vendor/v8/tools/check-static-initializers.sh +0 -0
  690. data/vendor/v8/tools/common-includes.sh +15 -22
  691. data/vendor/v8/tools/disasm.py +4 -4
  692. data/vendor/v8/tools/fuzz-harness.sh +0 -0
  693. data/vendor/v8/tools/gen-postmortem-metadata.py +6 -8
  694. data/vendor/v8/tools/grokdump.py +404 -129
  695. data/vendor/v8/tools/gyp/v8.gyp +105 -43
  696. data/vendor/v8/tools/linux-tick-processor +5 -5
  697. data/vendor/v8/tools/ll_prof.py +75 -15
  698. data/vendor/v8/tools/merge-to-branch.sh +2 -2
  699. data/vendor/v8/tools/plot-timer-events +70 -0
  700. data/vendor/v8/tools/plot-timer-events.js +510 -0
  701. data/vendor/v8/tools/presubmit.py +1 -0
  702. data/vendor/v8/tools/push-to-trunk.sh +14 -4
  703. data/vendor/v8/tools/run-llprof.sh +69 -0
  704. data/vendor/v8/tools/run-tests.py +372 -0
  705. data/vendor/v8/tools/run-valgrind.py +1 -1
  706. data/vendor/v8/tools/status-file-converter.py +39 -0
  707. data/vendor/v8/tools/test-server.py +224 -0
  708. data/vendor/v8/tools/test-wrapper-gypbuild.py +13 -16
  709. data/vendor/v8/tools/test.py +10 -19
  710. data/vendor/v8/tools/testrunner/README +174 -0
  711. data/vendor/v8/tools/testrunner/__init__.py +26 -0
  712. data/vendor/v8/tools/testrunner/local/__init__.py +26 -0
  713. data/vendor/v8/tools/testrunner/local/commands.py +153 -0
  714. data/vendor/v8/tools/testrunner/local/execution.py +182 -0
  715. data/vendor/v8/tools/testrunner/local/old_statusfile.py +460 -0
  716. data/vendor/v8/tools/testrunner/local/progress.py +238 -0
  717. data/vendor/v8/tools/testrunner/local/statusfile.py +145 -0
  718. data/vendor/v8/tools/testrunner/local/testsuite.py +187 -0
  719. data/vendor/v8/tools/testrunner/local/utils.py +108 -0
  720. data/vendor/v8/tools/testrunner/local/verbose.py +99 -0
  721. data/vendor/v8/tools/testrunner/network/__init__.py +26 -0
  722. data/vendor/v8/tools/testrunner/network/distro.py +90 -0
  723. data/vendor/v8/tools/testrunner/network/endpoint.py +124 -0
  724. data/vendor/v8/tools/testrunner/network/network_execution.py +253 -0
  725. data/vendor/v8/tools/testrunner/network/perfdata.py +120 -0
  726. data/vendor/v8/tools/testrunner/objects/__init__.py +26 -0
  727. data/vendor/v8/tools/testrunner/objects/context.py +50 -0
  728. data/vendor/v8/tools/testrunner/objects/output.py +60 -0
  729. data/vendor/v8/tools/testrunner/objects/peer.py +80 -0
  730. data/vendor/v8/tools/testrunner/objects/testcase.py +83 -0
  731. data/vendor/v8/tools/testrunner/objects/workpacket.py +90 -0
  732. data/vendor/v8/tools/testrunner/server/__init__.py +26 -0
  733. data/vendor/v8/tools/testrunner/server/compression.py +111 -0
  734. data/vendor/v8/tools/testrunner/server/constants.py +51 -0
  735. data/vendor/v8/tools/testrunner/server/daemon.py +147 -0
  736. data/vendor/v8/tools/testrunner/server/local_handler.py +119 -0
  737. data/vendor/v8/tools/testrunner/server/main.py +245 -0
  738. data/vendor/v8/tools/testrunner/server/presence_handler.py +120 -0
  739. data/vendor/v8/tools/testrunner/server/signatures.py +63 -0
  740. data/vendor/v8/tools/testrunner/server/status_handler.py +112 -0
  741. data/vendor/v8/tools/testrunner/server/work_handler.py +150 -0
  742. data/vendor/v8/tools/tick-processor.html +168 -0
  743. data/vendor/v8/tools/tickprocessor-driver.js +5 -3
  744. data/vendor/v8/tools/tickprocessor.js +58 -15
  745. metadata +534 -30
  746. data/patches/add-freebsd9-and-freebsd10-to-gyp-GetFlavor.patch +0 -11
  747. data/patches/do-not-imply-vfp3-and-armv7.patch +0 -44
  748. data/patches/fPIC-on-x64.patch +0 -14
  749. data/vendor/v8/src/liveobjectlist-inl.h +0 -126
  750. data/vendor/v8/src/liveobjectlist.cc +0 -2631
  751. data/vendor/v8/src/liveobjectlist.h +0 -319
  752. data/vendor/v8/test/mjsunit/mul-exhaustive.js +0 -4629
  753. data/vendor/v8/test/mjsunit/numops-fuzz.js +0 -4609
  754. data/vendor/v8/test/mjsunit/regress/regress-1969.js +0 -5045
data/vendor/v8/src/heap.h CHANGED
@@ -64,7 +64,7 @@ namespace internal {
64
64
  V(Map, ascii_symbol_map, AsciiSymbolMap) \
65
65
  V(Map, ascii_string_map, AsciiStringMap) \
66
66
  V(Map, heap_number_map, HeapNumberMap) \
67
- V(Map, global_context_map, GlobalContextMap) \
67
+ V(Map, native_context_map, NativeContextMap) \
68
68
  V(Map, fixed_array_map, FixedArrayMap) \
69
69
  V(Map, code_map, CodeMap) \
70
70
  V(Map, scope_info_map, ScopeInfoMap) \
@@ -87,6 +87,7 @@ namespace internal {
87
87
  V(Object, instanceof_cache_answer, InstanceofCacheAnswer) \
88
88
  V(FixedArray, single_character_string_cache, SingleCharacterStringCache) \
89
89
  V(FixedArray, string_split_cache, StringSplitCache) \
90
+ V(FixedArray, regexp_multiple_cache, RegExpMultipleCache) \
90
91
  V(Object, termination_exception, TerminationException) \
91
92
  V(Smi, hash_seed, HashSeed) \
92
93
  V(Map, string_map, StringMap) \
@@ -130,6 +131,7 @@ namespace internal {
130
131
  V(Map, with_context_map, WithContextMap) \
131
132
  V(Map, block_context_map, BlockContextMap) \
132
133
  V(Map, module_context_map, ModuleContextMap) \
134
+ V(Map, global_context_map, GlobalContextMap) \
133
135
  V(Map, oddball_map, OddballMap) \
134
136
  V(Map, message_object_map, JSMessageObjectMap) \
135
137
  V(Map, foreign_map, ForeignMap) \
@@ -150,7 +152,11 @@ namespace internal {
150
152
  V(Smi, real_stack_limit, RealStackLimit) \
151
153
  V(StringDictionary, intrinsic_function_names, IntrinsicFunctionNames) \
152
154
  V(Smi, arguments_adaptor_deopt_pc_offset, ArgumentsAdaptorDeoptPCOffset) \
153
- V(Smi, construct_stub_deopt_pc_offset, ConstructStubDeoptPCOffset)
155
+ V(Smi, construct_stub_deopt_pc_offset, ConstructStubDeoptPCOffset) \
156
+ V(Smi, getter_stub_deopt_pc_offset, GetterStubDeoptPCOffset) \
157
+ V(Smi, setter_stub_deopt_pc_offset, SetterStubDeoptPCOffset) \
158
+ V(JSObject, observation_state, ObservationState) \
159
+ V(Map, external_map, ExternalMap)
154
160
 
155
161
  #define ROOT_LIST(V) \
156
162
  STRONG_ROOT_LIST(V) \
@@ -172,6 +178,7 @@ namespace internal {
172
178
  V(constructor_symbol, "constructor") \
173
179
  V(code_symbol, ".code") \
174
180
  V(result_symbol, ".result") \
181
+ V(dot_for_symbol, ".for.") \
175
182
  V(catch_var_symbol, ".catch-var") \
176
183
  V(empty_symbol, "") \
177
184
  V(eval_symbol, "eval") \
@@ -202,6 +209,7 @@ namespace internal {
202
209
  V(char_at_symbol, "CharAt") \
203
210
  V(undefined_symbol, "undefined") \
204
211
  V(value_of_symbol, "valueOf") \
212
+ V(stack_symbol, "stack") \
205
213
  V(InitializeVarGlobal_symbol, "InitializeVarGlobal") \
206
214
  V(InitializeConstGlobal_symbol, "InitializeConstGlobal") \
207
215
  V(KeyedLoadElementMonomorphic_symbol, \
@@ -216,6 +224,9 @@ namespace internal {
216
224
  V(illegal_execution_state_symbol, "illegal execution state") \
217
225
  V(get_symbol, "get") \
218
226
  V(set_symbol, "set") \
227
+ V(map_field_symbol, "%map") \
228
+ V(elements_field_symbol, "%elements") \
229
+ V(length_field_symbol, "%length") \
219
230
  V(function_class_symbol, "Function") \
220
231
  V(illegal_argument_symbol, "illegal argument") \
221
232
  V(MakeReferenceError_symbol, "MakeReferenceError") \
@@ -240,7 +251,8 @@ namespace internal {
240
251
  V(use_strict, "use strict") \
241
252
  V(dot_symbol, ".") \
242
253
  V(anonymous_function_symbol, "(anonymous function)") \
243
- V(compare_ic_symbol, ".compare_ic") \
254
+ V(compare_ic_symbol, "==") \
255
+ V(strict_compare_ic_symbol, "===") \
244
256
  V(infinity_symbol, "Infinity") \
245
257
  V(minus_infinity_symbol, "-Infinity") \
246
258
  V(hidden_stack_trace_symbol, "v8::hidden_stack_trace") \
@@ -278,14 +290,6 @@ class StoreBufferRebuilder {
278
290
 
279
291
 
280
292
 
281
- // The all static Heap captures the interface to the global object heap.
282
- // All JavaScript contexts by this process share the same object heap.
283
-
284
- #ifdef DEBUG
285
- class HeapDebugUtils;
286
- #endif
287
-
288
-
289
293
  // A queue of objects promoted during scavenge. Each object is accompanied
290
294
  // by it's size to avoid dereferencing a map pointer for scanning.
291
295
  class PromotionQueue {
@@ -427,6 +431,41 @@ class ExternalStringTable {
427
431
  };
428
432
 
429
433
 
434
+ // The stack property of an error object is implemented as a getter that
435
+ // formats the attached raw stack trace into a string. This raw stack trace
436
+ // keeps code and function objects alive until the getter is called the first
437
+ // time. To release those objects, we call the getter after each GC for
438
+ // newly tenured error objects that are kept in a list.
439
+ class ErrorObjectList {
440
+ public:
441
+ inline void Add(JSObject* object);
442
+
443
+ inline void Iterate(ObjectVisitor* v);
444
+
445
+ void TearDown();
446
+
447
+ void RemoveUnmarked(Heap* heap);
448
+
449
+ void DeferredFormatStackTrace(Isolate* isolate);
450
+
451
+ void UpdateReferences();
452
+
453
+ void UpdateReferencesInNewSpace(Heap* heap);
454
+
455
+ private:
456
+ static const int kBudgetPerGC = 16;
457
+
458
+ ErrorObjectList() : nested_(false) { }
459
+
460
+ friend class Heap;
461
+
462
+ List<Object*> list_;
463
+ bool nested_;
464
+
465
+ DISALLOW_COPY_AND_ASSIGN(ErrorObjectList);
466
+ };
467
+
468
+
430
469
  enum ArrayStorageAllocationMode {
431
470
  DONT_INITIALIZE_ARRAY_ELEMENTS,
432
471
  INITIALIZE_ARRAY_ELEMENTS_WITH_HOLE
@@ -481,6 +520,9 @@ class Heap {
481
520
  // Returns the amount of executable memory currently committed for the heap.
482
521
  intptr_t CommittedMemoryExecutable();
483
522
 
523
+ // Returns the amount of phyical memory currently committed for the heap.
524
+ size_t CommittedPhysicalMemory();
525
+
484
526
  // Returns the available bytes in space w/o growing.
485
527
  // Heap doesn't guarantee that it can allocate an object that requires
486
528
  // all available bytes. Check MaxHeapObjectSize() instead.
@@ -503,6 +545,24 @@ class Heap {
503
545
  MapSpace* map_space() { return map_space_; }
504
546
  CellSpace* cell_space() { return cell_space_; }
505
547
  LargeObjectSpace* lo_space() { return lo_space_; }
548
+ PagedSpace* paged_space(int idx) {
549
+ switch (idx) {
550
+ case OLD_POINTER_SPACE:
551
+ return old_pointer_space();
552
+ case OLD_DATA_SPACE:
553
+ return old_data_space();
554
+ case MAP_SPACE:
555
+ return map_space();
556
+ case CELL_SPACE:
557
+ return cell_space();
558
+ case CODE_SPACE:
559
+ return code_space();
560
+ case NEW_SPACE:
561
+ case LO_SPACE:
562
+ UNREACHABLE();
563
+ }
564
+ return NULL;
565
+ }
506
566
 
507
567
  bool always_allocate() { return always_allocate_scope_depth_ != 0; }
508
568
  Address always_allocate_scope_depth_address() {
@@ -530,7 +590,8 @@ class Heap {
530
590
  MUST_USE_RESULT MaybeObject* AllocateJSObject(
531
591
  JSFunction* constructor, PretenureFlag pretenure = NOT_TENURED);
532
592
 
533
- MUST_USE_RESULT MaybeObject* AllocateJSModule();
593
+ MUST_USE_RESULT MaybeObject* AllocateJSModule(Context* context,
594
+ ScopeInfo* scope_info);
534
595
 
535
596
  // Allocate a JSArray with no elements
536
597
  MUST_USE_RESULT MaybeObject* AllocateEmptyJSArray(
@@ -554,6 +615,7 @@ class Heap {
554
615
  MUST_USE_RESULT MaybeObject* AllocateJSArrayWithElements(
555
616
  FixedArrayBase* array_base,
556
617
  ElementsKind elements_kind,
618
+ int length,
557
619
  PretenureFlag pretenure = NOT_TENURED);
558
620
 
559
621
  // Allocates and initializes a new global object based on a constructor.
@@ -565,7 +627,9 @@ class Heap {
565
627
  // Returns a deep copy of the JavaScript object.
566
628
  // Properties and elements are copied too.
567
629
  // Returns failure if allocation failed.
568
- MUST_USE_RESULT MaybeObject* CopyJSObject(JSObject* source);
630
+ MUST_USE_RESULT MaybeObject* CopyJSObject(
631
+ JSObject* source,
632
+ AllocationSiteMode mode = DONT_TRACK_ALLOCATION_SITE);
569
633
 
570
634
  // Allocates the function prototype.
571
635
  // Returns Failure::RetryAfterGC(requested_bytes, space) if the allocation
@@ -636,6 +700,9 @@ class Heap {
636
700
  // Allocates a serialized scope info.
637
701
  MUST_USE_RESULT MaybeObject* AllocateScopeInfo(int length);
638
702
 
703
+ // Allocates an External object for v8's external API.
704
+ MUST_USE_RESULT MaybeObject* AllocateExternal(void* value);
705
+
639
706
  // Allocates an empty PolymorphicCodeCache.
640
707
  MUST_USE_RESULT MaybeObject* AllocatePolymorphicCodeCache();
641
708
 
@@ -651,6 +718,9 @@ class Heap {
651
718
  // Clear the Instanceof cache (used when a prototype changes).
652
719
  inline void ClearInstanceofCache();
653
720
 
721
+ // For use during bootup.
722
+ void RepairFreeListsAfterBoot();
723
+
654
724
  // Allocates and fully initializes a String. There are two String
655
725
  // encodings: ASCII and two byte. One should choose between the three string
656
726
  // allocation functions based on the encoding of the string buffer used to
@@ -669,14 +739,22 @@ class Heap {
669
739
  // Returns Failure::RetryAfterGC(requested_bytes, space) if the allocation
670
740
  // failed.
671
741
  // Please note this does not perform a garbage collection.
672
- MUST_USE_RESULT MaybeObject* AllocateStringFromAscii(
673
- Vector<const char> str,
742
+ MUST_USE_RESULT MaybeObject* AllocateStringFromOneByte(
743
+ Vector<const uint8_t> str,
674
744
  PretenureFlag pretenure = NOT_TENURED);
745
+ // TODO(dcarney): remove this function.
746
+ MUST_USE_RESULT inline MaybeObject* AllocateStringFromOneByte(
747
+ Vector<const char> str,
748
+ PretenureFlag pretenure = NOT_TENURED) {
749
+ return AllocateStringFromOneByte(Vector<const uint8_t>::cast(str),
750
+ pretenure);
751
+ }
675
752
  MUST_USE_RESULT inline MaybeObject* AllocateStringFromUtf8(
676
753
  Vector<const char> str,
677
754
  PretenureFlag pretenure = NOT_TENURED);
678
755
  MUST_USE_RESULT MaybeObject* AllocateStringFromUtf8Slow(
679
756
  Vector<const char> str,
757
+ int non_ascii_start,
680
758
  PretenureFlag pretenure = NOT_TENURED);
681
759
  MUST_USE_RESULT MaybeObject* AllocateStringFromTwoByte(
682
760
  Vector<const uc16> str,
@@ -686,24 +764,29 @@ class Heap {
686
764
  // Returns Failure::RetryAfterGC(requested_bytes, space) if the allocation
687
765
  // failed.
688
766
  // Please note this function does not perform a garbage collection.
689
- MUST_USE_RESULT inline MaybeObject* AllocateSymbol(Vector<const char> str,
690
- int chars,
691
- uint32_t hash_field);
767
+ MUST_USE_RESULT inline MaybeObject* AllocateSymbolFromUtf8(
768
+ Vector<const char> str,
769
+ int chars,
770
+ uint32_t hash_field);
692
771
 
693
- MUST_USE_RESULT inline MaybeObject* AllocateAsciiSymbol(
694
- Vector<const char> str,
772
+ MUST_USE_RESULT inline MaybeObject* AllocateOneByteSymbol(
773
+ Vector<const uint8_t> str,
695
774
  uint32_t hash_field);
696
775
 
697
776
  MUST_USE_RESULT inline MaybeObject* AllocateTwoByteSymbol(
698
777
  Vector<const uc16> str,
699
778
  uint32_t hash_field);
700
779
 
701
- MUST_USE_RESULT MaybeObject* AllocateInternalSymbol(
702
- unibrow::CharacterStream* buffer, int chars, uint32_t hash_field);
780
+ template<typename T>
781
+ static inline bool IsOneByte(T t, int chars);
703
782
 
704
- MUST_USE_RESULT MaybeObject* AllocateExternalSymbol(
705
- Vector<const char> str,
706
- int chars);
783
+ template<typename T>
784
+ MUST_USE_RESULT inline MaybeObject* AllocateInternalSymbol(
785
+ T t, int chars, uint32_t hash_field);
786
+
787
+ template<bool is_one_byte, typename T>
788
+ MUST_USE_RESULT MaybeObject* AllocateInternalSymbol(
789
+ T t, int chars, uint32_t hash_field);
707
790
 
708
791
  // Allocates and partially initializes a String. There are two String
709
792
  // encodings: ASCII and two byte. These functions allocate a string of the
@@ -712,7 +795,7 @@ class Heap {
712
795
  // Returns Failure::RetryAfterGC(requested_bytes, space) if the allocation
713
796
  // failed.
714
797
  // Please note this does not perform a garbage collection.
715
- MUST_USE_RESULT MaybeObject* AllocateRawAsciiString(
798
+ MUST_USE_RESULT MaybeObject* AllocateRawOneByteString(
716
799
  int length,
717
800
  PretenureFlag pretenure = NOT_TENURED);
718
801
  MUST_USE_RESULT MaybeObject* AllocateRawTwoByteString(
@@ -771,6 +854,10 @@ class Heap {
771
854
  // Please note this does not perform a garbage collection.
772
855
  MUST_USE_RESULT MaybeObject* AllocateUninitializedFixedArray(int length);
773
856
 
857
+ // Move len elements within a given array from src_index index to dst_index
858
+ // index.
859
+ void MoveElements(FixedArray* array, int dst_index, int src_index, int len);
860
+
774
861
  // Make a copy of src and return it. Returns
775
862
  // Failure::RetryAfterGC(requested_bytes, space) if the allocation failed.
776
863
  MUST_USE_RESULT inline MaybeObject* CopyFixedArray(FixedArray* src);
@@ -820,13 +907,16 @@ class Heap {
820
907
  MUST_USE_RESULT MaybeObject* AllocateHashTable(
821
908
  int length, PretenureFlag pretenure = NOT_TENURED);
822
909
 
823
- // Allocate a global (but otherwise uninitialized) context.
824
- MUST_USE_RESULT MaybeObject* AllocateGlobalContext();
910
+ // Allocate a native (but otherwise uninitialized) context.
911
+ MUST_USE_RESULT MaybeObject* AllocateNativeContext();
825
912
 
826
- // Allocate a module context.
827
- MUST_USE_RESULT MaybeObject* AllocateModuleContext(Context* previous,
913
+ // Allocate a global context.
914
+ MUST_USE_RESULT MaybeObject* AllocateGlobalContext(JSFunction* function,
828
915
  ScopeInfo* scope_info);
829
916
 
917
+ // Allocate a module context.
918
+ MUST_USE_RESULT MaybeObject* AllocateModuleContext(ScopeInfo* scope_info);
919
+
830
920
  // Allocate a function context.
831
921
  MUST_USE_RESULT MaybeObject* AllocateFunctionContext(int length,
832
922
  JSFunction* function);
@@ -997,16 +1087,15 @@ class Heap {
997
1087
  // Returns Failure::RetryAfterGC(requested_bytes, space) if allocation
998
1088
  // failed.
999
1089
  // Please note this function does not perform a garbage collection.
1000
- MUST_USE_RESULT MaybeObject* LookupSymbol(Vector<const char> str);
1001
- MUST_USE_RESULT MaybeObject* LookupAsciiSymbol(Vector<const char> str);
1002
- MUST_USE_RESULT MaybeObject* LookupTwoByteSymbol(Vector<const uc16> str);
1003
- MUST_USE_RESULT MaybeObject* LookupAsciiSymbol(const char* str) {
1004
- return LookupSymbol(CStrVector(str));
1090
+ MUST_USE_RESULT MaybeObject* LookupUtf8Symbol(Vector<const char> str);
1091
+ MUST_USE_RESULT MaybeObject* LookupUtf8Symbol(const char* str) {
1092
+ return LookupUtf8Symbol(CStrVector(str));
1005
1093
  }
1094
+ MUST_USE_RESULT MaybeObject* LookupOneByteSymbol(Vector<const uint8_t> str);
1095
+ MUST_USE_RESULT MaybeObject* LookupTwoByteSymbol(Vector<const uc16> str);
1006
1096
  MUST_USE_RESULT MaybeObject* LookupSymbol(String* str);
1007
- MUST_USE_RESULT MaybeObject* LookupAsciiSymbol(Handle<SeqAsciiString> string,
1008
- int from,
1009
- int length);
1097
+ MUST_USE_RESULT MaybeObject* LookupOneByteSymbol(
1098
+ Handle<SeqOneByteString> string, int from, int length);
1010
1099
 
1011
1100
  bool LookupSymbolIfExists(String* str, String** symbol);
1012
1101
  bool LookupTwoCharsSymbolIfExists(String* str, String** symbol);
@@ -1072,7 +1161,10 @@ class Heap {
1072
1161
  void EnsureHeapIsIterable();
1073
1162
 
1074
1163
  // Notify the heap that a context has been disposed.
1075
- int NotifyContextDisposed() { return ++contexts_disposed_; }
1164
+ int NotifyContextDisposed() {
1165
+ flush_monomorphic_ics_ = true;
1166
+ return ++contexts_disposed_;
1167
+ }
1076
1168
 
1077
1169
  // Utility to invoke the scavenger. This is needed in test code to
1078
1170
  // ensure correct callback for weak global handles.
@@ -1100,8 +1192,8 @@ class Heap {
1100
1192
  #endif
1101
1193
 
1102
1194
  void AddGCPrologueCallback(
1103
- GCEpilogueCallback callback, GCType gc_type_filter);
1104
- void RemoveGCPrologueCallback(GCEpilogueCallback callback);
1195
+ GCPrologueCallback callback, GCType gc_type_filter);
1196
+ void RemoveGCPrologueCallback(GCPrologueCallback callback);
1105
1197
 
1106
1198
  void AddGCEpilogueCallback(
1107
1199
  GCEpilogueCallback callback, GCType gc_type_filter);
@@ -1148,13 +1240,13 @@ class Heap {
1148
1240
  // not match the empty string.
1149
1241
  String* hidden_symbol() { return hidden_symbol_; }
1150
1242
 
1151
- void set_global_contexts_list(Object* object) {
1152
- global_contexts_list_ = object;
1243
+ void set_native_contexts_list(Object* object) {
1244
+ native_contexts_list_ = object;
1153
1245
  }
1154
- Object* global_contexts_list() { return global_contexts_list_; }
1246
+ Object* native_contexts_list() { return native_contexts_list_; }
1155
1247
 
1156
1248
  // Number of mark-sweeps.
1157
- int ms_count() { return ms_count_; }
1249
+ unsigned int ms_count() { return ms_count_; }
1158
1250
 
1159
1251
  // Iterates over all roots in the heap.
1160
1252
  void IterateRoots(ObjectVisitor* v, VisitMode mode);
@@ -1225,21 +1317,24 @@ class Heap {
1225
1317
  return reinterpret_cast<Address*>(&roots_[kStoreBufferTopRootIndex]);
1226
1318
  }
1227
1319
 
1228
- // Get address of global contexts list for serialization support.
1229
- Object** global_contexts_list_address() {
1230
- return &global_contexts_list_;
1320
+ // Get address of native contexts list for serialization support.
1321
+ Object** native_contexts_list_address() {
1322
+ return &native_contexts_list_;
1231
1323
  }
1232
1324
 
1233
- #ifdef DEBUG
1234
- void Print();
1235
- void PrintHandles();
1236
-
1325
+ #ifdef VERIFY_HEAP
1237
1326
  // Verify the heap is in its normal state before or after a GC.
1238
1327
  void Verify();
1239
1328
 
1240
- // Verify that AccessorPairs are not shared, i.e. make sure that they have
1241
- // exactly one pointer to them.
1242
- void VerifyNoAccessorPairSharing();
1329
+
1330
+ bool weak_embedded_maps_verification_enabled() {
1331
+ return no_weak_embedded_maps_verification_scope_depth_ == 0;
1332
+ }
1333
+ #endif
1334
+
1335
+ #ifdef DEBUG
1336
+ void Print();
1337
+ void PrintHandles();
1243
1338
 
1244
1339
  void OldPointerSpaceCheckStoreBuffer();
1245
1340
  void MapSpaceCheckStoreBuffer();
@@ -1248,10 +1343,23 @@ class Heap {
1248
1343
  // Report heap statistics.
1249
1344
  void ReportHeapStatistics(const char* title);
1250
1345
  void ReportCodeStatistics(const char* title);
1346
+ #endif
1347
+
1348
+ // Zapping is needed for verify heap, and always done in debug builds.
1349
+ static inline bool ShouldZapGarbage() {
1350
+ #ifdef DEBUG
1351
+ return true;
1352
+ #else
1353
+ #ifdef VERIFY_HEAP
1354
+ return FLAG_verify_heap;
1355
+ #else
1356
+ return false;
1357
+ #endif
1358
+ #endif
1359
+ }
1251
1360
 
1252
1361
  // Fill in bogus values in from space
1253
1362
  void ZapFromSpace();
1254
- #endif
1255
1363
 
1256
1364
  // Print short heap statistics.
1257
1365
  void PrintShortHeapStatistics();
@@ -1289,6 +1397,7 @@ class Heap {
1289
1397
  return disallow_allocation_failure_;
1290
1398
  }
1291
1399
 
1400
+ void TracePathToObjectFrom(Object* target, Object* root);
1292
1401
  void TracePathToObject(Object* target);
1293
1402
  void TracePathToGlobal();
1294
1403
  #endif
@@ -1303,20 +1412,9 @@ class Heap {
1303
1412
  // Commits from space if it is uncommitted.
1304
1413
  void EnsureFromSpaceIsCommitted();
1305
1414
 
1306
- // Support for partial snapshots. After calling this we can allocate a
1307
- // certain number of bytes using only linear allocation (with a
1308
- // LinearAllocationScope and an AlwaysAllocateScope) without using freelists
1309
- // or causing a GC. It returns true of space was reserved or false if a GC is
1310
- // needed. For paged spaces the space requested must include the space wasted
1311
- // at the end of each page when allocating linearly.
1312
- void ReserveSpace(
1313
- int new_space_size,
1314
- int pointer_space_size,
1315
- int data_space_size,
1316
- int code_space_size,
1317
- int map_space_size,
1318
- int cell_space_size,
1319
- int large_object_size);
1415
+ // Support for partial snapshots. After calling this we have a linear
1416
+ // space to write objects in each space.
1417
+ void ReserveSpace(int *sizes, Address* addresses);
1320
1418
 
1321
1419
  //
1322
1420
  // Support for the API.
@@ -1392,15 +1490,15 @@ class Heap {
1392
1490
  STRONG_ROOT_LIST(ROOT_INDEX_DECLARATION)
1393
1491
  #undef ROOT_INDEX_DECLARATION
1394
1492
 
1395
- // Utility type maps
1396
- #define DECLARE_STRUCT_MAP(NAME, Name, name) k##Name##MapRootIndex,
1397
- STRUCT_LIST(DECLARE_STRUCT_MAP)
1398
- #undef DECLARE_STRUCT_MAP
1399
-
1400
1493
  #define SYMBOL_INDEX_DECLARATION(name, str) k##name##RootIndex,
1401
1494
  SYMBOL_LIST(SYMBOL_INDEX_DECLARATION)
1402
1495
  #undef SYMBOL_DECLARATION
1403
1496
 
1497
+ // Utility type maps
1498
+ #define DECLARE_STRUCT_MAP(NAME, Name, name) k##Name##MapRootIndex,
1499
+ STRUCT_LIST(DECLARE_STRUCT_MAP)
1500
+ #undef DECLARE_STRUCT_MAP
1501
+
1404
1502
  kSymbolTableRootIndex,
1405
1503
  kStrongRootListLength = kSymbolTableRootIndex,
1406
1504
  kRootListLength
@@ -1412,6 +1510,10 @@ class Heap {
1412
1510
  STATIC_CHECK(kFalseValueRootIndex == Internals::kFalseValueRootIndex);
1413
1511
  STATIC_CHECK(kempty_symbolRootIndex == Internals::kEmptySymbolRootIndex);
1414
1512
 
1513
+ // Generated code can embed direct references to non-writable roots if
1514
+ // they are in new space.
1515
+ static bool RootCanBeWrittenAfterInitialization(RootListIndex root_index);
1516
+
1415
1517
  MUST_USE_RESULT MaybeObject* NumberToString(
1416
1518
  Object* number, bool check_number_string_cache = true);
1417
1519
  MUST_USE_RESULT MaybeObject* Uint32ToString(
@@ -1483,13 +1585,6 @@ class Heap {
1483
1585
 
1484
1586
  void ClearNormalizedMapCaches();
1485
1587
 
1486
- // Clears the cache of ICs related to this map.
1487
- void ClearCacheOnMap(Map* map) {
1488
- if (FLAG_cleanup_code_caches_at_gc) {
1489
- map->ClearCodeCache(this);
1490
- }
1491
- }
1492
-
1493
1588
  GCTracer* tracer() { return tracer_; }
1494
1589
 
1495
1590
  // Returns the size of objects residing in non new spaces.
@@ -1509,6 +1604,24 @@ class Heap {
1509
1604
  // Returns minimal interval between two subsequent collections.
1510
1605
  int get_min_in_mutator() { return min_in_mutator_; }
1511
1606
 
1607
+ // TODO(hpayer): remove, should be handled by GCTracer
1608
+ void AddMarkingTime(double marking_time) {
1609
+ marking_time_ += marking_time;
1610
+ }
1611
+
1612
+ double marking_time() const {
1613
+ return marking_time_;
1614
+ }
1615
+
1616
+ // TODO(hpayer): remove, should be handled by GCTracer
1617
+ void AddSweepingTime(double sweeping_time) {
1618
+ sweeping_time_ += sweeping_time;
1619
+ }
1620
+
1621
+ double sweeping_time() const {
1622
+ return sweeping_time_;
1623
+ }
1624
+
1512
1625
  MarkCompactCollector* mark_compact_collector() {
1513
1626
  return &mark_compact_collector_;
1514
1627
  }
@@ -1526,11 +1639,13 @@ class Heap {
1526
1639
  }
1527
1640
 
1528
1641
  bool IsSweepingComplete() {
1529
- return old_data_space()->IsSweepingComplete() &&
1530
- old_pointer_space()->IsSweepingComplete();
1642
+ return !mark_compact_collector()->IsConcurrentSweepingInProgress() &&
1643
+ old_data_space()->IsLazySweepingComplete() &&
1644
+ old_pointer_space()->IsLazySweepingComplete();
1531
1645
  }
1532
1646
 
1533
1647
  bool AdvanceSweepers(int step_size) {
1648
+ ASSERT(!FLAG_parallel_sweeping && !FLAG_concurrent_sweeping);
1534
1649
  bool sweeping_complete = old_data_space()->AdvanceSweeper(step_size);
1535
1650
  sweeping_complete &= old_pointer_space()->AdvanceSweeper(step_size);
1536
1651
  return sweeping_complete;
@@ -1540,6 +1655,10 @@ class Heap {
1540
1655
  return &external_string_table_;
1541
1656
  }
1542
1657
 
1658
+ ErrorObjectList* error_object_list() {
1659
+ return &error_object_list_;
1660
+ }
1661
+
1543
1662
  // Returns the current sweep generation.
1544
1663
  int sweep_generation() {
1545
1664
  return sweep_generation_;
@@ -1547,13 +1666,8 @@ class Heap {
1547
1666
 
1548
1667
  inline Isolate* isolate();
1549
1668
 
1550
- inline void CallGlobalGCPrologueCallback() {
1551
- if (global_gc_prologue_callback_ != NULL) global_gc_prologue_callback_();
1552
- }
1553
-
1554
- inline void CallGlobalGCEpilogueCallback() {
1555
- if (global_gc_epilogue_callback_ != NULL) global_gc_epilogue_callback_();
1556
- }
1669
+ void CallGCPrologueCallbacks(GCType gc_type);
1670
+ void CallGCEpilogueCallbacks(GCType gc_type);
1557
1671
 
1558
1672
  inline bool OldGenerationAllocationLimitReached();
1559
1673
 
@@ -1587,6 +1701,16 @@ class Heap {
1587
1701
  set_construct_stub_deopt_pc_offset(Smi::FromInt(pc_offset));
1588
1702
  }
1589
1703
 
1704
+ void SetGetterStubDeoptPCOffset(int pc_offset) {
1705
+ ASSERT(getter_stub_deopt_pc_offset() == Smi::FromInt(0));
1706
+ set_getter_stub_deopt_pc_offset(Smi::FromInt(pc_offset));
1707
+ }
1708
+
1709
+ void SetSetterStubDeoptPCOffset(int pc_offset) {
1710
+ ASSERT(setter_stub_deopt_pc_offset() == Smi::FromInt(0));
1711
+ set_setter_stub_deopt_pc_offset(Smi::FromInt(pc_offset));
1712
+ }
1713
+
1590
1714
  // For post mortem debugging.
1591
1715
  void RememberUnmappedPage(Address page, bool compacted);
1592
1716
 
@@ -1597,9 +1721,65 @@ class Heap {
1597
1721
  }
1598
1722
 
1599
1723
  void AgeInlineCaches() {
1600
- ++global_ic_age_;
1724
+ global_ic_age_ = (global_ic_age_ + 1) & SharedFunctionInfo::ICAgeBits::kMax;
1725
+ }
1726
+
1727
+ bool flush_monomorphic_ics() { return flush_monomorphic_ics_; }
1728
+
1729
+ intptr_t amount_of_external_allocated_memory() {
1730
+ return amount_of_external_allocated_memory_;
1731
+ }
1732
+
1733
+ // ObjectStats are kept in two arrays, counts and sizes. Related stats are
1734
+ // stored in a contiguous linear buffer. Stats groups are stored one after
1735
+ // another.
1736
+ enum {
1737
+ FIRST_CODE_KIND_SUB_TYPE = LAST_TYPE + 1,
1738
+ FIRST_FIXED_ARRAY_SUB_TYPE =
1739
+ FIRST_CODE_KIND_SUB_TYPE + Code::LAST_CODE_KIND + 1,
1740
+ OBJECT_STATS_COUNT =
1741
+ FIRST_FIXED_ARRAY_SUB_TYPE + LAST_FIXED_ARRAY_SUB_TYPE + 1
1742
+ };
1743
+
1744
+ void RecordObjectStats(InstanceType type, int sub_type, size_t size) {
1745
+ ASSERT(type <= LAST_TYPE);
1746
+ if (sub_type < 0) {
1747
+ object_counts_[type]++;
1748
+ object_sizes_[type] += size;
1749
+ } else {
1750
+ if (type == CODE_TYPE) {
1751
+ ASSERT(sub_type <= Code::LAST_CODE_KIND);
1752
+ object_counts_[FIRST_CODE_KIND_SUB_TYPE + sub_type]++;
1753
+ object_sizes_[FIRST_CODE_KIND_SUB_TYPE + sub_type] += size;
1754
+ } else if (type == FIXED_ARRAY_TYPE) {
1755
+ ASSERT(sub_type <= LAST_FIXED_ARRAY_SUB_TYPE);
1756
+ object_counts_[FIRST_FIXED_ARRAY_SUB_TYPE + sub_type]++;
1757
+ object_sizes_[FIRST_FIXED_ARRAY_SUB_TYPE + sub_type] += size;
1758
+ }
1759
+ }
1601
1760
  }
1602
1761
 
1762
+ void CheckpointObjectStats();
1763
+
1764
+ // We don't use a ScopedLock here since we want to lock the heap
1765
+ // only when FLAG_parallel_recompilation is true.
1766
+ class RelocationLock {
1767
+ public:
1768
+ explicit RelocationLock(Heap* heap) : heap_(heap) {
1769
+ if (FLAG_parallel_recompilation) {
1770
+ heap_->relocation_mutex_->Lock();
1771
+ }
1772
+ }
1773
+ ~RelocationLock() {
1774
+ if (FLAG_parallel_recompilation) {
1775
+ heap_->relocation_mutex_->Unlock();
1776
+ }
1777
+ }
1778
+
1779
+ private:
1780
+ Heap* heap_;
1781
+ };
1782
+
1603
1783
  private:
1604
1784
  Heap();
1605
1785
 
@@ -1631,6 +1811,8 @@ class Heap {
1631
1811
 
1632
1812
  int global_ic_age_;
1633
1813
 
1814
+ bool flush_monomorphic_ics_;
1815
+
1634
1816
  int scan_on_scavenge_pages_;
1635
1817
 
1636
1818
  #if defined(V8_TARGET_ARCH_X64)
@@ -1652,7 +1834,7 @@ class Heap {
1652
1834
  // Returns the amount of external memory registered since last global gc.
1653
1835
  intptr_t PromotedExternalMemorySize();
1654
1836
 
1655
- int ms_count_; // how many mark-sweep collections happened
1837
+ unsigned int ms_count_; // how many mark-sweep collections happened
1656
1838
  unsigned int gc_count_; // how many gc happened
1657
1839
 
1658
1840
  // For post mortem debugging.
@@ -1684,8 +1866,6 @@ class Heap {
1684
1866
  // Do we expect to be able to handle allocation failure at this
1685
1867
  // time?
1686
1868
  bool disallow_allocation_failure_;
1687
-
1688
- HeapDebugUtils* debug_utils_;
1689
1869
  #endif // DEBUG
1690
1870
 
1691
1871
  // Indicates that the new space should be kept small due to high promotion
@@ -1724,7 +1904,7 @@ class Heap {
1724
1904
  // last GC.
1725
1905
  int old_gen_exhausted_;
1726
1906
 
1727
- Object* global_contexts_list_;
1907
+ Object* native_contexts_list_;
1728
1908
 
1729
1909
  StoreBufferRebuilder store_buffer_rebuilder_;
1730
1910
 
@@ -1802,7 +1982,6 @@ class Heap {
1802
1982
  bool PerformGarbageCollection(GarbageCollector collector,
1803
1983
  GCTracer* tracer);
1804
1984
 
1805
-
1806
1985
  inline void UpdateOldSpaceLimits();
1807
1986
 
1808
1987
  // Allocate an uninitialized object in map space. The behavior is identical
@@ -1829,9 +2008,9 @@ class Heap {
1829
2008
 
1830
2009
  void CreateFixedStubs();
1831
2010
 
1832
- MaybeObject* CreateOddball(const char* to_string,
1833
- Object* to_number,
1834
- byte kind);
2011
+ MUST_USE_RESULT MaybeObject* CreateOddball(const char* to_string,
2012
+ Object* to_number,
2013
+ byte kind);
1835
2014
 
1836
2015
  // Allocate a JSArray with no elements
1837
2016
  MUST_USE_RESULT MaybeObject* AllocateJSArray(
@@ -1884,7 +2063,6 @@ class Heap {
1884
2063
 
1885
2064
  GCTracer* tracer_;
1886
2065
 
1887
-
1888
2066
  // Allocates a small number to string cache.
1889
2067
  MUST_USE_RESULT MaybeObject* AllocateInitialNumberStringCache();
1890
2068
  // Creates and installs the full-sized number string cache.
@@ -1993,14 +2171,24 @@ class Heap {
1993
2171
 
1994
2172
  void AdvanceIdleIncrementalMarking(intptr_t step_size);
1995
2173
 
2174
+ void ClearObjectStats(bool clear_last_time_stats = false);
1996
2175
 
1997
2176
  static const int kInitialSymbolTableSize = 2048;
1998
2177
  static const int kInitialEvalCacheSize = 64;
1999
2178
  static const int kInitialNumberStringCacheSize = 256;
2000
2179
 
2180
+ // Object counts and used memory by InstanceType
2181
+ size_t object_counts_[OBJECT_STATS_COUNT];
2182
+ size_t object_counts_last_time_[OBJECT_STATS_COUNT];
2183
+ size_t object_sizes_[OBJECT_STATS_COUNT];
2184
+ size_t object_sizes_last_time_[OBJECT_STATS_COUNT];
2185
+
2001
2186
  // Maximum GC pause.
2002
2187
  int max_gc_pause_;
2003
2188
 
2189
+ // Total time spent in GC.
2190
+ int total_gc_time_ms_;
2191
+
2004
2192
  // Maximum size of objects alive after GC.
2005
2193
  intptr_t max_alive_after_gc_;
2006
2194
 
@@ -2012,6 +2200,12 @@ class Heap {
2012
2200
 
2013
2201
  double last_gc_end_timestamp_;
2014
2202
 
2203
+ // Cumulative GC time spent in marking
2204
+ double marking_time_;
2205
+
2206
+ // Cumulative GC time spent in sweeping
2207
+ double sweeping_time_;
2208
+
2015
2209
  MarkCompactCollector mark_compact_collector_;
2016
2210
 
2017
2211
  StoreBuffer store_buffer_;
@@ -2029,6 +2223,10 @@ class Heap {
2029
2223
  unsigned int gc_count_at_last_idle_gc_;
2030
2224
  int scavenges_since_last_idle_round_;
2031
2225
 
2226
+ #ifdef VERIFY_HEAP
2227
+ int no_weak_embedded_maps_verification_scope_depth_;
2228
+ #endif
2229
+
2032
2230
  static const int kMaxMarkSweepsInIdleRound = 7;
2033
2231
  static const int kIdleScavengeThreshold = 5;
2034
2232
 
@@ -2041,20 +2239,26 @@ class Heap {
2041
2239
 
2042
2240
  ExternalStringTable external_string_table_;
2043
2241
 
2242
+ ErrorObjectList error_object_list_;
2243
+
2044
2244
  VisitorDispatchTable<ScavengingCallback> scavenging_visitors_table_;
2045
2245
 
2046
2246
  MemoryChunk* chunks_queued_for_free_;
2047
2247
 
2248
+ Mutex* relocation_mutex_;
2249
+
2048
2250
  friend class Factory;
2049
2251
  friend class GCTracer;
2050
2252
  friend class DisallowAllocationFailure;
2051
2253
  friend class AlwaysAllocateScope;
2052
- friend class LinearAllocationScope;
2053
2254
  friend class Page;
2054
2255
  friend class Isolate;
2055
2256
  friend class MarkCompactCollector;
2056
- friend class StaticMarkingVisitor;
2257
+ friend class MarkCompactMarkingVisitor;
2057
2258
  friend class MapCompact;
2259
+ #ifdef VERIFY_HEAP
2260
+ friend class NoWeakEmbeddedMapsVerificationScope;
2261
+ #endif
2058
2262
 
2059
2263
  DISALLOW_COPY_AND_ASSIGN(Heap);
2060
2264
  };
@@ -2093,21 +2297,37 @@ class HeapStats {
2093
2297
  };
2094
2298
 
2095
2299
 
2300
+ class DisallowAllocationFailure {
2301
+ public:
2302
+ inline DisallowAllocationFailure();
2303
+ inline ~DisallowAllocationFailure();
2304
+
2305
+ #ifdef DEBUG
2306
+ private:
2307
+ bool old_state_;
2308
+ #endif
2309
+ };
2310
+
2311
+
2096
2312
  class AlwaysAllocateScope {
2097
2313
  public:
2098
2314
  inline AlwaysAllocateScope();
2099
2315
  inline ~AlwaysAllocateScope();
2100
- };
2101
2316
 
2317
+ private:
2318
+ // Implicitly disable artificial allocation failures.
2319
+ DisallowAllocationFailure disallow_allocation_failure_;
2320
+ };
2102
2321
 
2103
- class LinearAllocationScope {
2322
+ #ifdef VERIFY_HEAP
2323
+ class NoWeakEmbeddedMapsVerificationScope {
2104
2324
  public:
2105
- inline LinearAllocationScope();
2106
- inline ~LinearAllocationScope();
2325
+ inline NoWeakEmbeddedMapsVerificationScope();
2326
+ inline ~NoWeakEmbeddedMapsVerificationScope();
2107
2327
  };
2328
+ #endif
2108
2329
 
2109
2330
 
2110
- #ifdef DEBUG
2111
2331
  // Visitor class to verify interior pointers in spaces that do not contain
2112
2332
  // or care about intergenerational references. All heap object pointers have to
2113
2333
  // point into the heap to a location that has a map pointer at its first word.
@@ -2117,7 +2337,6 @@ class VerifyPointersVisitor: public ObjectVisitor {
2117
2337
  public:
2118
2338
  inline void VisitPointers(Object** start, Object** end);
2119
2339
  };
2120
- #endif
2121
2340
 
2122
2341
 
2123
2342
  // Space iterator for iterating over all spaces of the heap.
@@ -2276,7 +2495,7 @@ class KeyedLookupCache {
2276
2495
  };
2277
2496
 
2278
2497
 
2279
- // Cache for mapping (array, property name) into descriptor index.
2498
+ // Cache for mapping (map, property name) into descriptor index.
2280
2499
  // The cache contains both positive and negative results.
2281
2500
  // Descriptor index equals kNotFound means the property is absent.
2282
2501
  // Cleared at startup and prior to any gc.
@@ -2284,21 +2503,21 @@ class DescriptorLookupCache {
2284
2503
  public:
2285
2504
  // Lookup descriptor index for (map, name).
2286
2505
  // If absent, kAbsent is returned.
2287
- int Lookup(DescriptorArray* array, String* name) {
2506
+ int Lookup(Map* source, String* name) {
2288
2507
  if (!StringShape(name).IsSymbol()) return kAbsent;
2289
- int index = Hash(array, name);
2508
+ int index = Hash(source, name);
2290
2509
  Key& key = keys_[index];
2291
- if ((key.array == array) && (key.name == name)) return results_[index];
2510
+ if ((key.source == source) && (key.name == name)) return results_[index];
2292
2511
  return kAbsent;
2293
2512
  }
2294
2513
 
2295
2514
  // Update an element in the cache.
2296
- void Update(DescriptorArray* array, String* name, int result) {
2515
+ void Update(Map* source, String* name, int result) {
2297
2516
  ASSERT(result != kAbsent);
2298
2517
  if (StringShape(name).IsSymbol()) {
2299
- int index = Hash(array, name);
2518
+ int index = Hash(source, name);
2300
2519
  Key& key = keys_[index];
2301
- key.array = array;
2520
+ key.source = source;
2302
2521
  key.name = name;
2303
2522
  results_[index] = result;
2304
2523
  }
@@ -2312,24 +2531,26 @@ class DescriptorLookupCache {
2312
2531
  private:
2313
2532
  DescriptorLookupCache() {
2314
2533
  for (int i = 0; i < kLength; ++i) {
2315
- keys_[i].array = NULL;
2534
+ keys_[i].source = NULL;
2316
2535
  keys_[i].name = NULL;
2317
2536
  results_[i] = kAbsent;
2318
2537
  }
2319
2538
  }
2320
2539
 
2321
- static int Hash(DescriptorArray* array, String* name) {
2540
+ static int Hash(Object* source, String* name) {
2322
2541
  // Uses only lower 32 bits if pointers are larger.
2323
- uint32_t array_hash =
2324
- static_cast<uint32_t>(reinterpret_cast<uintptr_t>(array)) >> 2;
2542
+ uint32_t source_hash =
2543
+ static_cast<uint32_t>(reinterpret_cast<uintptr_t>(source))
2544
+ >> kPointerSizeLog2;
2325
2545
  uint32_t name_hash =
2326
- static_cast<uint32_t>(reinterpret_cast<uintptr_t>(name)) >> 2;
2327
- return (array_hash ^ name_hash) % kLength;
2546
+ static_cast<uint32_t>(reinterpret_cast<uintptr_t>(name))
2547
+ >> kPointerSizeLog2;
2548
+ return (source_hash ^ name_hash) % kLength;
2328
2549
  }
2329
2550
 
2330
2551
  static const int kLength = 64;
2331
2552
  struct Key {
2332
- DescriptorArray* array;
2553
+ Map* source;
2333
2554
  String* name;
2334
2555
  };
2335
2556
 
@@ -2341,18 +2562,6 @@ class DescriptorLookupCache {
2341
2562
  };
2342
2563
 
2343
2564
 
2344
- #ifdef DEBUG
2345
- class DisallowAllocationFailure {
2346
- public:
2347
- inline DisallowAllocationFailure();
2348
- inline ~DisallowAllocationFailure();
2349
-
2350
- private:
2351
- bool old_state_;
2352
- };
2353
- #endif
2354
-
2355
-
2356
2565
  // A helper class to document/test C++ scopes where we do not
2357
2566
  // expect a GC. Usage:
2358
2567
  //
@@ -2368,6 +2577,7 @@ class AssertNoAllocation {
2368
2577
  #ifdef DEBUG
2369
2578
  private:
2370
2579
  bool old_state_;
2580
+ bool active_;
2371
2581
  #endif
2372
2582
  };
2373
2583
 
@@ -2380,6 +2590,7 @@ class DisableAssertNoAllocation {
2380
2590
  #ifdef DEBUG
2381
2591
  private:
2382
2592
  bool old_state_;
2593
+ bool active_;
2383
2594
  #endif
2384
2595
  };
2385
2596
 
@@ -2441,6 +2652,18 @@ class GCTracer BASE_EMBEDDED {
2441
2652
  promoted_objects_size_ += object_size;
2442
2653
  }
2443
2654
 
2655
+ void increment_nodes_died_in_new_space() {
2656
+ nodes_died_in_new_space_++;
2657
+ }
2658
+
2659
+ void increment_nodes_copied_in_new_space() {
2660
+ nodes_copied_in_new_space_++;
2661
+ }
2662
+
2663
+ void increment_nodes_promoted() {
2664
+ nodes_promoted_++;
2665
+ }
2666
+
2444
2667
  private:
2445
2668
  // Returns a string matching the collector.
2446
2669
  const char* CollectorString();
@@ -2485,6 +2708,15 @@ class GCTracer BASE_EMBEDDED {
2485
2708
  // Size of objects promoted during the current collection.
2486
2709
  intptr_t promoted_objects_size_;
2487
2710
 
2711
+ // Number of died nodes in the new space.
2712
+ int nodes_died_in_new_space_;
2713
+
2714
+ // Number of copied nodes to the new space.
2715
+ int nodes_copied_in_new_space_;
2716
+
2717
+ // Number of promoted nodes to the old space.
2718
+ int nodes_promoted_;
2719
+
2488
2720
  // Incremental marking steps counters.
2489
2721
  int steps_count_;
2490
2722
  double steps_took_;
@@ -2499,24 +2731,31 @@ class GCTracer BASE_EMBEDDED {
2499
2731
  };
2500
2732
 
2501
2733
 
2502
- class StringSplitCache {
2734
+ class RegExpResultsCache {
2503
2735
  public:
2504
- static Object* Lookup(FixedArray* cache, String* string, String* pattern);
2736
+ enum ResultsCacheType { REGEXP_MULTIPLE_INDICES, STRING_SPLIT_SUBSTRINGS };
2737
+
2738
+ // Attempt to retrieve a cached result. On failure, 0 is returned as a Smi.
2739
+ // On success, the returned result is guaranteed to be a COW-array.
2740
+ static Object* Lookup(Heap* heap,
2741
+ String* key_string,
2742
+ Object* key_pattern,
2743
+ ResultsCacheType type);
2744
+ // Attempt to add value_array to the cache specified by type. On success,
2745
+ // value_array is turned into a COW-array.
2505
2746
  static void Enter(Heap* heap,
2506
- FixedArray* cache,
2507
- String* string,
2508
- String* pattern,
2509
- FixedArray* array);
2747
+ String* key_string,
2748
+ Object* key_pattern,
2749
+ FixedArray* value_array,
2750
+ ResultsCacheType type);
2510
2751
  static void Clear(FixedArray* cache);
2511
- static const int kStringSplitCacheSize = 0x100;
2752
+ static const int kRegExpResultsCacheSize = 0x100;
2512
2753
 
2513
2754
  private:
2514
2755
  static const int kArrayEntriesPerCacheEntry = 4;
2515
2756
  static const int kStringOffset = 0;
2516
2757
  static const int kPatternOffset = 1;
2517
2758
  static const int kArrayOffset = 2;
2518
-
2519
- static MaybeObject* WrapFixedArrayInJSArray(Object* fixed_array);
2520
2759
  };
2521
2760
 
2522
2761
 
@@ -2646,7 +2885,7 @@ class IntrusiveMarking {
2646
2885
  };
2647
2886
 
2648
2887
 
2649
- #if defined(DEBUG) || defined(LIVE_OBJECT_LIST)
2888
+ #ifdef DEBUG
2650
2889
  // Helper class for tracing paths to a search target Object from all roots.
2651
2890
  // The TracePathFrom() method can be used to trace paths from a specific
2652
2891
  // object to the search target object.
@@ -2703,7 +2942,7 @@ class PathTracer : public ObjectVisitor {
2703
2942
  private:
2704
2943
  DISALLOW_IMPLICIT_CONSTRUCTORS(PathTracer);
2705
2944
  };
2706
- #endif // DEBUG || LIVE_OBJECT_LIST
2945
+ #endif // DEBUG
2707
2946
 
2708
2947
  } } // namespace v8::internal
2709
2948