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/ast.h CHANGED
@@ -37,7 +37,7 @@
37
37
  #include "list-inl.h"
38
38
  #include "runtime.h"
39
39
  #include "small-pointer-list.h"
40
- #include "smart-array-pointer.h"
40
+ #include "smart-pointers.h"
41
41
  #include "token.h"
42
42
  #include "utils.h"
43
43
  #include "variables.h"
@@ -75,6 +75,7 @@ namespace internal {
75
75
 
76
76
  #define STATEMENT_NODE_LIST(V) \
77
77
  V(Block) \
78
+ V(ModuleStatement) \
78
79
  V(ExpressionStatement) \
79
80
  V(EmptyStatement) \
80
81
  V(IfStatement) \
@@ -158,14 +159,16 @@ typedef ZoneList<Handle<Object> > ZoneObjectList;
158
159
 
159
160
  #define DECLARE_NODE_TYPE(type) \
160
161
  virtual void Accept(AstVisitor* v); \
161
- virtual AstNode::Type node_type() const { return AstNode::k##type; }
162
+ virtual AstNode::Type node_type() const { return AstNode::k##type; } \
163
+ template<class> friend class AstNodeFactory;
162
164
 
163
165
 
164
166
  enum AstPropertiesFlag {
165
167
  kDontInline,
166
168
  kDontOptimize,
167
169
  kDontSelfOptimize,
168
- kDontSoftInline
170
+ kDontSoftInline,
171
+ kDontCache
169
172
  };
170
173
 
171
174
 
@@ -194,13 +197,6 @@ class AstNode: public ZoneObject {
194
197
  };
195
198
  #undef DECLARE_TYPE_ENUM
196
199
 
197
- static const int kNoNumber = -1;
198
- static const int kFunctionEntryId = 2; // Using 0 could disguise errors.
199
- // This AST id identifies the point after the declarations have been
200
- // visited. We need it to capture the environment effects of declarations
201
- // that emit code (function declarations).
202
- static const int kDeclarationsId = 3;
203
-
204
200
  void* operator new(size_t size, Zone* zone) {
205
201
  return zone->New(static_cast<int>(size));
206
202
  }
@@ -210,7 +206,7 @@ class AstNode: public ZoneObject {
210
206
  virtual ~AstNode() { }
211
207
 
212
208
  virtual void Accept(AstVisitor* v) = 0;
213
- virtual Type node_type() const { return kInvalid; }
209
+ virtual Type node_type() const = 0;
214
210
 
215
211
  // Type testing & conversion functions overridden by concrete subclasses.
216
212
  #define DECLARE_NODE_FUNCTIONS(type) \
@@ -219,9 +215,6 @@ class AstNode: public ZoneObject {
219
215
  AST_NODE_LIST(DECLARE_NODE_FUNCTIONS)
220
216
  #undef DECLARE_NODE_FUNCTIONS
221
217
 
222
- virtual Declaration* AsDeclaration() { return NULL; }
223
- virtual Statement* AsStatement() { return NULL; }
224
- virtual Expression* AsExpression() { return NULL; }
225
218
  virtual TargetCollector* AsTargetCollector() { return NULL; }
226
219
  virtual BreakableStatement* AsBreakableStatement() { return NULL; }
227
220
  virtual IterationStatement* AsIterationStatement() { return NULL; }
@@ -238,6 +231,12 @@ class AstNode: public ZoneObject {
238
231
  return tmp;
239
232
  }
240
233
 
234
+ // Some nodes re-use bailout IDs for type feedback.
235
+ static TypeFeedbackId reuse(BailoutId id) {
236
+ return TypeFeedbackId(id.ToInt());
237
+ }
238
+
239
+
241
240
  private:
242
241
  // Hidden to prevent accidental usage. It would have to load the
243
242
  // current zone from the TLS.
@@ -251,8 +250,6 @@ class Statement: public AstNode {
251
250
  public:
252
251
  Statement() : statement_pos_(RelocInfo::kNoPosition) {}
253
252
 
254
- virtual Statement* AsStatement() { return this; }
255
-
256
253
  bool IsEmpty() { return AsEmptyStatement() != NULL; }
257
254
 
258
255
  void set_statement_pos(int statement_pos) { statement_pos_ = statement_pos; }
@@ -266,17 +263,17 @@ class Statement: public AstNode {
266
263
  class SmallMapList {
267
264
  public:
268
265
  SmallMapList() {}
269
- explicit SmallMapList(int capacity) : list_(capacity) {}
266
+ SmallMapList(int capacity, Zone* zone) : list_(capacity, zone) {}
270
267
 
271
- void Reserve(int capacity) { list_.Reserve(capacity); }
268
+ void Reserve(int capacity, Zone* zone) { list_.Reserve(capacity, zone); }
272
269
  void Clear() { list_.Clear(); }
273
270
  void Sort() { list_.Sort(); }
274
271
 
275
272
  bool is_empty() const { return list_.is_empty(); }
276
273
  int length() const { return list_.length(); }
277
274
 
278
- void Add(Handle<Map> handle) {
279
- list_.Add(handle.location());
275
+ void Add(Handle<Map> handle, Zone* zone) {
276
+ list_.Add(handle.location(), zone);
280
277
  }
281
278
 
282
279
  Handle<Map> at(int i) const {
@@ -313,8 +310,6 @@ class Expression: public AstNode {
313
310
  return 0;
314
311
  }
315
312
 
316
- virtual Expression* AsExpression() { return this; }
317
-
318
313
  virtual bool IsValidLeftHandSide() { return false; }
319
314
 
320
315
  // Helpers for ToBoolean conversion.
@@ -355,8 +350,8 @@ class Expression: public AstNode {
355
350
  return types->at(0);
356
351
  }
357
352
 
358
- unsigned id() const { return id_; }
359
- unsigned test_id() const { return test_id_; }
353
+ BailoutId id() const { return id_; }
354
+ TypeFeedbackId test_id() const { return test_id_; }
360
355
 
361
356
  protected:
362
357
  explicit Expression(Isolate* isolate)
@@ -364,8 +359,8 @@ class Expression: public AstNode {
364
359
  test_id_(GetNextId(isolate)) {}
365
360
 
366
361
  private:
367
- int id_;
368
- int test_id_;
362
+ const BailoutId id_;
363
+ const TypeFeedbackId test_id_;
369
364
  };
370
365
 
371
366
 
@@ -389,9 +384,8 @@ class BreakableStatement: public Statement {
389
384
  // Testers.
390
385
  bool is_target_for_anonymous() const { return type_ == TARGET_FOR_ANONYMOUS; }
391
386
 
392
- // Bailout support.
393
- int EntryId() const { return entry_id_; }
394
- int ExitId() const { return exit_id_; }
387
+ BailoutId EntryId() const { return entry_id_; }
388
+ BailoutId ExitId() const { return exit_id_; }
395
389
 
396
390
  protected:
397
391
  BreakableStatement(Isolate* isolate, ZoneStringList* labels, Type type)
@@ -407,8 +401,8 @@ class BreakableStatement: public Statement {
407
401
  ZoneStringList* labels_;
408
402
  Type type_;
409
403
  Label break_target_;
410
- int entry_id_;
411
- int exit_id_;
404
+ const BailoutId entry_id_;
405
+ const BailoutId exit_id_;
412
406
  };
413
407
 
414
408
 
@@ -416,7 +410,9 @@ class Block: public BreakableStatement {
416
410
  public:
417
411
  DECLARE_NODE_TYPE(Block)
418
412
 
419
- void AddStatement(Statement* statement) { statements_.Add(statement); }
413
+ void AddStatement(Statement* statement, Zone* zone) {
414
+ statements_.Add(statement, zone);
415
+ }
420
416
 
421
417
  ZoneList<Statement*>* statements() { return &statements_; }
422
418
  bool is_initializer_block() const { return is_initializer_block_; }
@@ -425,14 +421,13 @@ class Block: public BreakableStatement {
425
421
  void set_scope(Scope* scope) { scope_ = scope; }
426
422
 
427
423
  protected:
428
- template<class> friend class AstNodeFactory;
429
-
430
424
  Block(Isolate* isolate,
431
425
  ZoneStringList* labels,
432
426
  int capacity,
433
- bool is_initializer_block)
427
+ bool is_initializer_block,
428
+ Zone* zone)
434
429
  : BreakableStatement(isolate, labels, TARGET_FOR_NAMED_ONLY),
435
- statements_(capacity),
430
+ statements_(capacity, zone),
436
431
  is_initializer_block_(is_initializer_block),
437
432
  scope_(NULL) {
438
433
  }
@@ -452,8 +447,6 @@ class Declaration: public AstNode {
452
447
  virtual InitializationFlag initialization() const = 0;
453
448
  virtual bool IsInlineable() const;
454
449
 
455
- virtual Declaration* AsDeclaration() { return this; }
456
-
457
450
  protected:
458
451
  Declaration(VariableProxy* proxy,
459
452
  VariableMode mode,
@@ -461,10 +454,7 @@ class Declaration: public AstNode {
461
454
  : proxy_(proxy),
462
455
  mode_(mode),
463
456
  scope_(scope) {
464
- ASSERT(mode == VAR ||
465
- mode == CONST ||
466
- mode == CONST_HARMONY ||
467
- mode == LET);
457
+ ASSERT(IsDeclaredVariableMode(mode));
468
458
  }
469
459
 
470
460
  private:
@@ -485,8 +475,6 @@ class VariableDeclaration: public Declaration {
485
475
  }
486
476
 
487
477
  protected:
488
- template<class> friend class AstNodeFactory;
489
-
490
478
  VariableDeclaration(VariableProxy* proxy,
491
479
  VariableMode mode,
492
480
  Scope* scope)
@@ -506,8 +494,6 @@ class FunctionDeclaration: public Declaration {
506
494
  virtual bool IsInlineable() const;
507
495
 
508
496
  protected:
509
- template<class> friend class AstNodeFactory;
510
-
511
497
  FunctionDeclaration(VariableProxy* proxy,
512
498
  VariableMode mode,
513
499
  FunctionLiteral* fun,
@@ -534,12 +520,10 @@ class ModuleDeclaration: public Declaration {
534
520
  }
535
521
 
536
522
  protected:
537
- template<class> friend class AstNodeFactory;
538
-
539
523
  ModuleDeclaration(VariableProxy* proxy,
540
524
  Module* module,
541
525
  Scope* scope)
542
- : Declaration(proxy, LET, scope),
526
+ : Declaration(proxy, MODULE, scope),
543
527
  module_(module) {
544
528
  }
545
529
 
@@ -558,8 +542,6 @@ class ImportDeclaration: public Declaration {
558
542
  }
559
543
 
560
544
  protected:
561
- template<class> friend class AstNodeFactory;
562
-
563
545
  ImportDeclaration(VariableProxy* proxy,
564
546
  Module* module,
565
547
  Scope* scope)
@@ -581,25 +563,27 @@ class ExportDeclaration: public Declaration {
581
563
  }
582
564
 
583
565
  protected:
584
- template<class> friend class AstNodeFactory;
585
-
586
- ExportDeclaration(VariableProxy* proxy,
587
- Scope* scope)
588
- : Declaration(proxy, LET, scope) {
589
- }
566
+ ExportDeclaration(VariableProxy* proxy, Scope* scope)
567
+ : Declaration(proxy, LET, scope) {}
590
568
  };
591
569
 
592
570
 
593
571
  class Module: public AstNode {
594
572
  public:
595
573
  Interface* interface() const { return interface_; }
574
+ Block* body() const { return body_; }
596
575
 
597
576
  protected:
598
- Module() : interface_(Interface::NewModule()) {}
599
- explicit Module(Interface* interface) : interface_(interface) {}
577
+ explicit Module(Zone* zone)
578
+ : interface_(Interface::NewModule(zone)),
579
+ body_(NULL) {}
580
+ explicit Module(Interface* interface, Block* body = NULL)
581
+ : interface_(interface),
582
+ body_(body) {}
600
583
 
601
584
  private:
602
585
  Interface* interface_;
586
+ Block* body_;
603
587
  };
604
588
 
605
589
 
@@ -607,20 +591,8 @@ class ModuleLiteral: public Module {
607
591
  public:
608
592
  DECLARE_NODE_TYPE(ModuleLiteral)
609
593
 
610
- Block* body() const { return body_; }
611
- Handle<Context> context() const { return context_; }
612
-
613
594
  protected:
614
- template<class> friend class AstNodeFactory;
615
-
616
- ModuleLiteral(Block* body, Interface* interface)
617
- : Module(interface),
618
- body_(body) {
619
- }
620
-
621
- private:
622
- Block* body_;
623
- Handle<Context> context_;
595
+ ModuleLiteral(Block* body, Interface* interface) : Module(interface, body) {}
624
596
  };
625
597
 
626
598
 
@@ -631,8 +603,6 @@ class ModuleVariable: public Module {
631
603
  VariableProxy* proxy() const { return proxy_; }
632
604
 
633
605
  protected:
634
- template<class> friend class AstNodeFactory;
635
-
636
606
  inline explicit ModuleVariable(VariableProxy* proxy);
637
607
 
638
608
  private:
@@ -648,10 +618,9 @@ class ModulePath: public Module {
648
618
  Handle<String> name() const { return name_; }
649
619
 
650
620
  protected:
651
- template<class> friend class AstNodeFactory;
652
-
653
- ModulePath(Module* module, Handle<String> name)
654
- : module_(module),
621
+ ModulePath(Module* module, Handle<String> name, Zone* zone)
622
+ : Module(zone),
623
+ module_(module),
655
624
  name_(name) {
656
625
  }
657
626
 
@@ -668,9 +637,8 @@ class ModuleUrl: public Module {
668
637
  Handle<String> url() const { return url_; }
669
638
 
670
639
  protected:
671
- template<class> friend class AstNodeFactory;
672
-
673
- explicit ModuleUrl(Handle<String> url) : url_(url) {
640
+ ModuleUrl(Handle<String> url, Zone* zone)
641
+ : Module(zone), url_(url) {
674
642
  }
675
643
 
676
644
  private:
@@ -678,6 +646,25 @@ class ModuleUrl: public Module {
678
646
  };
679
647
 
680
648
 
649
+ class ModuleStatement: public Statement {
650
+ public:
651
+ DECLARE_NODE_TYPE(ModuleStatement)
652
+
653
+ VariableProxy* proxy() const { return proxy_; }
654
+ Block* body() const { return body_; }
655
+
656
+ protected:
657
+ ModuleStatement(VariableProxy* proxy, Block* body)
658
+ : proxy_(proxy),
659
+ body_(body) {
660
+ }
661
+
662
+ private:
663
+ VariableProxy* proxy_;
664
+ Block* body_;
665
+ };
666
+
667
+
681
668
  class IterationStatement: public BreakableStatement {
682
669
  public:
683
670
  // Type testing & conversion.
@@ -685,10 +672,9 @@ class IterationStatement: public BreakableStatement {
685
672
 
686
673
  Statement* body() const { return body_; }
687
674
 
688
- // Bailout support.
689
- int OsrEntryId() const { return osr_entry_id_; }
690
- virtual int ContinueId() const = 0;
691
- virtual int StackCheckId() const = 0;
675
+ BailoutId OsrEntryId() const { return osr_entry_id_; }
676
+ virtual BailoutId ContinueId() const = 0;
677
+ virtual BailoutId StackCheckId() const = 0;
692
678
 
693
679
  // Code generation
694
680
  Label* continue_target() { return &continue_target_; }
@@ -707,7 +693,7 @@ class IterationStatement: public BreakableStatement {
707
693
  private:
708
694
  Statement* body_;
709
695
  Label continue_target_;
710
- int osr_entry_id_;
696
+ const BailoutId osr_entry_id_;
711
697
  };
712
698
 
713
699
 
@@ -727,14 +713,11 @@ class DoWhileStatement: public IterationStatement {
727
713
  int condition_position() { return condition_position_; }
728
714
  void set_condition_position(int pos) { condition_position_ = pos; }
729
715
 
730
- // Bailout support.
731
- virtual int ContinueId() const { return continue_id_; }
732
- virtual int StackCheckId() const { return back_edge_id_; }
733
- int BackEdgeId() const { return back_edge_id_; }
716
+ virtual BailoutId ContinueId() const { return continue_id_; }
717
+ virtual BailoutId StackCheckId() const { return back_edge_id_; }
718
+ BailoutId BackEdgeId() const { return back_edge_id_; }
734
719
 
735
720
  protected:
736
- template<class> friend class AstNodeFactory;
737
-
738
721
  DoWhileStatement(Isolate* isolate, ZoneStringList* labels)
739
722
  : IterationStatement(isolate, labels),
740
723
  cond_(NULL),
@@ -746,8 +729,8 @@ class DoWhileStatement: public IterationStatement {
746
729
  private:
747
730
  Expression* cond_;
748
731
  int condition_position_;
749
- int continue_id_;
750
- int back_edge_id_;
732
+ const BailoutId continue_id_;
733
+ const BailoutId back_edge_id_;
751
734
  };
752
735
 
753
736
 
@@ -768,14 +751,11 @@ class WhileStatement: public IterationStatement {
768
751
  may_have_function_literal_ = value;
769
752
  }
770
753
 
771
- // Bailout support.
772
- virtual int ContinueId() const { return EntryId(); }
773
- virtual int StackCheckId() const { return body_id_; }
774
- int BodyId() const { return body_id_; }
754
+ virtual BailoutId ContinueId() const { return EntryId(); }
755
+ virtual BailoutId StackCheckId() const { return body_id_; }
756
+ BailoutId BodyId() const { return body_id_; }
775
757
 
776
758
  protected:
777
- template<class> friend class AstNodeFactory;
778
-
779
759
  WhileStatement(Isolate* isolate, ZoneStringList* labels)
780
760
  : IterationStatement(isolate, labels),
781
761
  cond_(NULL),
@@ -787,7 +767,7 @@ class WhileStatement: public IterationStatement {
787
767
  Expression* cond_;
788
768
  // True if there is a function literal subexpression in the condition.
789
769
  bool may_have_function_literal_;
790
- int body_id_;
770
+ const BailoutId body_id_;
791
771
  };
792
772
 
793
773
 
@@ -816,18 +796,15 @@ class ForStatement: public IterationStatement {
816
796
  may_have_function_literal_ = value;
817
797
  }
818
798
 
819
- // Bailout support.
820
- virtual int ContinueId() const { return continue_id_; }
821
- virtual int StackCheckId() const { return body_id_; }
822
- int BodyId() const { return body_id_; }
799
+ virtual BailoutId ContinueId() const { return continue_id_; }
800
+ virtual BailoutId StackCheckId() const { return body_id_; }
801
+ BailoutId BodyId() const { return body_id_; }
823
802
 
824
803
  bool is_fast_smi_loop() { return loop_variable_ != NULL; }
825
804
  Variable* loop_variable() { return loop_variable_; }
826
805
  void set_loop_variable(Variable* var) { loop_variable_ = var; }
827
806
 
828
807
  protected:
829
- template<class> friend class AstNodeFactory;
830
-
831
808
  ForStatement(Isolate* isolate, ZoneStringList* labels)
832
809
  : IterationStatement(isolate, labels),
833
810
  init_(NULL),
@@ -846,8 +823,8 @@ class ForStatement: public IterationStatement {
846
823
  // True if there is a function literal subexpression in the condition.
847
824
  bool may_have_function_literal_;
848
825
  Variable* loop_variable_;
849
- int continue_id_;
850
- int body_id_;
826
+ const BailoutId continue_id_;
827
+ const BailoutId body_id_;
851
828
  };
852
829
 
853
830
 
@@ -864,14 +841,14 @@ class ForInStatement: public IterationStatement {
864
841
  Expression* each() const { return each_; }
865
842
  Expression* enumerable() const { return enumerable_; }
866
843
 
867
- virtual int ContinueId() const { return EntryId(); }
868
- virtual int StackCheckId() const { return body_id_; }
869
- int BodyId() const { return body_id_; }
870
- int PrepareId() const { return prepare_id_; }
844
+ virtual BailoutId ContinueId() const { return EntryId(); }
845
+ virtual BailoutId StackCheckId() const { return body_id_; }
846
+ BailoutId BodyId() const { return body_id_; }
847
+ BailoutId PrepareId() const { return prepare_id_; }
871
848
 
872
- protected:
873
- template<class> friend class AstNodeFactory;
849
+ TypeFeedbackId ForInFeedbackId() const { return reuse(PrepareId()); }
874
850
 
851
+ protected:
875
852
  ForInStatement(Isolate* isolate, ZoneStringList* labels)
876
853
  : IterationStatement(isolate, labels),
877
854
  each_(NULL),
@@ -883,8 +860,8 @@ class ForInStatement: public IterationStatement {
883
860
  private:
884
861
  Expression* each_;
885
862
  Expression* enumerable_;
886
- int body_id_;
887
- int prepare_id_;
863
+ const BailoutId body_id_;
864
+ const BailoutId prepare_id_;
888
865
  };
889
866
 
890
867
 
@@ -896,8 +873,6 @@ class ExpressionStatement: public Statement {
896
873
  Expression* expression() const { return expression_; }
897
874
 
898
875
  protected:
899
- template<class> friend class AstNodeFactory;
900
-
901
876
  explicit ExpressionStatement(Expression* expression)
902
877
  : expression_(expression) { }
903
878
 
@@ -913,8 +888,6 @@ class ContinueStatement: public Statement {
913
888
  IterationStatement* target() const { return target_; }
914
889
 
915
890
  protected:
916
- template<class> friend class AstNodeFactory;
917
-
918
891
  explicit ContinueStatement(IterationStatement* target)
919
892
  : target_(target) { }
920
893
 
@@ -930,8 +903,6 @@ class BreakStatement: public Statement {
930
903
  BreakableStatement* target() const { return target_; }
931
904
 
932
905
  protected:
933
- template<class> friend class AstNodeFactory;
934
-
935
906
  explicit BreakStatement(BreakableStatement* target)
936
907
  : target_(target) { }
937
908
 
@@ -947,8 +918,6 @@ class ReturnStatement: public Statement {
947
918
  Expression* expression() const { return expression_; }
948
919
 
949
920
  protected:
950
- template<class> friend class AstNodeFactory;
951
-
952
921
  explicit ReturnStatement(Expression* expression)
953
922
  : expression_(expression) { }
954
923
 
@@ -965,8 +934,6 @@ class WithStatement: public Statement {
965
934
  Statement* statement() const { return statement_; }
966
935
 
967
936
  protected:
968
- template<class> friend class AstNodeFactory;
969
-
970
937
  WithStatement(Expression* expression, Statement* statement)
971
938
  : expression_(expression),
972
939
  statement_(statement) { }
@@ -995,10 +962,10 @@ class CaseClause: public ZoneObject {
995
962
  int position() const { return position_; }
996
963
  void set_position(int pos) { position_ = pos; }
997
964
 
998
- int EntryId() { return entry_id_; }
999
- int CompareId() { return compare_id_; }
965
+ BailoutId EntryId() const { return entry_id_; }
1000
966
 
1001
967
  // Type feedback information.
968
+ TypeFeedbackId CompareId() { return compare_id_; }
1002
969
  void RecordTypeFeedback(TypeFeedbackOracle* oracle);
1003
970
  bool IsSmiCompare() { return compare_type_ == SMI_ONLY; }
1004
971
  bool IsSymbolCompare() { return compare_type_ == SYMBOL_ONLY; }
@@ -1018,8 +985,8 @@ class CaseClause: public ZoneObject {
1018
985
  OBJECT_ONLY
1019
986
  };
1020
987
  CompareTypeFeedback compare_type_;
1021
- int compare_id_;
1022
- int entry_id_;
988
+ const TypeFeedbackId compare_id_;
989
+ const BailoutId entry_id_;
1023
990
  };
1024
991
 
1025
992
 
@@ -1036,8 +1003,6 @@ class SwitchStatement: public BreakableStatement {
1036
1003
  ZoneList<CaseClause*>* cases() const { return cases_; }
1037
1004
 
1038
1005
  protected:
1039
- template<class> friend class AstNodeFactory;
1040
-
1041
1006
  SwitchStatement(Isolate* isolate, ZoneStringList* labels)
1042
1007
  : BreakableStatement(isolate, labels, TARGET_FOR_ANONYMOUS),
1043
1008
  tag_(NULL),
@@ -1065,13 +1030,11 @@ class IfStatement: public Statement {
1065
1030
  Statement* then_statement() const { return then_statement_; }
1066
1031
  Statement* else_statement() const { return else_statement_; }
1067
1032
 
1068
- int IfId() const { return if_id_; }
1069
- int ThenId() const { return then_id_; }
1070
- int ElseId() const { return else_id_; }
1033
+ BailoutId IfId() const { return if_id_; }
1034
+ BailoutId ThenId() const { return then_id_; }
1035
+ BailoutId ElseId() const { return else_id_; }
1071
1036
 
1072
1037
  protected:
1073
- template<class> friend class AstNodeFactory;
1074
-
1075
1038
  IfStatement(Isolate* isolate,
1076
1039
  Expression* condition,
1077
1040
  Statement* then_statement,
@@ -1088,9 +1051,9 @@ class IfStatement: public Statement {
1088
1051
  Expression* condition_;
1089
1052
  Statement* then_statement_;
1090
1053
  Statement* else_statement_;
1091
- int if_id_;
1092
- int then_id_;
1093
- int else_id_;
1054
+ const BailoutId if_id_;
1055
+ const BailoutId then_id_;
1056
+ const BailoutId else_id_;
1094
1057
  };
1095
1058
 
1096
1059
 
@@ -1098,15 +1061,16 @@ class IfStatement: public Statement {
1098
1061
  // stack in the compiler; this should probably be reworked.
1099
1062
  class TargetCollector: public AstNode {
1100
1063
  public:
1101
- TargetCollector() : targets_(0) { }
1064
+ explicit TargetCollector(Zone* zone) : targets_(0, zone) { }
1102
1065
 
1103
1066
  // Adds a jump target to the collector. The collector stores a pointer not
1104
1067
  // a copy of the target to make binding work, so make sure not to pass in
1105
1068
  // references to something on the stack.
1106
- void AddTarget(Label* target);
1069
+ void AddTarget(Label* target, Zone* zone);
1107
1070
 
1108
1071
  // Virtual behaviour. TargetCollectors are never part of the AST.
1109
1072
  virtual void Accept(AstVisitor* v) { UNREACHABLE(); }
1073
+ virtual Type node_type() const { return kInvalid; }
1110
1074
  virtual TargetCollector* AsTargetCollector() { return this; }
1111
1075
 
1112
1076
  ZoneList<Label*>* targets() { return &targets_; }
@@ -1150,8 +1114,6 @@ class TryCatchStatement: public TryStatement {
1150
1114
  Block* catch_block() const { return catch_block_; }
1151
1115
 
1152
1116
  protected:
1153
- template<class> friend class AstNodeFactory;
1154
-
1155
1117
  TryCatchStatement(int index,
1156
1118
  Block* try_block,
1157
1119
  Scope* scope,
@@ -1177,8 +1139,6 @@ class TryFinallyStatement: public TryStatement {
1177
1139
  Block* finally_block() const { return finally_block_; }
1178
1140
 
1179
1141
  protected:
1180
- template<class> friend class AstNodeFactory;
1181
-
1182
1142
  TryFinallyStatement(int index, Block* try_block, Block* finally_block)
1183
1143
  : TryStatement(index, try_block),
1184
1144
  finally_block_(finally_block) { }
@@ -1193,8 +1153,6 @@ class DebuggerStatement: public Statement {
1193
1153
  DECLARE_NODE_TYPE(DebuggerStatement)
1194
1154
 
1195
1155
  protected:
1196
- template<class> friend class AstNodeFactory;
1197
-
1198
1156
  DebuggerStatement() {}
1199
1157
  };
1200
1158
 
@@ -1204,8 +1162,6 @@ class EmptyStatement: public Statement {
1204
1162
  DECLARE_NODE_TYPE(EmptyStatement)
1205
1163
 
1206
1164
  protected:
1207
- template<class> friend class AstNodeFactory;
1208
-
1209
1165
  EmptyStatement() {}
1210
1166
  };
1211
1167
 
@@ -1256,9 +1212,9 @@ class Literal: public Expression {
1256
1212
  return s1->Equals(*s2);
1257
1213
  }
1258
1214
 
1259
- protected:
1260
- template<class> friend class AstNodeFactory;
1215
+ TypeFeedbackId LiteralFeedbackId() const { return reuse(id()); }
1261
1216
 
1217
+ protected:
1262
1218
  Literal(Isolate* isolate, Handle<Object> handle)
1263
1219
  : Expression(isolate),
1264
1220
  handle_(handle) { }
@@ -1361,7 +1317,7 @@ class ObjectLiteral: public MaterializedLiteral {
1361
1317
  // Mark all computed expressions that are bound to a key that
1362
1318
  // is shadowed by a later occurrence of the same key. For the
1363
1319
  // marked expressions, no store code is emitted.
1364
- void CalculateEmitStore();
1320
+ void CalculateEmitStore(Zone* zone);
1365
1321
 
1366
1322
  enum Flags {
1367
1323
  kNoFlags = 0,
@@ -1376,8 +1332,6 @@ class ObjectLiteral: public MaterializedLiteral {
1376
1332
  };
1377
1333
 
1378
1334
  protected:
1379
- template<class> friend class AstNodeFactory;
1380
-
1381
1335
  ObjectLiteral(Isolate* isolate,
1382
1336
  Handle<FixedArray> constant_properties,
1383
1337
  ZoneList<Property*>* properties,
@@ -1409,8 +1363,6 @@ class RegExpLiteral: public MaterializedLiteral {
1409
1363
  Handle<String> flags() const { return flags_; }
1410
1364
 
1411
1365
  protected:
1412
- template<class> friend class AstNodeFactory;
1413
-
1414
1366
  RegExpLiteral(Isolate* isolate,
1415
1367
  Handle<String> pattern,
1416
1368
  Handle<String> flags,
@@ -1434,11 +1386,11 @@ class ArrayLiteral: public MaterializedLiteral {
1434
1386
  ZoneList<Expression*>* values() const { return values_; }
1435
1387
 
1436
1388
  // Return an AST id for an element that is used in simulate instructions.
1437
- int GetIdForElement(int i) { return first_element_id_ + i; }
1389
+ BailoutId GetIdForElement(int i) {
1390
+ return BailoutId(first_element_id_.ToInt() + i);
1391
+ }
1438
1392
 
1439
1393
  protected:
1440
- template<class> friend class AstNodeFactory;
1441
-
1442
1394
  ArrayLiteral(Isolate* isolate,
1443
1395
  Handle<FixedArray> constant_elements,
1444
1396
  ZoneList<Expression*>* values,
@@ -1453,7 +1405,7 @@ class ArrayLiteral: public MaterializedLiteral {
1453
1405
  private:
1454
1406
  Handle<FixedArray> constant_elements_;
1455
1407
  ZoneList<Expression*>* values_;
1456
- int first_element_id_;
1408
+ const BailoutId first_element_id_;
1457
1409
  };
1458
1410
 
1459
1411
 
@@ -1485,19 +1437,17 @@ class VariableProxy: public Expression {
1485
1437
  void MarkAsTrivial() { is_trivial_ = true; }
1486
1438
  void MarkAsLValue() { is_lvalue_ = true; }
1487
1439
 
1488
- // Bind this proxy to the variable var.
1440
+ // Bind this proxy to the variable var. Interfaces must match.
1489
1441
  void BindTo(Variable* var);
1490
1442
 
1491
1443
  protected:
1492
- template<class> friend class AstNodeFactory;
1493
-
1494
1444
  VariableProxy(Isolate* isolate, Variable* var);
1495
1445
 
1496
1446
  VariableProxy(Isolate* isolate,
1497
1447
  Handle<String> name,
1498
1448
  bool is_this,
1499
- int position,
1500
- Interface* interface);
1449
+ Interface* interface,
1450
+ int position);
1501
1451
 
1502
1452
  Handle<String> name_;
1503
1453
  Variable* var_; // resolved variable, or NULL
@@ -1521,20 +1471,21 @@ class Property: public Expression {
1521
1471
  Expression* key() const { return key_; }
1522
1472
  virtual int position() const { return pos_; }
1523
1473
 
1474
+ BailoutId LoadId() const { return load_id_; }
1475
+
1524
1476
  bool IsStringLength() const { return is_string_length_; }
1525
1477
  bool IsStringAccess() const { return is_string_access_; }
1526
1478
  bool IsFunctionPrototype() const { return is_function_prototype_; }
1527
1479
 
1528
1480
  // Type feedback information.
1529
- void RecordTypeFeedback(TypeFeedbackOracle* oracle);
1481
+ void RecordTypeFeedback(TypeFeedbackOracle* oracle, Zone* zone);
1530
1482
  virtual bool IsMonomorphic() { return is_monomorphic_; }
1531
1483
  virtual SmallMapList* GetReceiverTypes() { return &receiver_types_; }
1532
1484
  bool IsArrayLength() { return is_array_length_; }
1533
1485
  bool IsUninitialized() { return is_uninitialized_; }
1486
+ TypeFeedbackId PropertyFeedbackId() { return reuse(id()); }
1534
1487
 
1535
1488
  protected:
1536
- template<class> friend class AstNodeFactory;
1537
-
1538
1489
  Property(Isolate* isolate,
1539
1490
  Expression* obj,
1540
1491
  Expression* key,
@@ -1543,6 +1494,7 @@ class Property: public Expression {
1543
1494
  obj_(obj),
1544
1495
  key_(key),
1545
1496
  pos_(pos),
1497
+ load_id_(GetNextId(isolate)),
1546
1498
  is_monomorphic_(false),
1547
1499
  is_uninitialized_(false),
1548
1500
  is_array_length_(false),
@@ -1554,6 +1506,7 @@ class Property: public Expression {
1554
1506
  Expression* obj_;
1555
1507
  Expression* key_;
1556
1508
  int pos_;
1509
+ const BailoutId load_id_;
1557
1510
 
1558
1511
  SmallMapList receiver_types_;
1559
1512
  bool is_monomorphic_ : 1;
@@ -1573,20 +1526,25 @@ class Call: public Expression {
1573
1526
  ZoneList<Expression*>* arguments() const { return arguments_; }
1574
1527
  virtual int position() const { return pos_; }
1575
1528
 
1576
- void RecordTypeFeedback(TypeFeedbackOracle* oracle,
1577
- CallKind call_kind);
1529
+ // Type feedback information.
1530
+ TypeFeedbackId CallFeedbackId() const { return reuse(id()); }
1531
+ void RecordTypeFeedback(TypeFeedbackOracle* oracle, CallKind call_kind);
1578
1532
  virtual SmallMapList* GetReceiverTypes() { return &receiver_types_; }
1579
1533
  virtual bool IsMonomorphic() { return is_monomorphic_; }
1580
1534
  CheckType check_type() const { return check_type_; }
1581
1535
  Handle<JSFunction> target() { return target_; }
1536
+
1537
+ // A cache for the holder, set as a side effect of computing the target of the
1538
+ // call. Note that it contains the null handle when the receiver is the same
1539
+ // as the holder!
1582
1540
  Handle<JSObject> holder() { return holder_; }
1541
+
1583
1542
  Handle<JSGlobalPropertyCell> cell() { return cell_; }
1584
1543
 
1585
1544
  bool ComputeTarget(Handle<Map> type, Handle<String> name);
1586
1545
  bool ComputeGlobalTarget(Handle<GlobalObject> global, LookupResult* lookup);
1587
1546
 
1588
- // Bailout support.
1589
- int ReturnId() const { return return_id_; }
1547
+ BailoutId ReturnId() const { return return_id_; }
1590
1548
 
1591
1549
  #ifdef DEBUG
1592
1550
  // Used to assert that the FullCodeGenerator records the return site.
@@ -1594,8 +1552,6 @@ class Call: public Expression {
1594
1552
  #endif
1595
1553
 
1596
1554
  protected:
1597
- template<class> friend class AstNodeFactory;
1598
-
1599
1555
  Call(Isolate* isolate,
1600
1556
  Expression* expression,
1601
1557
  ZoneList<Expression*>* arguments,
@@ -1620,7 +1576,7 @@ class Call: public Expression {
1620
1576
  Handle<JSObject> holder_;
1621
1577
  Handle<JSGlobalPropertyCell> cell_;
1622
1578
 
1623
- int return_id_;
1579
+ const BailoutId return_id_;
1624
1580
  };
1625
1581
 
1626
1582
 
@@ -1632,16 +1588,15 @@ class CallNew: public Expression {
1632
1588
  ZoneList<Expression*>* arguments() const { return arguments_; }
1633
1589
  virtual int position() const { return pos_; }
1634
1590
 
1591
+ // Type feedback information.
1592
+ TypeFeedbackId CallNewFeedbackId() const { return reuse(id()); }
1635
1593
  void RecordTypeFeedback(TypeFeedbackOracle* oracle);
1636
1594
  virtual bool IsMonomorphic() { return is_monomorphic_; }
1637
1595
  Handle<JSFunction> target() { return target_; }
1638
1596
 
1639
- // Bailout support.
1640
- int ReturnId() const { return return_id_; }
1597
+ BailoutId ReturnId() const { return return_id_; }
1641
1598
 
1642
1599
  protected:
1643
- template<class> friend class AstNodeFactory;
1644
-
1645
1600
  CallNew(Isolate* isolate,
1646
1601
  Expression* expression,
1647
1602
  ZoneList<Expression*>* arguments,
@@ -1661,7 +1616,7 @@ class CallNew: public Expression {
1661
1616
  bool is_monomorphic_;
1662
1617
  Handle<JSFunction> target_;
1663
1618
 
1664
- int return_id_;
1619
+ const BailoutId return_id_;
1665
1620
  };
1666
1621
 
1667
1622
 
@@ -1678,9 +1633,9 @@ class CallRuntime: public Expression {
1678
1633
  ZoneList<Expression*>* arguments() const { return arguments_; }
1679
1634
  bool is_jsruntime() const { return function_ == NULL; }
1680
1635
 
1681
- protected:
1682
- template<class> friend class AstNodeFactory;
1636
+ TypeFeedbackId CallRuntimeFeedbackId() const { return reuse(id()); }
1683
1637
 
1638
+ protected:
1684
1639
  CallRuntime(Isolate* isolate,
1685
1640
  Handle<String> name,
1686
1641
  const Runtime::Function* function,
@@ -1707,12 +1662,12 @@ class UnaryOperation: public Expression {
1707
1662
  Expression* expression() const { return expression_; }
1708
1663
  virtual int position() const { return pos_; }
1709
1664
 
1710
- int MaterializeTrueId() { return materialize_true_id_; }
1711
- int MaterializeFalseId() { return materialize_false_id_; }
1665
+ BailoutId MaterializeTrueId() { return materialize_true_id_; }
1666
+ BailoutId MaterializeFalseId() { return materialize_false_id_; }
1712
1667
 
1713
- protected:
1714
- template<class> friend class AstNodeFactory;
1668
+ TypeFeedbackId UnaryOperationFeedbackId() const { return reuse(id()); }
1715
1669
 
1670
+ protected:
1716
1671
  UnaryOperation(Isolate* isolate,
1717
1672
  Token::Value op,
1718
1673
  Expression* expression,
@@ -1721,13 +1676,9 @@ class UnaryOperation: public Expression {
1721
1676
  op_(op),
1722
1677
  expression_(expression),
1723
1678
  pos_(pos),
1724
- materialize_true_id_(AstNode::kNoNumber),
1725
- materialize_false_id_(AstNode::kNoNumber) {
1679
+ materialize_true_id_(GetNextId(isolate)),
1680
+ materialize_false_id_(GetNextId(isolate)) {
1726
1681
  ASSERT(Token::IsUnaryOp(op));
1727
- if (op == Token::NOT) {
1728
- materialize_true_id_ = GetNextId(isolate);
1729
- materialize_false_id_ = GetNextId(isolate);
1730
- }
1731
1682
  }
1732
1683
 
1733
1684
  private:
@@ -1737,8 +1688,8 @@ class UnaryOperation: public Expression {
1737
1688
 
1738
1689
  // For unary not (Token::NOT), the AST ids where true and false will
1739
1690
  // actually be materialized, respectively.
1740
- int materialize_true_id_;
1741
- int materialize_false_id_;
1691
+ const BailoutId materialize_true_id_;
1692
+ const BailoutId materialize_false_id_;
1742
1693
  };
1743
1694
 
1744
1695
 
@@ -1753,22 +1704,23 @@ class BinaryOperation: public Expression {
1753
1704
  Expression* right() const { return right_; }
1754
1705
  virtual int position() const { return pos_; }
1755
1706
 
1756
- // Bailout support.
1757
- int RightId() const { return right_id_; }
1707
+ BailoutId RightId() const { return right_id_; }
1758
1708
 
1759
- protected:
1760
- template<class> friend class AstNodeFactory;
1709
+ TypeFeedbackId BinaryOperationFeedbackId() const { return reuse(id()); }
1761
1710
 
1711
+ protected:
1762
1712
  BinaryOperation(Isolate* isolate,
1763
1713
  Token::Value op,
1764
1714
  Expression* left,
1765
1715
  Expression* right,
1766
1716
  int pos)
1767
- : Expression(isolate), op_(op), left_(left), right_(right), pos_(pos) {
1717
+ : Expression(isolate),
1718
+ op_(op),
1719
+ left_(left),
1720
+ right_(right),
1721
+ pos_(pos),
1722
+ right_id_(GetNextId(isolate)) {
1768
1723
  ASSERT(Token::IsBinaryOp(op));
1769
- right_id_ = (op == Token::AND || op == Token::OR)
1770
- ? GetNextId(isolate)
1771
- : AstNode::kNoNumber;
1772
1724
  }
1773
1725
 
1774
1726
  private:
@@ -1776,9 +1728,9 @@ class BinaryOperation: public Expression {
1776
1728
  Expression* left_;
1777
1729
  Expression* right_;
1778
1730
  int pos_;
1779
- // The short-circuit logical operations have an AST ID for their
1731
+ // The short-circuit logical operations need an AST ID for their
1780
1732
  // right-hand subexpression.
1781
- int right_id_;
1733
+ const BailoutId right_id_;
1782
1734
  };
1783
1735
 
1784
1736
 
@@ -1799,17 +1751,16 @@ class CountOperation: public Expression {
1799
1751
 
1800
1752
  virtual void MarkAsStatement() { is_prefix_ = true; }
1801
1753
 
1802
- void RecordTypeFeedback(TypeFeedbackOracle* oracle);
1754
+ void RecordTypeFeedback(TypeFeedbackOracle* oracle, Zone* znoe);
1803
1755
  virtual bool IsMonomorphic() { return is_monomorphic_; }
1804
1756
  virtual SmallMapList* GetReceiverTypes() { return &receiver_types_; }
1805
1757
 
1806
- // Bailout support.
1807
- int AssignmentId() const { return assignment_id_; }
1808
- int CountId() const { return count_id_; }
1758
+ BailoutId AssignmentId() const { return assignment_id_; }
1809
1759
 
1810
- protected:
1811
- template<class> friend class AstNodeFactory;
1760
+ TypeFeedbackId CountBinOpFeedbackId() const { return count_id_; }
1761
+ TypeFeedbackId CountStoreFeedbackId() const { return reuse(id()); }
1812
1762
 
1763
+ protected:
1813
1764
  CountOperation(Isolate* isolate,
1814
1765
  Token::Value op,
1815
1766
  bool is_prefix,
@@ -1829,8 +1780,8 @@ class CountOperation: public Expression {
1829
1780
  bool is_monomorphic_;
1830
1781
  Expression* expression_;
1831
1782
  int pos_;
1832
- int assignment_id_;
1833
- int count_id_;
1783
+ const BailoutId assignment_id_;
1784
+ const TypeFeedbackId count_id_;
1834
1785
  SmallMapList receiver_types_;
1835
1786
  };
1836
1787
 
@@ -1845,9 +1796,7 @@ class CompareOperation: public Expression {
1845
1796
  virtual int position() const { return pos_; }
1846
1797
 
1847
1798
  // Type feedback information.
1848
- void RecordTypeFeedback(TypeFeedbackOracle* oracle);
1849
- bool IsSmiCompare() { return compare_type_ == SMI_ONLY; }
1850
- bool IsObjectCompare() { return compare_type_ == OBJECT_ONLY; }
1799
+ TypeFeedbackId CompareOperationFeedbackId() const { return reuse(id()); }
1851
1800
 
1852
1801
  // Match special cases.
1853
1802
  bool IsLiteralCompareTypeof(Expression** expr, Handle<String>* check);
@@ -1855,8 +1804,6 @@ class CompareOperation: public Expression {
1855
1804
  bool IsLiteralCompareNull(Expression** expr);
1856
1805
 
1857
1806
  protected:
1858
- template<class> friend class AstNodeFactory;
1859
-
1860
1807
  CompareOperation(Isolate* isolate,
1861
1808
  Token::Value op,
1862
1809
  Expression* left,
@@ -1866,8 +1813,7 @@ class CompareOperation: public Expression {
1866
1813
  op_(op),
1867
1814
  left_(left),
1868
1815
  right_(right),
1869
- pos_(pos),
1870
- compare_type_(NONE) {
1816
+ pos_(pos) {
1871
1817
  ASSERT(Token::IsCompareOp(op));
1872
1818
  }
1873
1819
 
@@ -1876,9 +1822,6 @@ class CompareOperation: public Expression {
1876
1822
  Expression* left_;
1877
1823
  Expression* right_;
1878
1824
  int pos_;
1879
-
1880
- enum CompareTypeFeedback { NONE, SMI_ONLY, OBJECT_ONLY };
1881
- CompareTypeFeedback compare_type_;
1882
1825
  };
1883
1826
 
1884
1827
 
@@ -1893,12 +1836,10 @@ class Conditional: public Expression {
1893
1836
  int then_expression_position() const { return then_expression_position_; }
1894
1837
  int else_expression_position() const { return else_expression_position_; }
1895
1838
 
1896
- int ThenId() const { return then_id_; }
1897
- int ElseId() const { return else_id_; }
1839
+ BailoutId ThenId() const { return then_id_; }
1840
+ BailoutId ElseId() const { return else_id_; }
1898
1841
 
1899
1842
  protected:
1900
- template<class> friend class AstNodeFactory;
1901
-
1902
1843
  Conditional(Isolate* isolate,
1903
1844
  Expression* condition,
1904
1845
  Expression* then_expression,
@@ -1920,8 +1861,8 @@ class Conditional: public Expression {
1920
1861
  Expression* else_expression_;
1921
1862
  int then_expression_position_;
1922
1863
  int else_expression_position_;
1923
- int then_id_;
1924
- int else_id_;
1864
+ const BailoutId then_id_;
1865
+ const BailoutId else_id_;
1925
1866
  };
1926
1867
 
1927
1868
 
@@ -1942,27 +1883,15 @@ class Assignment: public Expression {
1942
1883
  // This check relies on the definition order of token in token.h.
1943
1884
  bool is_compound() const { return op() > Token::ASSIGN; }
1944
1885
 
1945
- // An initialization block is a series of statments of the form
1946
- // x.y.z.a = ...; x.y.z.b = ...; etc. The parser marks the beginning and
1947
- // ending of these blocks to allow for optimizations of initialization
1948
- // blocks.
1949
- bool starts_initialization_block() { return block_start_; }
1950
- bool ends_initialization_block() { return block_end_; }
1951
- void mark_block_start() { block_start_ = true; }
1952
- void mark_block_end() { block_end_ = true; }
1886
+ BailoutId AssignmentId() const { return assignment_id_; }
1953
1887
 
1954
1888
  // Type feedback information.
1955
- void RecordTypeFeedback(TypeFeedbackOracle* oracle);
1889
+ TypeFeedbackId AssignmentFeedbackId() { return reuse(id()); }
1890
+ void RecordTypeFeedback(TypeFeedbackOracle* oracle, Zone* zone);
1956
1891
  virtual bool IsMonomorphic() { return is_monomorphic_; }
1957
1892
  virtual SmallMapList* GetReceiverTypes() { return &receiver_types_; }
1958
1893
 
1959
- // Bailout support.
1960
- int CompoundLoadId() const { return compound_load_id_; }
1961
- int AssignmentId() const { return assignment_id_; }
1962
-
1963
1894
  protected:
1964
- template<class> friend class AstNodeFactory;
1965
-
1966
1895
  Assignment(Isolate* isolate,
1967
1896
  Token::Value op,
1968
1897
  Expression* target,
@@ -1975,7 +1904,6 @@ class Assignment: public Expression {
1975
1904
  if (is_compound()) {
1976
1905
  binary_operation_ =
1977
1906
  factory->NewBinaryOperation(binary_op(), target_, value_, pos_ + 1);
1978
- compound_load_id_ = GetNextId(isolate);
1979
1907
  }
1980
1908
  }
1981
1909
 
@@ -1985,11 +1913,7 @@ class Assignment: public Expression {
1985
1913
  Expression* value_;
1986
1914
  int pos_;
1987
1915
  BinaryOperation* binary_operation_;
1988
- int compound_load_id_;
1989
- int assignment_id_;
1990
-
1991
- bool block_start_;
1992
- bool block_end_;
1916
+ const BailoutId assignment_id_;
1993
1917
 
1994
1918
  bool is_monomorphic_;
1995
1919
  SmallMapList receiver_types_;
@@ -2004,8 +1928,6 @@ class Throw: public Expression {
2004
1928
  virtual int position() const { return pos_; }
2005
1929
 
2006
1930
  protected:
2007
- template<class> friend class AstNodeFactory;
2008
-
2009
1931
  Throw(Isolate* isolate, Expression* exception, int pos)
2010
1932
  : Expression(isolate), exception_(exception), pos_(pos) {}
2011
1933
 
@@ -2033,6 +1955,11 @@ class FunctionLiteral: public Expression {
2033
1955
  kIsFunction
2034
1956
  };
2035
1957
 
1958
+ enum IsParenthesizedFlag {
1959
+ kIsParenthesized,
1960
+ kNotParenthesized
1961
+ };
1962
+
2036
1963
  DECLARE_NODE_TYPE(FunctionLiteral)
2037
1964
 
2038
1965
  Handle<String> name() const { return name_; }
@@ -2060,6 +1987,7 @@ class FunctionLiteral: public Expression {
2060
1987
  int parameter_count() { return parameter_count_; }
2061
1988
 
2062
1989
  bool AllowsLazyCompilation();
1990
+ bool AllowsLazyCompilationWithoutContext();
2063
1991
 
2064
1992
  Handle<String> debug_name() const {
2065
1993
  if (name_->length() > 0) return name_;
@@ -2080,6 +2008,18 @@ class FunctionLiteral: public Expression {
2080
2008
 
2081
2009
  bool is_function() { return IsFunction::decode(bitfield_) == kIsFunction; }
2082
2010
 
2011
+ // This is used as a heuristic on when to eagerly compile a function
2012
+ // literal. We consider the following constructs as hints that the
2013
+ // function will be called immediately:
2014
+ // - (function() { ... })();
2015
+ // - var x = function() { ... }();
2016
+ bool is_parenthesized() {
2017
+ return IsParenthesized::decode(bitfield_) == kIsParenthesized;
2018
+ }
2019
+ void set_parenthesized() {
2020
+ bitfield_ = IsParenthesized::update(bitfield_, kIsParenthesized);
2021
+ }
2022
+
2083
2023
  int ast_node_count() { return ast_properties_.node_count(); }
2084
2024
  AstProperties::Flags* flags() { return ast_properties_.flags(); }
2085
2025
  void set_ast_properties(AstProperties* ast_properties) {
@@ -2087,8 +2027,6 @@ class FunctionLiteral: public Expression {
2087
2027
  }
2088
2028
 
2089
2029
  protected:
2090
- template<class> friend class AstNodeFactory;
2091
-
2092
2030
  FunctionLiteral(Isolate* isolate,
2093
2031
  Handle<String> name,
2094
2032
  Scope* scope,
@@ -2101,7 +2039,8 @@ class FunctionLiteral: public Expression {
2101
2039
  int parameter_count,
2102
2040
  Type type,
2103
2041
  ParameterFlag has_duplicate_parameters,
2104
- IsFunctionFlag is_function)
2042
+ IsFunctionFlag is_function,
2043
+ IsParenthesizedFlag is_parenthesized)
2105
2044
  : Expression(isolate),
2106
2045
  name_(name),
2107
2046
  scope_(scope),
@@ -2120,7 +2059,8 @@ class FunctionLiteral: public Expression {
2120
2059
  IsAnonymous::encode(type == ANONYMOUS_EXPRESSION) |
2121
2060
  Pretenure::encode(false) |
2122
2061
  HasDuplicateParameters::encode(has_duplicate_parameters) |
2123
- IsFunction::encode(is_function);
2062
+ IsFunction::encode(is_function) |
2063
+ IsParenthesized::encode(is_parenthesized);
2124
2064
  }
2125
2065
 
2126
2066
  private:
@@ -2144,6 +2084,7 @@ class FunctionLiteral: public Expression {
2144
2084
  class Pretenure: public BitField<bool, 3, 1> {};
2145
2085
  class HasDuplicateParameters: public BitField<ParameterFlag, 4, 1> {};
2146
2086
  class IsFunction: public BitField<IsFunctionFlag, 5, 1> {};
2087
+ class IsParenthesized: public BitField<IsParenthesizedFlag, 6, 1> {};
2147
2088
  };
2148
2089
 
2149
2090
 
@@ -2156,8 +2097,6 @@ class SharedFunctionInfoLiteral: public Expression {
2156
2097
  }
2157
2098
 
2158
2099
  protected:
2159
- template<class> friend class AstNodeFactory;
2160
-
2161
2100
  SharedFunctionInfoLiteral(
2162
2101
  Isolate* isolate,
2163
2102
  Handle<SharedFunctionInfo> shared_function_info)
@@ -2174,8 +2113,6 @@ class ThisFunction: public Expression {
2174
2113
  DECLARE_NODE_TYPE(ThisFunction)
2175
2114
 
2176
2115
  protected:
2177
- template<class> friend class AstNodeFactory;
2178
-
2179
2116
  explicit ThisFunction(Isolate* isolate): Expression(isolate) {}
2180
2117
  };
2181
2118
 
@@ -2211,8 +2148,8 @@ class RegExpTree: public ZoneObject {
2211
2148
  // Returns the interval of registers used for captures within this
2212
2149
  // expression.
2213
2150
  virtual Interval CaptureRegisters() { return Interval::Empty(); }
2214
- virtual void AppendToText(RegExpText* text);
2215
- SmartArrayPointer<const char> ToString();
2151
+ virtual void AppendToText(RegExpText* text, Zone* zone);
2152
+ SmartArrayPointer<const char> ToString(Zone* zone);
2216
2153
  #define MAKE_ASTYPE(Name) \
2217
2154
  virtual RegExp##Name* As##Name(); \
2218
2155
  virtual bool Is##Name();
@@ -2297,7 +2234,7 @@ class CharacterSet BASE_EMBEDDED {
2297
2234
  explicit CharacterSet(ZoneList<CharacterRange>* ranges)
2298
2235
  : ranges_(ranges),
2299
2236
  standard_set_type_(0) {}
2300
- ZoneList<CharacterRange>* ranges();
2237
+ ZoneList<CharacterRange>* ranges(Zone* zone);
2301
2238
  uc16 standard_set_type() { return standard_set_type_; }
2302
2239
  void set_standard_set_type(uc16 special_set_type) {
2303
2240
  standard_set_type_ = special_set_type;
@@ -2328,11 +2265,11 @@ class RegExpCharacterClass: public RegExpTree {
2328
2265
  virtual bool IsTextElement() { return true; }
2329
2266
  virtual int min_match() { return 1; }
2330
2267
  virtual int max_match() { return 1; }
2331
- virtual void AppendToText(RegExpText* text);
2268
+ virtual void AppendToText(RegExpText* text, Zone* zone);
2332
2269
  CharacterSet character_set() { return set_; }
2333
2270
  // TODO(lrn): Remove need for complex version if is_standard that
2334
2271
  // recognizes a mangled standard set and just do { return set_.is_special(); }
2335
- bool is_standard();
2272
+ bool is_standard(Zone* zone);
2336
2273
  // Returns a value representing the standard character set if is_standard()
2337
2274
  // returns true.
2338
2275
  // Currently used values are:
@@ -2345,7 +2282,7 @@ class RegExpCharacterClass: public RegExpTree {
2345
2282
  // . : non-unicode non-newline
2346
2283
  // * : All characters
2347
2284
  uc16 standard_type() { return set_.standard_set_type(); }
2348
- ZoneList<CharacterRange>* ranges() { return set_.ranges(); }
2285
+ ZoneList<CharacterRange>* ranges(Zone* zone) { return set_.ranges(zone); }
2349
2286
  bool is_negated() { return is_negated_; }
2350
2287
 
2351
2288
  private:
@@ -2365,7 +2302,7 @@ class RegExpAtom: public RegExpTree {
2365
2302
  virtual bool IsTextElement() { return true; }
2366
2303
  virtual int min_match() { return data_.length(); }
2367
2304
  virtual int max_match() { return data_.length(); }
2368
- virtual void AppendToText(RegExpText* text);
2305
+ virtual void AppendToText(RegExpText* text, Zone* zone);
2369
2306
  Vector<const uc16> data() { return data_; }
2370
2307
  int length() { return data_.length(); }
2371
2308
  private:
@@ -2375,7 +2312,7 @@ class RegExpAtom: public RegExpTree {
2375
2312
 
2376
2313
  class RegExpText: public RegExpTree {
2377
2314
  public:
2378
- RegExpText() : elements_(2), length_(0) {}
2315
+ explicit RegExpText(Zone* zone) : elements_(2, zone), length_(0) {}
2379
2316
  virtual void* Accept(RegExpVisitor* visitor, void* data);
2380
2317
  virtual RegExpNode* ToNode(RegExpCompiler* compiler,
2381
2318
  RegExpNode* on_success);
@@ -2384,9 +2321,9 @@ class RegExpText: public RegExpTree {
2384
2321
  virtual bool IsTextElement() { return true; }
2385
2322
  virtual int min_match() { return length_; }
2386
2323
  virtual int max_match() { return length_; }
2387
- virtual void AppendToText(RegExpText* text);
2388
- void AddElement(TextElement elm) {
2389
- elements_.Add(elm);
2324
+ virtual void AppendToText(RegExpText* text, Zone* zone);
2325
+ void AddElement(TextElement elm, Zone* zone) {
2326
+ elements_.Add(elm, zone);
2390
2327
  length_ += elm.length();
2391
2328
  }
2392
2329
  ZoneList<TextElement>* elements() { return &elements_; }
@@ -2555,40 +2492,51 @@ inline ModuleVariable::ModuleVariable(VariableProxy* proxy)
2555
2492
 
2556
2493
  class AstVisitor BASE_EMBEDDED {
2557
2494
  public:
2558
- AstVisitor() : isolate_(Isolate::Current()), stack_overflow_(false) { }
2495
+ AstVisitor() {}
2559
2496
  virtual ~AstVisitor() { }
2560
2497
 
2561
2498
  // Stack overflow check and dynamic dispatch.
2562
- void Visit(AstNode* node) { if (!CheckStackOverflow()) node->Accept(this); }
2499
+ virtual void Visit(AstNode* node) = 0;
2563
2500
 
2564
2501
  // Iteration left-to-right.
2565
2502
  virtual void VisitDeclarations(ZoneList<Declaration*>* declarations);
2566
2503
  virtual void VisitStatements(ZoneList<Statement*>* statements);
2567
2504
  virtual void VisitExpressions(ZoneList<Expression*>* expressions);
2568
2505
 
2569
- // Stack overflow tracking support.
2570
- bool HasStackOverflow() const { return stack_overflow_; }
2571
- bool CheckStackOverflow();
2572
-
2573
- // If a stack-overflow exception is encountered when visiting a
2574
- // node, calling SetStackOverflow will make sure that the visitor
2575
- // bails out without visiting more nodes.
2576
- void SetStackOverflow() { stack_overflow_ = true; }
2577
- void ClearStackOverflow() { stack_overflow_ = false; }
2578
-
2579
2506
  // Individual AST nodes.
2580
2507
  #define DEF_VISIT(type) \
2581
2508
  virtual void Visit##type(type* node) = 0;
2582
2509
  AST_NODE_LIST(DEF_VISIT)
2583
2510
  #undef DEF_VISIT
2511
+ };
2584
2512
 
2585
- protected:
2586
- Isolate* isolate() { return isolate_; }
2587
2513
 
2588
- private:
2589
- Isolate* isolate_;
2590
- bool stack_overflow_;
2591
- };
2514
+ #define DEFINE_AST_VISITOR_SUBCLASS_MEMBERS() \
2515
+ public: \
2516
+ virtual void Visit(AstNode* node) { \
2517
+ if (!CheckStackOverflow()) node->Accept(this); \
2518
+ } \
2519
+ \
2520
+ void SetStackOverflow() { stack_overflow_ = true; } \
2521
+ void ClearStackOverflow() { stack_overflow_ = false; } \
2522
+ bool HasStackOverflow() const { return stack_overflow_; } \
2523
+ \
2524
+ bool CheckStackOverflow() { \
2525
+ if (stack_overflow_) return true; \
2526
+ StackLimitCheck check(isolate_); \
2527
+ if (!check.HasOverflowed()) return false; \
2528
+ return (stack_overflow_ = true); \
2529
+ } \
2530
+ \
2531
+ private: \
2532
+ void InitializeAstVisitor() { \
2533
+ isolate_ = Isolate::Current(); \
2534
+ stack_overflow_ = false; \
2535
+ } \
2536
+ Isolate* isolate() { return isolate_; } \
2537
+ \
2538
+ Isolate* isolate_; \
2539
+ bool stack_overflow_
2592
2540
 
2593
2541
 
2594
2542
  // ----------------------------------------------------------------------------
@@ -2633,9 +2581,9 @@ class AstNullVisitor BASE_EMBEDDED {
2633
2581
  template<class Visitor>
2634
2582
  class AstNodeFactory BASE_EMBEDDED {
2635
2583
  public:
2636
- explicit AstNodeFactory(Isolate* isolate)
2584
+ AstNodeFactory(Isolate* isolate, Zone* zone)
2637
2585
  : isolate_(isolate),
2638
- zone_(isolate_->zone()) { }
2586
+ zone_(zone) { }
2639
2587
 
2640
2588
  Visitor* visitor() { return &visitor_; }
2641
2589
 
@@ -2694,12 +2642,12 @@ class AstNodeFactory BASE_EMBEDDED {
2694
2642
  }
2695
2643
 
2696
2644
  ModulePath* NewModulePath(Module* origin, Handle<String> name) {
2697
- ModulePath* module = new(zone_) ModulePath(origin, name);
2645
+ ModulePath* module = new(zone_) ModulePath(origin, name, zone_);
2698
2646
  VISIT_AND_RETURN(ModulePath, module)
2699
2647
  }
2700
2648
 
2701
2649
  ModuleUrl* NewModuleUrl(Handle<String> url) {
2702
- ModuleUrl* module = new(zone_) ModuleUrl(url);
2650
+ ModuleUrl* module = new(zone_) ModuleUrl(url, zone_);
2703
2651
  VISIT_AND_RETURN(ModuleUrl, module)
2704
2652
  }
2705
2653
 
@@ -2707,7 +2655,7 @@ class AstNodeFactory BASE_EMBEDDED {
2707
2655
  int capacity,
2708
2656
  bool is_initializer_block) {
2709
2657
  Block* block = new(zone_) Block(
2710
- isolate_, labels, capacity, is_initializer_block);
2658
+ isolate_, labels, capacity, is_initializer_block, zone_);
2711
2659
  VISIT_AND_RETURN(Block, block)
2712
2660
  }
2713
2661
 
@@ -2723,6 +2671,11 @@ class AstNodeFactory BASE_EMBEDDED {
2723
2671
  STATEMENT_WITH_LABELS(SwitchStatement)
2724
2672
  #undef STATEMENT_WITH_LABELS
2725
2673
 
2674
+ ModuleStatement* NewModuleStatement(VariableProxy* proxy, Block* body) {
2675
+ ModuleStatement* stmt = new(zone_) ModuleStatement(proxy, body);
2676
+ VISIT_AND_RETURN(ModuleStatement, stmt)
2677
+ }
2678
+
2726
2679
  ExpressionStatement* NewExpressionStatement(Expression* expression) {
2727
2680
  ExpressionStatement* stmt = new(zone_) ExpressionStatement(expression);
2728
2681
  VISIT_AND_RETURN(ExpressionStatement, stmt)
@@ -2840,11 +2793,10 @@ class AstNodeFactory BASE_EMBEDDED {
2840
2793
 
2841
2794
  VariableProxy* NewVariableProxy(Handle<String> name,
2842
2795
  bool is_this,
2843
- int position = RelocInfo::kNoPosition,
2844
- Interface* interface =
2845
- Interface::NewValue()) {
2796
+ Interface* interface = Interface::NewValue(),
2797
+ int position = RelocInfo::kNoPosition) {
2846
2798
  VariableProxy* proxy =
2847
- new(zone_) VariableProxy(isolate_, name, is_this, position, interface);
2799
+ new(zone_) VariableProxy(isolate_, name, is_this, interface, position);
2848
2800
  VISIT_AND_RETURN(VariableProxy, proxy)
2849
2801
  }
2850
2802
 
@@ -2948,12 +2900,14 @@ class AstNodeFactory BASE_EMBEDDED {
2948
2900
  int parameter_count,
2949
2901
  FunctionLiteral::ParameterFlag has_duplicate_parameters,
2950
2902
  FunctionLiteral::Type type,
2951
- FunctionLiteral::IsFunctionFlag is_function) {
2903
+ FunctionLiteral::IsFunctionFlag is_function,
2904
+ FunctionLiteral::IsParenthesizedFlag is_parenthesized) {
2952
2905
  FunctionLiteral* lit = new(zone_) FunctionLiteral(
2953
2906
  isolate_, name, scope, body,
2954
2907
  materialized_literal_count, expected_property_count, handler_count,
2955
2908
  has_only_simple_this_property_assignments, this_property_assignments,
2956
- parameter_count, type, has_duplicate_parameters, is_function);
2909
+ parameter_count, type, has_duplicate_parameters, is_function,
2910
+ is_parenthesized);
2957
2911
  // Top-level literal doesn't count for the AST's properties.
2958
2912
  if (is_function == FunctionLiteral::kIsFunction) {
2959
2913
  visitor_.VisitFunctionLiteral(lit);