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
@@ -96,7 +96,6 @@ class FunctionEntry BASE_EMBEDDED {
96
96
 
97
97
  private:
98
98
  Vector<unsigned> backing_;
99
- bool owns_data_;
100
99
  };
101
100
 
102
101
 
@@ -175,12 +174,6 @@ class ParserApi {
175
174
  static ScriptDataImpl* PreParse(Utf16CharacterStream* source,
176
175
  v8::Extension* extension,
177
176
  int flags);
178
-
179
- // Preparser that only does preprocessing that makes sense if only used
180
- // immediately after.
181
- static ScriptDataImpl* PartialPreParse(Handle<String> source,
182
- v8::Extension* extension,
183
- int flags);
184
177
  };
185
178
 
186
179
  // ----------------------------------------------------------------------------
@@ -200,12 +193,12 @@ class BufferedZoneList {
200
193
  // Adds element at end of list. This element is buffered and can
201
194
  // be read using last() or removed using RemoveLast until a new Add or until
202
195
  // RemoveLast or GetList has been called.
203
- void Add(T* value) {
196
+ void Add(T* value, Zone* zone) {
204
197
  if (last_ != NULL) {
205
198
  if (list_ == NULL) {
206
- list_ = new ZoneList<T*>(initial_size);
199
+ list_ = new(zone) ZoneList<T*>(initial_size, zone);
207
200
  }
208
- list_->Add(last_);
201
+ list_->Add(last_, zone);
209
202
  }
210
203
  last_ = value;
211
204
  }
@@ -250,12 +243,12 @@ class BufferedZoneList {
250
243
  return length + ((last_ == NULL) ? 0 : 1);
251
244
  }
252
245
 
253
- ZoneList<T*>* GetList() {
246
+ ZoneList<T*>* GetList(Zone* zone) {
254
247
  if (list_ == NULL) {
255
- list_ = new ZoneList<T*>(initial_size);
248
+ list_ = new(zone) ZoneList<T*>(initial_size, zone);
256
249
  }
257
250
  if (last_ != NULL) {
258
- list_->Add(last_);
251
+ list_->Add(last_, zone);
259
252
  last_ = NULL;
260
253
  }
261
254
  return list_;
@@ -270,7 +263,7 @@ class BufferedZoneList {
270
263
  // Accumulates RegExp atoms and assertions into lists of terms and alternatives.
271
264
  class RegExpBuilder: public ZoneObject {
272
265
  public:
273
- RegExpBuilder();
266
+ explicit RegExpBuilder(Zone* zone);
274
267
  void AddCharacter(uc16 character);
275
268
  // "Adds" an empty expression. Does nothing except consume a
276
269
  // following quantifier
@@ -285,7 +278,7 @@ class RegExpBuilder: public ZoneObject {
285
278
  void FlushCharacters();
286
279
  void FlushText();
287
280
  void FlushTerms();
288
- Zone* zone() { return zone_; }
281
+ Zone* zone() const { return zone_; }
289
282
 
290
283
  Zone* zone_;
291
284
  bool pending_empty_;
@@ -306,11 +299,13 @@ class RegExpParser {
306
299
  public:
307
300
  RegExpParser(FlatStringReader* in,
308
301
  Handle<String>* error,
309
- bool multiline_mode);
302
+ bool multiline_mode,
303
+ Zone* zone);
310
304
 
311
305
  static bool ParseRegExp(FlatStringReader* input,
312
306
  bool multiline,
313
- RegExpCompileData* result);
307
+ RegExpCompileData* result,
308
+ Zone* zone);
314
309
 
315
310
  RegExpTree* ParsePattern();
316
311
  RegExpTree* ParseDisjunction();
@@ -368,9 +363,10 @@ class RegExpParser {
368
363
  public:
369
364
  RegExpParserState(RegExpParserState* previous_state,
370
365
  SubexpressionType group_type,
371
- int disjunction_capture_index)
366
+ int disjunction_capture_index,
367
+ Zone* zone)
372
368
  : previous_state_(previous_state),
373
- builder_(new RegExpBuilder()),
369
+ builder_(new(zone) RegExpBuilder(zone)),
374
370
  group_type_(group_type),
375
371
  disjunction_capture_index_(disjunction_capture_index) {}
376
372
  // Parser state of containing expression, if any.
@@ -397,7 +393,7 @@ class RegExpParser {
397
393
  };
398
394
 
399
395
  Isolate* isolate() { return isolate_; }
400
- Zone* zone() { return isolate_->zone(); }
396
+ Zone* zone() const { return zone_; }
401
397
 
402
398
  uc32 current() { return current_; }
403
399
  bool has_more() { return has_more_; }
@@ -407,6 +403,7 @@ class RegExpParser {
407
403
  void ScanForCaptures();
408
404
 
409
405
  Isolate* isolate_;
406
+ Zone* zone_;
410
407
  Handle<String>* error_;
411
408
  ZoneList<RegExpCapture*>* captures_;
412
409
  FlatStringReader* in_;
@@ -430,7 +427,7 @@ class SingletonLogger;
430
427
 
431
428
  class Parser {
432
429
  public:
433
- Parser(Handle<Script> script,
430
+ Parser(CompilationInfo* info,
434
431
  int parsing_flags, // Combination of ParsingFlags
435
432
  v8::Extension* extension,
436
433
  ScriptDataImpl* pre_data);
@@ -440,8 +437,8 @@ class Parser {
440
437
  }
441
438
 
442
439
  // Returns NULL if parsing failed.
443
- FunctionLiteral* ParseProgram(CompilationInfo* info);
444
- FunctionLiteral* ParseLazy(CompilationInfo* info);
440
+ FunctionLiteral* ParseProgram();
441
+ FunctionLiteral* ParseLazy();
445
442
 
446
443
  void ReportMessageAt(Scanner::Location loc,
447
444
  const char* message,
@@ -456,7 +453,7 @@ class Parser {
456
453
  // construct a hashable id, so if more than 2^17 are allowed, this
457
454
  // should be checked.
458
455
  static const int kMaxNumFunctionParameters = 32766;
459
- static const int kMaxNumFunctionLocals = 32767;
456
+ static const int kMaxNumFunctionLocals = 131071; // 2^17-1
460
457
 
461
458
  enum Mode {
462
459
  PARSE_LAZILY,
@@ -538,15 +535,28 @@ class Parser {
538
535
  AstNodeFactory<AstConstructionVisitor> factory_;
539
536
  };
540
537
 
538
+ class ParsingModeScope BASE_EMBEDDED {
539
+ public:
540
+ ParsingModeScope(Parser* parser, Mode mode)
541
+ : parser_(parser),
542
+ old_mode_(parser->mode()) {
543
+ parser_->mode_ = mode;
544
+ }
545
+ ~ParsingModeScope() {
546
+ parser_->mode_ = old_mode_;
547
+ }
541
548
 
549
+ private:
550
+ Parser* parser_;
551
+ Mode old_mode_;
552
+ };
542
553
 
543
-
544
- FunctionLiteral* ParseLazy(CompilationInfo* info,
545
- Utf16CharacterStream* source,
554
+ FunctionLiteral* ParseLazy(Utf16CharacterStream* source,
546
555
  ZoneScope* zone_scope);
547
556
 
548
557
  Isolate* isolate() { return isolate_; }
549
- Zone* zone() { return isolate_->zone(); }
558
+ Zone* zone() const { return zone_; }
559
+ CompilationInfo* info() const { return info_; }
550
560
 
551
561
  // Called by ParseProgram after setting up the scanner.
552
562
  FunctionLiteral* DoParseProgram(CompilationInfo* info,
@@ -568,7 +578,7 @@ class Parser {
568
578
  return top_scope_->is_extended_mode();
569
579
  }
570
580
  Scope* DeclarationScope(VariableMode mode) {
571
- return (mode == LET || mode == CONST_HARMONY)
581
+ return IsLexicalVariableMode(mode)
572
582
  ? top_scope_ : top_scope_->DeclarationScope();
573
583
  }
574
584
 
@@ -579,10 +589,10 @@ class Parser {
579
589
  // which is set to false if parsing failed; it is unchanged otherwise.
580
590
  // By making the 'exception handling' explicit, we are forced to check
581
591
  // for failure at the call sites.
582
- void* ParseSourceElements(ZoneList<Statement*>* processor,
583
- int end_token, bool is_eval, bool* ok);
592
+ void* ParseSourceElements(ZoneList<Statement*>* processor, int end_token,
593
+ bool is_eval, bool is_global, bool* ok);
584
594
  Statement* ParseModuleElement(ZoneStringList* labels, bool* ok);
585
- Block* ParseModuleDeclaration(ZoneStringList* names, bool* ok);
595
+ Statement* ParseModuleDeclaration(ZoneStringList* names, bool* ok);
586
596
  Module* ParseModule(bool* ok);
587
597
  Module* ParseModuleLiteral(bool* ok);
588
598
  Module* ParseModulePath(bool* ok);
@@ -767,7 +777,7 @@ class Parser {
767
777
  // Parser support
768
778
  VariableProxy* NewUnresolved(Handle<String> name,
769
779
  VariableMode mode,
770
- Interface* interface = Interface::NewValue());
780
+ Interface* interface);
771
781
  void Declare(Declaration* declaration, bool resolve, bool* ok);
772
782
 
773
783
  bool TargetStackContainsLabel(Handle<String> label);
@@ -834,6 +844,8 @@ class Parser {
834
844
  // so never lazily compile it.
835
845
  bool parenthesized_function_;
836
846
 
847
+ Zone* zone_;
848
+ CompilationInfo* info_;
837
849
  friend class BlockState;
838
850
  friend class FunctionState;
839
851
  };
@@ -359,6 +359,12 @@ bool VirtualMemory::Guard(void* address) {
359
359
  }
360
360
 
361
361
 
362
+ bool VirtualMemory::HasLazyCommits() {
363
+ // TODO(alph): implement for the platform.
364
+ return false;
365
+ }
366
+
367
+
362
368
  class Thread::PlatformData : public Malloced {
363
369
  public:
364
370
  PlatformData() : thread_(kNoThread) {}
@@ -649,23 +655,12 @@ class SamplerThread : public Thread {
649
655
  SamplerRegistry::State state;
650
656
  while ((state = SamplerRegistry::GetState()) !=
651
657
  SamplerRegistry::HAS_NO_SAMPLERS) {
652
- bool cpu_profiling_enabled =
653
- (state == SamplerRegistry::HAS_CPU_PROFILING_SAMPLERS);
654
- bool runtime_profiler_enabled = RuntimeProfiler::IsEnabled();
655
658
  // When CPU profiling is enabled both JavaScript and C++ code is
656
659
  // profiled. We must not suspend.
657
- if (!cpu_profiling_enabled) {
658
- if (rate_limiter_.SuspendIfNecessary()) continue;
659
- }
660
- if (cpu_profiling_enabled) {
661
- if (!SamplerRegistry::IterateActiveSamplers(&DoCpuProfile, this)) {
662
- return;
663
- }
664
- }
665
- if (runtime_profiler_enabled) {
666
- if (!SamplerRegistry::IterateActiveSamplers(&DoRuntimeProfile, NULL)) {
667
- return;
668
- }
660
+ if (state == SamplerRegistry::HAS_CPU_PROFILING_SAMPLERS) {
661
+ SamplerRegistry::IterateActiveSamplers(&DoCpuProfile, this);
662
+ } else {
663
+ if (RuntimeProfiler::WaitForSomeIsolateToEnterJS()) continue;
669
664
  }
670
665
  OS::Sleep(interval_);
671
666
  }
@@ -679,11 +674,6 @@ class SamplerThread : public Thread {
679
674
  sampler_thread->SampleContext(sampler);
680
675
  }
681
676
 
682
- static void DoRuntimeProfile(Sampler* sampler, void* ignored) {
683
- if (!sampler->isolate()->IsInitialized()) return;
684
- sampler->isolate()->runtime_profiler()->NotifyTick();
685
- }
686
-
687
677
  void SampleContext(Sampler* sampler) {
688
678
  HANDLE profiled_thread = sampler->platform_data()->profiled_thread();
689
679
  if (profiled_thread == NULL) return;
@@ -718,7 +708,6 @@ class SamplerThread : public Thread {
718
708
  }
719
709
 
720
710
  const int interval_;
721
- RuntimeProfilerRateLimiter rate_limiter_;
722
711
 
723
712
  // Protects the process wide state below.
724
713
  static Mutex* mutex_;
@@ -198,6 +198,31 @@ void OS::DebugBreak() {
198
198
  }
199
199
 
200
200
 
201
+ void OS::DumpBacktrace() {
202
+ void* trace[100];
203
+ int size = backtrace(trace, ARRAY_SIZE(trace));
204
+ char** symbols = backtrace_symbols(trace, size);
205
+ fprintf(stderr, "\n==== C stack trace ===============================\n\n");
206
+ if (size == 0) {
207
+ fprintf(stderr, "(empty)\n");
208
+ } else if (symbols == NULL) {
209
+ fprintf(stderr, "(no symbols)\n");
210
+ } else {
211
+ for (int i = 1; i < size; ++i) {
212
+ fprintf(stderr, "%2d: ", i);
213
+ char mangled[201];
214
+ if (sscanf(symbols[i], "%*[^(]%*[(]%200[^)+]", mangled) == 1) { // NOLINT
215
+ fprintf(stderr, "%s\n", mangled);
216
+ } else {
217
+ fprintf(stderr, "??\n");
218
+ }
219
+ }
220
+ }
221
+ fflush(stderr);
222
+ free(symbols);
223
+ }
224
+
225
+
201
226
  class PosixMemoryMappedFile : public OS::MemoryMappedFile {
202
227
  public:
203
228
  PosixMemoryMappedFile(FILE* file, void* memory, int size)
@@ -456,6 +481,12 @@ bool VirtualMemory::ReleaseRegion(void* base, size_t size) {
456
481
  }
457
482
 
458
483
 
484
+ bool VirtualMemory::HasLazyCommits() {
485
+ // TODO(alph): implement for the platform.
486
+ return false;
487
+ }
488
+
489
+
459
490
  class Thread::PlatformData : public Malloced {
460
491
  public:
461
492
  pthread_t thread_; // Thread handle for pthread.
@@ -706,11 +737,6 @@ static void ProfilerSignalHandler(int signal, siginfo_t* info, void* context) {
706
737
 
707
738
  class SignalSender : public Thread {
708
739
  public:
709
- enum SleepInterval {
710
- HALF_INTERVAL,
711
- FULL_INTERVAL
712
- };
713
-
714
740
  static const int kSignalSenderStackSize = 64 * KB;
715
741
 
716
742
  explicit SignalSender(int interval)
@@ -761,38 +787,14 @@ class SignalSender : public Thread {
761
787
  SamplerRegistry::State state;
762
788
  while ((state = SamplerRegistry::GetState()) !=
763
789
  SamplerRegistry::HAS_NO_SAMPLERS) {
764
- bool cpu_profiling_enabled =
765
- (state == SamplerRegistry::HAS_CPU_PROFILING_SAMPLERS);
766
- bool runtime_profiler_enabled = RuntimeProfiler::IsEnabled();
767
790
  // When CPU profiling is enabled both JavaScript and C++ code is
768
791
  // profiled. We must not suspend.
769
- if (!cpu_profiling_enabled) {
770
- if (rate_limiter_.SuspendIfNecessary()) continue;
771
- }
772
- if (cpu_profiling_enabled && runtime_profiler_enabled) {
773
- if (!SamplerRegistry::IterateActiveSamplers(&DoCpuProfile, this)) {
774
- return;
775
- }
776
- Sleep(HALF_INTERVAL);
777
- if (!SamplerRegistry::IterateActiveSamplers(&DoRuntimeProfile, NULL)) {
778
- return;
779
- }
780
- Sleep(HALF_INTERVAL);
792
+ if (state == SamplerRegistry::HAS_CPU_PROFILING_SAMPLERS) {
793
+ SamplerRegistry::IterateActiveSamplers(&DoCpuProfile, this);
781
794
  } else {
782
- if (cpu_profiling_enabled) {
783
- if (!SamplerRegistry::IterateActiveSamplers(&DoCpuProfile,
784
- this)) {
785
- return;
786
- }
787
- }
788
- if (runtime_profiler_enabled) {
789
- if (!SamplerRegistry::IterateActiveSamplers(&DoRuntimeProfile,
790
- NULL)) {
791
- return;
792
- }
793
- }
794
- Sleep(FULL_INTERVAL);
795
+ if (RuntimeProfiler::WaitForSomeIsolateToEnterJS()) continue;
795
796
  }
797
+ Sleep(); // TODO(svenpanne) Figure out if OS:Sleep(interval_) is enough.
796
798
  }
797
799
  }
798
800
 
@@ -802,21 +804,15 @@ class SignalSender : public Thread {
802
804
  sender->SendProfilingSignal(sampler->platform_data()->vm_tid());
803
805
  }
804
806
 
805
- static void DoRuntimeProfile(Sampler* sampler, void* ignored) {
806
- if (!sampler->isolate()->IsInitialized()) return;
807
- sampler->isolate()->runtime_profiler()->NotifyTick();
808
- }
809
-
810
807
  void SendProfilingSignal(pthread_t tid) {
811
808
  if (!signal_handler_installed_) return;
812
809
  pthread_kill(tid, SIGPROF);
813
810
  }
814
811
 
815
- void Sleep(SleepInterval full_or_half) {
812
+ void Sleep() {
816
813
  // Convert ms to us and subtract 100 us to compensate delays
817
814
  // occuring during signal delivery.
818
815
  useconds_t interval = interval_ * 1000 - 100;
819
- if (full_or_half == HALF_INTERVAL) interval /= 2;
820
816
  int result = usleep(interval);
821
817
  #ifdef DEBUG
822
818
  if (result != 0 && errno != EINTR) {
@@ -831,7 +827,6 @@ class SignalSender : public Thread {
831
827
  }
832
828
 
833
829
  const int interval_;
834
- RuntimeProfilerRateLimiter rate_limiter_;
835
830
 
836
831
  // Protects the process wide state below.
837
832
  static Mutex* mutex_;
@@ -38,6 +38,11 @@
38
38
  #include <sys/types.h>
39
39
  #include <stdlib.h>
40
40
 
41
+ #if defined(__GLIBC__)
42
+ #include <execinfo.h>
43
+ #include <cxxabi.h>
44
+ #endif
45
+
41
46
  // Ubuntu Dapper requires memory pages to be marked as
42
47
  // executable. Otherwise, OS raises an exception when executing code
43
48
  // in that page.
@@ -53,6 +58,13 @@
53
58
  #include <errno.h>
54
59
  #include <stdarg.h>
55
60
 
61
+ // GLibc on ARM defines mcontext_t has a typedef for 'struct sigcontext'.
62
+ // Old versions of the C library <signal.h> didn't define the type.
63
+ #if defined(__ANDROID__) && !defined(__BIONIC_HAVE_UCONTEXT_T) && \
64
+ defined(__arm__) && !defined(__BIONIC_HAVE_STRUCT_SIGCONTEXT)
65
+ #include <asm/sigcontext.h>
66
+ #endif
67
+
56
68
  #undef MAP_TYPE
57
69
 
58
70
  #include "v8.h"
@@ -132,16 +144,29 @@ bool OS::ArmCpuHasFeature(CpuFeature feature) {
132
144
  // facility is universally available on the ARM architectures,
133
145
  // so it's up to individual OSes to provide such.
134
146
  switch (feature) {
147
+ case VFP2:
148
+ search_string = "vfp";
149
+ break;
135
150
  case VFP3:
136
151
  search_string = "vfpv3";
137
152
  break;
138
153
  case ARMv7:
139
154
  search_string = "ARMv7";
140
155
  break;
156
+ case SUDIV:
157
+ search_string = "idiva";
158
+ break;
159
+ case VFP32DREGS:
160
+ // This case is handled specially below.
161
+ break;
141
162
  default:
142
163
  UNREACHABLE();
143
164
  }
144
165
 
166
+ if (feature == VFP32DREGS) {
167
+ return ArmCpuHasFeature(VFP3) && !CPUInfoContainsString("d16");
168
+ }
169
+
145
170
  if (CPUInfoContainsString(search_string)) {
146
171
  return true;
147
172
  }
@@ -161,48 +186,61 @@ bool OS::ArmCpuHasFeature(CpuFeature feature) {
161
186
  }
162
187
 
163
188
 
164
- // Simple helper function to detect whether the C code is compiled with
165
- // option -mfloat-abi=hard. The register d0 is loaded with 1.0 and the register
166
- // pair r0, r1 is loaded with 0.0. If -mfloat-abi=hard is pased to GCC then
167
- // calling this will return 1.0 and otherwise 0.0.
168
- static void ArmUsingHardFloatHelper() {
169
- asm("mov r0, #0":::"r0");
170
- #if defined(__VFP_FP__) && !defined(__SOFTFP__)
171
- // Load 0x3ff00000 into r1 using instructions available in both ARM
172
- // and Thumb mode.
173
- asm("mov r1, #3":::"r1");
174
- asm("mov r2, #255":::"r2");
175
- asm("lsl r1, r1, #8":::"r1");
176
- asm("orr r1, r1, r2":::"r1");
177
- asm("lsl r1, r1, #20":::"r1");
178
- // For vmov d0, r0, r1 use ARM mode.
179
- #ifdef __thumb__
180
- asm volatile(
181
- "@ Enter ARM Mode \n\t"
182
- " adr r3, 1f \n\t"
183
- " bx r3 \n\t"
184
- " .ALIGN 4 \n\t"
185
- " .ARM \n"
186
- "1: vmov d0, r0, r1 \n\t"
187
- "@ Enter THUMB Mode\n\t"
188
- " adr r3, 2f+1 \n\t"
189
- " bx r3 \n\t"
190
- " .THUMB \n"
191
- "2: \n\t":::"r3");
192
- #else
193
- asm("vmov d0, r0, r1");
194
- #endif // __thumb__
195
- #endif // defined(__VFP_FP__) && !defined(__SOFTFP__)
196
- asm("mov r1, #0":::"r1");
189
+ CpuImplementer OS::GetCpuImplementer() {
190
+ static bool use_cached_value = false;
191
+ static CpuImplementer cached_value = UNKNOWN_IMPLEMENTER;
192
+ if (use_cached_value) {
193
+ return cached_value;
194
+ }
195
+ if (CPUInfoContainsString("CPU implementer\t: 0x41")) {
196
+ cached_value = ARM_IMPLEMENTER;
197
+ } else if (CPUInfoContainsString("CPU implementer\t: 0x51")) {
198
+ cached_value = QUALCOMM_IMPLEMENTER;
199
+ } else {
200
+ cached_value = UNKNOWN_IMPLEMENTER;
201
+ }
202
+ use_cached_value = true;
203
+ return cached_value;
197
204
  }
198
205
 
199
206
 
200
207
  bool OS::ArmUsingHardFloat() {
201
- // Cast helper function from returning void to returning double.
202
- typedef double (*F)();
203
- F f = FUNCTION_CAST<F>(FUNCTION_ADDR(ArmUsingHardFloatHelper));
204
- return f() == 1.0;
208
+ // GCC versions 4.6 and above define __ARM_PCS or __ARM_PCS_VFP to specify
209
+ // the Floating Point ABI used (PCS stands for Procedure Call Standard).
210
+ // We use these as well as a couple of other defines to statically determine
211
+ // what FP ABI used.
212
+ // GCC versions 4.4 and below don't support hard-fp.
213
+ // GCC versions 4.5 may support hard-fp without defining __ARM_PCS or
214
+ // __ARM_PCS_VFP.
215
+
216
+ #define GCC_VERSION (__GNUC__ * 10000 \
217
+ + __GNUC_MINOR__ * 100 \
218
+ + __GNUC_PATCHLEVEL__)
219
+ #if GCC_VERSION >= 40600
220
+ #if defined(__ARM_PCS_VFP)
221
+ return true;
222
+ #else
223
+ return false;
224
+ #endif
225
+
226
+ #elif GCC_VERSION < 40500
227
+ return false;
228
+
229
+ #else
230
+ #if defined(__ARM_PCS_VFP)
231
+ return true;
232
+ #elif defined(__ARM_PCS) || defined(__SOFTFP) || !defined(__VFP_FP__)
233
+ return false;
234
+ #else
235
+ #error "Your version of GCC does not report the FP ABI compiled for." \
236
+ "Please report it on this issue" \
237
+ "http://code.google.com/p/v8/issues/detail?id=2140"
238
+
239
+ #endif
240
+ #endif
241
+ #undef GCC_VERSION
205
242
  }
243
+
206
244
  #endif // def __arm__
207
245
 
208
246
 
@@ -389,6 +427,37 @@ void OS::DebugBreak() {
389
427
  }
390
428
 
391
429
 
430
+ void OS::DumpBacktrace() {
431
+ #if defined(__GLIBC__)
432
+ void* trace[100];
433
+ int size = backtrace(trace, ARRAY_SIZE(trace));
434
+ char** symbols = backtrace_symbols(trace, size);
435
+ fprintf(stderr, "\n==== C stack trace ===============================\n\n");
436
+ if (size == 0) {
437
+ fprintf(stderr, "(empty)\n");
438
+ } else if (symbols == NULL) {
439
+ fprintf(stderr, "(no symbols)\n");
440
+ } else {
441
+ for (int i = 1; i < size; ++i) {
442
+ fprintf(stderr, "%2d: ", i);
443
+ char mangled[201];
444
+ if (sscanf(symbols[i], "%*[^(]%*[(]%200[^)+]", mangled) == 1) { // NOLINT
445
+ int status;
446
+ size_t length;
447
+ char* demangled = abi::__cxa_demangle(mangled, NULL, &length, &status);
448
+ fprintf(stderr, "%s\n", demangled ? demangled : mangled);
449
+ free(demangled);
450
+ } else {
451
+ fprintf(stderr, "??\n");
452
+ }
453
+ }
454
+ }
455
+ fflush(stderr);
456
+ free(symbols);
457
+ #endif
458
+ }
459
+
460
+
392
461
  class PosixMemoryMappedFile : public OS::MemoryMappedFile {
393
462
  public:
394
463
  PosixMemoryMappedFile(FILE* file, void* memory, int size)
@@ -473,19 +542,20 @@ void OS::LogSharedLibraryAddresses() {
473
542
  // the beginning of the filename or the end of the line.
474
543
  do {
475
544
  c = getc(fp);
476
- } while ((c != EOF) && (c != '\n') && (c != '/'));
545
+ } while ((c != EOF) && (c != '\n') && (c != '/') && (c != '['));
477
546
  if (c == EOF) break; // EOF: Was unexpected, just exit.
478
547
 
479
548
  // Process the filename if found.
480
- if (c == '/') {
481
- ungetc(c, fp); // Push the '/' back into the stream to be read below.
549
+ if ((c == '/') || (c == '[')) {
550
+ // Push the '/' or '[' back into the stream to be read below.
551
+ ungetc(c, fp);
482
552
 
483
553
  // Read to the end of the line. Exit if the read fails.
484
554
  if (fgets(lib_name, kLibNameLen, fp) == NULL) break;
485
555
 
486
556
  // Drop the newline character read by fgets. We do not need to check
487
557
  // for a zero-length string because we know that we at least read the
488
- // '/' character.
558
+ // '/' or '[' character.
489
559
  lib_name[strlen(lib_name) - 1] = '\0';
490
560
  } else {
491
561
  // No library name found, just record the raw address range.
@@ -507,9 +577,6 @@ void OS::LogSharedLibraryAddresses() {
507
577
  }
508
578
 
509
579
 
510
- static const char kGCFakeMmap[] = "/tmp/__v8_gc__";
511
-
512
-
513
580
  void OS::SignalCodeMovingGC() {
514
581
  // Support for ll_prof.py.
515
582
  //
@@ -520,7 +587,7 @@ void OS::SignalCodeMovingGC() {
520
587
  // by the kernel and allows us to synchronize V8 code log and the
521
588
  // kernel log.
522
589
  int size = sysconf(_SC_PAGESIZE);
523
- FILE* f = fopen(kGCFakeMmap, "w+");
590
+ FILE* f = fopen(FLAG_gc_fake_mmap, "w+");
524
591
  void* addr = mmap(OS::GetRandomMmapAddr(),
525
592
  size,
526
593
  PROT_READ | PROT_EXEC,
@@ -699,6 +766,11 @@ bool VirtualMemory::ReleaseRegion(void* base, size_t size) {
699
766
  }
700
767
 
701
768
 
769
+ bool VirtualMemory::HasLazyCommits() {
770
+ return true;
771
+ }
772
+
773
+
702
774
  class Thread::PlatformData : public Malloced {
703
775
  public:
704
776
  PlatformData() : thread_(kNoThread) {}
@@ -909,32 +981,30 @@ Semaphore* OS::CreateSemaphore(int count) {
909
981
  }
910
982
 
911
983
 
912
- #if !defined(__GLIBC__) && (defined(__arm__) || defined(__thumb__))
913
- // Android runs a fairly new Linux kernel, so signal info is there,
914
- // but the C library doesn't have the structs defined.
984
+ #if defined(__ANDROID__) && !defined(__BIONIC_HAVE_UCONTEXT_T)
985
+
986
+ // Not all versions of Android's C library provide ucontext_t.
987
+ // Detect this and provide custom but compatible definitions. Note that these
988
+ // follow the GLibc naming convention to access register values from
989
+ // mcontext_t.
990
+ //
991
+ // See http://code.google.com/p/android/issues/detail?id=34784
992
+
993
+ #if defined(__arm__)
915
994
 
916
- struct sigcontext {
917
- uint32_t trap_no;
918
- uint32_t error_code;
919
- uint32_t oldmask;
920
- uint32_t gregs[16];
921
- uint32_t arm_cpsr;
922
- uint32_t fault_address;
923
- };
924
- typedef uint32_t __sigset_t;
925
995
  typedef struct sigcontext mcontext_t;
996
+
926
997
  typedef struct ucontext {
927
998
  uint32_t uc_flags;
928
999
  struct ucontext* uc_link;
929
1000
  stack_t uc_stack;
930
1001
  mcontext_t uc_mcontext;
931
- __sigset_t uc_sigmask;
1002
+ // Other fields are not used by V8, don't define them here.
932
1003
  } ucontext_t;
933
- enum ArmRegisters {R15 = 15, R13 = 13, R11 = 11};
934
1004
 
935
- #elif !defined(__GLIBC__) && defined(__mips__)
1005
+ #elif defined(__mips__)
936
1006
  // MIPS version of sigcontext, for Android bionic.
937
- struct sigcontext {
1007
+ typedef struct {
938
1008
  uint32_t regmask;
939
1009
  uint32_t status;
940
1010
  uint64_t pc;
@@ -953,44 +1023,44 @@ struct sigcontext {
953
1023
  uint32_t lo2;
954
1024
  uint32_t hi3;
955
1025
  uint32_t lo3;
956
- };
957
- typedef uint32_t __sigset_t;
958
- typedef struct sigcontext mcontext_t;
1026
+ } mcontext_t;
1027
+
959
1028
  typedef struct ucontext {
960
1029
  uint32_t uc_flags;
961
1030
  struct ucontext* uc_link;
962
1031
  stack_t uc_stack;
963
1032
  mcontext_t uc_mcontext;
964
- __sigset_t uc_sigmask;
1033
+ // Other fields are not used by V8, don't define them here.
965
1034
  } ucontext_t;
966
1035
 
967
- #elif !defined(__GLIBC__) && defined(__i386__)
1036
+ #elif defined(__i386__)
968
1037
  // x86 version for Android.
969
- struct sigcontext {
1038
+ typedef struct {
970
1039
  uint32_t gregs[19];
971
1040
  void* fpregs;
972
1041
  uint32_t oldmask;
973
1042
  uint32_t cr2;
974
- };
1043
+ } mcontext_t;
975
1044
 
976
- typedef uint32_t __sigset_t;
977
- typedef struct sigcontext mcontext_t;
1045
+ typedef uint32_t kernel_sigset_t[2]; // x86 kernel uses 64-bit signal masks
978
1046
  typedef struct ucontext {
979
1047
  uint32_t uc_flags;
980
1048
  struct ucontext* uc_link;
981
1049
  stack_t uc_stack;
982
1050
  mcontext_t uc_mcontext;
983
- __sigset_t uc_sigmask;
1051
+ // Other fields are not used by V8, don't define them here.
984
1052
  } ucontext_t;
985
1053
  enum { REG_EBP = 6, REG_ESP = 7, REG_EIP = 14 };
986
1054
  #endif
987
1055
 
1056
+ #endif // __ANDROID__ && !defined(__BIONIC_HAVE_UCONTEXT_T)
988
1057
 
989
1058
  static int GetThreadID() {
990
- // Glibc doesn't provide a wrapper for gettid(2).
991
- #if defined(ANDROID)
992
- return syscall(__NR_gettid);
1059
+ #if defined(__ANDROID__)
1060
+ // Android's C library provides gettid(2).
1061
+ return gettid();
993
1062
  #else
1063
+ // Glibc doesn't provide a wrapper for gettid(2).
994
1064
  return syscall(SYS_gettid);
995
1065
  #endif
996
1066
  }
@@ -1029,8 +1099,10 @@ static void ProfilerSignalHandler(int signal, siginfo_t* info, void* context) {
1029
1099
  sample->sp = reinterpret_cast<Address>(mcontext.gregs[REG_RSP]);
1030
1100
  sample->fp = reinterpret_cast<Address>(mcontext.gregs[REG_RBP]);
1031
1101
  #elif V8_HOST_ARCH_ARM
1032
- // An undefined macro evaluates to 0, so this applies to Android's Bionic also.
1033
- #if (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ <= 3))
1102
+ #if defined(__GLIBC__) && !defined(__UCLIBC__) && \
1103
+ (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ <= 3))
1104
+ // Old GLibc ARM versions used a gregs[] array to access the register
1105
+ // values from mcontext_t.
1034
1106
  sample->pc = reinterpret_cast<Address>(mcontext.gregs[R15]);
1035
1107
  sample->sp = reinterpret_cast<Address>(mcontext.gregs[R13]);
1036
1108
  sample->fp = reinterpret_cast<Address>(mcontext.gregs[R11]);
@@ -1038,7 +1110,8 @@ static void ProfilerSignalHandler(int signal, siginfo_t* info, void* context) {
1038
1110
  sample->pc = reinterpret_cast<Address>(mcontext.arm_pc);
1039
1111
  sample->sp = reinterpret_cast<Address>(mcontext.arm_sp);
1040
1112
  sample->fp = reinterpret_cast<Address>(mcontext.arm_fp);
1041
- #endif // (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ <= 3))
1113
+ #endif // defined(__GLIBC__) && !defined(__UCLIBC__) &&
1114
+ // (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ <= 3))
1042
1115
  #elif V8_HOST_ARCH_MIPS
1043
1116
  sample->pc = reinterpret_cast<Address>(mcontext.pc);
1044
1117
  sample->sp = reinterpret_cast<Address>(mcontext.gregs[29]);
@@ -1062,11 +1135,6 @@ class Sampler::PlatformData : public Malloced {
1062
1135
 
1063
1136
  class SignalSender : public Thread {
1064
1137
  public:
1065
- enum SleepInterval {
1066
- HALF_INTERVAL,
1067
- FULL_INTERVAL
1068
- };
1069
-
1070
1138
  static const int kSignalSenderStackSize = 64 * KB;
1071
1139
 
1072
1140
  explicit SignalSender(int interval)
@@ -1122,43 +1190,16 @@ class SignalSender : public Thread {
1122
1190
  SamplerRegistry::State state;
1123
1191
  while ((state = SamplerRegistry::GetState()) !=
1124
1192
  SamplerRegistry::HAS_NO_SAMPLERS) {
1125
- bool cpu_profiling_enabled =
1126
- (state == SamplerRegistry::HAS_CPU_PROFILING_SAMPLERS);
1127
- bool runtime_profiler_enabled = RuntimeProfiler::IsEnabled();
1128
- if (cpu_profiling_enabled && !signal_handler_installed_) {
1129
- InstallSignalHandler();
1130
- } else if (!cpu_profiling_enabled && signal_handler_installed_) {
1131
- RestoreSignalHandler();
1132
- }
1133
1193
  // When CPU profiling is enabled both JavaScript and C++ code is
1134
1194
  // profiled. We must not suspend.
1135
- if (!cpu_profiling_enabled) {
1136
- if (rate_limiter_.SuspendIfNecessary()) continue;
1137
- }
1138
- if (cpu_profiling_enabled && runtime_profiler_enabled) {
1139
- if (!SamplerRegistry::IterateActiveSamplers(&DoCpuProfile, this)) {
1140
- return;
1141
- }
1142
- Sleep(HALF_INTERVAL);
1143
- if (!SamplerRegistry::IterateActiveSamplers(&DoRuntimeProfile, NULL)) {
1144
- return;
1145
- }
1146
- Sleep(HALF_INTERVAL);
1195
+ if (state == SamplerRegistry::HAS_CPU_PROFILING_SAMPLERS) {
1196
+ if (!signal_handler_installed_) InstallSignalHandler();
1197
+ SamplerRegistry::IterateActiveSamplers(&DoCpuProfile, this);
1147
1198
  } else {
1148
- if (cpu_profiling_enabled) {
1149
- if (!SamplerRegistry::IterateActiveSamplers(&DoCpuProfile,
1150
- this)) {
1151
- return;
1152
- }
1153
- }
1154
- if (runtime_profiler_enabled) {
1155
- if (!SamplerRegistry::IterateActiveSamplers(&DoRuntimeProfile,
1156
- NULL)) {
1157
- return;
1158
- }
1159
- }
1160
- Sleep(FULL_INTERVAL);
1199
+ if (signal_handler_installed_) RestoreSignalHandler();
1200
+ if (RuntimeProfiler::WaitForSomeIsolateToEnterJS()) continue;
1161
1201
  }
1202
+ Sleep(); // TODO(svenpanne) Figure out if OS:Sleep(interval_) is enough.
1162
1203
  }
1163
1204
  }
1164
1205
 
@@ -1168,26 +1209,22 @@ class SignalSender : public Thread {
1168
1209
  sender->SendProfilingSignal(sampler->platform_data()->vm_tid());
1169
1210
  }
1170
1211
 
1171
- static void DoRuntimeProfile(Sampler* sampler, void* ignored) {
1172
- if (!sampler->isolate()->IsInitialized()) return;
1173
- sampler->isolate()->runtime_profiler()->NotifyTick();
1174
- }
1175
-
1176
1212
  void SendProfilingSignal(int tid) {
1177
1213
  if (!signal_handler_installed_) return;
1178
1214
  // Glibc doesn't provide a wrapper for tgkill(2).
1179
1215
  #if defined(ANDROID)
1180
1216
  syscall(__NR_tgkill, vm_tgid_, tid, SIGPROF);
1181
1217
  #else
1182
- syscall(SYS_tgkill, vm_tgid_, tid, SIGPROF);
1218
+ int result = syscall(SYS_tgkill, vm_tgid_, tid, SIGPROF);
1219
+ USE(result);
1220
+ ASSERT(result == 0);
1183
1221
  #endif
1184
1222
  }
1185
1223
 
1186
- void Sleep(SleepInterval full_or_half) {
1224
+ void Sleep() {
1187
1225
  // Convert ms to us and subtract 100 us to compensate delays
1188
1226
  // occuring during signal delivery.
1189
1227
  useconds_t interval = interval_ * 1000 - 100;
1190
- if (full_or_half == HALF_INTERVAL) interval /= 2;
1191
1228
  #if defined(ANDROID)
1192
1229
  usleep(interval);
1193
1230
  #else
@@ -1207,7 +1244,6 @@ class SignalSender : public Thread {
1207
1244
 
1208
1245
  const int vm_tgid_;
1209
1246
  const int interval_;
1210
- RuntimeProfilerRateLimiter rate_limiter_;
1211
1247
 
1212
1248
  // Protects the process wide state below.
1213
1249
  static Mutex* mutex_;