libv8 3.11.8.17 → 3.16.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (754) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -2
  3. data/Gemfile +1 -1
  4. data/Rakefile +6 -7
  5. data/lib/libv8/version.rb +1 -1
  6. data/vendor/v8/.gitignore +24 -3
  7. data/vendor/v8/AUTHORS +7 -0
  8. data/vendor/v8/ChangeLog +839 -0
  9. data/vendor/v8/DEPS +1 -1
  10. data/vendor/v8/Makefile.android +92 -0
  11. data/vendor/v8/OWNERS +11 -0
  12. data/vendor/v8/PRESUBMIT.py +71 -0
  13. data/vendor/v8/SConstruct +34 -39
  14. data/vendor/v8/build/android.gypi +56 -37
  15. data/vendor/v8/build/common.gypi +112 -30
  16. data/vendor/v8/build/gyp_v8 +1 -1
  17. data/vendor/v8/build/standalone.gypi +15 -11
  18. data/vendor/v8/include/v8-debug.h +9 -1
  19. data/vendor/v8/include/v8-preparser.h +4 -3
  20. data/vendor/v8/include/v8-profiler.h +25 -25
  21. data/vendor/v8/include/v8-testing.h +4 -3
  22. data/vendor/v8/include/v8.h +994 -540
  23. data/vendor/v8/preparser/preparser-process.cc +3 -3
  24. data/vendor/v8/samples/lineprocessor.cc +20 -27
  25. data/vendor/v8/samples/process.cc +18 -14
  26. data/vendor/v8/samples/shell.cc +16 -15
  27. data/vendor/v8/src/SConscript +15 -14
  28. data/vendor/v8/src/accessors.cc +169 -77
  29. data/vendor/v8/src/accessors.h +4 -0
  30. data/vendor/v8/src/allocation-inl.h +2 -2
  31. data/vendor/v8/src/allocation.h +7 -7
  32. data/vendor/v8/src/api.cc +810 -497
  33. data/vendor/v8/src/api.h +85 -60
  34. data/vendor/v8/src/arm/assembler-arm-inl.h +179 -22
  35. data/vendor/v8/src/arm/assembler-arm.cc +633 -264
  36. data/vendor/v8/src/arm/assembler-arm.h +264 -197
  37. data/vendor/v8/src/arm/builtins-arm.cc +117 -27
  38. data/vendor/v8/src/arm/code-stubs-arm.cc +1241 -700
  39. data/vendor/v8/src/arm/code-stubs-arm.h +35 -138
  40. data/vendor/v8/src/arm/codegen-arm.cc +285 -16
  41. data/vendor/v8/src/arm/codegen-arm.h +22 -0
  42. data/vendor/v8/src/arm/constants-arm.cc +5 -3
  43. data/vendor/v8/src/arm/constants-arm.h +24 -11
  44. data/vendor/v8/src/arm/debug-arm.cc +3 -3
  45. data/vendor/v8/src/arm/deoptimizer-arm.cc +382 -92
  46. data/vendor/v8/src/arm/disasm-arm.cc +61 -12
  47. data/vendor/v8/src/arm/frames-arm.h +0 -14
  48. data/vendor/v8/src/arm/full-codegen-arm.cc +332 -304
  49. data/vendor/v8/src/arm/ic-arm.cc +180 -259
  50. data/vendor/v8/src/arm/lithium-arm.cc +364 -316
  51. data/vendor/v8/src/arm/lithium-arm.h +512 -275
  52. data/vendor/v8/src/arm/lithium-codegen-arm.cc +1768 -809
  53. data/vendor/v8/src/arm/lithium-codegen-arm.h +97 -35
  54. data/vendor/v8/src/arm/lithium-gap-resolver-arm.cc +12 -5
  55. data/vendor/v8/src/arm/macro-assembler-arm.cc +439 -228
  56. data/vendor/v8/src/arm/macro-assembler-arm.h +116 -70
  57. data/vendor/v8/src/arm/regexp-macro-assembler-arm.cc +54 -44
  58. data/vendor/v8/src/arm/regexp-macro-assembler-arm.h +3 -10
  59. data/vendor/v8/src/arm/simulator-arm.cc +272 -238
  60. data/vendor/v8/src/arm/simulator-arm.h +38 -8
  61. data/vendor/v8/src/arm/stub-cache-arm.cc +522 -895
  62. data/vendor/v8/src/array.js +101 -70
  63. data/vendor/v8/src/assembler.cc +270 -19
  64. data/vendor/v8/src/assembler.h +110 -15
  65. data/vendor/v8/src/ast.cc +79 -69
  66. data/vendor/v8/src/ast.h +255 -301
  67. data/vendor/v8/src/atomicops.h +7 -1
  68. data/vendor/v8/src/atomicops_internals_tsan.h +335 -0
  69. data/vendor/v8/src/bootstrapper.cc +481 -418
  70. data/vendor/v8/src/bootstrapper.h +4 -4
  71. data/vendor/v8/src/builtins.cc +498 -311
  72. data/vendor/v8/src/builtins.h +75 -47
  73. data/vendor/v8/src/checks.cc +2 -1
  74. data/vendor/v8/src/checks.h +8 -0
  75. data/vendor/v8/src/code-stubs-hydrogen.cc +253 -0
  76. data/vendor/v8/src/code-stubs.cc +249 -84
  77. data/vendor/v8/src/code-stubs.h +501 -169
  78. data/vendor/v8/src/codegen.cc +36 -18
  79. data/vendor/v8/src/codegen.h +25 -3
  80. data/vendor/v8/src/collection.js +54 -17
  81. data/vendor/v8/src/compilation-cache.cc +24 -16
  82. data/vendor/v8/src/compilation-cache.h +15 -6
  83. data/vendor/v8/src/compiler.cc +497 -195
  84. data/vendor/v8/src/compiler.h +246 -38
  85. data/vendor/v8/src/contexts.cc +64 -24
  86. data/vendor/v8/src/contexts.h +60 -29
  87. data/vendor/v8/src/conversions-inl.h +24 -14
  88. data/vendor/v8/src/conversions.h +7 -4
  89. data/vendor/v8/src/counters.cc +21 -12
  90. data/vendor/v8/src/counters.h +44 -16
  91. data/vendor/v8/src/cpu-profiler.h +1 -1
  92. data/vendor/v8/src/d8-debug.cc +2 -2
  93. data/vendor/v8/src/d8-readline.cc +13 -2
  94. data/vendor/v8/src/d8.cc +681 -273
  95. data/vendor/v8/src/d8.gyp +4 -4
  96. data/vendor/v8/src/d8.h +38 -18
  97. data/vendor/v8/src/d8.js +0 -617
  98. data/vendor/v8/src/data-flow.h +55 -0
  99. data/vendor/v8/src/date.js +1 -42
  100. data/vendor/v8/src/dateparser-inl.h +5 -1
  101. data/vendor/v8/src/debug-agent.cc +10 -15
  102. data/vendor/v8/src/debug-debugger.js +147 -149
  103. data/vendor/v8/src/debug.cc +323 -164
  104. data/vendor/v8/src/debug.h +26 -14
  105. data/vendor/v8/src/deoptimizer.cc +765 -290
  106. data/vendor/v8/src/deoptimizer.h +130 -28
  107. data/vendor/v8/src/disassembler.cc +10 -4
  108. data/vendor/v8/src/elements-kind.cc +7 -2
  109. data/vendor/v8/src/elements-kind.h +19 -0
  110. data/vendor/v8/src/elements.cc +607 -285
  111. data/vendor/v8/src/elements.h +36 -13
  112. data/vendor/v8/src/execution.cc +52 -31
  113. data/vendor/v8/src/execution.h +4 -4
  114. data/vendor/v8/src/extensions/externalize-string-extension.cc +5 -4
  115. data/vendor/v8/src/extensions/gc-extension.cc +5 -1
  116. data/vendor/v8/src/extensions/statistics-extension.cc +153 -0
  117. data/vendor/v8/src/{inspector.h → extensions/statistics-extension.h} +12 -23
  118. data/vendor/v8/src/factory.cc +101 -134
  119. data/vendor/v8/src/factory.h +36 -31
  120. data/vendor/v8/src/flag-definitions.h +102 -25
  121. data/vendor/v8/src/flags.cc +9 -5
  122. data/vendor/v8/src/frames-inl.h +10 -0
  123. data/vendor/v8/src/frames.cc +116 -26
  124. data/vendor/v8/src/frames.h +96 -12
  125. data/vendor/v8/src/full-codegen.cc +219 -74
  126. data/vendor/v8/src/full-codegen.h +63 -21
  127. data/vendor/v8/src/func-name-inferrer.cc +8 -7
  128. data/vendor/v8/src/func-name-inferrer.h +5 -3
  129. data/vendor/v8/src/gdb-jit.cc +71 -57
  130. data/vendor/v8/src/global-handles.cc +230 -101
  131. data/vendor/v8/src/global-handles.h +26 -27
  132. data/vendor/v8/src/globals.h +17 -19
  133. data/vendor/v8/src/handles-inl.h +59 -12
  134. data/vendor/v8/src/handles.cc +180 -200
  135. data/vendor/v8/src/handles.h +80 -11
  136. data/vendor/v8/src/hashmap.h +60 -40
  137. data/vendor/v8/src/heap-inl.h +107 -45
  138. data/vendor/v8/src/heap-profiler.cc +38 -19
  139. data/vendor/v8/src/heap-profiler.h +24 -14
  140. data/vendor/v8/src/heap.cc +1123 -738
  141. data/vendor/v8/src/heap.h +385 -146
  142. data/vendor/v8/src/hydrogen-instructions.cc +700 -217
  143. data/vendor/v8/src/hydrogen-instructions.h +1158 -472
  144. data/vendor/v8/src/hydrogen.cc +3319 -1662
  145. data/vendor/v8/src/hydrogen.h +411 -170
  146. data/vendor/v8/src/ia32/assembler-ia32-inl.h +46 -16
  147. data/vendor/v8/src/ia32/assembler-ia32.cc +131 -61
  148. data/vendor/v8/src/ia32/assembler-ia32.h +115 -57
  149. data/vendor/v8/src/ia32/builtins-ia32.cc +99 -5
  150. data/vendor/v8/src/ia32/code-stubs-ia32.cc +787 -495
  151. data/vendor/v8/src/ia32/code-stubs-ia32.h +10 -100
  152. data/vendor/v8/src/ia32/codegen-ia32.cc +227 -23
  153. data/vendor/v8/src/ia32/codegen-ia32.h +14 -0
  154. data/vendor/v8/src/ia32/deoptimizer-ia32.cc +428 -87
  155. data/vendor/v8/src/ia32/disasm-ia32.cc +28 -1
  156. data/vendor/v8/src/ia32/frames-ia32.h +6 -16
  157. data/vendor/v8/src/ia32/full-codegen-ia32.cc +280 -272
  158. data/vendor/v8/src/ia32/ic-ia32.cc +150 -250
  159. data/vendor/v8/src/ia32/lithium-codegen-ia32.cc +1600 -517
  160. data/vendor/v8/src/ia32/lithium-codegen-ia32.h +90 -24
  161. data/vendor/v8/src/ia32/lithium-gap-resolver-ia32.cc +10 -6
  162. data/vendor/v8/src/ia32/lithium-gap-resolver-ia32.h +2 -2
  163. data/vendor/v8/src/ia32/lithium-ia32.cc +405 -302
  164. data/vendor/v8/src/ia32/lithium-ia32.h +526 -271
  165. data/vendor/v8/src/ia32/macro-assembler-ia32.cc +378 -119
  166. data/vendor/v8/src/ia32/macro-assembler-ia32.h +62 -28
  167. data/vendor/v8/src/ia32/regexp-macro-assembler-ia32.cc +43 -30
  168. data/vendor/v8/src/ia32/regexp-macro-assembler-ia32.h +2 -10
  169. data/vendor/v8/src/ia32/stub-cache-ia32.cc +492 -678
  170. data/vendor/v8/src/ic-inl.h +9 -4
  171. data/vendor/v8/src/ic.cc +836 -923
  172. data/vendor/v8/src/ic.h +228 -247
  173. data/vendor/v8/src/incremental-marking-inl.h +26 -30
  174. data/vendor/v8/src/incremental-marking.cc +276 -248
  175. data/vendor/v8/src/incremental-marking.h +29 -37
  176. data/vendor/v8/src/interface.cc +34 -25
  177. data/vendor/v8/src/interface.h +69 -25
  178. data/vendor/v8/src/interpreter-irregexp.cc +2 -2
  179. data/vendor/v8/src/isolate.cc +382 -76
  180. data/vendor/v8/src/isolate.h +109 -56
  181. data/vendor/v8/src/json-parser.h +217 -104
  182. data/vendor/v8/src/json-stringifier.h +745 -0
  183. data/vendor/v8/src/json.js +10 -132
  184. data/vendor/v8/src/jsregexp-inl.h +106 -0
  185. data/vendor/v8/src/jsregexp.cc +517 -285
  186. data/vendor/v8/src/jsregexp.h +145 -117
  187. data/vendor/v8/src/list-inl.h +35 -22
  188. data/vendor/v8/src/list.h +46 -19
  189. data/vendor/v8/src/lithium-allocator-inl.h +22 -2
  190. data/vendor/v8/src/lithium-allocator.cc +85 -70
  191. data/vendor/v8/src/lithium-allocator.h +21 -39
  192. data/vendor/v8/src/lithium.cc +259 -5
  193. data/vendor/v8/src/lithium.h +131 -32
  194. data/vendor/v8/src/liveedit-debugger.js +52 -3
  195. data/vendor/v8/src/liveedit.cc +393 -113
  196. data/vendor/v8/src/liveedit.h +7 -3
  197. data/vendor/v8/src/log-utils.cc +4 -2
  198. data/vendor/v8/src/log.cc +170 -140
  199. data/vendor/v8/src/log.h +62 -11
  200. data/vendor/v8/src/macro-assembler.h +17 -0
  201. data/vendor/v8/src/macros.py +2 -0
  202. data/vendor/v8/src/mark-compact-inl.h +3 -23
  203. data/vendor/v8/src/mark-compact.cc +801 -830
  204. data/vendor/v8/src/mark-compact.h +154 -47
  205. data/vendor/v8/src/marking-thread.cc +85 -0
  206. data/vendor/v8/src/{inspector.cc → marking-thread.h} +32 -24
  207. data/vendor/v8/src/math.js +12 -18
  208. data/vendor/v8/src/messages.cc +18 -8
  209. data/vendor/v8/src/messages.js +314 -261
  210. data/vendor/v8/src/mips/assembler-mips-inl.h +58 -6
  211. data/vendor/v8/src/mips/assembler-mips.cc +92 -75
  212. data/vendor/v8/src/mips/assembler-mips.h +54 -60
  213. data/vendor/v8/src/mips/builtins-mips.cc +116 -17
  214. data/vendor/v8/src/mips/code-stubs-mips.cc +919 -556
  215. data/vendor/v8/src/mips/code-stubs-mips.h +22 -131
  216. data/vendor/v8/src/mips/codegen-mips.cc +281 -6
  217. data/vendor/v8/src/mips/codegen-mips.h +22 -0
  218. data/vendor/v8/src/mips/constants-mips.cc +2 -0
  219. data/vendor/v8/src/mips/constants-mips.h +12 -2
  220. data/vendor/v8/src/mips/deoptimizer-mips.cc +286 -50
  221. data/vendor/v8/src/mips/disasm-mips.cc +13 -0
  222. data/vendor/v8/src/mips/full-codegen-mips.cc +297 -284
  223. data/vendor/v8/src/mips/ic-mips.cc +182 -263
  224. data/vendor/v8/src/mips/lithium-codegen-mips.cc +1208 -556
  225. data/vendor/v8/src/mips/lithium-codegen-mips.h +72 -19
  226. data/vendor/v8/src/mips/lithium-gap-resolver-mips.cc +9 -2
  227. data/vendor/v8/src/mips/lithium-mips.cc +290 -302
  228. data/vendor/v8/src/mips/lithium-mips.h +463 -266
  229. data/vendor/v8/src/mips/macro-assembler-mips.cc +208 -115
  230. data/vendor/v8/src/mips/macro-assembler-mips.h +67 -24
  231. data/vendor/v8/src/mips/regexp-macro-assembler-mips.cc +40 -25
  232. data/vendor/v8/src/mips/regexp-macro-assembler-mips.h +3 -9
  233. data/vendor/v8/src/mips/simulator-mips.cc +112 -40
  234. data/vendor/v8/src/mips/simulator-mips.h +5 -0
  235. data/vendor/v8/src/mips/stub-cache-mips.cc +502 -884
  236. data/vendor/v8/src/mirror-debugger.js +157 -30
  237. data/vendor/v8/src/mksnapshot.cc +88 -14
  238. data/vendor/v8/src/object-observe.js +235 -0
  239. data/vendor/v8/src/objects-debug.cc +178 -176
  240. data/vendor/v8/src/objects-inl.h +1333 -486
  241. data/vendor/v8/src/objects-printer.cc +125 -43
  242. data/vendor/v8/src/objects-visiting-inl.h +578 -6
  243. data/vendor/v8/src/objects-visiting.cc +2 -2
  244. data/vendor/v8/src/objects-visiting.h +172 -79
  245. data/vendor/v8/src/objects.cc +3533 -2885
  246. data/vendor/v8/src/objects.h +1352 -1131
  247. data/vendor/v8/src/optimizing-compiler-thread.cc +152 -0
  248. data/vendor/v8/src/optimizing-compiler-thread.h +111 -0
  249. data/vendor/v8/src/parser.cc +390 -500
  250. data/vendor/v8/src/parser.h +45 -33
  251. data/vendor/v8/src/platform-cygwin.cc +10 -21
  252. data/vendor/v8/src/platform-freebsd.cc +36 -41
  253. data/vendor/v8/src/platform-linux.cc +160 -124
  254. data/vendor/v8/src/platform-macos.cc +30 -27
  255. data/vendor/v8/src/platform-nullos.cc +17 -1
  256. data/vendor/v8/src/platform-openbsd.cc +19 -50
  257. data/vendor/v8/src/platform-posix.cc +14 -0
  258. data/vendor/v8/src/platform-solaris.cc +20 -53
  259. data/vendor/v8/src/platform-win32.cc +49 -26
  260. data/vendor/v8/src/platform.h +40 -1
  261. data/vendor/v8/src/preparser.cc +8 -5
  262. data/vendor/v8/src/preparser.h +2 -2
  263. data/vendor/v8/src/prettyprinter.cc +16 -0
  264. data/vendor/v8/src/prettyprinter.h +2 -0
  265. data/vendor/v8/src/profile-generator-inl.h +1 -0
  266. data/vendor/v8/src/profile-generator.cc +209 -147
  267. data/vendor/v8/src/profile-generator.h +15 -12
  268. data/vendor/v8/src/property-details.h +46 -31
  269. data/vendor/v8/src/property.cc +27 -46
  270. data/vendor/v8/src/property.h +163 -83
  271. data/vendor/v8/src/proxy.js +7 -2
  272. data/vendor/v8/src/regexp-macro-assembler-irregexp.cc +4 -13
  273. data/vendor/v8/src/regexp-macro-assembler-irregexp.h +1 -2
  274. data/vendor/v8/src/regexp-macro-assembler-tracer.cc +1 -11
  275. data/vendor/v8/src/regexp-macro-assembler-tracer.h +0 -1
  276. data/vendor/v8/src/regexp-macro-assembler.cc +31 -14
  277. data/vendor/v8/src/regexp-macro-assembler.h +14 -11
  278. data/vendor/v8/src/regexp-stack.cc +1 -0
  279. data/vendor/v8/src/regexp.js +9 -8
  280. data/vendor/v8/src/rewriter.cc +18 -7
  281. data/vendor/v8/src/runtime-profiler.cc +52 -43
  282. data/vendor/v8/src/runtime-profiler.h +0 -25
  283. data/vendor/v8/src/runtime.cc +2006 -2023
  284. data/vendor/v8/src/runtime.h +56 -49
  285. data/vendor/v8/src/safepoint-table.cc +12 -18
  286. data/vendor/v8/src/safepoint-table.h +11 -8
  287. data/vendor/v8/src/scanner.cc +1 -0
  288. data/vendor/v8/src/scanner.h +4 -10
  289. data/vendor/v8/src/scopeinfo.cc +35 -9
  290. data/vendor/v8/src/scopeinfo.h +64 -3
  291. data/vendor/v8/src/scopes.cc +251 -156
  292. data/vendor/v8/src/scopes.h +61 -27
  293. data/vendor/v8/src/serialize.cc +348 -396
  294. data/vendor/v8/src/serialize.h +125 -114
  295. data/vendor/v8/src/small-pointer-list.h +11 -11
  296. data/vendor/v8/src/{smart-array-pointer.h → smart-pointers.h} +64 -15
  297. data/vendor/v8/src/snapshot-common.cc +64 -15
  298. data/vendor/v8/src/snapshot-empty.cc +7 -1
  299. data/vendor/v8/src/snapshot.h +9 -2
  300. data/vendor/v8/src/spaces-inl.h +17 -0
  301. data/vendor/v8/src/spaces.cc +477 -183
  302. data/vendor/v8/src/spaces.h +238 -58
  303. data/vendor/v8/src/splay-tree-inl.h +8 -7
  304. data/vendor/v8/src/splay-tree.h +24 -10
  305. data/vendor/v8/src/store-buffer.cc +12 -5
  306. data/vendor/v8/src/store-buffer.h +2 -4
  307. data/vendor/v8/src/string-search.h +22 -6
  308. data/vendor/v8/src/string-stream.cc +11 -8
  309. data/vendor/v8/src/string.js +47 -15
  310. data/vendor/v8/src/stub-cache.cc +461 -224
  311. data/vendor/v8/src/stub-cache.h +164 -102
  312. data/vendor/v8/src/sweeper-thread.cc +105 -0
  313. data/vendor/v8/src/sweeper-thread.h +81 -0
  314. data/vendor/v8/src/token.h +1 -0
  315. data/vendor/v8/src/transitions-inl.h +220 -0
  316. data/vendor/v8/src/transitions.cc +160 -0
  317. data/vendor/v8/src/transitions.h +207 -0
  318. data/vendor/v8/src/type-info.cc +182 -181
  319. data/vendor/v8/src/type-info.h +31 -19
  320. data/vendor/v8/src/unicode-inl.h +62 -106
  321. data/vendor/v8/src/unicode.cc +57 -67
  322. data/vendor/v8/src/unicode.h +45 -91
  323. data/vendor/v8/src/uri.js +57 -29
  324. data/vendor/v8/src/utils.h +105 -5
  325. data/vendor/v8/src/v8-counters.cc +54 -11
  326. data/vendor/v8/src/v8-counters.h +134 -19
  327. data/vendor/v8/src/v8.cc +29 -29
  328. data/vendor/v8/src/v8.h +1 -0
  329. data/vendor/v8/src/v8conversions.cc +26 -22
  330. data/vendor/v8/src/v8globals.h +56 -43
  331. data/vendor/v8/src/v8natives.js +83 -30
  332. data/vendor/v8/src/v8threads.cc +42 -21
  333. data/vendor/v8/src/v8threads.h +4 -1
  334. data/vendor/v8/src/v8utils.cc +9 -93
  335. data/vendor/v8/src/v8utils.h +37 -33
  336. data/vendor/v8/src/variables.cc +6 -3
  337. data/vendor/v8/src/variables.h +6 -13
  338. data/vendor/v8/src/version.cc +2 -2
  339. data/vendor/v8/src/vm-state-inl.h +11 -0
  340. data/vendor/v8/src/x64/assembler-x64-inl.h +39 -8
  341. data/vendor/v8/src/x64/assembler-x64.cc +78 -64
  342. data/vendor/v8/src/x64/assembler-x64.h +38 -33
  343. data/vendor/v8/src/x64/builtins-x64.cc +105 -7
  344. data/vendor/v8/src/x64/code-stubs-x64.cc +790 -413
  345. data/vendor/v8/src/x64/code-stubs-x64.h +10 -106
  346. data/vendor/v8/src/x64/codegen-x64.cc +210 -8
  347. data/vendor/v8/src/x64/codegen-x64.h +20 -1
  348. data/vendor/v8/src/x64/deoptimizer-x64.cc +336 -75
  349. data/vendor/v8/src/x64/disasm-x64.cc +15 -0
  350. data/vendor/v8/src/x64/frames-x64.h +0 -14
  351. data/vendor/v8/src/x64/full-codegen-x64.cc +293 -270
  352. data/vendor/v8/src/x64/ic-x64.cc +153 -251
  353. data/vendor/v8/src/x64/lithium-codegen-x64.cc +1379 -531
  354. data/vendor/v8/src/x64/lithium-codegen-x64.h +67 -23
  355. data/vendor/v8/src/x64/lithium-gap-resolver-x64.cc +2 -2
  356. data/vendor/v8/src/x64/lithium-x64.cc +349 -289
  357. data/vendor/v8/src/x64/lithium-x64.h +460 -250
  358. data/vendor/v8/src/x64/macro-assembler-x64.cc +350 -177
  359. data/vendor/v8/src/x64/macro-assembler-x64.h +67 -49
  360. data/vendor/v8/src/x64/regexp-macro-assembler-x64.cc +46 -33
  361. data/vendor/v8/src/x64/regexp-macro-assembler-x64.h +2 -3
  362. data/vendor/v8/src/x64/stub-cache-x64.cc +484 -653
  363. data/vendor/v8/src/zone-inl.h +9 -27
  364. data/vendor/v8/src/zone.cc +5 -5
  365. data/vendor/v8/src/zone.h +53 -27
  366. data/vendor/v8/test/benchmarks/testcfg.py +5 -0
  367. data/vendor/v8/test/cctest/cctest.cc +4 -0
  368. data/vendor/v8/test/cctest/cctest.gyp +3 -1
  369. data/vendor/v8/test/cctest/cctest.h +57 -9
  370. data/vendor/v8/test/cctest/cctest.status +15 -15
  371. data/vendor/v8/test/cctest/test-accessors.cc +26 -0
  372. data/vendor/v8/test/cctest/test-alloc.cc +22 -30
  373. data/vendor/v8/test/cctest/test-api.cc +1943 -314
  374. data/vendor/v8/test/cctest/test-assembler-arm.cc +133 -13
  375. data/vendor/v8/test/cctest/test-assembler-ia32.cc +1 -1
  376. data/vendor/v8/test/cctest/test-assembler-mips.cc +12 -0
  377. data/vendor/v8/test/cctest/test-ast.cc +4 -2
  378. data/vendor/v8/test/cctest/test-compiler.cc +61 -29
  379. data/vendor/v8/test/cctest/test-dataflow.cc +2 -2
  380. data/vendor/v8/test/cctest/test-debug.cc +212 -33
  381. data/vendor/v8/test/cctest/test-decls.cc +257 -11
  382. data/vendor/v8/test/cctest/test-dictionary.cc +24 -10
  383. data/vendor/v8/test/cctest/test-disasm-arm.cc +118 -1
  384. data/vendor/v8/test/cctest/test-disasm-ia32.cc +3 -2
  385. data/vendor/v8/test/cctest/test-flags.cc +14 -1
  386. data/vendor/v8/test/cctest/test-func-name-inference.cc +7 -4
  387. data/vendor/v8/test/cctest/test-global-object.cc +51 -0
  388. data/vendor/v8/test/cctest/test-hashing.cc +32 -23
  389. data/vendor/v8/test/cctest/test-heap-profiler.cc +131 -77
  390. data/vendor/v8/test/cctest/test-heap.cc +1084 -143
  391. data/vendor/v8/test/cctest/test-list.cc +1 -1
  392. data/vendor/v8/test/cctest/test-liveedit.cc +3 -2
  393. data/vendor/v8/test/cctest/test-lockers.cc +12 -13
  394. data/vendor/v8/test/cctest/test-log.cc +10 -8
  395. data/vendor/v8/test/cctest/test-macro-assembler-x64.cc +2 -2
  396. data/vendor/v8/test/cctest/test-mark-compact.cc +44 -22
  397. data/vendor/v8/test/cctest/test-object-observe.cc +434 -0
  398. data/vendor/v8/test/cctest/test-parsing.cc +86 -39
  399. data/vendor/v8/test/cctest/test-platform-linux.cc +6 -0
  400. data/vendor/v8/test/cctest/test-platform-win32.cc +7 -0
  401. data/vendor/v8/test/cctest/test-random.cc +5 -4
  402. data/vendor/v8/test/cctest/test-regexp.cc +137 -101
  403. data/vendor/v8/test/cctest/test-serialize.cc +150 -230
  404. data/vendor/v8/test/cctest/test-sockets.cc +1 -1
  405. data/vendor/v8/test/cctest/test-spaces.cc +139 -0
  406. data/vendor/v8/test/cctest/test-strings.cc +736 -74
  407. data/vendor/v8/test/cctest/test-thread-termination.cc +10 -11
  408. data/vendor/v8/test/cctest/test-threads.cc +4 -4
  409. data/vendor/v8/test/cctest/test-utils.cc +16 -0
  410. data/vendor/v8/test/cctest/test-weakmaps.cc +7 -3
  411. data/vendor/v8/test/cctest/testcfg.py +64 -5
  412. data/vendor/v8/test/es5conform/testcfg.py +5 -0
  413. data/vendor/v8/test/message/message.status +1 -1
  414. data/vendor/v8/test/message/overwritten-builtins.out +3 -0
  415. data/vendor/v8/test/message/testcfg.py +89 -8
  416. data/vendor/v8/test/message/try-catch-finally-no-message.out +26 -26
  417. data/vendor/v8/test/mjsunit/accessor-map-sharing.js +18 -2
  418. data/vendor/v8/test/mjsunit/allocation-site-info.js +126 -0
  419. data/vendor/v8/test/mjsunit/array-bounds-check-removal.js +62 -1
  420. data/vendor/v8/test/mjsunit/array-iteration.js +1 -1
  421. data/vendor/v8/test/mjsunit/array-literal-transitions.js +2 -0
  422. data/vendor/v8/test/mjsunit/array-natives-elements.js +317 -0
  423. data/vendor/v8/test/mjsunit/array-reduce.js +8 -8
  424. data/vendor/v8/test/mjsunit/array-slice.js +12 -0
  425. data/vendor/v8/test/mjsunit/array-store-and-grow.js +4 -1
  426. data/vendor/v8/test/mjsunit/assert-opt-and-deopt.js +1 -1
  427. data/vendor/v8/test/mjsunit/bugs/bug-2337.js +53 -0
  428. data/vendor/v8/test/mjsunit/compare-known-objects-slow.js +69 -0
  429. data/vendor/v8/test/mjsunit/compiler/alloc-object-huge.js +3 -1
  430. data/vendor/v8/test/mjsunit/compiler/inline-accessors.js +368 -0
  431. data/vendor/v8/test/mjsunit/compiler/inline-arguments.js +87 -1
  432. data/vendor/v8/test/mjsunit/compiler/inline-closures.js +49 -0
  433. data/vendor/v8/test/mjsunit/compiler/inline-construct.js +55 -43
  434. data/vendor/v8/test/mjsunit/compiler/inline-literals.js +39 -0
  435. data/vendor/v8/test/mjsunit/compiler/multiply-add.js +69 -0
  436. data/vendor/v8/test/mjsunit/compiler/optimized-closures.js +57 -0
  437. data/vendor/v8/test/mjsunit/compiler/parallel-proto-change.js +44 -0
  438. data/vendor/v8/test/mjsunit/compiler/property-static.js +69 -0
  439. data/vendor/v8/test/mjsunit/compiler/proto-chain-constant.js +55 -0
  440. data/vendor/v8/test/mjsunit/compiler/proto-chain-load.js +44 -0
  441. data/vendor/v8/test/mjsunit/compiler/regress-gvn.js +3 -2
  442. data/vendor/v8/test/mjsunit/compiler/regress-or.js +6 -2
  443. data/vendor/v8/test/mjsunit/compiler/rotate.js +224 -0
  444. data/vendor/v8/test/mjsunit/compiler/uint32.js +173 -0
  445. data/vendor/v8/test/mjsunit/count-based-osr.js +2 -1
  446. data/vendor/v8/test/mjsunit/d8-os.js +3 -3
  447. data/vendor/v8/test/mjsunit/date-parse.js +3 -0
  448. data/vendor/v8/test/mjsunit/date.js +22 -0
  449. data/vendor/v8/test/mjsunit/debug-break-inline.js +1 -0
  450. data/vendor/v8/test/mjsunit/debug-evaluate-locals-optimized-double.js +22 -12
  451. data/vendor/v8/test/mjsunit/debug-evaluate-locals-optimized.js +21 -10
  452. data/vendor/v8/test/mjsunit/debug-liveedit-compile-error.js +60 -0
  453. data/vendor/v8/test/mjsunit/debug-liveedit-double-call.js +142 -0
  454. data/vendor/v8/test/mjsunit/debug-liveedit-literals.js +94 -0
  455. data/vendor/v8/test/mjsunit/debug-liveedit-restart-frame.js +153 -0
  456. data/vendor/v8/test/mjsunit/debug-multiple-breakpoints.js +1 -1
  457. data/vendor/v8/test/mjsunit/debug-script-breakpoints-closure.js +67 -0
  458. data/vendor/v8/test/mjsunit/debug-script-breakpoints-nested.js +82 -0
  459. data/vendor/v8/test/mjsunit/debug-script.js +4 -2
  460. data/vendor/v8/test/mjsunit/debug-set-variable-value.js +308 -0
  461. data/vendor/v8/test/mjsunit/debug-stepout-scope-part1.js +190 -0
  462. data/vendor/v8/test/mjsunit/debug-stepout-scope-part2.js +83 -0
  463. data/vendor/v8/test/mjsunit/debug-stepout-scope-part3.js +80 -0
  464. data/vendor/v8/test/mjsunit/debug-stepout-scope-part4.js +80 -0
  465. data/vendor/v8/test/mjsunit/debug-stepout-scope-part5.js +77 -0
  466. data/vendor/v8/test/mjsunit/debug-stepout-scope-part6.js +79 -0
  467. data/vendor/v8/test/mjsunit/debug-stepout-scope-part7.js +79 -0
  468. data/vendor/v8/test/mjsunit/{debug-stepout-scope.js → debug-stepout-scope-part8.js} +0 -189
  469. data/vendor/v8/test/mjsunit/delete-non-configurable.js +74 -0
  470. data/vendor/v8/test/mjsunit/deopt-minus-zero.js +56 -0
  471. data/vendor/v8/test/mjsunit/elements-kind.js +6 -4
  472. data/vendor/v8/test/mjsunit/elements-length-no-holey.js +33 -0
  473. data/vendor/v8/test/mjsunit/elements-transition-hoisting.js +46 -19
  474. data/vendor/v8/test/mjsunit/error-accessors.js +54 -0
  475. data/vendor/v8/test/mjsunit/error-constructors.js +1 -14
  476. data/vendor/v8/test/mjsunit/error-tostring.js +8 -0
  477. data/vendor/v8/test/mjsunit/eval-stack-trace.js +204 -0
  478. data/vendor/v8/test/mjsunit/external-array.js +364 -1
  479. data/vendor/v8/test/mjsunit/fast-array-length.js +37 -0
  480. data/vendor/v8/test/mjsunit/fast-non-keyed.js +113 -0
  481. data/vendor/v8/test/mjsunit/fast-prototype.js +117 -0
  482. data/vendor/v8/test/mjsunit/function-call.js +14 -18
  483. data/vendor/v8/test/mjsunit/fuzz-natives-part1.js +230 -0
  484. data/vendor/v8/test/mjsunit/fuzz-natives-part2.js +229 -0
  485. data/vendor/v8/test/mjsunit/fuzz-natives-part3.js +229 -0
  486. data/vendor/v8/test/mjsunit/{fuzz-natives.js → fuzz-natives-part4.js} +12 -2
  487. data/vendor/v8/test/mjsunit/generated-transition-stub.js +218 -0
  488. data/vendor/v8/test/mjsunit/greedy.js +1 -1
  489. data/vendor/v8/test/mjsunit/harmony/block-conflicts.js +2 -1
  490. data/vendor/v8/test/mjsunit/harmony/block-let-crankshaft.js +1 -1
  491. data/vendor/v8/test/mjsunit/harmony/collections.js +69 -11
  492. data/vendor/v8/test/mjsunit/harmony/debug-blockscopes.js +2 -2
  493. data/vendor/v8/test/mjsunit/harmony/module-linking.js +180 -3
  494. data/vendor/v8/test/mjsunit/harmony/module-parsing.js +31 -0
  495. data/vendor/v8/test/mjsunit/harmony/module-recompile.js +87 -0
  496. data/vendor/v8/test/mjsunit/harmony/module-resolution.js +15 -2
  497. data/vendor/v8/test/mjsunit/harmony/object-observe.js +1056 -0
  498. data/vendor/v8/test/mjsunit/harmony/proxies-json.js +178 -0
  499. data/vendor/v8/test/mjsunit/harmony/proxies.js +25 -10
  500. data/vendor/v8/test/mjsunit/json-parser-recursive.js +33 -0
  501. data/vendor/v8/test/mjsunit/json-stringify-recursive.js +52 -0
  502. data/vendor/v8/test/mjsunit/json.js +38 -2
  503. data/vendor/v8/test/mjsunit/json2.js +153 -0
  504. data/vendor/v8/test/mjsunit/limit-locals.js +5 -4
  505. data/vendor/v8/test/mjsunit/manual-parallel-recompile.js +79 -0
  506. data/vendor/v8/test/mjsunit/math-exp-precision.js +64 -0
  507. data/vendor/v8/test/mjsunit/math-floor-negative.js +59 -0
  508. data/vendor/v8/test/mjsunit/math-floor-of-div-minus-zero.js +41 -0
  509. data/vendor/v8/test/mjsunit/math-floor-of-div-nosudiv.js +288 -0
  510. data/vendor/v8/test/mjsunit/math-floor-of-div.js +81 -9
  511. data/vendor/v8/test/mjsunit/{math-floor.js → math-floor-part1.js} +1 -72
  512. data/vendor/v8/test/mjsunit/math-floor-part2.js +76 -0
  513. data/vendor/v8/test/mjsunit/math-floor-part3.js +78 -0
  514. data/vendor/v8/test/mjsunit/math-floor-part4.js +76 -0
  515. data/vendor/v8/test/mjsunit/mirror-object.js +43 -9
  516. data/vendor/v8/test/mjsunit/mjsunit.js +1 -1
  517. data/vendor/v8/test/mjsunit/mjsunit.status +52 -27
  518. data/vendor/v8/test/mjsunit/mul-exhaustive-part1.js +491 -0
  519. data/vendor/v8/test/mjsunit/mul-exhaustive-part10.js +470 -0
  520. data/vendor/v8/test/mjsunit/mul-exhaustive-part2.js +525 -0
  521. data/vendor/v8/test/mjsunit/mul-exhaustive-part3.js +532 -0
  522. data/vendor/v8/test/mjsunit/mul-exhaustive-part4.js +509 -0
  523. data/vendor/v8/test/mjsunit/mul-exhaustive-part5.js +505 -0
  524. data/vendor/v8/test/mjsunit/mul-exhaustive-part6.js +554 -0
  525. data/vendor/v8/test/mjsunit/mul-exhaustive-part7.js +497 -0
  526. data/vendor/v8/test/mjsunit/mul-exhaustive-part8.js +526 -0
  527. data/vendor/v8/test/mjsunit/mul-exhaustive-part9.js +533 -0
  528. data/vendor/v8/test/mjsunit/new-function.js +34 -0
  529. data/vendor/v8/test/mjsunit/numops-fuzz-part1.js +1172 -0
  530. data/vendor/v8/test/mjsunit/numops-fuzz-part2.js +1178 -0
  531. data/vendor/v8/test/mjsunit/numops-fuzz-part3.js +1178 -0
  532. data/vendor/v8/test/mjsunit/numops-fuzz-part4.js +1177 -0
  533. data/vendor/v8/test/mjsunit/object-define-property.js +107 -2
  534. data/vendor/v8/test/mjsunit/override-read-only-property.js +6 -4
  535. data/vendor/v8/test/mjsunit/packed-elements.js +2 -2
  536. data/vendor/v8/test/mjsunit/parse-int-float.js +4 -4
  537. data/vendor/v8/test/mjsunit/pixel-array-rounding.js +1 -1
  538. data/vendor/v8/test/mjsunit/readonly.js +228 -0
  539. data/vendor/v8/test/mjsunit/regexp-capture-3.js +16 -18
  540. data/vendor/v8/test/mjsunit/regexp-capture.js +2 -0
  541. data/vendor/v8/test/mjsunit/regexp-global.js +122 -0
  542. data/vendor/v8/test/mjsunit/regexp-results-cache.js +78 -0
  543. data/vendor/v8/test/mjsunit/regress/regress-1117.js +12 -3
  544. data/vendor/v8/test/mjsunit/regress/regress-1118.js +1 -1
  545. data/vendor/v8/test/mjsunit/regress/regress-115100.js +36 -0
  546. data/vendor/v8/test/mjsunit/regress/regress-1199637.js +1 -3
  547. data/vendor/v8/test/mjsunit/regress/regress-121407.js +1 -1
  548. data/vendor/v8/test/mjsunit/regress/regress-131923.js +30 -0
  549. data/vendor/v8/test/mjsunit/regress/regress-131994.js +70 -0
  550. data/vendor/v8/test/mjsunit/regress/regress-133211.js +35 -0
  551. data/vendor/v8/test/mjsunit/regress/regress-133211b.js +39 -0
  552. data/vendor/v8/test/mjsunit/regress/regress-136048.js +34 -0
  553. data/vendor/v8/test/mjsunit/regress/regress-137768.js +73 -0
  554. data/vendor/v8/test/mjsunit/regress/regress-143967.js +34 -0
  555. data/vendor/v8/test/mjsunit/regress/regress-145201.js +107 -0
  556. data/vendor/v8/test/mjsunit/regress/regress-147497.js +45 -0
  557. data/vendor/v8/test/mjsunit/regress/regress-148378.js +38 -0
  558. data/vendor/v8/test/mjsunit/regress/regress-1563.js +1 -1
  559. data/vendor/v8/test/mjsunit/regress/regress-1591.js +48 -0
  560. data/vendor/v8/test/mjsunit/regress/regress-164442.js +45 -0
  561. data/vendor/v8/test/mjsunit/regress/regress-165637.js +61 -0
  562. data/vendor/v8/test/mjsunit/regress/regress-166379.js +39 -0
  563. data/vendor/v8/test/mjsunit/regress/regress-166553.js +33 -0
  564. data/vendor/v8/test/mjsunit/regress/regress-1692.js +1 -1
  565. data/vendor/v8/test/mjsunit/regress/regress-171641.js +40 -0
  566. data/vendor/v8/test/mjsunit/regress/regress-1980.js +1 -1
  567. data/vendor/v8/test/mjsunit/regress/regress-2073.js +99 -0
  568. data/vendor/v8/test/mjsunit/regress/regress-2119.js +36 -0
  569. data/vendor/v8/test/mjsunit/regress/regress-2156.js +39 -0
  570. data/vendor/v8/test/mjsunit/regress/regress-2163.js +70 -0
  571. data/vendor/v8/test/mjsunit/regress/regress-2170.js +58 -0
  572. data/vendor/v8/test/mjsunit/regress/regress-2172.js +35 -0
  573. data/vendor/v8/test/mjsunit/regress/regress-2185-2.js +145 -0
  574. data/vendor/v8/test/mjsunit/regress/regress-2185.js +38 -0
  575. data/vendor/v8/test/mjsunit/regress/regress-2186.js +49 -0
  576. data/vendor/v8/test/mjsunit/regress/regress-2193.js +58 -0
  577. data/vendor/v8/test/mjsunit/regress/regress-2219.js +32 -0
  578. data/vendor/v8/test/mjsunit/regress/regress-2225.js +65 -0
  579. data/vendor/v8/test/mjsunit/regress/regress-2226.js +36 -0
  580. data/vendor/v8/test/mjsunit/regress/regress-2234.js +41 -0
  581. data/vendor/v8/test/mjsunit/regress/regress-2243.js +31 -0
  582. data/vendor/v8/test/mjsunit/regress/regress-2249.js +33 -0
  583. data/vendor/v8/test/mjsunit/regress/regress-2250.js +68 -0
  584. data/vendor/v8/test/mjsunit/regress/regress-2261.js +113 -0
  585. data/vendor/v8/test/mjsunit/regress/regress-2263.js +30 -0
  586. data/vendor/v8/test/mjsunit/regress/regress-2284.js +32 -0
  587. data/vendor/v8/test/mjsunit/regress/regress-2285.js +32 -0
  588. data/vendor/v8/test/mjsunit/regress/regress-2286.js +32 -0
  589. data/vendor/v8/test/mjsunit/regress/regress-2289.js +34 -0
  590. data/vendor/v8/test/mjsunit/regress/regress-2291.js +36 -0
  591. data/vendor/v8/test/mjsunit/regress/regress-2294.js +70 -0
  592. data/vendor/v8/test/mjsunit/regress/regress-2296.js +40 -0
  593. data/vendor/v8/test/mjsunit/regress/regress-2315.js +40 -0
  594. data/vendor/v8/test/mjsunit/regress/regress-2318.js +66 -0
  595. data/vendor/v8/test/mjsunit/regress/regress-2322.js +36 -0
  596. data/vendor/v8/test/mjsunit/regress/regress-2326.js +54 -0
  597. data/vendor/v8/test/mjsunit/regress/regress-2336.js +53 -0
  598. data/vendor/v8/test/mjsunit/regress/regress-2339.js +59 -0
  599. data/vendor/v8/test/mjsunit/regress/regress-2346.js +123 -0
  600. data/vendor/v8/test/mjsunit/regress/regress-2373.js +29 -0
  601. data/vendor/v8/test/mjsunit/regress/regress-2374.js +33 -0
  602. data/vendor/v8/test/mjsunit/regress/regress-2398.js +41 -0
  603. data/vendor/v8/test/mjsunit/regress/regress-2410.js +36 -0
  604. data/vendor/v8/test/mjsunit/regress/regress-2416.js +75 -0
  605. data/vendor/v8/test/mjsunit/regress/regress-2419.js +37 -0
  606. data/vendor/v8/test/mjsunit/regress/regress-2433.js +36 -0
  607. data/vendor/v8/test/mjsunit/regress/regress-2437.js +156 -0
  608. data/vendor/v8/test/mjsunit/regress/regress-2438.js +52 -0
  609. data/vendor/v8/test/mjsunit/regress/regress-2443.js +129 -0
  610. data/vendor/v8/test/mjsunit/regress/regress-2444.js +120 -0
  611. data/vendor/v8/test/mjsunit/regress/regress-2489.js +50 -0
  612. data/vendor/v8/test/mjsunit/regress/regress-2499.js +40 -0
  613. data/vendor/v8/test/mjsunit/regress/regress-334.js +1 -1
  614. data/vendor/v8/test/mjsunit/regress/regress-492.js +39 -1
  615. data/vendor/v8/test/mjsunit/regress/regress-builtin-array-op.js +38 -0
  616. data/vendor/v8/test/mjsunit/regress/regress-cnlt-elements.js +43 -0
  617. data/vendor/v8/test/mjsunit/regress/regress-cnlt-enum-indices.js +45 -0
  618. data/vendor/v8/test/mjsunit/regress/regress-cntl-descriptors-enum.js +46 -0
  619. data/vendor/v8/test/mjsunit/regress/regress-convert-enum.js +60 -0
  620. data/vendor/v8/test/mjsunit/regress/regress-convert-enum2.js +46 -0
  621. data/vendor/v8/test/mjsunit/regress/regress-convert-transition.js +40 -0
  622. data/vendor/v8/test/mjsunit/regress/regress-crbug-119926.js +3 -1
  623. data/vendor/v8/test/mjsunit/regress/regress-crbug-125148.js +90 -0
  624. data/vendor/v8/test/mjsunit/regress/regress-crbug-134055.js +63 -0
  625. data/vendor/v8/test/mjsunit/regress/regress-crbug-134609.js +59 -0
  626. data/vendor/v8/test/mjsunit/regress/regress-crbug-135008.js +45 -0
  627. data/vendor/v8/test/mjsunit/regress/regress-crbug-135066.js +55 -0
  628. data/vendor/v8/test/mjsunit/regress/regress-crbug-137689.js +47 -0
  629. data/vendor/v8/test/mjsunit/regress/regress-crbug-138887.js +48 -0
  630. data/vendor/v8/test/mjsunit/regress/regress-crbug-140083.js +44 -0
  631. data/vendor/v8/test/mjsunit/regress/regress-crbug-142087.js +38 -0
  632. data/vendor/v8/test/mjsunit/regress/regress-crbug-142218.js +44 -0
  633. data/vendor/v8/test/mjsunit/regress/regress-crbug-145961.js +39 -0
  634. data/vendor/v8/test/mjsunit/regress/regress-crbug-146910.js +33 -0
  635. data/vendor/v8/test/mjsunit/regress/regress-crbug-147475.js +48 -0
  636. data/vendor/v8/test/mjsunit/regress/regress-crbug-148376.js +35 -0
  637. data/vendor/v8/test/mjsunit/regress/regress-crbug-150545.js +53 -0
  638. data/vendor/v8/test/mjsunit/regress/regress-crbug-150729.js +39 -0
  639. data/vendor/v8/test/mjsunit/regress/regress-crbug-157019.js +54 -0
  640. data/vendor/v8/test/mjsunit/regress/regress-crbug-157520.js +38 -0
  641. data/vendor/v8/test/mjsunit/regress/regress-crbug-158185.js +39 -0
  642. data/vendor/v8/test/mjsunit/regress/regress-crbug-160010.js +35 -0
  643. data/vendor/v8/test/mjsunit/regress/regress-crbug-162085.js +71 -0
  644. data/vendor/v8/test/mjsunit/regress/regress-crbug-168545.js +34 -0
  645. data/vendor/v8/test/mjsunit/regress/regress-crbug-170856.js +33 -0
  646. data/vendor/v8/test/mjsunit/regress/regress-crbug-172345.js +34 -0
  647. data/vendor/v8/test/mjsunit/regress/regress-crbug-173974.js +36 -0
  648. data/vendor/v8/test/mjsunit/regress/regress-crbug-18639.js +9 -5
  649. data/vendor/v8/test/mjsunit/regress/regress-debug-code-recompilation.js +2 -1
  650. data/vendor/v8/test/mjsunit/regress/regress-deep-proto.js +45 -0
  651. data/vendor/v8/test/mjsunit/regress/regress-delete-empty-double.js +40 -0
  652. data/vendor/v8/test/mjsunit/regress/regress-iteration-order.js +42 -0
  653. data/vendor/v8/test/mjsunit/regress/regress-json-stringify-gc.js +41 -0
  654. data/vendor/v8/test/mjsunit/regress/regress-latin-1.js +78 -0
  655. data/vendor/v8/test/mjsunit/regress/regress-load-elements.js +49 -0
  656. data/vendor/v8/test/mjsunit/regress/regress-observe-empty-double-array.js +38 -0
  657. data/vendor/v8/test/mjsunit/regress/regress-undefined-store-keyed-fast-element.js +37 -0
  658. data/vendor/v8/test/mjsunit/shift-for-integer-div.js +59 -0
  659. data/vendor/v8/test/mjsunit/stack-traces-gc.js +119 -0
  660. data/vendor/v8/test/mjsunit/stack-traces-overflow.js +122 -0
  661. data/vendor/v8/test/mjsunit/stack-traces.js +39 -1
  662. data/vendor/v8/test/mjsunit/str-to-num.js +7 -2
  663. data/vendor/v8/test/mjsunit/strict-mode.js +36 -11
  664. data/vendor/v8/test/mjsunit/string-charcodeat.js +3 -0
  665. data/vendor/v8/test/mjsunit/string-natives.js +72 -0
  666. data/vendor/v8/test/mjsunit/string-split.js +17 -0
  667. data/vendor/v8/test/mjsunit/testcfg.py +76 -6
  668. data/vendor/v8/test/mjsunit/tools/tickprocessor.js +4 -1
  669. data/vendor/v8/test/mjsunit/try-finally-continue.js +72 -0
  670. data/vendor/v8/test/mjsunit/typed-array-slice.js +61 -0
  671. data/vendor/v8/test/mjsunit/unbox-double-arrays.js +2 -0
  672. data/vendor/v8/test/mjsunit/uri.js +12 -0
  673. data/vendor/v8/test/mjsunit/with-readonly.js +4 -2
  674. data/vendor/v8/test/mozilla/mozilla.status +19 -113
  675. data/vendor/v8/test/mozilla/testcfg.py +122 -3
  676. data/vendor/v8/test/preparser/preparser.status +5 -0
  677. data/vendor/v8/test/preparser/strict-identifiers.pyt +1 -1
  678. data/vendor/v8/test/preparser/testcfg.py +101 -5
  679. data/vendor/v8/test/sputnik/sputnik.status +1 -1
  680. data/vendor/v8/test/sputnik/testcfg.py +5 -0
  681. data/vendor/v8/test/test262/README +2 -2
  682. data/vendor/v8/test/test262/test262.status +13 -36
  683. data/vendor/v8/test/test262/testcfg.py +102 -8
  684. data/vendor/v8/tools/android-build.sh +0 -0
  685. data/vendor/v8/tools/android-ll-prof.sh +69 -0
  686. data/vendor/v8/tools/android-run.py +109 -0
  687. data/vendor/v8/tools/android-sync.sh +105 -0
  688. data/vendor/v8/tools/bash-completion.sh +0 -0
  689. data/vendor/v8/tools/check-static-initializers.sh +0 -0
  690. data/vendor/v8/tools/common-includes.sh +15 -22
  691. data/vendor/v8/tools/disasm.py +4 -4
  692. data/vendor/v8/tools/fuzz-harness.sh +0 -0
  693. data/vendor/v8/tools/gen-postmortem-metadata.py +6 -8
  694. data/vendor/v8/tools/grokdump.py +404 -129
  695. data/vendor/v8/tools/gyp/v8.gyp +105 -43
  696. data/vendor/v8/tools/linux-tick-processor +5 -5
  697. data/vendor/v8/tools/ll_prof.py +75 -15
  698. data/vendor/v8/tools/merge-to-branch.sh +2 -2
  699. data/vendor/v8/tools/plot-timer-events +70 -0
  700. data/vendor/v8/tools/plot-timer-events.js +510 -0
  701. data/vendor/v8/tools/presubmit.py +1 -0
  702. data/vendor/v8/tools/push-to-trunk.sh +14 -4
  703. data/vendor/v8/tools/run-llprof.sh +69 -0
  704. data/vendor/v8/tools/run-tests.py +372 -0
  705. data/vendor/v8/tools/run-valgrind.py +1 -1
  706. data/vendor/v8/tools/status-file-converter.py +39 -0
  707. data/vendor/v8/tools/test-server.py +224 -0
  708. data/vendor/v8/tools/test-wrapper-gypbuild.py +13 -16
  709. data/vendor/v8/tools/test.py +10 -19
  710. data/vendor/v8/tools/testrunner/README +174 -0
  711. data/vendor/v8/tools/testrunner/__init__.py +26 -0
  712. data/vendor/v8/tools/testrunner/local/__init__.py +26 -0
  713. data/vendor/v8/tools/testrunner/local/commands.py +153 -0
  714. data/vendor/v8/tools/testrunner/local/execution.py +182 -0
  715. data/vendor/v8/tools/testrunner/local/old_statusfile.py +460 -0
  716. data/vendor/v8/tools/testrunner/local/progress.py +238 -0
  717. data/vendor/v8/tools/testrunner/local/statusfile.py +145 -0
  718. data/vendor/v8/tools/testrunner/local/testsuite.py +187 -0
  719. data/vendor/v8/tools/testrunner/local/utils.py +108 -0
  720. data/vendor/v8/tools/testrunner/local/verbose.py +99 -0
  721. data/vendor/v8/tools/testrunner/network/__init__.py +26 -0
  722. data/vendor/v8/tools/testrunner/network/distro.py +90 -0
  723. data/vendor/v8/tools/testrunner/network/endpoint.py +124 -0
  724. data/vendor/v8/tools/testrunner/network/network_execution.py +253 -0
  725. data/vendor/v8/tools/testrunner/network/perfdata.py +120 -0
  726. data/vendor/v8/tools/testrunner/objects/__init__.py +26 -0
  727. data/vendor/v8/tools/testrunner/objects/context.py +50 -0
  728. data/vendor/v8/tools/testrunner/objects/output.py +60 -0
  729. data/vendor/v8/tools/testrunner/objects/peer.py +80 -0
  730. data/vendor/v8/tools/testrunner/objects/testcase.py +83 -0
  731. data/vendor/v8/tools/testrunner/objects/workpacket.py +90 -0
  732. data/vendor/v8/tools/testrunner/server/__init__.py +26 -0
  733. data/vendor/v8/tools/testrunner/server/compression.py +111 -0
  734. data/vendor/v8/tools/testrunner/server/constants.py +51 -0
  735. data/vendor/v8/tools/testrunner/server/daemon.py +147 -0
  736. data/vendor/v8/tools/testrunner/server/local_handler.py +119 -0
  737. data/vendor/v8/tools/testrunner/server/main.py +245 -0
  738. data/vendor/v8/tools/testrunner/server/presence_handler.py +120 -0
  739. data/vendor/v8/tools/testrunner/server/signatures.py +63 -0
  740. data/vendor/v8/tools/testrunner/server/status_handler.py +112 -0
  741. data/vendor/v8/tools/testrunner/server/work_handler.py +150 -0
  742. data/vendor/v8/tools/tick-processor.html +168 -0
  743. data/vendor/v8/tools/tickprocessor-driver.js +5 -3
  744. data/vendor/v8/tools/tickprocessor.js +58 -15
  745. metadata +534 -30
  746. data/patches/add-freebsd9-and-freebsd10-to-gyp-GetFlavor.patch +0 -11
  747. data/patches/do-not-imply-vfp3-and-armv7.patch +0 -44
  748. data/patches/fPIC-on-x64.patch +0 -14
  749. data/vendor/v8/src/liveobjectlist-inl.h +0 -126
  750. data/vendor/v8/src/liveobjectlist.cc +0 -2631
  751. data/vendor/v8/src/liveobjectlist.h +0 -319
  752. data/vendor/v8/test/mjsunit/mul-exhaustive.js +0 -4629
  753. data/vendor/v8/test/mjsunit/numops-fuzz.js +0 -4609
  754. data/vendor/v8/test/mjsunit/regress/regress-1969.js +0 -5045
