libv8 3.11.8.17 → 3.16.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -45,7 +45,8 @@ class TokenEnumerator {
45
45
  static const int kInheritsSecurityToken = -2;
46
46
 
47
47
  private:
48
- static void TokenRemovedCallback(v8::Persistent<v8::Value> handle,
48
+ static void TokenRemovedCallback(v8::Isolate* isolate,
49
+ v8::Persistent<v8::Value> handle,
49
50
  void* parameter);
50
51
  void TokenRemoved(Object** token_location);
51
52
 
@@ -72,6 +73,7 @@ class StringsStorage {
72
73
  const char* GetName(int index);
73
74
  inline const char* GetFunctionName(String* name);
74
75
  inline const char* GetFunctionName(const char* name);
76
+ size_t GetUsedMemorySize() const;
75
77
 
76
78
  private:
77
79
  static const int kMaxNameSize = 1024;
@@ -649,7 +651,8 @@ class HeapObjectsMap {
649
651
  }
650
652
 
651
653
  void StopHeapObjectsTracking();
652
- void PushHeapObjectsStats(OutputStream* stream);
654
+ SnapshotObjectId PushHeapObjectsStats(OutputStream* stream);
655
+ size_t GetUsedMemorySize() const;
653
656
 
654
657
  static SnapshotObjectId GenerateId(v8::RetainedObjectInfo* info);
655
658
  static inline SnapshotObjectId GetNthGcSubrootId(int delta);
@@ -707,7 +710,7 @@ class HeapSnapshotsCollection {
707
710
  ~HeapSnapshotsCollection();
708
711
 
709
712
  bool is_tracking_objects() { return is_tracking_objects_; }
710
- void PushHeapObjectsStats(OutputStream* stream) {
713
+ SnapshotObjectId PushHeapObjectsStats(OutputStream* stream) {
711
714
  return ids_.PushHeapObjectsStats(stream);
712
715
  }
713
716
  void StartHeapObjectsTracking() { is_tracking_objects_ = true; }
@@ -734,6 +737,7 @@ class HeapSnapshotsCollection {
734
737
  SnapshotObjectId last_assigned_id() const {
735
738
  return ids_.last_assigned_id();
736
739
  }
740
+ size_t GetUsedMemorySize() const;
737
741
 
738
742
  private:
739
743
  INLINE(static bool HeapSnapshotsMatch(void* key1, void* key2)) {
@@ -848,7 +852,8 @@ class SnapshottingProgressReportingInterface {
848
852
  class V8HeapExplorer : public HeapEntriesAllocator {
849
853
  public:
850
854
  V8HeapExplorer(HeapSnapshot* snapshot,
851
- SnapshottingProgressReportingInterface* progress);
855
+ SnapshottingProgressReportingInterface* progress,
856
+ v8::HeapProfiler::ObjectNameResolver* resolver);
852
857
  virtual ~V8HeapExplorer();
853
858
  virtual HeapEntry* AllocateEntry(HeapThing ptr);
854
859
  void AddRootEntries(SnapshotFillerInterface* filler);
@@ -922,10 +927,6 @@ class V8HeapExplorer : public HeapEntriesAllocator {
922
927
  Object* child,
923
928
  const char* name_format_string = NULL,
924
929
  int field_offset = -1);
925
- void SetPropertyShortcutReference(HeapObject* parent_obj,
926
- int parent,
927
- String* reference_name,
928
- Object* child);
929
930
  void SetUserGlobalReference(Object* user_global);
930
931
  void SetRootGcRootsReference();
931
932
  void SetGcRootsReference(VisitorSynchronization::SyncTag tag);
@@ -946,6 +947,7 @@ class V8HeapExplorer : public HeapEntriesAllocator {
946
947
  SnapshotFillerInterface* filler_;
947
948
  HeapObjectsSet objects_tags_;
948
949
  HeapObjectsSet strong_gc_subroot_names_;
950
+ v8::HeapProfiler::ObjectNameResolver* global_object_name_resolver_;
949
951
 
950
952
  static HeapObject* const kGcRootsObject;
951
953
  static HeapObject* const kFirstGcSubrootObject;
@@ -1022,7 +1024,8 @@ class NativeObjectsExplorer {
1022
1024
  class HeapSnapshotGenerator : public SnapshottingProgressReportingInterface {
1023
1025
  public:
1024
1026
  HeapSnapshotGenerator(HeapSnapshot* snapshot,
1025
- v8::ActivityControl* control);
1027
+ v8::ActivityControl* control,
1028
+ v8::HeapProfiler::ObjectNameResolver* resolver);
1026
1029
  bool GenerateSnapshot();
1027
1030
 
1028
1031
  private:
@@ -1072,10 +1075,10 @@ class HeapSnapshotJSONSerializer {
1072
1075
  int GetStringId(const char* s);
1073
1076
  int entry_index(HeapEntry* e) { return e->index() * kNodeFieldsCount; }
1074
1077
  void SerializeEdge(HeapGraphEdge* edge, bool first_edge);
1075
- void SerializeEdges(const List<HeapEntry>& nodes);
1078
+ void SerializeEdges();
1076
1079
  void SerializeImpl();
1077
- void SerializeNode(HeapEntry* entry, int edges_index);
1078
- void SerializeNodes(const List<HeapEntry>& nodes);
1080
+ void SerializeNode(HeapEntry* entry);
1081
+ void SerializeNodes();
1079
1082
  void SerializeSnapshot();
1080
1083
  void SerializeString(const unsigned char* s);
1081
1084
  void SerializeStrings();
@@ -38,6 +38,10 @@ enum PropertyAttributes {
38
38
  READ_ONLY = v8::ReadOnly,
39
39
  DONT_ENUM = v8::DontEnum,
40
40
  DONT_DELETE = v8::DontDelete,
41
+
42
+ SEALED = DONT_ENUM | DONT_DELETE,
43
+ FROZEN = SEALED | READ_ONLY,
44
+
41
45
  ABSENT = 16 // Used in runtime to indicate a property is absent.
42
46
  // ABSENT can never be stored in or returned from a descriptor's attributes
43
47
  // bitfield. It is only used as a return value meaning the attributes of
@@ -55,21 +59,18 @@ class Smi;
55
59
  // Must fit in the BitField PropertyDetails::TypeField.
56
60
  // A copy of this is in mirror-debugger.js.
57
61
  enum PropertyType {
58
- NORMAL = 0, // only in slow mode
59
- FIELD = 1, // only in fast mode
60
- CONSTANT_FUNCTION = 2, // only in fast mode
62
+ // Only in slow mode.
63
+ NORMAL = 0,
64
+ // Only in fast mode.
65
+ FIELD = 1,
66
+ CONSTANT_FUNCTION = 2,
61
67
  CALLBACKS = 3,
62
- HANDLER = 4, // only in lookup results, not in descriptors
63
- INTERCEPTOR = 5, // only in lookup results, not in descriptors
64
- // All properties before MAP_TRANSITION are real.
65
- MAP_TRANSITION = 6, // only in fast mode
66
- ELEMENTS_TRANSITION = 7,
67
- CONSTANT_TRANSITION = 8, // only in fast mode
68
- NULL_DESCRIPTOR = 9, // only in fast mode
69
- // There are no IC stubs for NULL_DESCRIPTORS. Therefore,
70
- // NULL_DESCRIPTOR can be used as the type flag for IC stubs for
71
- // nonexistent properties.
72
- NONEXISTENT = NULL_DESCRIPTOR
68
+ // Only in lookup results, not in descriptors.
69
+ HANDLER = 4,
70
+ INTERCEPTOR = 5,
71
+ TRANSITION = 6,
72
+ // Only used as a marker in LookupResult.
73
+ NONEXISTENT = 7
73
74
  };
74
75
 
75
76
 
@@ -80,50 +81,64 @@ class PropertyDetails BASE_EMBEDDED {
80
81
  PropertyDetails(PropertyAttributes attributes,
81
82
  PropertyType type,
82
83
  int index = 0) {
83
- ASSERT(TypeField::is_valid(type));
84
- ASSERT(AttributesField::is_valid(attributes));
85
- ASSERT(StorageField::is_valid(index));
86
-
87
84
  value_ = TypeField::encode(type)
88
85
  | AttributesField::encode(attributes)
89
- | StorageField::encode(index);
86
+ | DictionaryStorageField::encode(index);
90
87
 
91
88
  ASSERT(type == this->type());
92
89
  ASSERT(attributes == this->attributes());
93
- ASSERT(index == this->index());
90
+ ASSERT(index == this->dictionary_index());
94
91
  }
95
92
 
93
+ int pointer() { return DescriptorPointer::decode(value_); }
94
+
95
+ PropertyDetails set_pointer(int i) { return PropertyDetails(value_, i); }
96
+
96
97
  // Conversion for storing details as Object*.
97
98
  explicit inline PropertyDetails(Smi* smi);
98
99
  inline Smi* AsSmi();
99
100
 
100
101
  PropertyType type() { return TypeField::decode(value_); }
101
102
 
102
- PropertyAttributes attributes() { return AttributesField::decode(value_); }
103
+ PropertyAttributes attributes() const {
104
+ return AttributesField::decode(value_);
105
+ }
103
106
 
104
- int index() { return StorageField::decode(value_); }
107
+ int dictionary_index() {
108
+ return DictionaryStorageField::decode(value_);
109
+ }
110
+
111
+ int descriptor_index() {
112
+ return DescriptorStorageField::decode(value_);
113
+ }
105
114
 
106
115
  inline PropertyDetails AsDeleted();
107
116
 
108
117
  static bool IsValidIndex(int index) {
109
- return StorageField::is_valid(index);
118
+ return DictionaryStorageField::is_valid(index);
110
119
  }
111
120
 
112
- bool IsReadOnly() { return (attributes() & READ_ONLY) != 0; }
113
- bool IsDontDelete() { return (attributes() & DONT_DELETE) != 0; }
114
- bool IsDontEnum() { return (attributes() & DONT_ENUM) != 0; }
115
- bool IsDeleted() { return DeletedField::decode(value_) != 0;}
121
+ bool IsReadOnly() const { return (attributes() & READ_ONLY) != 0; }
122
+ bool IsDontDelete() const { return (attributes() & DONT_DELETE) != 0; }
123
+ bool IsDontEnum() const { return (attributes() & DONT_ENUM) != 0; }
124
+ bool IsDeleted() const { return DeletedField::decode(value_) != 0;}
116
125
 
117
126
  // Bit fields in value_ (type, shift, size). Must be public so the
118
127
  // constants can be embedded in generated code.
119
- class TypeField: public BitField<PropertyType, 0, 4> {};
120
- class AttributesField: public BitField<PropertyAttributes, 4, 3> {};
121
- class DeletedField: public BitField<uint32_t, 7, 1> {};
122
- class StorageField: public BitField<uint32_t, 8, 32-8> {};
128
+ class TypeField: public BitField<PropertyType, 0, 3> {};
129
+ class AttributesField: public BitField<PropertyAttributes, 3, 3> {};
130
+ class DeletedField: public BitField<uint32_t, 6, 1> {};
131
+ class DictionaryStorageField: public BitField<uint32_t, 7, 24> {};
132
+ class DescriptorStorageField: public BitField<uint32_t, 7, 11> {};
133
+ class DescriptorPointer: public BitField<uint32_t, 18, 11> {};
123
134
 
124
135
  static const int kInitialIndex = 1;
125
136
 
126
137
  private:
138
+ PropertyDetails(int value, int pointer) {
139
+ value_ = DescriptorPointer::update(value, pointer);
140
+ }
141
+
127
142
  uint32_t value_;
128
143
  };
129
144
 
@@ -55,18 +55,6 @@ void LookupResult::Print(FILE* out) {
55
55
  PrintF(out, " -type = normal\n");
56
56
  PrintF(out, " -entry = %d", GetDictionaryEntry());
57
57
  break;
58
- case MAP_TRANSITION:
59
- PrintF(out, " -type = map transition\n");
60
- PrintF(out, " -map:\n");
61
- GetTransitionMap()->Print(out);
62
- PrintF(out, "\n");
63
- break;
64
- case ELEMENTS_TRANSITION:
65
- PrintF(out, " -type = elements transition\n");
66
- PrintF(out, " -map:\n");
67
- GetTransitionMap()->Print(out);
68
- PrintF(out, "\n");
69
- break;
70
58
  case CONSTANT_FUNCTION:
71
59
  PrintF(out, " -type = constant function\n");
72
60
  PrintF(out, " -function:\n");
@@ -75,7 +63,7 @@ void LookupResult::Print(FILE* out) {
75
63
  break;
76
64
  case FIELD:
77
65
  PrintF(out, " -type = field\n");
78
- PrintF(out, " -index = %d", GetFieldIndex());
66
+ PrintF(out, " -index = %d", GetFieldIndex().field_index());
79
67
  PrintF(out, "\n");
80
68
  break;
81
69
  case CALLBACKS:
@@ -89,14 +77,31 @@ void LookupResult::Print(FILE* out) {
89
77
  case INTERCEPTOR:
90
78
  PrintF(out, " -type = lookup interceptor\n");
91
79
  break;
92
- case CONSTANT_TRANSITION:
93
- PrintF(out, " -type = constant property transition\n");
94
- PrintF(out, " -map:\n");
95
- GetTransitionMap()->Print(out);
96
- PrintF(out, "\n");
97
- break;
98
- case NULL_DESCRIPTOR:
99
- PrintF(out, " =type = null descriptor\n");
80
+ case TRANSITION:
81
+ switch (GetTransitionDetails().type()) {
82
+ case FIELD:
83
+ PrintF(out, " -type = map transition\n");
84
+ PrintF(out, " -map:\n");
85
+ GetTransitionMap()->Print(out);
86
+ PrintF(out, "\n");
87
+ return;
88
+ case CONSTANT_FUNCTION:
89
+ PrintF(out, " -type = constant property transition\n");
90
+ PrintF(out, " -map:\n");
91
+ GetTransitionMap()->Print(out);
92
+ PrintF(out, "\n");
93
+ return;
94
+ case CALLBACKS:
95
+ PrintF(out, " -type = callbacks transition\n");
96
+ PrintF(out, " -callback object:\n");
97
+ GetCallbackObject()->Print(out);
98
+ return;
99
+ default:
100
+ UNREACHABLE();
101
+ return;
102
+ }
103
+ case NONEXISTENT:
104
+ UNREACHABLE();
100
105
  break;
101
106
  }
102
107
  }
@@ -107,35 +112,11 @@ void Descriptor::Print(FILE* out) {
107
112
  GetKey()->ShortPrint(out);
108
113
  PrintF(out, " @ ");
109
114
  GetValue()->ShortPrint(out);
110
- PrintF(out, " %d\n", GetDetails().index());
115
+ PrintF(out, " %d\n", GetDetails().descriptor_index());
111
116
  }
112
117
 
113
118
 
114
119
  #endif
115
120
 
116
121
 
117
- bool Descriptor::ContainsTransition() {
118
- switch (details_.type()) {
119
- case MAP_TRANSITION:
120
- case CONSTANT_TRANSITION:
121
- case ELEMENTS_TRANSITION:
122
- return true;
123
- case CALLBACKS: {
124
- if (!value_->IsAccessorPair()) return false;
125
- AccessorPair* accessors = AccessorPair::cast(value_);
126
- return accessors->getter()->IsMap() || accessors->setter()->IsMap();
127
- }
128
- case NORMAL:
129
- case FIELD:
130
- case CONSTANT_FUNCTION:
131
- case HANDLER:
132
- case INTERCEPTOR:
133
- case NULL_DESCRIPTOR:
134
- return false;
135
- }
136
- UNREACHABLE(); // Keep the compiler happy.
137
- return false;
138
- }
139
-
140
-
141
122
  } } // namespace v8::internal
@@ -29,6 +29,7 @@
29
29
  #define V8_PROPERTY_H_
30
30
 
31
31
  #include "allocation.h"
32
+ #include "transitions.h"
32
33
 
33
34
  namespace v8 {
34
35
  namespace internal {
@@ -64,11 +65,10 @@ class Descriptor BASE_EMBEDDED {
64
65
  #endif
65
66
 
66
67
  void SetEnumerationIndex(int index) {
67
- ASSERT(PropertyDetails::IsValidIndex(index));
68
68
  details_ = PropertyDetails(details_.attributes(), details_.type(), index);
69
69
  }
70
70
 
71
- bool ContainsTransition();
71
+ void SetSortedKeyIndex(int index) { details_ = details_.set_pointer(index); }
72
72
 
73
73
  private:
74
74
  String* key_;
@@ -93,7 +93,7 @@ class Descriptor BASE_EMBEDDED {
93
93
  Object* value,
94
94
  PropertyAttributes attributes,
95
95
  PropertyType type,
96
- int index = 0)
96
+ int index)
97
97
  : key_(key),
98
98
  value_(value),
99
99
  details_(attributes, type, index) { }
@@ -101,35 +101,6 @@ class Descriptor BASE_EMBEDDED {
101
101
  friend class DescriptorArray;
102
102
  };
103
103
 
104
- // A pointer from a map to the new map that is created by adding
105
- // a named property. These are key to the speed and functioning of V8.
106
- // The two maps should always have the same prototype, since
107
- // MapSpace::CreateBackPointers depends on this.
108
- class MapTransitionDescriptor: public Descriptor {
109
- public:
110
- MapTransitionDescriptor(String* key, Map* map, PropertyAttributes attributes)
111
- : Descriptor(key, map, attributes, MAP_TRANSITION) { }
112
- };
113
-
114
- class ElementsTransitionDescriptor: public Descriptor {
115
- public:
116
- ElementsTransitionDescriptor(String* key,
117
- Object* map_or_array)
118
- : Descriptor(key, map_or_array, PropertyDetails(NONE,
119
- ELEMENTS_TRANSITION)) { }
120
- };
121
-
122
- // Marks a field name in a map so that adding the field is guaranteed
123
- // to create a FIELD descriptor in the new map. Used after adding
124
- // a constant function the first time, creating a CONSTANT_FUNCTION
125
- // descriptor in the new map. This avoids creating multiple maps with
126
- // the same CONSTANT_FUNCTION field.
127
- class ConstTransitionDescriptor: public Descriptor {
128
- public:
129
- explicit ConstTransitionDescriptor(String* key, Map* map)
130
- : Descriptor(key, map, NONE, CONSTANT_TRANSITION) { }
131
- };
132
-
133
104
 
134
105
  class FieldDescriptor: public Descriptor {
135
106
  public:
@@ -146,7 +117,7 @@ class ConstantFunctionDescriptor: public Descriptor {
146
117
  ConstantFunctionDescriptor(String* key,
147
118
  JSFunction* function,
148
119
  PropertyAttributes attributes,
149
- int index = 0)
120
+ int index)
150
121
  : Descriptor(key, function, attributes, CONSTANT_FUNCTION, index) {}
151
122
  };
152
123
 
@@ -161,33 +132,42 @@ class CallbacksDescriptor: public Descriptor {
161
132
  };
162
133
 
163
134
 
164
- template <class T>
165
- bool IsPropertyDescriptor(T* desc) {
166
- switch (desc->type()) {
167
- case NORMAL:
168
- case FIELD:
169
- case CONSTANT_FUNCTION:
170
- case HANDLER:
171
- case INTERCEPTOR:
172
- return true;
173
- case CALLBACKS: {
174
- Object* callback_object = desc->GetCallbackObject();
175
- // Non-JavaScript (i.e. native) accessors are always a property, otherwise
176
- // either the getter or the setter must be an accessor. Put another way:
177
- // If we only see map transitions and holes in a pair, this is not a
178
- // property.
179
- return (!callback_object->IsAccessorPair() ||
180
- AccessorPair::cast(callback_object)->ContainsAccessor());
181
- }
182
- case MAP_TRANSITION:
183
- case ELEMENTS_TRANSITION:
184
- case CONSTANT_TRANSITION:
185
- case NULL_DESCRIPTOR:
186
- return false;
135
+ // Holds a property index value distinguishing if it is a field index or an
136
+ // index inside the object header.
137
+ class PropertyIndex {
138
+ public:
139
+ static PropertyIndex NewFieldIndex(int index) {
140
+ return PropertyIndex(index, false);
141
+ }
142
+ static PropertyIndex NewHeaderIndex(int index) {
143
+ return PropertyIndex(index, true);
144
+ }
145
+
146
+ bool is_field_index() { return (index_ & kHeaderIndexBit) == 0; }
147
+ bool is_header_index() { return (index_ & kHeaderIndexBit) != 0; }
148
+
149
+ int field_index() {
150
+ ASSERT(is_field_index());
151
+ return value();
152
+ }
153
+ int header_index() {
154
+ ASSERT(is_header_index());
155
+ return value();
156
+ }
157
+
158
+ private:
159
+ static const int kHeaderIndexBit = 1 << 31;
160
+ static const int kIndexMask = ~kHeaderIndexBit;
161
+
162
+ int value() { return index_ & kIndexMask; }
163
+
164
+ PropertyIndex(int index, bool is_header_based)
165
+ : index_(index | (is_header_based ? kHeaderIndexBit : 0)) {
166
+ ASSERT(index <= kIndexMask);
187
167
  }
188
- UNREACHABLE(); // keep the compiler happy
189
- return false;
190
- }
168
+
169
+ int index_;
170
+ };
191
171
 
192
172
 
193
173
  class LookupResult BASE_EMBEDDED {
@@ -198,7 +178,7 @@ class LookupResult BASE_EMBEDDED {
198
178
  lookup_type_(NOT_FOUND),
199
179
  holder_(NULL),
200
180
  cacheable_(true),
201
- details_(NONE, NORMAL) {
181
+ details_(NONE, NONEXISTENT) {
202
182
  isolate->SetTopLookupResult(this);
203
183
  }
204
184
 
@@ -214,6 +194,13 @@ class LookupResult BASE_EMBEDDED {
214
194
  number_ = number;
215
195
  }
216
196
 
197
+ void TransitionResult(JSObject* holder, int number) {
198
+ lookup_type_ = TRANSITION_TYPE;
199
+ details_ = PropertyDetails(NONE, TRANSITION);
200
+ holder_ = holder;
201
+ number_ = number;
202
+ }
203
+
217
204
  void ConstantResult(JSObject* holder) {
218
205
  lookup_type_ = CONSTANT_TYPE;
219
206
  holder_ = holder;
@@ -246,6 +233,7 @@ class LookupResult BASE_EMBEDDED {
246
233
 
247
234
  void NotFound() {
248
235
  lookup_type_ = NOT_FOUND;
236
+ details_ = PropertyDetails(NONE, NONEXISTENT);
249
237
  holder_ = NULL;
250
238
  }
251
239
 
@@ -265,24 +253,81 @@ class LookupResult BASE_EMBEDDED {
265
253
  }
266
254
 
267
255
  PropertyAttributes GetAttributes() {
256
+ ASSERT(!IsTransition());
268
257
  ASSERT(IsFound());
258
+ ASSERT(details_.type() != NONEXISTENT);
269
259
  return details_.attributes();
270
260
  }
271
261
 
272
262
  PropertyDetails GetPropertyDetails() {
263
+ ASSERT(!IsTransition());
273
264
  return details_;
274
265
  }
275
266
 
276
- bool IsReadOnly() { return details_.IsReadOnly(); }
267
+ bool IsFastPropertyType() {
268
+ ASSERT(IsFound());
269
+ return IsTransition() || type() != NORMAL;
270
+ }
271
+
272
+ // Property callbacks does not include transitions to callbacks.
273
+ bool IsPropertyCallbacks() {
274
+ ASSERT(!(details_.type() == CALLBACKS && !IsFound()));
275
+ return details_.type() == CALLBACKS;
276
+ }
277
+
278
+ bool IsReadOnly() {
279
+ ASSERT(IsFound());
280
+ ASSERT(!IsTransition());
281
+ ASSERT(details_.type() != NONEXISTENT);
282
+ return details_.IsReadOnly();
283
+ }
284
+
285
+ bool IsField() {
286
+ ASSERT(!(details_.type() == FIELD && !IsFound()));
287
+ return details_.type() == FIELD;
288
+ }
289
+
290
+ bool IsNormal() {
291
+ ASSERT(!(details_.type() == NORMAL && !IsFound()));
292
+ return details_.type() == NORMAL;
293
+ }
294
+
295
+ bool IsConstantFunction() {
296
+ ASSERT(!(details_.type() == CONSTANT_FUNCTION && !IsFound()));
297
+ return details_.type() == CONSTANT_FUNCTION;
298
+ }
299
+
277
300
  bool IsDontDelete() { return details_.IsDontDelete(); }
278
301
  bool IsDontEnum() { return details_.IsDontEnum(); }
279
302
  bool IsDeleted() { return details_.IsDeleted(); }
280
303
  bool IsFound() { return lookup_type_ != NOT_FOUND; }
304
+ bool IsTransition() { return lookup_type_ == TRANSITION_TYPE; }
281
305
  bool IsHandler() { return lookup_type_ == HANDLER_TYPE; }
306
+ bool IsInterceptor() { return lookup_type_ == INTERCEPTOR_TYPE; }
282
307
 
283
308
  // Is the result is a property excluding transitions and the null descriptor?
284
309
  bool IsProperty() {
285
- return IsFound() && IsPropertyDescriptor(this);
310
+ return IsFound() && !IsTransition();
311
+ }
312
+
313
+ bool IsDataProperty() {
314
+ switch (type()) {
315
+ case FIELD:
316
+ case NORMAL:
317
+ case CONSTANT_FUNCTION:
318
+ return true;
319
+ case CALLBACKS: {
320
+ Object* callback = GetCallbackObject();
321
+ return callback->IsAccessorInfo() || callback->IsForeign();
322
+ }
323
+ case HANDLER:
324
+ case INTERCEPTOR:
325
+ case TRANSITION:
326
+ case NONEXISTENT:
327
+ return false;
328
+ }
329
+ UNREACHABLE();
330
+ return false;
286
331
  }
287
332
 
288
333
  bool IsCacheable() { return cacheable_; }
@@ -291,7 +336,7 @@ class LookupResult BASE_EMBEDDED {
291
336
  Object* GetLazyValue() {
292
337
  switch (type()) {
293
338
  case FIELD:
294
- return holder()->FastPropertyAt(GetFieldIndex());
339
+ return holder()->FastPropertyAt(GetFieldIndex().field_index());
295
340
  case NORMAL: {
296
341
  Object* value;
297
342
  value = holder()->property_dictionary()->ValueAt(GetDictionaryEntry());
@@ -302,37 +347,67 @@ class LookupResult BASE_EMBEDDED {
302
347
  }
303
348
  case CONSTANT_FUNCTION:
304
349
  return GetConstantFunction();
305
- default:
306
- return Smi::FromInt(0);
350
+ case CALLBACKS:
351
+ case HANDLER:
352
+ case INTERCEPTOR:
353
+ case TRANSITION:
354
+ case NONEXISTENT:
355
+ return Isolate::Current()->heap()->the_hole_value();
307
356
  }
357
+ UNREACHABLE();
358
+ return NULL;
359
+ }
360
+
361
+ Map* GetTransitionTarget() {
362
+ ASSERT(IsTransition());
363
+ TransitionArray* transitions = holder()->map()->transitions();
364
+ return transitions->GetTarget(number_);
308
365
  }
309
366
 
367
+ PropertyDetails GetTransitionDetails(Map* map) {
368
+ ASSERT(IsTransition());
369
+ TransitionArray* transitions = map->transitions();
370
+ return transitions->GetTargetDetails(number_);
371
+ }
372
+
373
+ PropertyDetails GetTransitionDetails() {
374
+ return GetTransitionDetails(holder()->map());
375
+ }
376
+
377
+ bool IsTransitionToField(Map* map) {
378
+ return IsTransition() && GetTransitionDetails(map).type() == FIELD;
379
+ }
310
380
 
311
381
  Map* GetTransitionMap() {
312
- ASSERT(lookup_type_ == DESCRIPTOR_TYPE);
313
- ASSERT(type() == MAP_TRANSITION ||
314
- type() == ELEMENTS_TRANSITION ||
315
- type() == CONSTANT_TRANSITION);
382
+ ASSERT(IsTransition());
316
383
  return Map::cast(GetValue());
317
384
  }
318
385
 
319
386
  Map* GetTransitionMapFromMap(Map* map) {
387
+ ASSERT(IsTransition());
388
+ return map->transitions()->GetTarget(number_);
389
+ }
390
+
391
+ int GetTransitionIndex() {
392
+ ASSERT(IsTransition());
393
+ return number_;
394
+ }
395
+
396
+ int GetDescriptorIndex() {
320
397
  ASSERT(lookup_type_ == DESCRIPTOR_TYPE);
321
- ASSERT(type() == MAP_TRANSITION);
322
- return Map::cast(map->instance_descriptors()->GetValue(number_));
398
+ return number_;
323
399
  }
324
400
 
325
- int GetFieldIndex() {
401
+ PropertyIndex GetFieldIndex() {
326
402
  ASSERT(lookup_type_ == DESCRIPTOR_TYPE);
327
- ASSERT(type() == FIELD);
328
- return Descriptor::IndexFromValue(GetValue());
403
+ ASSERT(IsField());
404
+ return PropertyIndex::NewFieldIndex(
405
+ Descriptor::IndexFromValue(GetValue()));
329
406
  }
330
407
 
331
408
  int GetLocalFieldIndexFromMap(Map* map) {
332
- ASSERT(lookup_type_ == DESCRIPTOR_TYPE);
333
- ASSERT(type() == FIELD);
334
- return Descriptor::IndexFromValue(
335
- map->instance_descriptors()->GetValue(number_)) -
409
+ ASSERT(IsField());
410
+ return Descriptor::IndexFromValue(GetValueFromMap(map)) -
336
411
  map->inobject_properties();
337
412
  }
338
413
 
@@ -347,16 +422,15 @@ class LookupResult BASE_EMBEDDED {
347
422
  }
348
423
 
349
424
  JSFunction* GetConstantFunctionFromMap(Map* map) {
350
- ASSERT(lookup_type_ == DESCRIPTOR_TYPE);
351
425
  ASSERT(type() == CONSTANT_FUNCTION);
352
- return JSFunction::cast(map->instance_descriptors()->GetValue(number_));
426
+ return JSFunction::cast(GetValueFromMap(map));
353
427
  }
354
428
 
355
429
  Object* GetCallbackObject() {
356
430
  if (lookup_type_ == CONSTANT_TYPE) {
357
- // For now we only have the __proto__ as constant type.
358
431
  return HEAP->prototype_accessors();
359
432
  }
433
+ ASSERT(!IsTransition());
360
434
  return GetValue();
361
435
  }
362
436
 
@@ -366,14 +440,19 @@ class LookupResult BASE_EMBEDDED {
366
440
 
367
441
  Object* GetValue() {
368
442
  if (lookup_type_ == DESCRIPTOR_TYPE) {
369
- DescriptorArray* descriptors = holder()->map()->instance_descriptors();
370
- return descriptors->GetValue(number_);
443
+ return GetValueFromMap(holder()->map());
371
444
  }
372
445
  // In the dictionary case, the data is held in the value field.
373
446
  ASSERT(lookup_type_ == DICTIONARY_TYPE);
374
447
  return holder()->GetNormalizedProperty(this);
375
448
  }
376
449
 
450
+ Object* GetValueFromMap(Map* map) const {
451
+ ASSERT(lookup_type_ == DESCRIPTOR_TYPE);
452
+ ASSERT(number_ < map->NumberOfOwnDescriptors());
453
+ return map->instance_descriptors()->GetValue(number_);
454
+ }
455
+
377
456
  void Iterate(ObjectVisitor* visitor);
378
457
 
379
458
  private:
@@ -384,6 +463,7 @@ class LookupResult BASE_EMBEDDED {
384
463
  enum {
385
464
  NOT_FOUND,
386
465
  DESCRIPTOR_TYPE,
466
+ TRANSITION_TYPE,
387
467
  DICTIONARY_TYPE,
388
468
  HANDLER_TYPE,
389
469
  INTERCEPTOR_TYPE,