@@ -54,21 +54,14 @@ inline Operand SmiUntagOperand(Register object) {
54
54
  const Register cp = { 8 }; // JavaScript context pointer
55
55
  const Register kRootRegister = { 10 }; // Roots array pointer.
56
56
 
57
- // Flags used for the AllocateInNewSpace functions.
58
- enum AllocationFlags {
59
- // No special flags.
60
- NO_ALLOCATION_FLAGS = 0,
61
- // Return the pointer to the allocated already tagged as a heap object.
62
- TAG_OBJECT = 1 << 0,
63
- // The content of the result register already contains the allocation top in
64
- // new space.
65
- RESULT_CONTAINS_TOP = 1 << 1,
66
- // Specify that the requested size of the space to allocate is specified in
67
- // words instead of bytes.
68
- SIZE_IN_WORDS = 1 << 2
57
+ // Flags used for AllocateHeapNumber
58
+ enum TaggingMode {
59
+ // Tag the result.
60
+ TAG_RESULT,
61
+ // Don't tag
62
+ DONT_TAG_RESULT
69
63
  };
70
64
 
71
-
72
65
  // Flags used for the ObjectToDoubleVFPRegister function.
73
66
  enum ObjectToDoubleFlags {
74
67
  // No special flags.
@@ -95,6 +88,11 @@ bool AreAliased(Register reg1,
95
88
  #endif
96
89
 
97
90
 
91
+ enum TargetAddressStorageMode {
92
+ CAN_INLINE_TARGET_ADDRESS,
93
+ NEVER_INLINE_TARGET_ADDRESS
94
+ };
95
+
98
96
  // MacroAssembler implements a collection of frequently used macros.
99
97
  class MacroAssembler: public Assembler {
100
98
  public:
@@ -110,18 +108,22 @@ class MacroAssembler: public Assembler {
110
108
  void Jump(Handle<Code> code, RelocInfo::Mode rmode, Condition cond = al);
111
109
  static int CallSize(Register target, Condition cond = al);
112
110
  void Call(Register target, Condition cond = al);
113
- static int CallSize(Address target,
114
- RelocInfo::Mode rmode,
115
- Condition cond = al);
116
- void Call(Address target, RelocInfo::Mode rmode, Condition cond = al);
117
- static int CallSize(Handle<Code> code,
118
- RelocInfo::Mode rmode = RelocInfo::CODE_TARGET,
119
- unsigned ast_id = kNoASTId,
120
- Condition cond = al);
111
+ int CallSize(Address target, RelocInfo::Mode rmode, Condition cond = al);
112
+ static int CallSizeNotPredictableCodeSize(Address target,
113
+ RelocInfo::Mode rmode,
114
+ Condition cond = al);
115
+ void Call(Address target, RelocInfo::Mode rmode,
116
+ Condition cond = al,
117
+ TargetAddressStorageMode mode = CAN_INLINE_TARGET_ADDRESS);
118
+ int CallSize(Handle<Code> code,
119
+ RelocInfo::Mode rmode = RelocInfo::CODE_TARGET,
120
+ TypeFeedbackId ast_id = TypeFeedbackId::None(),
121
+ Condition cond = al);
121
122
  void Call(Handle<Code> code,
122
123
  RelocInfo::Mode rmode = RelocInfo::CODE_TARGET,
123
- unsigned ast_id = kNoASTId,
124
- Condition cond = al);
124
+ TypeFeedbackId ast_id = TypeFeedbackId::None(),
125
+ Condition cond = al,
126
+ TargetAddressStorageMode mode = CAN_INLINE_TARGET_ADDRESS);
125
127
  void Ret(Condition cond = al);
126
128
 
127
129
  // Emit code to discard a non-negative number of pointer-sized elements
@@ -153,7 +155,7 @@ class MacroAssembler: public Assembler {
153
155
  int lsb,
154
156
  int width,
155
157
  Condition cond = al);
156
- void Bfc(Register dst, int lsb, int width, Condition cond = al);
158
+ void Bfc(Register dst, Register src, int lsb, int width, Condition cond = al);
157
159
  void Usat(Register dst, int satpos, const Operand& src,
158
160
  Condition cond = al);
159
161
 
@@ -162,7 +164,7 @@ class MacroAssembler: public Assembler {
162
164
  // Register move. May do nothing if the registers are identical.
163
165
  void Move(Register dst, Handle<Object> value);
164
166
  void Move(Register dst, Register src, Condition cond = al);
165
- void Move(DoubleRegister dst, DoubleRegister src);
167
+ void Move(DwVfpRegister dst, DwVfpRegister src);
166
168
 
167
169
  // Load an object from the root table.
168
170
  void LoadRoot(Register destination,
@@ -306,6 +308,7 @@ class MacroAssembler: public Assembler {
306
308
 
307
309
  // Push a handle.
308
310
  void Push(Handle<Object> handle);
311
+ void Push(Smi* smi) { Push(Handle<Smi>(smi)); }
309
312
 
310
313
  // Push two registers. Pushes leftmost register first (to highest address).
311
314
  void Push(Register src1, Register src2, Condition cond = al) {
@@ -457,11 +460,6 @@ class MacroAssembler: public Assembler {
457
460
  const MemOperand& dst,
458
461
  Condition cond = al);
459
462
 
460
- // Clear specified FPSCR bits.
461
- void ClearFPSCRBits(const uint32_t bits_to_clear,
462
- const Register scratch,
463
- const Condition cond = al);
464
-
465
463
  // Compare double values and move the result to the normal condition flags.
466
464
  void VFPCompareAndSetFlags(const DwVfpRegister src1,
467
465
  const DwVfpRegister src2,
@@ -482,6 +480,7 @@ class MacroAssembler: public Assembler {
482
480
 
483
481
  void Vmov(const DwVfpRegister dst,
484
482
  const double imm,
483
+ const Register scratch = no_reg,
485
484
  const Condition cond = al);
486
485
 
487
486
  // Enter exit frame.
@@ -499,8 +498,8 @@ class MacroAssembler: public Assembler {
499
498
  void LoadContext(Register dst, int context_chain_length);
500
499
 
501
500
  // Conditionally load the cached Array transitioned map of type
502
- // transitioned_kind from the global context if the map in register
503
- // map_in_out is the cached Array map in the global context of
501
+ // transitioned_kind from the native context if the map in register
502
+ // map_in_out is the cached Array map in the native context of
504
503
  // expected_kind.
505
504
  void LoadTransitionedArrayMapConditional(
506
505
  ElementsKind expected_kind,
@@ -729,7 +728,8 @@ class MacroAssembler: public Assembler {
729
728
  Register scratch1,
730
729
  Register scratch2,
731
730
  Register heap_number_map,
732
- Label* gc_required);
731
+ Label* gc_required,
732
+ TaggingMode tagging_mode = TAG_RESULT);
733
733
  void AllocateHeapNumberWithValue(Register result,
734
734
  DwVfpRegister value,
735
735
  Register scratch1,
@@ -813,13 +813,14 @@ class MacroAssembler: public Assembler {
813
813
  // case scratch2, scratch3 and scratch4 are unmodified.
814
814
  void StoreNumberToDoubleElements(Register value_reg,
815
815
  Register key_reg,
816
- Register receiver_reg,
816
+ // All regs below here overwritten.
817
817
  Register elements_reg,
818
818
  Register scratch1,
819
819
  Register scratch2,
820
820
  Register scratch3,
821
821
  Register scratch4,
822
- Label* fail);
822
+ Label* fail,
823
+ int elements_offset = 0);
823
824
 
824
825
  // Compare an object's map with the specified map and its transitioned
825
826
  // elements maps if mode is ALLOW_ELEMENT_TRANSITION_MAPS. Condition flags are
@@ -831,6 +832,13 @@ class MacroAssembler: public Assembler {
831
832
  Label* early_success,
832
833
  CompareMapMode mode = REQUIRE_EXACT_MAP);
833
834
 
835
+ // As above, but the map of the object is already loaded into the register
836
+ // which is preserved by the code generated.
837
+ void CompareMap(Register obj_map,
838
+ Handle<Map> map,
839
+ Label* early_success,
840
+ CompareMapMode mode = REQUIRE_EXACT_MAP);
841
+
834
842
  // Check if the map of an object is equal to a specified map and branch to
835
843
  // label if not. Skip the smi check if not required (object is known to be a
836
844
  // heap object). If mode is ALLOW_ELEMENT_TRANSITION_MAPS, then also match
@@ -867,12 +875,15 @@ class MacroAssembler: public Assembler {
867
875
 
868
876
  // Load and check the instance type of an object for being a string.
869
877
  // Loads the type into the second argument register.
870
- // Returns a condition that will be enabled if the object was a string.
878
+ // Returns a condition that will be enabled if the object was a string
879
+ // and the passed-in condition passed. If the passed-in condition failed
880
+ // then flags remain unchanged.
871
881
  Condition IsObjectStringType(Register obj,
872
- Register type) {
873
- ldr(type, FieldMemOperand(obj, HeapObject::kMapOffset));
874
- ldrb(type, FieldMemOperand(type, Map::kInstanceTypeOffset));
875
- tst(type, Operand(kIsNotStringMask));
882
+ Register type,
883
+ Condition cond = al) {
884
+ ldr(type, FieldMemOperand(obj, HeapObject::kMapOffset), cond);
885
+ ldrb(type, FieldMemOperand(type, Map::kInstanceTypeOffset), cond);
886
+ tst(type, Operand(kIsNotStringMask), cond);
876
887
  ASSERT_EQ(0, kStringTag);
877
888
  return eq;
878
889
  }
@@ -929,21 +940,30 @@ class MacroAssembler: public Assembler {
929
940
  DwVfpRegister double_scratch,
930
941
  Label *not_int32);
931
942
 
932
- // Truncates a double using a specific rounding mode.
943
+ // Try to convert a double to a signed 32-bit integer. If the double value
944
+ // can be exactly represented as an integer, the code jumps to 'done' and
945
+ // 'result' contains the integer value. Otherwise, the code falls through.
946
+ void TryFastDoubleToInt32(Register result,
947
+ DwVfpRegister double_input,
948
+ DwVfpRegister double_scratch,
949
+ Label* done);
950
+
951
+ // Truncates a double using a specific rounding mode, and writes the value
952
+ // to the result register.
933
953
  // Clears the z flag (ne condition) if an overflow occurs.
934
- // If exact_conversion is true, the z flag is also cleared if the conversion
935
- // was inexact, i.e. if the double value could not be converted exactly
936
- // to a 32bit integer.
954
+ // If kCheckForInexactConversion is passed, the z flag is also cleared if the
955
+ // conversion was inexact, i.e. if the double value could not be converted
956
+ // exactly to a 32-bit integer.
937
957
  void EmitVFPTruncate(VFPRoundingMode rounding_mode,
938
- SwVfpRegister result,
958
+ Register result,
939
959
  DwVfpRegister double_input,
940
- Register scratch1,
941
- Register scratch2,
960
+ Register scratch,
961
+ DwVfpRegister double_scratch,
942
962
  CheckForInexactConversion check
943
963
  = kDontCheckForInexactConversion);
944
964
 
945
965
  // Helper for EmitECMATruncate.
946
- // This will truncate a floating-point value outside of the singed 32bit
966
+ // This will truncate a floating-point value outside of the signed 32bit
947
967
  // integer range to a 32bit signed integer.
948
968
  // Expects the double value loaded in input_high and input_low.
949
969
  // Exits with the answer in 'result'.
@@ -958,7 +978,7 @@ class MacroAssembler: public Assembler {
958
978
  // Exits with 'result' holding the answer and all other registers clobbered.
959
979
  void EmitECMATruncate(Register result,
960
980
  DwVfpRegister double_input,
961
- SwVfpRegister single_scratch,
981
+ DwVfpRegister double_scratch,
962
982
  Register scratch,
963
983
  Register scratch2,
964
984
  Register scratch3);
@@ -972,11 +992,18 @@ class MacroAssembler: public Assembler {
972
992
  Register source,
973
993
  Register scratch);
974
994
 
995
+ // Check whether d16-d31 are available on the CPU. The result is given by the
996
+ // Z condition flag: Z==0 if d16-d31 available, Z==1 otherwise.
997
+ void CheckFor32DRegs(Register scratch);
998
+
999
+
975
1000
  // ---------------------------------------------------------------------------
976
1001
  // Runtime calls
977
1002
 
978
1003
  // Call a code stub.
979
- void CallStub(CodeStub* stub, Condition cond = al);
1004
+ void CallStub(CodeStub* stub,
1005
+ TypeFeedbackId ast_id = TypeFeedbackId::None(),
1006
+ Condition cond = al);
980
1007
 
981
1008
  // Call a code stub.
982
1009
  void TailCallStub(CodeStub* stub, Condition cond = al);
@@ -1027,9 +1054,9 @@ class MacroAssembler: public Assembler {
1027
1054
  // whether soft or hard floating point ABI is used. These functions
1028
1055
  // abstract parameter passing for the three different ways we call
1029
1056
  // C functions from generated code.
1030
- void SetCallCDoubleArguments(DoubleRegister dreg);
1031
- void SetCallCDoubleArguments(DoubleRegister dreg1, DoubleRegister dreg2);
1032
- void SetCallCDoubleArguments(DoubleRegister dreg, Register reg);
1057
+ void SetCallCDoubleArguments(DwVfpRegister dreg);
1058
+ void SetCallCDoubleArguments(DwVfpRegister dreg1, DwVfpRegister dreg2);
1059
+ void SetCallCDoubleArguments(DwVfpRegister dreg, Register reg);
1033
1060
 
1034
1061
  // Calls a C function and cleans up the space for arguments allocated
1035
1062
  // by PrepareCallCFunction. The called function is not allowed to trigger a
@@ -1045,7 +1072,7 @@ class MacroAssembler: public Assembler {
1045
1072
  int num_reg_arguments,
1046
1073
  int num_double_arguments);
1047
1074
 
1048
- void GetCFunctionDoubleResult(const DoubleRegister dst);
1075
+ void GetCFunctionDoubleResult(const DwVfpRegister dst);
1049
1076
 
1050
1077
  // Calls an API function. Allocates HandleScope, extracts returned value
1051
1078
  // from handle and propagates exceptions. Restores context. stack_space
@@ -1175,7 +1202,7 @@ class MacroAssembler: public Assembler {
1175
1202
  // Souce and destination can be the same register.
1176
1203
  void UntagAndJumpIfNotSmi(Register dst, Register src, Label* non_smi_case);
1177
1204
 
1178
- // Jump the register contains a smi.
1205
+ // Jump if the register contains a smi.
1179
1206
  inline void JumpIfSmi(Register value, Label* smi_label) {
1180
1207
  tst(value, Operand(kSmiTagMask));
1181
1208
  b(eq, smi_label);
@@ -1190,17 +1217,18 @@ class MacroAssembler: public Assembler {
1190
1217
  // Jump if either of the registers contain a smi.
1191
1218
  void JumpIfEitherSmi(Register reg1, Register reg2, Label* on_either_smi);
1192
1219
 
1193
- // Abort execution if argument is a smi. Used in debug code.
1194
- void AbortIfSmi(Register object);
1195
- void AbortIfNotSmi(Register object);
1220
+ // Abort execution if argument is a smi, enabled via --debug-code.
1221
+ void AssertNotSmi(Register object);
1222
+ void AssertSmi(Register object);
1196
1223
 
1197
- // Abort execution if argument is a string. Used in debug code.
1198
- void AbortIfNotString(Register object);
1224
+ // Abort execution if argument is a string, enabled via --debug-code.
1225
+ void AssertString(Register object);
1199
1226
 
1200
- // Abort execution if argument is not the root value with the given index.
1201
- void AbortIfNotRootValue(Register src,
1202
- Heap::RootListIndex root_value_index,
1203
- const char* message);
1227
+ // Abort execution if argument is not the root value with the given index,
1228
+ // enabled via --debug-code.
1229
+ void AssertRootValue(Register src,
1230
+ Heap::RootListIndex root_value_index,
1231
+ const char* message);
1204
1232
 
1205
1233
  // ---------------------------------------------------------------------------
1206
1234
  // HeapNumber utilities
@@ -1257,11 +1285,21 @@ class MacroAssembler: public Assembler {
1257
1285
  void ClampUint8(Register output_reg, Register input_reg);
1258
1286
 
1259
1287
  void ClampDoubleToUint8(Register result_reg,
1260
- DoubleRegister input_reg,
1261
- DoubleRegister temp_double_reg);
1288
+ DwVfpRegister input_reg,
1289
+ DwVfpRegister temp_double_reg);
1262
1290
 
1263
1291
 
1264
1292
  void LoadInstanceDescriptors(Register map, Register descriptors);
1293
+ void EnumLength(Register dst, Register map);
1294
+ void NumberOfOwnDescriptors(Register dst, Register map);
1295
+
1296
+ template<typename Field>
1297
+ void DecodeField(Register reg) {
1298
+ static const int shift = Field::kShift;
1299
+ static const int mask = (Field::kMask >> shift) << kSmiTagSize;
1300
+ mov(reg, Operand(reg, LSR, shift));
1301
+ and_(reg, reg, Operand(mask));
1302
+ }
1265
1303
 
1266
1304
  // Activation support.
1267
1305
  void EnterFrame(StackFrame::Type type);
@@ -1271,6 +1309,15 @@ class MacroAssembler: public Assembler {
1271
1309
  // in r0. Assumes that any other register can be used as a scratch.
1272
1310
  void CheckEnumCache(Register null_value, Label* call_runtime);
1273
1311
 
1312
+ // AllocationSiteInfo support. Arrays may have an associated
1313
+ // AllocationSiteInfo object that can be checked for in order to pretransition
1314
+ // to another type.
1315
+ // On entry, receiver_reg should point to the array object.
1316
+ // scratch_reg gets clobbered.
1317
+ // If allocation info is present, condition flags are set to eq
1318
+ void TestJSArrayForAllocationSiteInfo(Register receiver_reg,
1319
+ Register scratch_reg);
1320
+
1274
1321
  private:
1275
1322
  void CallCFunctionHelper(Register function,
1276
1323
  int num_reg_arguments,
@@ -1323,9 +1370,9 @@ class MacroAssembler: public Assembler {
1323
1370
  // This handle will be patched with the code object on installation.
1324
1371
  Handle<Object> code_object_;
1325
1372
 
1326
- // Needs access to SafepointRegisterStackIndex for optimized frame
1373
+ // Needs access to SafepointRegisterStackIndex for compiled frame
1327
1374
  // traversal.
1328
- friend class OptimizedFrame;
1375
+ friend class StandardFrame;
1329
1376
  };
1330
1377
 
1331
1378
 
@@ -1354,7 +1401,6 @@ class CodePatcher {
1354
1401
 
1355
1402
  private:
1356
1403
  byte* address_; // The address of the code being patched.
1357
- int instructions_; // Number of instructions of the expected patch size.
1358
1404
  int size_; // Number of bytes of the expected patch size.
1359
1405
  MacroAssembler masm_; // Macro assembler used to generate the code.
1360
1406
  };
@@ -1369,7 +1415,7 @@ inline MemOperand ContextOperand(Register context, int index) {
1369
1415
 
1370
1416
 
1371
1417
  inline MemOperand GlobalObjectOperand() {
1372
- return ContextOperand(cp, Context::GLOBAL_INDEX);
1418
+ return ContextOperand(cp, Context::GLOBAL_OBJECT_INDEX);
1373
1419
  }
1374
1420
 
1375
1421
 
@@ -119,8 +119,10 @@ namespace internal {
119
119
 
120
120
  RegExpMacroAssemblerARM::RegExpMacroAssemblerARM(
121
121
  Mode mode,
122
- int registers_to_save)
123
- : masm_(new MacroAssembler(Isolate::Current(), NULL, kRegExpCodeSize)),
122
+ int registers_to_save,
123
+ Zone* zone)
124
+ : NativeRegExpMacroAssembler(zone),
125
+ masm_(new MacroAssembler(Isolate::Current(), NULL, kRegExpCodeSize)),
124
126
  mode_(mode),
125
127
  num_registers_(registers_to_save),
126
128
  num_saved_registers_(registers_to_save),
@@ -202,7 +204,7 @@ void RegExpMacroAssemblerARM::CheckAtStart(Label* on_at_start) {
202
204
  Label not_at_start;
203
205
  // Did we start the match at the start of the string at all?
204
206
  __ ldr(r0, MemOperand(frame_pointer(), kStartIndex));
205
- __ cmp(r0, Operand(0, RelocInfo::NONE));
207
+ __ cmp(r0, Operand::Zero());
206
208
  BranchOrBacktrack(ne, &not_at_start);
207
209
 
208
210
  // If we did, are we still at the start of the input?
@@ -217,7 +219,7 @@ void RegExpMacroAssemblerARM::CheckAtStart(Label* on_at_start) {
217
219
  void RegExpMacroAssemblerARM::CheckNotAtStart(Label* on_not_at_start) {
218
220
  // Did we start the match at the start of the string at all?
219
221
  __ ldr(r0, MemOperand(frame_pointer(), kStartIndex));
220
- __ cmp(r0, Operand(0, RelocInfo::NONE));
222
+ __ cmp(r0, Operand::Zero());
221
223
  BranchOrBacktrack(ne, on_not_at_start);
222
224
  // If we did, are we still at the start of the input?
223
225
  __ ldr(r1, MemOperand(frame_pointer(), kInputStart));
@@ -259,7 +261,7 @@ void RegExpMacroAssemblerARM::CheckCharacters(Vector<const uc16> str,
259
261
  for (int i = 0; i < str.length(); i++) {
260
262
  if (mode_ == ASCII) {
261
263
  __ ldrb(r1, MemOperand(r0, char_size(), PostIndex));
262
- ASSERT(str[i] <= String::kMaxAsciiCharCode);
264
+ ASSERT(str[i] <= String::kMaxOneByteCharCode);
263
265
  __ cmp(r1, Operand(str[i]));
264
266
  } else {
265
267
  __ ldrh(r1, MemOperand(r0, char_size(), PostIndex));
@@ -335,8 +337,17 @@ void RegExpMacroAssemblerARM::CheckNotBackReferenceIgnoreCase(
335
337
  __ b(ne, &fail);
336
338
  __ sub(r3, r3, Operand('a'));
337
339
  __ cmp(r3, Operand('z' - 'a')); // Is r3 a lowercase letter?
340
+ #ifndef ENABLE_LATIN_1
338
341
  __ b(hi, &fail);
339
-
342
+ #else
343
+ __ b(ls, &loop_check); // In range 'a'-'z'.
344
+ // Latin-1: Check for values in range [224,254] but not 247.
345
+ __ sub(r3, r3, Operand(224 - 'a'));
346
+ __ cmp(r3, Operand(254 - 224));
347
+ __ b(hi, &fail); // Weren't Latin-1 letters.
348
+ __ cmp(r3, Operand(247 - 224)); // Check for 247.
349
+ __ b(eq, &fail);
350
+ #endif
340
351
 
341
352
  __ bind(&loop_check);
342
353
  __ cmp(r0, r1);
@@ -383,7 +394,7 @@ void RegExpMacroAssemblerARM::CheckNotBackReferenceIgnoreCase(
383
394
  }
384
395
 
385
396
  // Check if function returned non-zero for success or zero for failure.
386
- __ cmp(r0, Operand(0, RelocInfo::NONE));
397
+ __ cmp(r0, Operand::Zero());
387
398
  BranchOrBacktrack(eq, on_no_match);
388
399
  // On success, increment position by length of capture.
389
400
  __ add(current_input_offset(), current_input_offset(), Operand(r4));
@@ -436,16 +447,6 @@ void RegExpMacroAssemblerARM::CheckNotBackReference(
436
447
  }
437
448
 
438
449
 
439
- void RegExpMacroAssemblerARM::CheckNotRegistersEqual(int reg1,
440
- int reg2,
441
- Label* on_not_equal) {
442
- __ ldr(r0, register_location(reg1));
443
- __ ldr(r1, register_location(reg2));
444
- __ cmp(r0, r1);
445
- BranchOrBacktrack(ne, on_not_equal);
446
- }
447
-
448
-
449
450
  void RegExpMacroAssemblerARM::CheckNotCharacter(unsigned c,
450
451
  Label* on_not_equal) {
451
452
  __ cmp(current_character(), Operand(c));
@@ -516,7 +517,7 @@ void RegExpMacroAssemblerARM::CheckBitInTable(
516
517
  Handle<ByteArray> table,
517
518
  Label* on_bit_set) {
518
519
  __ mov(r0, Operand(table));
519
- if (mode_ != ASCII || kTableMask != String::kMaxAsciiCharCode) {
520
+ if (mode_ != ASCII || kTableMask != String::kMaxOneByteCharCode) {
520
521
  __ and_(r1, current_character(), Operand(kTableSize - 1));
521
522
  __ add(r1, r1, Operand(ByteArray::kHeaderSize - kHeapObjectTag));
522
523
  } else {
@@ -525,7 +526,7 @@ void RegExpMacroAssemblerARM::CheckBitInTable(
525
526
  Operand(ByteArray::kHeaderSize - kHeapObjectTag));
526
527
  }
527
528
  __ ldrb(r0, MemOperand(r0, r1));
528
- __ cmp(r0, Operand(0));
529
+ __ cmp(r0, Operand::Zero());
529
530
  BranchOrBacktrack(ne, on_bit_set);
530
531
  }
531
532
 
@@ -621,7 +622,7 @@ bool RegExpMacroAssemblerARM::CheckSpecialCharacterClass(uc16 type,
621
622
  ExternalReference map = ExternalReference::re_word_character_map();
622
623
  __ mov(r0, Operand(map));
623
624
  __ ldrb(r0, MemOperand(r0, current_character()));
624
- __ cmp(r0, Operand(0));
625
+ __ cmp(r0, Operand::Zero());
625
626
  BranchOrBacktrack(eq, on_no_match);
626
627
  return true;
627
628
  }
@@ -635,7 +636,7 @@ bool RegExpMacroAssemblerARM::CheckSpecialCharacterClass(uc16 type,
635
636
  ExternalReference map = ExternalReference::re_word_character_map();
636
637
  __ mov(r0, Operand(map));
637
638
  __ ldrb(r0, MemOperand(r0, current_character()));
638
- __ cmp(r0, Operand(0));
639
+ __ cmp(r0, Operand::Zero());
639
640
  BranchOrBacktrack(ne, on_no_match);
640
641
  if (mode_ != ASCII) {
641
642
  __ bind(&done);
@@ -683,7 +684,7 @@ Handle<HeapObject> RegExpMacroAssemblerARM::GetCode(Handle<String> source) {
683
684
  // Set frame pointer in space for it if this is not a direct call
684
685
  // from generated code.
685
686
  __ add(frame_pointer(), sp, Operand(4 * kPointerSize));
686
- __ mov(r0, Operand(0, RelocInfo::NONE));
687
+ __ mov(r0, Operand::Zero());
687
688
  __ push(r0); // Make room for success counter and initialize it to 0.
688
689
  __ push(r0); // Make room for "position - 1" constant (value is irrelevant).
689
690
  // Check if we have space on the stack for registers.
@@ -708,7 +709,7 @@ Handle<HeapObject> RegExpMacroAssemblerARM::GetCode(Handle<String> source) {
708
709
 
709
710
  __ bind(&stack_limit_hit);
710
711
  CallCheckStackGuardState(r0);
711
- __ cmp(r0, Operand(0, RelocInfo::NONE));
712
+ __ cmp(r0, Operand::Zero());
712
713
  // If returned value is non-zero, we exit with the returned value as result.
713
714
  __ b(ne, &return_r0);
714
715
 
@@ -736,7 +737,7 @@ Handle<HeapObject> RegExpMacroAssemblerARM::GetCode(Handle<String> source) {
736
737
 
737
738
  Label load_char_start_regexp, start_regexp;
738
739
  // Load newline if index is at start, previous character otherwise.
739
- __ cmp(r1, Operand(0, RelocInfo::NONE));
740
+ __ cmp(r1, Operand::Zero());
740
741
  __ b(ne, &load_char_start_regexp);
741
742
  __ mov(current_character(), Operand('\n'), LeaveCC, eq);
742
743
  __ jmp(&start_regexp);
@@ -796,7 +797,7 @@ Handle<HeapObject> RegExpMacroAssemblerARM::GetCode(Handle<String> source) {
796
797
  for (int i = 0; i < num_saved_registers_; i += 2) {
797
798
  __ ldr(r2, register_location(i));
798
799
  __ ldr(r3, register_location(i + 1));
799
- if (global()) {
800
+ if (i == 0 && global_with_zero_length_check()) {
800
801
  // Keep capture start in r4 for the zero-length check later.
801
802
  __ mov(r4, r2);
802
803
  }
@@ -834,18 +835,22 @@ Handle<HeapObject> RegExpMacroAssemblerARM::GetCode(Handle<String> source) {
834
835
 
835
836
  // Prepare r0 to initialize registers with its value in the next run.
836
837
  __ ldr(r0, MemOperand(frame_pointer(), kInputStartMinusOne));
837
- // Special case for zero-length matches.
838
- // r4: capture start index
839
- __ cmp(current_input_offset(), r4);
840
- // Not a zero-length match, restart.
841
- __ b(ne, &load_char_start_regexp);
842
- // Offset from the end is zero if we already reached the end.
843
- __ cmp(current_input_offset(), Operand(0));
844
- __ b(eq, &exit_label_);
845
- // Advance current position after a zero-length match.
846
- __ add(current_input_offset(),
847
- current_input_offset(),
848
- Operand((mode_ == UC16) ? 2 : 1));
838
+
839
+ if (global_with_zero_length_check()) {
840
+ // Special case for zero-length matches.
841
+ // r4: capture start index
842
+ __ cmp(current_input_offset(), r4);
843
+ // Not a zero-length match, restart.
844
+ __ b(ne, &load_char_start_regexp);
845
+ // Offset from the end is zero if we already reached the end.
846
+ __ cmp(current_input_offset(), Operand::Zero());
847
+ __ b(eq, &exit_label_);
848
+ // Advance current position after a zero-length match.
849
+ __ add(current_input_offset(),
850
+ current_input_offset(),
851
+ Operand((mode_ == UC16) ? 2 : 1));
852
+ }
853
+
849
854
  __ b(&load_char_start_regexp);
850
855
  } else {
851
856
  __ mov(r0, Operand(SUCCESS));
@@ -877,7 +882,7 @@ Handle<HeapObject> RegExpMacroAssemblerARM::GetCode(Handle<String> source) {
877
882
  SafeCallTarget(&check_preempt_label_);
878
883
 
879
884
  CallCheckStackGuardState(r0);
880
- __ cmp(r0, Operand(0, RelocInfo::NONE));
885
+ __ cmp(r0, Operand::Zero());
881
886
  // If returning non-zero, we should end execution with the given
882
887
  // result as return value.
883
888
  __ b(ne, &return_r0);
@@ -904,7 +909,7 @@ Handle<HeapObject> RegExpMacroAssemblerARM::GetCode(Handle<String> source) {
904
909
  __ CallCFunction(grow_stack, num_arguments);
905
910
  // If return NULL, we have failed to grow the stack, and
906
911
  // must exit with a stack-overflow exception.
907
- __ cmp(r0, Operand(0, RelocInfo::NONE));
912
+ __ cmp(r0, Operand::Zero());
908
913
  __ b(eq, &exit_with_exception);
909
914
  // Otherwise use return value as new stack pointer.
910
915
  __ mov(backtrack_stackpointer(), r0);
@@ -1154,7 +1159,7 @@ int RegExpMacroAssemblerARM::CheckStackGuardState(Address* return_address,
1154
1159
  Handle<String> subject(frame_entry<String*>(re_frame, kInputString));
1155
1160
 
1156
1161
  // Current string.
1157
- bool is_ascii = subject->IsAsciiRepresentationUnderneath();
1162
+ bool is_ascii = subject->IsOneByteRepresentationUnderneath();
1158
1163
 
1159
1164
  ASSERT(re_code->instruction_start() <= *return_address);
1160
1165
  ASSERT(*return_address <=
@@ -1185,7 +1190,7 @@ int RegExpMacroAssemblerARM::CheckStackGuardState(Address* return_address,
1185
1190
  }
1186
1191
 
1187
1192
  // String might have changed.
1188
- if (subject_tmp->IsAsciiRepresentation() != is_ascii) {
1193
+ if (subject_tmp->IsOneByteRepresentation() != is_ascii) {
1189
1194
  // If we changed between an ASCII and an UC16 string, the specialized
1190
1195
  // code cannot be used, and we need to restart regexp matching from
1191
1196
  // scratch (including, potentially, compiling a new version of the code).
@@ -1362,6 +1367,11 @@ void RegExpMacroAssemblerARM::CallCFunctionUsingStub(
1362
1367
  }
1363
1368
 
1364
1369
 
1370
+ bool RegExpMacroAssemblerARM::CanReadUnaligned() {
1371
+ return CpuFeatures::IsSupported(UNALIGNED_ACCESSES) && !slow_safe();
1372
+ }
1373
+
1374
+
1365
1375
  void RegExpMacroAssemblerARM::LoadCurrentCharacterUnchecked(int cp_offset,
1366
1376
  int characters) {
1367
1377
  Register offset = current_input_offset();
@@ -1374,9 +1384,9 @@ void RegExpMacroAssemblerARM::LoadCurrentCharacterUnchecked(int cp_offset,
1374
1384
  // and the operating system running on the target allow it.
1375
1385
  // If unaligned load/stores are not supported then this function must only
1376
1386
  // be used to load a single character at a time.
1377
- #if !V8_TARGET_CAN_READ_UNALIGNED
1378
- ASSERT(characters == 1);
1379
- #endif
1387
+ if (!CanReadUnaligned()) {
1388
+ ASSERT(characters == 1);
1389
+ }
1380
1390
 
1381
1391
  if (mode_ == ASCII) {
1382
1392
  if (characters == 4) {