From d57325bc28075cc79a3c942252548184a2fb3926 Mon Sep 17 00:00:00 2001 From: Yang Guo Date: Wed, 11 Jul 2018 08:39:44 +0200 Subject: [PATCH 01/28] Update Node.js to 8174d0c8ca From 456581b2c4715642b5a7f9400ed77ade90f398c4 Mon Sep 17 00:00:00 2001 From: Yang Guo Date: Mon, 9 Jul 2018 07:39:50 +0200 Subject: [PATCH 02/28] Restore README.md --- README.md | 640 +----------------------------------------------------- 1 file changed, 9 insertions(+), 631 deletions(-) diff --git a/README.md b/README.md index e81f6629ed342a..8a735770f9b310 100644 --- a/README.md +++ b/README.md @@ -1,638 +1,16 @@ -

- - Node.js - -

- -Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine. For -more information on using Node.js, see the -[Node.js Website][]. - -The Node.js project is supported by the -[Node.js Foundation](https://nodejs.org/en/foundation/). Contributions, -policies, and releases are managed under an -[open governance model](./GOVERNANCE.md). - -**This project is bound by a [Code of Conduct][].** - - -# Table of Contents - -* [Support](#support) -* [Release Types](#release-types) - * [Download](#download) - * [Current and LTS Releases](#current-and-lts-releases) - * [Nightly Releases](#nightly-releases) - * [API Documentation](#api-documentation) - * [Verifying Binaries](#verifying-binaries) -* [Building Node.js](#building-nodejs) -* [Security](#security) -* [Current Project Team Members](#current-project-team-members) - * [TSC (Technical Steering Committee)](#tsc-technical-steering-committee) - * [Collaborators](#collaborators) - * [Release Team](#release-team) -* [Contributing to Node.js](#contributing-to-nodejs) - -## Support - -Node.js contributors have limited availability to address general support -questions. Please make sure you are using a [currently-supported version of -Node.js](https://github.com/nodejs/Release#release-schedule). - -When looking for support, please first search for your question in these venues: - -* [Node.js Website][] -* [Node.js Help][] -* [Open or closed issues in the Node.js GitHub organization](https://github.com/issues?utf8=%E2%9C%93&q=sort%3Aupdated-desc+org%3Anodejs+is%3Aissue) - -If you didn't find an answer in one of the official resources above, you can -search these unofficial resources: - -* [Questions tagged 'node.js' on StackOverflow][] -* [#node.js channel on chat.freenode.net][]. See for more - information. -* [Node.js Discord Community](https://discordapp.com/invite/v7rrPdE) -* [Node.js Slack Community](https://node-js.slack.com/): Visit - [nodeslackers.com](http://www.nodeslackers.com/) to register. - -GitHub issues are meant for tracking enhancements and bugs, not general support. - -Remember, libre != gratis; the open source license grants you the freedom to use -and modify, but not commitments of other people's time. Please be respectful, -and set your expectations accordingly. - -## Release Types - -The Node.js project maintains multiple types of releases: - -* **Current**: Released from active development branches of this repository, - versioned by [SemVer](https://semver.org) and signed by a member of the - [Release Team](#release-team). - Code for Current releases is organized in this repository by major version - number. For example: [v4.x](https://github.com/nodejs/node/tree/v4.x). - The major version number of Current releases will increment every 6 months - allowing for breaking changes to be introduced. This happens in April and - October every year. Current release lines beginning in October each year have - a maximum support life of 8 months. Current release lines beginning in April - each year will convert to LTS (see below) after 6 months and receive further - support for 30 months. -* **LTS**: Releases that receive Long-term Support, with a focus on stability - and security. Every second Current release line (major version) will become an - LTS line and receive 18 months of _Active LTS_ support and a further 12 - months of _Maintenance_. LTS release lines are given alphabetically - ordered codenames, beginning with v4 Argon. LTS releases are less frequent - and will attempt to maintain consistent major and minor version numbers, - only incrementing patch version numbers. There are no breaking changes or - feature additions, except in some special circumstances. -* **Nightly**: Versions of code in this repository on the current Current - branch, automatically built every 24-hours where changes exist. Use with - caution. - -More information can be found in the [LTS README](https://github.com/nodejs/LTS/). - -### Download - -Binaries, installers, and source tarballs are available at -. - -#### Current and LTS Releases -**Current** and **LTS** releases are available at -, listed under their version strings. -The [latest](https://nodejs.org/download/release/latest/) directory is an -alias for the latest Current release. The latest LTS release from an LTS -line is available in the form: latest-_codename_. For example: -. - -#### Nightly Releases -**Nightly** builds are available at -, listed under their version -string which includes their date (in UTC time) and the commit SHA at -the HEAD of the release. - -#### API Documentation -**API documentation** is available in each release and nightly -directory under _docs_. points to the API -documentation of the latest stable version. - -### Verifying Binaries - -Current, LTS, and Nightly download directories all contain a SHASUMS256.txt -file that lists the SHA checksums for each file available for -download. - -The SHASUMS256.txt can be downloaded using `curl`. +This is the official [V8](https://github.com/v8/v8/wiki) fork of [Node.js](https://github.com/nodejs/node) with a recent V8 version. +To build from source, run ```console -$ curl -O https://nodejs.org/dist/vx.y.z/SHASUMS256.txt +git clone https://github.com/v8/node v8-node +cd v8-node +./configure --build-v8-with-gn +make -j4 node ``` -To check that a downloaded file matches the checksum, run -it through `sha256sum` with a command such as: +Or download the latest build for Ubuntu from this [build bot](https://build.chromium.org/p/client.v8.fyi/builders/V8%20-%20node.js%20integration). Select a build, then use *Archive link download*. +To check the V8 version in Node, have a look at [`v8-version.h`](https://github.com/v8/node/blob/vee-eight-lkgr/deps/v8/include/v8-version.h) or run ```console -$ grep node-vx.y.z.tar.gz SHASUMS256.txt | sha256sum -c - -``` - -Current and LTS releases (but not Nightlies) also have the GPG detached -signature of SHASUMS256.txt available as SHASUMS256.txt.sig. You can use `gpg` -to verify that SHASUMS256.txt has not been tampered with. - -To verify SHASUMS256.txt has not been altered, you will first need to import -all of the GPG keys of individuals authorized to create releases. They are -listed at the bottom of this README under [Release Team](#release-team). -Use a command such as this to import the keys: - -```console -$ gpg --keyserver pool.sks-keyservers.net --recv-keys DD8F2338BAE7501E3DD5AC78C273792F7D83545D -``` - -See the bottom of this README for a full script to import active release keys. - -Next, download the SHASUMS256.txt.sig for the release: - -```console -$ curl -O https://nodejs.org/dist/vx.y.z/SHASUMS256.txt.sig -``` - -After downloading the appropriate SHASUMS256.txt and SHASUMS256.txt.sig files, -you can then use `gpg --verify SHASUMS256.txt.sig SHASUMS256.txt` to verify -that the file has been signed by an authorized member of the Node.js team. - -Once verified, use the SHASUMS256.txt file to get the checksum for -the binary verification command above. - -## Building Node.js - -See [BUILDING.md](BUILDING.md) for instructions on how to build -Node.js from source. The document also contains a list of -officially supported platforms. - -## Security - -Security flaws in Node.js should be reported by emailing security@nodejs.org. -Please do not disclose security bugs publicly until they have been handled by -the security team. - -Your email will be acknowledged within 24 hours, and you will receive a more -detailed response to your email within 48 hours indicating the next steps in -handling your report. - -There are no hard and fast rules to determine if a bug is worth reporting as -a security issue. The general rule is an issue worth reporting should allow an -attacker to compromise the confidentiality, integrity, or availability of the -Node.js application or its system for which the attacker does not already have -the capability. - -To illustrate the point, here are some examples of past issues and what the -Security Response Team thinks of them. When in doubt, however, please do send -us a report nonetheless. - - -### Public disclosure preferred - -- [#14519](https://github.com/nodejs/node/issues/14519): _Internal domain - function can be used to cause segfaults_. Causing program termination using - either the public JavaScript APIs or the private bindings layer APIs requires - the ability to execute arbitrary JavaScript code, which is already the highest - level of privilege possible. - -- [#12141](https://github.com/nodejs/node/pull/12141): _buffer: zero fill - Buffer(num) by default_. The buffer constructor behavior was documented, - but found to be prone to [mis-use](https://snyk.io/blog/exploiting-buffer/). - It has since been changed, but despite much debate, was not considered misuse - prone enough to justify fixing in older release lines and breaking our - API stability contract. - -### Private disclosure preferred - -- [CVE-2016-7099](https://nodejs.org/en/blog/vulnerability/september-2016-security-releases/): - _Fix invalid wildcard certificate validation check_. This is a high severity - defect that would allow a malicious TLS server to serve an invalid wildcard - certificate for its hostname and be improperly validated by a Node.js client. - -- [#5507](https://github.com/nodejs/node/pull/5507): _Fix a defect that makes - the CacheBleed Attack possible_. Many, though not all, OpenSSL vulnerabilities - in the TLS/SSL protocols also affect Node.js. - -- [CVE-2016-2216](https://nodejs.org/en/blog/vulnerability/february-2016-security-releases/): - _Fix defects in HTTP header parsing for requests and responses that can allow - response splitting_. While the impact of this vulnerability is application and - network dependent, it is remotely exploitable in the HTTP protocol. - -When in doubt, please do send us a report. - - -## Current Project Team Members - -The Node.js project team comprises a group of core collaborators and a sub-group -that forms the _Technical Steering Committee_ (TSC) which governs the project. -For more information about the governance of the Node.js project, see -[GOVERNANCE.md](./GOVERNANCE.md). - -### TSC (Technical Steering Committee) - -* [addaleax](https://github.com/addaleax) - -**Anna Henningsen** <anna@addaleax.net> (she/her) -* [ChALkeR](https://github.com/ChALkeR) - -**Сковорода Никита Андреевич** <chalkerx@gmail.com> (he/him) -* [cjihrig](https://github.com/cjihrig) - -**Colin Ihrig** <cjihrig@gmail.com> -* [danbev](https://github.com/danbev) - -**Daniel Bevenius** <daniel.bevenius@gmail.com> -* [fhinkel](https://github.com/fhinkel) - -**Franziska Hinkelmann** <franziska.hinkelmann@gmail.com> (she/her) -* [Fishrock123](https://github.com/Fishrock123) - -**Jeremiah Senkpiel** <fishrock123@rocketmail.com> -* [gibfahn](https://github.com/gibfahn) - -**Gibson Fahnestock** <gibfahn@gmail.com> (he/him) -* [jasnell](https://github.com/jasnell) - -**James M Snell** <jasnell@gmail.com> (he/him) -* [joyeecheung](https://github.com/joyeecheung) - -**Joyee Cheung** <joyeec9h3@gmail.com> (she/her) -* [mcollina](https://github.com/mcollina) - -**Matteo Collina** <matteo.collina@gmail.com> (he/him) -* [mhdawson](https://github.com/mhdawson) - -**Michael Dawson** <michael_dawson@ca.ibm.com> (he/him) -* [MylesBorins](https://github.com/MylesBorins) - -**Myles Borins** <myles.borins@gmail.com> (he/him) -* [ofrobots](https://github.com/ofrobots) - -**Ali Ijaz Sheikh** <ofrobots@google.com> (he/him) -* [rvagg](https://github.com/rvagg) - -**Rod Vagg** <rod@vagg.org> -* [targos](https://github.com/targos) - -**Michaël Zasso** <targos@protonmail.com> (he/him) -* [thefourtheye](https://github.com/thefourtheye) - -**Sakthipriyan Vairamani** <thechargingvolcano@gmail.com> (he/him) -* [TimothyGu](https://github.com/TimothyGu) - -**Tiancheng "Timothy" Gu** <timothygu99@gmail.com> (he/him) -* [Trott](https://github.com/Trott) - -**Rich Trott** <rtrott@gmail.com> (he/him) - -### TSC Emeriti - -* [bnoordhuis](https://github.com/bnoordhuis) - -**Ben Noordhuis** <info@bnoordhuis.nl> -* [chrisdickinson](https://github.com/chrisdickinson) - -**Chris Dickinson** <christopher.s.dickinson@gmail.com> -* [evanlucas](https://github.com/evanlucas) - -**Evan Lucas** <evanlucas@me.com> (he/him) -* [indutny](https://github.com/indutny) - -**Fedor Indutny** <fedor.indutny@gmail.com> -* [isaacs](https://github.com/isaacs) - -**Isaac Z. Schlueter** <i@izs.me> -* [joshgav](https://github.com/joshgav) - -**Josh Gavant** <josh.gavant@outlook.com> -* [mscdex](https://github.com/mscdex) - -**Brian White** <mscdex@mscdex.net> -* [nebrius](https://github.com/nebrius) - -**Bryan Hughes** <bryan@nebri.us> -* [orangemocha](https://github.com/orangemocha) - -**Alexis Campailla** <orangemocha@nodejs.org> -* [piscisaureus](https://github.com/piscisaureus) - -**Bert Belder** <bertbelder@gmail.com> -* [shigeki](https://github.com/shigeki) - -**Shigeki Ohtsu** <ohtsu@ohtsu.org> (he/him) -* [trevnorris](https://github.com/trevnorris) - -**Trevor Norris** <trev.norris@gmail.com> - -### Collaborators - -* [addaleax](https://github.com/addaleax) - -**Anna Henningsen** <anna@addaleax.net> (she/her) -* [ak239](https://github.com/ak239) - -**Aleksei Koziatinskii** <ak239spb@gmail.com> -* [andrasq](https://github.com/andrasq) - -**Andras** <andras@kinvey.com> -* [AndreasMadsen](https://github.com/AndreasMadsen) - -**Andreas Madsen** <amwebdk@gmail.com> (he/him) -* [AnnaMag](https://github.com/AnnaMag) - -**Anna M. Kedzierska** <anna.m.kedzierska@gmail.com> -* [apapirovski](https://github.com/apapirovski) - -**Anatoli Papirovski** <apapirovski@mac.com> (he/him) -* [aqrln](https://github.com/aqrln) - -**Alexey Orlenko** <eaglexrlnk@gmail.com> (he/him) -* [bcoe](https://github.com/bcoe) - -**Ben Coe** <bencoe@gmail.com> (he/him) -* [bengl](https://github.com/bengl) - -**Bryan English** <bryan@bryanenglish.com> (he/him) -* [benjamingr](https://github.com/benjamingr) - -**Benjamin Gruenbaum** <benjamingr@gmail.com> -* [BethGriggs](https://github.com/BethGriggs) - -**Beth Griggs** <Bethany.Griggs@uk.ibm.com> (she/her) -* [bmeck](https://github.com/bmeck) - -**Bradley Farias** <bradley.meck@gmail.com> -* [bmeurer](https://github.com/bmeurer) - -**Benedikt Meurer** <benedikt.meurer@gmail.com> -* [bnoordhuis](https://github.com/bnoordhuis) - -**Ben Noordhuis** <info@bnoordhuis.nl> -* [brendanashworth](https://github.com/brendanashworth) - -**Brendan Ashworth** <brendan.ashworth@me.com> -* [BridgeAR](https://github.com/BridgeAR) - -**Ruben Bridgewater** <ruben@bridgewater.de> -* [bzoz](https://github.com/bzoz) - -**Bartosz Sosnowski** <bartosz@janeasystems.com> -* [calvinmetcalf](https://github.com/calvinmetcalf) - -**Calvin Metcalf** <calvin.metcalf@gmail.com> -* [ChALkeR](https://github.com/ChALkeR) - -**Сковорода Никита Андреевич** <chalkerx@gmail.com> (he/him) -* [chrisdickinson](https://github.com/chrisdickinson) - -**Chris Dickinson** <christopher.s.dickinson@gmail.com> -* [cjihrig](https://github.com/cjihrig) - -**Colin Ihrig** <cjihrig@gmail.com> -* [claudiorodriguez](https://github.com/claudiorodriguez) - -**Claudio Rodriguez** <cjrodr@yahoo.com> -* [codebytere](https://github.com/codebytere) - -**Shelley Vohr** <codebytere@gmail.com> (she/her) -* [danbev](https://github.com/danbev) - -**Daniel Bevenius** <daniel.bevenius@gmail.com> -* [DavidCai1993](https://github.com/DavidCai1993) - -**David Cai** <davidcai1993@yahoo.com> (he/him) -* [davisjam](https://github.com/davisjam) - -**Jamie Davis** <davisjam@vt.edu> (he/him) -* [devsnek](https://github.com/devsnek) - -**Gus Caplan** <me@gus.host> (he/him) -* [edsadr](https://github.com/edsadr) - -**Adrian Estrada** <edsadr@gmail.com> (he/him) -* [eljefedelrodeodeljefe](https://github.com/eljefedelrodeodeljefe) - -**Robert Jefe Lindstaedt** <robert.lindstaedt@gmail.com> -* [estliberitas](https://github.com/estliberitas) - -**Alexander Makarenko** <estliberitas@gmail.com> -* [eugeneo](https://github.com/eugeneo) - -**Eugene Ostroukhov** <eostroukhov@google.com> -* [evanlucas](https://github.com/evanlucas) - -**Evan Lucas** <evanlucas@me.com> (he/him) -* [fhinkel](https://github.com/fhinkel) - -**Franziska Hinkelmann** <franziska.hinkelmann@gmail.com> (she/her) -* [firedfox](https://github.com/firedfox) - -**Daniel Wang** <wangyang0123@gmail.com> -* [Fishrock123](https://github.com/Fishrock123) - -**Jeremiah Senkpiel** <fishrock123@rocketmail.com> -* [gabrielschulhof](https://github.com/gabrielschulhof) - -**Gabriel Schulhof** <gabriel.schulhof@intel.com> -* [geek](https://github.com/geek) - -**Wyatt Preul** <wpreul@gmail.com> -* [gibfahn](https://github.com/gibfahn) - -**Gibson Fahnestock** <gibfahn@gmail.com> (he/him) -* [gireeshpunathil](https://github.com/gireeshpunathil) - -**Gireesh Punathil** <gpunathi@in.ibm.com> (he/him) -* [guybedford](https://github.com/guybedford) - -**Guy Bedford** <guybedford@gmail.com> (he/him) -* [hashseed](https://github.com/hashseed) - -**Yang Guo** <yangguo@chromium.org> (he/him) -* [hiroppy](https://github.com/hiroppy) - -**Yuta Hiroto** <hello@hiroppy.me> (he/him) -* [iarna](https://github.com/iarna) - -**Rebecca Turner** <me@re-becca.org> -* [imyller](https://github.com/imyller) - -**Ilkka Myller** <ilkka.myller@nodefield.com> -* [indutny](https://github.com/indutny) - -**Fedor Indutny** <fedor.indutny@gmail.com> -* [italoacasas](https://github.com/italoacasas) - -**Italo A. Casas** <me@italoacasas.com> (he/him) -* [JacksonTian](https://github.com/JacksonTian) - -**Jackson Tian** <shyvo1987@gmail.com> -* [jasnell](https://github.com/jasnell) - -**James M Snell** <jasnell@gmail.com> (he/him) -* [jasongin](https://github.com/jasongin) - -**Jason Ginchereau** <jasongin@microsoft.com> -* [jbergstroem](https://github.com/jbergstroem) - -**Johan Bergström** <bugs@bergstroem.nu> -* [jdalton](https://github.com/jdalton) - -**John-David Dalton** <john.david.dalton@gmail.com> -* [jhamhader](https://github.com/jhamhader) - -**Yuval Brik** <yuval@brik.org.il> -* [jkrems](https://github.com/jkrems) - -**Jan Krems** <jan.krems@gmail.com> (he/him) -* [joaocgreis](https://github.com/joaocgreis) - -**João Reis** <reis@janeasystems.com> -* [joshgav](https://github.com/joshgav) - -**Josh Gavant** <josh.gavant@outlook.com> -* [joyeecheung](https://github.com/joyeecheung) - -**Joyee Cheung** <joyeec9h3@gmail.com> (she/her) -* [julianduque](https://github.com/julianduque) - -**Julian Duque** <julianduquej@gmail.com> (he/him) -* [JungMinu](https://github.com/JungMinu) - -**Minwoo Jung** <minwoo@nodesource.com> (he/him) -* [kfarnung](https://github.com/kfarnung) - -**Kyle Farnung** <kfarnung@microsoft.com> (he/him) -* [kunalspathak](https://github.com/kunalspathak) - -**Kunal Pathak** <kunal.pathak@microsoft.com> -* [lance](https://github.com/lance) - -**Lance Ball** <lball@redhat.com> -* [Leko](https://github.com/Leko) - -**Shingo Inoue** <leko.noor@gmail.com> (he/him) -* [lpinca](https://github.com/lpinca) - -**Luigi Pinca** <luigipinca@gmail.com> (he/him) -* [lucamaraschi](https://github.com/lucamaraschi) - -**Luca Maraschi** <luca.maraschi@gmail.com> (he/him) -* [maclover7](https://github.com/maclover7) - -**Jon Moss** <me@jonathanmoss.me> (he/him) -* [mafintosh](https://github.com/mafintosh) -**Mathias Buus** <mathiasbuus@gmail.com> (he/him) -* [mcollina](https://github.com/mcollina) - -**Matteo Collina** <matteo.collina@gmail.com> (he/him) -* [mhdawson](https://github.com/mhdawson) - -**Michael Dawson** <michael_dawson@ca.ibm.com> (he/him) -* [misterdjules](https://github.com/misterdjules) - -**Julien Gilli** <jgilli@nodejs.org> -* [mmarchini](https://github.com/mmarchini) - -**Matheus Marchini** <matheus@sthima.com> -* [MoonBall](https://github.com/MoonBall) - -**Chen Gang** <gangc.cxy@foxmail.com> -* [mscdex](https://github.com/mscdex) - -**Brian White** <mscdex@mscdex.net> -* [MylesBorins](https://github.com/MylesBorins) - -**Myles Borins** <myles.borins@gmail.com> (he/him) -* [not-an-aardvark](https://github.com/not-an-aardvark) - -**Teddy Katz** <teddy.katz@gmail.com> -* [ofrobots](https://github.com/ofrobots) - -**Ali Ijaz Sheikh** <ofrobots@google.com> (he/him) -* [orangemocha](https://github.com/orangemocha) - -**Alexis Campailla** <orangemocha@nodejs.org> -* [othiym23](https://github.com/othiym23) - -**Forrest L Norvell** <ogd@aoaioxxysz.net> (he/him) -* [phillipj](https://github.com/phillipj) - -**Phillip Johnsen** <johphi@gmail.com> -* [pmq20](https://github.com/pmq20) - -**Minqi Pan** <pmq2001@gmail.com> -* [princejwesley](https://github.com/princejwesley) - -**Prince John Wesley** <princejohnwesley@gmail.com> -* [Qard](https://github.com/Qard) - -**Stephen Belanger** <admin@stephenbelanger.com> (he/him) -* [refack](https://github.com/refack) - -**Refael Ackermann** <refack@gmail.com> (he/him) -* [richardlau](https://github.com/richardlau) - -**Richard Lau** <riclau@uk.ibm.com> -* [ronkorving](https://github.com/ronkorving) - -**Ron Korving** <ron@ronkorving.nl> -* [RReverser](https://github.com/RReverser) - -**Ingvar Stepanyan** <me@rreverser.com> -* [rvagg](https://github.com/rvagg) - -**Rod Vagg** <rod@vagg.org> -* [ryzokuken](https://github.com/ryzokuken) - -**Ujjwal Sharma** <usharma1998@gmail.com> (he/him) -* [saghul](https://github.com/saghul) - -**Saúl Ibarra Corretgé** <saghul@gmail.com> -* [sam-github](https://github.com/sam-github) - -**Sam Roberts** <vieuxtech@gmail.com> -* [santigimeno](https://github.com/santigimeno) - -**Santiago Gimeno** <santiago.gimeno@gmail.com> -* [sebdeckers](https://github.com/sebdeckers) - -**Sebastiaan Deckers** <sebdeckers83@gmail.com> -* [seishun](https://github.com/seishun) - -**Nikolai Vavilov** <vvnicholas@gmail.com> -* [shigeki](https://github.com/shigeki) - -**Shigeki Ohtsu** <ohtsu@ohtsu.org> (he/him) -* [silverwind](https://github.com/silverwind) - -**Roman Reiss** <me@silverwind.io> -* [srl295](https://github.com/srl295) - -**Steven R Loomis** <srloomis@us.ibm.com> -* [starkwang](https://github.com/starkwang) - -**Weijia Wang** <starkwang@126.com> -* [stefanmb](https://github.com/stefanmb) - -**Stefan Budeanu** <stefan@budeanu.com> -* [targos](https://github.com/targos) - -**Michaël Zasso** <targos@protonmail.com> (he/him) -* [thefourtheye](https://github.com/thefourtheye) - -**Sakthipriyan Vairamani** <thechargingvolcano@gmail.com> (he/him) -* [thekemkid](https://github.com/thekemkid) - -**Glen Keane** <glenkeane.94@gmail.com> (he/him) -* [thlorenz](https://github.com/thlorenz) - -**Thorsten Lorenz** <thlorenz@gmx.de> -* [TimothyGu](https://github.com/TimothyGu) - -**Tiancheng "Timothy" Gu** <timothygu99@gmail.com> (he/him) -* [tniessen](https://github.com/tniessen) - -**Tobias Nießen** <tniessen@tnie.de> -* [trevnorris](https://github.com/trevnorris) - -**Trevor Norris** <trev.norris@gmail.com> -* [trivikr](https://github.com/trivikr) - -**Trivikram Kamat** <trivikr.dev@gmail.com> -* [Trott](https://github.com/Trott) - -**Rich Trott** <rtrott@gmail.com> (he/him) -* [vdeturckheim](https://github.com/vdeturckheim) - -**Vladimir de Turckheim** <vlad2t@hotmail.com> (he/him) -* [vkurchatkin](https://github.com/vkurchatkin) - -**Vladimir Kurchatkin** <vladimir.kurchatkin@gmail.com> -* [vsemozhetbyt](https://github.com/vsemozhetbyt) - -**Vse Mozhet Byt** <vsemozhetbyt@gmail.com> (he/him) -* [watilde](https://github.com/watilde) - -**Daijiro Wachi** <daijiro.wachi@gmail.com> (he/him) -* [watson](https://github.com/watson) - -**Thomas Watson** <w@tson.dk> -* [whitlockjc](https://github.com/whitlockjc) - -**Jeremy Whitlock** <jwhitlock@apache.org> -* [XadillaX](https://github.com/XadillaX) - -**Khaidi Chu** <i@2333.moe> (he/him) -* [yhwang](https://github.com/yhwang) - -**Yihong Wang** <yh.wang@ibm.com> -* [yorkie](https://github.com/yorkie) - -**Yorkie Liu** <yorkiefixer@gmail.com> -* [yosuke-furukawa](https://github.com/yosuke-furukawa) - -**Yosuke Furukawa** <yosuke.furukawa@gmail.com> - -### Collaborator Emeriti - -* [imran-iq](https://github.com/imran-iq) - -**Imran Iqbal** <imran@imraniqbal.org> -* [isaacs](https://github.com/isaacs) - -**Isaac Z. Schlueter** <i@izs.me> -* [lxe](https://github.com/lxe) - -**Aleksey Smolenchuk** <lxe@lxe.co> -* [matthewloring](https://github.com/matthewloring) - -**Matthew Loring** <mattloring@google.com> -* [micnic](https://github.com/micnic) - -**Nicu Micleușanu** <micnic90@gmail.com> (he/him) -* [mikeal](https://github.com/mikeal) - -**Mikeal Rogers** <mikeal.rogers@gmail.com> -* [monsanto](https://github.com/monsanto) - -**Christopher Monsanto** <chris@monsan.to> -* [Olegas](https://github.com/Olegas) - -**Oleg Elifantiev** <oleg@elifantiev.ru> -* [petkaantonov](https://github.com/petkaantonov) - -**Petka Antonov** <petka_antonov@hotmail.com> -* [piscisaureus](https://github.com/piscisaureus) - -**Bert Belder** <bertbelder@gmail.com> -* [rlidwka](https://github.com/rlidwka) - -**Alex Kocharin** <alex@kocharin.ru> -* [rmg](https://github.com/rmg) - -**Ryan Graham** <r.m.graham@gmail.com> -* [robertkowalski](https://github.com/robertkowalski) - -**Robert Kowalski** <rok@kowalski.gd> -* [romankl](https://github.com/romankl) - -**Roman Klauke** <romaaan.git@gmail.com> -* [tellnes](https://github.com/tellnes) - -**Christian Tellnes** <christian@tellnes.no> -* [tunniclm](https://github.com/tunniclm) - -**Mike Tunnicliffe** <m.j.tunnicliffe@gmail.com> - -Collaborators follow the [COLLABORATOR_GUIDE.md](./COLLABORATOR_GUIDE.md) in -maintaining the Node.js project. - -### Release Team - -Node.js releases are signed with one of the following GPG keys: - -* **Colin Ihrig** <cjihrig@gmail.com> -`94AE36675C464D64BAFA68DD7434390BDBE9B9C5` -* **Evan Lucas** <evanlucas@me.com> -`B9AE9905FFD7803F25714661B63B535A4C206CA9` -* **Gibson Fahnestock** <gibfahn@gmail.com> -`77984A986EBC2AA786BC0F66B01FBB92821C587A` -* **James M Snell** <jasnell@keybase.io> -`71DCFD284A79C3B38668286BC97EC7A07EDE3FC1` -* **Jeremiah Senkpiel** <fishrock@keybase.io> -`FD3A5288F042B6850C66B31F09FE44734EB7990E` -* **Michaël Zasso** <targos@protonmail.com> -`8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600` -* **Myles Borins** <myles.borins@gmail.com> -`C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8` -* **Rod Vagg** <rod@vagg.org> -`DD8F2338BAE7501E3DD5AC78C273792F7D83545D` - -The full set of trusted release keys can be imported by running: - -```shell -gpg --keyserver pool.sks-keyservers.net --recv-keys 94AE36675C464D64BAFA68DD7434390BDBE9B9C5 -gpg --keyserver pool.sks-keyservers.net --recv-keys B9AE9905FFD7803F25714661B63B535A4C206CA9 -gpg --keyserver pool.sks-keyservers.net --recv-keys 77984A986EBC2AA786BC0F66B01FBB92821C587A -gpg --keyserver pool.sks-keyservers.net --recv-keys 71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 -gpg --keyserver pool.sks-keyservers.net --recv-keys FD3A5288F042B6850C66B31F09FE44734EB7990E -gpg --keyserver pool.sks-keyservers.net --recv-keys 8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 -gpg --keyserver pool.sks-keyservers.net --recv-keys C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 -gpg --keyserver pool.sks-keyservers.net --recv-keys DD8F2338BAE7501E3DD5AC78C273792F7D83545D +node -e "console.log(process.versions.v8)" ``` - -See the section above on [Verifying Binaries](#verifying-binaries) for details -on what to do with these keys to verify that a downloaded file is official. - -Previous releases may also have been signed with one of the following GPG keys: - -* **Chris Dickinson** <christopher.s.dickinson@gmail.com> -`9554F04D7259F04124DE6B476D5A82AC7E37093B` -* **Isaac Z. Schlueter** <i@izs.me> -`93C7E9E91B49E432C2F75674B0A78B0A6C481CF6` -* **Italo A. Casas** <me@italoacasas.com> -`56730D5401028683275BD23C23EFEFE93C4CFFFE` -* **Julien Gilli** <jgilli@fastmail.fm> -`114F43EE0176B71C7BC219DD50A3051F888C628D` -* **Timothy J Fontaine** <tjfontaine@gmail.com> -`7937DFD2AB06298B2293C3187D33FF9D0246406D` - -## Contributing to Node.js - -* [Contributing to the project][] -* [Working Groups][] -* [Strategic Initiatives][] - -[Code of Conduct]: https://github.com/nodejs/admin/blob/master/CODE_OF_CONDUCT.md -[Contributing to the project]: CONTRIBUTING.md -[Node.js Help]: https://github.com/nodejs/help -[Node.js Website]: https://nodejs.org/en/ -[Questions tagged 'node.js' on StackOverflow]: https://stackoverflow.com/questions/tagged/node.js -[Working Groups]: https://github.com/nodejs/TSC/blob/master/WORKING_GROUPS.md -[Strategic Initiatives]: https://github.com/nodejs/TSC/blob/master/Strategic-Initiatives.md -[#node.js channel on chat.freenode.net]: https://webchat.freenode.net?channels=node.js&uio=d4 From 8fcc375b20f5d05c662713ad62053f66a7f2a4f1 Mon Sep 17 00:00:00 2001 From: Sergiy Byelozyorov Date: Tue, 14 Nov 2017 17:10:23 +0100 Subject: [PATCH 03/28] node-gyp: support for Chromium versions of Python --- deps/npm/node_modules/node-gyp/lib/configure.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/deps/npm/node_modules/node-gyp/lib/configure.js b/deps/npm/node_modules/node-gyp/lib/configure.js index 1351576d12e8c8..e297e98d726a38 100644 --- a/deps/npm/node_modules/node-gyp/lib/configure.js +++ b/deps/npm/node_modules/node-gyp/lib/configure.js @@ -459,6 +459,10 @@ PythonFinder.prototype = { this.log.silly('stripping "rc" identifier from version') version = version.replace(/rc(.*)$/ig, '') } + if (~version.indexOf('chromium')) { + this.log.silly('stripping "chromium" identifier from version') + version = version.replace(/chromium(.*)$/ig, '') + } var range = semver.Range('>=2.5.0 <3.0.0') var valid = false try { From 8076a08e49bb8df7b0cf95e538b64e0307492b4e Mon Sep 17 00:00:00 2001 From: Andrew Grieve Date: Tue, 17 Apr 2018 15:25:19 +0200 Subject: [PATCH 04/28] Enhancements to --build-v8-with-gn * Split "gn gen" and "ninja" invocations into two separate actions * Make the ninja action use console pool so that progress is shown * Set DEPOT_TOOLS_WIN_TOOLCHAIN=0 by default (to avoid non-googlers being asked for credentials) * Propagate depot_tools path to "gn gen" step (it runs vs_toolchain.py) * Add flags for clang-cl, setting gn args, sub-ninja -j and -l parameters --- configure | 56 +++++++++++++++++++++++++++- deps/v8/gypfiles/v8-monolithic.gyp | 59 +++++++++++++++++++++++++++--- 2 files changed, 108 insertions(+), 7 deletions(-) diff --git a/configure b/configure index 094d8e09f745d9..9547f5973da7b6 100755 --- a/configure +++ b/configure @@ -561,6 +561,29 @@ parser.add_option('--build-v8-with-gn', dest='build_v8_with_gn', default=False, help='build V8 using GN instead of gyp') +parser.add_option('--build-v8-with-gn-max-jobs', + dest='build_v8_with_gn_max_jobs', + default='', + help='Value for the -j parameter for the ninja invocation.') +parser.add_option('--build-v8-with-gn-max-load', + dest='build_v8_with_gn_max_load', + default='', + help='Value for the -l parameter for the ninja invocation.') +parser.add_option('--build-v8-with-gn-extra-gn-args', + dest='build_v8_with_gn_extra_gn_args', + default='', + help='Extra gn args to pass add to the "gn gen --args "..." invocation') +parser.add_option('--use-clang-cl', + action='store_true', + dest='use_clang_cl', + default=False, + help='On Windows, build using clang-cl. By default, uses the copy of ' + 'clang-cl that is bundled with V8. Requires --ninja.') +parser.add_option('--clang-cl-base-path', + dest='clang_cl_base_path', + help='Absolute path to a directory containing a bin\\clang-cl.exe ' + '(requires --use-clang-cl).') + # Create compile_commands.json in out/Debug and out/Release. parser.add_option('-C', @@ -590,6 +613,22 @@ def warn(msg): # track if warnings occurred warn.warned = False +if options.use_clang_cl: + if not options.use_ninja: + warn('--use-clang-cl requires --ninja') + if options.clang_cl_base_path: + clang_base_path = options.clang_cl_base_path + else: + clang_base_path = os.path.abspath(os.path.join( + 'deps', 'v8', 'third_party', 'llvm-build', 'Release+Asserts')) + # CC sets the path for GYP-compiled files. + os.environ['CC'] = os.path.join(clang_base_path, 'bin', 'clang-cl.exe') + # GN arg sets the path for --build-v8-using-gn. + if options.build_v8_with_gn_extra_gn_args: + options.build_v8_with_gn_extra_gn_args += ' ' + options.build_v8_with_gn_extra_gn_args += 'clang_base_path="{}"'.format( + clang_base_path) + def b(value): """Returns the string 'true' if value is truthy, 'false' otherwise.""" if value: @@ -1077,11 +1116,24 @@ def configure_v8(o): if options.without_bundled_v8 and options.build_v8_with_gn: raise Exception( '--build-v8-with-gn is incompatible with --without-bundled-v8.') + o['variables']['build_v8_with_gn'] = b(options.build_v8_with_gn) if options.build_v8_with_gn: v8_path = os.path.join('deps', 'v8') print('Fetching dependencies to build V8 with GN') - options.build_v8_with_gn = FetchDeps(v8_path) - o['variables']['build_v8_with_gn'] = b(options.build_v8_with_gn) + # Default to non-Googler configuration. + if 'DEPOT_TOOLS_WIN_TOOLCHAIN' not in os.environ: + os.environ['DEPOT_TOOLS_WIN_TOOLCHAIN'] = '0' + depot_tools = FetchDeps(v8_path) + + o['variables']['build_v8_with_gn_extra_gn_args'] = ( + options.build_v8_with_gn_extra_gn_args) + o['variables']['build_v8_with_gn_max_jobs'] = ( + options.build_v8_with_gn_max_jobs) + o['variables']['build_v8_with_gn_max_load'] = ( + options.build_v8_with_gn_max_load) + o['variables']['build_v8_with_gn_bundled_win_toolchain'] = ( + os.environ['DEPOT_TOOLS_WIN_TOOLCHAIN']) + o['variables']['build_v8_with_gn_depot_tools'] = depot_tools def configure_openssl(o): diff --git a/deps/v8/gypfiles/v8-monolithic.gyp b/deps/v8/gypfiles/v8-monolithic.gyp index b5ca0ad150b7a6..25ba42ba516dbf 100644 --- a/deps/v8/gypfiles/v8-monolithic.gyp +++ b/deps/v8/gypfiles/v8-monolithic.gyp @@ -26,16 +26,19 @@ }, 'actions': [ { - 'action_name': 'build_with_gn', + 'action_name': 'build_with_gn_generate_build_files', + # No need to list full set of inputs because after the initial + # generation, ninja (run by the next action), will check to see + # if build.ninja is stale. 'inputs': [ - '../tools//node/build_gn.py', + '../tools/node/build_gn.py', ], 'outputs': [ - '<(INTERMEDIATE_DIR)/gn/obj/libv8_monolith.a', - '<(INTERMEDIATE_DIR)/gn/args.gn', + '<(INTERMEDIATE_DIR)/gn/build.ninja', ], 'action': [ - '../tools//node/build_gn.py', + 'python', + '../tools/node/build_gn.py', '--mode', '<(CONFIGURATION_NAME)', '--v8_path', '../', '--build_path', '<(INTERMEDIATE_DIR)/gn', @@ -49,7 +52,53 @@ '--flag', 'v8_optimized_debug=<(v8_optimized_debug)', '--flag', 'v8_enable_disassembler=<(v8_enable_disassembler)', '--flag', 'v8_postmortem_support=<(v8_postmortem_support)', + '--bundled-win-toolchain', '<(build_v8_with_gn_bundled_win_toolchain)', + '--depot-tools', '<(build_v8_with_gn_depot_tools)', + ], + 'conditions': [ + ['build_v8_with_gn_extra_gn_args != ""', { + 'action': [ + '--extra-gn-args', '<(build_v8_with_gn_extra_gn_args)', + ], + }], + ], + }, + { + 'action_name': 'build_with_gn', + 'inputs': [ + '../tools/node/build_gn.py', + '<(INTERMEDIATE_DIR)/gn/build.ninja', + ], + # Specify a non-existent output to make the target permanently dirty. + # Alternatively, a depfile could be used, but then two dirty checks + # would run: one by the outer build tool, and one by build_gn.py. + 'outputs': [ + '<(v8_base)', + 'does-not-exist', + ], + 'action': [ + 'python', + '../tools/node/build_gn.py', + '--build_path', '<(INTERMEDIATE_DIR)/gn', + '--v8_path', '../', + '--bundled-win-toolchain', '<(build_v8_with_gn_bundled_win_toolchain)', + '--depot-tools', '<(build_v8_with_gn_depot_tools)', + '--build', + ], + 'conditions': [ + ['build_v8_with_gn_max_jobs!=""', { + 'action': [ + '--max-jobs', '<(build_v8_with_gn_max_jobs)', + ], + }], + ['build_v8_with_gn_max_load!=""', { + 'action': [ + '--max-load', '<(build_v8_with_gn_max_load)', + ], + }], ], + # Allows sub-ninja's build progress to be printed. + 'ninja_use_console': 1, }, ], }, From 49c10f51b67abee0c901986a49161ebf24362e55 Mon Sep 17 00:00:00 2001 From: Andrew Grieve Date: Tue, 17 Apr 2018 15:34:49 +0200 Subject: [PATCH 05/28] Fix ninja builds on Windows * Fixed several hardcoded paths to use <(STATIC_LIB_PREFIX) & <(STATIC_LIB_SUFFIX) * Added GENERATOR=='ninja' conditionals to /WHOLEARCHIVE flags (msbuild puts .lib files under separate directories). * Add missing link_settings for v8_monolith * Set use_sysroot=false only for non-windows builds. To build using clang-cl: python configure --build-v8-with-gn --use-clang-cl --ninja --- common.gypi | 4 +-- configure | 1 - deps/v8/gypfiles/v8-monolithic.gyp | 10 ++++++ node.gyp | 15 ++++++-- node.gypi | 56 ++++++++++++++++++++++++------ 5 files changed, 69 insertions(+), 17 deletions(-) diff --git a/common.gypi b/common.gypi index 65eb7caf575498..ae957786d43466 100644 --- a/common.gypi +++ b/common.gypi @@ -77,9 +77,9 @@ ['build_v8_with_gn == "true"', { 'conditions': [ ['GENERATOR == "ninja"', { - 'v8_base': '<(PRODUCT_DIR)/obj/deps/v8/gypfiles/v8_monolith.gen/gn/obj/libv8_monolith.a', + 'v8_base': '<(PRODUCT_DIR)/obj/deps/v8/gypfiles/v8_monolith.gen/gn/obj/<(STATIC_LIB_PREFIX)v8_monolith<(STATIC_LIB_SUFFIX)', }, { - 'v8_base': '<(PRODUCT_DIR)/obj.target/v8_monolith/geni/gn/obj/libv8_monolith.a', + 'v8_base': '<(PRODUCT_DIR)/obj.target/v8_monolith/geni/gn/obj/<(STATIC_LIB_PREFIX)v8_monolith<(STATIC_LIB_SUFFIX)', }], ], }], diff --git a/configure b/configure index 9547f5973da7b6..1e4b6ba75308b7 100755 --- a/configure +++ b/configure @@ -584,7 +584,6 @@ parser.add_option('--clang-cl-base-path', help='Absolute path to a directory containing a bin\\clang-cl.exe ' '(requires --use-clang-cl).') - # Create compile_commands.json in out/Debug and out/Release. parser.add_option('-C', action='store_true', diff --git a/deps/v8/gypfiles/v8-monolithic.gyp b/deps/v8/gypfiles/v8-monolithic.gyp index 25ba42ba516dbf..a93e00752b2120 100644 --- a/deps/v8/gypfiles/v8-monolithic.gyp +++ b/deps/v8/gypfiles/v8-monolithic.gyp @@ -23,6 +23,16 @@ 'include_dirs': [ '../include/', ], + 'link_settings': { + 'conditions': [ + ['OS=="win"', { + 'libraries': ['-ldbghelp.lib', '-lshlwapi.lib', '-lwinmm.lib', '-lws2_32.lib'], + }], + ['OS=="linux"', { + 'libraries': ['-ldl', '-lrt'], + }], + ], + }, }, 'actions': [ { diff --git a/node.gyp b/node.gyp index 4b6bc4c108cfb5..566b2a226325ca 100644 --- a/node.gyp +++ b/node.gyp @@ -256,9 +256,18 @@ }, 'msvs_settings': { 'VCLinkerTool': { - 'AdditionalOptions': [ - '/WHOLEARCHIVE:<(PRODUCT_DIR)\\lib\\' - '<(node_core_target_name)<(STATIC_LIB_SUFFIX)', + 'conditions': [ + ['GENERATOR=="ninja"', { + 'AdditionalOptions': [ + '/WHOLEARCHIVE:<(obj_dir)\\<(STATIC_LIB_PREFIX)' + '<(node_core_target_name)<(STATIC_LIB_SUFFIX)', + ], + }, { + 'AdditionalOptions': [ + '/WHOLEARCHIVE:<(LIB_DIR)\\<(STATIC_LIB_PREFIX)' + '<(node_core_target_name)<(STATIC_LIB_SUFFIX)', + ], + }], ], }, }, diff --git a/node.gypi b/node.gypi index acd9f83213021d..fa4afc9695c475 100644 --- a/node.gypi +++ b/node.gypi @@ -140,8 +140,16 @@ }, 'msvs_settings': { 'VCLinkerTool': { - 'AdditionalOptions': [ - '/WHOLEARCHIVE:<(PRODUCT_DIR)\\lib\\zlib<(STATIC_LIB_SUFFIX)', + 'conditions': [ + ['GENERATOR=="ninja"', { + 'AdditionalOptions': [ + '/WHOLEARCHIVE:<(obj_dir)\\deps\\zlib\\<(STATIC_LIB_PREFIX)zlib<(STATIC_LIB_SUFFIX)', + ], + }, { + 'AdditionalOptions': [ + '/WHOLEARCHIVE:<(LIB_DIR)\\<(STATIC_LIB_PREFIX)zlib<(STATIC_LIB_SUFFIX)', + ], + }], ], }, }, @@ -178,8 +186,16 @@ }, 'msvs_settings': { 'VCLinkerTool': { - 'AdditionalOptions': [ - '/WHOLEARCHIVE:<(PRODUCT_DIR)\\lib\\libuv<(STATIC_LIB_SUFFIX)', + 'conditions': [ + ['GENERATOR=="ninja"', { + 'AdditionalOptions': [ + '/WHOLEARCHIVE:<(obj_dir)\\deps\\uv\\<(STATIC_LIB_PREFIX)libuv<(STATIC_LIB_SUFFIX)', + ], + }, { + 'AdditionalOptions': [ + '/WHOLEARCHIVE:<(LIB_DIR)\\<(STATIC_LIB_PREFIX)libuv<(STATIC_LIB_SUFFIX)', + ], + }], ], }, }, @@ -258,11 +274,21 @@ 'NODE_PLATFORM="sunos"', ], }], - [ '(OS=="freebsd" or OS=="linux") and node_shared=="false"' - ' and force_load=="true"', { - 'ldflags': [ '-Wl,-z,noexecstack', - '-Wl,--whole-archive <(v8_base)', - '-Wl,--no-whole-archive' ] + [ 'node_shared=="false" and force_load=="true"', { + 'msvs_settings': { + 'VCLinkerTool': { + 'AdditionalOptions': [ + '/WHOLEARCHIVE:<(v8_base)', + ], + }, + }, + 'conditions': [ + ['OS=="freebsd" or OS=="linux"', { + 'ldflags': [ '-Wl,-z,noexecstack', + '-Wl,--whole-archive <(v8_base)', + '-Wl,--no-whole-archive' ], + }], + ], }], [ 'OS in "mac freebsd linux" and node_shared=="false"' ' and coverage=="true"', { @@ -315,8 +341,16 @@ }, 'msvs_settings': { 'VCLinkerTool': { - 'AdditionalOptions': [ - '/WHOLEARCHIVE:<(PRODUCT_DIR)\\lib\\<(openssl_product)', + 'conditions': [ + ['GENERATOR=="ninja"', { + 'AdditionalOptions': [ + '/WHOLEARCHIVE:<(obj_dir)\\deps\\openssl\\<(STATIC_LIB_PREFIX)<(openssl_product)', + ], + }, { + 'AdditionalOptions': [ + '/WHOLEARCHIVE:<(LIB_DIR)\\<(STATIC_LIB_PREFIX)<(openssl_product)', + ], + }], ], }, }, From 124650a5496d89fa09a57ebeec580cbbbf3e2f3c Mon Sep 17 00:00:00 2001 From: Andrew Grieve Date: Wed, 25 Apr 2018 15:15:06 +0200 Subject: [PATCH 06/28] Properly convert .gypi -> .json in js2c.py It was breaking when .gypi strings had quotes in them. e.g.: 'foo': 'bar="baz"' --- tools/js2c.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tools/js2c.py b/tools/js2c.py index 249df58085dd96..ada94eac2ca418 100755 --- a/tools/js2c.py +++ b/tools/js2c.py @@ -31,6 +31,8 @@ # char arrays. It is used for embedded JavaScript code in the V8 # library. +import ast +import json import os import re import sys @@ -300,11 +302,11 @@ def JS2C(source, target): split = split[1:] name = '/'.join(split) - # if its a gypi file we're going to want it as json - # later on anyway, so get it out of the way now + # Convert gypi to json. This means line number will not match up to the + # original file, but is equired to properly escape strings. if name.endswith(".gypi"): - lines = re.sub(r'#.*?\n', '', lines) - lines = re.sub(r'\'', '"', lines) + obj = ast.literal_eval(lines) + lines = json.dumps(obj, indent=2) name = name.split('.', 1)[0] var = name.replace('-', '_').replace('/', '_') key = '%s_key' % var From fd66b85770b8285ed4a99edc4bb8bc3d0c7218bf Mon Sep 17 00:00:00 2001 From: Andrew Grieve Date: Wed, 25 Apr 2018 15:18:33 +0200 Subject: [PATCH 07/28] Fix --use-clang-cl flag. It needed to be passed via "make_global_settings" rather than environment variable. --- configure | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/configure b/configure index 1e4b6ba75308b7..b127dd9737a9e4 100755 --- a/configure +++ b/configure @@ -620,8 +620,6 @@ if options.use_clang_cl: else: clang_base_path = os.path.abspath(os.path.join( 'deps', 'v8', 'third_party', 'llvm-build', 'Release+Asserts')) - # CC sets the path for GYP-compiled files. - os.environ['CC'] = os.path.join(clang_base_path, 'bin', 'clang-cl.exe') # GN arg sets the path for --build-v8-using-gn. if options.build_v8_with_gn_extra_gn_args: options.build_v8_with_gn_extra_gn_args += ' ' @@ -1565,6 +1563,11 @@ if 'make_fips_settings' in output: write('config_fips.gypi', do_not_edit + pprint.pformat(config_fips, indent=2) + '\n') +if options.use_clang_cl: + make_global_settings = output.setdefault('make_global_settings', []) + make_global_settings.append( + ['CC', os.path.join(clang_base_path, 'bin', 'clang-cl')]) + # make_global_settings should be a root level element too if 'make_global_settings' in output: make_global_settings = output['make_global_settings'] From 05d782b9011a0f8324d669b45a369046d040af6d Mon Sep 17 00:00:00 2001 From: Andrew Grieve Date: Wed, 25 Apr 2018 16:12:11 +0200 Subject: [PATCH 08/28] Forward DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT --- configure | 4 +++- deps/v8/gypfiles/v8-monolithic.gyp | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/configure b/configure index b127dd9737a9e4..ce451ffb90c7b6 100755 --- a/configure +++ b/configure @@ -1129,7 +1129,9 @@ def configure_v8(o): o['variables']['build_v8_with_gn_max_load'] = ( options.build_v8_with_gn_max_load) o['variables']['build_v8_with_gn_bundled_win_toolchain'] = ( - os.environ['DEPOT_TOOLS_WIN_TOOLCHAIN']) + os.environ.get('DEPOT_TOOLS_WIN_TOOLCHAIN', '')) + o['variables']['build_v8_with_gn_bundled_win_toolchain_root'] = ( + os.environ.get('DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT', '')) o['variables']['build_v8_with_gn_depot_tools'] = depot_tools diff --git a/deps/v8/gypfiles/v8-monolithic.gyp b/deps/v8/gypfiles/v8-monolithic.gyp index a93e00752b2120..c61f838b9b2b94 100644 --- a/deps/v8/gypfiles/v8-monolithic.gyp +++ b/deps/v8/gypfiles/v8-monolithic.gyp @@ -71,6 +71,11 @@ '--extra-gn-args', '<(build_v8_with_gn_extra_gn_args)', ], }], + ['build_v8_with_gn_bundled_win_toolchain_root != ""', { + 'action': [ + '--bundled-win-toolchain-root', '<(build_v8_with_gn_bundled_win_toolchain_root)', + ], + }], ], }, { From 570fd7eb862c01c6966f96c747c69bf3af722969 Mon Sep 17 00:00:00 2001 From: Michael Achenbach Date: Mon, 30 Apr 2018 14:08:28 +0200 Subject: [PATCH 09/28] tools: properly convert .gypi in install.py It was breaking during install when .gypi strings had quotes in them. e.g.: 'foo': 'bar="baz"' --- tools/install.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tools/install.py b/tools/install.py index 2aeed773bb08b3..ce9ceeee1dd578 100755 --- a/tools/install.py +++ b/tools/install.py @@ -1,7 +1,7 @@ #!/usr/bin/env python +import ast import errno -import json import os import re import shutil @@ -20,9 +20,7 @@ def abspath(*args): def load_config(): s = open('config.gypi').read() - s = re.sub(r'#.*?\n', '', s) # strip comments - s = re.sub(r'\'', '"', s) # convert quotes - return json.loads(s) + return ast.literal_eval(s) def try_unlink(path): try: From 427afa478a14e161fdb5ac0d011d46d10c5041f5 Mon Sep 17 00:00:00 2001 From: Yang Guo Date: Wed, 11 Jul 2018 08:50:18 +0200 Subject: [PATCH 10/28] Fix configure for build_v8_with_gn_depot_tools --- configure | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure b/configure index ce451ffb90c7b6..ae6cc12ca94668 100755 --- a/configure +++ b/configure @@ -1132,7 +1132,7 @@ def configure_v8(o): os.environ.get('DEPOT_TOOLS_WIN_TOOLCHAIN', '')) o['variables']['build_v8_with_gn_bundled_win_toolchain_root'] = ( os.environ.get('DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT', '')) - o['variables']['build_v8_with_gn_depot_tools'] = depot_tools + o['variables']['build_v8_with_gn_depot_tools'] = b(depot_tools) def configure_openssl(o): From a2f9a4c315a314b42fc1a357f9e82d8c072fa3fd Mon Sep 17 00:00:00 2001 From: Yang Guo Date: Mon, 7 May 2018 13:24:56 +0200 Subject: [PATCH 11/28] Fix tests failures and propagate untrusted-code-mitigations flag --- deps/v8/gypfiles/v8-monolithic.gyp | 1 + test/parallel/test-v8-stats.js | 1 + 2 files changed, 2 insertions(+) diff --git a/deps/v8/gypfiles/v8-monolithic.gyp b/deps/v8/gypfiles/v8-monolithic.gyp index c61f838b9b2b94..81cc397a1c53b8 100644 --- a/deps/v8/gypfiles/v8-monolithic.gyp +++ b/deps/v8/gypfiles/v8-monolithic.gyp @@ -62,6 +62,7 @@ '--flag', 'v8_optimized_debug=<(v8_optimized_debug)', '--flag', 'v8_enable_disassembler=<(v8_enable_disassembler)', '--flag', 'v8_postmortem_support=<(v8_postmortem_support)', + '--flag', 'v8_untrusted_code_mitigations=<(v8_untrusted_code_mitigations)', '--bundled-win-toolchain', '<(build_v8_with_gn_bundled_win_toolchain)', '--depot-tools', '<(build_v8_with_gn_depot_tools)', ], diff --git a/test/parallel/test-v8-stats.js b/test/parallel/test-v8-stats.js index 83689afc974e12..d8bee55c2b4b8f 100644 --- a/test/parallel/test-v8-stats.js +++ b/test/parallel/test-v8-stats.js @@ -23,6 +23,7 @@ keys.forEach(function(key) { const expectedHeapSpaces = [ 'new_space', 'old_space', + 'read_only_space', 'code_space', 'map_space', 'large_object_space', From 0c5c2c0f768d1da9204051b56ebe51ef665ccd38 Mon Sep 17 00:00:00 2001 From: Gabriel Charette Date: Wed, 9 May 2018 12:20:04 -0400 Subject: [PATCH 12/28] src: use modern v8::Platform worker threads APIs Precursor to removing deprecated APIs on the v8 side @ https://chromium-review.googlesource.com/c/v8/v8/+/1045310 --- src/node.cc | 2 +- src/node.h | 2 +- src/node_platform.cc | 76 ++++++++++++++++++++++---------------------- src/node_platform.h | 30 ++++++++--------- src/node_worker.cc | 4 +-- 5 files changed, 56 insertions(+), 58 deletions(-) diff --git a/src/node.cc b/src/node.cc index f9ac48c0770221..86e41205e05805 100644 --- a/src/node.cc +++ b/src/node.cc @@ -308,7 +308,7 @@ static struct { } void DrainVMTasks(Isolate* isolate) { - platform_->DrainBackgroundTasks(isolate); + platform_->DrainTasks(isolate); } void CancelVMTasks(Isolate* isolate) { diff --git a/src/node.h b/src/node.h index ed2c074b922687..b7cacb4bb50ba2 100644 --- a/src/node.h +++ b/src/node.h @@ -229,7 +229,7 @@ class MultiIsolatePlatform : public v8::Platform { // posted during flushing of the queue are postponed until the next // flushing. virtual bool FlushForegroundTasks(v8::Isolate* isolate) = 0; - virtual void DrainBackgroundTasks(v8::Isolate* isolate) = 0; + virtual void DrainTasks(v8::Isolate* isolate) = 0; virtual void CancelPendingDelayedTasks(v8::Isolate* isolate) = 0; // These will be called by the `IsolateData` creation/destruction functions. diff --git a/src/node_platform.cc b/src/node_platform.cc index 947622a219cdef..ce9117ae38e7ee 100644 --- a/src/node_platform.cc +++ b/src/node_platform.cc @@ -15,50 +15,52 @@ using v8::Platform; using v8::Task; using v8::TracingController; -static void BackgroundRunner(void* data) { +namespace { + +static void WorkerThreadMain(void* data) { TRACE_EVENT_METADATA1("__metadata", "thread_name", "name", "BackgroundTaskRunner"); - TaskQueue *background_tasks = static_cast *>(data); - while (std::unique_ptr task = background_tasks->BlockingPop()) { + TaskQueue* pending_worker_tasks = static_cast*>(data); + while (std::unique_ptr task = pending_worker_tasks->BlockingPop()) { task->Run(); - background_tasks->NotifyOfCompletion(); + pending_worker_tasks->NotifyOfCompletion(); } } -BackgroundTaskRunner::BackgroundTaskRunner(int thread_pool_size) { +} // namespace + +WorkerThreadsTaskRunner::WorkerThreadsTaskRunner(int thread_pool_size) { for (int i = 0; i < thread_pool_size; i++) { std::unique_ptr t { new uv_thread_t() }; - if (uv_thread_create(t.get(), BackgroundRunner, &background_tasks_) != 0) + if (uv_thread_create(t.get(), WorkerThreadMain, + &pending_worker_tasks_) != 0) { break; + } threads_.push_back(std::move(t)); } } -void BackgroundTaskRunner::PostTask(std::unique_ptr task) { - background_tasks_.Push(std::move(task)); -} - -void BackgroundTaskRunner::PostIdleTask(std::unique_ptr task) { - UNREACHABLE(); +void WorkerThreadsTaskRunner::PostTask(std::unique_ptr task) { + pending_worker_tasks_.Push(std::move(task)); } -void BackgroundTaskRunner::PostDelayedTask(std::unique_ptr task, - double delay_in_seconds) { +void WorkerThreadsTaskRunner::PostDelayedTask(std::unique_ptr task, + double delay_in_seconds) { UNREACHABLE(); } -void BackgroundTaskRunner::BlockingDrain() { - background_tasks_.BlockingDrain(); +void WorkerThreadsTaskRunner::BlockingDrain() { + pending_worker_tasks_.BlockingDrain(); } -void BackgroundTaskRunner::Shutdown() { - background_tasks_.Stop(); +void WorkerThreadsTaskRunner::Shutdown() { + pending_worker_tasks_.Stop(); for (size_t i = 0; i < threads_.size(); i++) { CHECK_EQ(0, uv_thread_join(threads_[i].get())); } } -size_t BackgroundTaskRunner::NumberOfAvailableBackgroundThreads() const { +int WorkerThreadsTaskRunner::NumberOfWorkerThreads() const { return threads_.size(); } @@ -131,8 +133,8 @@ NodePlatform::NodePlatform(int thread_pool_size, TracingController* controller = new TracingController(); tracing_controller_.reset(controller); } - background_task_runner_ = - std::make_shared(thread_pool_size); + worker_thread_task_runner_ = + std::make_shared(thread_pool_size); } void NodePlatform::RegisterIsolate(IsolateData* isolate_data, uv_loop_t* loop) { @@ -160,7 +162,7 @@ void NodePlatform::UnregisterIsolate(IsolateData* isolate_data) { } void NodePlatform::Shutdown() { - background_task_runner_->Shutdown(); + worker_thread_task_runner_->Shutdown(); { Mutex::ScopedLock lock(per_isolate_mutex_); @@ -168,8 +170,8 @@ void NodePlatform::Shutdown() { } } -size_t NodePlatform::NumberOfAvailableBackgroundThreads() { - return background_task_runner_->NumberOfAvailableBackgroundThreads(); +int NodePlatform::NumberOfWorkerThreads() { + return worker_thread_task_runner_->NumberOfWorkerThreads(); } void PerIsolatePlatformData::RunForegroundTask(std::unique_ptr task) { @@ -201,15 +203,12 @@ void PerIsolatePlatformData::CancelPendingDelayedTasks() { scheduled_delayed_tasks_.clear(); } -void NodePlatform::DrainBackgroundTasks(Isolate* isolate) { +void NodePlatform::DrainTasks(Isolate* isolate) { std::shared_ptr per_isolate = ForIsolate(isolate); do { - // Right now, there is no way to drain only background tasks associated - // with a specific isolate, so this sometimes does more work than - // necessary. In the long run, that functionality is probably going to - // be available anyway, though. - background_task_runner_->BlockingDrain(); + // Worker tasks aren't associated with an Isolate. + worker_thread_task_runner_->BlockingDrain(); } while (per_isolate->FlushForegroundTasksInternal()); } @@ -249,11 +248,17 @@ bool PerIsolatePlatformData::FlushForegroundTasksInternal() { return did_work; } -void NodePlatform::CallOnBackgroundThread(Task* task, - ExpectedRuntime expected_runtime) { - background_task_runner_->PostTask(std::unique_ptr(task)); +void NodePlatform::CallOnWorkerThread(std::unique_ptr task) { + worker_thread_task_runner_->PostTask(std::move(task)); } +void NodePlatform::CallDelayedOnWorkerThread(std::unique_ptr task, + double delay_in_seconds) { + worker_thread_task_runner_->PostDelayedTask(std::move(task), + delay_in_seconds); +} + + std::shared_ptr NodePlatform::ForIsolate(Isolate* isolate) { Mutex::ScopedLock lock(per_isolate_mutex_); @@ -283,11 +288,6 @@ void NodePlatform::CancelPendingDelayedTasks(v8::Isolate* isolate) { bool NodePlatform::IdleTasksEnabled(Isolate* isolate) { return false; } -std::shared_ptr -NodePlatform::GetBackgroundTaskRunner(Isolate* isolate) { - return background_task_runner_; -} - std::shared_ptr NodePlatform::GetForegroundTaskRunner(Isolate* isolate) { return ForIsolate(isolate); diff --git a/src/node_platform.h b/src/node_platform.h index 77826e057771b0..62301a302b22e0 100644 --- a/src/node_platform.h +++ b/src/node_platform.h @@ -93,23 +93,22 @@ class PerIsolatePlatformData : std::vector scheduled_delayed_tasks_; }; -// This acts as the single background task runner for all Isolates. -class BackgroundTaskRunner : public v8::TaskRunner { +// This acts as the single worker thread task runner for all Isolates. +class WorkerThreadsTaskRunner { public: - explicit BackgroundTaskRunner(int thread_pool_size); + explicit WorkerThreadsTaskRunner(int thread_pool_size); - void PostTask(std::unique_ptr task) override; - void PostIdleTask(std::unique_ptr task) override; + void PostTask(std::unique_ptr task); void PostDelayedTask(std::unique_ptr task, - double delay_in_seconds) override; - bool IdleTasksEnabled() override { return false; }; + double delay_in_seconds); void BlockingDrain(); void Shutdown(); - size_t NumberOfAvailableBackgroundThreads() const; + int NumberOfWorkerThreads() const; + private: - TaskQueue background_tasks_; + TaskQueue pending_worker_tasks_; std::vector> threads_; }; @@ -118,14 +117,15 @@ class NodePlatform : public MultiIsolatePlatform { NodePlatform(int thread_pool_size, v8::TracingController* tracing_controller); virtual ~NodePlatform() {} - void DrainBackgroundTasks(v8::Isolate* isolate) override; + void DrainTasks(v8::Isolate* isolate) override; void CancelPendingDelayedTasks(v8::Isolate* isolate) override; void Shutdown(); // v8::Platform implementation. - size_t NumberOfAvailableBackgroundThreads() override; - void CallOnBackgroundThread(v8::Task* task, - ExpectedRuntime expected_runtime) override; + int NumberOfWorkerThreads() override; + void CallOnWorkerThread(std::unique_ptr task) override; + void CallDelayedOnWorkerThread(std::unique_ptr task, + double delay_in_seconds) override; void CallOnForegroundThread(v8::Isolate* isolate, v8::Task* task) override; void CallDelayedOnForegroundThread(v8::Isolate* isolate, v8::Task* task, double delay_in_seconds) override; @@ -138,8 +138,6 @@ class NodePlatform : public MultiIsolatePlatform { void RegisterIsolate(IsolateData* isolate_data, uv_loop_t* loop) override; void UnregisterIsolate(IsolateData* isolate_data) override; - std::shared_ptr GetBackgroundTaskRunner( - v8::Isolate* isolate) override; std::shared_ptr GetForegroundTaskRunner( v8::Isolate* isolate) override; @@ -151,7 +149,7 @@ class NodePlatform : public MultiIsolatePlatform { std::shared_ptr> per_isolate_; std::unique_ptr tracing_controller_; - std::shared_ptr background_task_runner_; + std::shared_ptr worker_thread_task_runner_; }; } // namespace node diff --git a/src/node_worker.cc b/src/node_worker.cc index 6f325668b86921..ed6264063c9dab 100644 --- a/src/node_worker.cc +++ b/src/node_worker.cc @@ -173,7 +173,7 @@ void Worker::Run() { uv_run(&loop_, UV_RUN_DEFAULT); if (is_stopped()) break; - platform->DrainBackgroundTasks(isolate_); + platform->DrainTasks(isolate_); more = uv_loop_alive(&loop_); if (more && !is_stopped()) @@ -232,7 +232,7 @@ void Worker::Run() { // This call needs to be made while the `Environment` is still alive // because we assume that it is available for async tracking in the // NodePlatform implementation. - platform->DrainBackgroundTasks(isolate_); + platform->DrainTasks(isolate_); } env_.reset(); From 625d8433d4efd23b67fe66d21867da9b84760d63 Mon Sep 17 00:00:00 2001 From: Andreas Haas Date: Sun, 3 Jun 2018 17:35:25 +0200 Subject: [PATCH 13/28] src: initialize PerIsolateData eagerly --- src/env.cc | 4 ++-- src/node.cc | 12 +++++++++--- src/node.h | 7 ++++--- src/node_platform.cc | 6 ++---- src/node_platform.h | 4 ++-- src/node_worker.cc | 5 +++-- test/cctest/node_test_fixture.h | 3 +++ 7 files changed, 25 insertions(+), 16 deletions(-) diff --git a/src/env.cc b/src/env.cc index f940c18d16eceb..e857f6dfcd3d46 100644 --- a/src/env.cc +++ b/src/env.cc @@ -39,7 +39,7 @@ IsolateData::IsolateData(Isolate* isolate, zero_fill_field_(zero_fill_field), platform_(platform) { if (platform_ != nullptr) - platform_->RegisterIsolate(this, event_loop); + platform_->RegisterIsolate(isolate_, event_loop); // Create string and private symbol properties as internalized one byte // strings after the platform is properly initialized. @@ -90,7 +90,7 @@ IsolateData::IsolateData(Isolate* isolate, IsolateData::~IsolateData() { if (platform_ != nullptr) - platform_->UnregisterIsolate(this); + platform_->UnregisterIsolate(isolate_); } diff --git a/src/node.cc b/src/node.cc index 86e41205e05805..044598a483eb7e 100644 --- a/src/node.cc +++ b/src/node.cc @@ -3621,17 +3621,22 @@ bool AllowWasmCodeGenerationCallback( return wasm_code_gen->IsUndefined() || wasm_code_gen->IsTrue(); } -Isolate* NewIsolate(ArrayBufferAllocator* allocator) { +Isolate* NewIsolate(ArrayBufferAllocator* allocator, uv_loop_t* event_loop) { Isolate::CreateParams params; params.array_buffer_allocator = allocator; #ifdef NODE_ENABLE_VTUNE_PROFILING params.code_event_handler = vTune::GetVtuneCodeEventHandler(); #endif - Isolate* isolate = Isolate::New(params); + Isolate* isolate = Isolate::Allocate(); if (isolate == nullptr) return nullptr; + // Register the isolate on the platform before the isolate gets initialized, + // so that the isolate can access the platform during initialization. + v8_platform.Platform()->RegisterIsolate(isolate, event_loop); + Isolate::Initialize(isolate, params); + isolate->AddMessageListener(OnMessage); isolate->SetAbortOnUncaughtExceptionCallback(ShouldAbortOnUncaughtException); isolate->SetMicrotasksPolicy(v8::MicrotasksPolicy::kExplicit); @@ -3646,7 +3651,7 @@ inline int Start(uv_loop_t* event_loop, int exec_argc, const char* const* exec_argv) { std::unique_ptr allocator(CreateArrayBufferAllocator(), &FreeArrayBufferAllocator); - Isolate* const isolate = NewIsolate(allocator.get()); + Isolate* const isolate = NewIsolate(allocator.get(), event_loop); if (isolate == nullptr) return 12; // Signal internal error. @@ -3682,6 +3687,7 @@ inline int Start(uv_loop_t* event_loop, } isolate->Dispose(); + v8_platform.Platform()->UnregisterIsolate(isolate); return exit_code; } diff --git a/src/node.h b/src/node.h index b7cacb4bb50ba2..c7f6f569764755 100644 --- a/src/node.h +++ b/src/node.h @@ -233,13 +233,14 @@ class MultiIsolatePlatform : public v8::Platform { virtual void CancelPendingDelayedTasks(v8::Isolate* isolate) = 0; // These will be called by the `IsolateData` creation/destruction functions. - virtual void RegisterIsolate(IsolateData* isolate_data, + virtual void RegisterIsolate(v8::Isolate* isolate, struct uv_loop_s* loop) = 0; - virtual void UnregisterIsolate(IsolateData* isolate_data) = 0; + virtual void UnregisterIsolate(v8::Isolate* isolate) = 0; }; // Creates a new isolate with Node.js-specific settings. -NODE_EXTERN v8::Isolate* NewIsolate(ArrayBufferAllocator* allocator); +NODE_EXTERN v8::Isolate* NewIsolate(ArrayBufferAllocator* allocator, + struct uv_loop_s* event_loop); // Creates a new context with Node.js-specific tweaks. NODE_EXTERN v8::Local NewContext( diff --git a/src/node_platform.cc b/src/node_platform.cc index ce9117ae38e7ee..52b19714e00b32 100644 --- a/src/node_platform.cc +++ b/src/node_platform.cc @@ -137,8 +137,7 @@ NodePlatform::NodePlatform(int thread_pool_size, std::make_shared(thread_pool_size); } -void NodePlatform::RegisterIsolate(IsolateData* isolate_data, uv_loop_t* loop) { - Isolate* isolate = isolate_data->isolate(); +void NodePlatform::RegisterIsolate(Isolate* isolate, uv_loop_t* loop) { Mutex::ScopedLock lock(per_isolate_mutex_); std::shared_ptr existing = per_isolate_[isolate]; if (existing) { @@ -150,8 +149,7 @@ void NodePlatform::RegisterIsolate(IsolateData* isolate_data, uv_loop_t* loop) { } } -void NodePlatform::UnregisterIsolate(IsolateData* isolate_data) { - Isolate* isolate = isolate_data->isolate(); +void NodePlatform::UnregisterIsolate(Isolate* isolate) { Mutex::ScopedLock lock(per_isolate_mutex_); std::shared_ptr existing = per_isolate_[isolate]; CHECK(existing); diff --git a/src/node_platform.h b/src/node_platform.h index 62301a302b22e0..b0730c57f14536 100644 --- a/src/node_platform.h +++ b/src/node_platform.h @@ -135,8 +135,8 @@ class NodePlatform : public MultiIsolatePlatform { v8::TracingController* GetTracingController() override; bool FlushForegroundTasks(v8::Isolate* isolate) override; - void RegisterIsolate(IsolateData* isolate_data, uv_loop_t* loop) override; - void UnregisterIsolate(IsolateData* isolate_data) override; + void RegisterIsolate(v8::Isolate* isolate, uv_loop_t* loop) override; + void UnregisterIsolate(v8::Isolate* isolate) override; std::shared_ptr GetForegroundTaskRunner( v8::Isolate* isolate) override; diff --git a/src/node_worker.cc b/src/node_worker.cc index ed6264063c9dab..af7b3d7ab92fa5 100644 --- a/src/node_worker.cc +++ b/src/node_worker.cc @@ -67,9 +67,9 @@ Worker::Worker(Environment* env, Local wrap) array_buffer_allocator_.reset(CreateArrayBufferAllocator()); - isolate_ = NewIsolate(array_buffer_allocator_.get()); - CHECK_NE(isolate_, nullptr); CHECK_EQ(uv_loop_init(&loop_), 0); + isolate_ = NewIsolate(array_buffer_allocator_.get(), &loop_); + CHECK_NE(isolate_, nullptr); thread_exit_async_.reset(new uv_async_t); thread_exit_async_->data = this; @@ -263,6 +263,7 @@ void Worker::DisposeIsolate() { platform->CancelPendingDelayedTasks(isolate_); isolate_data_.reset(); + platform->UnregisterIsolate(isolate_); isolate_->Dispose(); isolate_ = nullptr; diff --git a/test/cctest/node_test_fixture.h b/test/cctest/node_test_fixture.h index 8cba5d99ba3c64..4a729be09c2d0b 100644 --- a/test/cctest/node_test_fixture.h +++ b/test/cctest/node_test_fixture.h @@ -90,10 +90,13 @@ class NodeTestFixture : public ::testing::Test { &node::FreeArrayBufferAllocator); isolate_ = NewIsolate(allocator.get()); CHECK_NE(isolate_, nullptr); + platform->RegisterIsolate(isolate_, ¤t_loop); + v8::Isolate::Initialize(isolate_, params); } virtual void TearDown() { isolate_->Dispose(); + platform->UnregisterIsolate(isolate_); isolate_ = nullptr; } }; From d11dafac9f858591f975bed9c8748d03dcc71c4c Mon Sep 17 00:00:00 2001 From: Benedikt Meurer Date: Thu, 5 Jul 2018 09:42:52 +0200 Subject: [PATCH 14/28] v8: Prepare for swallowed rejection hook. This is done in preparation for landing https://chromium-review.googlesource.com/c/v8/v8/+/1126099 on the V8 side, which extends the existing PromiseRejectEvent mechanism with new hooks for reject/resolve after a Promise was previously resolved already. Refs: https://github.com/nodejs/promises-debugging/issues/8 Design: https://goo.gl/2stLUY --- src/bootstrapper.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc index 8bcc0493f5be6d..5f40d62a82fdef 100644 --- a/src/bootstrapper.cc +++ b/src/bootstrapper.cc @@ -69,7 +69,7 @@ void PromiseRejectCallback(PromiseRejectMessage message) { callback = env->promise_reject_handled_function(); value = Undefined(isolate); } else { - UNREACHABLE(); + return; } Local args[] = { promise, value }; From eab77c7332c5bc01b72a8fe170e250e099b361d0 Mon Sep 17 00:00:00 2001 From: Yang Guo Date: Fri, 15 Jun 2018 14:23:29 +0200 Subject: [PATCH 15/28] test: remove parallel/test-v8-stats.js --- test/parallel/test-v8-stats.js | 41 ---------------------------------- 1 file changed, 41 deletions(-) delete mode 100644 test/parallel/test-v8-stats.js diff --git a/test/parallel/test-v8-stats.js b/test/parallel/test-v8-stats.js deleted file mode 100644 index d8bee55c2b4b8f..00000000000000 --- a/test/parallel/test-v8-stats.js +++ /dev/null @@ -1,41 +0,0 @@ -'use strict'; -require('../common'); -const assert = require('assert'); -const v8 = require('v8'); - -const s = v8.getHeapStatistics(); -const keys = [ - 'does_zap_garbage', - 'heap_size_limit', - 'malloced_memory', - 'peak_malloced_memory', - 'total_available_size', - 'total_heap_size', - 'total_heap_size_executable', - 'total_physical_size', - 'used_heap_size']; -assert.deepStrictEqual(Object.keys(s).sort(), keys); -keys.forEach(function(key) { - assert.strictEqual(typeof s[key], 'number'); -}); - - -const expectedHeapSpaces = [ - 'new_space', - 'old_space', - 'read_only_space', - 'code_space', - 'map_space', - 'large_object_space', - 'read_only_space' -]; -const heapSpaceStatistics = v8.getHeapSpaceStatistics(); -const actualHeapSpaceNames = heapSpaceStatistics.map((s) => s.space_name); -assert.deepStrictEqual(actualHeapSpaceNames.sort(), expectedHeapSpaces.sort()); -heapSpaceStatistics.forEach((heapSpace) => { - assert.strictEqual(typeof heapSpace.space_name, 'string'); - assert.strictEqual(typeof heapSpace.space_size, 'number'); - assert.strictEqual(typeof heapSpace.space_used_size, 'number'); - assert.strictEqual(typeof heapSpace.space_available_size, 'number'); - assert.strictEqual(typeof heapSpace.physical_space_size, 'number'); -}); From a2d3495dcfea479fcccb212c7b5d4210c2cda0af Mon Sep 17 00:00:00 2001 From: Yang Guo Date: Wed, 11 Jul 2018 09:08:14 +0200 Subject: [PATCH 16/28] Update V8 to 80508f1457 --- deps/v8/.gitattributes | 5 + deps/v8/.gitignore | 16 +- deps/v8/AUTHORS | 8 + deps/v8/BUILD.gn | 401 +- deps/v8/ChangeLog | 4120 +-------- deps/v8/DEPS | 43 +- deps/v8/OWNERS | 1 + deps/v8/PRESUBMIT.py | 11 +- deps/v8/WATCHLISTS | 52 +- deps/v8/custom_deps/.gitignore | 4 + deps/v8/custom_deps/OWNERS | 2 + deps/v8/custom_deps/README.md | 2 + deps/v8/gni/v8.gni | 11 +- deps/v8/include/libplatform/libplatform.h | 2 +- deps/v8/include/v8-inspector.h | 1 + deps/v8/include/v8-platform.h | 114 +- deps/v8/include/v8-profiler.h | 45 +- deps/v8/include/v8-version.h | 8 +- deps/v8/include/v8.h | 524 +- deps/v8/infra/config/cq.cfg | 12 +- deps/v8/infra/mb/mb_config.pyl | 94 +- deps/v8/infra/testing/PRESUBMIT.py | 183 + deps/v8/infra/testing/README.md | 63 +- deps/v8/infra/testing/builders.pyl | 432 + deps/v8/infra/testing/client.v8.pyl | 48 - deps/v8/infra/testing/tryserver.v8.pyl | 30 - deps/v8/samples/hello-world.cc | 73 +- deps/v8/src/DEPS | 3 +- deps/v8/src/accessors.cc | 390 +- deps/v8/src/accessors.h | 21 +- deps/v8/src/address-map.h | 189 +- deps/v8/src/allocation.cc | 33 +- deps/v8/src/allocation.h | 33 +- deps/v8/src/api-arguments-inl.h | 4 +- deps/v8/src/api-arguments.h | 12 +- deps/v8/src/api-natives.cc | 27 +- deps/v8/src/api-natives.h | 2 +- deps/v8/src/api.cc | 1249 +-- deps/v8/src/api.h | 32 +- deps/v8/src/arguments.h | 2 +- deps/v8/src/arm/assembler-arm-inl.h | 87 +- deps/v8/src/arm/assembler-arm.cc | 140 +- deps/v8/src/arm/assembler-arm.h | 142 +- deps/v8/src/arm/code-stubs-arm.cc | 722 +- deps/v8/src/arm/constants-arm.h | 51 +- deps/v8/src/arm/deoptimizer-arm.cc | 9 +- deps/v8/src/arm/disasm-arm.cc | 2 +- deps/v8/src/arm/frame-constants-arm.h | 16 + deps/v8/src/arm/interface-descriptors-arm.cc | 101 +- deps/v8/src/arm/interface-descriptors-arm.h | 26 - deps/v8/src/arm/macro-assembler-arm.cc | 311 +- deps/v8/src/arm/macro-assembler-arm.h | 69 +- deps/v8/src/arm/simulator-arm.cc | 32 +- deps/v8/src/arm/simulator-arm.h | 14 +- deps/v8/src/arm64/assembler-arm64-inl.h | 215 +- deps/v8/src/arm64/assembler-arm64.cc | 171 +- deps/v8/src/arm64/assembler-arm64.h | 178 +- deps/v8/src/arm64/code-stubs-arm64.cc | 835 +- deps/v8/src/arm64/constants-arm64.h | 6 + deps/v8/src/arm64/deoptimizer-arm64.cc | 59 +- deps/v8/src/arm64/frame-constants-arm64.h | 18 + deps/v8/src/arm64/instructions-arm64.cc | 14 +- deps/v8/src/arm64/instructions-arm64.h | 13 +- deps/v8/src/arm64/instrument-arm64.cc | 1 + .../src/arm64/interface-descriptors-arm64.cc | 104 +- .../src/arm64/interface-descriptors-arm64.h | 26 - deps/v8/src/arm64/macro-assembler-arm64-inl.h | 63 +- deps/v8/src/arm64/macro-assembler-arm64.cc | 444 +- deps/v8/src/arm64/macro-assembler-arm64.h | 160 +- deps/v8/src/arm64/simulator-arm64.cc | 8 +- deps/v8/src/arm64/simulator-arm64.h | 4 +- deps/v8/src/asan.h | 30 + deps/v8/src/asmjs/asm-js.cc | 6 +- deps/v8/src/asmjs/asm-parser.cc | 24 +- deps/v8/src/asmjs/asm-scanner.cc | 19 +- deps/v8/src/assembler-arch.h | 30 + deps/v8/src/assembler.cc | 325 +- deps/v8/src/assembler.h | 355 +- deps/v8/src/ast/ast-traversal-visitor.h | 22 +- deps/v8/src/ast/ast-value-factory.cc | 3 - deps/v8/src/ast/ast.cc | 125 +- deps/v8/src/ast/ast.h | 263 +- deps/v8/src/ast/compile-time-value.cc | 53 - deps/v8/src/ast/compile-time-value.h | 46 - deps/v8/src/ast/modules.cc | 2 +- deps/v8/src/ast/prettyprinter.cc | 23 +- deps/v8/src/ast/prettyprinter.h | 16 +- deps/v8/src/ast/scopes.cc | 199 +- deps/v8/src/ast/scopes.h | 22 +- deps/v8/src/ast/variables.cc | 2 +- deps/v8/src/ast/variables.h | 9 +- deps/v8/src/async-hooks-wrapper.cc | 259 + deps/v8/src/async-hooks-wrapper.h | 95 + deps/v8/src/bailout-reason.h | 3 +- deps/v8/src/base/adapters.h | 12 +- deps/v8/src/base/atomic-utils.h | 1 + deps/v8/src/base/flags.h | 40 +- deps/v8/src/base/ieee754.cc | 1 + deps/v8/src/base/list.h | 136 + deps/v8/src/base/logging.cc | 3 +- deps/v8/src/base/macros.h | 32 +- deps/v8/src/base/platform/mutex.h | 16 +- deps/v8/src/base/platform/platform-cygwin.cc | 2 + deps/v8/src/base/platform/platform-fuchsia.cc | 2 + deps/v8/src/base/platform/platform-posix.cc | 14 + deps/v8/src/base/platform/platform-win32.cc | 2 + deps/v8/src/base/platform/platform.h | 5 +- deps/v8/src/base/platform/time.cc | 31 +- deps/v8/src/base/template-utils.h | 7 - deps/v8/src/bootstrapper.cc | 2893 +++--- deps/v8/src/bootstrapper.h | 6 +- deps/v8/src/builtins/arm/builtins-arm.cc | 931 +- deps/v8/src/builtins/arm64/builtins-arm64.cc | 1025 ++- deps/v8/src/builtins/array-foreach.tq | 173 + deps/v8/src/builtins/array-sort.tq | 8 + deps/v8/src/builtins/array.tq | 309 + deps/v8/src/builtins/base.tq | 701 ++ deps/v8/src/builtins/builtins-api.cc | 13 +- .../v8/src/builtins/builtins-arguments-gen.cc | 4 +- deps/v8/src/builtins/builtins-array-gen.cc | 876 +- deps/v8/src/builtins/builtins-array-gen.h | 55 +- deps/v8/src/builtins/builtins-array.cc | 212 +- deps/v8/src/builtins/builtins-arraybuffer.cc | 3 +- .../builtins/builtins-async-function-gen.cc | 99 +- deps/v8/src/builtins/builtins-async-gen.cc | 122 +- deps/v8/src/builtins/builtins-async-gen.h | 28 + .../builtins/builtins-async-generator-gen.cc | 72 +- .../builtins/builtins-async-iterator-gen.cc | 141 + deps/v8/src/builtins/builtins-bigint.cc | 7 +- deps/v8/src/builtins/builtins-boolean.cc | 4 +- deps/v8/src/builtins/builtins-call-gen.cc | 210 +- deps/v8/src/builtins/builtins-call-gen.h | 21 +- deps/v8/src/builtins/builtins-callsite.cc | 6 +- .../src/builtins/builtins-collections-gen.cc | 380 +- deps/v8/src/builtins/builtins-collections.cc | 9 +- deps/v8/src/builtins/builtins-console-gen.cc | 12 +- deps/v8/src/builtins/builtins-console.cc | 47 +- .../src/builtins/builtins-constructor-gen.cc | 159 +- .../src/builtins/builtins-constructor-gen.h | 4 - .../src/builtins/builtins-conversion-gen.cc | 2 +- deps/v8/src/builtins/builtins-data-view-gen.h | 67 + deps/v8/src/builtins/builtins-dataview.cc | 294 - deps/v8/src/builtins/builtins-date-gen.cc | 2 +- deps/v8/src/builtins/builtins-date.cc | 62 +- deps/v8/src/builtins/builtins-definitions.h | 760 +- deps/v8/src/builtins/builtins-descriptors.h | 25 +- deps/v8/src/builtins/builtins-error.cc | 3 +- deps/v8/src/builtins/builtins-function-gen.cc | 42 +- deps/v8/src/builtins/builtins-function.cc | 15 +- .../v8/src/builtins/builtins-generator-gen.cc | 24 +- deps/v8/src/builtins/builtins-global.cc | 2 +- deps/v8/src/builtins/builtins-ic-gen.cc | 1 - deps/v8/src/builtins/builtins-internal-gen.cc | 311 +- deps/v8/src/builtins/builtins-internal.cc | 2 +- deps/v8/src/builtins/builtins-intl-gen.cc | 8 +- deps/v8/src/builtins/builtins-intl.cc | 436 +- deps/v8/src/builtins/builtins-json.cc | 2 +- deps/v8/src/builtins/builtins-lazy-gen.cc | 203 + deps/v8/src/builtins/builtins-lazy-gen.h | 37 + deps/v8/src/builtins/builtins-math-gen.cc | 43 +- deps/v8/src/builtins/builtins-math.cc | 2 +- deps/v8/src/builtins/builtins-number-gen.cc | 101 +- deps/v8/src/builtins/builtins-number.cc | 24 +- deps/v8/src/builtins/builtins-object-gen.cc | 480 +- deps/v8/src/builtins/builtins-object.cc | 72 +- deps/v8/src/builtins/builtins-promise-gen.cc | 167 +- deps/v8/src/builtins/builtins-promise-gen.h | 9 +- deps/v8/src/builtins/builtins-proxy-gen.cc | 32 +- deps/v8/src/builtins/builtins-reflect.cc | 18 +- deps/v8/src/builtins/builtins-regexp-gen.cc | 477 +- deps/v8/src/builtins/builtins-regexp-gen.h | 18 +- deps/v8/src/builtins/builtins-regexp.cc | 18 +- .../builtins-sharedarraybuffer-gen.cc | 14 +- .../builtins/builtins-sharedarraybuffer.cc | 8 +- deps/v8/src/builtins/builtins-string-gen.cc | 413 +- deps/v8/src/builtins/builtins-string-gen.h | 18 +- deps/v8/src/builtins/builtins-string.cc | 45 +- deps/v8/src/builtins/builtins-symbol-gen.cc | 10 + deps/v8/src/builtins/builtins-symbol.cc | 2 +- deps/v8/src/builtins/builtins-test-gen.h | 22 + ...ray-gen.cc => builtins-typed-array-gen.cc} | 353 +- ...array-gen.h => builtins-typed-array-gen.h} | 33 +- ...-typedarray.cc => builtins-typed-array.cc} | 15 +- deps/v8/src/builtins/builtins-utils-gen.h | 5 - deps/v8/src/builtins/builtins-wasm-gen.cc | 106 +- deps/v8/src/builtins/builtins.cc | 465 +- deps/v8/src/builtins/builtins.h | 49 +- .../src/builtins/constants-table-builder.cc | 46 +- .../v8/src/builtins/constants-table-builder.h | 6 + deps/v8/src/builtins/data-view.tq | 886 ++ deps/v8/src/builtins/ia32/builtins-ia32.cc | 1023 ++- deps/v8/src/builtins/mips/builtins-mips.cc | 1078 ++- .../v8/src/builtins/mips64/builtins-mips64.cc | 1090 +-- deps/v8/src/builtins/ppc/builtins-ppc.cc | 1011 ++- deps/v8/src/builtins/s390/builtins-s390.cc | 1011 ++- .../src/builtins/setup-builtins-internal.cc | 88 +- deps/v8/src/builtins/typed-array.tq | 340 + deps/v8/src/builtins/x64/builtins-x64.cc | 1121 +-- deps/v8/src/checks.h | 5 +- deps/v8/src/code-events.h | 5 +- deps/v8/src/code-factory.cc | 301 +- deps/v8/src/code-factory.h | 34 +- deps/v8/src/code-reference.cc | 53 + deps/v8/src/code-reference.h | 62 + deps/v8/src/code-stub-assembler.cc | 2373 +++-- deps/v8/src/code-stub-assembler.h | 1207 ++- deps/v8/src/code-stubs.cc | 282 +- deps/v8/src/code-stubs.h | 362 +- deps/v8/src/compilation-cache.cc | 47 +- deps/v8/src/compilation-cache.h | 10 +- deps/v8/src/compilation-dependencies.cc | 153 - deps/v8/src/compilation-dependencies.h | 74 - .../compiler-dispatcher.cc | 4 +- .../optimizing-compile-dispatcher.cc | 2 +- .../unoptimized-compile-job.cc | 56 +- .../unoptimized-compile-job.h | 1 - deps/v8/src/compiler.cc | 195 +- deps/v8/src/compiler.h | 4 +- deps/v8/src/compiler/OWNERS | 2 + deps/v8/src/compiler/access-builder.cc | 83 +- deps/v8/src/compiler/access-builder.h | 19 +- deps/v8/src/compiler/access-info.cc | 88 +- deps/v8/src/compiler/access-info.h | 14 +- deps/v8/src/compiler/allocation-builder.h | 13 +- .../v8/src/compiler/arm/code-generator-arm.cc | 234 +- .../compiler/arm/instruction-selector-arm.cc | 81 +- .../compiler/arm64/code-generator-arm64.cc | 398 +- .../compiler/arm64/instruction-codes-arm64.h | 639 +- .../arm64/instruction-scheduler-arm64.cc | 18 + .../arm64/instruction-selector-arm64.cc | 362 +- deps/v8/src/compiler/branch-elimination.cc | 35 +- deps/v8/src/compiler/branch-elimination.h | 1 + .../v8/src/compiler/bytecode-graph-builder.cc | 194 +- deps/v8/src/compiler/bytecode-graph-builder.h | 1 + .../v8/src/compiler/checkpoint-elimination.cc | 1 + deps/v8/src/compiler/code-assembler.cc | 496 +- deps/v8/src/compiler/code-assembler.h | 271 +- deps/v8/src/compiler/code-generator.cc | 129 +- deps/v8/src/compiler/code-generator.h | 32 +- .../src/compiler/common-operator-reducer.cc | 20 +- .../v8/src/compiler/common-operator-reducer.h | 3 + deps/v8/src/compiler/common-operator.cc | 108 +- deps/v8/src/compiler/common-operator.h | 38 +- .../src/compiler/compilation-dependencies.cc | 359 + .../src/compiler/compilation-dependencies.h | 77 + .../compiler-source-position-table.cc | 6 +- .../compiler/compiler-source-position-table.h | 2 +- .../src/compiler/constant-folding-reducer.cc | 70 + .../src/compiler/constant-folding-reducer.h | 42 + deps/v8/src/compiler/dead-code-elimination.cc | 5 +- deps/v8/src/compiler/diamond.h | 4 + .../src/compiler/effect-control-linearizer.cc | 516 +- .../src/compiler/effect-control-linearizer.h | 9 +- .../src/compiler/escape-analysis-reducer.cc | 8 +- .../v8/src/compiler/escape-analysis-reducer.h | 3 +- deps/v8/src/compiler/escape-analysis.cc | 19 +- deps/v8/src/compiler/escape-analysis.h | 1 + deps/v8/src/compiler/frame.h | 3 - deps/v8/src/compiler/graph-assembler.cc | 30 +- deps/v8/src/compiler/graph-assembler.h | 17 +- deps/v8/src/compiler/graph-reducer.cc | 12 +- deps/v8/src/compiler/graph-trimmer.cc | 5 +- deps/v8/src/compiler/graph-visualizer.cc | 193 +- deps/v8/src/compiler/graph-visualizer.h | 72 +- deps/v8/src/compiler/graph.cc | 5 +- .../src/compiler/ia32/code-generator-ia32.cc | 1085 ++- .../compiler/ia32/instruction-codes-ia32.h | 69 +- .../ia32/instruction-scheduler-ia32.cc | 65 +- .../ia32/instruction-selector-ia32.cc | 560 +- deps/v8/src/compiler/instruction-codes.h | 4 +- deps/v8/src/compiler/instruction-scheduler.cc | 4 +- .../src/compiler/instruction-selector-impl.h | 26 +- deps/v8/src/compiler/instruction-selector.cc | 410 +- deps/v8/src/compiler/instruction-selector.h | 165 +- deps/v8/src/compiler/instruction.cc | 38 +- deps/v8/src/compiler/int64-lowering.cc | 45 +- deps/v8/src/compiler/int64-lowering.h | 11 +- deps/v8/src/compiler/js-builtin-reducer.cc | 449 - deps/v8/src/compiler/js-builtin-reducer.h | 73 - deps/v8/src/compiler/js-call-reducer.cc | 1141 ++- deps/v8/src/compiler/js-call-reducer.h | 27 +- .../src/compiler/js-context-specialization.cc | 73 +- .../src/compiler/js-context-specialization.h | 6 +- deps/v8/src/compiler/js-create-lowering.cc | 875 +- deps/v8/src/compiler/js-create-lowering.h | 24 +- deps/v8/src/compiler/js-generic-lowering.cc | 64 +- deps/v8/src/compiler/js-generic-lowering.h | 3 +- deps/v8/src/compiler/js-graph.cc | 325 +- deps/v8/src/compiler/js-graph.h | 193 +- deps/v8/src/compiler/js-heap-broker.cc | 648 ++ deps/v8/src/compiler/js-heap-broker.h | 359 + deps/v8/src/compiler/js-inlining-heuristic.cc | 10 +- deps/v8/src/compiler/js-inlining-heuristic.h | 1 + deps/v8/src/compiler/js-inlining.cc | 73 +- deps/v8/src/compiler/js-inlining.h | 1 + deps/v8/src/compiler/js-intrinsic-lowering.cc | 6 +- .../js-native-context-specialization.cc | 273 +- .../js-native-context-specialization.h | 13 +- deps/v8/src/compiler/js-operator.cc | 85 +- deps/v8/src/compiler/js-operator.h | 67 +- deps/v8/src/compiler/js-type-hint-lowering.cc | 3 + deps/v8/src/compiler/js-type-hint-lowering.h | 1 + deps/v8/src/compiler/js-typed-lowering.cc | 416 +- deps/v8/src/compiler/js-typed-lowering.h | 9 +- deps/v8/src/compiler/linkage.cc | 145 +- deps/v8/src/compiler/linkage.h | 21 +- deps/v8/src/compiler/load-elimination.cc | 23 +- deps/v8/src/compiler/load-elimination.h | 1 + deps/v8/src/compiler/loop-peeling.cc | 7 +- deps/v8/src/compiler/loop-peeling.h | 8 +- .../src/compiler/loop-variable-optimizer.cc | 19 +- .../v8/src/compiler/machine-graph-verifier.cc | 30 +- deps/v8/src/compiler/machine-graph.cc | 99 + deps/v8/src/compiler/machine-graph.h | 92 + .../src/compiler/machine-operator-reducer.cc | 24 +- .../src/compiler/machine-operator-reducer.h | 9 +- deps/v8/src/compiler/machine-operator.cc | 53 +- deps/v8/src/compiler/machine-operator.h | 52 +- deps/v8/src/compiler/memory-optimizer.cc | 35 +- deps/v8/src/compiler/memory-optimizer.h | 6 +- .../src/compiler/mips/code-generator-mips.cc | 219 +- .../mips/instruction-scheduler-mips.cc | 1713 +++- .../mips/instruction-selector-mips.cc | 47 +- .../compiler/mips64/code-generator-mips64.cc | 225 +- .../mips64/instruction-scheduler-mips64.cc | 1666 +++- .../mips64/instruction-selector-mips64.cc | 46 +- deps/v8/src/compiler/node-matchers.h | 103 +- deps/v8/src/compiler/node-origin-table.cc | 88 + deps/v8/src/compiler/node-origin-table.h | 141 + deps/v8/src/compiler/node-properties.cc | 31 +- deps/v8/src/compiler/node-properties.h | 26 +- deps/v8/src/compiler/node.cc | 17 +- deps/v8/src/compiler/node.h | 9 +- deps/v8/src/compiler/opcodes.h | 20 +- deps/v8/src/compiler/operation-typer.cc | 743 +- deps/v8/src/compiler/operation-typer.h | 78 +- deps/v8/src/compiler/operator-properties.cc | 4 + deps/v8/src/compiler/pipeline-statistics.cc | 9 +- deps/v8/src/compiler/pipeline-statistics.h | 5 +- deps/v8/src/compiler/pipeline.cc | 923 +- deps/v8/src/compiler/pipeline.h | 53 +- .../v8/src/compiler/ppc/code-generator-ppc.cc | 318 +- .../compiler/ppc/instruction-selector-ppc.cc | 123 +- .../src/compiler/property-access-builder.cc | 33 +- .../v8/src/compiler/property-access-builder.h | 10 +- deps/v8/src/compiler/raw-machine-assembler.cc | 18 +- deps/v8/src/compiler/raw-machine-assembler.h | 41 +- .../v8/src/compiler/redundancy-elimination.cc | 2 +- .../compiler/register-allocator-verifier.cc | 2 +- deps/v8/src/compiler/register-allocator.cc | 138 +- deps/v8/src/compiler/register-allocator.h | 33 +- deps/v8/src/compiler/representation-change.cc | 147 +- deps/v8/src/compiler/representation-change.h | 20 +- .../src/compiler/s390/code-generator-s390.cc | 573 +- .../s390/instruction-selector-s390.cc | 133 +- deps/v8/src/compiler/schedule.cc | 17 +- deps/v8/src/compiler/scheduler.cc | 8 +- deps/v8/src/compiler/simd-scalar-lowering.cc | 363 +- deps/v8/src/compiler/simd-scalar-lowering.h | 29 +- deps/v8/src/compiler/simplified-lowering.cc | 594 +- deps/v8/src/compiler/simplified-lowering.h | 13 +- .../compiler/simplified-operator-reducer.cc | 15 +- .../compiler/simplified-operator-reducer.h | 8 +- deps/v8/src/compiler/simplified-operator.cc | 127 +- deps/v8/src/compiler/simplified-operator.h | 87 +- .../src/compiler/store-store-elimination.cc | 1 + deps/v8/src/compiler/type-cache.h | 119 +- .../v8/src/compiler/type-narrowing-reducer.cc | 88 + deps/v8/src/compiler/type-narrowing-reducer.h | 45 + deps/v8/src/compiler/typed-optimization.cc | 325 +- deps/v8/src/compiler/typed-optimization.h | 20 +- deps/v8/src/compiler/typer.cc | 1665 ++-- deps/v8/src/compiler/typer.h | 14 +- deps/v8/src/compiler/types.cc | 553 +- deps/v8/src/compiler/types.h | 519 +- .../src/compiler/value-numbering-reducer.cc | 8 +- deps/v8/src/compiler/verifier.cc | 123 +- deps/v8/src/compiler/wasm-compiler.cc | 3798 ++++---- deps/v8/src/compiler/wasm-compiler.h | 292 +- deps/v8/src/compiler/wasm-linkage.cc | 367 - .../v8/src/compiler/x64/code-generator-x64.cc | 311 +- .../compiler/x64/instruction-selector-x64.cc | 450 +- deps/v8/src/contexts-inl.h | 12 +- deps/v8/src/contexts.cc | 112 +- deps/v8/src/contexts.h | 72 +- deps/v8/src/conversions-inl.h | 21 +- deps/v8/src/conversions.cc | 9 +- deps/v8/src/conversions.h | 10 +- deps/v8/src/counters.cc | 2 +- deps/v8/src/counters.h | 39 +- deps/v8/src/d8.cc | 251 +- deps/v8/src/d8.h | 105 +- deps/v8/src/d8.js | 3 +- deps/v8/src/date.cc | 10 +- deps/v8/src/date.h | 2 + deps/v8/src/debug/arm/debug-arm.cc | 4 +- deps/v8/src/debug/arm64/debug-arm64.cc | 4 +- deps/v8/src/debug/debug-coverage.cc | 4 +- deps/v8/src/debug/debug-evaluate.cc | 256 +- deps/v8/src/debug/debug-evaluate.h | 30 +- deps/v8/src/debug/debug-frames.cc | 119 +- deps/v8/src/debug/debug-frames.h | 34 +- deps/v8/src/debug/debug-interface.h | 112 +- deps/v8/src/debug/debug-scope-iterator.cc | 68 +- deps/v8/src/debug/debug-scope-iterator.h | 9 +- deps/v8/src/debug/debug-scopes.cc | 1252 ++- deps/v8/src/debug/debug-scopes.h | 126 +- .../src/debug/debug-stack-trace-iterator.cc | 8 +- .../v8/src/debug/debug-stack-trace-iterator.h | 2 +- deps/v8/src/debug/debug-type-profile.cc | 2 +- deps/v8/src/debug/debug.cc | 886 +- deps/v8/src/debug/debug.h | 178 +- deps/v8/src/debug/debug.js | 379 - deps/v8/src/debug/ia32/debug-ia32.cc | 4 +- deps/v8/src/debug/interface-types.h | 43 +- deps/v8/src/debug/liveedit.cc | 1768 ++-- deps/v8/src/debug/liveedit.h | 343 +- deps/v8/src/debug/liveedit.js | 1058 --- deps/v8/src/debug/mips/debug-mips.cc | 4 +- deps/v8/src/debug/mips64/debug-mips64.cc | 4 +- deps/v8/src/debug/mirrors.js | 2439 ------ deps/v8/src/debug/ppc/debug-ppc.cc | 4 +- deps/v8/src/debug/s390/debug-s390.cc | 2 +- deps/v8/src/debug/x64/debug-x64.cc | 2 +- deps/v8/src/deoptimizer.cc | 1062 +-- deps/v8/src/deoptimizer.h | 107 +- deps/v8/src/disassembler.cc | 124 +- deps/v8/src/disassembler.h | 4 +- deps/v8/src/eh-frame.cc | 13 +- deps/v8/src/eh-frame.h | 14 +- deps/v8/src/elements-kind.cc | 3 + deps/v8/src/elements-kind.h | 2 + deps/v8/src/elements.cc | 424 +- deps/v8/src/elements.h | 7 +- deps/v8/src/execution.cc | 93 +- deps/v8/src/execution.h | 23 +- .../externalize-string-extension.cc | 8 - deps/v8/src/external-reference-table.cc | 18 +- deps/v8/src/external-reference-table.h | 18 +- deps/v8/src/external-reference.cc | 635 +- deps/v8/src/external-reference.h | 316 +- deps/v8/src/feedback-vector-inl.h | 89 +- deps/v8/src/feedback-vector.cc | 421 +- deps/v8/src/feedback-vector.h | 54 +- deps/v8/src/flag-definitions.h | 123 +- deps/v8/src/flags.cc | 93 +- deps/v8/src/flags.h | 11 +- deps/v8/src/frame-constants.h | 14 +- deps/v8/src/frames-inl.h | 4 + deps/v8/src/frames.cc | 286 +- deps/v8/src/frames.h | 55 +- deps/v8/src/futex-emulation.cc | 172 +- deps/v8/src/futex-emulation.h | 33 + deps/v8/src/gdb-jit.cc | 77 +- deps/v8/src/global-handles.cc | 95 +- deps/v8/src/global-handles.h | 15 +- deps/v8/src/globals.h | 175 +- deps/v8/src/handler-table.cc | 3 +- deps/v8/src/handles-inl.h | 74 +- deps/v8/src/handles.cc | 5 +- deps/v8/src/handles.h | 45 +- deps/v8/src/heap-symbols.h | 33 +- deps/v8/src/heap/array-buffer-collector.cc | 11 +- deps/v8/src/heap/array-buffer-collector.h | 4 +- deps/v8/src/heap/array-buffer-tracker-inl.h | 42 +- deps/v8/src/heap/array-buffer-tracker.cc | 62 +- deps/v8/src/heap/array-buffer-tracker.h | 24 +- deps/v8/src/heap/code-stats.cc | 49 +- deps/v8/src/heap/concurrent-marking.cc | 111 +- deps/v8/src/heap/concurrent-marking.h | 11 +- deps/v8/src/heap/embedder-tracing.cc | 9 +- deps/v8/src/heap/embedder-tracing.h | 4 +- deps/v8/src/heap/factory-inl.h | 37 +- deps/v8/src/heap/factory.cc | 881 +- deps/v8/src/heap/factory.h | 171 +- deps/v8/src/heap/gc-tracer.cc | 32 +- deps/v8/src/heap/gc-tracer.h | 5 + deps/v8/src/heap/heap-controller.cc | 160 + deps/v8/src/heap/heap-controller.h | 55 + deps/v8/src/heap/heap-inl.h | 117 +- deps/v8/src/heap/heap.cc | 1038 +-- deps/v8/src/heap/heap.h | 814 +- deps/v8/src/heap/incremental-marking-inl.h | 6 +- deps/v8/src/heap/incremental-marking.cc | 169 +- deps/v8/src/heap/incremental-marking.h | 16 +- deps/v8/src/heap/local-allocator.h | 4 +- deps/v8/src/heap/mark-compact-inl.h | 78 +- deps/v8/src/heap/mark-compact.cc | 732 +- deps/v8/src/heap/mark-compact.h | 177 +- deps/v8/src/heap/marking.h | 20 +- deps/v8/src/heap/memory-reducer.cc | 24 +- deps/v8/src/heap/memory-reducer.h | 9 +- deps/v8/src/heap/object-stats.cc | 231 +- deps/v8/src/heap/object-stats.h | 109 +- deps/v8/src/heap/objects-visiting-inl.h | 14 + deps/v8/src/heap/objects-visiting.cc | 15 +- deps/v8/src/heap/objects-visiting.h | 79 +- deps/v8/src/heap/remembered-set.h | 17 +- deps/v8/src/heap/scavenger-inl.h | 24 +- deps/v8/src/heap/scavenger.cc | 12 +- deps/v8/src/heap/scavenger.h | 8 +- deps/v8/src/heap/setup-heap-internal.cc | 367 +- deps/v8/src/heap/spaces-inl.h | 24 +- deps/v8/src/heap/spaces.cc | 924 +- deps/v8/src/heap/spaces.h | 508 +- deps/v8/src/heap/store-buffer.cc | 14 +- deps/v8/src/heap/store-buffer.h | 10 +- deps/v8/src/heap/sweeper.cc | 24 +- deps/v8/src/heap/sweeper.h | 2 +- deps/v8/src/heap/worklist.h | 43 +- deps/v8/src/ia32/assembler-ia32-inl.h | 47 +- deps/v8/src/ia32/assembler-ia32.cc | 154 +- deps/v8/src/ia32/assembler-ia32.h | 83 +- deps/v8/src/ia32/code-stubs-ia32.cc | 724 +- deps/v8/src/ia32/constants-ia32.h | 23 + deps/v8/src/ia32/deoptimizer-ia32.cc | 12 +- deps/v8/src/ia32/disasm-ia32.cc | 48 +- deps/v8/src/ia32/frame-constants-ia32.h | 16 + .../v8/src/ia32/interface-descriptors-ia32.cc | 98 +- deps/v8/src/ia32/macro-assembler-ia32.cc | 286 +- deps/v8/src/ia32/macro-assembler-ia32.h | 163 +- deps/v8/src/ia32/sse-instr.h | 19 +- deps/v8/src/ic/accessor-assembler.cc | 638 +- deps/v8/src/ic/accessor-assembler.h | 71 +- deps/v8/src/ic/binary-op-assembler.cc | 56 +- deps/v8/src/ic/call-optimization.cc | 33 +- deps/v8/src/ic/call-optimization.h | 10 +- deps/v8/src/ic/handler-configuration-inl.h | 13 +- deps/v8/src/ic/handler-configuration.cc | 57 +- deps/v8/src/ic/handler-configuration.h | 14 +- deps/v8/src/ic/ic-inl.h | 16 +- deps/v8/src/ic/ic.cc | 308 +- deps/v8/src/ic/ic.h | 47 +- deps/v8/src/ic/keyed-store-generic.cc | 170 +- deps/v8/src/ic/keyed-store-generic.h | 14 +- deps/v8/src/ic/stub-cache.cc | 23 +- deps/v8/src/ic/stub-cache.h | 6 +- deps/v8/src/identity-map.cc | 41 +- deps/v8/src/identity-map.h | 17 +- deps/v8/src/inspector/DEPS | 1 + deps/v8/src/inspector/PRESUBMIT.py | 3 +- deps/v8/src/inspector/injected-script.cc | 1 + deps/v8/src/inspector/inspected-context.cc | 2 +- deps/v8/src/inspector/js_protocol.json | 113 + deps/v8/src/inspector/js_protocol.pdl | 60 + deps/v8/src/inspector/v8-console-message.cc | 8 + deps/v8/src/inspector/v8-console-message.h | 3 + deps/v8/src/inspector/v8-console.cc | 111 +- deps/v8/src/inspector/v8-console.h | 10 +- .../src/inspector/v8-debugger-agent-impl.cc | 188 +- .../v8/src/inspector/v8-debugger-agent-impl.h | 4 + deps/v8/src/inspector/v8-debugger-script.cc | 83 +- deps/v8/src/inspector/v8-debugger-script.h | 2 +- deps/v8/src/inspector/v8-debugger.cc | 147 +- deps/v8/src/inspector/v8-debugger.h | 15 +- deps/v8/src/inspector/v8-inspector-impl.cc | 49 + deps/v8/src/inspector/v8-inspector-impl.h | 16 + .../v8/src/inspector/v8-runtime-agent-impl.cc | 125 +- deps/v8/src/inspector/v8-runtime-agent-impl.h | 12 + deps/v8/src/inspector/v8-stack-trace-impl.cc | 24 +- deps/v8/src/inspector/v8-stack-trace-impl.h | 14 +- deps/v8/src/instruction-stream.cc | 27 +- deps/v8/src/instruction-stream.h | 2 - deps/v8/src/interface-descriptors.cc | 562 +- deps/v8/src/interface-descriptors.h | 877 +- .../interpreter/bytecode-array-accessor.cc | 38 +- .../src/interpreter/bytecode-array-accessor.h | 6 +- .../src/interpreter/bytecode-array-builder.cc | 62 +- .../src/interpreter/bytecode-array-builder.h | 38 +- .../src/interpreter/bytecode-array-writer.cc | 9 +- deps/v8/src/interpreter/bytecode-decoder.cc | 20 +- deps/v8/src/interpreter/bytecode-decoder.h | 8 +- deps/v8/src/interpreter/bytecode-generator.cc | 385 +- deps/v8/src/interpreter/bytecode-generator.h | 20 +- deps/v8/src/interpreter/bytecode-node.h | 83 +- .../interpreter/bytecode-register-optimizer.h | 2 +- deps/v8/src/interpreter/bytecodes.h | 21 +- .../src/interpreter/constant-array-builder.h | 16 +- .../src/interpreter/interpreter-assembler.cc | 235 +- .../src/interpreter/interpreter-assembler.h | 39 +- .../src/interpreter/interpreter-generator.cc | 229 +- .../interpreter-intrinsics-generator.cc | 12 - .../src/interpreter/interpreter-intrinsics.h | 2 - deps/v8/src/interpreter/interpreter.cc | 12 +- deps/v8/src/interpreter/interpreter.h | 2 +- .../interpreter/setup-interpreter-internal.cc | 9 +- deps/v8/src/intl.cc | 2 +- deps/v8/src/intl.h | 8 + deps/v8/src/isolate-inl.h | 11 +- deps/v8/src/isolate.cc | 680 +- deps/v8/src/isolate.h | 350 +- deps/v8/src/js/array.js | 246 +- deps/v8/src/js/intl.js | 161 +- deps/v8/src/js/macros.py | 8 + deps/v8/src/js/typedarray.js | 22 - deps/v8/src/json-parser.cc | 20 +- deps/v8/src/json-parser.h | 11 +- deps/v8/src/json-stringifier.cc | 15 +- deps/v8/src/json-stringifier.h | 38 +- deps/v8/src/keys.cc | 44 +- deps/v8/src/keys.h | 1 + deps/v8/src/label.h | 14 +- deps/v8/src/layout-descriptor-inl.h | 13 +- deps/v8/src/layout-descriptor.cc | 22 +- deps/v8/src/layout-descriptor.h | 6 +- deps/v8/src/libplatform/default-platform.cc | 13 +- deps/v8/src/libplatform/default-platform.h | 4 +- .../default-worker-threads-task-runner.cc | 8 +- deps/v8/src/log-utils.cc | 2 +- deps/v8/src/log.cc | 338 +- deps/v8/src/log.h | 62 +- deps/v8/src/lookup.cc | 102 +- deps/v8/src/lookup.h | 12 +- deps/v8/src/lsan.h | 31 + deps/v8/src/machine-type.h | 8 +- deps/v8/src/macro-assembler.h | 22 +- deps/v8/src/managed.h | 104 - deps/v8/src/map-updater.cc | 96 +- deps/v8/src/map-updater.h | 6 +- deps/v8/src/messages.cc | 84 +- deps/v8/src/messages.h | 14 +- deps/v8/src/mips/assembler-mips-inl.h | 52 +- deps/v8/src/mips/assembler-mips.cc | 77 +- deps/v8/src/mips/assembler-mips.h | 65 +- deps/v8/src/mips/code-stubs-mips.cc | 852 +- deps/v8/src/mips/constants-mips.h | 20 +- deps/v8/src/mips/deoptimizer-mips.cc | 23 +- deps/v8/src/mips/frame-constants-mips.h | 16 + .../v8/src/mips/interface-descriptors-mips.cc | 95 +- deps/v8/src/mips/macro-assembler-mips.cc | 511 +- deps/v8/src/mips/macro-assembler-mips.h | 120 +- deps/v8/src/mips/simulator-mips.cc | 36 +- deps/v8/src/mips/simulator-mips.h | 12 +- deps/v8/src/mips64/assembler-mips64-inl.h | 48 +- deps/v8/src/mips64/assembler-mips64.cc | 71 +- deps/v8/src/mips64/assembler-mips64.h | 63 +- deps/v8/src/mips64/code-stubs-mips64.cc | 858 +- deps/v8/src/mips64/constants-mips64.h | 23 +- deps/v8/src/mips64/deoptimizer-mips64.cc | 23 +- deps/v8/src/mips64/frame-constants-mips64.h | 16 + .../mips64/interface-descriptors-mips64.cc | 95 +- deps/v8/src/mips64/macro-assembler-mips64.cc | 467 +- deps/v8/src/mips64/macro-assembler-mips64.h | 139 +- deps/v8/src/mips64/simulator-mips64.cc | 36 +- deps/v8/src/mips64/simulator-mips64.h | 12 +- deps/v8/src/msan.h | 35 +- deps/v8/src/objects-body-descriptors-inl.h | 161 +- deps/v8/src/objects-debug.cc | 1017 ++- deps/v8/src/objects-definitions.h | 343 + deps/v8/src/objects-inl.h | 884 +- deps/v8/src/objects-printer.cc | 846 +- deps/v8/src/objects.cc | 3606 ++++---- deps/v8/src/objects.h | 1438 +-- deps/v8/src/objects/api-callbacks-inl.h | 139 + deps/v8/src/objects/api-callbacks.h | 215 + deps/v8/src/objects/arguments-inl.h | 2 - deps/v8/src/objects/arguments.h | 2 +- deps/v8/src/objects/bigint.cc | 510 +- deps/v8/src/objects/bigint.h | 63 +- deps/v8/src/objects/code-inl.h | 100 +- deps/v8/src/objects/code.h | 139 +- deps/v8/src/objects/compilation-cache-inl.h | 2 +- deps/v8/src/objects/compilation-cache.h | 8 +- deps/v8/src/objects/data-handler-inl.h | 4 +- deps/v8/src/objects/data-handler.h | 4 +- deps/v8/src/objects/debug-objects-inl.h | 26 +- deps/v8/src/objects/debug-objects.cc | 117 +- deps/v8/src/objects/debug-objects.h | 90 +- deps/v8/src/objects/descriptor-array.h | 39 +- deps/v8/src/objects/dictionary.h | 3 +- deps/v8/src/objects/fixed-array-inl.h | 154 +- deps/v8/src/objects/fixed-array.h | 98 +- deps/v8/src/objects/hash-table-inl.h | 45 +- deps/v8/src/objects/hash-table.h | 590 +- deps/v8/src/objects/intl-objects-inl.h | 27 + deps/v8/src/objects/intl-objects.cc | 396 +- deps/v8/src/objects/intl-objects.h | 146 +- deps/v8/src/objects/js-array-inl.h | 23 +- deps/v8/src/objects/js-array.h | 23 +- deps/v8/src/objects/js-collection-inl.h | 8 +- deps/v8/src/objects/js-collection.h | 33 +- deps/v8/src/objects/js-locale-inl.h | 41 + deps/v8/src/objects/js-locale.cc | 287 + deps/v8/src/objects/js-locale.h | 79 + deps/v8/src/objects/js-promise-inl.h | 1 - deps/v8/src/objects/js-promise.h | 6 +- deps/v8/src/objects/js-regexp-inl.h | 4 +- .../objects/js-regexp-string-iterator-inl.h | 2 - .../src/objects/js-regexp-string-iterator.h | 2 +- deps/v8/src/objects/js-regexp.h | 2 +- .../src/objects/js-relative-time-format-inl.h | 62 + .../v8/src/objects/js-relative-time-format.cc | 227 + deps/v8/src/objects/js-relative-time-format.h | 105 + deps/v8/src/objects/literal-objects-inl.h | 20 + deps/v8/src/objects/literal-objects.cc | 49 +- deps/v8/src/objects/literal-objects.h | 48 +- deps/v8/src/objects/managed.cc | 38 + deps/v8/src/objects/managed.h | 129 + deps/v8/src/objects/map-inl.h | 73 +- deps/v8/src/objects/map.h | 294 +- deps/v8/src/objects/maybe-object-inl.h | 30 + deps/v8/src/objects/maybe-object.h | 34 +- deps/v8/src/objects/module-inl.h | 19 +- deps/v8/src/objects/module.cc | 239 +- deps/v8/src/objects/module.h | 67 +- deps/v8/src/objects/name-inl.h | 6 +- deps/v8/src/objects/name.h | 11 +- deps/v8/src/objects/object-macros-undef.h | 1 - deps/v8/src/objects/object-macros.h | 188 +- deps/v8/src/objects/ordered-hash-table-inl.h | 53 + deps/v8/src/objects/ordered-hash-table.cc | 760 ++ deps/v8/src/objects/ordered-hash-table.h | 676 ++ deps/v8/src/objects/promise-inl.h | 1 + deps/v8/src/objects/scope-info.cc | 336 +- deps/v8/src/objects/scope-info.h | 87 +- deps/v8/src/objects/script-inl.h | 4 +- deps/v8/src/objects/script.h | 13 +- .../v8/src/objects/shared-function-info-inl.h | 400 +- deps/v8/src/objects/shared-function-info.h | 306 +- deps/v8/src/objects/string-inl.h | 17 +- deps/v8/src/objects/string-table.h | 4 +- deps/v8/src/objects/string.h | 32 +- deps/v8/src/objects/template-objects.cc | 4 +- deps/v8/src/objects/template-objects.h | 2 +- deps/v8/src/objects/templates-inl.h | 135 + deps/v8/src/objects/templates.h | 223 + deps/v8/src/optimized-compilation-info.cc | 29 +- deps/v8/src/optimized-compilation-info.h | 93 +- deps/v8/src/ostreams.cc | 35 +- deps/v8/src/ostreams.h | 61 +- .../parsing/expression-scope-reparenter.cc | 4 +- deps/v8/src/parsing/parse-info.cc | 163 +- deps/v8/src/parsing/parse-info.h | 31 +- deps/v8/src/parsing/parser-base.h | 151 +- deps/v8/src/parsing/parser.cc | 378 +- deps/v8/src/parsing/parser.h | 124 +- deps/v8/src/parsing/parsing.cc | 14 +- deps/v8/src/parsing/pattern-rewriter.cc | 21 +- deps/v8/src/parsing/preparsed-scope-data.cc | 14 +- deps/v8/src/parsing/preparsed-scope-data.h | 3 +- deps/v8/src/parsing/preparser.cc | 6 +- deps/v8/src/parsing/preparser.h | 87 +- deps/v8/src/parsing/rewriter.cc | 11 +- .../src/parsing/scanner-character-streams.cc | 756 +- .../src/parsing/scanner-character-streams.h | 6 +- deps/v8/src/parsing/scanner.cc | 287 +- deps/v8/src/parsing/scanner.h | 29 +- deps/v8/src/perf-jit.cc | 76 +- deps/v8/src/ppc/assembler-ppc-inl.h | 49 +- deps/v8/src/ppc/assembler-ppc.cc | 88 +- deps/v8/src/ppc/assembler-ppc.h | 86 +- deps/v8/src/ppc/code-stubs-ppc.cc | 798 +- deps/v8/src/ppc/constants-ppc.h | 8 + deps/v8/src/ppc/deoptimizer-ppc.cc | 11 +- deps/v8/src/ppc/frame-constants-ppc.h | 14 + deps/v8/src/ppc/interface-descriptors-ppc.cc | 87 +- deps/v8/src/ppc/macro-assembler-ppc.cc | 301 +- deps/v8/src/ppc/macro-assembler-ppc.h | 81 +- deps/v8/src/ppc/simulator-ppc.cc | 30 +- deps/v8/src/ppc/simulator-ppc.h | 17 +- deps/v8/src/profiler/allocation-tracker.cc | 6 +- deps/v8/src/profiler/cpu-profiler-inl.h | 6 +- deps/v8/src/profiler/cpu-profiler.cc | 81 +- deps/v8/src/profiler/cpu-profiler.h | 30 +- deps/v8/src/profiler/heap-profiler.cc | 32 +- deps/v8/src/profiler/heap-profiler.h | 12 +- .../src/profiler/heap-snapshot-generator.cc | 453 +- .../v8/src/profiler/heap-snapshot-generator.h | 78 +- deps/v8/src/profiler/profile-generator-inl.h | 23 +- deps/v8/src/profiler/profile-generator.cc | 323 +- deps/v8/src/profiler/profile-generator.h | 214 +- deps/v8/src/profiler/profiler-listener.cc | 164 +- deps/v8/src/profiler/profiler-listener.h | 38 +- .../v8/src/profiler/sampling-heap-profiler.cc | 4 +- deps/v8/src/profiler/strings-storage.cc | 34 +- deps/v8/src/profiler/strings-storage.h | 24 +- deps/v8/src/profiler/tick-sample.cc | 67 +- deps/v8/src/profiler/tracing-cpu-profiler.cc | 7 +- deps/v8/src/profiler/unbound-queue.h | 10 +- deps/v8/src/property-descriptor.cc | 36 +- deps/v8/src/property-details.h | 13 +- deps/v8/src/property.cc | 22 +- deps/v8/src/property.h | 19 +- deps/v8/src/prototype.h | 5 +- deps/v8/src/regexp/jsregexp-inl.h | 17 +- deps/v8/src/regexp/jsregexp.cc | 187 +- deps/v8/src/regexp/jsregexp.h | 61 +- .../regexp/regexp-macro-assembler-irregexp.cc | 3 +- .../regexp/regexp-macro-assembler-irregexp.h | 2 +- deps/v8/src/regexp/regexp-macro-assembler.cc | 8 +- deps/v8/src/regexp/regexp-macro-assembler.h | 2 +- deps/v8/src/regexp/regexp-parser.cc | 47 +- deps/v8/src/regexp/regexp-stack.cc | 16 +- deps/v8/src/regexp/regexp-stack.h | 10 +- deps/v8/src/regexp/regexp-utils.cc | 8 +- .../regexp/x64/regexp-macro-assembler-x64.h | 2 +- deps/v8/src/register-configuration.cc | 6 + deps/v8/src/register-configuration.h | 2 + deps/v8/src/roots-inl.h | 90 + deps/v8/src/roots.h | 347 + deps/v8/src/runtime/runtime-array.cc | 349 +- deps/v8/src/runtime/runtime-bigint.cc | 48 +- deps/v8/src/runtime/runtime-classes.cc | 27 +- deps/v8/src/runtime/runtime-collections.cc | 86 +- deps/v8/src/runtime/runtime-compiler.cc | 39 +- deps/v8/src/runtime/runtime-debug.cc | 1321 +-- deps/v8/src/runtime/runtime-error.cc | 30 - deps/v8/src/runtime/runtime-forin.cc | 7 +- deps/v8/src/runtime/runtime-function.cc | 44 +- deps/v8/src/runtime/runtime-futex.cc | 2 +- deps/v8/src/runtime/runtime-generator.cc | 41 +- deps/v8/src/runtime/runtime-internal.cc | 46 +- deps/v8/src/runtime/runtime-interpreter.cc | 30 +- deps/v8/src/runtime/runtime-intl.cc | 258 +- deps/v8/src/runtime/runtime-literals.cc | 129 +- deps/v8/src/runtime/runtime-liveedit.cc | 86 +- deps/v8/src/runtime/runtime-module.cc | 10 +- deps/v8/src/runtime/runtime-numbers.cc | 32 +- deps/v8/src/runtime/runtime-object.cc | 189 +- deps/v8/src/runtime/runtime-operators.cc | 24 +- deps/v8/src/runtime/runtime-promise.cc | 65 +- deps/v8/src/runtime/runtime-proxy.cc | 16 +- deps/v8/src/runtime/runtime-regexp.cc | 134 +- deps/v8/src/runtime/runtime-scopes.cc | 235 +- deps/v8/src/runtime/runtime-strings.cc | 56 +- deps/v8/src/runtime/runtime-symbol.cc | 8 - deps/v8/src/runtime/runtime-test.cc | 298 +- deps/v8/src/runtime/runtime-typedarray.cc | 8 +- deps/v8/src/runtime/runtime-wasm.cc | 110 +- deps/v8/src/runtime/runtime.cc | 40 +- deps/v8/src/runtime/runtime.h | 121 +- deps/v8/src/s390/assembler-s390-inl.h | 64 +- deps/v8/src/s390/assembler-s390.cc | 1520 +--- deps/v8/src/s390/assembler-s390.h | 1134 +-- deps/v8/src/s390/code-stubs-s390.cc | 851 +- deps/v8/src/s390/constants-s390.h | 34 +- deps/v8/src/s390/deoptimizer-s390.cc | 11 +- deps/v8/src/s390/disasm-s390.cc | 10 +- deps/v8/src/s390/frame-constants-s390.h | 20 + .../v8/src/s390/interface-descriptors-s390.cc | 83 +- deps/v8/src/s390/macro-assembler-s390.cc | 405 +- deps/v8/src/s390/macro-assembler-s390.h | 98 +- deps/v8/src/s390/simulator-s390.cc | 122 +- deps/v8/src/s390/simulator-s390.h | 17 +- deps/v8/src/safepoint-table.cc | 1 + deps/v8/src/setup-isolate-deserialize.cc | 8 +- deps/v8/src/signature.h | 3 + deps/v8/src/simulator-base.cc | 14 +- deps/v8/src/simulator-base.h | 23 +- deps/v8/src/simulator.h | 9 +- .../builtin-deserializer-allocator.cc | 12 +- .../snapshot/builtin-deserializer-allocator.h | 2 +- deps/v8/src/snapshot/builtin-deserializer.cc | 50 +- .../snapshot/builtin-serializer-allocator.cc | 18 +- .../snapshot/builtin-serializer-allocator.h | 6 +- deps/v8/src/snapshot/code-serializer.cc | 78 +- deps/v8/src/snapshot/code-serializer.h | 9 +- .../default-deserializer-allocator.cc | 11 +- .../snapshot/default-serializer-allocator.cc | 35 +- .../snapshot/default-serializer-allocator.h | 10 +- deps/v8/src/snapshot/deserializer.cc | 135 +- deps/v8/src/snapshot/embedded-empty.cc | 3 - deps/v8/src/snapshot/mksnapshot.cc | 53 +- deps/v8/src/snapshot/object-deserializer.cc | 39 +- deps/v8/src/snapshot/object-deserializer.h | 5 - deps/v8/src/snapshot/partial-deserializer.cc | 2 +- deps/v8/src/snapshot/partial-serializer.cc | 15 +- deps/v8/src/snapshot/references.h | 197 + deps/v8/src/snapshot/serializer-common.cc | 16 +- deps/v8/src/snapshot/serializer-common.h | 14 +- deps/v8/src/snapshot/serializer.cc | 239 +- deps/v8/src/snapshot/serializer.h | 23 +- deps/v8/src/snapshot/snapshot-common.cc | 140 +- deps/v8/src/snapshot/snapshot.h | 33 +- deps/v8/src/snapshot/startup-deserializer.cc | 14 +- deps/v8/src/snapshot/startup-serializer.cc | 17 +- deps/v8/src/source-position-table.cc | 45 +- deps/v8/src/source-position-table.h | 1 + deps/v8/src/source-position.cc | 32 +- deps/v8/src/source-position.h | 3 +- deps/v8/src/splay-tree.h | 16 +- deps/v8/src/string-builder.cc | 3 +- deps/v8/src/string-builder.h | 32 +- deps/v8/src/string-hasher-inl.h | 5 + deps/v8/src/string-hasher.h | 29 +- deps/v8/src/string-search.h | 6 +- deps/v8/src/torque/Torque.g4 | 295 + deps/v8/src/torque/TorqueBaseListener.cpp | 7 + deps/v8/src/torque/TorqueBaseListener.h | 343 + deps/v8/src/torque/TorqueBaseVisitor.cpp | 7 + deps/v8/src/torque/TorqueBaseVisitor.h | 359 + deps/v8/src/torque/TorqueLexer.cpp | 976 +++ deps/v8/src/torque/TorqueLexer.h | 137 + deps/v8/src/torque/TorqueListener.cpp | 7 + deps/v8/src/torque/TorqueListener.h | 321 + deps/v8/src/torque/TorqueParser.cpp | 7731 +++++++++++++++++ deps/v8/src/torque/TorqueParser.h | 1516 ++++ deps/v8/src/torque/TorqueVisitor.cpp | 7 + deps/v8/src/torque/TorqueVisitor.h | 231 + deps/v8/src/torque/ast-generator.cc | 778 ++ deps/v8/src/torque/ast-generator.h | 189 + deps/v8/src/torque/ast.h | 701 ++ deps/v8/src/torque/contextual.h | 87 + deps/v8/src/torque/declarable.cc | 74 + deps/v8/src/torque/declarable.h | 355 + deps/v8/src/torque/declaration-visitor.cc | 596 ++ deps/v8/src/torque/declaration-visitor.h | 181 + deps/v8/src/torque/declarations.cc | 353 + deps/v8/src/torque/declarations.h | 225 + deps/v8/src/torque/file-visitor.cc | 76 + deps/v8/src/torque/file-visitor.h | 101 + deps/v8/src/torque/global-context.h | 159 + deps/v8/src/torque/implementation-visitor.cc | 1769 ++++ deps/v8/src/torque/implementation-visitor.h | 255 + deps/v8/src/torque/parameter-difference.h | 77 + deps/v8/src/torque/scope.cc | 51 + deps/v8/src/torque/scope.h | 167 + deps/v8/src/torque/torque.cc | 138 + deps/v8/src/torque/type-oracle.h | 110 + deps/v8/src/torque/types.cc | 262 + deps/v8/src/torque/types.h | 381 + deps/v8/src/torque/utils.cc | 69 + deps/v8/src/torque/utils.h | 86 + deps/v8/src/tracing/trace-event.h | 28 +- deps/v8/src/transitions-inl.h | 125 +- deps/v8/src/transitions.cc | 283 +- deps/v8/src/transitions.h | 102 +- .../src/trap-handler/handler-inside-linux.cc | 133 + deps/v8/src/trap-handler/handler-inside.cc | 107 +- .../src/trap-handler/handler-outside-linux.cc | 73 + .../src/trap-handler/handler-outside-win.cc | 35 + deps/v8/src/trap-handler/handler-outside.cc | 61 +- .../src/trap-handler/trap-handler-internal.h | 2 +- deps/v8/src/trap-handler/trap-handler.h | 4 +- deps/v8/src/turbo-assembler.cc | 122 + deps/v8/src/turbo-assembler.h | 114 + deps/v8/src/type-hints.cc | 8 - deps/v8/src/type-hints.h | 13 +- deps/v8/src/unicode-inl.h | 5 +- deps/v8/src/unicode.h | 12 +- deps/v8/src/uri.cc | 8 +- deps/v8/src/utils.cc | 47 + deps/v8/src/utils.h | 86 +- deps/v8/src/v8.cc | 4 +- deps/v8/src/v8memory.h | 9 +- deps/v8/src/value-serializer.cc | 75 +- deps/v8/src/value-serializer.h | 2 + deps/v8/src/vector.h | 66 +- deps/v8/src/visitors.h | 5 + deps/v8/src/vm-state.h | 2 +- .../wasm/baseline/arm/liftoff-assembler-arm.h | 156 +- .../baseline/arm64/liftoff-assembler-arm64.h | 973 ++- .../baseline/ia32/liftoff-assembler-ia32.h | 729 +- .../wasm/baseline/liftoff-assembler-defs.h | 41 + .../v8/src/wasm/baseline/liftoff-assembler.cc | 58 +- deps/v8/src/wasm/baseline/liftoff-assembler.h | 183 +- deps/v8/src/wasm/baseline/liftoff-compiler.cc | 1059 ++- deps/v8/src/wasm/baseline/liftoff-compiler.h | 39 + deps/v8/src/wasm/baseline/liftoff-register.h | 17 +- .../baseline/mips/liftoff-assembler-mips.h | 773 +- .../mips64/liftoff-assembler-mips64.h | 733 +- .../wasm/baseline/ppc/liftoff-assembler-ppc.h | 160 +- .../baseline/s390/liftoff-assembler-s390.h | 160 +- .../wasm/baseline/x64/liftoff-assembler-x64.h | 592 +- deps/v8/src/wasm/compilation-manager.cc | 62 - deps/v8/src/wasm/compilation-manager.h | 62 - deps/v8/src/wasm/decoder.h | 2 +- deps/v8/src/wasm/function-body-decoder-impl.h | 824 +- deps/v8/src/wasm/function-body-decoder.cc | 185 +- deps/v8/src/wasm/function-body-decoder.h | 19 +- deps/v8/src/wasm/function-compiler.cc | 149 + deps/v8/src/wasm/function-compiler.h | 112 + deps/v8/src/wasm/jump-table-assembler.cc | 210 + deps/v8/src/wasm/jump-table-assembler.h | 76 + deps/v8/src/wasm/local-decl-encoder.cc | 3 +- deps/v8/src/wasm/memory-tracing.cc | 12 +- deps/v8/src/wasm/module-compiler.cc | 2347 +++-- deps/v8/src/wasm/module-compiler.h | 88 +- deps/v8/src/wasm/module-decoder.cc | 251 +- deps/v8/src/wasm/module-decoder.h | 17 +- deps/v8/src/wasm/signature-map.cc | 2 + deps/v8/src/wasm/signature-map.h | 9 +- deps/v8/src/wasm/streaming-decoder.cc | 9 +- deps/v8/src/wasm/streaming-decoder.h | 3 +- deps/v8/src/wasm/value-type.h | 346 + deps/v8/src/wasm/wasm-code-manager.cc | 1389 ++- deps/v8/src/wasm/wasm-code-manager.h | 405 +- deps/v8/src/wasm/wasm-code-specialization.cc | 226 - deps/v8/src/wasm/wasm-code-specialization.h | 54 - deps/v8/src/wasm/wasm-constants.h | 2 +- deps/v8/src/wasm/wasm-debug.cc | 188 +- deps/v8/src/wasm/wasm-engine.cc | 135 +- deps/v8/src/wasm/wasm-engine.h | 71 +- deps/v8/src/wasm/wasm-external-refs.cc | 197 +- deps/v8/src/wasm/wasm-external-refs.h | 60 +- deps/v8/src/wasm/wasm-interpreter.cc | 995 ++- deps/v8/src/wasm/wasm-interpreter.h | 17 +- deps/v8/src/wasm/wasm-js.cc | 400 +- deps/v8/src/wasm/wasm-linkage.h | 182 + deps/v8/src/wasm/wasm-memory.cc | 139 +- deps/v8/src/wasm/wasm-memory.h | 53 +- deps/v8/src/wasm/wasm-module-builder.cc | 10 +- deps/v8/src/wasm/wasm-module-builder.h | 6 +- deps/v8/src/wasm/wasm-module.cc | 144 +- deps/v8/src/wasm/wasm-module.h | 80 +- deps/v8/src/wasm/wasm-objects-inl.h | 178 +- deps/v8/src/wasm/wasm-objects.cc | 2352 +++-- deps/v8/src/wasm/wasm-objects.h | 490 +- deps/v8/src/wasm/wasm-opcodes.cc | 46 +- deps/v8/src/wasm/wasm-opcodes.h | 346 +- deps/v8/src/wasm/wasm-serialization.cc | 859 +- deps/v8/src/wasm/wasm-serialization.h | 9 +- deps/v8/src/wasm/wasm-text.cc | 73 +- deps/v8/src/wasm/wasm-value.h | 88 +- deps/v8/src/x64/assembler-x64-inl.h | 70 +- deps/v8/src/x64/assembler-x64.cc | 111 +- deps/v8/src/x64/assembler-x64.h | 38 +- deps/v8/src/x64/code-stubs-x64.cc | 726 +- deps/v8/src/x64/constants-x64.h | 21 + deps/v8/src/x64/deoptimizer-x64.cc | 12 +- deps/v8/src/x64/disasm-x64.cc | 4 +- deps/v8/src/x64/frame-constants-x64.h | 16 + deps/v8/src/x64/interface-descriptors-x64.cc | 90 +- deps/v8/src/x64/macro-assembler-x64.cc | 548 +- deps/v8/src/x64/macro-assembler-x64.h | 144 +- deps/v8/src/zone/zone-containers.h | 11 + deps/v8/src/zone/zone-segment.cc | 6 +- deps/v8/src/zone/zone-segment.h | 4 +- deps/v8/src/zone/zone.cc | 53 +- deps/v8/src/zone/zone.h | 27 +- deps/v8/test/cctest/BUILD.gn | 13 +- deps/v8/test/cctest/DEPS | 1 + deps/v8/test/cctest/assembler-helper-arm.cc | 4 +- deps/v8/test/cctest/cctest.h | 15 +- deps/v8/test/cctest/cctest.status | 89 +- deps/v8/test/cctest/compiler/call-tester.h | 6 +- .../cctest/compiler/code-assembler-tester.h | 17 +- deps/v8/test/cctest/compiler/codegen-tester.h | 21 +- .../test/cctest/compiler/function-tester.cc | 27 +- .../cctest/compiler/graph-builder-tester.h | 12 +- .../cctest/compiler/test-code-assembler.cc | 10 +- .../cctest/compiler/test-code-generator.cc | 28 +- .../cctest/compiler/test-graph-visualizer.cc | 34 +- .../compiler/test-instruction-scheduler.cc | 2 +- .../test/cctest/compiler/test-instruction.cc | 6 + .../cctest/compiler/test-js-constant-cache.cc | 23 +- .../test-js-context-specialization.cc | 79 +- .../cctest/compiler/test-js-typed-lowering.cc | 92 +- .../cctest/compiler/test-jump-threading.cc | 4 + deps/v8/test/cctest/compiler/test-linkage.cc | 9 +- .../cctest/compiler/test-loop-analysis.cc | 3 +- .../cctest/compiler/test-multiple-return.cc | 62 +- .../compiler/test-representation-change.cc | 16 +- .../test-run-bytecode-graph-builder.cc | 37 +- .../test-run-calls-to-external-references.cc | 340 +- .../test/cctest/compiler/test-run-jscalls.cc | 6 +- .../cctest/compiler/test-run-load-store.cc | 4 +- .../test/cctest/compiler/test-run-machops.cc | 53 +- .../cctest/compiler/test-run-native-calls.cc | 7 +- .../v8/test/cctest/compiler/test-run-stubs.cc | 13 +- deps/v8/test/cctest/compiler/value-helper.h | 59 +- deps/v8/test/cctest/heap/heap-tester.h | 9 +- deps/v8/test/cctest/heap/heap-utils.cc | 2 +- deps/v8/test/cctest/heap/test-alloc.cc | 16 +- .../cctest/heap/test-array-buffer-tracker.cc | 67 +- deps/v8/test/cctest/heap/test-compaction.cc | 14 +- .../cctest/heap/test-concurrent-marking.cc | 36 +- .../test/cctest/heap/test-embedder-tracing.cc | 2 +- deps/v8/test/cctest/heap/test-heap.cc | 541 +- deps/v8/test/cctest/heap/test-lab.cc | 2 +- deps/v8/test/cctest/heap/test-mark-compact.cc | 11 +- .../test/cctest/heap/test-page-promotion.cc | 45 +- deps/v8/test/cctest/heap/test-spaces.cc | 79 +- deps/v8/test/cctest/heap/test-unmapper.cc | 66 + .../test/cctest/heap/test-weak-references.cc | 189 +- .../bytecode-expectations-printer.cc | 10 +- .../ArrayLiterals.golden | 12 +- .../AsyncGenerators.golden | 117 +- .../bytecode_expectations/BasicLoops.golden | 7 +- .../BreakableBlocks.golden | 15 +- .../CallAndSpread.golden | 8 +- .../CallLookupSlot.golden | 15 +- .../ClassAndSuperClass.golden | 20 +- .../ClassDeclarations.golden | 30 +- .../CompoundExpressions.golden | 11 +- .../ConstVariableContextSlot.golden | 30 +- .../ContextParameters.golden | 28 +- .../ContextVariables.golden | 1521 ++-- .../CountOperators.golden | 24 +- .../CreateArguments.golden | 10 +- .../DeclareGlobals.golden | 8 +- .../bytecode_expectations/Delete.golden | 17 +- .../bytecode_expectations/Eval.golden | 9 +- .../bytecode_expectations/ForAwaitOf.golden | 192 +- .../bytecode_expectations/ForIn.golden | 14 +- .../bytecode_expectations/ForOf.golden | 92 +- .../bytecode_expectations/ForOfLoop.golden | 652 +- .../GenerateTestUndetectable.golden | 16 +- .../bytecode_expectations/Generators.golden | 26 +- .../LetVariableContextSlot.golden | 30 +- .../bytecode_expectations/LoadGlobal.golden | 654 +- .../bytecode_expectations/LookupSlot.golden | 55 +- .../bytecode_expectations/Modules.golden | 110 +- .../bytecode_expectations/NewAndSpread.golden | 8 +- .../ObjectLiterals.golden | 28 +- .../PrivateClassFields.golden | 9 +- .../bytecode_expectations/PropertyCall.golden | 657 +- .../PropertyLoads.golden | 778 +- .../PropertyStores.golden | 1556 ++-- .../PublicClassFields.golden | 9 +- .../StandardForLoop.golden | 66 +- .../StaticClassFields.golden | 81 +- .../bytecode_expectations/StoreGlobal.golden | 1312 +-- .../SuperCallAndSpread.golden | 78 +- .../TopLevelObjectLiterals.golden | 4 +- .../bytecode_expectations/TryCatch.golden | 24 +- .../bytecode_expectations/TryFinally.golden | 33 +- .../WithStatement.golden | 5 +- .../interpreter/test-bytecode-generator.cc | 61 +- .../cctest/interpreter/test-interpreter.cc | 109 +- .../interpreter/test-source-positions.cc | 2 +- .../cctest/log-eq-of-logging-and-traversal.js | 12 +- .../cctest/parsing/test-parse-decision.cc | 5 +- deps/v8/test/cctest/parsing/test-preparser.cc | 18 +- .../cctest/parsing/test-scanner-streams.cc | 43 +- deps/v8/test/cctest/scope-test-helper.h | 5 +- .../v8/test/cctest/test-accessor-assembler.cc | 18 +- deps/v8/test/cctest/test-accessors.cc | 3 +- deps/v8/test/cctest/test-api-accessors.cc | 93 +- deps/v8/test/cctest/test-api-interceptors.cc | 9 +- deps/v8/test/cctest/test-api.cc | 979 ++- deps/v8/test/cctest/test-array-list.cc | 4 +- deps/v8/test/cctest/test-assembler-arm.cc | 249 +- deps/v8/test/cctest/test-assembler-arm64.cc | 16 +- deps/v8/test/cctest/test-assembler-ia32.cc | 106 +- deps/v8/test/cctest/test-assembler-mips.cc | 58 +- deps/v8/test/cctest/test-assembler-mips64.cc | 52 +- deps/v8/test/cctest/test-assembler-ppc.cc | 50 +- deps/v8/test/cctest/test-assembler-s390.cc | 159 +- deps/v8/test/cctest/test-assembler-x64.cc | 138 +- deps/v8/test/cctest/test-code-layout.cc | 23 +- .../test/cctest/test-code-stub-assembler.cc | 328 +- deps/v8/test/cctest/test-code-stubs-arm.cc | 6 +- deps/v8/test/cctest/test-code-stubs-arm64.cc | 8 +- deps/v8/test/cctest/test-code-stubs-ia32.cc | 5 +- deps/v8/test/cctest/test-code-stubs-mips.cc | 6 +- deps/v8/test/cctest/test-code-stubs-mips64.cc | 6 +- deps/v8/test/cctest/test-code-stubs-x64.cc | 5 +- deps/v8/test/cctest/test-code-stubs.cc | 10 +- deps/v8/test/cctest/test-compiler.cc | 40 +- deps/v8/test/cctest/test-cpu-profiler.cc | 198 +- deps/v8/test/cctest/test-debug.cc | 4411 +++------- deps/v8/test/cctest/test-deoptimization.cc | 2 - deps/v8/test/cctest/test-dictionary.cc | 16 +- deps/v8/test/cctest/test-disasm-arm.cc | 110 +- deps/v8/test/cctest/test-disasm-arm64.cc | 74 +- deps/v8/test/cctest/test-disasm-ia32.cc | 51 +- deps/v8/test/cctest/test-disasm-mips.cc | 13 +- deps/v8/test/cctest/test-disasm-mips64.cc | 13 +- deps/v8/test/cctest/test-disasm-ppc.cc | 3 +- deps/v8/test/cctest/test-disasm-s390.cc | 10 +- deps/v8/test/cctest/test-disasm-x64.cc | 35 +- deps/v8/test/cctest/test-elements-kind.cc | 85 +- deps/v8/test/cctest/test-feedback-vector.cc | 34 +- .../test/cctest/test-field-type-tracking.cc | 786 +- deps/v8/test/cctest/test-flags.cc | 1 - .../test/cctest/test-func-name-inference.cc | 19 +- deps/v8/test/cctest/test-global-handles.cc | 35 +- deps/v8/test/cctest/test-hashcode.cc | 7 +- deps/v8/test/cctest/test-heap-profiler.cc | 202 +- deps/v8/test/cctest/test-identity-map.cc | 50 +- .../cctest/test-inobject-slack-tracking.cc | 26 +- deps/v8/test/cctest/test-inspector.cc | 65 + deps/v8/test/cctest/test-intl.cc | 197 +- .../test-isolate-independent-builtins.cc | 90 +- deps/v8/test/cctest/test-liveedit.cc | 520 +- deps/v8/test/cctest/test-log-stack-tracer.cc | 29 +- deps/v8/test/cctest/test-log.cc | 71 +- .../test/cctest/test-macro-assembler-arm.cc | 8 +- .../test/cctest/test-macro-assembler-mips.cc | 128 +- .../cctest/test-macro-assembler-mips64.cc | 105 +- .../test/cctest/test-macro-assembler-x64.cc | 71 +- deps/v8/test/cctest/test-managed.cc | 185 +- deps/v8/test/cctest/test-mementos.cc | 4 +- deps/v8/test/cctest/test-object.cc | 14 +- deps/v8/test/cctest/test-orderedhashtable.cc | 704 +- deps/v8/test/cctest/test-parsing.cc | 160 +- deps/v8/test/cctest/test-profile-generator.cc | 164 +- deps/v8/test/cctest/test-regexp.cc | 40 +- deps/v8/test/cctest/test-roots.cc | 121 + deps/v8/test/cctest/test-serialize.cc | 423 +- deps/v8/test/cctest/test-strings.cc | 79 +- deps/v8/test/cctest/test-symbols.cc | 6 +- .../v8/test/cctest/test-thread-termination.cc | 178 + deps/v8/test/cctest/test-trace-event.cc | 10 +- deps/v8/test/cctest/test-transitions.cc | 81 +- deps/v8/test/cctest/test-transitions.h | 9 +- deps/v8/test/cctest/test-types.cc | 758 +- deps/v8/test/cctest/test-unboxed-doubles.cc | 175 +- deps/v8/test/cctest/test-weakmaps.cc | 37 +- deps/v8/test/cctest/test-weaksets.cc | 39 +- deps/v8/test/cctest/torque/test-torque.cc | 205 + deps/v8/test/cctest/trace-extension.cc | 25 +- deps/v8/test/cctest/types-fuzz.h | 91 +- deps/v8/test/cctest/wasm/test-c-wasm-entry.cc | 16 +- deps/v8/test/cctest/wasm/test-run-wasm-64.cc | 40 +- .../test/cctest/wasm/test-run-wasm-atomics.cc | 38 +- .../cctest/wasm/test-run-wasm-atomics64.cc | 125 +- .../test/cctest/wasm/test-run-wasm-module.cc | 356 +- .../wasm/test-run-wasm-sign-extension.cc | 17 +- .../v8/test/cctest/wasm/test-run-wasm-simd.cc | 998 ++- deps/v8/test/cctest/wasm/test-run-wasm.cc | 297 +- .../cctest/wasm/test-streaming-compilation.cc | 57 +- .../test/cctest/wasm/test-wasm-breakpoints.cc | 41 +- deps/v8/test/cctest/wasm/test-wasm-codegen.cc | 8 +- .../cctest/wasm/test-wasm-serialization.cc | 319 + .../cctest/wasm/test-wasm-shared-engine.cc | 198 + deps/v8/test/cctest/wasm/test-wasm-stack.cc | 3 +- .../cctest/wasm/test-wasm-trap-position.cc | 8 +- deps/v8/test/cctest/wasm/wasm-atomics-utils.h | 1 - deps/v8/test/cctest/wasm/wasm-run-utils.cc | 251 +- deps/v8/test/cctest/wasm/wasm-run-utils.h | 102 +- deps/v8/test/common/wasm/wasm-macro-gen.h | 20 +- .../v8/test/common/wasm/wasm-module-runner.cc | 12 +- deps/v8/test/common/wasm/wasm-module-runner.h | 5 +- .../test/debugger/debug/debug-break-native.js | 1 - .../test/debugger/debug/debug-break-return.js | 40 + .../debug/debug-live-edit-recursion.js | 40 + .../test/debugger/debug/debug-liveedit-1.js | 9 +- .../test/debugger/debug/debug-liveedit-2.js | 14 +- .../test/debugger/debug/debug-liveedit-3.js | 13 +- .../test/debugger/debug/debug-liveedit-4.js | 9 +- .../debug/debug-liveedit-check-stack.js | 34 +- .../debug/debug-liveedit-compile-error.js | 18 +- .../debugger/debug/debug-liveedit-diff.js | 110 - .../debug/debug-liveedit-double-call.js | 5 +- .../debug/debug-liveedit-exceptions.js | 7 +- .../debugger/debug/debug-liveedit-inline.js | 14 +- .../debugger/debug/debug-liveedit-literals.js | 12 +- .../debug/debug-liveedit-newsource.js | 10 +- .../debug-liveedit-patch-positions-replace.js | 19 +- .../debug/debug-liveedit-replace-code.js | 10 +- .../debugger/debug/debug-liveedit-stepin.js | 8 +- .../debugger/debug/debug-liveedit-utils.js | 93 - .../debug/debug-modules-set-variable-value.js | 2 +- deps/v8/test/debugger/debug/debug-scopes.js | 89 +- deps/v8/test/debugger/debug/debug-script.js | 112 - .../debugger/debug/debug-setbreakpoint.js | 139 - .../test/debugger/debug/debug-sourceinfo.js | 203 - .../debug/debug-step-end-of-script.js | 2 +- .../debugger/debug/debug-step-microtask.js | 2 +- .../debugger/debug/deserialize-script-id.js | 8 +- .../debug/es6/debug-liveedit-new-target-1.js | 12 +- .../debug/es6/debug-liveedit-new-target-2.js | 12 +- .../debug/es6/debug-liveedit-new-target-3.js | 9 +- .../debug/es6/generators-debug-liveedit.js | 28 +- .../debug/es8/debug-async-liveedit.js | 37 +- .../debugger/debug/es8/promise-finally.js | 2 - .../debug/harmony/modules-debug-scopes1.js | 6 +- .../debug/harmony/modules-debug-scopes2.js | 6 +- .../debugger/debug/regress/regress-1853.js | 100 - .../debugger/debug/regress/regress-2825.js | 2 +- .../debugger/debug/regress/regress-419663.js | 32 - .../debugger/debug/regress/regress-5164.js | 12 +- .../debug/regress/regress-crbug-424142.js | 38 - .../debug/regress/regress-crbug-481896.js | 55 - .../debug/regress/regress-crbug-517592.js | 34 - ...ebug-evaluate-no-side-effect-builtins-2.js | 10 +- .../debug-evaluate-no-side-effect-builtins.js | 22 +- .../debug-evaluate-no-side-effect-control.js | 12 +- .../debug-evaluate-no-side-effect-ops.js | 4 +- .../debug-evaluate-no-side-effect-regexp.js | 28 + ...g-evaluate-no-side-effect-runtime-check.js | 133 +- .../debug-evaluate-no-side-effect.js | 1 + deps/v8/test/debugger/debugger.status | 21 +- .../debugger/regress/regress-crbug-840288.js | 25 + deps/v8/test/debugger/test-api.js | 126 +- deps/v8/test/fuzzer/multi-return.cc | 33 +- deps/v8/test/fuzzer/parser.cc | 2 +- deps/v8/test/fuzzer/regexp.cc | 5 +- deps/v8/test/fuzzer/wasm-async.cc | 73 +- deps/v8/test/fuzzer/wasm-compile.cc | 2 +- deps/v8/test/fuzzer/wasm-fuzzer-common.cc | 37 +- deps/v8/test/fuzzer/wasm-fuzzer-common.h | 3 + deps/v8/test/fuzzer/wasm.cc | 14 +- deps/v8/test/inspector/BUILD.gn | 1 - deps/v8/test/inspector/PRESUBMIT.py | 25 + ...nc-for-await-of-promise-stack-expected.txt | 42 +- .../async-for-await-of-promise-stack.js | 15 +- .../async-function-step-out-expected.txt | 209 + ...c-function-step-out-optimized-expected.txt | 215 + .../async-function-step-out-optimized.js | 187 + .../debugger/async-function-step-out.js | 185 + .../debugger/async-stack-await-expected.txt | 10 +- .../inspector/debugger/async-stack-await.js | 5 +- ...-locations-var-init-optimized-expected.txt | 200 + .../break-locations-var-init-optimized.js | 76 + .../break-on-exception-and-step-expected.txt | 145 + .../debugger/break-on-exception-and-step.js | 69 + ...-on-exception-compiler-errors-expected.txt | 91 + .../break-on-exception-compiler-errors.js | 52 + .../debugger/break-on-exception-expected.txt | 162 +- .../inspector/debugger/break-on-exception.js | 175 +- ...o-location-target-call-frames-expected.txt | 4 +- .../disable-agent-on-pause-expected.txt | 4 + .../debugger/disable-agent-on-pause.js | 27 + ...snt-step-into-injected-script-expected.txt | 4 +- .../evaluate-on-call-frame-expected.txt | 78 + ...luate-on-call-frame-in-module-expected.txt | 76 +- ...valuate-on-call-frame-timeout-expected.txt | 7 + .../evaluate-on-call-frame-timeout.js | 40 + .../debugger/evaluate-on-call-frame.js | 113 + .../debugger/external-stack-trace.js | 1 + .../debugger/for-of-loops-expected.txt | 2 +- ...mework-nested-scheduled-break-expected.txt | 2 +- .../framework-precise-ranges-expected.txt | 19 - ...ble-breakpoints-array-literal-expected.txt | 6 - .../get-possible-breakpoints-expected.txt | 49 +- ...ssible-breakpoints-lazy-error-expected.txt | 18 + ...t-possible-breakpoints-master-expected.txt | 2 +- .../debugger/get-possible-breakpoints.js | 3 +- .../inspector/debugger/pause-expected.txt | 16 +- ...e-inside-blackboxed-optimized-expected.txt | 4 + .../pause-inside-blackboxed-optimized.js | 38 + .../debugger/pause-on-async-call-expected.txt | 22 +- .../inspector/debugger/pause-on-async-call.js | 1 + .../regress-crbug-481896-expected.txt | 20 + .../debugger/regress-crbug-481896.js | 57 + .../debugger/regression-1853-expected.txt | 22 + .../inspector/debugger/regression-1853.js | 59 + .../debugger/regression-419663-expected.txt | 6 + .../inspector/debugger/regression-419663.js | 28 + .../debugger/regression-424142-expected.txt | 6 + .../inspector/debugger/regression-424142.js | 37 + ...move-breakpoint-at-breakpoint-expected.txt | 8 + .../remove-breakpoint-at-breakpoint.js | 28 + .../return-break-locations-expected.txt | 4 +- .../schedule-step-into-async-expected.txt | 14 +- ...e-step-into-async-set-timeout-expected.txt | 4 +- .../debugger/schedule-step-into-async.js | 1 + ...set-breakpoint-after-liveedit-expected.txt | 19 + .../debugger/set-breakpoint-after-liveedit.js | 39 + .../set-breakpoint-at-last-line-expected.txt | 9 +- .../debugger/set-breakpoint-expected.txt | 48 + ...t-breakpoint-on-function-call-expected.txt | 36 + .../set-breakpoint-on-function-call.js | 66 + .../test/inspector/debugger/set-breakpoint.js | 124 + .../debugger/set-script-source-2-expected.txt | 20 +- .../inspector/debugger/set-script-source-2.js | 10 +- .../set-script-source-exception-expected.txt | 6 +- .../debugger/set-script-source-exception.js | 25 +- .../debugger/set-script-source-expected.txt | 25 +- ...t-script-source-stack-padding-expected.txt | 15 + .../set-script-source-stack-padding.js | 54 + .../inspector/debugger/set-script-source.js | 176 +- ...step-into-break-on-async-call-expected.txt | 4 +- .../debugger/step-into-break-on-async-call.js | 4 + .../inspector/debugger/step-into-expected.txt | 6 +- ...step-into-external-async-task-expected.txt | 2 +- ...ernal-async-task-same-context-expected.txt | 2 +- .../step-into-nested-arrow-expected.txt | 2 +- .../step-into-next-script-expected.txt | 14 +- .../debugger/step-into-out-expected.txt | 169 + .../test/inspector/debugger/step-into-out.js | 89 + .../debugger/step-snapshot-expected.txt | 2 +- .../debugger/stepping-tail-call-expected.txt | 21 +- ...g-with-natives-and-frameworks-expected.txt | 34 +- .../suspended-generator-scopes-expected.txt | 24 +- .../terminate-execution-on-pause-expected.txt | 5 + .../debugger/terminate-execution-on-pause.js | 43 + .../debugger/wasm-set-breakpoint-expected.txt | 62 + .../inspector/debugger/wasm-set-breakpoint.js | 158 + deps/v8/test/inspector/inspector-test.cc | 47 +- deps/v8/test/inspector/inspector.status | 20 +- deps/v8/test/inspector/isolate-data.cc | 1 + deps/v8/test/inspector/protocol-test.js | 9 +- .../runtime/add-binding-expected.txt | 99 + deps/v8/test/inspector/runtime/add-binding.js | 82 + ...line-api-without-side-effects-expected.txt | 134 + .../command-line-api-without-side-effects.js | 83 + .../runtime/console-context-expected.txt | 12 +- .../console-deprecated-methods-expected.txt | 4 - .../runtime/console-deprecated-methods.js | 28 - .../runtime/console-methods-expected.txt | 128 + .../test/inspector/runtime/console-methods.js | 7 + .../runtime/enable-async-stack-expected.txt | 31 + .../inspector/runtime/enable-async-stack.js | 19 + .../runtime/evaluate-timeout-expected.txt | 7 + .../inspector/runtime/evaluate-timeout.js | 34 + ...evaluate-without-side-effects-expected.txt | 2 +- .../runtime/function-location-expected.txt | 16 + .../inspector/runtime/function-location.js | 56 + .../set-max-call-stack-size-expected.txt | 97 + .../runtime/set-max-call-stack-size.js | 37 + ...gger-stepping-and-breakpoints-expected.txt | 3 + .../debugger-stepping-and-breakpoints.js | 9 + .../type-profiler/type-profile-expected.txt | 3 +- .../type-profile-with-classes-expected.txt | 3 +- ...pe-profile-with-to-string-tag-expected.txt | 3 +- .../test/intl/date-format/month-far-future.js | 6 +- .../language_tags_with_preferred_values.js | 29 + .../test/intl/general/supported-locales-of.js | 42 +- deps/v8/test/intl/intl.status | 10 +- .../intl/locale/locale-canonicalization.js | 24 + .../v8/test/intl/locale/locale-constructor.js | 176 + deps/v8/test/intl/locale/locale-properties.js | 35 + .../intl/relative-time-format/constructor.js | 103 + .../default-locale-fr-CA.js | 14 + .../default-locale-pt-BR.js | 14 + .../relative-time-format/resolved-options.js | 162 + deps/v8/test/intl/testcfg.py | 17 + deps/v8/test/js-perf-test/Array/from.js | 293 +- deps/v8/test/js-perf-test/Array/join.js | 8 +- deps/v8/test/js-perf-test/Array/of.js | 224 +- deps/v8/test/js-perf-test/Array/run.js | 10 +- deps/v8/test/js-perf-test/Array/slice.js | 83 + deps/v8/test/js-perf-test/Array/to-string.js | 9 +- deps/v8/test/js-perf-test/ArraySort/run.js | 9 +- .../test/js-perf-test/ArraySort/sort-base.js | 145 + .../ArraySort/sort-cmpfn-kindchange.js | 43 + .../test/js-perf-test/ArraySort/sort-cmpfn.js | 20 + .../js-perf-test/ArraySort/sort-lengths.js | 40 + .../ArraySort/sort-megamorphic.js | 20 + .../js-perf-test/ArraySort/sort-presorted.js | 108 + deps/v8/test/js-perf-test/ArraySort/sort.js | 99 +- .../js-perf-test/DataView/dataviewtest.js | 210 + deps/v8/test/js-perf-test/DataView/run.js | 24 + .../test/js-perf-test/Inspector/debugger.js | 120 +- deps/v8/test/js-perf-test/JSTests.json | 186 +- deps/v8/test/js-perf-test/RegExp.json | 5 +- .../test/js-perf-test/RegExp/RegExpTests.json | 4 +- .../test/js-perf-test/RegExp/inline_test.js | 17 + deps/v8/test/js-perf-test/RegExp/run.js | 1 + deps/v8/test/js-perf-test/SixSpeed.json | 1 + deps/v8/test/js-perf-test/Strings/run.js | 1 - .../test/js-perf-test/Strings/string-split.js | 81 + .../Strings/string-startsendswith-comp.js | 47 + .../Strings/string-stringat-comp.js | 18 +- .../js-perf-test/Strings/string-substring.js | 46 +- .../js-perf-test/TypedArrays/sort-bigint.js | 8 + .../TypedArrays/sort-cmpfn-bigint.js | 9 + deps/v8/test/js-perf-test/TypedArrays/sort.js | 23 +- deps/v8/test/js-perf-test/base.js | 10 +- deps/v8/test/memory/Memory.json | 19 +- .../assert-promise-result-rejects-empty.js | 11 + .../assert-promise-result-rejects-empty.out | 12 + ...promise-result-rejects-with-throw-empty.js | 14 + ...romise-result-rejects-with-throw-empty.out | 10 + .../fail/assert-promise-result-rejects.js | 11 + .../fail/assert-promise-result-rejects.out | 12 + .../fail/assert-promise-result-resolves.js | 11 + .../fail/assert-promise-result-resolves.out | 13 + .../success/assert-promise-result-rejects.js | 12 + .../success/assert-promise-result-rejects.out | 1 + .../assert-promise-result-resolves-empty.js | 16 + .../assert-promise-result-resolves-empty.out | 0 .../success/assert-promise-result-resolves.js | 11 + .../assert-promise-result-resolves.out | 1 + .../test/message/regress/fail/regress-73.js | 12 +- .../regress/fail/regress-crbug-842101.js | 18 + .../regress/fail/regress-crbug-842101.out | 10 + .../test/message/wasm-function-name-async.out | 2 +- .../message/wasm-function-name-streaming.out | 2 +- .../wasm-module-and-function-name-async.out | 2 +- ...asm-module-and-function-name-streaming.out | 2 +- .../test/message/wasm-module-name-async.out | 2 +- .../message/wasm-module-name-streaming.out | 2 +- deps/v8/test/message/wasm-no-name-async.out | 2 +- .../test/message/wasm-no-name-streaming.out | 2 +- .../test/message/wasm-trace-memory-liftoff.js | 3 +- deps/v8/test/message/wasm-trace-memory.js | 3 +- deps/v8/test/mjsunit/allocation-site-info.js | 6 + deps/v8/test/mjsunit/apply.js | 1 + deps/v8/test/mjsunit/array-constructor.js | 51 +- deps/v8/test/mjsunit/array-sort.js | 311 +- .../test/mjsunit/async-hooks/api-methods.js | 76 + .../mjsunit/async-hooks/async-await-tree.js | 74 + .../chained-promises.js} | 33 +- .../mjsunit/async-hooks/execution-order.js | 65 + .../async-hooks/promises-async-await.js | 70 + deps/v8/test/mjsunit/code-comments.js | 26 + deps/v8/test/mjsunit/code-coverage-utils.js | 2 +- deps/v8/test/mjsunit/compiler/alloc-number.js | 35 +- .../v8/test/mjsunit/compiler/array-species.js | 33 + ...-no-harmony-restrict-constructor-return.js | 12 - .../mjsunit/compiler/constructor-inlining.js | 27 +- deps/v8/test/mjsunit/compiler/dataview-get.js | 173 + deps/v8/test/mjsunit/compiler/dataview-set.js | 133 + .../v8/test/mjsunit/compiler/object-create.js | 27 + deps/v8/test/mjsunit/compiler/osr-nested.js | 11 +- deps/v8/test/mjsunit/compiler/osr-one.js | 36 +- deps/v8/test/mjsunit/compiler/osr-two.js | 38 +- .../test/mjsunit/compiler/promise-species.js | 29 + .../test/mjsunit/compiler/regress-841117.js | 11 + .../mjsunit/compiler/string-concat-deopt.js | 12 +- deps/v8/test/mjsunit/date.js | 5 + deps/v8/test/mjsunit/es6/dataview-length.js | 7 + deps/v8/test/mjsunit/es6/reflect.js | 2 - .../test/mjsunit/es6/regress/regress-7706.js | 16 + .../es6/typedarray-construct-by-array-like.js | 4 +- .../es6/typedarray-keyedstore-tonumber.js | 69 + deps/v8/test/mjsunit/es6/typedarray-sort.js | 56 + .../es8/async-await-interleaved.js} | 85 +- .../es8/constructor-returning-primitive.js | 318 - deps/v8/test/mjsunit/fast-literal.js | 2 +- .../test/mjsunit/generated-transition-stub.js | 67 +- .../mjsunit/harmony/array-flat-species.js | 31 + deps/v8/test/mjsunit/harmony/array-flat.js | 65 + .../mjsunit/harmony/array-flatMap-species.js | 31 + deps/v8/test/mjsunit/harmony/array-flatMap.js | 174 +- deps/v8/test/mjsunit/harmony/array-flatten.js | 38 - .../mjsunit/harmony/async-generators-basic.js | 25 +- deps/v8/test/mjsunit/harmony/bigint/basics.js | 6 +- .../mjsunit/harmony/bigint/comparisons.js | 8 +- .../test/mjsunit/harmony/bigint/dataview.js | 10 + .../bigintarray-keyedstore-tobigint.js | 64 + .../test/mjsunit/harmony/function-tostring.js | 24 + .../test/mjsunit/harmony/modules-import-9.js | 2 +- .../harmony/optional-catch-binding-breaks.js | 2 - .../mjsunit/harmony/optional-catch-binding.js | 2 - .../harmony/promise-prototype-finally.js | 2 +- .../harmony/public-instance-class-fields.js | 22 +- .../mjsunit/harmony/regexp-named-captures.js | 2 +- .../mjsunit/harmony/regexp-property-binary.js | 2 - .../harmony/regexp-property-char-class.js | 2 - .../harmony/regexp-property-disabled.js | 18 - .../harmony/regexp-property-enumerated.js | 2 - .../harmony/regexp-property-exact-match.js | 2 - .../regexp-property-general-category.js | 2 - .../harmony/regexp-property-invalid.js | 2 - .../mjsunit/harmony/regexp-property-lu-ui0.js | 1 - .../mjsunit/harmony/regexp-property-lu-ui1.js | 1 - .../mjsunit/harmony/regexp-property-lu-ui2.js | 1 - .../mjsunit/harmony/regexp-property-lu-ui3.js | 1 - .../mjsunit/harmony/regexp-property-lu-ui4.js | 1 - .../mjsunit/harmony/regexp-property-lu-ui5.js | 1 - .../mjsunit/harmony/regexp-property-lu-ui6.js | 1 - .../mjsunit/harmony/regexp-property-lu-ui7.js | 1 - .../mjsunit/harmony/regexp-property-lu-ui8.js | 1 - .../mjsunit/harmony/regexp-property-lu-ui9.js | 1 - .../regexp-property-script-extensions.js | 3010 +------ .../harmony/regexp-property-scripts.js | 2 - .../harmony/regexp-property-special.js | 2 - .../mjsunit/harmony/symbol-description.js | 53 + .../v8/test/mjsunit/ignition/throw-if-hole.js | 2 +- .../mjsunit/ignition/throw-if-not-hole.js | 6 +- .../ignition/throw-super-not-called.js | 2 +- .../intl-numberformat-formattoparts.js | 3 - .../{harmony => }/intl-pluralrules-select.js | 2 - deps/v8/test/mjsunit/lexicographic-compare.js | 62 + deps/v8/test/mjsunit/linecontinuation.js | 40 + deps/v8/test/mjsunit/messages.js | 21 +- deps/v8/test/mjsunit/mjsunit.js | 78 +- deps/v8/test/mjsunit/mjsunit.status | 92 +- deps/v8/test/mjsunit/object-keys.js | 58 + .../proto-elements-add-during-foreach.js | 40 +- .../regexp-modifiers-autogenerated-i18n.js | 2 +- .../mjsunit/regexp-modifiers-autogenerated.js | 2 +- .../v8/test/mjsunit/regress/regress-165637.js | 51 +- .../v8/test/mjsunit/regress/regress-2185-2.js | 145 - .../v8/test/mjsunit/regress/regress-298269.js | 35 +- .../v8/test/mjsunit/regress/regress-373283.js | 18 - .../v8/test/mjsunit/regress/regress-484544.js | 2 +- .../v8/test/mjsunit/regress/regress-705934.js | 4 +- .../v8/test/mjsunit/regress/regress-707410.js | 3 +- .../v8/test/mjsunit/regress/regress-747075.js | 9 +- deps/v8/test/mjsunit/regress/regress-7642.js | 58 + deps/v8/test/mjsunit/regress/regress-7652.js | 26 + deps/v8/test/mjsunit/regress/regress-7677.js | 63 + deps/v8/test/mjsunit/regress/regress-7716.js | 51 + deps/v8/test/mjsunit/regress/regress-7791.js | 120 + deps/v8/test/mjsunit/regress/regress-7893.js | 18 + .../v8/test/mjsunit/regress/regress-793588.js | 2 - .../v8/test/mjsunit/regress/regress-793793.js | 2 - .../v8/test/mjsunit/regress/regress-800651.js | 8 +- .../v8/test/mjsunit/regress/regress-829889.js | 17 - .../v8/test/mjsunit/regress/regress-838766.js | 14 + .../v8/test/mjsunit/regress/regress-840106.js | 17 + .../v8/test/mjsunit/regress/regress-842078.js | 14 + .../test/mjsunit/regress/regress-843062-1.js | 18 + .../test/mjsunit/regress/regress-843062-2.js | 8 + .../test/mjsunit/regress/regress-843062-3.js | 10 + .../v8/test/mjsunit/regress/regress-849663.js | 7 + .../v8/test/mjsunit/regress/regress-852258.js | 11 + .../test/mjsunit/regress/regress-854066-2.js | 14 + .../v8/test/mjsunit/regress/regress-854066.js | 13 + .../mjsunit/regress/regress-crbug-217858.js | 32 +- .../mjsunit/regress/regress-crbug-347903.js | 2 +- .../mjsunit/regress/regress-crbug-410033.js | 7 - .../mjsunit/regress/regress-crbug-469480.js | 13 - .../mjsunit/regress/regress-crbug-491062.js | 2 +- .../mjsunit/regress/regress-crbug-505007-1.js | 18 - .../mjsunit/regress/regress-crbug-506443.js | 89 - .../mjsunit/regress/regress-crbug-582703.js | 8 - .../mjsunit/regress/regress-crbug-724153.js | 2 +- .../mjsunit/regress/regress-crbug-743154.js | 2 + .../mjsunit/regress/regress-crbug-779344.js | 4 +- .../mjsunit/regress/regress-crbug-7907.js | 9 + .../mjsunit/regress/regress-crbug-823130.js | 40 + .../mjsunit/regress/regress-crbug-840220.js | 12 + .../mjsunit/regress/regress-crbug-841592.js | 21 + .../mjsunit/regress/regress-crbug-848165.js | 9 + .../mjsunit/regress/regress-crbug-849024.js | 43 + .../mjsunit/regress/regress-crbug-850005.js | 11 + .../mjsunit/regress/regress-crbug-851393.js | 7 + .../mjsunit/regress/regress-crbug-852592.js | 25 + .../mjsunit/regress/regress-crbug-854299.js | 27 + .../mjsunit/regress/regress-crbug-856095.js | 14 + .../mjsunit/regress/regress-crbug-859809.js | 21 + .../mjsunit/regress/regress-crbug-860788.js | 30 + .../mjsunit/regress/regress-deep-proto.js | 16 +- .../test/mjsunit/regress/regress-v8-7682.js | 22 + .../test/mjsunit/regress/regress-v8-7725.js | 11 + .../test/mjsunit/regress/wasm/regress-7785.js | 44 + .../test/mjsunit/regress/wasm/regress-7914.js | 18 + .../mjsunit/regress/wasm/regress-799952.js | 23 + .../mjsunit/regress/wasm/regress-834624.js | 30 + .../mjsunit/regress/wasm/regress-834693.js | 20 + .../mjsunit/regress/wasm/regress-837417.js | 15 +- .../mjsunit/regress/wasm/regress-840757.js | 21 + .../mjsunit/regress/wasm/regress-842501.js | 35 + .../mjsunit/regress/wasm/regress-843563.js | 20 + .../mjsunit/regress/wasm/regress-853453.js | 18 + .../mjsunit/regress/wasm/regress-854011.js | 47 + .../mjsunit/regress/wasm/regress-854050.js | 28 + deps/v8/test/mjsunit/stack-traces-2.js | 17 - deps/v8/test/mjsunit/string-split.js | 9 + .../mjsunit/tools/compiler-trace-flags.js | 36 + .../test/mjsunit/tools/profviz-test.default | 20 +- deps/v8/test/mjsunit/wasm/async-compile.js | 4 +- .../wasm/compiled-module-management.js | 28 +- .../wasm/compiled-module-serialization.js | 141 + .../mjsunit/wasm/default-liftoff-setting.js | 21 - deps/v8/test/mjsunit/wasm/export-global.js | 34 - .../mjsunit/wasm/export-mutable-global.js | 101 + deps/v8/test/mjsunit/wasm/globals.js | 8 +- deps/v8/test/mjsunit/wasm/import-function.js | 96 +- .../mjsunit/wasm/import-mutable-global.js | 201 + deps/v8/test/mjsunit/wasm/indirect-tables.js | 38 - deps/v8/test/mjsunit/wasm/interpreter.js | 25 + deps/v8/test/mjsunit/wasm/liftoff.js | 1 + deps/v8/test/mjsunit/wasm/module-memory.js | 14 +- deps/v8/test/mjsunit/wasm/mutable-globals.js | 65 +- deps/v8/test/mjsunit/wasm/print-code.js | 32 + .../mjsunit/wasm/serialize-lazy-module.js | 68 + deps/v8/test/mjsunit/wasm/start-function.js | 21 +- .../mjsunit/wasm/trap-handler-fallback.js | 202 + .../test/mjsunit/wasm/wasm-module-builder.js | 4 +- deps/v8/test/mjsunit/wasm/worker-memory.js | 16 + deps/v8/test/mjsunit/wasm/worker-module.js | 34 + deps/v8/test/mkgrokdump/BUILD.gn | 1 - deps/v8/test/mkgrokdump/mkgrokdump.cc | 32 +- deps/v8/test/mozilla/mozilla.status | 4 +- deps/v8/test/test262/harness-agent.js | 12 +- deps/v8/test/test262/test262.status | 412 +- deps/v8/test/test262/testcfg.py | 11 +- deps/v8/test/torque/test-torque.tq | 231 + deps/v8/test/unittests/BUILD.gn | 7 +- deps/v8/test/unittests/allocation-unittest.cc | 1 + deps/v8/test/unittests/base/list-unittest.cc | 92 + .../unittests/base/platform/time-unittest.cc | 9 + .../unittests/code-stub-assembler-unittest.cc | 6 +- .../compiler-dispatcher-unittest.cc | 33 +- .../optimizing-compile-dispatcher-unittest.cc | 4 +- .../unoptimized-compile-job-unittest.cc | 25 +- .../arm/instruction-selector-arm-unittest.cc | 48 + .../instruction-selector-arm64-unittest.cc | 89 + .../compiler/code-assembler-unittest.cc | 6 +- .../common-operator-reducer-unittest.cc | 4 +- .../constant-folding-reducer-unittest.cc | 234 + .../compiler/control-equivalence-unittest.cc | 5 +- .../effect-control-linearizer-unittest.cc | 12 +- .../test/unittests/compiler/graph-unittest.cc | 12 +- .../test/unittests/compiler/graph-unittest.h | 7 +- .../instruction-selector-ia32-unittest.cc | 52 + .../compiler/instruction-selector-unittest.cc | 280 +- .../compiler/instruction-selector-unittest.h | 2 +- .../compiler/instruction-sequence-unittest.cc | 5 + .../compiler/int64-lowering-unittest.cc | 21 +- .../compiler/js-builtin-reducer-unittest.cc | 242 - .../compiler/js-call-reducer-unittest.cc | 100 +- .../compiler/js-create-lowering-unittest.cc | 44 +- .../compiler/js-typed-lowering-unittest.cc | 10 +- .../compiler/loop-peeling-unittest.cc | 18 +- .../machine-operator-reducer-unittest.cc | 3 +- .../unittests/compiler/node-test-utils.cc | 7 +- .../test/unittests/compiler/node-test-utils.h | 4 + .../regalloc/move-optimizer-unittest.cc | 12 +- .../unittests/compiler/scheduler-unittest.cc | 8 +- .../compiler/simplified-lowering-unittest.cc | 6 +- .../simplified-operator-reducer-unittest.cc | 4 +- .../compiler/typed-optimization-unittest.cc | 170 +- .../test/unittests/compiler/typer-unittest.cc | 165 +- .../x64/instruction-selector-x64-unittest.cc | 52 + .../heap/embedder-tracing-unittest.cc | 12 +- .../test/unittests/heap/gc-tracer-unittest.cc | 59 + .../heap/heap-controller-unittest.cc | 118 + deps/v8/test/unittests/heap/heap-unittest.cc | 57 - .../test/unittests/heap/slot-set-unittest.cc | 16 +- .../v8/test/unittests/heap/spaces-unittest.cc | 1 - .../test/unittests/heap/unmapper-unittest.cc | 4 +- .../test/unittests/heap/worklist-unittest.cc | 22 +- .../bytecode-array-builder-unittest.cc | 20 +- .../interpreter-assembler-unittest.cc | 43 +- .../libplatform/default-platform-unittest.cc | 32 +- deps/v8/test/unittests/object-unittest.cc | 20 + .../unittests/parser/preparser-unittest.cc | 3 +- .../unittests/strings-storage-unittest.cc | 112 + deps/v8/test/unittests/test-helpers.cc | 5 +- deps/v8/test/unittests/unittests.status | 2 + deps/v8/test/unittests/utils-unittest.cc | 23 + .../wasm/function-body-decoder-unittest.cc | 39 +- .../unittests/wasm/module-decoder-unittest.cc | 118 +- .../wasm/streaming-decoder-unittest.cc | 11 +- .../wasm/wasm-code-manager-unittest.cc | 247 +- .../v8/test/wasm-spec-tests/tests.tar.gz.sha1 | 2 +- deps/v8/test/webkit/webkit.status | 15 +- deps/v8/third_party/antlr4/BUILD.gn | 339 + .../Cpp/runtime/src/atn/ATNSimulator.cpp | 3 +- .../Cpp/runtime/src/atn/ATNSimulator.h | 2 +- .../Cpp/runtime/src/atn/LexerATNSimulator.cpp | 6 +- .../runtime/src/atn/ParserATNSimulator.cpp | 8 +- .../runtime/src/atn/ProfilingATNSimulator.cpp | 2 +- deps/v8/third_party/eu-strip/README.v8 | 24 + deps/v8/third_party/eu-strip/bin/eu-strip | Bin 0 -> 105120 bytes deps/v8/third_party/googletest/BUILD.gn | 11 +- .../src/googletest/include/gtest/gtest_prod.h | 2 +- deps/v8/third_party/jinja2/LICENSE | 62 +- deps/v8/tools/avg.py | 210 + deps/v8/tools/clusterfuzz/v8_foozzie.py | 1 + deps/v8/tools/codemap.js | 14 +- deps/v8/tools/collect_deprecation_stats.sh | 35 + deps/v8/tools/dev/gm.py | 4 +- deps/v8/tools/dumpcpp.js | 2 +- deps/v8/tools/gcmole/BUILD.gn | 6 + deps/v8/tools/gcmole/gcmole.lua | 1 + deps/v8/tools/gcmole/run-gcmole.py | 6 + deps/v8/tools/gdbinit | 37 - deps/v8/tools/gen-postmortem-metadata.py | 23 +- deps/v8/tools/grokdump.py | 4 +- deps/v8/tools/heap-stats/categories.js | 6 +- .../tools/heap-stats/details-selection.html | 14 +- deps/v8/tools/heap-stats/details-selection.js | 35 +- deps/v8/tools/heap-stats/global-timeline.js | 91 +- deps/v8/tools/heap-stats/histogram-viewer.js | 37 +- deps/v8/tools/heap-stats/trace-file-reader.js | 23 + deps/v8/tools/ic-processor.js | 7 +- deps/v8/tools/lldb_commands.py | 76 +- deps/v8/tools/lldbinit | 31 - deps/v8/tools/logreader.js | 35 +- deps/v8/tools/map-processor.js | 11 +- deps/v8/tools/node/build_gn.py | 103 +- deps/v8/tools/node/fetch_deps.py | 21 +- deps/v8/tools/node/node_common.py | 6 +- deps/v8/tools/parse-processor | 3 +- deps/v8/tools/parse-processor.html | 96 +- deps/v8/tools/parse-processor.js | 580 +- deps/v8/tools/parser-shell.cc | 162 - deps/v8/tools/presubmit.py | 4 +- deps/v8/tools/profviz/composer.js | 26 +- deps/v8/tools/release/auto_roll.py | 2 +- deps/v8/tools/release/common_includes.py | 26 +- deps/v8/tools/release/git_recipes.py | 4 +- deps/v8/tools/release/releases.py | 576 -- deps/v8/tools/release/test_scripts.py | 526 +- deps/v8/tools/run-tests.py.vpython | 32 + deps/v8/tools/run_perf.py | 7 + deps/v8/tools/testrunner/base_runner.py | 10 +- deps/v8/tools/testrunner/local/variants.py | 5 +- deps/v8/tools/testrunner/num_fuzzer.py | 8 + deps/v8/tools/testrunner/objects/testcase.py | 7 +- deps/v8/tools/testrunner/standard_runner.py | 9 +- deps/v8/tools/tickprocessor.js | 31 +- deps/v8/tools/torque/format-torque.py | 36 + deps/v8/tools/torque/make-torque-parser.py | 71 + deps/v8/tools/torque/vscode-torque/README.md | 14 + .../vscode-torque/language-configuration.json | 25 + .../tools/torque/vscode-torque/package.json | 26 + .../syntaxes/torque.tmLanguage.json | 88 + deps/v8/tools/try_perf.py | 1 + deps/v8/tools/turbolizer/README.md | 17 +- deps/v8/tools/turbolizer/code-view.js | 170 - deps/v8/tools/turbolizer/constants.js | 30 - deps/v8/tools/turbolizer/deploy.sh | 18 + deps/v8/tools/turbolizer/edge.js | 79 - deps/v8/tools/turbolizer/empty-view.js | 19 - deps/v8/tools/turbolizer/graph-view.js | 1063 --- deps/v8/tools/turbolizer/index.html | 51 +- deps/v8/tools/turbolizer/lang-disassembly.js | 14 - deps/v8/tools/turbolizer/package-lock.json | 613 ++ deps/v8/tools/turbolizer/package.json | 26 + deps/v8/tools/turbolizer/schedule-view.js | 128 - deps/v8/tools/turbolizer/selection-broker.js | 99 - deps/v8/tools/turbolizer/selection.js | 108 - deps/v8/tools/turbolizer/src/code-view.ts | 267 + deps/v8/tools/turbolizer/src/constants.ts | 29 + .../disassembly-view.ts} | 157 +- deps/v8/tools/turbolizer/src/edge.ts | 92 + .../{graph-layout.js => src/graph-layout.ts} | 74 +- deps/v8/tools/turbolizer/src/graph-view.ts | 943 ++ .../v8/tools/turbolizer/src/graphmultiview.ts | 105 + .../tools/turbolizer/src/lang-disassembly.ts | 14 + .../turbolizer/{monkey.js => src/monkey.ts} | 8 +- .../tools/turbolizer/{node.js => src/node.ts} | 145 +- deps/v8/tools/turbolizer/src/schedule-view.ts | 191 + .../tools/turbolizer/src/selection-broker.ts | 77 + .../tools/turbolizer/src/selection-handler.ts | 24 + deps/v8/tools/turbolizer/src/selection.ts | 63 + .../tools/turbolizer/src/source-resolver.ts | 526 ++ deps/v8/tools/turbolizer/src/text-view.ts | 279 + .../tools/turbolizer/src/turbo-visualizer.ts | 294 + deps/v8/tools/turbolizer/src/util.ts | 110 + deps/v8/tools/turbolizer/src/view.ts | 38 + deps/v8/tools/turbolizer/text-view.js | 296 - deps/v8/tools/turbolizer/tsconfig.json | 29 + deps/v8/tools/turbolizer/tsfmt.json | 16 + deps/v8/tools/turbolizer/turbo-visualizer.css | 268 +- deps/v8/tools/turbolizer/turbo-visualizer.js | 320 - deps/v8/tools/turbolizer/turbolizer.png | Bin 0 -> 79281 bytes deps/v8/tools/turbolizer/util.js | 80 - deps/v8/tools/turbolizer/view.js | 33 - deps/v8/tools/ubsan/blacklist.txt | 2 + deps/v8/tools/v8heapconst.py | 501 +- deps/v8/tools/whitespace.txt | 4 +- 1824 files changed, 140941 insertions(+), 101177 deletions(-) create mode 100644 deps/v8/.gitattributes create mode 100644 deps/v8/custom_deps/.gitignore create mode 100644 deps/v8/custom_deps/OWNERS create mode 100644 deps/v8/custom_deps/README.md create mode 100644 deps/v8/infra/testing/PRESUBMIT.py create mode 100644 deps/v8/infra/testing/builders.pyl delete mode 100644 deps/v8/infra/testing/client.v8.pyl delete mode 100644 deps/v8/infra/testing/tryserver.v8.pyl delete mode 100644 deps/v8/src/arm/interface-descriptors-arm.h delete mode 100644 deps/v8/src/arm64/interface-descriptors-arm64.h create mode 100644 deps/v8/src/asan.h create mode 100644 deps/v8/src/assembler-arch.h delete mode 100644 deps/v8/src/ast/compile-time-value.cc delete mode 100644 deps/v8/src/ast/compile-time-value.h create mode 100644 deps/v8/src/async-hooks-wrapper.cc create mode 100644 deps/v8/src/async-hooks-wrapper.h create mode 100644 deps/v8/src/base/list.h create mode 100644 deps/v8/src/builtins/array-foreach.tq create mode 100644 deps/v8/src/builtins/array-sort.tq create mode 100644 deps/v8/src/builtins/array.tq create mode 100644 deps/v8/src/builtins/base.tq create mode 100644 deps/v8/src/builtins/builtins-data-view-gen.h create mode 100644 deps/v8/src/builtins/builtins-lazy-gen.cc create mode 100644 deps/v8/src/builtins/builtins-lazy-gen.h create mode 100644 deps/v8/src/builtins/builtins-test-gen.h rename deps/v8/src/builtins/{builtins-typedarray-gen.cc => builtins-typed-array-gen.cc} (88%) rename deps/v8/src/builtins/{builtins-typedarray-gen.h => builtins-typed-array-gen.h} (84%) rename deps/v8/src/builtins/{builtins-typedarray.cc => builtins-typed-array.cc} (95%) create mode 100644 deps/v8/src/builtins/data-view.tq create mode 100644 deps/v8/src/builtins/typed-array.tq create mode 100644 deps/v8/src/code-reference.cc create mode 100644 deps/v8/src/code-reference.h delete mode 100644 deps/v8/src/compilation-dependencies.cc delete mode 100644 deps/v8/src/compilation-dependencies.h create mode 100644 deps/v8/src/compiler/compilation-dependencies.cc create mode 100644 deps/v8/src/compiler/compilation-dependencies.h create mode 100644 deps/v8/src/compiler/constant-folding-reducer.cc create mode 100644 deps/v8/src/compiler/constant-folding-reducer.h delete mode 100644 deps/v8/src/compiler/js-builtin-reducer.cc delete mode 100644 deps/v8/src/compiler/js-builtin-reducer.h create mode 100644 deps/v8/src/compiler/js-heap-broker.cc create mode 100644 deps/v8/src/compiler/js-heap-broker.h create mode 100644 deps/v8/src/compiler/machine-graph.cc create mode 100644 deps/v8/src/compiler/machine-graph.h create mode 100644 deps/v8/src/compiler/node-origin-table.cc create mode 100644 deps/v8/src/compiler/node-origin-table.h create mode 100644 deps/v8/src/compiler/type-narrowing-reducer.cc create mode 100644 deps/v8/src/compiler/type-narrowing-reducer.h delete mode 100644 deps/v8/src/compiler/wasm-linkage.cc delete mode 100644 deps/v8/src/debug/debug.js delete mode 100644 deps/v8/src/debug/liveedit.js delete mode 100644 deps/v8/src/debug/mirrors.js create mode 100644 deps/v8/src/heap/heap-controller.cc create mode 100644 deps/v8/src/heap/heap-controller.h create mode 100644 deps/v8/src/ia32/constants-ia32.h create mode 100644 deps/v8/src/lsan.h delete mode 100644 deps/v8/src/managed.h create mode 100644 deps/v8/src/objects-definitions.h create mode 100644 deps/v8/src/objects/api-callbacks-inl.h create mode 100644 deps/v8/src/objects/api-callbacks.h create mode 100644 deps/v8/src/objects/intl-objects-inl.h create mode 100644 deps/v8/src/objects/js-locale-inl.h create mode 100644 deps/v8/src/objects/js-locale.cc create mode 100644 deps/v8/src/objects/js-locale.h create mode 100644 deps/v8/src/objects/js-relative-time-format-inl.h create mode 100644 deps/v8/src/objects/js-relative-time-format.cc create mode 100644 deps/v8/src/objects/js-relative-time-format.h create mode 100644 deps/v8/src/objects/managed.cc create mode 100644 deps/v8/src/objects/managed.h create mode 100644 deps/v8/src/objects/ordered-hash-table-inl.h create mode 100644 deps/v8/src/objects/ordered-hash-table.cc create mode 100644 deps/v8/src/objects/ordered-hash-table.h create mode 100644 deps/v8/src/objects/templates-inl.h create mode 100644 deps/v8/src/objects/templates.h create mode 100644 deps/v8/src/roots-inl.h create mode 100644 deps/v8/src/roots.h delete mode 100644 deps/v8/src/runtime/runtime-error.cc create mode 100644 deps/v8/src/snapshot/references.h create mode 100644 deps/v8/src/torque/Torque.g4 create mode 100644 deps/v8/src/torque/TorqueBaseListener.cpp create mode 100644 deps/v8/src/torque/TorqueBaseListener.h create mode 100644 deps/v8/src/torque/TorqueBaseVisitor.cpp create mode 100644 deps/v8/src/torque/TorqueBaseVisitor.h create mode 100644 deps/v8/src/torque/TorqueLexer.cpp create mode 100644 deps/v8/src/torque/TorqueLexer.h create mode 100644 deps/v8/src/torque/TorqueListener.cpp create mode 100644 deps/v8/src/torque/TorqueListener.h create mode 100644 deps/v8/src/torque/TorqueParser.cpp create mode 100644 deps/v8/src/torque/TorqueParser.h create mode 100644 deps/v8/src/torque/TorqueVisitor.cpp create mode 100644 deps/v8/src/torque/TorqueVisitor.h create mode 100644 deps/v8/src/torque/ast-generator.cc create mode 100644 deps/v8/src/torque/ast-generator.h create mode 100644 deps/v8/src/torque/ast.h create mode 100644 deps/v8/src/torque/contextual.h create mode 100644 deps/v8/src/torque/declarable.cc create mode 100644 deps/v8/src/torque/declarable.h create mode 100644 deps/v8/src/torque/declaration-visitor.cc create mode 100644 deps/v8/src/torque/declaration-visitor.h create mode 100644 deps/v8/src/torque/declarations.cc create mode 100644 deps/v8/src/torque/declarations.h create mode 100644 deps/v8/src/torque/file-visitor.cc create mode 100644 deps/v8/src/torque/file-visitor.h create mode 100644 deps/v8/src/torque/global-context.h create mode 100644 deps/v8/src/torque/implementation-visitor.cc create mode 100644 deps/v8/src/torque/implementation-visitor.h create mode 100644 deps/v8/src/torque/parameter-difference.h create mode 100644 deps/v8/src/torque/scope.cc create mode 100644 deps/v8/src/torque/scope.h create mode 100644 deps/v8/src/torque/torque.cc create mode 100644 deps/v8/src/torque/type-oracle.h create mode 100644 deps/v8/src/torque/types.cc create mode 100644 deps/v8/src/torque/types.h create mode 100644 deps/v8/src/torque/utils.cc create mode 100644 deps/v8/src/torque/utils.h create mode 100644 deps/v8/src/trap-handler/handler-inside-linux.cc create mode 100644 deps/v8/src/trap-handler/handler-outside-linux.cc create mode 100644 deps/v8/src/trap-handler/handler-outside-win.cc create mode 100644 deps/v8/src/turbo-assembler.cc create mode 100644 deps/v8/src/turbo-assembler.h create mode 100644 deps/v8/src/wasm/baseline/liftoff-compiler.h delete mode 100644 deps/v8/src/wasm/compilation-manager.cc delete mode 100644 deps/v8/src/wasm/compilation-manager.h create mode 100644 deps/v8/src/wasm/function-compiler.cc create mode 100644 deps/v8/src/wasm/function-compiler.h create mode 100644 deps/v8/src/wasm/jump-table-assembler.cc create mode 100644 deps/v8/src/wasm/jump-table-assembler.h create mode 100644 deps/v8/src/wasm/value-type.h delete mode 100644 deps/v8/src/wasm/wasm-code-specialization.cc delete mode 100644 deps/v8/src/wasm/wasm-code-specialization.h create mode 100644 deps/v8/src/wasm/wasm-linkage.h create mode 100644 deps/v8/src/x64/constants-x64.h create mode 100644 deps/v8/test/cctest/heap/test-unmapper.cc create mode 100644 deps/v8/test/cctest/test-inspector.cc create mode 100644 deps/v8/test/cctest/test-roots.cc create mode 100644 deps/v8/test/cctest/torque/test-torque.cc create mode 100644 deps/v8/test/cctest/wasm/test-wasm-serialization.cc create mode 100644 deps/v8/test/cctest/wasm/test-wasm-shared-engine.cc create mode 100644 deps/v8/test/debugger/debug/debug-break-return.js create mode 100644 deps/v8/test/debugger/debug/debug-live-edit-recursion.js delete mode 100644 deps/v8/test/debugger/debug/debug-liveedit-diff.js delete mode 100644 deps/v8/test/debugger/debug/debug-liveedit-utils.js delete mode 100644 deps/v8/test/debugger/debug/debug-script.js delete mode 100644 deps/v8/test/debugger/debug/debug-setbreakpoint.js delete mode 100644 deps/v8/test/debugger/debug/debug-sourceinfo.js delete mode 100644 deps/v8/test/debugger/debug/regress/regress-1853.js delete mode 100644 deps/v8/test/debugger/debug/regress/regress-419663.js delete mode 100644 deps/v8/test/debugger/debug/regress/regress-crbug-424142.js delete mode 100644 deps/v8/test/debugger/debug/regress/regress-crbug-481896.js delete mode 100644 deps/v8/test/debugger/debug/regress/regress-crbug-517592.js create mode 100644 deps/v8/test/debugger/debug/side-effect/debug-evaluate-no-side-effect-regexp.js create mode 100644 deps/v8/test/debugger/regress/regress-crbug-840288.js create mode 100644 deps/v8/test/inspector/PRESUBMIT.py create mode 100644 deps/v8/test/inspector/debugger/async-function-step-out-expected.txt create mode 100644 deps/v8/test/inspector/debugger/async-function-step-out-optimized-expected.txt create mode 100644 deps/v8/test/inspector/debugger/async-function-step-out-optimized.js create mode 100644 deps/v8/test/inspector/debugger/async-function-step-out.js create mode 100644 deps/v8/test/inspector/debugger/break-locations-var-init-optimized-expected.txt create mode 100644 deps/v8/test/inspector/debugger/break-locations-var-init-optimized.js create mode 100644 deps/v8/test/inspector/debugger/break-on-exception-and-step-expected.txt create mode 100644 deps/v8/test/inspector/debugger/break-on-exception-and-step.js create mode 100644 deps/v8/test/inspector/debugger/break-on-exception-compiler-errors-expected.txt create mode 100644 deps/v8/test/inspector/debugger/break-on-exception-compiler-errors.js create mode 100644 deps/v8/test/inspector/debugger/disable-agent-on-pause-expected.txt create mode 100644 deps/v8/test/inspector/debugger/disable-agent-on-pause.js create mode 100644 deps/v8/test/inspector/debugger/evaluate-on-call-frame-expected.txt create mode 100644 deps/v8/test/inspector/debugger/evaluate-on-call-frame-timeout-expected.txt create mode 100644 deps/v8/test/inspector/debugger/evaluate-on-call-frame-timeout.js create mode 100644 deps/v8/test/inspector/debugger/evaluate-on-call-frame.js create mode 100644 deps/v8/test/inspector/debugger/pause-inside-blackboxed-optimized-expected.txt create mode 100644 deps/v8/test/inspector/debugger/pause-inside-blackboxed-optimized.js create mode 100644 deps/v8/test/inspector/debugger/regress-crbug-481896-expected.txt create mode 100644 deps/v8/test/inspector/debugger/regress-crbug-481896.js create mode 100644 deps/v8/test/inspector/debugger/regression-1853-expected.txt create mode 100644 deps/v8/test/inspector/debugger/regression-1853.js create mode 100644 deps/v8/test/inspector/debugger/regression-419663-expected.txt create mode 100644 deps/v8/test/inspector/debugger/regression-419663.js create mode 100644 deps/v8/test/inspector/debugger/regression-424142-expected.txt create mode 100644 deps/v8/test/inspector/debugger/regression-424142.js create mode 100644 deps/v8/test/inspector/debugger/remove-breakpoint-at-breakpoint-expected.txt create mode 100644 deps/v8/test/inspector/debugger/remove-breakpoint-at-breakpoint.js create mode 100644 deps/v8/test/inspector/debugger/set-breakpoint-after-liveedit-expected.txt create mode 100644 deps/v8/test/inspector/debugger/set-breakpoint-after-liveedit.js create mode 100644 deps/v8/test/inspector/debugger/set-breakpoint-expected.txt create mode 100644 deps/v8/test/inspector/debugger/set-breakpoint-on-function-call-expected.txt create mode 100644 deps/v8/test/inspector/debugger/set-breakpoint-on-function-call.js create mode 100644 deps/v8/test/inspector/debugger/set-breakpoint.js create mode 100644 deps/v8/test/inspector/debugger/set-script-source-stack-padding-expected.txt create mode 100644 deps/v8/test/inspector/debugger/set-script-source-stack-padding.js create mode 100644 deps/v8/test/inspector/debugger/step-into-out-expected.txt create mode 100644 deps/v8/test/inspector/debugger/step-into-out.js create mode 100644 deps/v8/test/inspector/debugger/terminate-execution-on-pause-expected.txt create mode 100644 deps/v8/test/inspector/debugger/terminate-execution-on-pause.js create mode 100644 deps/v8/test/inspector/debugger/wasm-set-breakpoint-expected.txt create mode 100644 deps/v8/test/inspector/debugger/wasm-set-breakpoint.js create mode 100644 deps/v8/test/inspector/runtime/add-binding-expected.txt create mode 100644 deps/v8/test/inspector/runtime/add-binding.js create mode 100644 deps/v8/test/inspector/runtime/command-line-api-without-side-effects-expected.txt create mode 100644 deps/v8/test/inspector/runtime/command-line-api-without-side-effects.js delete mode 100644 deps/v8/test/inspector/runtime/console-deprecated-methods-expected.txt delete mode 100644 deps/v8/test/inspector/runtime/console-deprecated-methods.js create mode 100644 deps/v8/test/inspector/runtime/enable-async-stack-expected.txt create mode 100644 deps/v8/test/inspector/runtime/enable-async-stack.js create mode 100644 deps/v8/test/inspector/runtime/evaluate-timeout-expected.txt create mode 100644 deps/v8/test/inspector/runtime/evaluate-timeout.js create mode 100644 deps/v8/test/inspector/runtime/function-location-expected.txt create mode 100644 deps/v8/test/inspector/runtime/function-location.js create mode 100644 deps/v8/test/inspector/runtime/set-max-call-stack-size-expected.txt create mode 100644 deps/v8/test/inspector/runtime/set-max-call-stack-size.js create mode 100644 deps/v8/test/intl/general/language_tags_with_preferred_values.js create mode 100644 deps/v8/test/intl/locale/locale-canonicalization.js create mode 100644 deps/v8/test/intl/locale/locale-constructor.js create mode 100644 deps/v8/test/intl/locale/locale-properties.js create mode 100644 deps/v8/test/intl/relative-time-format/constructor.js create mode 100644 deps/v8/test/intl/relative-time-format/default-locale-fr-CA.js create mode 100644 deps/v8/test/intl/relative-time-format/default-locale-pt-BR.js create mode 100644 deps/v8/test/intl/relative-time-format/resolved-options.js create mode 100644 deps/v8/test/js-perf-test/Array/slice.js create mode 100644 deps/v8/test/js-perf-test/ArraySort/sort-base.js create mode 100644 deps/v8/test/js-perf-test/ArraySort/sort-cmpfn-kindchange.js create mode 100644 deps/v8/test/js-perf-test/ArraySort/sort-cmpfn.js create mode 100644 deps/v8/test/js-perf-test/ArraySort/sort-lengths.js create mode 100644 deps/v8/test/js-perf-test/ArraySort/sort-megamorphic.js create mode 100644 deps/v8/test/js-perf-test/ArraySort/sort-presorted.js create mode 100644 deps/v8/test/js-perf-test/DataView/dataviewtest.js create mode 100644 deps/v8/test/js-perf-test/DataView/run.js create mode 100644 deps/v8/test/js-perf-test/RegExp/inline_test.js create mode 100644 deps/v8/test/js-perf-test/Strings/string-split.js create mode 100644 deps/v8/test/js-perf-test/Strings/string-startsendswith-comp.js create mode 100644 deps/v8/test/js-perf-test/TypedArrays/sort-bigint.js create mode 100644 deps/v8/test/js-perf-test/TypedArrays/sort-cmpfn-bigint.js create mode 100644 deps/v8/test/message/mjsunit/fail/assert-promise-result-rejects-empty.js create mode 100644 deps/v8/test/message/mjsunit/fail/assert-promise-result-rejects-empty.out create mode 100644 deps/v8/test/message/mjsunit/fail/assert-promise-result-rejects-with-throw-empty.js create mode 100644 deps/v8/test/message/mjsunit/fail/assert-promise-result-rejects-with-throw-empty.out create mode 100644 deps/v8/test/message/mjsunit/fail/assert-promise-result-rejects.js create mode 100644 deps/v8/test/message/mjsunit/fail/assert-promise-result-rejects.out create mode 100644 deps/v8/test/message/mjsunit/fail/assert-promise-result-resolves.js create mode 100644 deps/v8/test/message/mjsunit/fail/assert-promise-result-resolves.out create mode 100644 deps/v8/test/message/mjsunit/success/assert-promise-result-rejects.js create mode 100644 deps/v8/test/message/mjsunit/success/assert-promise-result-rejects.out create mode 100644 deps/v8/test/message/mjsunit/success/assert-promise-result-resolves-empty.js create mode 100644 deps/v8/test/message/mjsunit/success/assert-promise-result-resolves-empty.out create mode 100644 deps/v8/test/message/mjsunit/success/assert-promise-result-resolves.js create mode 100644 deps/v8/test/message/mjsunit/success/assert-promise-result-resolves.out create mode 100644 deps/v8/test/message/regress/fail/regress-crbug-842101.js create mode 100644 deps/v8/test/message/regress/fail/regress-crbug-842101.out create mode 100644 deps/v8/test/mjsunit/async-hooks/api-methods.js create mode 100644 deps/v8/test/mjsunit/async-hooks/async-await-tree.js rename deps/v8/test/mjsunit/{regress/regress-2988.js => async-hooks/chained-promises.js} (66%) create mode 100644 deps/v8/test/mjsunit/async-hooks/execution-order.js create mode 100644 deps/v8/test/mjsunit/async-hooks/promises-async-await.js create mode 100644 deps/v8/test/mjsunit/code-comments.js create mode 100644 deps/v8/test/mjsunit/compiler/array-species.js delete mode 100644 deps/v8/test/mjsunit/compiler/constructor-inlining-no-harmony-restrict-constructor-return.js create mode 100644 deps/v8/test/mjsunit/compiler/dataview-get.js create mode 100644 deps/v8/test/mjsunit/compiler/dataview-set.js create mode 100644 deps/v8/test/mjsunit/compiler/object-create.js create mode 100644 deps/v8/test/mjsunit/compiler/promise-species.js create mode 100644 deps/v8/test/mjsunit/compiler/regress-841117.js create mode 100644 deps/v8/test/mjsunit/es6/dataview-length.js create mode 100644 deps/v8/test/mjsunit/es6/regress/regress-7706.js create mode 100644 deps/v8/test/mjsunit/es6/typedarray-keyedstore-tonumber.js rename deps/v8/test/{debugger/debug/debug-liveedit-stack-padding.js => mjsunit/es8/async-await-interleaved.js} (55%) delete mode 100644 deps/v8/test/mjsunit/es8/constructor-returning-primitive.js create mode 100644 deps/v8/test/mjsunit/harmony/array-flat-species.js create mode 100644 deps/v8/test/mjsunit/harmony/array-flat.js create mode 100644 deps/v8/test/mjsunit/harmony/array-flatMap-species.js delete mode 100644 deps/v8/test/mjsunit/harmony/array-flatten.js create mode 100644 deps/v8/test/mjsunit/harmony/bigintarray-keyedstore-tobigint.js delete mode 100644 deps/v8/test/mjsunit/harmony/regexp-property-disabled.js create mode 100644 deps/v8/test/mjsunit/harmony/symbol-description.js rename deps/v8/test/mjsunit/{harmony => }/intl-numberformat-formattoparts.js (99%) rename deps/v8/test/mjsunit/{harmony => }/intl-pluralrules-select.js (97%) create mode 100644 deps/v8/test/mjsunit/lexicographic-compare.js create mode 100644 deps/v8/test/mjsunit/linecontinuation.js delete mode 100644 deps/v8/test/mjsunit/regress/regress-2185-2.js delete mode 100644 deps/v8/test/mjsunit/regress/regress-373283.js create mode 100644 deps/v8/test/mjsunit/regress/regress-7642.js create mode 100644 deps/v8/test/mjsunit/regress/regress-7652.js create mode 100644 deps/v8/test/mjsunit/regress/regress-7677.js create mode 100644 deps/v8/test/mjsunit/regress/regress-7716.js create mode 100644 deps/v8/test/mjsunit/regress/regress-7791.js create mode 100644 deps/v8/test/mjsunit/regress/regress-7893.js delete mode 100644 deps/v8/test/mjsunit/regress/regress-829889.js create mode 100644 deps/v8/test/mjsunit/regress/regress-838766.js create mode 100644 deps/v8/test/mjsunit/regress/regress-840106.js create mode 100644 deps/v8/test/mjsunit/regress/regress-842078.js create mode 100644 deps/v8/test/mjsunit/regress/regress-843062-1.js create mode 100644 deps/v8/test/mjsunit/regress/regress-843062-2.js create mode 100644 deps/v8/test/mjsunit/regress/regress-843062-3.js create mode 100644 deps/v8/test/mjsunit/regress/regress-849663.js create mode 100644 deps/v8/test/mjsunit/regress/regress-852258.js create mode 100644 deps/v8/test/mjsunit/regress/regress-854066-2.js create mode 100644 deps/v8/test/mjsunit/regress/regress-854066.js delete mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-410033.js delete mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-469480.js delete mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-505007-1.js delete mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-506443.js delete mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-582703.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-7907.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-823130.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-840220.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-841592.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-848165.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-849024.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-850005.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-851393.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-852592.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-854299.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-856095.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-859809.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-860788.js create mode 100644 deps/v8/test/mjsunit/regress/regress-v8-7682.js create mode 100644 deps/v8/test/mjsunit/regress/regress-v8-7725.js create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-7785.js create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-7914.js create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-799952.js create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-834624.js create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-834693.js create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-840757.js create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-842501.js create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-843563.js create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-853453.js create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-854011.js create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-854050.js create mode 100644 deps/v8/test/mjsunit/tools/compiler-trace-flags.js delete mode 100644 deps/v8/test/mjsunit/wasm/default-liftoff-setting.js create mode 100644 deps/v8/test/mjsunit/wasm/export-mutable-global.js create mode 100644 deps/v8/test/mjsunit/wasm/import-mutable-global.js create mode 100644 deps/v8/test/mjsunit/wasm/print-code.js create mode 100644 deps/v8/test/mjsunit/wasm/serialize-lazy-module.js create mode 100644 deps/v8/test/mjsunit/wasm/trap-handler-fallback.js create mode 100644 deps/v8/test/mjsunit/wasm/worker-module.js create mode 100644 deps/v8/test/torque/test-torque.tq create mode 100644 deps/v8/test/unittests/base/list-unittest.cc create mode 100644 deps/v8/test/unittests/compiler/constant-folding-reducer-unittest.cc delete mode 100644 deps/v8/test/unittests/compiler/js-builtin-reducer-unittest.cc create mode 100644 deps/v8/test/unittests/heap/heap-controller-unittest.cc create mode 100644 deps/v8/test/unittests/strings-storage-unittest.cc create mode 100644 deps/v8/third_party/antlr4/BUILD.gn create mode 100644 deps/v8/third_party/eu-strip/README.v8 create mode 100755 deps/v8/third_party/eu-strip/bin/eu-strip create mode 100755 deps/v8/tools/avg.py create mode 100755 deps/v8/tools/collect_deprecation_stats.sh delete mode 100755 deps/v8/tools/lldbinit delete mode 100644 deps/v8/tools/parser-shell.cc delete mode 100755 deps/v8/tools/release/releases.py create mode 100644 deps/v8/tools/run-tests.py.vpython create mode 100755 deps/v8/tools/torque/format-torque.py create mode 100755 deps/v8/tools/torque/make-torque-parser.py create mode 100644 deps/v8/tools/torque/vscode-torque/README.md create mode 100644 deps/v8/tools/torque/vscode-torque/language-configuration.json create mode 100644 deps/v8/tools/torque/vscode-torque/package.json create mode 100644 deps/v8/tools/torque/vscode-torque/syntaxes/torque.tmLanguage.json delete mode 100644 deps/v8/tools/turbolizer/code-view.js delete mode 100644 deps/v8/tools/turbolizer/constants.js create mode 100755 deps/v8/tools/turbolizer/deploy.sh delete mode 100644 deps/v8/tools/turbolizer/edge.js delete mode 100644 deps/v8/tools/turbolizer/empty-view.js delete mode 100644 deps/v8/tools/turbolizer/graph-view.js delete mode 100644 deps/v8/tools/turbolizer/lang-disassembly.js create mode 100644 deps/v8/tools/turbolizer/package-lock.json create mode 100644 deps/v8/tools/turbolizer/package.json delete mode 100644 deps/v8/tools/turbolizer/schedule-view.js delete mode 100644 deps/v8/tools/turbolizer/selection-broker.js delete mode 100644 deps/v8/tools/turbolizer/selection.js create mode 100644 deps/v8/tools/turbolizer/src/code-view.ts create mode 100644 deps/v8/tools/turbolizer/src/constants.ts rename deps/v8/tools/turbolizer/{disassembly-view.js => src/disassembly-view.ts} (65%) create mode 100644 deps/v8/tools/turbolizer/src/edge.ts rename deps/v8/tools/turbolizer/{graph-layout.js => src/graph-layout.ts} (88%) create mode 100644 deps/v8/tools/turbolizer/src/graph-view.ts create mode 100644 deps/v8/tools/turbolizer/src/graphmultiview.ts create mode 100644 deps/v8/tools/turbolizer/src/lang-disassembly.ts rename deps/v8/tools/turbolizer/{monkey.js => src/monkey.ts} (57%) rename deps/v8/tools/turbolizer/{node.js => src/node.ts} (60%) create mode 100644 deps/v8/tools/turbolizer/src/schedule-view.ts create mode 100644 deps/v8/tools/turbolizer/src/selection-broker.ts create mode 100644 deps/v8/tools/turbolizer/src/selection-handler.ts create mode 100644 deps/v8/tools/turbolizer/src/selection.ts create mode 100644 deps/v8/tools/turbolizer/src/source-resolver.ts create mode 100644 deps/v8/tools/turbolizer/src/text-view.ts create mode 100644 deps/v8/tools/turbolizer/src/turbo-visualizer.ts create mode 100644 deps/v8/tools/turbolizer/src/util.ts create mode 100644 deps/v8/tools/turbolizer/src/view.ts delete mode 100644 deps/v8/tools/turbolizer/text-view.js create mode 100644 deps/v8/tools/turbolizer/tsconfig.json create mode 100644 deps/v8/tools/turbolizer/tsfmt.json delete mode 100644 deps/v8/tools/turbolizer/turbo-visualizer.js create mode 100644 deps/v8/tools/turbolizer/turbolizer.png delete mode 100644 deps/v8/tools/turbolizer/util.js delete mode 100644 deps/v8/tools/turbolizer/view.js create mode 100644 deps/v8/tools/ubsan/blacklist.txt diff --git a/deps/v8/.gitattributes b/deps/v8/.gitattributes new file mode 100644 index 00000000000000..7ef1e1b74b01e0 --- /dev/null +++ b/deps/v8/.gitattributes @@ -0,0 +1,5 @@ +# Automatically normalize line endings (to LF) for all text-based files. +* text=auto eol=lf +# Do not modify line endings for binary files (which are sometimes auto +# detected as text files by git). +*.png binary diff --git a/deps/v8/.gitignore b/deps/v8/.gitignore index 630c3f2a09d3f8..a6339d7e6fe693 100644 --- a/deps/v8/.gitignore +++ b/deps/v8/.gitignore @@ -33,6 +33,7 @@ .pydevproject .settings .vscode +/Default/ /_* /build /buildtools @@ -47,6 +48,7 @@ /test/benchmarks/data /test/fuzzer/wasm_corpus /test/fuzzer/wasm_corpus.tar.gz +!/test/mjsunit/d8 /test/mozilla/data /test/test262/data /test/test262/harness @@ -56,10 +58,13 @@ /third_party/* !/third_party/antlr4 !/third_party/binutils -!/third_party/inspector_protocol !/third_party/colorama /third_party/colorama/src +!/third_party/eu-strip !/third_party/googletest +/third_party/googletest/* +!/third_party/googletest/BUILD.gn +!/third_party/googletest/src /third_party/googletest/src/* !/third_party/googletest/src/googletest /third_party/googletest/src/googletest/* @@ -68,6 +73,9 @@ !/third_party/googletest/src/googletest/include/gtest /third_party/googletest/src/googletest/include/gtest/* !/third_party/googletest/src/googletest/include/gtest/gtest_prod.h +!/third_party/inspector_protocol +!/third_party/jinja2 +!/third_party/markupsafe /tools/clang /tools/gcmole/gcmole-tools /tools/gcmole/gcmole-tools.tar.gz @@ -92,18 +100,16 @@ TAGS bsuite compile_commands.json d8 -!/test/mjsunit/d8 d8_g gccauses gcsuspects gtags.files +node_modules shell shell_g tags +tools/turbolizer/build turbo*.cfg turbo*.dot turbo*.json v8.ignition_dispatches_table.json -/Default/ -!/third_party/jinja2 -!/third_party/markupsafe diff --git a/deps/v8/AUTHORS b/deps/v8/AUTHORS index 4b5163961d282e..6f4b3fe6aeae70 100644 --- a/deps/v8/AUTHORS +++ b/deps/v8/AUTHORS @@ -32,6 +32,7 @@ Facebook, Inc. <*@fb.com> Facebook, Inc. <*@oculus.com> Vewd Software AS <*@vewd.com> Groupon <*@groupon.com> +Cloudflare, Inc. <*@cloudflare.com> Aaron Bieber Abdulla Kamar @@ -41,6 +42,7 @@ Alexander Botero-Lowry Alexander Karpinsky Alexandre Vassalotti Alexis Campailla +Amos Lim Andreas Anyuru Andrew Paprocki Andrei Kashcha @@ -61,6 +63,7 @@ Daniel Andersson Daniel Bevenius Daniel James Deon Dior +Dominic Farolini Douglas Crosher Dusan Milosavljevic Erich Ocean @@ -70,11 +73,13 @@ Felix Geisendörfer Filipe David Manana Franziska Hinkelmann Geoffrey Garside +Gergely Nagy Gus Caplan Gwang Yoon Hwang Henrique Ferreiro Hirofumi Mako Honggyu Kim +Ingvar Stepanyan Ioseb Dzmanashvili Isiah Meadows Jaime Bernardo @@ -125,8 +130,10 @@ Paul Lind Qingyan Li Qiuyi Zhang Rafal Krypa +Ray Glover Refael Ackermann Rene Rebe +Rick Waldron Rob Wu Robert Mustacchi Robert Nagy @@ -142,6 +149,7 @@ Taketoshi Aono Teddy Katz Tiancheng "Timothy" Gu Tobias Burnus +Tobias Nießen Victor Costan Vlad Burlik Vladimir Krivosheev diff --git a/deps/v8/BUILD.gn b/deps/v8/BUILD.gn index 4b48f7d6874df9..e76866f9d5c0e9 100644 --- a/deps/v8/BUILD.gn +++ b/deps/v8/BUILD.gn @@ -22,6 +22,13 @@ declare_args() { # Print to stdout on Android. v8_android_log_stdout = false + # Dynamically set an additional dependency from v8/custom_deps. + v8_custom_deps = "" + + # Turns on deprecation warnings for HeapObject::GetIsolate, + # HeapObject::GetHeap, Handle(T* obj) and handle(T* obj). + v8_deprecate_get_isolate = false + # Turns on all V8 debug features. Enables running V8 in a pseudo debug mode # within a release Chrome. v8_enable_debugging_features = is_debug @@ -60,7 +67,7 @@ declare_args() { v8_enable_vtunejit = false # Sets -dENABLE_HANDLE_ZAPPING. - v8_enable_handle_zapping = is_debug + v8_enable_handle_zapping = true # Enable slow dchecks. v8_enable_slow_dchecks = false @@ -70,12 +77,15 @@ declare_args() { # Enable embedded builtins. # TODO(jgruber,v8:6666): Support ia32 and maybe MSVC. - # TODO(jgruber,v8:6666): Re-enable after the M67 branch point. - v8_enable_embedded_builtins = false + v8_enable_embedded_builtins = + v8_use_snapshot && v8_current_cpu != "x86" && (!is_win || is_clang) # Enable code-generation-time checking of types in the CodeStubAssembler. v8_enable_verify_csa = false + # Enable pointer compression (sets -dV8_COMPRESS_POINTERS). + v8_enable_pointer_compression = false + # Interpreted regexp engine exists as platform-independent alternative # based where the regular expression is compiled to a bytecode. v8_interpreted_regexp = false @@ -176,6 +186,9 @@ if (v8_check_microtasks_scopes_consistency == "") { v8_enable_debugging_features || dcheck_always_on } +assert(!v8_enable_embedded_builtins || v8_use_snapshot, + "Embedded builtins only work with snapshots") + # Specifies if the target build is a simulator build. Comparing target cpu # with v8 target cpu to not affect simulator builds for making cross-compile # snapshots. @@ -190,17 +203,25 @@ v8_toolset_for_shell = "host" config("internal_config") { visibility = [ ":*" ] # Only targets in this file can depend on this. - include_dirs = [ "." ] + include_dirs = [ + ".", + "$target_gen_dir", + ] + + defines = [] if (is_component_build) { - defines = [ "BUILDING_V8_SHARED" ] + defines += [ "BUILDING_V8_SHARED" ] } } config("internal_config_base") { visibility = [ ":*" ] # Only targets in this file can depend on this. - include_dirs = [ "." ] + include_dirs = [ + ".", + "$target_gen_dir", + ] } # This config should be applied to code using the libplatform. @@ -280,6 +301,9 @@ config("features") { if (v8_enable_minor_mc) { defines += [ "ENABLE_MINOR_MC" ] } + if (v8_enable_pointer_compression) { + defines += [ "V8_COMPRESS_POINTERS" ] + } if (v8_enable_object_print) { defines += [ "OBJECT_PRINT" ] } @@ -314,6 +338,9 @@ config("features") { if (v8_imminent_deprecation_warnings) { defines += [ "V8_IMMINENT_DEPRECATION_WARNINGS" ] } + if (v8_deprecate_get_isolate) { + defines += [ "DEPRECATE_GET_ISOLATE" ] + } if (v8_enable_i18n_support) { defines += [ "V8_INTL_SUPPORT" ] } @@ -557,6 +584,10 @@ config("toolchain") { v8_current_cpu == "mips64el") { cflags += [ "-Wshorten-64-to-32" ] } + + if (v8_deprecate_get_isolate) { + cflags += [ "-Wno-error=deprecated" ] + } } if (is_win) { @@ -569,7 +600,14 @@ config("toolchain") { "/wd4703", # Potentially uninitialized local pointer variable. "/wd4709", # Comma operator within array index expr (bugged). "/wd4714", # Function marked forceinline not inlined. + + # MSVC assumes that control can get past an exhaustive switch and then + # warns if there's no return there (see https://crbug.com/v8/7658) + "/wd4715", # Not all control paths return a value. + "/wd4718", # Recursive call has no side-effect. + "/wd4723", # https://crbug.com/v8/7771 + "/wd4724", # https://crbug.com/v8/7771 "/wd4800", # Forcing value to bool. ] } @@ -580,6 +618,10 @@ config("toolchain") { # signed overflow does not occur. Generates false positives (see # http://crbug.com/v8/6341). "-Wno-strict-overflow", + + # GCC assumes that control can get past an exhaustive switch and then + # warns if there's no return there (see https://crbug.com/v8/7658). + "-Wno-return-type", ] } } @@ -619,9 +661,6 @@ action("js2c") { "src/js/prologue.js", "src/js/array.js", "src/js/typedarray.js", - "src/debug/mirrors.js", - "src/debug/debug.js", - "src/debug/liveedit.js", ] outputs = [ @@ -827,6 +866,109 @@ action("postmortem-metadata") { rebase_path(sources, root_build_dir) } +torque_files = [ + "src/builtins/base.tq", + "src/builtins/array.tq", + "src/builtins/array-foreach.tq", + "src/builtins/array-sort.tq", + "src/builtins/typed-array.tq", + "src/builtins/data-view.tq", + "test/torque/test-torque.tq", +] + +torque_modules = [ + "base", + "array", + "typed-array", + "data-view", + "test", +] + +action("run_torque") { + visibility = [ + ":*", + "tools/gcmole/:*", + "test/cctest/:*", + ] + + # We reuse the snapshot toolchain for building torque to not build v8_libbase + # on the host more than once. On mips with big endian, the snapshot toolchain + # is the target toolchain and, hence, can't be used. + v8_torque_toolchain = v8_snapshot_toolchain + if (host_cpu == "x64" && + (v8_current_cpu == "mips" || v8_current_cpu == "mips64")) { + v8_torque_toolchain = "//build/toolchain/linux:clang_x64" + } + + deps = [ + ":torque($v8_torque_toolchain)", + ] + + script = "tools/run.py" + + sources = torque_files + + outputs = [ + "$target_gen_dir/torque-generated/builtin-definitions-from-dsl.h", + ] + foreach(module, torque_modules) { + outputs += [ + "$target_gen_dir/torque-generated/builtins-$module-from-dsl-gen.cc", + "$target_gen_dir/torque-generated/builtins-$module-from-dsl-gen.h", + ] + } + + args = [ + "./" + rebase_path(get_label_info(":torque($v8_torque_toolchain)", + "root_out_dir") + "/torque", + root_build_dir), + "-o", + rebase_path("$target_gen_dir/torque-generated", root_build_dir), + ] + + foreach(file, torque_files) { + args += [ rebase_path(file, root_build_dir) ] + } +} + +v8_header_set("torque_generated_core") { + visibility = [ ":*" ] # Only targets in this file can depend on this. + + deps = [ + ":run_torque", + ] + + sources = [ + "$target_gen_dir/torque-generated/builtin-definitions-from-dsl.h", + ] + + configs = [ ":internal_config" ] +} + +v8_source_set("torque_generated_initializers") { + visibility = [ ":*" ] # Only targets in this file can depend on this. + + deps = [ + ":run_torque", + ] + + if (v8_enable_i18n_support) { + public_deps = [ + "//third_party/icu", + ] + } + + sources = [] + foreach(module, torque_modules) { + sources += [ + "$target_gen_dir/torque-generated/builtins-$module-from-dsl-gen.cc", + "$target_gen_dir/torque-generated/builtins-$module-from-dsl-gen.h", + ] + } + + configs = [ ":internal_config" ] +} + # Template to generate different V8 snapshots based on different runtime flags. # Can be invoked with run_mksnapshot(). The target will resolve to # run_mksnapshot_. If is "default", no file suffixes will be used. @@ -925,6 +1067,11 @@ template("run_mksnapshot") { "--no-turbo-rewrite-far-jumps", "--no-turbo-verify-allocation", ] + + if (v8_enable_debugging_features && v8_enable_slow_dchecks) { + # mksnapshot only accepts this flag if ENABLE_SLOW_DCHECKS is defined. + args += [ "--no-enable-slow-asserts" ] + } } } } @@ -1054,6 +1201,9 @@ if (v8_use_snapshot && !v8_use_external_startup_data) { ":run_mksnapshot_default", ] + # Do not publicize any header to remove build dependency. + public = [] + sources = [ "$target_gen_dir/experimental-extras-libraries.cc", "$target_gen_dir/extras-libraries.cc", @@ -1064,6 +1214,8 @@ if (v8_use_snapshot && !v8_use_external_startup_data) { if (v8_enable_embedded_builtins) { sources += [ "$target_gen_dir/embedded.cc" ] + } else { + sources += [ "src/snapshot/embedded-empty.cc" ] } if (use_jumbo_build == true) { @@ -1104,6 +1256,9 @@ if (v8_use_snapshot && v8_use_external_startup_data) { "src/snapshot/snapshot-external.cc", ] + # Do not publicize any header to remove build dependency. + public = [] + if (v8_enable_embedded_builtins) { sources += [ "$target_gen_dir/embedded.cc" ] @@ -1117,6 +1272,8 @@ if (v8_use_snapshot && v8_use_external_startup_data) { ] } } + } else { + sources += [ "src/snapshot/embedded-empty.cc" ] } configs = [ ":internal_config" ] @@ -1130,6 +1287,7 @@ v8_source_set("v8_initializers") { ] deps = [ + ":torque_generated_initializers", ":v8_base", ] @@ -1153,6 +1311,7 @@ v8_source_set("v8_initializers") { "src/builtins/builtins-constructor-gen.h", "src/builtins/builtins-constructor.h", "src/builtins/builtins-conversion-gen.cc", + "src/builtins/builtins-data-view-gen.h", "src/builtins/builtins-date-gen.cc", "src/builtins/builtins-debug-gen.cc", "src/builtins/builtins-function-gen.cc", @@ -1165,6 +1324,8 @@ v8_source_set("v8_initializers") { "src/builtins/builtins-intl-gen.cc", "src/builtins/builtins-iterator-gen.cc", "src/builtins/builtins-iterator-gen.h", + "src/builtins/builtins-lazy-gen.cc", + "src/builtins/builtins-lazy-gen.h", "src/builtins/builtins-math-gen.cc", "src/builtins/builtins-math-gen.h", "src/builtins/builtins-number-gen.cc", @@ -1180,8 +1341,8 @@ v8_source_set("v8_initializers") { "src/builtins/builtins-string-gen.cc", "src/builtins/builtins-string-gen.h", "src/builtins/builtins-symbol-gen.cc", - "src/builtins/builtins-typedarray-gen.cc", - "src/builtins/builtins-typedarray-gen.h", + "src/builtins/builtins-typed-array-gen.cc", + "src/builtins/builtins-typed-array-gen.h", "src/builtins/builtins-utils-gen.h", "src/builtins/builtins-wasm-gen.cc", "src/builtins/growable-fixed-array-gen.cc", @@ -1276,6 +1437,11 @@ v8_source_set("v8_init") { ### gcmole(all) ### "src/setup-isolate-full.cc", ] + if (v8_enable_i18n_support) { + public_deps = [ + "//third_party/icu", + ] + } configs = [ ":internal_config" ] } @@ -1340,6 +1506,7 @@ v8_source_set("v8_base") { "src/api.h", "src/arguments.cc", "src/arguments.h", + "src/asan.h", "src/asmjs/asm-js.cc", "src/asmjs/asm-js.h", "src/asmjs/asm-names.h", @@ -1351,6 +1518,7 @@ v8_source_set("v8_base") { "src/asmjs/asm-types.h", "src/asmjs/switch-logic.cc", "src/asmjs/switch-logic.h", + "src/assembler-arch.h", "src/assembler-inl.h", "src/assembler.cc", "src/assembler.h", @@ -1364,8 +1532,6 @@ v8_source_set("v8_base") { "src/ast/ast-value-factory.h", "src/ast/ast.cc", "src/ast/ast.h", - "src/ast/compile-time-value.cc", - "src/ast/compile-time-value.h", "src/ast/context-slot-cache.cc", "src/ast/context-slot-cache.h", "src/ast/modules.cc", @@ -1420,7 +1586,7 @@ v8_source_set("v8_base") { "src/builtins/builtins-sharedarraybuffer.cc", "src/builtins/builtins-string.cc", "src/builtins/builtins-symbol.cc", - "src/builtins/builtins-typedarray.cc", + "src/builtins/builtins-typed-array.cc", "src/builtins/builtins-utils.h", "src/builtins/builtins.cc", "src/builtins/builtins.h", @@ -1438,6 +1604,8 @@ v8_source_set("v8_base") { "src/code-events.h", "src/code-factory.cc", "src/code-factory.h", + "src/code-reference.cc", + "src/code-reference.h", "src/code-stub-assembler.cc", "src/code-stub-assembler.h", "src/code-stubs-utils.h", @@ -1448,8 +1616,6 @@ v8_source_set("v8_base") { "src/collector.h", "src/compilation-cache.cc", "src/compilation-cache.h", - "src/compilation-dependencies.cc", - "src/compilation-dependencies.h", "src/compilation-statistics.cc", "src/compilation-statistics.h", "src/compiler-dispatcher/compiler-dispatcher-job.cc", @@ -1495,8 +1661,12 @@ v8_source_set("v8_base") { "src/compiler/common-operator-reducer.h", "src/compiler/common-operator.cc", "src/compiler/common-operator.h", + "src/compiler/compilation-dependencies.cc", + "src/compiler/compilation-dependencies.h", "src/compiler/compiler-source-position-table.cc", "src/compiler/compiler-source-position-table.h", + "src/compiler/constant-folding-reducer.cc", + "src/compiler/constant-folding-reducer.h", "src/compiler/control-equivalence.cc", "src/compiler/control-equivalence.h", "src/compiler/control-flow-optimizer.cc", @@ -1539,8 +1709,6 @@ v8_source_set("v8_base") { "src/compiler/instruction.h", "src/compiler/int64-lowering.cc", "src/compiler/int64-lowering.h", - "src/compiler/js-builtin-reducer.cc", - "src/compiler/js-builtin-reducer.h", "src/compiler/js-call-reducer.cc", "src/compiler/js-call-reducer.h", "src/compiler/js-context-specialization.cc", @@ -1551,6 +1719,8 @@ v8_source_set("v8_base") { "src/compiler/js-generic-lowering.h", "src/compiler/js-graph.cc", "src/compiler/js-graph.h", + "src/compiler/js-heap-broker.cc", + "src/compiler/js-heap-broker.h", "src/compiler/js-inlining-heuristic.cc", "src/compiler/js-inlining-heuristic.h", "src/compiler/js-inlining.cc", @@ -1581,6 +1751,8 @@ v8_source_set("v8_base") { "src/compiler/loop-variable-optimizer.h", "src/compiler/machine-graph-verifier.cc", "src/compiler/machine-graph-verifier.h", + "src/compiler/machine-graph.cc", + "src/compiler/machine-graph.h", "src/compiler/machine-operator-reducer.cc", "src/compiler/machine-operator-reducer.h", "src/compiler/machine-operator.cc", @@ -1596,6 +1768,8 @@ v8_source_set("v8_base") { "src/compiler/node-marker.h", "src/compiler/node-matchers.cc", "src/compiler/node-matchers.h", + "src/compiler/node-origin-table.cc", + "src/compiler/node-origin-table.h", "src/compiler/node-properties.cc", "src/compiler/node-properties.h", "src/compiler/node.cc", @@ -1647,6 +1821,8 @@ v8_source_set("v8_base") { "src/compiler/store-store-elimination.h", "src/compiler/type-cache.cc", "src/compiler/type-cache.h", + "src/compiler/type-narrowing-reducer.cc", + "src/compiler/type-narrowing-reducer.h", "src/compiler/typed-optimization.cc", "src/compiler/typed-optimization.h", "src/compiler/typer.cc", @@ -1660,7 +1836,6 @@ v8_source_set("v8_base") { "src/compiler/verifier.h", "src/compiler/wasm-compiler.cc", "src/compiler/wasm-compiler.h", - "src/compiler/wasm-linkage.cc", "src/compiler/zone-stats.cc", "src/compiler/zone-stats.h", "src/contexts-inl.h", @@ -1784,6 +1959,8 @@ v8_source_set("v8_base") { "src/heap/gc-idle-time-handler.h", "src/heap/gc-tracer.cc", "src/heap/gc-tracer.h", + "src/heap/heap-controller.cc", + "src/heap/heap-controller.h", "src/heap/heap-inl.h", "src/heap/heap.cc", "src/heap/heap.h", @@ -1921,11 +2098,11 @@ v8_source_set("v8_base") { "src/lookup-cache.h", "src/lookup.cc", "src/lookup.h", + "src/lsan.h", "src/machine-type.cc", "src/machine-type.h", "src/macro-assembler-inl.h", "src/macro-assembler.h", - "src/managed.h", "src/map-updater.cc", "src/map-updater.h", "src/messages.cc", @@ -1938,6 +2115,8 @@ v8_source_set("v8_base") { "src/objects-printer.cc", "src/objects.cc", "src/objects.h", + "src/objects/api-callbacks-inl.h", + "src/objects/api-callbacks.h", "src/objects/arguments-inl.h", "src/objects/arguments.h", "src/objects/bigint.cc", @@ -1957,21 +2136,30 @@ v8_source_set("v8_base") { "src/objects/frame-array.h", "src/objects/hash-table-inl.h", "src/objects/hash-table.h", + "src/objects/intl-objects-inl.h", "src/objects/intl-objects.cc", "src/objects/intl-objects.h", "src/objects/js-array-inl.h", "src/objects/js-array.h", "src/objects/js-collection-inl.h", "src/objects/js-collection.h", + "src/objects/js-locale-inl.h", + "src/objects/js-locale.cc", + "src/objects/js-locale.h", "src/objects/js-promise-inl.h", "src/objects/js-promise.h", "src/objects/js-regexp-inl.h", "src/objects/js-regexp-string-iterator-inl.h", "src/objects/js-regexp-string-iterator.h", "src/objects/js-regexp.h", + "src/objects/js-relative-time-format-inl.h", + "src/objects/js-relative-time-format.cc", + "src/objects/js-relative-time-format.h", "src/objects/literal-objects-inl.h", "src/objects/literal-objects.cc", "src/objects/literal-objects.h", + "src/objects/managed.cc", + "src/objects/managed.h", "src/objects/map-inl.h", "src/objects/map.h", "src/objects/maybe-object-inl.h", @@ -1985,6 +2173,9 @@ v8_source_set("v8_base") { "src/objects/name.h", "src/objects/object-macros-undef.h", "src/objects/object-macros.h", + "src/objects/ordered-hash-table-inl.h", + "src/objects/ordered-hash-table.cc", + "src/objects/ordered-hash-table.h", "src/objects/promise-inl.h", "src/objects/promise.h", "src/objects/property-descriptor-object-inl.h", @@ -2001,6 +2192,8 @@ v8_source_set("v8_base") { "src/objects/string.h", "src/objects/template-objects.cc", "src/objects/template-objects.h", + "src/objects/templates-inl.h", + "src/objects/templates.h", "src/optimized-compilation-info.cc", "src/optimized-compilation-info.h", "src/ostreams.cc", @@ -2019,7 +2212,6 @@ v8_source_set("v8_base") { "src/parsing/parsing.cc", "src/parsing/parsing.h", "src/parsing/pattern-rewriter.cc", - "src/parsing/preparse-data-format.h", "src/parsing/preparse-data.cc", "src/parsing/preparse-data.h", "src/parsing/preparsed-scope-data.cc", @@ -2095,6 +2287,8 @@ v8_source_set("v8_base") { "src/register-configuration.cc", "src/register-configuration.h", "src/reglist.h", + "src/roots-inl.h", + "src/roots.h", "src/runtime-profiler.cc", "src/runtime-profiler.h", "src/runtime/runtime-array.cc", @@ -2105,7 +2299,6 @@ v8_source_set("v8_base") { "src/runtime/runtime-compiler.cc", "src/runtime/runtime-date.cc", "src/runtime/runtime-debug.cc", - "src/runtime/runtime-error.cc", "src/runtime/runtime-forin.cc", "src/runtime/runtime-function.cc", "src/runtime/runtime-futex.cc", @@ -2114,7 +2307,6 @@ v8_source_set("v8_base") { "src/runtime/runtime-interpreter.cc", "src/runtime/runtime-intl.cc", "src/runtime/runtime-literals.cc", - "src/runtime/runtime-liveedit.cc", "src/runtime/runtime-maths.cc", "src/runtime/runtime-module.cc", "src/runtime/runtime-numbers.cc", @@ -2166,6 +2358,7 @@ v8_source_set("v8_base") { "src/snapshot/partial-deserializer.h", "src/snapshot/partial-serializer.cc", "src/snapshot/partial-serializer.h", + "src/snapshot/references.h", "src/snapshot/serializer-common.cc", "src/snapshot/serializer-common.h", "src/snapshot/serializer.cc", @@ -2207,10 +2400,13 @@ v8_source_set("v8_base") { "src/transitions-inl.h", "src/transitions.cc", "src/transitions.h", + "src/trap-handler/handler-inside.cc", "src/trap-handler/handler-outside.cc", "src/trap-handler/handler-shared.cc", "src/trap-handler/trap-handler-internal.h", "src/trap-handler/trap-handler.h", + "src/turbo-assembler.cc", + "src/turbo-assembler.h", "src/type-hints.cc", "src/type-hints.h", "src/unicode-cache-inl.h", @@ -2247,13 +2443,16 @@ v8_source_set("v8_base") { "src/wasm/baseline/liftoff-assembler.cc", "src/wasm/baseline/liftoff-assembler.h", "src/wasm/baseline/liftoff-compiler.cc", + "src/wasm/baseline/liftoff-compiler.h", "src/wasm/baseline/liftoff-register.h", - "src/wasm/compilation-manager.cc", - "src/wasm/compilation-manager.h", "src/wasm/decoder.h", "src/wasm/function-body-decoder-impl.h", "src/wasm/function-body-decoder.cc", "src/wasm/function-body-decoder.h", + "src/wasm/function-compiler.cc", + "src/wasm/function-compiler.h", + "src/wasm/jump-table-assembler.cc", + "src/wasm/jump-table-assembler.h", "src/wasm/leb-helper.h", "src/wasm/local-decl-encoder.cc", "src/wasm/local-decl-encoder.h", @@ -2267,10 +2466,9 @@ v8_source_set("v8_base") { "src/wasm/signature-map.h", "src/wasm/streaming-decoder.cc", "src/wasm/streaming-decoder.h", + "src/wasm/value-type.h", "src/wasm/wasm-code-manager.cc", "src/wasm/wasm-code-manager.h", - "src/wasm/wasm-code-specialization.cc", - "src/wasm/wasm-code-specialization.h", "src/wasm/wasm-constants.h", "src/wasm/wasm-debug.cc", "src/wasm/wasm-engine.cc", @@ -2282,6 +2480,7 @@ v8_source_set("v8_base") { "src/wasm/wasm-js.cc", "src/wasm/wasm-js.h", "src/wasm/wasm-limits.h", + "src/wasm/wasm-linkage.h", "src/wasm/wasm-memory.cc", "src/wasm/wasm-memory.h", "src/wasm/wasm-module-builder.cc", @@ -2341,6 +2540,7 @@ v8_source_set("v8_base") { "src/ia32/assembler-ia32.h", "src/ia32/code-stubs-ia32.cc", "src/ia32/codegen-ia32.cc", + "src/ia32/constants-ia32.h", "src/ia32/cpu-ia32.cc", "src/ia32/deoptimizer-ia32.cc", "src/ia32/disasm-ia32.cc", @@ -2374,6 +2574,7 @@ v8_source_set("v8_base") { "src/x64/assembler-x64.h", "src/x64/code-stubs-x64.cc", "src/x64/codegen-x64.cc", + "src/x64/constants-x64.h", "src/x64/cpu-x64.cc", "src/x64/deoptimizer-x64.cc", "src/x64/disasm-x64.cc", @@ -2388,7 +2589,13 @@ v8_source_set("v8_base") { "src/x64/sse-instr.h", ] if (is_linux) { - sources += [ "src/trap-handler/handler-inside.cc" ] + sources += [ + "src/trap-handler/handler-inside-linux.cc", + "src/trap-handler/handler-outside-linux.cc", + ] + } + if (is_win) { + sources += [ "src/trap-handler/handler-outside-win.cc" ] } } else if (v8_current_cpu == "arm") { sources += [ ### gcmole(arch:arm) ### @@ -2407,7 +2614,6 @@ v8_source_set("v8_base") { "src/arm/frame-constants-arm.cc", "src/arm/frame-constants-arm.h", "src/arm/interface-descriptors-arm.cc", - "src/arm/interface-descriptors-arm.h", "src/arm/macro-assembler-arm.cc", "src/arm/macro-assembler-arm.h", "src/arm/simulator-arm.cc", @@ -2448,7 +2654,6 @@ v8_source_set("v8_base") { "src/arm64/instrument-arm64.cc", "src/arm64/instrument-arm64.h", "src/arm64/interface-descriptors-arm64.cc", - "src/arm64/interface-descriptors-arm64.h", "src/arm64/macro-assembler-arm64-inl.h", "src/arm64/macro-assembler-arm64.cc", "src/arm64/macro-assembler-arm64.h", @@ -2597,6 +2802,7 @@ v8_source_set("v8_base") { defines = [] deps = [ + ":torque_generated_core", ":v8_headers", ":v8_libbase", ":v8_libsampler", @@ -2617,8 +2823,15 @@ v8_source_set("v8_base") { "src/char-predicates.cc", "src/intl.cc", "src/intl.h", + "src/objects/intl-objects-inl.h", "src/objects/intl-objects.cc", "src/objects/intl-objects.h", + "src/objects/js-locale-inl.h", + "src/objects/js-locale.cc", + "src/objects/js-locale.h", + "src/objects/js-relative-time-format-inl.h", + "src/objects/js-relative-time-format.cc", + "src/objects/js-relative-time-format.h", "src/runtime/runtime-intl.cc", ] } @@ -2662,6 +2875,7 @@ v8_component("v8_libbase") { "src/base/ieee754.h", "src/base/iterator.h", "src/base/lazy-instance.h", + "src/base/list.h", "src/base/logging.cc", "src/base/logging.h", "src/base/macros.h", @@ -2698,6 +2912,8 @@ v8_component("v8_libbase") { public_configs = [ ":libbase_config" ] + public_deps = [] + data = [] data_deps = [] @@ -2872,6 +3088,10 @@ v8_source_set("fuzzer_support") { ":v8_libbase", ":v8_libplatform", ] + + if (v8_enable_i18n_support) { + public_deps += [ "//third_party/icu" ] + } } ############################################################################### @@ -2890,7 +3110,6 @@ if (v8_monolithic) { ":v8_libbase", ":v8_libplatform", ":v8_libsampler", - "//build/config:exe_and_shlib_deps", "//build/win:default_exe_manifest", ] @@ -2918,12 +3137,77 @@ if (v8_use_snapshot && current_toolchain == v8_snapshot_toolchain) { ":v8_libbase", ":v8_libplatform", ":v8_nosnapshot", - "//build/config:exe_and_shlib_deps", "//build/win:default_exe_manifest", ] } } +if (current_toolchain == v8_snapshot_toolchain) { + v8_executable("torque") { + visibility = [ ":*" ] # Only targets in this file can depend on this. + + defines = [ "ANTLR4CPP_STATIC" ] + + include_dirs = [ + "third_party/antlr4/runtime/Cpp/runtime/src", + "src/torque", + ] + + sources = [ + "src/torque/TorqueBaseVisitor.cpp", + "src/torque/TorqueBaseVisitor.h", + "src/torque/TorqueLexer.cpp", + "src/torque/TorqueLexer.h", + "src/torque/TorqueParser.cpp", + "src/torque/TorqueParser.h", + "src/torque/TorqueVisitor.cpp", + "src/torque/TorqueVisitor.h", + "src/torque/ast-generator.cc", + "src/torque/ast-generator.h", + "src/torque/ast.h", + "src/torque/contextual.h", + "src/torque/declarable.cc", + "src/torque/declarable.h", + "src/torque/declaration-visitor.cc", + "src/torque/declaration-visitor.h", + "src/torque/declarations.cc", + "src/torque/declarations.h", + "src/torque/file-visitor.cc", + "src/torque/file-visitor.h", + "src/torque/global-context.h", + "src/torque/implementation-visitor.cc", + "src/torque/implementation-visitor.h", + "src/torque/scope.cc", + "src/torque/scope.h", + "src/torque/torque.cc", + "src/torque/type-oracle.h", + "src/torque/types.cc", + "src/torque/types.h", + "src/torque/utils.cc", + "src/torque/utils.h", + ] + + deps = [ + ":v8_libbase", + "third_party/antlr4:antlr4", + "//build/win:default_exe_manifest", + ] + + remove_configs = [ + "//build/config/compiler:no_rtti", + "//build/config/compiler:no_exceptions", + ] + + configs = [ + "//build/config/compiler:rtti", + "//build/config/compiler:exceptions", + "third_party/antlr4:antlr-compatibility", + ":external_config", + ":internal_config_base", + ] + } +} + ############################################################################### # Public targets # @@ -2941,12 +3225,16 @@ group("gn_all") { ":d8", ":v8_fuzzers", ":v8_hello_world", - ":v8_parser_shell", ":v8_sample_process", "test:gn_all", "tools:gn_all", ] + if (v8_custom_deps != "") { + # Custom dependency from directory under v8/custom_deps. + deps += [ v8_custom_deps ] + } + if (want_v8_shell) { deps += [ ":v8_shell" ] } @@ -3062,6 +3350,8 @@ if (is_component_build) { v8_executable("d8") { sources = [ "$target_gen_dir/d8-js.cc", + "src/async-hooks-wrapper.cc", + "src/async-hooks-wrapper.h", "src/d8-console.cc", "src/d8-console.h", "src/d8.cc", @@ -3080,7 +3370,6 @@ v8_executable("d8") { ":v8", ":v8_libbase", ":v8_libplatform", - "//build/config:exe_and_shlib_deps", "//build/win:default_exe_manifest", ] @@ -3117,7 +3406,6 @@ v8_executable("v8_hello_world") { ":v8", ":v8_libbase", ":v8_libplatform", - "//build/config:exe_and_shlib_deps", "//build/win:default_exe_manifest", ] } @@ -3138,27 +3426,6 @@ v8_executable("v8_sample_process") { ":v8", ":v8_libbase", ":v8_libplatform", - "//build/config:exe_and_shlib_deps", - "//build/win:default_exe_manifest", - ] -} - -v8_executable("v8_parser_shell") { - sources = [ - "tools/parser-shell.cc", - "tools/shell-utils.h", - ] - - configs = [ - ":external_config", - ":internal_config_base", - ] - - deps = [ - ":v8", - ":v8_libbase", - ":v8_libplatform", - "//build/config:exe_and_shlib_deps", "//build/win:default_exe_manifest", ] } @@ -3180,7 +3447,6 @@ if (want_v8_shell) { ":v8", ":v8_libbase", ":v8_libplatform", - "//build/config:exe_and_shlib_deps", "//build/win:default_exe_manifest", ] } @@ -3192,7 +3458,6 @@ template("v8_fuzzer") { v8_executable("v8_simple_" + name) { deps = [ ":" + name, - "//build/config:exe_and_shlib_deps", "//build/win:default_exe_manifest", ] @@ -3301,6 +3566,16 @@ v8_source_set("wasm_module_runner") { "test/common/wasm/wasm-module-runner.h", ] + deps = [ + ":torque_generated_core", + ] + + if (v8_enable_i18n_support) { + public_deps = [ + "//third_party/icu", + ] + } + configs = [ ":external_config", ":internal_config_base", @@ -3374,6 +3649,16 @@ v8_source_set("lib_wasm_fuzzer_common") { "test/fuzzer/wasm-fuzzer-common.h", ] + deps = [ + ":torque_generated_core", + ] + + if (v8_enable_i18n_support) { + public_deps = [ + "//third_party/icu", + ] + } + configs = [ ":external_config", ":internal_config_base", diff --git a/deps/v8/ChangeLog b/deps/v8/ChangeLog index e6b825092c4a1d..375d57ebc897e3 100644 --- a/deps/v8/ChangeLog +++ b/deps/v8/ChangeLog @@ -1,4121 +1,7 @@ -2018-04-11: Version 6.7.288 +2017-12-19: Sentinel - Performance and stability improvements on all platforms. - - -2018-04-11: Version 6.7.287 - - Performance and stability improvements on all platforms. - - -2018-04-11: Version 6.7.286 - - Performance and stability improvements on all platforms. - - -2018-04-11: Version 6.7.285 - - Performance and stability improvements on all platforms. - - -2018-04-11: Version 6.7.284 - - Performance and stability improvements on all platforms. - - -2018-04-10: Version 6.7.283 - - Performance and stability improvements on all platforms. - - -2018-04-10: Version 6.7.282 - - Performance and stability improvements on all platforms. - - -2018-04-10: Version 6.7.281 - - Performance and stability improvements on all platforms. - - -2018-04-10: Version 6.7.280 - - Performance and stability improvements on all platforms. - - -2018-04-10: Version 6.7.279 - - Performance and stability improvements on all platforms. - - -2018-04-10: Version 6.7.278 - - Performance and stability improvements on all platforms. - - -2018-04-10: Version 6.7.277 - - Performance and stability improvements on all platforms. - - -2018-04-10: Version 6.7.276 - - Performance and stability improvements on all platforms. - - -2018-04-10: Version 6.7.275 - - Performance and stability improvements on all platforms. - - -2018-04-10: Version 6.7.274 - - Performance and stability improvements on all platforms. - - -2018-04-10: Version 6.7.273 - - Performance and stability improvements on all platforms. - - -2018-04-10: Version 6.7.272 - - Performance and stability improvements on all platforms. - - -2018-04-10: Version 6.7.271 - - Performance and stability improvements on all platforms. - - -2018-04-10: Version 6.7.270 - - Performance and stability improvements on all platforms. - - -2018-04-10: Version 6.7.269 - - Performance and stability improvements on all platforms. - - -2018-04-09: Version 6.7.268 - - Performance and stability improvements on all platforms. - - -2018-04-09: Version 6.7.267 - - Performance and stability improvements on all platforms. - - -2018-04-09: Version 6.7.266 - - Performance and stability improvements on all platforms. - - -2018-04-09: Version 6.7.265 - - Performance and stability improvements on all platforms. - - -2018-04-09: Version 6.7.264 - - Performance and stability improvements on all platforms. - - -2018-04-09: Version 6.7.263 - - Performance and stability improvements on all platforms. - - -2018-04-09: Version 6.7.262 - - Performance and stability improvements on all platforms. - - -2018-04-09: Version 6.7.261 - - Performance and stability improvements on all platforms. - - -2018-04-09: Version 6.7.260 - - Performance and stability improvements on all platforms. - - -2018-04-09: Version 6.7.259 - - Performance and stability improvements on all platforms. - - -2018-04-09: Version 6.7.258 - - Performance and stability improvements on all platforms. - - -2018-04-09: Version 6.7.257 - - Performance and stability improvements on all platforms. - - -2018-04-09: Version 6.7.256 - - Performance and stability improvements on all platforms. - - -2018-04-09: Version 6.7.255 - - Performance and stability improvements on all platforms. - - -2018-04-09: Version 6.7.254 - - Performance and stability improvements on all platforms. - - -2018-04-09: Version 6.7.253 - - Performance and stability improvements on all platforms. - - -2018-04-09: Version 6.7.252 - - Performance and stability improvements on all platforms. - - -2018-04-09: Version 6.7.251 - - Performance and stability improvements on all platforms. - - -2018-04-06: Version 6.7.250 - - Performance and stability improvements on all platforms. - - -2018-04-06: Version 6.7.249 - - Performance and stability improvements on all platforms. - - -2018-04-06: Version 6.7.248 - - Performance and stability improvements on all platforms. - - -2018-04-06: Version 6.7.247 - - Performance and stability improvements on all platforms. - - -2018-04-06: Version 6.7.246 - - Performance and stability improvements on all platforms. - - -2018-04-06: Version 6.7.245 - - Performance and stability improvements on all platforms. - - -2018-04-06: Version 6.7.244 - - Performance and stability improvements on all platforms. - - -2018-04-06: Version 6.7.243 - - Performance and stability improvements on all platforms. - - -2018-04-06: Version 6.7.242 - - Performance and stability improvements on all platforms. - - -2018-04-06: Version 6.7.241 - - Performance and stability improvements on all platforms. - - -2018-04-05: Version 6.7.240 - - Performance and stability improvements on all platforms. - - -2018-04-05: Version 6.7.239 - - Performance and stability improvements on all platforms. - - -2018-04-05: Version 6.7.238 - - Performance and stability improvements on all platforms. - - -2018-04-05: Version 6.7.237 - - Performance and stability improvements on all platforms. - - -2018-04-05: Version 6.7.236 - - Performance and stability improvements on all platforms. - - -2018-04-05: Version 6.7.235 - - Performance and stability improvements on all platforms. - - -2018-04-05: Version 6.7.234 - - Performance and stability improvements on all platforms. - - -2018-04-05: Version 6.7.233 - - Performance and stability improvements on all platforms. - - -2018-04-05: Version 6.7.232 - - Performance and stability improvements on all platforms. - - -2018-04-05: Version 6.7.231 - - Performance and stability improvements on all platforms. - - -2018-04-05: Version 6.7.230 - - Performance and stability improvements on all platforms. - - -2018-04-05: Version 6.7.229 - - Performance and stability improvements on all platforms. - - -2018-04-05: Version 6.7.228 - - Performance and stability improvements on all platforms. - - -2018-04-04: Version 6.7.227 - - Performance and stability improvements on all platforms. - - -2018-04-04: Version 6.7.226 - - Performance and stability improvements on all platforms. - - -2018-04-04: Version 6.7.225 - - Performance and stability improvements on all platforms. - - -2018-04-04: Version 6.7.224 - - Performance and stability improvements on all platforms. - - -2018-04-04: Version 6.7.223 - - Performance and stability improvements on all platforms. - - -2018-04-04: Version 6.7.222 - - Performance and stability improvements on all platforms. - - -2018-04-04: Version 6.7.221 - - Performance and stability improvements on all platforms. - - -2018-04-04: Version 6.7.220 - - Performance and stability improvements on all platforms. - - -2018-04-04: Version 6.7.219 - - Performance and stability improvements on all platforms. - - -2018-04-04: Version 6.7.218 - - Performance and stability improvements on all platforms. - - -2018-04-04: Version 6.7.217 - - Performance and stability improvements on all platforms. - - -2018-04-04: Version 6.7.216 - - Performance and stability improvements on all platforms. - - -2018-04-03: Version 6.7.215 - - Performance and stability improvements on all platforms. - - -2018-04-03: Version 6.7.214 - - Performance and stability improvements on all platforms. - - -2018-03-30: Version 6.7.213 - - Performance and stability improvements on all platforms. - - -2018-03-30: Version 6.7.212 - - Performance and stability improvements on all platforms. - - -2018-03-29: Version 6.7.211 - - Performance and stability improvements on all platforms. - - -2018-03-29: Version 6.7.210 - - Performance and stability improvements on all platforms. - - -2018-03-29: Version 6.7.209 - - Performance and stability improvements on all platforms. - - -2018-03-29: Version 6.7.208 - - Performance and stability improvements on all platforms. - - -2018-03-29: Version 6.7.207 - - Performance and stability improvements on all platforms. - - -2018-03-29: Version 6.7.206 - - Performance and stability improvements on all platforms. - - -2018-03-29: Version 6.7.205 - - Performance and stability improvements on all platforms. - - -2018-03-29: Version 6.7.204 - - Performance and stability improvements on all platforms. - - -2018-03-28: Version 6.7.203 - - Performance and stability improvements on all platforms. - - -2018-03-28: Version 6.7.202 - - Performance and stability improvements on all platforms. - - -2018-03-28: Version 6.7.201 - - Performance and stability improvements on all platforms. - - -2018-03-28: Version 6.7.200 - - Performance and stability improvements on all platforms. - - -2018-03-28: Version 6.7.199 - - Performance and stability improvements on all platforms. - - -2018-03-28: Version 6.7.198 - - Performance and stability improvements on all platforms. - - -2018-03-28: Version 6.7.197 - - Performance and stability improvements on all platforms. - - -2018-03-28: Version 6.7.196 - - Performance and stability improvements on all platforms. - - -2018-03-28: Version 6.7.195 - - Performance and stability improvements on all platforms. - - -2018-03-28: Version 6.7.194 - - Performance and stability improvements on all platforms. - - -2018-03-27: Version 6.7.193 - - Performance and stability improvements on all platforms. - - -2018-03-27: Version 6.7.192 - - Performance and stability improvements on all platforms. - - -2018-03-27: Version 6.7.191 - - Performance and stability improvements on all platforms. - - -2018-03-27: Version 6.7.190 - - Performance and stability improvements on all platforms. - - -2018-03-27: Version 6.7.189 - - Performance and stability improvements on all platforms. - - -2018-03-27: Version 6.7.188 - - Performance and stability improvements on all platforms. - - -2018-03-27: Version 6.7.187 - - Performance and stability improvements on all platforms. - - -2018-03-27: Version 6.7.186 - - Performance and stability improvements on all platforms. - - -2018-03-27: Version 6.7.185 - - Performance and stability improvements on all platforms. - - -2018-03-27: Version 6.7.184 - - Performance and stability improvements on all platforms. - - -2018-03-26: Version 6.7.183 - - Performance and stability improvements on all platforms. - - -2018-03-26: Version 6.7.182 - - Performance and stability improvements on all platforms. - - -2018-03-26: Version 6.7.181 - - Performance and stability improvements on all platforms. - - -2018-03-26: Version 6.7.180 - - Performance and stability improvements on all platforms. - - -2018-03-26: Version 6.7.179 - - Performance and stability improvements on all platforms. - - -2018-03-26: Version 6.7.178 - - Performance and stability improvements on all platforms. - - -2018-03-26: Version 6.7.177 - - Performance and stability improvements on all platforms. - - -2018-03-26: Version 6.7.176 - - Performance and stability improvements on all platforms. - - -2018-03-26: Version 6.7.175 - - Performance and stability improvements on all platforms. - - -2018-03-26: Version 6.7.174 - - Performance and stability improvements on all platforms. - - -2018-03-26: Version 6.7.173 - - Performance and stability improvements on all platforms. - - -2018-03-26: Version 6.7.172 - - Performance and stability improvements on all platforms. - - -2018-03-26: Version 6.7.171 - - Performance and stability improvements on all platforms. - - -2018-03-26: Version 6.7.170 - - Performance and stability improvements on all platforms. - - -2018-03-26: Version 6.7.169 - - Performance and stability improvements on all platforms. - - -2018-03-26: Version 6.7.168 - - Performance and stability improvements on all platforms. - - -2018-03-26: Version 6.7.167 - - Performance and stability improvements on all platforms. - - -2018-03-26: Version 6.7.166 - - Performance and stability improvements on all platforms. - - -2018-03-24: Version 6.7.165 - - Performance and stability improvements on all platforms. - - -2018-03-24: Version 6.7.164 - - Performance and stability improvements on all platforms. - - -2018-03-24: Version 6.7.163 - - Performance and stability improvements on all platforms. - - -2018-03-23: Version 6.7.162 - - Performance and stability improvements on all platforms. - - -2018-03-23: Version 6.7.161 - - Performance and stability improvements on all platforms. - - -2018-03-23: Version 6.7.160 - - Performance and stability improvements on all platforms. - - -2018-03-23: Version 6.7.159 - - Performance and stability improvements on all platforms. - - -2018-03-23: Version 6.7.158 - - Performance and stability improvements on all platforms. - - -2018-03-23: Version 6.7.157 - - Performance and stability improvements on all platforms. - - -2018-03-23: Version 6.7.156 - - Performance and stability improvements on all platforms. - - -2018-03-23: Version 6.7.155 - - Performance and stability improvements on all platforms. - - -2018-03-23: Version 6.7.154 - - Performance and stability improvements on all platforms. - - -2018-03-23: Version 6.7.153 - - Performance and stability improvements on all platforms. - - -2018-03-23: Version 6.7.152 - - Performance and stability improvements on all platforms. - - -2018-03-23: Version 6.7.151 - - Performance and stability improvements on all platforms. - - -2018-03-23: Version 6.7.150 - - Performance and stability improvements on all platforms. - - -2018-03-23: Version 6.7.149 - - Performance and stability improvements on all platforms. - - -2018-03-23: Version 6.7.148 - - Performance and stability improvements on all platforms. - - -2018-03-23: Version 6.7.147 - - Performance and stability improvements on all platforms. - - -2018-03-22: Version 6.7.146 - - Performance and stability improvements on all platforms. - - -2018-03-22: Version 6.7.145 - - Performance and stability improvements on all platforms. - - -2018-03-22: Version 6.7.144 - - Performance and stability improvements on all platforms. - - -2018-03-22: Version 6.7.143 - - Performance and stability improvements on all platforms. - - -2018-03-22: Version 6.7.142 - - Performance and stability improvements on all platforms. - - -2018-03-22: Version 6.7.141 - - Performance and stability improvements on all platforms. - - -2018-03-22: Version 6.7.140 - - Performance and stability improvements on all platforms. - - -2018-03-21: Version 6.7.139 - - Performance and stability improvements on all platforms. - - -2018-03-21: Version 6.7.138 - - Performance and stability improvements on all platforms. - - -2018-03-21: Version 6.7.137 - - Performance and stability improvements on all platforms. - - -2018-03-21: Version 6.7.136 - - Performance and stability improvements on all platforms. - - -2018-03-21: Version 6.7.135 - - Performance and stability improvements on all platforms. - - -2018-03-21: Version 6.7.134 - - Performance and stability improvements on all platforms. - - -2018-03-21: Version 6.7.133 - - Performance and stability improvements on all platforms. - - -2018-03-21: Version 6.7.132 - - Performance and stability improvements on all platforms. - - -2018-03-21: Version 6.7.131 - - Performance and stability improvements on all platforms. - - -2018-03-21: Version 6.7.130 - - Performance and stability improvements on all platforms. - - -2018-03-21: Version 6.7.129 - - Performance and stability improvements on all platforms. - - -2018-03-21: Version 6.7.128 - - Performance and stability improvements on all platforms. - - -2018-03-21: Version 6.7.127 - - Performance and stability improvements on all platforms. - - -2018-03-21: Version 6.7.126 - - Performance and stability improvements on all platforms. - - -2018-03-21: Version 6.7.125 - - Performance and stability improvements on all platforms. - - -2018-03-21: Version 6.7.124 - - Performance and stability improvements on all platforms. - - -2018-03-21: Version 6.7.123 - - Performance and stability improvements on all platforms. - - -2018-03-20: Version 6.7.122 - - Performance and stability improvements on all platforms. - - -2018-03-20: Version 6.7.121 - - Performance and stability improvements on all platforms. - - -2018-03-20: Version 6.7.120 - - Performance and stability improvements on all platforms. - - -2018-03-20: Version 6.7.119 - - Performance and stability improvements on all platforms. - - -2018-03-20: Version 6.7.118 - - Performance and stability improvements on all platforms. - - -2018-03-20: Version 6.7.117 - - Performance and stability improvements on all platforms. - - -2018-03-20: Version 6.7.116 - - Performance and stability improvements on all platforms. - - -2018-03-20: Version 6.7.115 - - Performance and stability improvements on all platforms. - - -2018-03-20: Version 6.7.114 - - Performance and stability improvements on all platforms. - - -2018-03-20: Version 6.7.113 - - Performance and stability improvements on all platforms. - - -2018-03-20: Version 6.7.112 - - Performance and stability improvements on all platforms. - - -2018-03-20: Version 6.7.111 - - Performance and stability improvements on all platforms. - - -2018-03-20: Version 6.7.110 - - Performance and stability improvements on all platforms. - - -2018-03-19: Version 6.7.109 - - Performance and stability improvements on all platforms. - - -2018-03-19: Version 6.7.108 - - Performance and stability improvements on all platforms. - - -2018-03-19: Version 6.7.107 - - Performance and stability improvements on all platforms. - - -2018-03-19: Version 6.7.106 - - Performance and stability improvements on all platforms. - - -2018-03-19: Version 6.7.105 - - Performance and stability improvements on all platforms. - - -2018-03-19: Version 6.7.104 - - Performance and stability improvements on all platforms. - - -2018-03-19: Version 6.7.103 - - Performance and stability improvements on all platforms. - - -2018-03-17: Version 6.7.102 - - Performance and stability improvements on all platforms. - - -2018-03-16: Version 6.7.101 - - Performance and stability improvements on all platforms. - - -2018-03-16: Version 6.7.100 - - Performance and stability improvements on all platforms. - - -2018-03-16: Version 6.7.99 - - Performance and stability improvements on all platforms. - - -2018-03-16: Version 6.7.98 - - Performance and stability improvements on all platforms. - - -2018-03-16: Version 6.7.97 - - Performance and stability improvements on all platforms. - - -2018-03-16: Version 6.7.96 - - Performance and stability improvements on all platforms. - - -2018-03-16: Version 6.7.95 - - Performance and stability improvements on all platforms. - - -2018-03-16: Version 6.7.94 - - Performance and stability improvements on all platforms. - - -2018-03-16: Version 6.7.93 - - Performance and stability improvements on all platforms. - - -2018-03-16: Version 6.7.92 - - Performance and stability improvements on all platforms. - - -2018-03-16: Version 6.7.91 - - Performance and stability improvements on all platforms. - - -2018-03-16: Version 6.7.90 - - Performance and stability improvements on all platforms. - - -2018-03-16: Version 6.7.89 - - Performance and stability improvements on all platforms. - - -2018-03-15: Version 6.7.88 - - Performance and stability improvements on all platforms. - - -2018-03-15: Version 6.7.87 - - Performance and stability improvements on all platforms. - - -2018-03-15: Version 6.7.86 - - Performance and stability improvements on all platforms. - - -2018-03-15: Version 6.7.85 - - Performance and stability improvements on all platforms. - - -2018-03-15: Version 6.7.84 - - Performance and stability improvements on all platforms. - - -2018-03-15: Version 6.7.83 - - Performance and stability improvements on all platforms. - - -2018-03-15: Version 6.7.82 - - Performance and stability improvements on all platforms. - - -2018-03-15: Version 6.7.81 - - Performance and stability improvements on all platforms. - - -2018-03-15: Version 6.7.80 - - Performance and stability improvements on all platforms. - - -2018-03-15: Version 6.7.79 - - Performance and stability improvements on all platforms. - - -2018-03-15: Version 6.7.78 - - Performance and stability improvements on all platforms. - - -2018-03-15: Version 6.7.77 - - Performance and stability improvements on all platforms. - - -2018-03-15: Version 6.7.76 - - Performance and stability improvements on all platforms. - - -2018-03-15: Version 6.7.75 - - Performance and stability improvements on all platforms. - - -2018-03-15: Version 6.7.74 - - Performance and stability improvements on all platforms. - - -2018-03-15: Version 6.7.73 - - Performance and stability improvements on all platforms. - - -2018-03-14: Version 6.7.72 - - Performance and stability improvements on all platforms. - - -2018-03-14: Version 6.7.71 - - Performance and stability improvements on all platforms. - - -2018-03-14: Version 6.7.70 - - Performance and stability improvements on all platforms. - - -2018-03-14: Version 6.7.69 - - Performance and stability improvements on all platforms. - - -2018-03-14: Version 6.7.68 - - Performance and stability improvements on all platforms. - - -2018-03-14: Version 6.7.67 - - Performance and stability improvements on all platforms. - - -2018-03-14: Version 6.7.66 - - Performance and stability improvements on all platforms. - - -2018-03-14: Version 6.7.65 - - Performance and stability improvements on all platforms. - - -2018-03-14: Version 6.7.64 - - Performance and stability improvements on all platforms. - - -2018-03-14: Version 6.7.63 - - Performance and stability improvements on all platforms. - - -2018-03-14: Version 6.7.62 - - Performance and stability improvements on all platforms. - - -2018-03-14: Version 6.7.61 - - Performance and stability improvements on all platforms. - - -2018-03-14: Version 6.7.60 - - Performance and stability improvements on all platforms. - - -2018-03-14: Version 6.7.59 - - Performance and stability improvements on all platforms. - - -2018-03-14: Version 6.7.58 - - Performance and stability improvements on all platforms. - - -2018-03-14: Version 6.7.57 - - Performance and stability improvements on all platforms. - - -2018-03-14: Version 6.7.56 - - Performance and stability improvements on all platforms. - - -2018-03-14: Version 6.7.55 - - Performance and stability improvements on all platforms. - - -2018-03-14: Version 6.7.54 - - Performance and stability improvements on all platforms. - - -2018-03-13: Version 6.7.53 - - Performance and stability improvements on all platforms. - - -2018-03-13: Version 6.7.52 - - Performance and stability improvements on all platforms. - - -2018-03-13: Version 6.7.51 - - Performance and stability improvements on all platforms. - - -2018-03-13: Version 6.7.50 - - Performance and stability improvements on all platforms. - - -2018-03-13: Version 6.7.49 - - Performance and stability improvements on all platforms. - - -2018-03-13: Version 6.7.48 - - Performance and stability improvements on all platforms. - - -2018-03-13: Version 6.7.47 - - Performance and stability improvements on all platforms. - - -2018-03-13: Version 6.7.46 - - Performance and stability improvements on all platforms. - - -2018-03-13: Version 6.7.45 - - Performance and stability improvements on all platforms. - - -2018-03-12: Version 6.7.44 - - Performance and stability improvements on all platforms. - - -2018-03-12: Version 6.7.43 - - Performance and stability improvements on all platforms. - - -2018-03-12: Version 6.7.42 - - Performance and stability improvements on all platforms. - - -2018-03-12: Version 6.7.41 - - Performance and stability improvements on all platforms. - - -2018-03-12: Version 6.7.40 - - Performance and stability improvements on all platforms. - - -2018-03-12: Version 6.7.39 - - Performance and stability improvements on all platforms. - - -2018-03-12: Version 6.7.38 - - Performance and stability improvements on all platforms. - - -2018-03-12: Version 6.7.37 - - Performance and stability improvements on all platforms. - - -2018-03-12: Version 6.7.36 - - Performance and stability improvements on all platforms. - - -2018-03-12: Version 6.7.35 - - Performance and stability improvements on all platforms. - - -2018-03-12: Version 6.7.34 - - Performance and stability improvements on all platforms. - - -2018-03-12: Version 6.7.33 - - Performance and stability improvements on all platforms. - - -2018-03-12: Version 6.7.32 - - Performance and stability improvements on all platforms. - - -2018-03-10: Version 6.7.31 - - Performance and stability improvements on all platforms. - - -2018-03-09: Version 6.7.30 - - Performance and stability improvements on all platforms. - - -2018-03-09: Version 6.7.29 - - Performance and stability improvements on all platforms. - - -2018-03-08: Version 6.7.28 - - Performance and stability improvements on all platforms. - - -2018-03-08: Version 6.7.27 - - Performance and stability improvements on all platforms. - - -2018-03-08: Version 6.7.26 - - Performance and stability improvements on all platforms. - - -2018-03-07: Version 6.7.25 - - Performance and stability improvements on all platforms. - - -2018-03-07: Version 6.7.24 - - Performance and stability improvements on all platforms. - - -2018-03-07: Version 6.7.23 - - Performance and stability improvements on all platforms. - - -2018-03-06: Version 6.7.22 - - Performance and stability improvements on all platforms. - - -2018-03-06: Version 6.7.21 - - Performance and stability improvements on all platforms. - - -2018-03-06: Version 6.7.20 - - Performance and stability improvements on all platforms. - - -2018-03-06: Version 6.7.19 - - Performance and stability improvements on all platforms. - - -2018-03-06: Version 6.7.18 - - Performance and stability improvements on all platforms. - - -2018-03-06: Version 6.7.17 - - Performance and stability improvements on all platforms. - - -2018-03-06: Version 6.7.16 - - Performance and stability improvements on all platforms. - - -2018-03-05: Version 6.7.15 - - Performance and stability improvements on all platforms. - - -2018-03-05: Version 6.7.14 - - Performance and stability improvements on all platforms. - - -2018-03-05: Version 6.7.13 - - Performance and stability improvements on all platforms. - - -2018-03-05: Version 6.7.12 - - Performance and stability improvements on all platforms. - - -2018-03-05: Version 6.7.11 - - Performance and stability improvements on all platforms. - - -2018-03-05: Version 6.7.10 - - Performance and stability improvements on all platforms. - - -2018-03-05: Version 6.7.9 - - Performance and stability improvements on all platforms. - - -2018-03-02: Version 6.7.8 - - Performance and stability improvements on all platforms. - - -2018-03-02: Version 6.7.7 - - Performance and stability improvements on all platforms. - - -2018-03-02: Version 6.7.6 - - Performance and stability improvements on all platforms. - - -2018-03-02: Version 6.7.5 - - Performance and stability improvements on all platforms. - - -2018-03-02: Version 6.7.4 - - Performance and stability improvements on all platforms. - - -2018-03-02: Version 6.7.3 - - Performance and stability improvements on all platforms. - - -2018-03-02: Version 6.7.2 - - Performance and stability improvements on all platforms. - - -2018-03-02: Version 6.7.1 - - Performance and stability improvements on all platforms. - - -2018-03-01: Version 6.6.356 - - Performance and stability improvements on all platforms. - - -2018-02-28: Version 6.6.355 - - Performance and stability improvements on all platforms. - - -2018-02-28: Version 6.6.354 - - Performance and stability improvements on all platforms. - - -2018-02-28: Version 6.6.353 - - Performance and stability improvements on all platforms. - - -2018-02-28: Version 6.6.352 - - Performance and stability improvements on all platforms. - - -2018-02-28: Version 6.6.351 - - Performance and stability improvements on all platforms. - - -2018-02-28: Version 6.6.350 - - Performance and stability improvements on all platforms. - - -2018-02-28: Version 6.6.349 - - Performance and stability improvements on all platforms. - - -2018-02-28: Version 6.6.348 - - Performance and stability improvements on all platforms. - - -2018-02-28: Version 6.6.347 - - Performance and stability improvements on all platforms. - - -2018-02-28: Version 6.6.346 - - Performance and stability improvements on all platforms. - - -2018-02-28: Version 6.6.345 - - Performance and stability improvements on all platforms. - - -2018-02-28: Version 6.6.344 - - Performance and stability improvements on all platforms. - - -2018-02-28: Version 6.6.343 - - Performance and stability improvements on all platforms. - - -2018-02-27: Version 6.6.342 - - Performance and stability improvements on all platforms. - - -2018-02-27: Version 6.6.341 - - Performance and stability improvements on all platforms. - - -2018-02-27: Version 6.6.340 - - Performance and stability improvements on all platforms. - - -2018-02-27: Version 6.6.339 - - Performance and stability improvements on all platforms. - - -2018-02-27: Version 6.6.338 - - Performance and stability improvements on all platforms. - - -2018-02-27: Version 6.6.337 - - Performance and stability improvements on all platforms. - - -2018-02-27: Version 6.6.336 - - Performance and stability improvements on all platforms. - - -2018-02-26: Version 6.6.335 - - Performance and stability improvements on all platforms. - - -2018-02-26: Version 6.6.334 - - Performance and stability improvements on all platforms. - - -2018-02-26: Version 6.6.333 - - Performance and stability improvements on all platforms. - - -2018-02-26: Version 6.6.332 - - Performance and stability improvements on all platforms. - - -2018-02-26: Version 6.6.331 - - Performance and stability improvements on all platforms. - - -2018-02-26: Version 6.6.330 - - Performance and stability improvements on all platforms. - - -2018-02-26: Version 6.6.329 - - Performance and stability improvements on all platforms. - - -2018-02-26: Version 6.6.328 - - Performance and stability improvements on all platforms. - - -2018-02-26: Version 6.6.327 - - Performance and stability improvements on all platforms. - - -2018-02-26: Version 6.6.326 - - Performance and stability improvements on all platforms. - - -2018-02-26: Version 6.6.325 - - Performance and stability improvements on all platforms. - - -2018-02-26: Version 6.6.324 - - Performance and stability improvements on all platforms. - - -2018-02-26: Version 6.6.323 - - Performance and stability improvements on all platforms. - - -2018-02-26: Version 6.6.322 - - Performance and stability improvements on all platforms. - - -2018-02-26: Version 6.6.321 - - Performance and stability improvements on all platforms. - - -2018-02-26: Version 6.6.320 - - Performance and stability improvements on all platforms. - - -2018-02-26: Version 6.6.319 - - Performance and stability improvements on all platforms. - - -2018-02-25: Version 6.6.318 - - Performance and stability improvements on all platforms. - - -2018-02-25: Version 6.6.317 - - Performance and stability improvements on all platforms. - - -2018-02-25: Version 6.6.316 - - Performance and stability improvements on all platforms. - - -2018-02-25: Version 6.6.315 - - Performance and stability improvements on all platforms. - - -2018-02-24: Version 6.6.314 - - Performance and stability improvements on all platforms. - - -2018-02-24: Version 6.6.313 - - Performance and stability improvements on all platforms. - - -2018-02-23: Version 6.6.312 - - Performance and stability improvements on all platforms. - - -2018-02-23: Version 6.6.311 - - Performance and stability improvements on all platforms. - - -2018-02-23: Version 6.6.310 - - Performance and stability improvements on all platforms. - - -2018-02-23: Version 6.6.309 - - Performance and stability improvements on all platforms. - - -2018-02-23: Version 6.6.308 - - Performance and stability improvements on all platforms. - - -2018-02-23: Version 6.6.307 - - Performance and stability improvements on all platforms. - - -2018-02-23: Version 6.6.306 - - Performance and stability improvements on all platforms. - - -2018-02-23: Version 6.6.305 - - Performance and stability improvements on all platforms. - - -2018-02-23: Version 6.6.304 - - Performance and stability improvements on all platforms. - - -2018-02-23: Version 6.6.303 - - Performance and stability improvements on all platforms. - - -2018-02-23: Version 6.6.302 - - Performance and stability improvements on all platforms. - - -2018-02-23: Version 6.6.301 - - Performance and stability improvements on all platforms. - - -2018-02-23: Version 6.6.300 - - Performance and stability improvements on all platforms. - - -2018-02-23: Version 6.6.299 - - Performance and stability improvements on all platforms. - - -2018-02-23: Version 6.6.298 - - Performance and stability improvements on all platforms. - - -2018-02-22: Version 6.6.297 - - Performance and stability improvements on all platforms. - - -2018-02-22: Version 6.6.296 - - Performance and stability improvements on all platforms. - - -2018-02-22: Version 6.6.295 - - Performance and stability improvements on all platforms. - - -2018-02-22: Version 6.6.294 - - Performance and stability improvements on all platforms. - - -2018-02-22: Version 6.6.293 - - Performance and stability improvements on all platforms. - - -2018-02-22: Version 6.6.292 - - Performance and stability improvements on all platforms. - - -2018-02-22: Version 6.6.291 - - Performance and stability improvements on all platforms. - - -2018-02-22: Version 6.6.290 - - Performance and stability improvements on all platforms. - - -2018-02-22: Version 6.6.289 - - Performance and stability improvements on all platforms. - - -2018-02-22: Version 6.6.288 - - Performance and stability improvements on all platforms. - - -2018-02-22: Version 6.6.287 - - Performance and stability improvements on all platforms. - - -2018-02-22: Version 6.6.286 - - Performance and stability improvements on all platforms. - - -2018-02-22: Version 6.6.285 - - Performance and stability improvements on all platforms. - - -2018-02-22: Version 6.6.284 - - Performance and stability improvements on all platforms. - - -2018-02-22: Version 6.6.283 - - Performance and stability improvements on all platforms. - - -2018-02-21: Version 6.6.282 - - Performance and stability improvements on all platforms. - - -2018-02-21: Version 6.6.281 - - Performance and stability improvements on all platforms. - - -2018-02-21: Version 6.6.280 - - Performance and stability improvements on all platforms. - - -2018-02-20: Version 6.6.279 - - Performance and stability improvements on all platforms. - - -2018-02-20: Version 6.6.278 - - Performance and stability improvements on all platforms. - - -2018-02-20: Version 6.6.277 - - Performance and stability improvements on all platforms. - - -2018-02-20: Version 6.6.276 - - Performance and stability improvements on all platforms. - - -2018-02-20: Version 6.6.275 - - Performance and stability improvements on all platforms. - - -2018-02-20: Version 6.6.274 - - Performance and stability improvements on all platforms. - - -2018-02-20: Version 6.6.273 - - Performance and stability improvements on all platforms. - - -2018-02-20: Version 6.6.272 - - Performance and stability improvements on all platforms. - - -2018-02-20: Version 6.6.271 - - Performance and stability improvements on all platforms. - - -2018-02-20: Version 6.6.270 - - Performance and stability improvements on all platforms. - - -2018-02-20: Version 6.6.269 - - Performance and stability improvements on all platforms. - - -2018-02-20: Version 6.6.268 - - Performance and stability improvements on all platforms. - - -2018-02-20: Version 6.6.267 - - Performance and stability improvements on all platforms. - - -2018-02-19: Version 6.6.266 - - Performance and stability improvements on all platforms. - - -2018-02-19: Version 6.6.265 - - Performance and stability improvements on all platforms. - - -2018-02-19: Version 6.6.264 - - Performance and stability improvements on all platforms. - - -2018-02-19: Version 6.6.263 - - Performance and stability improvements on all platforms. - - -2018-02-19: Version 6.6.262 - - Performance and stability improvements on all platforms. - - -2018-02-19: Version 6.6.261 - - Performance and stability improvements on all platforms. - - -2018-02-17: Version 6.6.260 - - Performance and stability improvements on all platforms. - - -2018-02-17: Version 6.6.259 - - Performance and stability improvements on all platforms. - - -2018-02-16: Version 6.6.258 - - Performance and stability improvements on all platforms. - - -2018-02-16: Version 6.6.257 - - Performance and stability improvements on all platforms. - - -2018-02-16: Version 6.6.256 - - Performance and stability improvements on all platforms. - - -2018-02-16: Version 6.6.255 - - Performance and stability improvements on all platforms. - - -2018-02-15: Version 6.6.254 - - Performance and stability improvements on all platforms. - - -2018-02-15: Version 6.6.253 - - Performance and stability improvements on all platforms. - - -2018-02-15: Version 6.6.252 - - Performance and stability improvements on all platforms. - - -2018-02-14: Version 6.6.251 - - Performance and stability improvements on all platforms. - - -2018-02-14: Version 6.6.250 - - Performance and stability improvements on all platforms. - - -2018-02-14: Version 6.6.249 - - Performance and stability improvements on all platforms. - - -2018-02-14: Version 6.6.248 - - Performance and stability improvements on all platforms. - - -2018-02-14: Version 6.6.247 - - Performance and stability improvements on all platforms. - - -2018-02-14: Version 6.6.246 - - Performance and stability improvements on all platforms. - - -2018-02-14: Version 6.6.245 - - Performance and stability improvements on all platforms. - - -2018-02-14: Version 6.6.244 - - Performance and stability improvements on all platforms. - - -2018-02-14: Version 6.6.243 - - Performance and stability improvements on all platforms. - - -2018-02-14: Version 6.6.242 - - Performance and stability improvements on all platforms. - - -2018-02-14: Version 6.6.241 - - Performance and stability improvements on all platforms. - - -2018-02-14: Version 6.6.240 - - Performance and stability improvements on all platforms. - - -2018-02-13: Version 6.6.239 - - Performance and stability improvements on all platforms. - - -2018-02-13: Version 6.6.238 - - Performance and stability improvements on all platforms. - - -2018-02-13: Version 6.6.237 - - Performance and stability improvements on all platforms. - - -2018-02-13: Version 6.6.236 - - Performance and stability improvements on all platforms. - - -2018-02-13: Version 6.6.235 - - Performance and stability improvements on all platforms. - - -2018-02-13: Version 6.6.234 - - Performance and stability improvements on all platforms. - - -2018-02-12: Version 6.6.233 - - Performance and stability improvements on all platforms. - - -2018-02-12: Version 6.6.232 - - Performance and stability improvements on all platforms. - - -2018-02-12: Version 6.6.231 - - Performance and stability improvements on all platforms. - - -2018-02-12: Version 6.6.230 - - Performance and stability improvements on all platforms. - - -2018-02-12: Version 6.6.229 - - Performance and stability improvements on all platforms. - - -2018-02-09: Version 6.6.228 - - Performance and stability improvements on all platforms. - - -2018-02-09: Version 6.6.227 - - Performance and stability improvements on all platforms. - - -2018-02-09: Version 6.6.226 - - Performance and stability improvements on all platforms. - - -2018-02-09: Version 6.6.225 - - Performance and stability improvements on all platforms. - - -2018-02-09: Version 6.6.224 - - Performance and stability improvements on all platforms. - - -2018-02-09: Version 6.6.223 - - Performance and stability improvements on all platforms. - - -2018-02-09: Version 6.6.222 - - Performance and stability improvements on all platforms. - - -2018-02-09: Version 6.6.221 - - Performance and stability improvements on all platforms. - - -2018-02-09: Version 6.6.220 - - Performance and stability improvements on all platforms. - - -2018-02-09: Version 6.6.219 - - Performance and stability improvements on all platforms. - - -2018-02-09: Version 6.6.218 - - Performance and stability improvements on all platforms. - - -2018-02-09: Version 6.6.217 - - Performance and stability improvements on all platforms. - - -2018-02-09: Version 6.6.216 - - Performance and stability improvements on all platforms. - - -2018-02-09: Version 6.6.215 - - Performance and stability improvements on all platforms. - - -2018-02-09: Version 6.6.214 - - Performance and stability improvements on all platforms. - - -2018-02-09: Version 6.6.213 - - Performance and stability improvements on all platforms. - - -2018-02-09: Version 6.6.212 - - Performance and stability improvements on all platforms. - - -2018-02-08: Version 6.6.211 - - Performance and stability improvements on all platforms. - - -2018-02-08: Version 6.6.210 - - Performance and stability improvements on all platforms. - - -2018-02-08: Version 6.6.209 - - Performance and stability improvements on all platforms. - - -2018-02-08: Version 6.6.208 - - Performance and stability improvements on all platforms. - - -2018-02-08: Version 6.6.207 - - Performance and stability improvements on all platforms. - - -2018-02-08: Version 6.6.206 - - Performance and stability improvements on all platforms. - - -2018-02-08: Version 6.6.205 - - Performance and stability improvements on all platforms. - - -2018-02-08: Version 6.6.204 - - Performance and stability improvements on all platforms. - - -2018-02-08: Version 6.6.203 - - Performance and stability improvements on all platforms. - - -2018-02-08: Version 6.6.202 - - Performance and stability improvements on all platforms. - - -2018-02-08: Version 6.6.201 - - Performance and stability improvements on all platforms. - - -2018-02-08: Version 6.6.200 - - Performance and stability improvements on all platforms. - - -2018-02-08: Version 6.6.199 - - Performance and stability improvements on all platforms. - - -2018-02-08: Version 6.6.198 - - Performance and stability improvements on all platforms. - - -2018-02-08: Version 6.6.197 - - Performance and stability improvements on all platforms. - - -2018-02-08: Version 6.6.196 - - Performance and stability improvements on all platforms. - - -2018-02-07: Version 6.6.195 - - Performance and stability improvements on all platforms. - - -2018-02-07: Version 6.6.194 - - Performance and stability improvements on all platforms. - - -2018-02-07: Version 6.6.193 - - Performance and stability improvements on all platforms. - - -2018-02-07: Version 6.6.192 - - Performance and stability improvements on all platforms. - - -2018-02-07: Version 6.6.191 - - Performance and stability improvements on all platforms. - - -2018-02-07: Version 6.6.190 - - Performance and stability improvements on all platforms. - - -2018-02-07: Version 6.6.189 - - Performance and stability improvements on all platforms. - - -2018-02-07: Version 6.6.188 - - Performance and stability improvements on all platforms. - - -2018-02-07: Version 6.6.187 - - Performance and stability improvements on all platforms. - - -2018-02-07: Version 6.6.186 - - Performance and stability improvements on all platforms. - - -2018-02-07: Version 6.6.185 - - Performance and stability improvements on all platforms. - - -2018-02-07: Version 6.6.184 - - Performance and stability improvements on all platforms. - - -2018-02-07: Version 6.6.183 - - Performance and stability improvements on all platforms. - - -2018-02-07: Version 6.6.182 - - Performance and stability improvements on all platforms. - - -2018-02-07: Version 6.6.181 - - Performance and stability improvements on all platforms. - - -2018-02-07: Version 6.6.180 - - Performance and stability improvements on all platforms. - - -2018-02-06: Version 6.6.179 - - Performance and stability improvements on all platforms. - - -2018-02-06: Version 6.6.178 - - Performance and stability improvements on all platforms. - - -2018-02-06: Version 6.6.177 - - Performance and stability improvements on all platforms. - - -2018-02-06: Version 6.6.176 - - Performance and stability improvements on all platforms. - - -2018-02-06: Version 6.6.175 - - Performance and stability improvements on all platforms. - - -2018-02-06: Version 6.6.174 - - Performance and stability improvements on all platforms. - - -2018-02-06: Version 6.6.173 - - Performance and stability improvements on all platforms. - - -2018-02-06: Version 6.6.172 - - Performance and stability improvements on all platforms. - - -2018-02-06: Version 6.6.171 - - Performance and stability improvements on all platforms. - - -2018-02-06: Version 6.6.170 - - Performance and stability improvements on all platforms. - - -2018-02-06: Version 6.6.169 - - Performance and stability improvements on all platforms. - - -2018-02-06: Version 6.6.168 - - Performance and stability improvements on all platforms. - - -2018-02-06: Version 6.6.167 - - Performance and stability improvements on all platforms. - - -2018-02-06: Version 6.6.166 - - Performance and stability improvements on all platforms. - - -2018-02-05: Version 6.6.165 - - Performance and stability improvements on all platforms. - - -2018-02-05: Version 6.6.164 - - Performance and stability improvements on all platforms. - - -2018-02-05: Version 6.6.163 - - Performance and stability improvements on all platforms. - - -2018-02-05: Version 6.6.162 - - Performance and stability improvements on all platforms. - - -2018-02-05: Version 6.6.161 - - Performance and stability improvements on all platforms. - - -2018-02-05: Version 6.6.160 - - Performance and stability improvements on all platforms. - - -2018-02-05: Version 6.6.159 - - Performance and stability improvements on all platforms. - - -2018-02-05: Version 6.6.158 - - Performance and stability improvements on all platforms. - - -2018-02-05: Version 6.6.157 - - Performance and stability improvements on all platforms. - - -2018-02-05: Version 6.6.156 - - Performance and stability improvements on all platforms. - - -2018-02-02: Version 6.6.155 - - Performance and stability improvements on all platforms. - - -2018-02-02: Version 6.6.154 - - Performance and stability improvements on all platforms. - - -2018-02-02: Version 6.6.153 - - Performance and stability improvements on all platforms. - - -2018-02-02: Version 6.6.152 - - Performance and stability improvements on all platforms. - - -2018-02-02: Version 6.6.151 - - Performance and stability improvements on all platforms. - - -2018-02-02: Version 6.6.150 - - Performance and stability improvements on all platforms. - - -2018-02-02: Version 6.6.149 - - Performance and stability improvements on all platforms. - - -2018-02-02: Version 6.6.148 - - Performance and stability improvements on all platforms. - - -2018-02-02: Version 6.6.147 - - Performance and stability improvements on all platforms. - - -2018-02-02: Version 6.6.146 - - Performance and stability improvements on all platforms. - - -2018-02-02: Version 6.6.145 - - Performance and stability improvements on all platforms. - - -2018-02-02: Version 6.6.144 - - Performance and stability improvements on all platforms. - - -2018-02-02: Version 6.6.143 - - Performance and stability improvements on all platforms. - - -2018-02-02: Version 6.6.142 - - Performance and stability improvements on all platforms. - - -2018-02-02: Version 6.6.141 - - Performance and stability improvements on all platforms. - - -2018-02-01: Version 6.6.140 - - Performance and stability improvements on all platforms. - - -2018-02-01: Version 6.6.139 - - Performance and stability improvements on all platforms. - - -2018-02-01: Version 6.6.138 - - Performance and stability improvements on all platforms. - - -2018-02-01: Version 6.6.137 - - Performance and stability improvements on all platforms. - - -2018-02-01: Version 6.6.136 - - Performance and stability improvements on all platforms. - - -2018-02-01: Version 6.6.135 - - Performance and stability improvements on all platforms. - - -2018-02-01: Version 6.6.134 - - Performance and stability improvements on all platforms. - - -2018-02-01: Version 6.6.133 - - Performance and stability improvements on all platforms. - - -2018-02-01: Version 6.6.132 - - Performance and stability improvements on all platforms. - - -2018-02-01: Version 6.6.131 - - Performance and stability improvements on all platforms. - - -2018-02-01: Version 6.6.130 - - Performance and stability improvements on all platforms. - - -2018-02-01: Version 6.6.129 - - Performance and stability improvements on all platforms. - - -2018-02-01: Version 6.6.128 - - Performance and stability improvements on all platforms. - - -2018-01-31: Version 6.6.127 - - Performance and stability improvements on all platforms. - - -2018-01-31: Version 6.6.126 - - Performance and stability improvements on all platforms. - - -2018-01-31: Version 6.6.125 - - Performance and stability improvements on all platforms. - - -2018-01-31: Version 6.6.124 - - Performance and stability improvements on all platforms. - - -2018-01-31: Version 6.6.123 - - Performance and stability improvements on all platforms. - - -2018-01-31: Version 6.6.122 - - Performance and stability improvements on all platforms. - - -2018-01-31: Version 6.6.121 - - Performance and stability improvements on all platforms. - - -2018-01-31: Version 6.6.120 - - Performance and stability improvements on all platforms. - - -2018-01-31: Version 6.6.119 - - Performance and stability improvements on all platforms. - - -2018-01-31: Version 6.6.118 - - Performance and stability improvements on all platforms. - - -2018-01-31: Version 6.6.117 - - Performance and stability improvements on all platforms. - - -2018-01-31: Version 6.6.116 - - Performance and stability improvements on all platforms. - - -2018-01-30: Version 6.6.115 - - Performance and stability improvements on all platforms. - - -2018-01-30: Version 6.6.114 - - Performance and stability improvements on all platforms. - - -2018-01-30: Version 6.6.113 - - Performance and stability improvements on all platforms. - - -2018-01-30: Version 6.6.112 - - Performance and stability improvements on all platforms. - - -2018-01-30: Version 6.6.111 - - Performance and stability improvements on all platforms. - - -2018-01-30: Version 6.6.110 - - Performance and stability improvements on all platforms. - - -2018-01-30: Version 6.6.109 - - Performance and stability improvements on all platforms. - - -2018-01-30: Version 6.6.108 - - Performance and stability improvements on all platforms. - - -2018-01-30: Version 6.6.107 - - Performance and stability improvements on all platforms. - - -2018-01-30: Version 6.6.106 - - Performance and stability improvements on all platforms. - - -2018-01-29: Version 6.6.105 - - Performance and stability improvements on all platforms. - - -2018-01-29: Version 6.6.104 - - Performance and stability improvements on all platforms. - - -2018-01-29: Version 6.6.103 - - Performance and stability improvements on all platforms. - - -2018-01-29: Version 6.6.102 - - Performance and stability improvements on all platforms. - - -2018-01-29: Version 6.6.101 - - Performance and stability improvements on all platforms. - - -2018-01-29: Version 6.6.100 - - Performance and stability improvements on all platforms. - - -2018-01-29: Version 6.6.99 - - Performance and stability improvements on all platforms. - - -2018-01-29: Version 6.6.98 - - Performance and stability improvements on all platforms. - - -2018-01-29: Version 6.6.97 - - Performance and stability improvements on all platforms. - - -2018-01-29: Version 6.6.96 - - Performance and stability improvements on all platforms. - - -2018-01-29: Version 6.6.95 - - Performance and stability improvements on all platforms. - - -2018-01-29: Version 6.6.94 - - Performance and stability improvements on all platforms. - - -2018-01-29: Version 6.6.93 - - Performance and stability improvements on all platforms. - - -2018-01-29: Version 6.6.92 - - Performance and stability improvements on all platforms. - - -2018-01-29: Version 6.6.91 - - Performance and stability improvements on all platforms. - - -2018-01-27: Version 6.6.90 - - Performance and stability improvements on all platforms. - - -2018-01-27: Version 6.6.89 - - Performance and stability improvements on all platforms. - - -2018-01-26: Version 6.6.88 - - Performance and stability improvements on all platforms. - - -2018-01-26: Version 6.6.87 - - Performance and stability improvements on all platforms. - - -2018-01-26: Version 6.6.86 - - Performance and stability improvements on all platforms. - - -2018-01-26: Version 6.6.85 - - Performance and stability improvements on all platforms. - - -2018-01-26: Version 6.6.84 - - Performance and stability improvements on all platforms. - - -2018-01-26: Version 6.6.83 - - Performance and stability improvements on all platforms. - - -2018-01-25: Version 6.6.82 - - Performance and stability improvements on all platforms. - - -2018-01-25: Version 6.6.81 - - Performance and stability improvements on all platforms. - - -2018-01-25: Version 6.6.80 - - Performance and stability improvements on all platforms. - - -2018-01-25: Version 6.6.79 - - Performance and stability improvements on all platforms. - - -2018-01-25: Version 6.6.78 - - Performance and stability improvements on all platforms. - - -2018-01-25: Version 6.6.77 - - Performance and stability improvements on all platforms. - - -2018-01-25: Version 6.6.76 - - Performance and stability improvements on all platforms. - - -2018-01-25: Version 6.6.75 - - Performance and stability improvements on all platforms. - - -2018-01-25: Version 6.6.74 - - Performance and stability improvements on all platforms. - - -2018-01-25: Version 6.6.73 - - Performance and stability improvements on all platforms. - - -2018-01-25: Version 6.6.72 - - Performance and stability improvements on all platforms. - - -2018-01-25: Version 6.6.71 - - Performance and stability improvements on all platforms. - - -2018-01-25: Version 6.6.70 - - Performance and stability improvements on all platforms. - - -2018-01-25: Version 6.6.69 - - Performance and stability improvements on all platforms. - - -2018-01-25: Version 6.6.68 - - Performance and stability improvements on all platforms. - - -2018-01-25: Version 6.6.67 - - Performance and stability improvements on all platforms. - - -2018-01-24: Version 6.6.66 - - Performance and stability improvements on all platforms. - - -2018-01-24: Version 6.6.65 - - Performance and stability improvements on all platforms. - - -2018-01-24: Version 6.6.64 - - Performance and stability improvements on all platforms. - - -2018-01-24: Version 6.6.63 - - Performance and stability improvements on all platforms. - - -2018-01-24: Version 6.6.62 - - Performance and stability improvements on all platforms. - - -2018-01-24: Version 6.6.61 - - Performance and stability improvements on all platforms. - - -2018-01-24: Version 6.6.60 - - Performance and stability improvements on all platforms. - - -2018-01-24: Version 6.6.59 - - Performance and stability improvements on all platforms. - - -2018-01-24: Version 6.6.58 - - Performance and stability improvements on all platforms. - - -2018-01-24: Version 6.6.57 - - Performance and stability improvements on all platforms. - - -2018-01-24: Version 6.6.56 - - Performance and stability improvements on all platforms. - - -2018-01-24: Version 6.6.55 - - Performance and stability improvements on all platforms. - - -2018-01-24: Version 6.6.54 - - Performance and stability improvements on all platforms. - - -2018-01-24: Version 6.6.53 - - Performance and stability improvements on all platforms. - - -2018-01-24: Version 6.6.52 - - Performance and stability improvements on all platforms. - - -2018-01-23: Version 6.6.51 - - Performance and stability improvements on all platforms. - - -2018-01-23: Version 6.6.50 - - Performance and stability improvements on all platforms. - - -2018-01-23: Version 6.6.49 - - Performance and stability improvements on all platforms. - - -2018-01-23: Version 6.6.48 - - Performance and stability improvements on all platforms. - - -2018-01-23: Version 6.6.47 - - Performance and stability improvements on all platforms. - - -2018-01-23: Version 6.6.46 - - Performance and stability improvements on all platforms. - - -2018-01-23: Version 6.6.45 - - Performance and stability improvements on all platforms. - - -2018-01-23: Version 6.6.44 - - Performance and stability improvements on all platforms. - - -2018-01-23: Version 6.6.43 - - Performance and stability improvements on all platforms. - - -2018-01-23: Version 6.6.42 - - Performance and stability improvements on all platforms. - - -2018-01-23: Version 6.6.41 - - Performance and stability improvements on all platforms. - - -2018-01-23: Version 6.6.40 - - Performance and stability improvements on all platforms. - - -2018-01-23: Version 6.6.39 - - Performance and stability improvements on all platforms. - - -2018-01-23: Version 6.6.38 - - Performance and stability improvements on all platforms. - - -2018-01-23: Version 6.6.37 - - Performance and stability improvements on all platforms. - - -2018-01-23: Version 6.6.36 - - Performance and stability improvements on all platforms. - - -2018-01-23: Version 6.6.35 - - Performance and stability improvements on all platforms. - - -2018-01-23: Version 6.6.34 - - Performance and stability improvements on all platforms. - - -2018-01-23: Version 6.6.33 - - Performance and stability improvements on all platforms. - - -2018-01-22: Version 6.6.32 - - Performance and stability improvements on all platforms. - - -2018-01-22: Version 6.6.31 - - Performance and stability improvements on all platforms. - - -2018-01-22: Version 6.6.30 - - Performance and stability improvements on all platforms. - - -2018-01-22: Version 6.6.29 - - Performance and stability improvements on all platforms. - - -2018-01-22: Version 6.6.28 - - Performance and stability improvements on all platforms. - - -2018-01-22: Version 6.6.27 - - Performance and stability improvements on all platforms. - - -2018-01-22: Version 6.6.26 - - Performance and stability improvements on all platforms. - - -2018-01-22: Version 6.6.25 - - Performance and stability improvements on all platforms. - - -2018-01-22: Version 6.6.24 - - Performance and stability improvements on all platforms. - - -2018-01-22: Version 6.6.23 - - Performance and stability improvements on all platforms. - - -2018-01-22: Version 6.6.22 - - Performance and stability improvements on all platforms. - - -2018-01-22: Version 6.6.21 - - Performance and stability improvements on all platforms. - - -2018-01-22: Version 6.6.20 - - Performance and stability improvements on all platforms. - - -2018-01-22: Version 6.6.19 - - Performance and stability improvements on all platforms. - - -2018-01-22: Version 6.6.18 - - Performance and stability improvements on all platforms. - - -2018-01-22: Version 6.6.17 - - Performance and stability improvements on all platforms. - - -2018-01-22: Version 6.6.16 - - Performance and stability improvements on all platforms. - - -2018-01-22: Version 6.6.15 - - Performance and stability improvements on all platforms. - - -2018-01-22: Version 6.6.14 - - Performance and stability improvements on all platforms. - - -2018-01-22: Version 6.6.13 - - Performance and stability improvements on all platforms. - - -2018-01-22: Version 6.6.12 - - Performance and stability improvements on all platforms. - - -2018-01-21: Version 6.6.11 - - Performance and stability improvements on all platforms. - - -2018-01-20: Version 6.6.10 - - Performance and stability improvements on all platforms. - - -2018-01-20: Version 6.6.9 - - Performance and stability improvements on all platforms. - - -2018-01-19: Version 6.6.8 - - Performance and stability improvements on all platforms. - - -2018-01-19: Version 6.6.7 - - Performance and stability improvements on all platforms. - - -2018-01-19: Version 6.6.6 - - Performance and stability improvements on all platforms. - - -2018-01-19: Version 6.6.5 - - Performance and stability improvements on all platforms. - - -2018-01-19: Version 6.6.4 - - Performance and stability improvements on all platforms. - - -2018-01-19: Version 6.6.3 - - Performance and stability improvements on all platforms. - - -2018-01-19: Version 6.6.2 - - Performance and stability improvements on all platforms. - - -2018-01-19: Version 6.6.1 - - Performance and stability improvements on all platforms. - - -2018-01-18: Version 6.5.257 - - Performance and stability improvements on all platforms. - - -2018-01-18: Version 6.5.256 - - Performance and stability improvements on all platforms. - - -2018-01-18: Version 6.5.255 - - Performance and stability improvements on all platforms. - - -2018-01-17: Version 6.5.254 - - Performance and stability improvements on all platforms. - - -2018-01-17: Version 6.5.253 - - Performance and stability improvements on all platforms. - - -2018-01-17: Version 6.5.252 - - Performance and stability improvements on all platforms. - - -2018-01-17: Version 6.5.251 - - Performance and stability improvements on all platforms. - - -2018-01-17: Version 6.5.250 - - Performance and stability improvements on all platforms. - - -2018-01-17: Version 6.5.249 - - Performance and stability improvements on all platforms. - - -2018-01-17: Version 6.5.248 - - Performance and stability improvements on all platforms. - - -2018-01-17: Version 6.5.247 - - Performance and stability improvements on all platforms. - - -2018-01-17: Version 6.5.246 - - Performance and stability improvements on all platforms. - - -2018-01-16: Version 6.5.245 - - Performance and stability improvements on all platforms. - - -2018-01-16: Version 6.5.244 - - Performance and stability improvements on all platforms. - - -2018-01-16: Version 6.5.243 - - Performance and stability improvements on all platforms. - - -2018-01-16: Version 6.5.242 - - Performance and stability improvements on all platforms. - - -2018-01-16: Version 6.5.241 - - Performance and stability improvements on all platforms. - - -2018-01-16: Version 6.5.240 - - Performance and stability improvements on all platforms. - - -2018-01-16: Version 6.5.239 - - Performance and stability improvements on all platforms. - - -2018-01-16: Version 6.5.238 - - Performance and stability improvements on all platforms. - - -2018-01-16: Version 6.5.237 - - Performance and stability improvements on all platforms. - - -2018-01-16: Version 6.5.236 - - Performance and stability improvements on all platforms. - - -2018-01-16: Version 6.5.235 - - Performance and stability improvements on all platforms. - - -2018-01-16: Version 6.5.234 - - Performance and stability improvements on all platforms. - - -2018-01-16: Version 6.5.233 - - Performance and stability improvements on all platforms. - - -2018-01-16: Version 6.5.232 - - Performance and stability improvements on all platforms. - - -2018-01-16: Version 6.5.231 - - Performance and stability improvements on all platforms. - - -2018-01-16: Version 6.5.230 - - Performance and stability improvements on all platforms. - - -2018-01-16: Version 6.5.229 - - Performance and stability improvements on all platforms. - - -2018-01-16: Version 6.5.228 - - Performance and stability improvements on all platforms. - - -2018-01-16: Version 6.5.227 - - Performance and stability improvements on all platforms. - - -2018-01-16: Version 6.5.226 - - Performance and stability improvements on all platforms. - - -2018-01-16: Version 6.5.225 - - Performance and stability improvements on all platforms. - - -2018-01-16: Version 6.5.224 - - Performance and stability improvements on all platforms. - - -2018-01-16: Version 6.5.223 - - Performance and stability improvements on all platforms. - - -2018-01-16: Version 6.5.222 - - Performance and stability improvements on all platforms. - - -2018-01-16: Version 6.5.221 - - Performance and stability improvements on all platforms. - - -2018-01-16: Version 6.5.220 - - Performance and stability improvements on all platforms. - - -2018-01-15: Version 6.5.219 - - Performance and stability improvements on all platforms. - - -2018-01-15: Version 6.5.218 - - Performance and stability improvements on all platforms. - - -2018-01-15: Version 6.5.217 - - Performance and stability improvements on all platforms. - - -2018-01-15: Version 6.5.216 - - Performance and stability improvements on all platforms. - - -2018-01-15: Version 6.5.215 - - Performance and stability improvements on all platforms. - - -2018-01-15: Version 6.5.214 - - Performance and stability improvements on all platforms. - - -2018-01-15: Version 6.5.213 - - Performance and stability improvements on all platforms. - - -2018-01-15: Version 6.5.212 - - Performance and stability improvements on all platforms. - - -2018-01-15: Version 6.5.211 - - Performance and stability improvements on all platforms. - - -2018-01-15: Version 6.5.210 - - Performance and stability improvements on all platforms. - - -2018-01-15: Version 6.5.209 - - Performance and stability improvements on all platforms. - - -2018-01-15: Version 6.5.208 - - Performance and stability improvements on all platforms. - - -2018-01-15: Version 6.5.207 - - Performance and stability improvements on all platforms. - - -2018-01-15: Version 6.5.206 - - Performance and stability improvements on all platforms. - - -2018-01-15: Version 6.5.205 - - Performance and stability improvements on all platforms. - - -2018-01-15: Version 6.5.204 - - Performance and stability improvements on all platforms. - - -2018-01-15: Version 6.5.203 - - Performance and stability improvements on all platforms. - - -2018-01-15: Version 6.5.202 - - Performance and stability improvements on all platforms. - - -2018-01-15: Version 6.5.201 - - Performance and stability improvements on all platforms. - - -2018-01-15: Version 6.5.200 - - Performance and stability improvements on all platforms. - - -2018-01-15: Version 6.5.199 - - Performance and stability improvements on all platforms. - - -2018-01-14: Version 6.5.198 - - Performance and stability improvements on all platforms. - - -2018-01-13: Version 6.5.197 - - Performance and stability improvements on all platforms. - - -2018-01-12: Version 6.5.196 - - Performance and stability improvements on all platforms. - - -2018-01-12: Version 6.5.195 - - Performance and stability improvements on all platforms. - - -2018-01-12: Version 6.5.194 - - Performance and stability improvements on all platforms. - - -2018-01-12: Version 6.5.193 - - Performance and stability improvements on all platforms. - - -2018-01-12: Version 6.5.192 - - Performance and stability improvements on all platforms. - - -2018-01-12: Version 6.5.191 - - Performance and stability improvements on all platforms. - - -2018-01-12: Version 6.5.190 - - Performance and stability improvements on all platforms. - - -2018-01-12: Version 6.5.189 - - Performance and stability improvements on all platforms. - - -2018-01-11: Version 6.5.188 - - Performance and stability improvements on all platforms. - - -2018-01-11: Version 6.5.187 - - Performance and stability improvements on all platforms. - - -2018-01-11: Version 6.5.186 - - Performance and stability improvements on all platforms. - - -2018-01-11: Version 6.5.185 - - Performance and stability improvements on all platforms. - - -2018-01-11: Version 6.5.184 - - Performance and stability improvements on all platforms. - - -2018-01-11: Version 6.5.183 - - Performance and stability improvements on all platforms. - - -2018-01-11: Version 6.5.182 - - Performance and stability improvements on all platforms. - - -2018-01-11: Version 6.5.181 - - Performance and stability improvements on all platforms. - - -2018-01-11: Version 6.5.180 - - Performance and stability improvements on all platforms. - - -2018-01-11: Version 6.5.179 - - Performance and stability improvements on all platforms. - - -2018-01-11: Version 6.5.178 - - Performance and stability improvements on all platforms. - - -2018-01-11: Version 6.5.177 - - Performance and stability improvements on all platforms. - - -2018-01-11: Version 6.5.176 - - Performance and stability improvements on all platforms. - - -2018-01-11: Version 6.5.175 - - Performance and stability improvements on all platforms. - - -2018-01-11: Version 6.5.174 - - Performance and stability improvements on all platforms. - - -2018-01-11: Version 6.5.173 - - Performance and stability improvements on all platforms. - - -2018-01-10: Version 6.5.172 - - Performance and stability improvements on all platforms. - - -2018-01-10: Version 6.5.171 - - Performance and stability improvements on all platforms. - - -2018-01-10: Version 6.5.170 - - Performance and stability improvements on all platforms. - - -2018-01-10: Version 6.5.169 - - Performance and stability improvements on all platforms. - - -2018-01-10: Version 6.5.168 - - Performance and stability improvements on all platforms. - - -2018-01-10: Version 6.5.167 - - Performance and stability improvements on all platforms. - - -2018-01-10: Version 6.5.166 - - Performance and stability improvements on all platforms. - - -2018-01-10: Version 6.5.165 - - Performance and stability improvements on all platforms. - - -2018-01-10: Version 6.5.164 - - Performance and stability improvements on all platforms. - - -2018-01-10: Version 6.5.163 - - Performance and stability improvements on all platforms. - - -2018-01-09: Version 6.5.162 - - Performance and stability improvements on all platforms. - - -2018-01-09: Version 6.5.161 - - Performance and stability improvements on all platforms. - - -2018-01-09: Version 6.5.160 - - Performance and stability improvements on all platforms. - - -2018-01-09: Version 6.5.159 - - Performance and stability improvements on all platforms. - - -2018-01-09: Version 6.5.158 - - Performance and stability improvements on all platforms. - - -2018-01-09: Version 6.5.157 - - Performance and stability improvements on all platforms. - - -2018-01-09: Version 6.5.156 - - Performance and stability improvements on all platforms. - - -2018-01-09: Version 6.5.155 - - Performance and stability improvements on all platforms. - - -2018-01-09: Version 6.5.154 - - Performance and stability improvements on all platforms. - - -2018-01-09: Version 6.5.153 - - Performance and stability improvements on all platforms. - - -2018-01-09: Version 6.5.152 - - Performance and stability improvements on all platforms. - - -2018-01-09: Version 6.5.151 - - Performance and stability improvements on all platforms. - - -2018-01-08: Version 6.5.150 - - Performance and stability improvements on all platforms. - - -2018-01-08: Version 6.5.149 - - Performance and stability improvements on all platforms. - - -2018-01-08: Version 6.5.148 - - Performance and stability improvements on all platforms. - - -2018-01-08: Version 6.5.147 - - Performance and stability improvements on all platforms. - - -2018-01-05: Version 6.5.146 - - Performance and stability improvements on all platforms. - - -2018-01-05: Version 6.5.145 - - Performance and stability improvements on all platforms. - - -2018-01-05: Version 6.5.144 - - Performance and stability improvements on all platforms. - - -2018-01-05: Version 6.5.143 - - Performance and stability improvements on all platforms. - - -2018-01-05: Version 6.5.142 - - Performance and stability improvements on all platforms. - - -2018-01-05: Version 6.5.141 - - Performance and stability improvements on all platforms. - - -2018-01-05: Version 6.5.140 - - Performance and stability improvements on all platforms. - - -2018-01-04: Version 6.5.139 - - Performance and stability improvements on all platforms. - - -2018-01-04: Version 6.5.138 - - Performance and stability improvements on all platforms. - - -2018-01-04: Version 6.5.137 - - Performance and stability improvements on all platforms. - - -2018-01-04: Version 6.5.136 - - Performance and stability improvements on all platforms. - - -2018-01-04: Version 6.5.135 - - Performance and stability improvements on all platforms. - - -2018-01-04: Version 6.5.134 - - Performance and stability improvements on all platforms. - - -2018-01-04: Version 6.5.133 - - Performance and stability improvements on all platforms. - - -2018-01-04: Version 6.5.132 - - Performance and stability improvements on all platforms. - - -2018-01-04: Version 6.5.131 - - Performance and stability improvements on all platforms. - - -2018-01-04: Version 6.5.130 - - Performance and stability improvements on all platforms. - - -2018-01-04: Version 6.5.129 - - Performance and stability improvements on all platforms. - - -2018-01-04: Version 6.5.128 - - Performance and stability improvements on all platforms. - - -2018-01-04: Version 6.5.127 - - Performance and stability improvements on all platforms. - - -2018-01-04: Version 6.5.126 - - Performance and stability improvements on all platforms. - - -2018-01-03: Version 6.5.125 - - Performance and stability improvements on all platforms. - - -2018-01-03: Version 6.5.124 - - Performance and stability improvements on all platforms. - - -2018-01-02: Version 6.5.123 - - Performance and stability improvements on all platforms. - - -2018-01-02: Version 6.5.122 - - Performance and stability improvements on all platforms. - - -2018-01-02: Version 6.5.121 - - Performance and stability improvements on all platforms. - - -2018-01-02: Version 6.5.120 - - Performance and stability improvements on all platforms. - - -2018-01-02: Version 6.5.119 - - Performance and stability improvements on all platforms. - - -2018-01-02: Version 6.5.118 - - Performance and stability improvements on all platforms. - - -2018-01-02: Version 6.5.117 - - Performance and stability improvements on all platforms. - - -2017-12-29: Version 6.5.116 - - Performance and stability improvements on all platforms. - - -2017-12-29: Version 6.5.115 - - Performance and stability improvements on all platforms. - - -2017-12-29: Version 6.5.114 - - Performance and stability improvements on all platforms. - - -2017-12-29: Version 6.5.113 - - Performance and stability improvements on all platforms. - - -2017-12-29: Version 6.5.112 - - Performance and stability improvements on all platforms. - - -2017-12-29: Version 6.5.111 - - Performance and stability improvements on all platforms. - - -2017-12-28: Version 6.5.110 - - Performance and stability improvements on all platforms. - - -2017-12-28: Version 6.5.109 - - Performance and stability improvements on all platforms. - - -2017-12-27: Version 6.5.108 - - Performance and stability improvements on all platforms. - - -2017-12-22: Version 6.5.107 - - Performance and stability improvements on all platforms. - - -2017-12-22: Version 6.5.106 - - Performance and stability improvements on all platforms. - - -2017-12-22: Version 6.5.105 - - Performance and stability improvements on all platforms. - - -2017-12-22: Version 6.5.104 - - Performance and stability improvements on all platforms. - - -2017-12-21: Version 6.5.103 - - Performance and stability improvements on all platforms. - - -2017-12-21: Version 6.5.102 - - Performance and stability improvements on all platforms. - - -2017-12-20: Version 6.5.101 - - Performance and stability improvements on all platforms. - - -2017-12-20: Version 6.5.100 - - Performance and stability improvements on all platforms. - - -2017-12-20: Version 6.5.99 - - Performance and stability improvements on all platforms. - - -2017-12-20: Version 6.5.98 - - Performance and stability improvements on all platforms. - - -2017-12-20: Version 6.5.97 - - Performance and stability improvements on all platforms. - - -2017-12-20: Version 6.5.96 - - Performance and stability improvements on all platforms. - - -2017-12-20: Version 6.5.95 - - Performance and stability improvements on all platforms. - - -2017-12-20: Version 6.5.94 - - Performance and stability improvements on all platforms. - - -2017-12-20: Version 6.5.93 - - Performance and stability improvements on all platforms. - - -2017-12-20: Version 6.5.92 - - Performance and stability improvements on all platforms. - - -2017-12-20: Version 6.5.91 - - Performance and stability improvements on all platforms. - - -2017-12-20: Version 6.5.90 - - Performance and stability improvements on all platforms. - - -2017-12-19: Version 6.5.89 - - Performance and stability improvements on all platforms. - - -2017-12-19: Version 6.5.88 - - Performance and stability improvements on all platforms. - - -2017-12-19: Version 6.5.87 - - Performance and stability improvements on all platforms. - - -2017-12-19: Version 6.5.86 - - Performance and stability improvements on all platforms. - - -2017-12-19: Version 6.5.85 - - Performance and stability improvements on all platforms. - - -2017-12-19: Version 6.5.84 - - Performance and stability improvements on all platforms. - - -2017-12-19: Version 6.5.83 - - Performance and stability improvements on all platforms. - - -2017-12-19: Version 6.5.82 - - Performance and stability improvements on all platforms. - - -2017-12-19: Version 6.5.81 - - Performance and stability improvements on all platforms. - - -2017-12-19: Version 6.5.80 - - Performance and stability improvements on all platforms. - - -2017-12-19: Version 6.5.79 - - Performance and stability improvements on all platforms. - - -2017-12-19: Version 6.5.78 - - Performance and stability improvements on all platforms. + The ChangeLog file is no longer maintained on master. This + sentinel should stay on top of this list. 2017-12-19: Version 6.5.77 diff --git a/deps/v8/DEPS b/deps/v8/DEPS index 4a00478633793d..3054e957c96bdc 100644 --- a/deps/v8/DEPS +++ b/deps/v8/DEPS @@ -12,55 +12,61 @@ vars = { deps = { 'v8/build': - Var('chromium_url') + '/chromium/src/build.git' + '@' + '73e352e758d90603e23bdc84734c12aa5817ab5f', + Var('chromium_url') + '/chromium/src/build.git' + '@' + '9b4b41368c26e443873813b0922d9e2fb02a9dd8', 'v8/tools/gyp': Var('chromium_url') + '/external/gyp.git' + '@' + 'd61a9397e668fa9843c4aa7da9e79460fe590bfb', + 'v8/third_party/depot_tools': + Var('chromium_url') + '/chromium/tools/depot_tools.git' + '@' + 'c3975e55e1465d9d9320ae67889f0b057c7d7ec3', 'v8/third_party/icu': - Var('chromium_url') + '/chromium/deps/icu.git' + '@' + 'd888fd2a1be890f4d35e43f68d6d79f42519a357', + Var('chromium_url') + '/chromium/deps/icu.git' + '@' + '172d33141cd16df9d027cfd49bfe940b1dc66f1a', 'v8/third_party/instrumented_libraries': Var('chromium_url') + '/chromium/src/third_party/instrumented_libraries.git' + '@' + '323cf32193caecbf074d1a0cb5b02b905f163e0f', 'v8/buildtools': - Var('chromium_url') + '/chromium/buildtools.git' + '@' + 'e8aa02ea839e087f2db66100d02c3b5d47993852', + Var('chromium_url') + '/chromium/buildtools.git' + '@' + '0dd5c6f980d22be96b728155249df2da355989d9', 'v8/base/trace_event/common': Var('chromium_url') + '/chromium/src/base/trace_event/common.git' + '@' + '211b3ed9d0481b4caddbee1322321b86a483ca1f', 'v8/third_party/android_ndk': { - 'url': Var('chromium_url') + '/android_ndk.git' + '@' + '635bc380968a76f6948fee65f80a0b28db53ae81', + 'url': Var('chromium_url') + '/android_ndk.git' + '@' + '5cd86312e794bdf542a3685c6f10cbb96072990b', 'condition': 'checkout_android', }, 'v8/third_party/android_tools': { - 'url': Var('chromium_url') + '/android_tools.git' + '@' + 'c22a664c39af72dd8f89200220713dcad811300a', + 'url': Var('chromium_url') + '/android_tools.git' + '@' + '130499e25286f4d56acafa252fee09f3cc595c49', 'condition': 'checkout_android', }, 'v8/third_party/catapult': { - 'url': Var('chromium_url') + '/catapult.git' + '@' + '2c59f678c7ede8a844fb687525d594b71aabe3dd', + 'url': Var('chromium_url') + '/catapult.git' + '@' + '0c92958e3ed066e66cb0fc3882d023f15193e802', 'condition': 'checkout_android', }, 'v8/third_party/colorama/src': { 'url': Var('chromium_url') + '/external/colorama.git' + '@' + '799604a1041e9b3bc5d2789ecbd7e8db2e18e6b8', 'condition': 'checkout_android', }, + 'v8/third_party/fuchsia-sdk': { + 'url': Var('chromium_url') + '/chromium/src/third_party/fuchsia-sdk.git' + '@' + '272de12d87a80905fd2df2339644a8561e3c2c30', + 'condition': 'checkout_fuchsia', + }, 'v8/third_party/googletest/src': - Var('chromium_url') + '/external/github.com/google/googletest.git' + '@' + '7e5f90d3780d553cb86771141fb81349f3a63508', + Var('chromium_url') + '/external/github.com/google/googletest.git' + '@' + 'ce468a17c434e4e79724396ee1b51d86bfc8a88b', 'v8/third_party/jinja2': - Var('chromium_url') + '/chromium/src/third_party/jinja2.git' + '@' + '45571de473282bd1d8b63a8dfcb1fd268d0635d2', + Var('chromium_url') + '/chromium/src/third_party/jinja2.git' + '@' + 'b41863e42637544c2941b574c7877d3e1f663e25', 'v8/third_party/markupsafe': Var('chromium_url') + '/chromium/src/third_party/markupsafe.git' + '@' + '8f45f5cfa0009d2a70589bcda0349b8cb2b72783', 'v8/tools/swarming_client': - Var('chromium_url') + '/infra/luci/client-py.git' + '@' + '88229872dd17e71658fe96763feaa77915d8cbd6', + Var('chromium_url') + '/infra/luci/client-py.git' + '@' + '9a518d097dca20b7b00ce3bdfc5d418ccc79893a', 'v8/test/benchmarks/data': Var('chromium_url') + '/v8/deps/third_party/benchmarks.git' + '@' + '05d7188267b4560491ff9155c5ee13e207ecd65f', 'v8/test/mozilla/data': Var('chromium_url') + '/v8/deps/third_party/mozilla-tests.git' + '@' + 'f6c578a10ea707b1a8ab0b88943fe5115ce2b9be', 'v8/test/test262/data': - Var('chromium_url') + '/external/github.com/tc39/test262.git' + '@' + '0192e0d70e2295fb590f14865da42f0f9dfa64bd', + Var('chromium_url') + '/external/github.com/tc39/test262.git' + '@' + 'a6c1d05ac4fed084fa047e4c52ab2a8c9c2a8aef', 'v8/test/test262/harness': Var('chromium_url') + '/external/github.com/test262-utils/test262-harness-py.git' + '@' + '0f2acdd882c84cff43b9d60df7574a1901e2cdcd', 'v8/tools/clang': - Var('chromium_url') + '/chromium/src/tools/clang.git' + '@' + 'd7c36b0ae001a5cc31f2da79a430154916a3def2', + Var('chromium_url') + '/chromium/src/tools/clang.git' + '@' + '2024df99f9388a126b750a14bd827bb2e946f5d3', 'v8/tools/luci-go': - Var('chromium_url') + '/chromium/src/tools/luci-go.git' + '@' + 'ff0709d4283b1f233dcf0c9fec1672c6ecaed2f1', + Var('chromium_url') + '/chromium/src/tools/luci-go.git' + '@' + 'e3d4003364ba53f0db6e235609d8e7f5b7d7ab9d', 'v8/test/wasm-js': - Var('chromium_url') + '/external/github.com/WebAssembly/spec.git' + '@' + '586d34770c6445bfb93c9bae8ac50baade7ee168', + Var('chromium_url') + '/external/github.com/WebAssembly/spec.git' + '@' + '2113ea7e106f8a964e0445ba38f289d2aa845edd', } recursedeps = [ @@ -82,6 +88,17 @@ skip_child_includes = [ ] hooks = [ + { + # Ensure that the DEPS'd "depot_tools" has its self-update capability + # disabled. + 'name': 'disable_depot_tools_selfupdate', + 'pattern': '.', + 'action': [ + 'python', + 'v8/third_party/depot_tools/update_depot_tools_toggle.py', + '--disable', + ], + }, { # This clobbers when necessary (based on get_landmines.py). It must be the # first hook so that other things that get/generate into the output diff --git a/deps/v8/OWNERS b/deps/v8/OWNERS index f6726316f2af95..3e3eef5ff2bebf 100644 --- a/deps/v8/OWNERS +++ b/deps/v8/OWNERS @@ -24,6 +24,7 @@ leszeks@chromium.org machenbach@chromium.org marja@chromium.org mlippautz@chromium.org +mslekova@chromium.org mstarzinger@chromium.org mvstanton@chromium.org mythria@chromium.org diff --git a/deps/v8/PRESUBMIT.py b/deps/v8/PRESUBMIT.py index e6dbb7939568fd..bd780ce62f7a78 100644 --- a/deps/v8/PRESUBMIT.py +++ b/deps/v8/PRESUBMIT.py @@ -96,7 +96,9 @@ def FilterFile(affected_file): input_api.AffectedFiles(include_deletes=True)): results.append(output_api.PresubmitError("Status file check failed")) results.extend(input_api.canned_checks.CheckAuthorizedAuthor( - input_api, output_api)) + input_api, output_api, bot_whitelist=[ + 'v8-ci-autoroll-builder@chops-service-accounts.iam.gserviceaccount.com' + ])) return results @@ -289,6 +291,13 @@ def FilterFile(affected_file): def _CommonChecks(input_api, output_api): """Checks common to both upload and commit.""" results = [] + # TODO(machenbach): Replace some of those checks, e.g. owners and copyright, + # with the canned PanProjectChecks. Need to make sure that the checks all + # pass on all existing files. + results.extend(input_api.canned_checks.CheckOwnersFormat( + input_api, output_api)) + results.extend(input_api.canned_checks.CheckOwners( + input_api, output_api)) results.extend(_CheckCommitMessageBugEntry(input_api, output_api)) results.extend(input_api.canned_checks.CheckPatchFormatted( input_api, output_api)) diff --git a/deps/v8/WATCHLISTS b/deps/v8/WATCHLISTS index bd07d318dadd55..d54695cca3b5d2 100644 --- a/deps/v8/WATCHLISTS +++ b/deps/v8/WATCHLISTS @@ -33,8 +33,9 @@ { 'WATCHLIST_DEFINITIONS': { - 'public_api': { - 'filepath': 'include/', + 'api': { + 'filepath': 'include/' \ + '|src/api\.(cc|h)$', }, 'snapshot': { 'filepath': 'src/snapshot/', @@ -62,12 +63,29 @@ }, 'merges': { 'filepath': '.', - } + }, + 'inspector': { + 'filepath': 'inspector', + }, + 'wasm': { + 'filepath': 'src/wasm/' \ + '|src/compiler/wasm', + }, + 'value_serializer': { + 'filepath': 'src/value-serializer', + }, + 'parser': { + 'filepath': 'src/ast/' \ + '|src/parsing/', + }, + 'tracing': { + 'filepath': 'src/tracing/', + }, }, 'WATCHLISTS': { - 'public_api': [ - 'phajdan.jr@chromium.org', + 'api': [ + 'adamk@chromium.org', ], 'snapshot': [ 'yangguo@chromium.org', @@ -77,25 +95,37 @@ ], 'interpreter': [ 'rmcilroy@chromium.org', - 'oth@chromium.org', ], 'feature_shipping_status': [ 'hablich@chromium.org', ], 'gc_changes': [ 'hpayer@chromium.org', - 'ulan@chromium.org', ], 'arm': [ 'v8-mips-ports@googlegroups.com', 'v8-ppc-ports@googlegroups.com', ], - 'ia32': [ - 'v8-x87-ports@googlegroups.com', - ], 'merges': [ # Only enabled on branches created with tools/release/create_release.py - 'v8-merges@googlegroups.com', + # 'v8-merges@googlegroups.com', + ], + 'inspector': [ + 'devtools-reviews@chromium.org', + ], + 'wasm': [ + 'wasm-v8@google.com', + ], + 'value_serializer': [ + 'jbroman+watch@chromium.org', + ], + 'parser': [ + 'adamk@chromium.org', + 'marja+watch@chromium.org', + ], + 'tracing': [ + 'lpy+v8tracing@chromium.org', + 'fmeawad@chromium.org', ], }, } diff --git a/deps/v8/custom_deps/.gitignore b/deps/v8/custom_deps/.gitignore new file mode 100644 index 00000000000000..83866b6690a22f --- /dev/null +++ b/deps/v8/custom_deps/.gitignore @@ -0,0 +1,4 @@ +* +!.gitignore +!OWNERS +!README.md \ No newline at end of file diff --git a/deps/v8/custom_deps/OWNERS b/deps/v8/custom_deps/OWNERS new file mode 100644 index 00000000000000..76719caca0eccc --- /dev/null +++ b/deps/v8/custom_deps/OWNERS @@ -0,0 +1,2 @@ +machenbach@chromium.org +sergiyb@chromium.org \ No newline at end of file diff --git a/deps/v8/custom_deps/README.md b/deps/v8/custom_deps/README.md new file mode 100644 index 00000000000000..f49930fb939d96 --- /dev/null +++ b/deps/v8/custom_deps/README.md @@ -0,0 +1,2 @@ +Common directory for custom dependencies pulled in via .gclient custom_deps. +All subdirectories are ignored by git by default. \ No newline at end of file diff --git a/deps/v8/gni/v8.gni b/deps/v8/gni/v8.gni index 211f15aab944d4..a5312f76acd9dd 100644 --- a/deps/v8/gni/v8.gni +++ b/deps/v8/gni/v8.gni @@ -38,7 +38,7 @@ declare_args() { v8_use_snapshot = !(is_win && host_os != "win" && target_cpu == "x64") # Enable several snapshots side-by-side (e.g. default and for trusted code). - v8_use_multi_snapshots = "" + v8_use_multi_snapshots = false # Use external files for startup data blobs: # the JS builtins sources and the start snapshot. @@ -61,7 +61,10 @@ if (v8_use_external_startup_data == "") { v8_use_external_startup_data = v8_use_snapshot && !is_ios } -if (v8_use_multi_snapshots == "") { +if (v8_use_multi_snapshots) { + # Silently disable multi snapshots if they're incompatible with the current + # build configuration. This allows us to set v8_use_multi_snapshots=true on + # all bots, and e.g. no-snapshot bots will automatically do the right thing. v8_use_multi_snapshots = v8_use_external_startup_data && !build_with_chromium && !use_jumbo_build } @@ -96,7 +99,7 @@ if (is_debug && !v8_optimized_debug) { # TODO(crbug.com/621335) Rework this so that we don't have the confusion # between "optimize_speed" and "optimize_max". - if (is_posix && !is_android && !using_sanitizer) { + if (((is_posix && !is_android) || is_fuchsia) && !using_sanitizer) { v8_add_configs += [ "//build/config/compiler:optimize_speed" ] } else { v8_add_configs += [ "//build/config/compiler:optimize_max" ] @@ -110,7 +113,7 @@ if (v8_code_coverage && !is_clang) { ] } -if (is_posix && (v8_enable_backtrace || v8_monolithic)) { +if ((is_posix || is_fuchsia) && (v8_enable_backtrace || v8_monolithic)) { v8_remove_configs += [ "//build/config/gcc:symbol_visibility_hidden" ] v8_add_configs += [ "//build/config/gcc:symbol_visibility_default" ] } diff --git a/deps/v8/include/libplatform/libplatform.h b/deps/v8/include/libplatform/libplatform.h index 2c830bf834b786..a381b97f889749 100644 --- a/deps/v8/include/libplatform/libplatform.h +++ b/deps/v8/include/libplatform/libplatform.h @@ -62,7 +62,7 @@ V8_PLATFORM_EXPORT bool PumpMessageLoop( v8::Platform* platform, v8::Isolate* isolate, MessageLoopBehavior behavior = MessageLoopBehavior::kDoNotWait); -V8_PLATFORM_EXPORT V8_DEPRECATE_SOON( +V8_PLATFORM_EXPORT V8_DEPRECATED( "This function has become obsolete and is essentially a nop", void EnsureEventLoopInitialized(v8::Platform* platform, v8::Isolate* isolate)); diff --git a/deps/v8/include/v8-inspector.h b/deps/v8/include/v8-inspector.h index 6de8234fb83bcf..d879a94373e427 100644 --- a/deps/v8/include/v8-inspector.h +++ b/deps/v8/include/v8-inspector.h @@ -99,6 +99,7 @@ class V8_EXPORT V8ContextInfo { class V8_EXPORT V8StackTrace { public: + virtual StringView firstNonEmptySourceURL() const = 0; virtual bool isEmpty() const = 0; virtual StringView topSourceURL() const = 0; virtual int topLineNumber() const = 0; diff --git a/deps/v8/include/v8-platform.h b/deps/v8/include/v8-platform.h index ddc200abab0dd9..cfeb13b65829f9 100644 --- a/deps/v8/include/v8-platform.h +++ b/deps/v8/include/v8-platform.h @@ -207,6 +207,7 @@ class PageAllocator { */ enum Permission { kNoAccess, + kRead, kReadWrite, // TODO(hpayer): Remove this flag. Memory should never be rwx. kReadWriteExecute, @@ -245,16 +246,6 @@ class PageAllocator { */ class Platform { public: - /** - * This enum is used to indicate whether a task is potentially long running, - * or causes a long wait. The embedder might want to use this hint to decide - * whether to execute the task on a dedicated thread. - */ - enum ExpectedRuntime { - kShortRunningTask, - kLongRunningTask - }; - virtual ~Platform() = default; /** @@ -289,101 +280,25 @@ class Platform { virtual bool OnCriticalMemoryPressure(size_t length) { return false; } /** - * Gets the number of worker threads used by GetWorkerThreadsTaskRunner() and - * CallOnWorkerThread(). This can be used to estimate the number of tasks a - * work package should be split into. A return value of 0 means that there are - * no worker threads available. Note that a value of 0 won't prohibit V8 from - * posting tasks using |CallOnWorkerThread|. - */ - virtual int NumberOfWorkerThreads() { - return static_cast(NumberOfAvailableBackgroundThreads()); - } - - /** - * Deprecated. Use NumberOfWorkerThreads() instead. - * TODO(gab): Remove this when all embedders override - * NumberOfWorkerThreads() instead. + * Gets the number of worker threads used by + * Call(BlockingTask)OnWorkerThread(). This can be used to estimate the number + * of tasks a work package should be split into. A return value of 0 means + * that there are no worker threads available. Note that a value of 0 won't + * prohibit V8 from posting tasks using |CallOnWorkerThread|. */ - V8_DEPRECATE_SOON( - "NumberOfAvailableBackgroundThreads() is deprecated, use " - "NumberOfAvailableBackgroundThreads() instead.", - virtual size_t NumberOfAvailableBackgroundThreads()) { - return 0; - } + virtual int NumberOfWorkerThreads() = 0; /** * Returns a TaskRunner which can be used to post a task on the foreground. * This function should only be called from a foreground thread. */ virtual std::shared_ptr GetForegroundTaskRunner( - Isolate* isolate) { - // TODO(ahaas): Make this function abstract after it got implemented on all - // platforms. - return {}; - } - - /** - * Returns a TaskRunner which can be used to post a task on a background. - * This function should only be called from a foreground thread. - */ - V8_DEPRECATE_SOON( - "GetBackgroundTaskRunner() is deprecated, use " - "GetWorkerThreadsTaskRunner() " - "instead.", - virtual std::shared_ptr GetBackgroundTaskRunner( - Isolate* isolate)) { - // TODO(gab): Remove this method when all embedders have moved to - // GetWorkerThreadsTaskRunner(). - - // An implementation needs to be provided here because this is called by the - // default GetWorkerThreadsTaskRunner() implementation below. In practice - // however, all code either: - // - Overrides GetWorkerThreadsTaskRunner() (thus not making this call) -- - // i.e. all v8 code. - // - Overrides this method (thus not making this call) -- i.e. all - // unadapted embedders. - abort(); - } - - /** - * Returns a TaskRunner which can be used to post async tasks on a worker. - * This function should only be called from a foreground thread. - */ - virtual std::shared_ptr GetWorkerThreadsTaskRunner( - Isolate* isolate) { - // TODO(gab): Make this function abstract after it got implemented on all - // platforms. - return GetBackgroundTaskRunner(isolate); - } - - /** - * Schedules a task to be invoked on a background thread. |expected_runtime| - * indicates that the task will run a long time. The Platform implementation - * takes ownership of |task|. There is no guarantee about order of execution - * of tasks wrt order of scheduling, nor is there a guarantee about the - * thread the task will be run on. - */ - V8_DEPRECATE_SOON( - "ExpectedRuntime is deprecated, use CallOnWorkerThread() instead.", - virtual void CallOnBackgroundThread(Task* task, - ExpectedRuntime expected_runtime)) { - // An implementation needs to be provided here because this is called by the - // default implementation below. In practice however, all code either: - // - Overrides the new method (thus not making this call) -- i.e. all v8 - // code. - // - Overrides this method (thus not making this call) -- i.e. all - // unadapted embedders. - abort(); - } + Isolate* isolate) = 0; /** * Schedules a task to be invoked on a worker thread. - * TODO(gab): Make pure virtual when all embedders override this instead of - * CallOnBackgroundThread(). */ - virtual void CallOnWorkerThread(std::unique_ptr task) { - CallOnBackgroundThread(task.release(), kShortRunningTask); - } + virtual void CallOnWorkerThread(std::unique_ptr task) = 0; /** * Schedules a task that blocks the main thread to be invoked with @@ -395,6 +310,13 @@ class Platform { CallOnWorkerThread(std::move(task)); } + /** + * Schedules a task to be invoked on a worker thread after |delay_in_seconds| + * expires. + */ + virtual void CallDelayedOnWorkerThread(std::unique_ptr task, + double delay_in_seconds) = 0; + /** * Schedules a task to be invoked on a foreground thread wrt a specific * |isolate|. Tasks posted for the same isolate should be execute in order of @@ -420,14 +342,14 @@ class Platform { * The definition of "foreground" is opaque to V8. */ virtual void CallIdleOnForegroundThread(Isolate* isolate, IdleTask* task) { - // TODO(ulan): Make this function abstract after V8 roll in Chromium. + // This must be overriden if |IdleTasksEnabled()|. + abort(); } /** * Returns true if idle tasks are enabled for the given |isolate|. */ virtual bool IdleTasksEnabled(Isolate* isolate) { - // TODO(ulan): Make this function abstract after V8 roll in Chromium. return false; } diff --git a/deps/v8/include/v8-profiler.h b/deps/v8/include/v8-profiler.h index 5df9b2a217ea8e..a8a9b48333604b 100644 --- a/deps/v8/include/v8-profiler.h +++ b/deps/v8/include/v8-profiler.h @@ -54,7 +54,11 @@ namespace v8 { */ class V8_EXPORT TracingCpuProfiler { public: - static std::unique_ptr Create(Isolate*); + V8_DEPRECATED( + "The profiler is created automatically with the isolate.\n" + "No need to create it explicitly.", + static std::unique_ptr Create(Isolate*)); + virtual ~TracingCpuProfiler() = default; protected: @@ -273,6 +277,16 @@ class V8_EXPORT CpuProfile { void Delete(); }; +enum CpuProfilingMode { + // In the resulting CpuProfile tree, intermediate nodes in a stack trace + // (from the root to a leaf) will have line numbers that point to the start + // line of the function, rather than the line of the callsite of the child. + kLeafNodeLineNumbers, + // In the resulting CpuProfile tree, nodes are separated based on the line + // number of their callsite in their parent. + kCallerLineNumbers, +}; + /** * Interface for controlling CPU profiling. Instance of the * profiler can be created using v8::CpuProfiler::New method. @@ -316,6 +330,13 @@ class V8_EXPORT CpuProfiler { * |record_samples| parameter controls whether individual samples should * be recorded in addition to the aggregated tree. */ + void StartProfiling(Local title, CpuProfilingMode mode, + bool record_samples = false); + /** + * The same as StartProfiling above, but the CpuProfilingMode defaults to + * kLeafNodeLineNumbers mode, which was the previous default behavior of the + * profiler. + */ void StartProfiling(Local title, bool record_samples = false); /** @@ -636,7 +657,7 @@ class V8_EXPORT AllocationProfile { * Usage: * 1) Define derived class of EmbedderGraph::Node for embedder objects. * 2) Set the build embedder graph callback on the heap profiler using - * HeapProfiler::SetBuildEmbedderGraphCallback. + * HeapProfiler::AddBuildEmbedderGraphCallback. * 3) In the callback use graph->AddEdge(node1, node2) to add an edge from * node1 to node2. * 4) To represent references from/to V8 object, construct V8 nodes using @@ -736,7 +757,12 @@ class V8_EXPORT HeapProfiler { * The callback must not trigger garbage collection in V8. */ typedef void (*BuildEmbedderGraphCallback)(v8::Isolate* isolate, - v8::EmbedderGraph* graph); + v8::EmbedderGraph* graph, + void* data); + + /** TODO(addaleax): Remove */ + typedef void (*LegacyBuildEmbedderGraphCallback)(v8::Isolate* isolate, + v8::EmbedderGraph* graph); /** Returns the number of snapshots taken. */ int GetSnapshotCount(); @@ -878,15 +904,22 @@ class V8_EXPORT HeapProfiler { /** Binds a callback to embedder's class ID. */ V8_DEPRECATED( - "Use SetBuildEmbedderGraphCallback to provide info about embedder nodes", + "Use AddBuildEmbedderGraphCallback to provide info about embedder nodes", void SetWrapperClassInfoProvider(uint16_t class_id, WrapperInfoCallback callback)); V8_DEPRECATED( - "Use SetBuildEmbedderGraphCallback to provide info about embedder nodes", + "Use AddBuildEmbedderGraphCallback to provide info about embedder nodes", void SetGetRetainerInfosCallback(GetRetainerInfosCallback callback)); - void SetBuildEmbedderGraphCallback(BuildEmbedderGraphCallback callback); + V8_DEPRECATE_SOON( + "Use AddBuildEmbedderGraphCallback to provide info about embedder nodes", + void SetBuildEmbedderGraphCallback( + LegacyBuildEmbedderGraphCallback callback)); + void AddBuildEmbedderGraphCallback(BuildEmbedderGraphCallback callback, + void* data); + void RemoveBuildEmbedderGraphCallback(BuildEmbedderGraphCallback callback, + void* data); /** * Default value of persistent handle class ID. Must not be used to diff --git a/deps/v8/include/v8-version.h b/deps/v8/include/v8-version.h index 440a6068699ef0..c1287c255add04 100644 --- a/deps/v8/include/v8-version.h +++ b/deps/v8/include/v8-version.h @@ -9,12 +9,12 @@ // NOTE these macros are used by some of the tool scripts and the build // system so their names cannot be changed without changing the scripts. #define V8_MAJOR_VERSION 6 -#define V8_MINOR_VERSION 7 -#define V8_BUILD_NUMBER 288 -#define V8_PATCH_LEVEL 46 +#define V8_MINOR_VERSION 9 +#define V8_BUILD_NUMBER 0 +#define V8_PATCH_LEVEL 0 // Use 1 for candidates and 0 otherwise. // (Boolean macro values are not supported by all preprocessors.) -#define V8_IS_CANDIDATE_VERSION 0 +#define V8_IS_CANDIDATE_VERSION 1 #endif // V8_INCLUDE_VERSION_H_ diff --git a/deps/v8/include/v8.h b/deps/v8/include/v8.h index fe8f5a383952f7..b29a0cb127060c 100644 --- a/deps/v8/include/v8.h +++ b/deps/v8/include/v8.h @@ -71,7 +71,6 @@ class BigIntObject; class Boolean; class BooleanObject; class Context; -class CpuProfiler; class Data; class Date; class External; @@ -156,6 +155,103 @@ class GlobalHandles; namespace wasm { class StreamingDecoder; } // namespace wasm + +/** + * Configuration of tagging scheme. + */ +const int kApiPointerSize = sizeof(void*); // NOLINT +const int kApiDoubleSize = sizeof(double); // NOLINT +const int kApiIntSize = sizeof(int); // NOLINT +const int kApiInt64Size = sizeof(int64_t); // NOLINT + +// Tag information for HeapObject. +const int kHeapObjectTag = 1; +const int kWeakHeapObjectTag = 3; +const int kHeapObjectTagSize = 2; +const intptr_t kHeapObjectTagMask = (1 << kHeapObjectTagSize) - 1; + +// Tag information for Smi. +const int kSmiTag = 0; +const int kSmiTagSize = 1; +const intptr_t kSmiTagMask = (1 << kSmiTagSize) - 1; + +template +struct SmiTagging; + +template +V8_INLINE internal::Object* IntToSmi(int value) { + int smi_shift_bits = kSmiTagSize + kSmiShiftSize; + intptr_t tagged_value = + (static_cast(value) << smi_shift_bits) | kSmiTag; + return reinterpret_cast(tagged_value); +} + +// Smi constants for systems where tagged pointer is a 32-bit value. +template <> +struct SmiTagging<4> { + enum { kSmiShiftSize = 0, kSmiValueSize = 31 }; + static int SmiShiftSize() { return kSmiShiftSize; } + static int SmiValueSize() { return kSmiValueSize; } + V8_INLINE static int SmiToInt(const internal::Object* value) { + int shift_bits = kSmiTagSize + kSmiShiftSize; + // Throw away top 32 bits and shift down (requires >> to be sign extending). + return static_cast(reinterpret_cast(value)) >> shift_bits; + } + V8_INLINE static internal::Object* IntToSmi(int value) { + return internal::IntToSmi(value); + } + V8_INLINE static bool IsValidSmi(intptr_t value) { + // To be representable as an tagged small integer, the two + // most-significant bits of 'value' must be either 00 or 11 due to + // sign-extension. To check this we add 01 to the two + // most-significant bits, and check if the most-significant bit is 0 + // + // CAUTION: The original code below: + // bool result = ((value + 0x40000000) & 0x80000000) == 0; + // may lead to incorrect results according to the C language spec, and + // in fact doesn't work correctly with gcc4.1.1 in some cases: The + // compiler may produce undefined results in case of signed integer + // overflow. The computation must be done w/ unsigned ints. + return static_cast(value) + 0x40000000U < 0x80000000U; + } +}; + +// Smi constants for systems where tagged pointer is a 64-bit value. +template <> +struct SmiTagging<8> { + enum { kSmiShiftSize = 31, kSmiValueSize = 32 }; + static int SmiShiftSize() { return kSmiShiftSize; } + static int SmiValueSize() { return kSmiValueSize; } + V8_INLINE static int SmiToInt(const internal::Object* value) { + int shift_bits = kSmiTagSize + kSmiShiftSize; + // Shift down and throw away top 32 bits. + return static_cast(reinterpret_cast(value) >> shift_bits); + } + V8_INLINE static internal::Object* IntToSmi(int value) { + return internal::IntToSmi(value); + } + V8_INLINE static bool IsValidSmi(intptr_t value) { + // To be representable as a long smi, the value must be a 32-bit integer. + return (value == static_cast(value)); + } +}; + +#if V8_COMPRESS_POINTERS +static_assert( + kApiPointerSize == kApiInt64Size, + "Pointer compression can be enabled only for 64-bit architectures"); +typedef SmiTagging<4> PlatformSmiTagging; +#else +typedef SmiTagging PlatformSmiTagging; +#endif + +const int kSmiShiftSize = PlatformSmiTagging::kSmiShiftSize; +const int kSmiValueSize = PlatformSmiTagging::kSmiValueSize; +const int kSmiMinValue = (static_cast(-1)) << (kSmiValueSize - 1); +const int kSmiMaxValue = -(kSmiMinValue + 1); +constexpr bool SmiValuesAre31Bits() { return kSmiValueSize == 31; } +constexpr bool SmiValuesAre32Bits() { return kSmiValueSize == 32; } + } // namespace internal namespace debug { @@ -933,6 +1029,11 @@ class V8_EXPORT EscapableHandleScope : public HandleScope { return Local(reinterpret_cast(slot)); } + template + V8_INLINE MaybeLocal EscapeMaybe(MaybeLocal value) { + return Escape(value.FromMaybe(Local())); + } + EscapableHandleScope(const EscapableHandleScope&) = delete; void operator=(const EscapableHandleScope&) = delete; @@ -1123,6 +1224,13 @@ class V8_EXPORT UnboundScript { static const int kNoScriptId = 0; }; +/** + * A compiled JavaScript module, not yet tied to a Context. + */ +class V8_EXPORT UnboundModuleScript { + // Only used as a container for code caching. +}; + /** * A location in JavaScript source. */ @@ -1222,6 +1330,14 @@ class V8_EXPORT Module { * The module's status must be at least kInstantiated. */ Local GetModuleNamespace(); + + /** + * Returns the corresponding context-unbound module script. + * + * The module must be unevaluated, i.e. its status must not be kEvaluating, + * kEvaluated or kErrored. + */ + Local GetUnboundModuleScript(); }; /** @@ -1364,6 +1480,10 @@ class V8_EXPORT ScriptCompiler { * more than two data chunks. The embedder can avoid this problem by always * returning at least 2 bytes of data. * + * When streaming UTF-16 data, V8 does not handle characters split between + * two data chunks. The embedder has to make sure that chunks have an even + * length. + * * If the embedder wants to cancel the streaming, they should make the next * GetMoreData call return 0. V8 will interpret it as end of data (and most * probably, parsing will fail). The streaming task will return as soon as @@ -1547,7 +1667,9 @@ class V8_EXPORT ScriptCompiler { * ECMAScript specification. */ static V8_WARN_UNUSED_RESULT MaybeLocal CompileModule( - Isolate* isolate, Source* source); + Isolate* isolate, Source* source, + CompileOptions options = kNoCompileOptions, + NoCacheReason no_cache_reason = kNoCacheNoReason); /** * Compile a function for a given context. This is equivalent to running @@ -1580,9 +1702,17 @@ class V8_EXPORT ScriptCompiler { */ static CachedData* CreateCodeCache(Local unbound_script); - // Deprecated. - static CachedData* CreateCodeCache(Local unbound_script, - Local source); + /** + * Creates and returns code cache for the specified unbound_module_script. + * This will return nullptr if the script cannot be serialized. The + * CachedData returned by this function should be owned by the caller. + */ + static CachedData* CreateCodeCache( + Local unbound_module_script); + + V8_DEPRECATED("Source string is no longer required", + static CachedData* CreateCodeCache( + Local unbound_script, Local source)); /** * Creates and returns code cache for the specified function that was @@ -1592,9 +1722,9 @@ class V8_EXPORT ScriptCompiler { */ static CachedData* CreateCodeCacheForFunction(Local function); - // Deprecated. - static CachedData* CreateCodeCacheForFunction(Local function, - Local source); + V8_DEPRECATED("Source string is no longer required", + static CachedData* CreateCodeCacheForFunction( + Local function, Local source)); private: static V8_WARN_UNUSED_RESULT MaybeLocal CompileUnboundInternal( @@ -1913,12 +2043,16 @@ class V8_EXPORT ValueSerializer { * If the memory cannot be allocated, nullptr should be returned. * |actual_size| will be ignored. It is assumed that |old_buffer| is still * valid in this case and has not been modified. + * + * The default implementation uses the stdlib's `realloc()` function. */ virtual void* ReallocateBufferMemory(void* old_buffer, size_t size, size_t* actual_size); /** * Frees a buffer allocated with |ReallocateBufferMemory|. + * + * The default implementation uses the stdlib's `free()` function. */ virtual void FreeBufferMemory(void* buffer); }; @@ -1946,9 +2080,9 @@ class V8_EXPORT ValueSerializer { /** * Returns the stored data (allocated using the delegate's - * AllocateBufferMemory) and its size. This serializer should not be used once - * the buffer is released. The contents are undefined if a previous write has - * failed. + * ReallocateBufferMemory) and its size. This serializer should not be used + * once the buffer is released. The contents are undefined if a previous write + * has failed. Ownership of the buffer is transferred to the caller. */ V8_WARN_UNUSED_RESULT std::pair Release(); @@ -2538,8 +2672,9 @@ enum class NewStringType { */ class V8_EXPORT String : public Name { public: - static constexpr int kMaxLength = - sizeof(void*) == 4 ? (1 << 28) - 16 : (1 << 30) - 1 - 24; + static constexpr int kMaxLength = internal::kApiPointerSize == 4 + ? (1 << 28) - 16 + : internal::kSmiMaxValue / 2 - 24; enum Encoding { UNKNOWN_ENCODING = 0x1, @@ -3958,6 +4093,15 @@ class V8_EXPORT Function : public Object { return NewInstance(context, 0, nullptr); } + /** + * When side effect checks are enabled, passing kHasNoSideEffect allows the + * constructor to be invoked without throwing. Calls made within the + * constructor are still checked. + */ + V8_WARN_UNUSED_RESULT MaybeLocal NewInstanceWithSideEffectType( + Local context, int argc, Local argv[], + SideEffectType side_effect_type = SideEffectType::kHasSideEffect) const; + V8_DEPRECATE_SOON("Use maybe version", Local Call(Local recv, int argc, Local argv[])); @@ -4210,10 +4354,29 @@ class V8_EXPORT Proxy : public Object { class V8_EXPORT WasmCompiledModule : public Object { public: typedef std::pair, size_t> SerializedModule; - /** - * A buffer that is owned by the caller. - */ - typedef std::pair CallerOwnedBuffer; + +// The COMMA macro allows us to use ',' inside of the V8_DEPRECATE_SOON macro. +#define COMMA , + V8_DEPRECATE_SOON( + "Use BufferReference.", + typedef std::pair CallerOwnedBuffer); +#undef COMMA + + /** + * A unowned reference to a byte buffer. + */ + struct BufferReference { + const uint8_t* start; + size_t size; + BufferReference(const uint8_t* start, size_t size) + : start(start), size(size) {} + // Temporarily allow conversion to and from CallerOwnedBuffer. + V8_DEPRECATE_SOON( + "Use BufferReference directly.", + inline BufferReference(CallerOwnedBuffer)); // NOLINT(runtime/explicit) + V8_DEPRECATE_SOON("Use BufferReference directly.", + inline operator CallerOwnedBuffer()); + }; /** * An opaque, native heap object for transferring wasm modules. It @@ -4230,7 +4393,7 @@ class V8_EXPORT WasmCompiledModule : public Object { private: typedef std::pair, size_t> OwnedBuffer; friend class WasmCompiledModule; - TransferrableModule(OwnedBuffer&& code, OwnedBuffer&& bytes) + TransferrableModule(OwnedBuffer code, OwnedBuffer bytes) : compiled_code(std::move(code)), wire_bytes(std::move(bytes)) {} OwnedBuffer compiled_code = {nullptr, 0}; @@ -4254,7 +4417,9 @@ class V8_EXPORT WasmCompiledModule : public Object { /** * Get the wasm-encoded bytes that were used to compile this module. */ - Local GetWasmWireBytes(); + BufferReference GetWasmWireBytesRef(); + V8_DEPRECATE_SOON("Use GetWasmWireBytesRef version.", + Local GetWasmWireBytes()); /** * Serialize the compiled module. The serialized data does not include the @@ -4267,18 +4432,18 @@ class V8_EXPORT WasmCompiledModule : public Object { * uncompiled bytes. */ static MaybeLocal DeserializeOrCompile( - Isolate* isolate, const CallerOwnedBuffer& serialized_module, - const CallerOwnedBuffer& wire_bytes); + Isolate* isolate, BufferReference serialized_module, + BufferReference wire_bytes); V8_INLINE static WasmCompiledModule* Cast(Value* obj); private: static MaybeLocal Deserialize( - Isolate* isolate, const CallerOwnedBuffer& serialized_module, - const CallerOwnedBuffer& wire_bytes); + Isolate* isolate, BufferReference serialized_module, + BufferReference wire_bytes); static MaybeLocal Compile(Isolate* isolate, const uint8_t* start, size_t length); - static CallerOwnedBuffer AsCallerOwned( + static BufferReference AsReference( const TransferrableModule::OwnedBuffer& buff) { return {buff.first.get(), buff.second}; } @@ -4287,6 +4452,15 @@ class V8_EXPORT WasmCompiledModule : public Object { static void CheckCast(Value* obj); }; +// TODO(clemensh): Remove after M69 branch. +WasmCompiledModule::BufferReference::BufferReference( + WasmCompiledModule::CallerOwnedBuffer buf) + : BufferReference(buf.first, buf.second) {} +WasmCompiledModule::BufferReference:: +operator WasmCompiledModule::CallerOwnedBuffer() { + return {start, size}; +} + // TODO(mtrofin): when streaming compilation is done, we can rename this // to simply WasmModuleObjectBuilder class V8_EXPORT WasmModuleObjectBuilderStreaming final { @@ -4308,8 +4482,6 @@ class V8_EXPORT WasmModuleObjectBuilderStreaming final { ~WasmModuleObjectBuilderStreaming(); private: - typedef std::pair, size_t> Buffer; - WasmModuleObjectBuilderStreaming(const WasmModuleObjectBuilderStreaming&) = delete; WasmModuleObjectBuilderStreaming(WasmModuleObjectBuilderStreaming&&) = @@ -4332,8 +4504,6 @@ class V8_EXPORT WasmModuleObjectBuilderStreaming final { #else Persistent promise_; #endif - std::vector received_buffers_; - size_t total_size_ = 0; std::shared_ptr streaming_decoder_; }; @@ -4584,8 +4754,7 @@ class V8_EXPORT TypedArray : public ArrayBufferView { /* * The largest typed array size that can be constructed using New. */ - static constexpr size_t kMaxLength = - sizeof(void*) == 4 ? (1u << 30) - 1 : (1u << 31) - 1; + static constexpr size_t kMaxLength = internal::kSmiMaxValue; /** * Number of elements in this typed array @@ -5170,22 +5339,25 @@ class V8_EXPORT Template : public Data { // TODO(dcarney): gcc can't handle Local below Local data = Local(), PropertyAttribute attribute = None, Local signature = Local(), - AccessControl settings = DEFAULT); + AccessControl settings = DEFAULT, + SideEffectType getter_side_effect_type = SideEffectType::kHasSideEffect); void SetNativeDataProperty( Local name, AccessorNameGetterCallback getter, AccessorNameSetterCallback setter = 0, // TODO(dcarney): gcc can't handle Local below Local data = Local(), PropertyAttribute attribute = None, Local signature = Local(), - AccessControl settings = DEFAULT); + AccessControl settings = DEFAULT, + SideEffectType getter_side_effect_type = SideEffectType::kHasSideEffect); /** * Like SetNativeDataProperty, but V8 will replace the native data property * with a real data property on first access. */ - void SetLazyDataProperty(Local name, AccessorNameGetterCallback getter, - Local data = Local(), - PropertyAttribute attribute = None); + void SetLazyDataProperty( + Local name, AccessorNameGetterCallback getter, + Local data = Local(), PropertyAttribute attribute = None, + SideEffectType getter_side_effect_type = SideEffectType::kHasSideEffect); /** * During template instantiation, sets the value with the intrinsic property @@ -5909,12 +6081,14 @@ class V8_EXPORT ObjectTemplate : public Template { Local name, AccessorGetterCallback getter, AccessorSetterCallback setter = 0, Local data = Local(), AccessControl settings = DEFAULT, PropertyAttribute attribute = None, - Local signature = Local()); + Local signature = Local(), + SideEffectType getter_side_effect_type = SideEffectType::kHasSideEffect); void SetAccessor( Local name, AccessorNameGetterCallback getter, AccessorNameSetterCallback setter = 0, Local data = Local(), AccessControl settings = DEFAULT, PropertyAttribute attribute = None, - Local signature = Local()); + Local signature = Local(), + SideEffectType getter_side_effect_type = SideEffectType::kHasSideEffect); /** * Sets a named property handler on the object template. @@ -6120,7 +6294,8 @@ class V8_EXPORT AccessorSignature : public Data { // --- Extensions --- - +V8_DEPRECATE_SOON("Implementation detail", + class ExternalOneByteStringResourceImpl); class V8_EXPORT ExternalOneByteStringResourceImpl : public String::ExternalOneByteStringResource { public: @@ -6147,7 +6322,7 @@ class V8_EXPORT Extension { // NOLINT int dep_count = 0, const char** deps = 0, int source_length = -1); - virtual ~Extension() { } + virtual ~Extension() { delete source_; } virtual Local GetNativeFunctionTemplate( Isolate* isolate, Local name) { return Local(); @@ -6156,7 +6331,8 @@ class V8_EXPORT Extension { // NOLINT const char* name() const { return name_; } size_t source_length() const { return source_length_; } const String::ExternalOneByteStringResource* source() const { - return &source_; } + return source_; + } int dependency_count() { return dep_count_; } const char** dependencies() { return deps_; } void set_auto_enable(bool value) { auto_enable_ = value; } @@ -6169,7 +6345,7 @@ class V8_EXPORT Extension { // NOLINT private: const char* name_; size_t source_length_; // expected to initialize before source_ - ExternalOneByteStringResourceImpl source_; + String::ExternalOneByteStringResource* source_; int dep_count_; const char** deps_; bool auto_enable_; @@ -6394,7 +6570,9 @@ typedef void (*PromiseHook)(PromiseHookType type, Local promise, // --- Promise Reject Callback --- enum PromiseRejectEvent { kPromiseRejectWithNoHandler = 0, - kPromiseHandlerAddedAfterReject = 1 + kPromiseHandlerAddedAfterReject = 1, + kPromiseRejectAfterResolved = 2, + kPromiseResolveAfterResolved = 3, }; class PromiseRejectMessage { @@ -6641,10 +6819,12 @@ class V8_EXPORT HeapCodeStatistics { HeapCodeStatistics(); size_t code_and_metadata_size() { return code_and_metadata_size_; } size_t bytecode_and_metadata_size() { return bytecode_and_metadata_size_; } + size_t external_script_source_size() { return external_script_source_size_; } private: size_t code_and_metadata_size_; size_t bytecode_and_metadata_size_; + size_t external_script_source_size_; friend class Isolate; }; @@ -6858,6 +7038,12 @@ class V8_EXPORT EmbedderHeapTracer { virtual bool AdvanceTracing(double deadline_in_ms, AdvanceTracingActions actions) = 0; + /* + * Returns true if there no more tracing work to be done (see AdvanceTracing) + * and false otherwise. + */ + virtual bool IsTracingDone() { return NumberOfWrappersToTrace() == 0; } + /** * Called at the end of a GC cycle. * @@ -6882,7 +7068,8 @@ class V8_EXPORT EmbedderHeapTracer { /** * Returns the number of wrappers that are still to be traced by the embedder. */ - virtual size_t NumberOfWrappersToTrace() { return 0; } + V8_DEPRECATE_SOON("Use IsTracingDone", + virtual size_t NumberOfWrappersToTrace() { return 0; }); protected: virtual ~EmbedderHeapTracer() = default; @@ -6944,7 +7131,8 @@ class V8_EXPORT Isolate { add_histogram_sample_callback(nullptr), array_buffer_allocator(nullptr), external_references(nullptr), - allow_atomics_wait(true) {} + allow_atomics_wait(true), + only_terminate_in_safe_scope(false) {} /** * The optional entry_hook allows the host application to provide the @@ -7007,6 +7195,11 @@ class V8_EXPORT Isolate { * this isolate. This can also be configured via SetAllowAtomicsWait. */ bool allow_atomics_wait; + + /** + * Termination is postponed when there is no active SafeForTerminationScope. + */ + bool only_terminate_in_safe_scope; }; @@ -7091,6 +7284,24 @@ class V8_EXPORT Isolate { internal::Isolate* const isolate_; }; + /** + * This scope allows terminations inside direct V8 API calls and forbid them + * inside any recursice API calls without explicit SafeForTerminationScope. + */ + class V8_EXPORT SafeForTerminationScope { + public: + explicit SafeForTerminationScope(v8::Isolate* isolate); + ~SafeForTerminationScope(); + + // Prevent copying of Scope objects. + SafeForTerminationScope(const SafeForTerminationScope&) = delete; + SafeForTerminationScope& operator=(const SafeForTerminationScope&) = delete; + + private: + internal::Isolate* isolate_; + bool prev_value_; + }; + /** * Types of garbage collections that can be requested via * RequestGarbageCollectionForTesting. @@ -7154,6 +7365,8 @@ class V8_EXPORT Isolate { kErrorStackTraceLimit = 45, kWebAssemblyInstantiation = 46, kDeoptimizerDisableSpeculation = 47, + kArrayPrototypeSortJSArrayModifiedPrototype = 48, + kFunctionTokenOffsetTooLongForToString = 49, // If you add new values here, you'll also need to update Chromium's: // web_feature.mojom, UseCounterCallback.cpp, and enums.xml. V8 changes to @@ -7174,6 +7387,26 @@ class V8_EXPORT Isolate { typedef void (*UseCounterCallback)(Isolate* isolate, UseCounterFeature feature); + /** + * Allocates a new isolate but does not initialize it. Does not change the + * currently entered isolate. + * + * Only Isolate::GetData() and Isolate::SetData(), which access the + * embedder-controlled parts of the isolate, are allowed to be called on the + * uninitialized isolate. To initialize the isolate, call + * Isolate::Initialize(). + * + * When an isolate is no longer used its resources should be freed + * by calling Dispose(). Using the delete operator is not allowed. + * + * V8::Initialize() must have run prior to this. + */ + static Isolate* Allocate(); + + /** + * Initialize an Isolate previously allocated by Isolate::Allocate(). + */ + static void Initialize(Isolate* isolate, const CreateParams& params); /** * Creates a new isolate. Does not change the currently entered @@ -7389,15 +7622,7 @@ class V8_EXPORT Isolate { HeapProfiler* GetHeapProfiler(); /** - * Returns CPU profiler for this isolate. Will return NULL unless the isolate - * is initialized. It is the embedder's responsibility to stop all CPU - * profiling activities if it has started any. - */ - V8_DEPRECATED("CpuProfiler should be created with CpuProfiler::New call.", - CpuProfiler* GetCpuProfiler()); - - /** - * Tells the CPU profiler whether the embedder is idle. + * Tells the VM whether the embedder is idle or not. */ void SetIdle(bool is_idle); @@ -7476,6 +7701,85 @@ class V8_EXPORT Isolate { */ void SetEmbedderHeapTracer(EmbedderHeapTracer* tracer); + /** + * Use for |AtomicsWaitCallback| to indicate the type of event it receives. + */ + enum class AtomicsWaitEvent { + /** Indicates that this call is happening before waiting. */ + kStartWait, + /** `Atomics.wait()` finished because of an `Atomics.wake()` call. */ + kWokenUp, + /** `Atomics.wait()` finished because it timed out. */ + kTimedOut, + /** `Atomics.wait()` was interrupted through |TerminateExecution()|. */ + kTerminatedExecution, + /** `Atomics.wait()` was stopped through |AtomicsWaitWakeHandle|. */ + kAPIStopped, + /** `Atomics.wait()` did not wait, as the initial condition was not met. */ + kNotEqual + }; + + /** + * Passed to |AtomicsWaitCallback| as a means of stopping an ongoing + * `Atomics.wait` call. + */ + class V8_EXPORT AtomicsWaitWakeHandle { + public: + /** + * Stop this `Atomics.wait()` call and call the |AtomicsWaitCallback| + * with |kAPIStopped|. + * + * This function may be called from another thread. The caller has to ensure + * through proper synchronization that it is not called after + * the finishing |AtomicsWaitCallback|. + * + * Note that the ECMAScript specification does not plan for the possibility + * of wakeups that are neither coming from a timeout or an `Atomics.wake()` + * call, so this may invalidate assumptions made by existing code. + * The embedder may accordingly wish to schedule an exception in the + * finishing |AtomicsWaitCallback|. + */ + void Wake(); + }; + + /** + * Embedder callback for `Atomics.wait()` that can be added through + * |SetAtomicsWaitCallback|. + * + * This will be called just before starting to wait with the |event| value + * |kStartWait| and after finishing waiting with one of the other + * values of |AtomicsWaitEvent| inside of an `Atomics.wait()` call. + * + * |array_buffer| will refer to the underlying SharedArrayBuffer, + * |offset_in_bytes| to the location of the waited-on memory address inside + * the SharedArrayBuffer. + * + * |value| and |timeout_in_ms| will be the values passed to + * the `Atomics.wait()` call. If no timeout was used, |timeout_in_ms| + * will be `INFINITY`. + * + * In the |kStartWait| callback, |stop_handle| will be an object that + * is only valid until the corresponding finishing callback and that + * can be used to stop the wait process while it is happening. + * + * This callback may schedule exceptions, *unless* |event| is equal to + * |kTerminatedExecution|. + */ + typedef void (*AtomicsWaitCallback)(AtomicsWaitEvent event, + Local array_buffer, + size_t offset_in_bytes, int32_t value, + double timeout_in_ms, + AtomicsWaitWakeHandle* stop_handle, + void* data); + + /** + * Set a new |AtomicsWaitCallback|. This overrides an earlier + * |AtomicsWaitCallback|, if there was any. If |callback| is nullptr, + * this unsets the callback. |data| will be passed to the callback + * as its last parameter. + */ + void SetAtomicsWaitCallback(AtomicsWaitCallback callback, void* data); + /** * Enables the host application to receive a notification after a * garbage collection. Allocations are allowed in the callback function, @@ -7729,6 +8033,18 @@ class V8_EXPORT Isolate { */ void IsolateInBackgroundNotification(); + /** + * Optional notification which will enable the memory savings mode. + * V8 uses this notification to guide heuristics which may result in a + * smaller memory footprint at the cost of reduced runtime performance. + */ + void EnableMemorySavingsMode(); + + /** + * Optional notification which will disable the memory savings mode. + */ + void DisableMemorySavingsMode(); + /** * Optional notification to tell V8 the current performance requirements * of the embedder based on RAIL. @@ -8022,7 +8338,9 @@ class V8_EXPORT V8 { * Returns { NULL, 0 } on failure. * The caller acquires ownership of the data array in the return value. */ - static StartupData CreateSnapshotDataBlob(const char* embedded_source = NULL); + V8_DEPRECATED("Use SnapshotCreator", + static StartupData CreateSnapshotDataBlob( + const char* embedded_source = NULL)); /** * Bootstrap an isolate and a context from the cold startup blob, run the @@ -8032,8 +8350,9 @@ class V8_EXPORT V8 { * The caller acquires ownership of the data array in the return value. * The argument startup blob is untouched. */ - static StartupData WarmUpSnapshotDataBlob(StartupData cold_startup_blob, - const char* warmup_source); + V8_DEPRECATED("Use SnapshotCreator", + static StartupData WarmUpSnapshotDataBlob( + StartupData cold_startup_blob, const char* warmup_source)); /** Set the callback to invoke in case of Dcheck failures. */ static void SetDcheckErrorHandler(DcheckErrorCallback that); @@ -8228,6 +8547,18 @@ class V8_EXPORT SnapshotCreator { public: enum class FunctionCodeHandling { kClear, kKeep }; + /** + * Initialize and enter an isolate, and set it up for serialization. + * The isolate is either created from scratch or from an existing snapshot. + * The caller keeps ownership of the argument snapshot. + * \param existing_blob existing snapshot from which to create this one. + * \param external_references a null-terminated array of external references + * that must be equivalent to CreateParams::external_references. + */ + SnapshotCreator(Isolate* isolate, + const intptr_t* external_references = nullptr, + StartupData* existing_blob = nullptr); + /** * Create and enter an isolate, and set it up for serialization. * The isolate is either created from scratch or from an existing snapshot. @@ -8988,85 +9319,6 @@ class V8_EXPORT Locker { namespace internal { -const int kApiPointerSize = sizeof(void*); // NOLINT -const int kApiIntSize = sizeof(int); // NOLINT -const int kApiInt64Size = sizeof(int64_t); // NOLINT - -// Tag information for HeapObject. -const int kHeapObjectTag = 1; -const int kWeakHeapObjectTag = 3; -const int kHeapObjectTagSize = 2; -const intptr_t kHeapObjectTagMask = (1 << kHeapObjectTagSize) - 1; - -// Tag information for Smi. -const int kSmiTag = 0; -const int kSmiTagSize = 1; -const intptr_t kSmiTagMask = (1 << kSmiTagSize) - 1; - -template struct SmiTagging; - -template -V8_INLINE internal::Object* IntToSmi(int value) { - int smi_shift_bits = kSmiTagSize + kSmiShiftSize; - uintptr_t tagged_value = - (static_cast(value) << smi_shift_bits) | kSmiTag; - return reinterpret_cast(tagged_value); -} - -// Smi constants for 32-bit systems. -template <> struct SmiTagging<4> { - enum { kSmiShiftSize = 0, kSmiValueSize = 31 }; - static int SmiShiftSize() { return kSmiShiftSize; } - static int SmiValueSize() { return kSmiValueSize; } - V8_INLINE static int SmiToInt(const internal::Object* value) { - int shift_bits = kSmiTagSize + kSmiShiftSize; - // Throw away top 32 bits and shift down (requires >> to be sign extending). - return static_cast(reinterpret_cast(value)) >> shift_bits; - } - V8_INLINE static internal::Object* IntToSmi(int value) { - return internal::IntToSmi(value); - } - V8_INLINE static bool IsValidSmi(intptr_t value) { - // To be representable as an tagged small integer, the two - // most-significant bits of 'value' must be either 00 or 11 due to - // sign-extension. To check this we add 01 to the two - // most-significant bits, and check if the most-significant bit is 0 - // - // CAUTION: The original code below: - // bool result = ((value + 0x40000000) & 0x80000000) == 0; - // may lead to incorrect results according to the C language spec, and - // in fact doesn't work correctly with gcc4.1.1 in some cases: The - // compiler may produce undefined results in case of signed integer - // overflow. The computation must be done w/ unsigned ints. - return static_cast(value + 0x40000000U) < 0x80000000U; - } -}; - -// Smi constants for 64-bit systems. -template <> struct SmiTagging<8> { - enum { kSmiShiftSize = 31, kSmiValueSize = 32 }; - static int SmiShiftSize() { return kSmiShiftSize; } - static int SmiValueSize() { return kSmiValueSize; } - V8_INLINE static int SmiToInt(const internal::Object* value) { - int shift_bits = kSmiTagSize + kSmiShiftSize; - // Shift down and throw away top 32 bits. - return static_cast(reinterpret_cast(value) >> shift_bits); - } - V8_INLINE static internal::Object* IntToSmi(int value) { - return internal::IntToSmi(value); - } - V8_INLINE static bool IsValidSmi(intptr_t value) { - // To be representable as a long smi, the value must be a 32-bit integer. - return (value == static_cast(value)); - } -}; - -typedef SmiTagging PlatformSmiTagging; -const int kSmiShiftSize = PlatformSmiTagging::kSmiShiftSize; -const int kSmiValueSize = PlatformSmiTagging::kSmiValueSize; -V8_INLINE static bool SmiValuesAre31Bits() { return kSmiValueSize == 31; } -V8_INLINE static bool SmiValuesAre32Bits() { return kSmiValueSize == 32; } - /** * This class exports constants and functionality from within v8 that * is necessary to implement inline functions in the v8 api. Don't @@ -9080,7 +9332,7 @@ class Internals { static const int kMapInstanceTypeOffset = 1 * kApiPointerSize + kApiIntSize; static const int kStringResourceOffset = 3 * kApiPointerSize; - static const int kOddballKindOffset = 4 * kApiPointerSize + sizeof(double); + static const int kOddballKindOffset = 4 * kApiPointerSize + kApiDoubleSize; static const int kForeignAddressOffset = kApiPointerSize; static const int kJSObjectHeaderSize = 3 * kApiPointerSize; static const int kFixedArrayHeaderSize = 2 * kApiPointerSize; diff --git a/deps/v8/infra/config/cq.cfg b/deps/v8/infra/config/cq.cfg index 6159b3f1cdeca4..85fb595ae7e6c4 100644 --- a/deps/v8/infra/config/cq.cfg +++ b/deps/v8/infra/config/cq.cfg @@ -30,6 +30,11 @@ verifiers { name: "v8_linux64_asan_rel_ng_triggered" triggered_by: "v8_linux64_asan_rel_ng" } + builders { name: "v8_linux64_dbg_ng" } + builders { + name: "v8_linux64_dbg_ng_triggered" + triggered_by: "v8_linux64_dbg_ng" + } builders { name: "v8_linux64_gcc_compile_dbg" } builders { name: "v8_linux64_jumbo_compile_rel" } builders { name: "v8_linux64_rel_ng" } @@ -61,11 +66,6 @@ verifiers { experiment_percentage: 100 } builders { name: "v8_linux_chromium_gn_rel" } - builders { name: "v8_linux_dbg_ng" } - builders { - name: "v8_linux_dbg_ng_triggered" - triggered_by: "v8_linux_dbg_ng" - } builders { name: "v8_linux_gcc_compile_rel" } builders { name: "v8_linux_mips64el_compile_rel" } builders { name: "v8_linux_mipsel_compile_rel" } @@ -111,7 +111,5 @@ verifiers { } } } - - sign_cla {} } diff --git a/deps/v8/infra/mb/mb_config.pyl b/deps/v8/infra/mb/mb_config.pyl index 70a7ad5754e0cb..52d4fe90abe582 100644 --- a/deps/v8/infra/mb/mb_config.pyl +++ b/deps/v8/infra/mb/mb_config.pyl @@ -43,12 +43,6 @@ 'x64.optdebug': 'default_optdebug_x64', 'x64.release': 'default_release_x64', }, - - 'client.dart.fyi': { - 'v8-linux-release': 'release_x86_disassembler', - 'v8-win-release': 'release_x86_disassembler', - 'v8-mac-release': 'release_x86_disassembler', - }, 'client.dynamorio': { 'linux-v8-dr': 'release_x64', }, @@ -101,6 +95,7 @@ 'V8 Fuchsia': 'release_x64_fuchsia', 'V8 Fuchsia - debug': 'debug_x64_fuchsia', 'V8 Linux64 - cfi': 'release_x64_cfi', + 'V8 Linux64 UBSan': 'release_x64_ubsan', 'V8 Linux64 UBSanVptr': 'release_x64_ubsan_vptr', 'V8 Linux - vtunejit': 'debug_x86_vtunejit', 'V8 Linux64 - gcov coverage': 'release_x64_gcc_coverage', @@ -110,37 +105,39 @@ 'V8 Random Deopt Fuzzer - debug': 'debug_x64', }, 'client.v8.clusterfuzz': { - 'V8 Win64 ASAN - release builder': + 'V8 Clusterfuzz Win64 ASAN - release builder': 'release_x64_asan_no_lsan_verify_heap', # Note this is called a debug builder, but it uses a release build # configuration with dchecks (which enables DEBUG in V8), since win-asan # debug is not supported. - 'V8 Win64 ASAN - debug builder': + 'V8 Clusterfuzz Win64 ASAN - debug builder': 'release_x64_asan_no_lsan_verify_heap_dchecks', - 'V8 Mac64 ASAN - release builder': + 'V8 Clusterfuzz Mac64 ASAN - release builder': 'release_x64_asan_no_lsan_edge_verify_heap', - 'V8 Mac64 ASAN - debug builder': + 'V8 Clusterfuzz Mac64 ASAN - debug builder': 'debug_x64_asan_no_lsan_static_edge', - 'V8 Linux64 - release builder': 'release_x64_correctness_fuzzer', - 'V8 Linux64 - debug builder': 'debug_x64', - 'V8 Linux64 - nosnap release builder': 'release_x64_no_snap', - 'V8 Linux64 - nosnap debug builder': 'debug_x64_no_snap', - 'V8 Linux64 ASAN no inline - release builder': + 'V8 Clusterfuzz Linux64 - release builder': + 'release_x64_correctness_fuzzer', + 'V8 Clusterfuzz Linux64 - debug builder': 'debug_x64', + 'V8 Clusterfuzz Linux64 - nosnap release builder': 'release_x64_no_snap', + 'V8 Clusterfuzz Linux64 - nosnap debug builder': 'debug_x64_no_snap', + 'V8 Clusterfuzz Linux64 ASAN no inline - release builder': 'release_x64_asan_symbolized_edge_verify_heap', - 'V8 Linux64 ASAN - debug builder': 'debug_x64_asan_edge', - 'V8 Linux64 ASAN arm64 - debug builder': + 'V8 Clusterfuzz Linux64 ASAN - debug builder': 'debug_x64_asan_edge', + 'V8 Clusterfuzz Linux64 ASAN arm64 - debug builder': 'debug_simulate_arm64_asan_edge', - 'V8 Linux ASAN arm - debug builder': + 'V8 Clusterfuzz Linux ASAN arm - debug builder': 'debug_simulate_arm_asan_edge', - 'V8 Linux ASAN mipsel - debug builder': + 'V8 Clusterfuzz Linux ASAN mipsel - debug builder': 'debug_simulate_mipsel_asan_edge', - 'V8 Linux64 CFI - release builder': 'release_x64_cfi_clusterfuzz', - 'V8 Linux MSAN no origins': + 'V8 Clusterfuzz Linux64 CFI - release builder': + 'release_x64_cfi_clusterfuzz', + 'V8 Clusterfuzz Linux MSAN no origins': 'release_simulate_arm64_msan_no_origins_edge', - 'V8 Linux MSAN chained origins': + 'V8 Clusterfuzz Linux MSAN chained origins': 'release_simulate_arm64_msan_edge', - 'V8 Linux64 TSAN - release builder': 'release_x64_tsan', - 'V8 Linux64 UBSanVptr - release builder': + 'V8 Clusterfuzz Linux64 TSAN - release builder': 'release_x64_tsan', + 'V8 Clusterfuzz Linux64 UBSanVptr - release builder': 'release_x64_ubsan_vptr_recover_edge', }, 'client.v8.ports': { @@ -207,6 +204,7 @@ 'v8_linux_gcc_compile_rel': 'release_x86_gcc_minimal_symbols', 'v8_linux_gcc_rel': 'release_x86_gcc_minimal_symbols', 'v8_linux_shared_compile_rel': 'release_x86_shared_verify_heap', + 'v8_linux64_dbg_ng': 'debug_x64_trybot', 'v8_linux64_gcc_compile_dbg': 'debug_x64_gcc', 'v8_linux64_fyi_rel_ng': 'release_x64_test_features_trybot', 'v8_linux64_rel_ng': 'release_x64_test_features_trybot', @@ -238,6 +236,7 @@ 'v8_mac64_dbg': 'debug_x64', 'v8_mac64_dbg_ng': 'debug_x64', 'v8_mac64_asan_rel': 'release_x64_asan_no_lsan', + 'v8_mips_compile_rel': 'release_mips_no_snap_no_i18n', 'v8_linux_arm_rel_ng': 'release_simulate_arm_trybot', 'v8_linux_arm_dbg': 'debug_simulate_arm', 'v8_linux_arm_armv8a_rel': 'release_simulate_arm_trybot', @@ -417,10 +416,9 @@ 'release_x64_fuchsia_trybot': [ 'release_trybot', 'x64', 'fuchsia'], 'release_x64_gcc_coverage': [ - 'release_bot', 'x64', 'coverage', 'gcc'], + 'release_bot', 'x64', 'coverage', 'gcc', 'no_custom_libcxx', 'no_sysroot'], 'release_x64_internal': [ - 'release_bot', 'x64', 'v8_enable_embedded_builtins', - 'v8_snapshot_internal'], + 'release_bot', 'x64', 'v8_snapshot_internal'], 'release_x64_jumbo': [ 'release_bot', 'x64', 'jumbo'], 'release_x64_jumbo_trybot': [ @@ -446,6 +444,8 @@ 'minimal_symbols'], 'release_x64_tsan_minimal_symbols': [ 'release_bot', 'x64', 'tsan', 'minimal_symbols'], + 'release_x64_ubsan': [ + 'release_bot', 'x64', 'ubsan'], 'release_x64_ubsan_vptr': [ 'release_bot', 'x64', 'ubsan_vptr'], 'release_x64_ubsan_vptr_recover_edge': [ @@ -454,7 +454,7 @@ 'release_bot', 'x64', 'ubsan_vptr', 'minimal_symbols'], 'release_x64_verify_csa': [ 'release_bot', 'x64', 'dcheck_always_on', - 'v8_enable_slow_dchecks', 'v8_enable_embedded_builtins', 'v8_verify_csa'], + 'v8_enable_slow_dchecks', 'v8_verify_csa'], # Debug configs for x64. 'debug_x64': [ @@ -503,8 +503,6 @@ # Release configs for x86. 'release_x86': [ 'release_bot', 'x86'], - 'release_x86_disassembler': [ - 'release_bot', 'x86', 'v8_enable_disassembler'], 'release_x86_gcc': [ 'release_bot', 'x86', 'gcc'], 'release_x86_gcc_minimal_symbols': [ @@ -566,14 +564,14 @@ 'cfi': { 'mixins': ['v8_enable_test_features'], - 'gn_args': ('is_cfi=true use_cfi_cast=true use_cfi_diag=true ' - 'use_cfi_recover=false'), + 'gn_args': ('is_cfi=true use_cfi_cast=true use_cfi_icall=true ' + 'use_cfi_diag=true use_cfi_recover=false'), }, 'cfi_clusterfuzz': { 'mixins': ['v8_enable_test_features'], - 'gn_args': ('is_cfi=true use_cfi_cast=true use_cfi_diag=true ' - 'use_cfi_recover=true'), + 'gn_args': ('is_cfi=true use_cfi_cast=true use_cfi_icall=true ' + 'use_cfi_diag=true use_cfi_recover=true'), }, 'clang': { @@ -592,10 +590,14 @@ 'gn_args': 'is_debug=true v8_enable_backtrace=true', }, + 'v8_use_multi_snapshots': { + 'gn_args': 'v8_use_multi_snapshots=true', + }, + 'debug_bot': { 'mixins': [ 'debug', 'shared', 'goma', 'v8_enable_slow_dchecks', - 'v8_optimized_debug'], + 'v8_use_multi_snapshots', 'v8_optimized_debug'], }, 'debug_trybot': { @@ -669,6 +671,10 @@ 'gn_args': 'is_clang=false', }, + 'no_custom_libcxx': { + 'gn_args': 'use_custom_libcxx=false', + }, + 'no_sysroot': { 'gn_args': 'use_sysroot=false', }, @@ -678,7 +684,7 @@ }, 'release_bot': { - 'mixins': ['release', 'static', 'goma'], + 'mixins': ['release', 'static', 'goma', 'v8_use_multi_snapshots'], }, 'release_trybot': { @@ -736,6 +742,14 @@ 'gn_args': 'is_tsan=true', }, + 'ubsan': { + 'mixins': ['v8_enable_test_features'], + # TODO(krasin): Remove is_ubsan_no_recover=true when + # https://llvm.org/bugs/show_bug.cgi?id=25569 is fixed and just use + # ubsan instead. + 'gn_args': 'is_ubsan=true is_ubsan_no_recover=true', + }, + 'ubsan_vptr': { 'mixins': ['v8_enable_test_features'], # TODO(krasin): Remove is_ubsan_no_recover=true when @@ -763,14 +777,6 @@ 'gn_args': 'v8_correctness_fuzzer=true v8_multi_arch_build=true', }, - 'v8_enable_disassembler': { - 'gn_args': 'v8_enable_disassembler=true', - }, - - 'v8_enable_embedded_builtins': { - 'gn_args': 'v8_enable_embedded_builtins=true', - }, - 'v8_enable_slow_dchecks': { 'gn_args': 'v8_enable_slow_dchecks=true', }, diff --git a/deps/v8/infra/testing/PRESUBMIT.py b/deps/v8/infra/testing/PRESUBMIT.py new file mode 100644 index 00000000000000..9f242a929943af --- /dev/null +++ b/deps/v8/infra/testing/PRESUBMIT.py @@ -0,0 +1,183 @@ +# Copyright 2018 the V8 project authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +""" +Presubmit checks for the validity of V8-side test specifications in pyl files. + +For simplicity, we check all pyl files on any changes in this folder. +""" + +import ast +import os + + +SUPPORTED_BUILDER_SPEC_KEYS = [ + 'swarming_dimensions', + 'swarming_task_attrs', + 'tests', +] + +# This is not an exhaustive list. It only reflects what we currently use. If +# there's need to specify a different dimension, just add it here. +SUPPORTED_SWARMING_DIMENSIONS = [ + 'cores', + 'cpu', + 'os', +] + +# This is not an exhaustive list. It only reflects what we currently use. If +# there's need to specify a different property, just add it here. +SUPPORTED_SWARMING_TASK_ATTRS = [ + 'expiration', + 'hard_timeout', + 'priority', +] + +SUPPORTED_TEST_KEYS = [ + 'name', + 'shards', + 'suffix', + 'swarming_dimensions', + 'swarming_task_attrs', + 'test_args', + 'variant', +] + +def check_keys(error_msg, src_dict, supported_keys): + errors = [] + for key in src_dict.keys(): + if key not in supported_keys: + errors += error_msg('Key "%s" must be one of %s' % (key, supported_keys)) + return errors + + +def _check_properties(error_msg, src_dict, prop_name, supported_keys): + properties = src_dict.get(prop_name, {}) + if not isinstance(properties, dict): + return error_msg('Value for %s must be a dict' % prop_name) + return check_keys(error_msg, properties, supported_keys) + + +def _check_int_range(error_msg, src_dict, prop_name, lower_bound=None, + upper_bound=None): + if prop_name not in src_dict: + # All properties are optional. + return [] + try: + value = int(src_dict[prop_name]) + except ValueError: + return error_msg('If specified, %s must be an int' % prop_name) + if lower_bound is not None and value < lower_bound: + return error_msg('If specified, %s must be >=%d' % (prop_name, lower_bound)) + if upper_bound is not None and value > upper_bound: + return error_msg('If specified, %s must be <=%d' % (prop_name, upper_bound)) + return [] + + +def _check_swarming_task_attrs(error_msg, src_dict): + errors = [] + task_attrs = src_dict.get('swarming_task_attrs', {}) + errors += _check_int_range( + error_msg, task_attrs, 'priority', lower_bound=25, upper_bound=100) + errors += _check_int_range( + error_msg, task_attrs, 'expiration', lower_bound=1) + errors += _check_int_range( + error_msg, task_attrs, 'hard_timeout', lower_bound=1) + return errors + + +def _check_swarming_config(error_msg, src_dict): + errors = [] + errors += _check_properties( + error_msg, src_dict, 'swarming_dimensions', + SUPPORTED_SWARMING_DIMENSIONS) + errors += _check_properties( + error_msg, src_dict, 'swarming_task_attrs', + SUPPORTED_SWARMING_TASK_ATTRS) + errors += _check_swarming_task_attrs(error_msg, src_dict) + return errors + + +def _check_test(error_msg, test): + if not isinstance(test, dict): + return error_msg('Each test must be specified with a dict') + errors = check_keys(error_msg, test, SUPPORTED_TEST_KEYS) + if not test.get('name'): + errors += error_msg('A test requires a name') + errors += _check_swarming_config(error_msg, test) + + test_args = test.get('test_args', []) + if not isinstance(test_args, list): + errors += error_msg('If specified, test_args must be a list of arguments') + if not all(isinstance(x, basestring) for x in test_args): + errors += error_msg('If specified, all test_args must be strings') + + # Limit shards to 10 to avoid erroneous resource exhaustion. + errors += _check_int_range( + error_msg, test, 'shards', lower_bound=1, upper_bound=10) + + variant = test.get('variant', 'default') + if not variant or not isinstance(variant, basestring): + errors += error_msg('If specified, variant must be a non-empty string') + + return errors + + +def _check_test_spec(file_path, raw_pyl): + def error_msg(msg): + return ['Error in %s:\n%s' % (file_path, msg)] + + try: + # Eval python literal file. + full_test_spec = ast.literal_eval(raw_pyl) + except SyntaxError as e: + return error_msg('Pyl parsing failed with:\n%s' % e) + + if not isinstance(full_test_spec, dict): + return error_msg('Test spec must be a dict') + + errors = [] + for buildername, builder_spec in full_test_spec.iteritems(): + def error_msg(msg): + return ['Error in %s for builder %s:\n%s' % (file_path, buildername, msg)] + + if not isinstance(buildername, basestring) or not buildername: + errors += error_msg('Buildername must be a non-empty string') + + if not isinstance(builder_spec, dict) or not builder_spec: + errors += error_msg('Value must be a non-empty dict') + continue + + errors += check_keys(error_msg, builder_spec, SUPPORTED_BUILDER_SPEC_KEYS) + errors += _check_swarming_config(error_msg, builder_spec) + + for test in builder_spec.get('tests', []): + errors += _check_test(error_msg, test) + + return errors + + + +def CheckChangeOnCommit(input_api, output_api): + def file_filter(regexp): + return lambda f: input_api.FilterSourceFile(f, white_list=(regexp,)) + + # Calculate which files are affected. + if input_api.AffectedFiles(False, file_filter(r'.*PRESUBMIT\.py')): + # If PRESUBMIT.py itself was changed, check also the test spec. + affected_files = [ + os.path.join(input_api.PresubmitLocalPath(), 'builders.pyl'), + ] + else: + # Otherwise, check test spec only when changed. + affected_files = [ + f.AbsoluteLocalPath() + for f in input_api.AffectedFiles(False, file_filter(r'.*builders\.pyl')) + ] + + errors = [] + for file_path in affected_files: + with open(file_path) as f: + errors += _check_test_spec(file_path, f.read()) + return [output_api.PresubmitError(r) for r in errors] diff --git a/deps/v8/infra/testing/README.md b/deps/v8/infra/testing/README.md index 8658768cac9102..438ba2e6d064c4 100644 --- a/deps/v8/infra/testing/README.md +++ b/deps/v8/infra/testing/README.md @@ -7,38 +7,65 @@ variants specified [here](https://chromium.googlesource.com/v8/v8/+/master/tools Changes to src-side test specifications go through CQ like any other CL and require tests added for specific trybots to pass. -The test specifications are defined in a V8-side folder called infra/testing. -Every master has an optional file named `.pyl`. E.g. -`tryserver.v8.pyl`. +The test specifications are defined in a V8-side python-literal file +`infra/testing/builders.pyl`. -The structure of each file is: +The structure of the file is: ``` { - : [ - { - 'name': , - 'variant': , - 'shards': , - }, - ... - ], + : { + 'tests': [ + { + 'name': , + 'suffix': , + 'variant': , + 'shards': , + 'test_args': , + 'swarming_task_attrs': {...}, + 'swarming_dimensions': {...}, + }, + ... + ], + 'swarming_task_attrs': {...}, + 'swarming_dimensions': {...}, + }, ... } ``` The `` is a string name of the builder to execute the tests. `` is a label defining a test specification matching the [infra-side](https://chromium.googlesource.com/chromium/tools/build/+/master/scripts/slave/recipe_modules/v8/testing.py#58). -The `` is a testing variant specified +The optional `suffix` will be appended to test-step names for disambiguation. +The optional `variant` is a testing variant specified [here](https://chromium.googlesource.com/v8/v8/+/master/tools/testrunner/local/variants.py). -`` is optional (default 1), but can be provided to increase -the swarming shards for long-running tests. +The optional `shards` (default 1) can be provided to increase the swarming +shards for long-running tests. +The optional `test_args` is a list of string flags that will be passed to the +V8 test driver. +The optional `swarming_task_attrs` is a dict allowing to override the defaults +for `priority`, `expiration` and `hard_timeout`. +The optional `swarming_dimensions` is a dict allowing to override the defaults +for `cpu`, `cores` and `os`. +Both `swarming_task_attrs` and `swarming_dimensions` can be defined per builder +and per test, whereas the latter takes precedence. Example: ``` { - 'v8_linux64_rel_ng_triggered': [ - {'name': 'v8testing', 'variant': 'nooptimization', 'shards': 2}, - ], + 'v8_linux64_rel_ng_triggered': { + 'tests': [ + { + 'name': 'v8testing', + 'suffix': 'stress', + 'variant': 'nooptimization', + 'shards': 2, + 'test_args': ['--gc-stress'], + 'swarming_dimensions': {'os': 'Ubuntu-14.4'}, + }, + ], + 'swarming_properties': {'priority': 35}, + 'swarming_dimensions': {'os': 'Ubuntu'}, + }, } ``` diff --git a/deps/v8/infra/testing/builders.pyl b/deps/v8/infra/testing/builders.pyl new file mode 100644 index 00000000000000..f8fad69cb1aeca --- /dev/null +++ b/deps/v8/infra/testing/builders.pyl @@ -0,0 +1,432 @@ +# Copyright 2018 The V8 project authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# +# Please keep builder names, builder configs and test definitions sorted. +# Builder names should be sorted alphabetically. Builder configs should have +# keys sorted in the alphabetical order except 'tests' key, which should always +# come last. Test definitions must have keys in the following order, but omit +# optional fields: +# * name (required) +# * variant +# * test_args +# * shards +# * suffix +# * swarming_dimensions +# * swarming_task_attrs +# +# Please also format test definitions as a single line with ', ' separating +# fields, e.g. +# +# {'name': 'v8testing', 'variant': 'extra', 'shards': 2} +# +# After formatting test definitions this way, please sort them alphabetically by +# test name. For all variants of the test with the same name, the +# least-qualified test (no variant, no test args) should come first. You may +# also deviate from the alphabetical order if necessary and group tests +# differently, but in this case please add a comment before each group and +# continue to sort tests using the rules above within each group. + +{ + ############################################################################## + ### luci.v8.try + ############################################################################## + # Linux32 + 'v8_linux_dbg_ng_triggered': { + 'swarming_dimensions' : { + 'cpu': 'x86-64-avx2', + }, + 'tests': [ + {'name': 'benchmarks'}, + {'name': 'benchmarks', 'variant': 'extra'}, + {'name': 'mjsunit_sp_frame_access'}, + {'name': 'mozilla'}, + {'name': 'mozilla', 'variant': 'extra'}, + {'name': 'test262'}, + {'name': 'test262_variants', 'variant': 'extra', 'shards': 3}, + {'name': 'v8testing', 'shards': 3}, + {'name': 'v8testing', 'variant': 'extra', 'shards': 2}, + ], + }, + 'v8_linux_gc_stress_dbg': { + 'tests': [ + {'name': 'mjsunit', 'variant': 'slow_path', 'test_args': ['--gc-stress'], 'shards': 2}, + {'name': 'd8testing', 'test_args': ['--gc-stress'], 'shards': 5}, + ], + }, + 'v8_linux_gcc_rel': { + 'tests': [ + {'name': 'v8testing'}, + ], + }, + 'v8_linux_nodcheck_rel_ng_triggered': { + 'swarming_dimensions' : { + 'cpu': 'x86-64-avx2', + }, + 'tests': [ + {'name': 'benchmarks'}, + {'name': 'benchmarks', 'variant': 'extra'}, + {'name': 'mozilla'}, + {'name': 'mozilla', 'variant': 'extra'}, + {'name': 'test262_variants', 'shards': 2}, + {'name': 'test262_variants', 'variant': 'extra', 'shards': 2}, + {'name': 'v8testing'}, + {'name': 'v8testing', 'variant': 'extra'}, + ], + }, + 'v8_linux_noi18n_rel_ng_triggered': { + 'tests': [ + {'name': 'mozilla', 'variant': 'default'}, + {'name': 'test262', 'variant': 'default'}, + {'name': 'v8testing', 'variant': 'default', 'shards': 2}, + ], + }, + 'v8_linux_nosnap_rel': { + 'tests': [ + {'name': 'v8testing', 'variant': 'default', 'shards': 4}, + ], + }, + 'v8_linux_nosnap_dbg': { + 'swarming_task_attrs': { + 'hard_timeout': 3600, + }, + 'tests': [ + {'name': 'v8testing', 'variant': 'default', 'shards': 9}, + ], + }, + 'v8_linux_rel_ng_triggered': { + 'swarming_dimensions' : { + 'cpu': 'x86-64-avx2', + }, + 'tests': [ + {'name': 'benchmarks'}, + {'name': 'benchmarks', 'variant': 'extra'}, + {'name': 'gcmole'}, + {'name': 'mjsunit_sp_frame_access'}, + {'name': 'mozilla'}, + {'name': 'mozilla', 'variant': 'extra'}, + {'name': 'optimize_for_size'}, + {'name': 'test262_variants', 'shards': 4}, + {'name': 'test262_variants', 'variant': 'extra', 'shards': 2}, + {'name': 'v8testing'}, + {'name': 'v8testing', 'variant': 'extra'}, + ], + }, + 'v8_linux_verify_csa_rel_ng_triggered': { + 'tests': [ + {'name': 'v8testing'}, + ], + }, + ############################################################################## + # Linux32 with arm simulators + 'v8_linux_arm_dbg': { + 'tests': [ + {'name': 'mjsunit_sp_frame_access'}, + {'name': 'mozilla'}, + {'name': 'test262'}, + {'name': 'v8testing', 'shards': 7}, + {'name': 'v8testing', 'variant': 'extra', 'shards': 3}, + ], + }, + 'v8_linux_arm_rel_ng_triggered': { + 'tests': [ + {'name': 'mjsunit_sp_frame_access'}, + {'name': 'mozilla'}, + {'name': 'test262'}, + {'name': 'v8testing', 'shards': 7}, + {'name': 'v8testing', 'variant': 'extra', 'shards': 3}, + ], + }, + ############################################################################## + # Linux64 + 'v8_linux64_asan_rel_ng_triggered': { + 'tests': [ + {'name': 'test262_variants', 'shards': 7}, + {'name': 'v8testing', 'shards': 3}, + {'name': 'v8testing', 'variant': 'extra', 'shards': 2}, + {'name': 'v8testing', 'variant': 'slow_path'}, + ], + }, + 'v8_linux64_cfi_rel_ng_triggered': { + 'tests': [ + {'name': 'benchmarks'}, + {'name': 'mozilla'}, + {'name': 'optimize_for_size'}, + {'name': 'test262'}, + {'name': 'v8testing', 'shards': 2}, + ], + }, + 'v8_linux64_dbg_ng_triggered': { + 'swarming_dimensions' : { + 'cpu': 'x86-64-avx2', + }, + 'tests': [ + {'name': 'benchmarks'}, + {'name': 'benchmarks', 'variant': 'extra'}, + {'name': 'mjsunit_sp_frame_access'}, + {'name': 'mozilla'}, + {'name': 'mozilla', 'variant': 'extra'}, + {'name': 'test262'}, + {'name': 'test262_variants', 'variant': 'extra', 'shards': 3}, + {'name': 'v8testing', 'shards': 3}, + {'name': 'v8testing', 'variant': 'extra', 'shards': 2}, + {'name': 'v8testing', 'variant': 'minor_mc', 'shards': 1}, + ], + }, + 'v8_linux64_fyi_rel_ng_triggered': { + 'tests': [ + # Stress sampling. + {'name': 'mjsunit', 'variant': 'stress_sampling'}, + {'name': 'webkit', 'variant': 'stress_sampling'}, + # Infra staging. + {'name': 'test262_variants', 'variant': 'infra_staging', 'shards': 2}, + {'name': 'v8testing', 'variant': 'infra_staging', 'shards': 2}, + ], + }, + 'v8_linux64_msan_rel': { + 'tests': [ + {'name': 'test262', 'shards': 2}, + {'name': 'v8testing', 'shards': 5}, + ], + }, + 'v8_linux64_rel_ng_triggered': { + 'swarming_dimensions' : { + 'cpu': 'x86-64-avx2', + }, + 'tests': [ + # TODO(machenbach): Add benchmarks. + # TODO(machenbach): Add mozilla tests. + {'name': 'mjsunit_sp_frame_access'}, + {'name': 'optimize_for_size'}, + {'name': 'test262_variants', 'shards': 4}, + {'name': 'test262_variants', 'variant': 'extra', 'shards': 2}, + {'name': 'v8initializers'}, + {'name': 'v8testing'}, + {'name': 'v8testing', 'variant': 'extra'}, + {'name': 'v8testing', 'variant': 'minor_mc'}, + {'name': 'v8testing', 'variant': 'slow_path'}, + ], + }, + 'v8_linux64_tsan_rel': { + 'tests': [ + {'name': 'benchmarks'}, + {'name': 'mozilla'}, + {'name': 'test262', 'shards': 3}, + {'name': 'v8testing', 'shards': 5}, + {'name': 'v8testing', 'variant': 'extra', 'shards': 3}, + {'name': 'v8testing', 'variant': 'slow_path'}, + ], + }, + 'v8_linux64_ubsan_rel_ng_triggered': { + 'tests': [ + {'name': 'v8testing', 'shards': 2}, + ], + }, + 'v8_linux64_verify_csa_rel_ng_triggered': { + 'tests': [ + {'name': 'v8testing'}, + ], + }, + ############################################################################## + # Linux64 with arm64 simulators + 'v8_linux_arm64_dbg': { + 'tests': [ + {'name': 'mjsunit_sp_frame_access'}, + {'name': 'mozilla'}, + {'name': 'test262'}, + {'name': 'v8testing', 'shards': 7}, + {'name': 'v8testing', 'variant': 'extra', 'shards': 3}, + ], + }, + 'v8_linux_arm64_gc_stress_dbg': { + 'tests': [ + {'name': 'd8testing', 'test_args': ['--gc-stress'], 'shards': 8}, + ], + }, + 'v8_linux_arm64_rel_ng_triggered': { + 'tests': [ + {'name': 'mjsunit_sp_frame_access'}, + {'name': 'mozilla'}, + {'name': 'test262'}, + {'name': 'v8testing', 'shards': 9}, + {'name': 'v8testing', 'variant': 'extra', 'shards': 3}, + ], + }, + ############################################################################## + # Win32 + 'v8_win_dbg': { + 'swarming_dimensions' : { + 'cpu': 'x86-64', + 'os': 'Windows-7-SP1', + }, + 'tests': [ + {'name': 'mozilla'}, + {'name': 'v8testing', 'shards': 3}, + ], + }, + 'v8_win_nosnap_shared_rel_ng_triggered': { + 'swarming_dimensions' : { + 'cpu': 'x86-64', + 'os': 'Windows-7-SP1', + }, + 'tests': [ + {'name': 'v8testing', 'variant': 'default', 'shards': 3}, + ], + }, + 'v8_win_rel_ng_triggered': { + 'swarming_dimensions' : { + 'cpu': 'x86-64', + 'os': 'Windows-7-SP1', + }, + 'tests': [ + {'name': 'test262'}, + {'name': 'v8testing'}, + ], + }, + ############################################################################## + # Win64 + 'v8_win64_asan_rel_ng_triggered': { + 'swarming_dimensions' : { + 'os': 'Windows-10', + }, + 'tests': [ + {'name': 'v8testing', 'shards': 5}, + ], + }, + 'v8_win64_dbg': { + 'swarming_dimensions' : { + 'cpu': 'x86-64', + 'os': 'Windows-7-SP1', + }, + 'tests': [ + {'name': 'mozilla'}, + {'name': 'test262', 'shards': 2}, + {'name': 'v8testing', 'shards': 3}, + {'name': 'v8testing', 'variant': 'extra', 'shards': 2}, + ], + }, + 'v8_win64_msvc_rel_ng_triggered': { + 'swarming_dimensions' : { + 'cpu': 'x86-64', + 'os': 'Windows-7-SP1', + }, + 'tests': [ + {'name': 'mozilla'}, + {'name': 'test262'}, + {'name': 'v8testing'}, + ], + }, + 'v8_win64_rel_ng_triggered': { + 'swarming_dimensions' : { + 'cpu': 'x86-64', + 'os': 'Windows-7-SP1', + }, + 'tests': [ + {'name': 'test262'}, + {'name': 'v8testing'}, + {'name': 'v8testing', 'variant': 'extra'}, + ], + }, + ############################################################################## + # Mac64 + 'v8_mac64_asan_rel': { + 'swarming_dimensions' : { + 'cpu': 'x86-64', + 'os': 'Mac-10.13', + }, + 'tests': [ + {'name': 'v8testing', 'shards': 4}, + ], + }, + 'v8_mac64_dbg_ng_triggered': { + 'swarming_dimensions' : { + 'cpu': 'x86-64', + 'os': 'Mac-10.13', + }, + 'tests': [ + {'name': 'mozilla'}, + {'name': 'test262'}, + {'name': 'v8testing', 'shards': 3}, + {'name': 'v8testing', 'variant': 'extra', 'shards': 2}, + ], + }, + 'v8_mac64_gc_stress_dbg': { + 'swarming_dimensions' : { + 'cpu': 'x86-64', + 'os': 'Mac-10.13', + }, + 'tests': [ + {'name': 'd8testing', 'test_args': ['--gc-stress'], 'shards': 4}, + ], + }, + 'v8_mac64_rel_ng_triggered': { + 'swarming_dimensions' : { + 'cpu': 'x86-64', + 'os': 'Mac-10.13', + }, + 'tests': [ + {'name': 'mozilla'}, + {'name': 'test262'}, + {'name': 'v8testing'}, + {'name': 'v8testing', 'variant': 'extra'}, + ], + }, + ############################################################################## + ### luci.v8.ci + ############################################################################## + # Linux32 + 'V8 Linux - debug': { + 'tests': [ + {'name': 'benchmarks', 'variant': 'code_serializer', 'shards': 1}, + {'name': 'd8testing', 'variant': 'code_serializer', 'shards': 1}, + {'name': 'mozilla', 'variant': 'code_serializer', 'shards': 1}, + {'name': 'test262_variants', 'variant': 'code_serializer', 'shards': 1}, + ], + }, + 'V8 Linux - gc stress': { + 'tests': [ + {'name': 'mjsunit', 'variant': 'slow_path', 'shards': 2}, + ], + }, + ############################################################################## + # Linux64 + 'V8 Linux64': { + 'tests': [ + {'name': 'v8testing', 'variant': 'minor_mc', 'shards': 1}, + ], + }, + 'V8 Linux64 - debug': { + 'tests': [ + {'name': 'v8testing', 'variant': 'minor_mc', 'shards': 1}, + {'name': 'v8testing', 'variant': 'slow_path', 'shards': 1}, + ], + }, + 'V8 Linux64 - debug - fyi': { + 'tests': [ + # Infra staging. + {'name': 'test262_variants', 'variant': 'infra_staging', 'shards': 3}, + {'name': 'v8testing', 'variant': 'infra_staging', 'shards': 2}, + # Stress sampling. + {'name': 'mjsunit', 'variant': 'stress_sampling', 'shards': 1}, + {'name': 'webkit', 'variant': 'stress_sampling', 'shards': 1}, + ], + }, + 'V8 Linux64 - fyi': { + 'tests': [ + {'name': 'mjsunit', 'variant': 'stress_sampling', 'shards': 1}, + {'name': 'test262_variants', 'variant': 'infra_staging', 'shards': 2}, + {'name': 'v8testing', 'variant': 'infra_staging', 'shards': 1}, + {'name': 'webkit', 'variant': 'stress_sampling', 'shards': 1}, + ], + }, + 'V8 Linux64 ASAN': { + 'tests': [ + {'name': 'v8testing', 'variant': 'slow_path', 'shards': 1}, + ], + }, + 'V8 Linux64 TSAN': { + 'tests': [ + {'name': 'v8testing', 'variant': 'slow_path', 'shards': 1}, + ], + }, +} diff --git a/deps/v8/infra/testing/client.v8.pyl b/deps/v8/infra/testing/client.v8.pyl deleted file mode 100644 index ab1744fc78b33e..00000000000000 --- a/deps/v8/infra/testing/client.v8.pyl +++ /dev/null @@ -1,48 +0,0 @@ -# Copyright 2017 The V8 project authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -{ - ### Example configuration for CI bots (please keep as reference). - # 'V8 Linux64': [ - # {'name': 'benchmarks', 'variant': 'default', 'shards': 1}, - # ], - # 'V8 Linux64 - debug': [ - # {'name': 'benchmarks', 'variant': 'default', 'shards': 1}, - # ], - - 'V8 Linux - debug': [ - {'name': 'd8testing', 'variant': 'code_serializer', 'shards': 1}, - {'name': 'mozilla', 'variant': 'code_serializer', 'shards': 1}, - {'name': 'test262_variants', 'variant': 'code_serializer', 'shards': 1}, - {'name': 'benchmarks', 'variant': 'code_serializer', 'shards': 1}, - ], - 'V8 Linux - gc stress': [ - {'name': 'mjsunit', 'variant': 'slow_path', 'shards': 2}, - ], - 'V8 Linux64': [ - {'name': 'v8testing', 'variant': 'minor_mc', 'shards': 1}, - ], - 'V8 Linux64 - debug': [ - {'name': 'v8testing', 'variant': 'minor_mc', 'shards': 1}, - {'name': 'v8testing', 'variant': 'slow_path', 'shards': 1}, - ], - 'V8 Linux64 ASAN': [ - {'name': 'v8testing', 'variant': 'slow_path', 'shards': 1}, - ], - 'V8 Linux64 TSAN': [ - {'name': 'v8testing', 'variant': 'slow_path', 'shards': 1}, - ], - 'V8 Linux64 - fyi': [ - {'name': 'v8testing', 'variant': 'infra_staging', 'shards': 1}, - {'name': 'test262_variants', 'variant': 'infra_staging', 'shards': 2}, - {'name': 'mjsunit', 'variant': 'stress_sampling', 'shards': 1}, - {'name': 'webkit', 'variant': 'stress_sampling', 'shards': 1}, - ], - 'V8 Linux64 - debug - fyi': [ - {'name': 'v8testing', 'variant': 'infra_staging', 'shards': 2}, - {'name': 'test262_variants', 'variant': 'infra_staging', 'shards': 3}, - {'name': 'mjsunit', 'variant': 'stress_sampling', 'shards': 1}, - {'name': 'webkit', 'variant': 'stress_sampling', 'shards': 1}, - ], -} diff --git a/deps/v8/infra/testing/tryserver.v8.pyl b/deps/v8/infra/testing/tryserver.v8.pyl deleted file mode 100644 index ee6abae5d533d3..00000000000000 --- a/deps/v8/infra/testing/tryserver.v8.pyl +++ /dev/null @@ -1,30 +0,0 @@ -# Copyright 2017 The V8 project authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -{ - ### Example configuration for trybots (please keep as reference). - # 'v8_linux64_rel_ng_triggered': [ - # {'name': 'benchmarks', 'variant': 'default', 'shards': 1}, - # ], - - 'v8_linux64_fyi_rel_ng_triggered': [ - {'name': 'v8testing', 'variant': 'infra_staging', 'shards': 2}, - {'name': 'test262_variants', 'variant': 'infra_staging', 'shards': 2}, - {'name': 'mjsunit', 'variant': 'stress_sampling', 'shards': 1}, - {'name': 'webkit', 'variant': 'stress_sampling', 'shards': 1}, - ], - 'v8_linux64_rel_ng_triggered': [ - {'name': 'v8testing', 'variant': 'minor_mc', 'shards': 1}, - {'name': 'v8testing', 'variant': 'slow_path', 'shards': 1}, - ], - 'v8_linux_gc_stress_dbg': [ - {'name': 'mjsunit', 'variant': 'slow_path', 'shards': 2}, - ], - 'v8_linux64_asan_rel_ng_triggered': [ - {'name': 'v8testing', 'variant': 'slow_path', 'shards': 1}, - ], - 'v8_linux64_tsan_rel': [ - {'name': 'v8testing', 'variant': 'slow_path', 'shards': 1}, - ], -} diff --git a/deps/v8/samples/hello-world.cc b/deps/v8/samples/hello-world.cc index ab6f0dd8bf67ee..d75dcb3c3cc4ef 100644 --- a/deps/v8/samples/hello-world.cc +++ b/deps/v8/samples/hello-world.cc @@ -34,22 +34,63 @@ int main(int argc, char* argv[]) { // Enter the context for compiling and running the hello world script. v8::Context::Scope context_scope(context); - // Create a string containing the JavaScript source code. - v8::Local source = - v8::String::NewFromUtf8(isolate, "'Hello' + ', World!'", - v8::NewStringType::kNormal) - .ToLocalChecked(); - - // Compile the source code. - v8::Local script = - v8::Script::Compile(context, source).ToLocalChecked(); - - // Run the script to get the result. - v8::Local result = script->Run(context).ToLocalChecked(); - - // Convert the result to an UTF8 string and print it. - v8::String::Utf8Value utf8(isolate, result); - printf("%s\n", *utf8); + { + // Create a string containing the JavaScript source code. + v8::Local source = + v8::String::NewFromUtf8(isolate, "'Hello' + ', World!'", + v8::NewStringType::kNormal) + .ToLocalChecked(); + + // Compile the source code. + v8::Local script = + v8::Script::Compile(context, source).ToLocalChecked(); + + // Run the script to get the result. + v8::Local result = script->Run(context).ToLocalChecked(); + + // Convert the result to an UTF8 string and print it. + v8::String::Utf8Value utf8(isolate, result); + printf("%s\n", *utf8); + } + + { + // Use the JavaScript API to generate a WebAssembly module. + // + // |bytes| contains the binary format for the following module: + // + // (func (export "add") (param i32 i32) (result i32) + // get_local 0 + // get_local 1 + // i32.add) + // + const char* csource = R"( + let bytes = new Uint8Array([ + 0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x01, 0x07, 0x01, + 0x60, 0x02, 0x7f, 0x7f, 0x01, 0x7f, 0x03, 0x02, 0x01, 0x00, 0x07, + 0x07, 0x01, 0x03, 0x61, 0x64, 0x64, 0x00, 0x00, 0x0a, 0x09, 0x01, + 0x07, 0x00, 0x20, 0x00, 0x20, 0x01, 0x6a, 0x0b + ]); + let module = new WebAssembly.Module(bytes); + let instance = new WebAssembly.Instance(module); + instance.exports.add(3, 4); + )"; + + // Create a string containing the JavaScript source code. + v8::Local source = + v8::String::NewFromUtf8(isolate, csource, v8::NewStringType::kNormal) + .ToLocalChecked(); + + // Compile the source code. + v8::Local script = + v8::Script::Compile(context, source).ToLocalChecked(); + + // Run the script to get the result. + v8::Local result = script->Run(context).ToLocalChecked(); + + // Convert the result to a uint32 and print it. + uint32_t number = result->Uint32Value(context).ToChecked(); + printf("3 + 4 = %u\n", number); + } } // Dispose the isolate and tear down V8. diff --git a/deps/v8/src/DEPS b/deps/v8/src/DEPS index 050f91d6d6d990..275595d0d80481 100644 --- a/deps/v8/src/DEPS +++ b/deps/v8/src/DEPS @@ -27,7 +27,8 @@ include_rules = [ "+src/trap-handler/trap-handler.h", "+testing/gtest/include/gtest/gtest_prod.h", "-src/libplatform", - "-include/libplatform" + "-include/libplatform", + "+torque-generated" ] specific_include_rules = { diff --git a/deps/v8/src/accessors.cc b/deps/v8/src/accessors.cc index f292988b8e1e5d..9057865ac3b564 100644 --- a/deps/v8/src/accessors.cc +++ b/deps/v8/src/accessors.cc @@ -12,6 +12,8 @@ #include "src/heap/factory.h" #include "src/isolate-inl.h" #include "src/messages.h" +#include "src/objects/api-callbacks.h" +#include "src/objects/module-inl.h" #include "src/property-details.h" #include "src/prototype.h" @@ -37,18 +39,18 @@ Handle Accessors::MakeAccessor( info->set_getter(*get); info->set_setter(*set); Address redirected = info->redirected_getter(); - if (redirected != nullptr) { + if (redirected != kNullAddress) { Handle js_get = v8::FromCData(isolate, redirected); info->set_js_getter(*js_get); } return info; } -static V8_INLINE bool CheckForName(Handle name, +static V8_INLINE bool CheckForName(Isolate* isolate, Handle name, Handle property_name, int offset, FieldIndex::Encoding encoding, FieldIndex* index) { - if (Name::Equals(name, property_name)) { + if (Name::Equals(isolate, name, property_name)) { *index = FieldIndex::ForInObjectOffset(offset, encoding); return true; } @@ -58,17 +60,15 @@ static V8_INLINE bool CheckForName(Handle name, // Returns true for properties that are accessors to object fields. // If true, *object_offset contains offset of object field. -bool Accessors::IsJSObjectFieldAccessor(Handle map, Handle name, - FieldIndex* index) { - Isolate* isolate = name->GetIsolate(); - +bool Accessors::IsJSObjectFieldAccessor(Isolate* isolate, Handle map, + Handle name, FieldIndex* index) { switch (map->instance_type()) { case JS_ARRAY_TYPE: - return CheckForName(name, isolate->factory()->length_string(), + return CheckForName(isolate, name, isolate->factory()->length_string(), JSArray::kLengthOffset, FieldIndex::kTagged, index); default: if (map->instance_type() < FIRST_NONSTRING_TYPE) { - return CheckForName(name, isolate->factory()->length_string(), + return CheckForName(isolate, name, isolate->factory()->length_string(), String::kLengthOffset, FieldIndex::kTagged, index); } @@ -76,12 +76,12 @@ bool Accessors::IsJSObjectFieldAccessor(Handle map, Handle name, } } - -namespace { - -V8_WARN_UNUSED_RESULT MaybeHandle ReplaceAccessorWithDataProperty( - Isolate* isolate, Handle receiver, Handle holder, - Handle name, Handle value) { +V8_WARN_UNUSED_RESULT MaybeHandle +Accessors::ReplaceAccessorWithDataProperty(Isolate* isolate, + Handle receiver, + Handle holder, + Handle name, + Handle value) { LookupIterator it(receiver, name, holder, LookupIterator::OWN_SKIP_INTERCEPTOR); // Skip any access checks we might hit. This accessor should never hit in a @@ -96,7 +96,6 @@ V8_WARN_UNUSED_RESULT MaybeHandle ReplaceAccessorWithDataProperty( return value; } -} // namespace // // Accessors::ReconfigureToDataProperty @@ -113,8 +112,8 @@ void Accessors::ReconfigureToDataProperty( Handle::cast(Utils::OpenHandle(*info.Holder())); Handle name = Utils::OpenHandle(*key); Handle value = Utils::OpenHandle(*val); - MaybeHandle result = - ReplaceAccessorWithDataProperty(isolate, receiver, holder, name, value); + MaybeHandle result = Accessors::ReplaceAccessorWithDataProperty( + isolate, receiver, holder, name, value); if (result.is_null()) { isolate->OptionalRescheduleException(false); } else { @@ -122,17 +121,6 @@ void Accessors::ReconfigureToDataProperty( } } -void Accessors::ReconfigureToDataPropertyGetter( - v8::Local name, const v8::PropertyCallbackInfo& info) { - UNREACHABLE(); -} - -Handle Accessors::MakeReconfigureToDataPropertyInfo( - Isolate* isolate) { - Handle name = isolate->factory()->ReconfigureToDataProperty_string(); - return MakeAccessor(isolate, name, &ReconfigureToDataPropertyGetter, - &ReconfigureToDataProperty); -} // // Accessors::ArgumentsIterator @@ -180,7 +168,8 @@ void Accessors::ArrayLengthSetter( RuntimeCallCounterId::kArrayLengthSetter); HandleScope scope(isolate); - DCHECK(Utils::OpenHandle(*name)->SameValue(isolate->heap()->length_string())); + DCHECK(Utils::OpenHandle(*name)->SameValue( + ReadOnlyRoots(isolate).length_string())); Handle object = Utils::OpenHandle(*info.Holder()); Handle array = Handle::cast(object); @@ -248,7 +237,8 @@ void Accessors::ModuleNamespaceEntryGetter( JSModuleNamespace* holder = JSModuleNamespace::cast(*Utils::OpenHandle(*info.Holder())); Handle result; - if (!holder->GetExport(Handle::cast(Utils::OpenHandle(*name))) + if (!holder + ->GetExport(isolate, Handle::cast(Utils::OpenHandle(*name))) .ToHandle(&result)) { isolate->OptionalRescheduleException(false); } else { @@ -315,333 +305,6 @@ Handle Accessors::MakeStringLengthInfo(Isolate* isolate) { &StringLengthGetter, nullptr); } -// -// Accessors::ScriptColumnOffset -// - - -void Accessors::ScriptColumnOffsetGetter( - v8::Local name, - const v8::PropertyCallbackInfo& info) { - i::Isolate* isolate = reinterpret_cast(info.GetIsolate()); - DisallowHeapAllocation no_allocation; - HandleScope scope(isolate); - Object* object = *Utils::OpenHandle(*info.Holder()); - Object* res = Smi::FromInt( - Script::cast(JSValue::cast(object)->value())->column_offset()); - info.GetReturnValue().Set(Utils::ToLocal(Handle(res, isolate))); -} - -Handle Accessors::MakeScriptColumnOffsetInfo(Isolate* isolate) { - Handle name(isolate->factory()->InternalizeOneByteString( - STATIC_CHAR_VECTOR("column_offset"))); - return MakeAccessor(isolate, name, &ScriptColumnOffsetGetter, nullptr); -} - - -// -// Accessors::ScriptId -// - - -void Accessors::ScriptIdGetter( - v8::Local name, - const v8::PropertyCallbackInfo& info) { - i::Isolate* isolate = reinterpret_cast(info.GetIsolate()); - DisallowHeapAllocation no_allocation; - HandleScope scope(isolate); - Object* object = *Utils::OpenHandle(*info.Holder()); - Object* id = Smi::FromInt(Script::cast(JSValue::cast(object)->value())->id()); - info.GetReturnValue().Set(Utils::ToLocal(Handle(id, isolate))); -} - -Handle Accessors::MakeScriptIdInfo(Isolate* isolate) { - Handle name( - isolate->factory()->InternalizeOneByteString(STATIC_CHAR_VECTOR("id"))); - return MakeAccessor(isolate, name, &ScriptIdGetter, nullptr); -} - - -// -// Accessors::ScriptName -// - - -void Accessors::ScriptNameGetter( - v8::Local name, - const v8::PropertyCallbackInfo& info) { - i::Isolate* isolate = reinterpret_cast(info.GetIsolate()); - DisallowHeapAllocation no_allocation; - HandleScope scope(isolate); - Object* object = *Utils::OpenHandle(*info.Holder()); - Object* source = Script::cast(JSValue::cast(object)->value())->name(); - info.GetReturnValue().Set(Utils::ToLocal(Handle(source, isolate))); -} - -Handle Accessors::MakeScriptNameInfo(Isolate* isolate) { - return MakeAccessor(isolate, isolate->factory()->name_string(), - &ScriptNameGetter, nullptr); -} - - -// -// Accessors::ScriptSource -// - - -void Accessors::ScriptSourceGetter( - v8::Local name, - const v8::PropertyCallbackInfo& info) { - i::Isolate* isolate = reinterpret_cast(info.GetIsolate()); - DisallowHeapAllocation no_allocation; - HandleScope scope(isolate); - Object* object = *Utils::OpenHandle(*info.Holder()); - Object* source = Script::cast(JSValue::cast(object)->value())->source(); - info.GetReturnValue().Set(Utils::ToLocal(Handle(source, isolate))); -} - -Handle Accessors::MakeScriptSourceInfo(Isolate* isolate) { - return MakeAccessor(isolate, isolate->factory()->source_string(), - &ScriptSourceGetter, nullptr); -} - - -// -// Accessors::ScriptLineOffset -// - - -void Accessors::ScriptLineOffsetGetter( - v8::Local name, - const v8::PropertyCallbackInfo& info) { - i::Isolate* isolate = reinterpret_cast(info.GetIsolate()); - DisallowHeapAllocation no_allocation; - HandleScope scope(isolate); - Object* object = *Utils::OpenHandle(*info.Holder()); - Object* res = - Smi::FromInt(Script::cast(JSValue::cast(object)->value())->line_offset()); - info.GetReturnValue().Set(Utils::ToLocal(Handle(res, isolate))); -} - -Handle Accessors::MakeScriptLineOffsetInfo(Isolate* isolate) { - Handle name(isolate->factory()->InternalizeOneByteString( - STATIC_CHAR_VECTOR("line_offset"))); - return MakeAccessor(isolate, name, &ScriptLineOffsetGetter, nullptr); -} - - -// -// Accessors::ScriptType -// - - -void Accessors::ScriptTypeGetter( - v8::Local name, - const v8::PropertyCallbackInfo& info) { - i::Isolate* isolate = reinterpret_cast(info.GetIsolate()); - DisallowHeapAllocation no_allocation; - HandleScope scope(isolate); - Object* object = *Utils::OpenHandle(*info.Holder()); - Object* res = - Smi::FromInt(Script::cast(JSValue::cast(object)->value())->type()); - info.GetReturnValue().Set(Utils::ToLocal(Handle(res, isolate))); -} - -Handle Accessors::MakeScriptTypeInfo(Isolate* isolate) { - Handle name( - isolate->factory()->InternalizeOneByteString(STATIC_CHAR_VECTOR("type"))); - return MakeAccessor(isolate, name, &ScriptTypeGetter, nullptr); -} - - -// -// Accessors::ScriptCompilationType -// - - -void Accessors::ScriptCompilationTypeGetter( - v8::Local name, - const v8::PropertyCallbackInfo& info) { - i::Isolate* isolate = reinterpret_cast(info.GetIsolate()); - DisallowHeapAllocation no_allocation; - HandleScope scope(isolate); - Object* object = *Utils::OpenHandle(*info.Holder()); - Object* res = Smi::FromInt( - Script::cast(JSValue::cast(object)->value())->compilation_type()); - info.GetReturnValue().Set(Utils::ToLocal(Handle(res, isolate))); -} - -Handle Accessors::MakeScriptCompilationTypeInfo( - Isolate* isolate) { - Handle name(isolate->factory()->InternalizeOneByteString( - STATIC_CHAR_VECTOR("compilation_type"))); - return MakeAccessor(isolate, name, &ScriptCompilationTypeGetter, nullptr); -} - - -// -// Accessors::ScriptSourceUrl -// - - -void Accessors::ScriptSourceUrlGetter( - v8::Local name, - const v8::PropertyCallbackInfo& info) { - i::Isolate* isolate = reinterpret_cast(info.GetIsolate()); - DisallowHeapAllocation no_allocation; - HandleScope scope(isolate); - Object* object = *Utils::OpenHandle(*info.Holder()); - Object* url = Script::cast(JSValue::cast(object)->value())->source_url(); - info.GetReturnValue().Set(Utils::ToLocal(Handle(url, isolate))); -} - -Handle Accessors::MakeScriptSourceUrlInfo(Isolate* isolate) { - Handle name(isolate->factory()->InternalizeOneByteString( - STATIC_CHAR_VECTOR("source_url"))); - return MakeAccessor(isolate, name, &ScriptSourceUrlGetter, nullptr); -} - - -// -// Accessors::ScriptSourceMappingUrl -// - - -void Accessors::ScriptSourceMappingUrlGetter( - v8::Local name, - const v8::PropertyCallbackInfo& info) { - i::Isolate* isolate = reinterpret_cast(info.GetIsolate()); - DisallowHeapAllocation no_allocation; - HandleScope scope(isolate); - Object* object = *Utils::OpenHandle(*info.Holder()); - Object* url = - Script::cast(JSValue::cast(object)->value())->source_mapping_url(); - info.GetReturnValue().Set(Utils::ToLocal(Handle(url, isolate))); -} - -Handle Accessors::MakeScriptSourceMappingUrlInfo( - Isolate* isolate) { - Handle name(isolate->factory()->InternalizeOneByteString( - STATIC_CHAR_VECTOR("source_mapping_url"))); - return MakeAccessor(isolate, name, &ScriptSourceMappingUrlGetter, nullptr); -} - - -// -// Accessors::ScriptGetContextData -// - - -void Accessors::ScriptContextDataGetter( - v8::Local name, - const v8::PropertyCallbackInfo& info) { - i::Isolate* isolate = reinterpret_cast(info.GetIsolate()); - DisallowHeapAllocation no_allocation; - HandleScope scope(isolate); - Object* object = *Utils::OpenHandle(*info.Holder()); - Object* res = Script::cast(JSValue::cast(object)->value())->context_data(); - info.GetReturnValue().Set(Utils::ToLocal(Handle(res, isolate))); -} - -Handle Accessors::MakeScriptContextDataInfo(Isolate* isolate) { - Handle name(isolate->factory()->InternalizeOneByteString( - STATIC_CHAR_VECTOR("context_data"))); - return MakeAccessor(isolate, name, &ScriptContextDataGetter, nullptr); -} - - -// -// Accessors::ScriptGetEvalFromScript -// - - -void Accessors::ScriptEvalFromScriptGetter( - v8::Local name, - const v8::PropertyCallbackInfo& info) { - i::Isolate* isolate = reinterpret_cast(info.GetIsolate()); - HandleScope scope(isolate); - Handle object = Utils::OpenHandle(*info.Holder()); - Handle @@ -149,19 +178,20 @@ } function delay(t) { - return new Promise(resolve = > setTimeout(resolve, t)); + return new Promise(resolve => setTimeout(resolve, t)); } function renderParseResults(parseProcessor) { let result = $('#result'); // clear out all existing result pages; result.innerHTML = ''; - const start = parseProcessor.firstEvent; - const end = parseProcessor.lastEvent; + const start = parseProcessor.firstEventTimestamp; + const end = parseProcessor.lastEventTimestamp; renderScript(result, parseProcessor.totalScript, start, end); // Build up the graphs lazily to keep the page responsive. parseProcessor.scripts.forEach( script => renderScript(result, script, start, end)); + renderScriptSizes(parseProcessor); // Install an intersection observer to lazily load the graphs when the script // div becomes visible for the first time. var io = new IntersectionObserver((entries, observer) => { @@ -198,7 +228,31 @@ summary.appendChild(text(script.summary)); scriptDiv.appendChild(summary); result.appendChild(scriptDiv); - return scriptDiv; +} + +function renderScriptSizes(parseProcessor) { + let scriptsDiv = $('#scripts'); + parseProcessor.scripts.forEach( + script => { + let scriptDiv = a('#script'+script.id, '', 'script-size'); + let scriptId = div('script-id'); + scriptId.innerText = script.id; + scriptDiv.appendChild(scriptId); + let scriptUrl = div('script-url'); + if (script.isEval) { + scriptUrl.innerText = "eval"; + scriptDiv.classList.add('eval'); + } else { + scriptUrl.innerText = script.file.split("/").pop(); + } + if (script.isBackgroundCompiled ) { + scriptDiv.classList.add('background'); + } + scriptDiv.appendChild(scriptUrl); + scriptDiv.style.width = script.bytesTotal * 0.001; + scriptsDiv.appendChild(scriptDiv); + + }); } const kMaxTime = 120 * kSecondsToMillis; @@ -206,13 +260,13 @@ const kTimeIncrement = 1; const kSelectionTimespan = 2; const series = [ -// ['firstParseEvent', 'Any Parse Event'], + ['firstParseEvent', 'Any Parse Event'], + ['execution', 'First Execution'], ['parse', 'Parsing'], -// ['preparse', 'Preparsing'], -// ['resolution', 'Preparsing with Var. Resolution'], + ['preparse', 'Preparsing'], + ['resolution', 'Preparsing with Var. Resolution'], ['lazyCompile', 'Lazy Compilation'], ['compile', 'Eager Compilation'], - ['execution', 'First Execution'], ]; const metricNames = series.map(each => each[0]); @@ -223,18 +277,21 @@ console.time(timerLabel); let data = new google.visualization.DataTable(); - data.addColumn('number', 'Time'); + data.addColumn('number', 'Duration'); // The series are interleave bytes processed, time spent and thus have two - // different vAxes. + // different vAxes. let seriesOptions = []; + let colors = ['#4D4D4D', '#5DA5DA', '#FAA43A', '#60BD68', '#F17CB0', + '#B2912F', '#B276B2', '#DECF3F', '#F15854']; series.forEach(each => { let description = each[1]; + let color = colors.shift(); // Add the bytes column. data.addColumn('number', description + ' Bytes'); - seriesOptions.push({targetAxisIndex: 0}); + seriesOptions.push({targetAxisIndex: 0, color: color}); // Add the time column. - data.addColumn('number', description + ' Time'); - seriesOptions.push({targetAxisIndex: 1, lineDashStyle: [3, 2]}); + data.addColumn('number', description + ' Duration'); + seriesOptions.push({targetAxisIndex: 1, color: color, lineDashStyle: [3, 2]}); }); // The first entry contains the total. seriesOptions[0].type = 'area'; @@ -257,7 +314,7 @@ }, vAxes: { 0: {title: 'Bytes Touched', format: 'short'}, - 1: {title: 'Time', format: '#,###ms'} + 1: {title: 'Duration', format: '#,###ms'} }, height: 400, width: 1000, @@ -275,6 +332,7 @@ google.visualization.events.addListener(chart, 'select', () => selectGraphPointHandler(chart, data, script, parentNode)); chart.draw(data, options); + // Add event listeners console.timeEnd(timerLabel); } @@ -311,8 +369,6 @@ container.appendChild(listNode); return container; } - - @@ -326,10 +382,14 @@

Usage

Data

- trace entries: 0 + trace entries: 0

+ +

Scripts

+
+

Result

diff --git a/deps/v8/tools/parse-processor.js b/deps/v8/tools/parse-processor.js index 30b593a15626cb..a561015f531a19 100644 --- a/deps/v8/tools/parse-processor.js +++ b/deps/v8/tools/parse-processor.js @@ -22,13 +22,13 @@ function readFile(fileName) { // confusion between the decimal and thousands separator is big (alternating // between comma "," vs dot "."). The Swiss formatting uses "'" as a thousands // separator, dropping most of that confusion. -var numberFormat = new Intl.NumberFormat('de-CH', { +const numberFormat = new Intl.NumberFormat('de-CH', { maximumFractionDigits: 2, minimumFractionDigits: 2, }); function formatNumber(value) { - return formatNumber(value); + return numberFormat.format(value); } function BYTES(bytes, total) { @@ -64,34 +64,67 @@ function timestampMin(list) { // =========================================================================== -class Script { - constructor(file, id) { - this.file = file; - this.isNative = false; - this.id = id; +const kNoTimeMetrics = { + __proto__: null, + executionDuration: 0, + firstEventTimestamp: 0, + firstParseEventTimestamp: 0, + lastParseEventTimestamp: 0, + lastEventTimestamp: 0 +}; + +class CompilationUnit { + constructor() { + // Lazily computed properties. + this.firstEventTimestamp = -1; + this.firstParseEventTimestamp = -1; + this.lastParseEventTimestamp = -1; + this.lastEventTimestamp = -1; + + this.preparseTimestamp = -1; + this.parseTimestamp = -1; + this.parse2Timestamp = -1; + this.resolutionTimestamp = -1; + this.lazyCompileTimestamp = -1; + this.compileTimestamp = -1; + this.executionTimestamp = -1; + + this.preparseDuration = -0.0; + this.parseDuration = -0.0; + this.parse2Duration = -0.0; + this.resolutionDuration = -0.0; + this.scopeResolutionDuration = -0.0; + this.lazyCompileDuration = -0.0; + this.compileDuration = -0.0; + + this.ownBytes = -1; + } +} + +// =========================================================================== +class Script extends CompilationUnit { + constructor(id) { + super(); if (id === void 0 || id <= 0) { - throw new Error(`Invalid id=${id} for script with file='${file}'`); + throw new Error(`Invalid id=${id} for script`); } + this.file = ''; + this.id = id; + + this.isNative = false; this.isEval = false; + this.isBackgroundCompiled = false; + this.isDeserialized = false; + this.funktions = []; this.metrics = new Map(); this.maxNestingLevel = 0; - this.firstEvent = -1; - this.firstParseEvent = -1; - this.lastParseEvent = -1; - this.executionTimestamp = -1; - this.compileTimestamp = -1; - this.lastEvent = -1; - - this.compileTime = -0.0; - this.width = 0; - this.bytesTotal = 0; - this.ownBytes = -1; + this.bytesTotal = -1; this.finalized = false; this.summary = ''; - this.setFile(file); + this.source = ''; } setFile(name) { @@ -104,7 +137,9 @@ class Script { } funktionAtPosition(start) { - if (start === 0) throw "position 0 is reserved for the script"; + if (!this.isEval && start === 0) { + throw 'position 0 is reserved for the script'; + } if (this.finalized) throw 'Finalized script has no source position!'; return this.funktions[start]; } @@ -150,18 +185,42 @@ class Script { } parent = fn; } - this.firstParseEvent = this.firstParseEvent === -1 ? - fn.getFirstParseEvent() : - Math.min(this.firstParseEvent, fn.getFirstParseEvent()); - this.lastParseEvent = - Math.max(this.lastParseEvent, fn.getLastParseEvent()); - fn.getFirstEvent(); - if (Number.isNaN(this.lastEvent)) throw "Invalid lastEvent"; - this.lastEvent = Math.max(this.lastEvent, fn.getLastEvent()); - if (Number.isNaN(this.lastEvent)) throw "Invalid lastEvent"; + this.firstParseEventTimestamp = this.firstParseEventTimestamp === -1 ? + fn.getFirstParseEventTimestamp() : + Math.min( + this.firstParseEventTimestamp, fn.getFirstParseEventTimestamp()); + this.lastParseEventTimestamp = Math.max( + this.lastParseEventTimestamp, fn.getLastParseEventTimestamp()); + fn.getFirstEventTimestamp(); + if (Number.isNaN(this.lastEventTimestamp)) { + throw 'Invalid lastEventTimestamp'; + } + this.lastEventTimestamp = + Math.max(this.lastEventTimestamp, fn.getLastEventTimestamp()); + if (Number.isNaN(this.lastEventTimestamp)) { + throw 'Invalid lastEventTimestamp'; + } }); this.maxNestingLevel = maxNesting; - this.getFirstEvent(); + this.getFirstEventTimestamp(); + + // Initialize sizes. + if (!this.ownBytes === -1) throw 'Invalid state'; + if (this.funktions.length == 0) { + this.bytesTotal = this.ownBytes = 0; + return; + } + let toplevelFunktionBytes = this.funktions.reduce( + (bytes, each) => bytes + (each.isToplevel() ? each.getBytes() : 0), 0); + if (this.isDeserialized || this.isEval || this.isBackgroundCompiled) { + if (this.getBytes() === -1) { + this.bytesTotal = toplevelFunktionBytes; + } + } + this.ownBytes = this.bytesTotal - toplevelFunktionBytes; + if (this.ownBytes < 0) { + console.error(this, 'Own bytes must be positive'); + } } print() { @@ -180,22 +239,16 @@ class Script { } getOwnBytes() { - if (this.ownBytes === -1) { - this.ownBytes = this.funktions.reduce( - (bytes, each) => bytes - each.parent == null ? each.getBytes() : 0, - this.getBytes()); - if (this.ownBytes < 0) throw "Own bytes must be positive"; - } return this.ownBytes; } // Also see Funktion.prototype.getMetricBytes getMetricBytes(name) { if (name == 'lazyCompileTimestamp') return this.getOwnBytes(); - return this.getBytes(); + return this.getOwnBytes(); } - getMetricTime(name) { + getMetricDuration(name) { return this[name]; } @@ -235,55 +288,58 @@ class Script { }; log(" - file: " + this.file); + log(' - details: ' + + 'isEval=' + this.isEval + ' deserialized=' + this.isDeserialized + + ' streamed=' + this.isBackgroundCompiled); info("scripts", this.getScripts()); info("functions", all); info("toplevel fn", all.filter(each => each.isToplevel())); - info("preparsed", all.filter(each => each.preparseTime > 0)); - + info('preparsed', all.filter(each => each.preparseDuration > 0)); - info("fully parsed", all.filter(each => each.parseTime > 0)); - // info("fn parsed", all.filter(each => each.parse2Time > 0)); - // info("resolved", all.filter(each => each.resolutionTime > 0)); + info('fully parsed', all.filter(each => each.parseDuration > 0)); + // info("fn parsed", all.filter(each => each.parse2Duration > 0)); + // info("resolved", all.filter(each => each.resolutionDuration > 0)); info("executed", all.filter(each => each.executionTimestamp > 0)); info("forEval", all.filter(each => each.fromEval)); info("lazy compiled", all.filter(each => each.lazyCompileTimestamp > 0)); info("eager compiled", all.filter(each => each.compileTimestamp > 0)); - let parsingCost = new ExecutionCost('parse', all, - each => each.parseTime); + let parsingCost = + new ExecutionCost('parse', all, each => each.parseDuration); parsingCost.setMetrics(this.metrics); - log(parsingCost.toString()) + log(parsingCost.toString()); - let preParsingCost = new ExecutionCost('preparse', all, - each => each.preparseTime); + let preParsingCost = + new ExecutionCost('preparse', all, each => each.preparseDuration); preParsingCost.setMetrics(this.metrics); - log(preParsingCost.toString()) + log(preParsingCost.toString()); - let resolutionCost = new ExecutionCost('resolution', all, - each => each.resolutionTime); + let resolutionCost = + new ExecutionCost('resolution', all, each => each.resolutionDuration); resolutionCost.setMetrics(this.metrics); - log(resolutionCost.toString()) + log(resolutionCost.toString()); let nesting = new NestingDistribution(all); nesting.setMetrics(this.metrics); - log(nesting.toString()) + log(nesting.toString()); if (printSummary) console.log(this.summary); } getAccumulatedTimeMetrics(metrics, start, end, delta, incremental = false) { // Returns an array of the following format: - // [ [start, acc(metric0, start, start), acc(metric1, ...), ...], - // [start+delta, acc(metric0, start, start+delta), ...], + // [ [start, acc(metric0, start, start), acc(metric1, ...), ...], + // [start+delta, acc(metric0, start, start+delta), ...], // [start+delta*2, acc(metric0, start, start+delta*2), ...], // ... // ] + if (end <= start) throw 'Invalid ranges [' + start + ',' + end + ']'; const timespan = end - start; const kSteps = Math.ceil(timespan / delta); // To reduce the time spent iterating over the funktions of this script // we iterate once over all funktions and add the metric changes to each // timepoint: - // [ [0, 300, ...], [1, 15, ...], [2, 100, ...], [3, 0, ...] ... ] + // [ [0, 300, ...], [1, 15, ...], [2, 100, ...], [3, 0, ...] ... ] // In a second step we accumulate all values: // [ [0, 300, ...], [1, 315, ...], [2, 415, ...], [3, 415, ...] ... ] // @@ -293,7 +349,7 @@ class Script { const metricProperties = ["time"]; metrics.forEach(each => { metricProperties.push(each + 'Timestamp'); - metricProperties.push(each + 'Time'); + metricProperties.push(each + 'Duration'); }); // Create a packed {rowTemplate} which is copied later-on. let indexToTime = (t) => (start + t * delta) / kSecondsToMillis; @@ -305,12 +361,14 @@ class Script { // Create the real metric's property name on the Funktion object. // Add the increments of each Funktion's metric to the result. this.forEach(funktionOrScript => { - // Iterate over the Funktion's metric names, position 0 is the time. + // Iterate over the Funktion's metric names, skipping position 0 which + // is the time. for (let i = 1; i < metricProperties.length; i += 2) { - let property = metricProperties[i]; - let timestamp = funktionOrScript[property]; + let timestampPropertyName = metricProperties[i]; + let timestamp = funktionOrScript[timestampPropertyName]; if (timestamp === void 0) continue; - if (timestamp < 0 || end < timestamp) continue; + if (timestamp < start || end < timestamp) continue; + timestamp -= start; let index = Math.floor(timestamp / delta); let row = rows[index]; if (row === null) { @@ -320,9 +378,9 @@ class Script { row[0] = indexToTime(index); } // Add the metric value. - row[i] += funktionOrScript.getMetricBytes(property); - let timeMetricName = metricProperties[i + 1]; - row[i + 1] += funktionOrScript.getMetricTime(timeMetricName); + row[i] += funktionOrScript.getMetricBytes(timestampPropertyName); + let durationPropertyName = metricProperties[i + 1]; + row[i + 1] += funktionOrScript.getMetricDuration(durationPropertyName); } }); // Create a packed array again with only the valid entries. @@ -375,12 +433,12 @@ class Script { return result; } - getFirstEvent() { - if (this.firstEvent === -1) { + getFirstEventTimestamp() { + if (this.firstEventTimestamp === -1) { // TODO(cbruni): add support for network request timestanp - this.firstEvent = this.firstParseEvent; + this.firstEventTimestamp = this.firstParseEventTimestamp; } - return this.firstEvent; + return this.firstEventTimestamp; } } @@ -491,67 +549,41 @@ class ExecutionCost { } // =========================================================================== -const kNoTimeMetrics = { - __proto__: null, - executionTime: 0, - firstEventTimestamp: 0, - firstParseEventTimestamp: 0, - lastParseTimestamp: 0, - lastEventTimestamp: 0 -}; -class Funktion { +class Funktion extends CompilationUnit { constructor(name, start, end, script) { + super(); if (start < 0) throw "invalid start position: " + start; - if (end <= 0) throw "invalid end position: " + end; - if (end <= start) throw "invalid start end positions"; + if (script.isEval) { + if (end < start) throw 'invalid start end positions'; + } else { + if (end <= 0) throw 'invalid end position: ' + end; + if (end <= start) throw 'invalid start end positions'; + } this.name = name; this.start = start; this.end = end; - this.ownBytes = -1; this.script = script; this.parent = null; this.fromEval = false; this.nested = []; this.nestingLevel = 0; - this.preparseTimestamp = -1; - this.parseTimestamp = -1; - this.parse2Timestamp = -1; - this.resolutionTimestamp = -1; - this.lazyCompileTimestamp = -1; - this.compileTimestamp = -1; - this.executionTimestamp = -1; - - this.preparseTime = -0.0; - this.parseTime = -0.0; - this.parse2Time = -0.0; - this.resolutionTime = -0.0; - this.scopeResolutionTime = -0.0; - this.lazyCompileTime = -0.0; - this.compileTime = -0.0; - - // Lazily computed properties. - this.firstEventTimestamp = -1; - this.firstParseEventTimestamp = -1; - this.lastParseTimestamp = -1; - this.lastEventTimestamp = -1; - if (script) this.script.addFunktion(this); } getMetricBytes(name) { if (name == 'lazyCompileTimestamp') return this.getOwnBytes(); - return this.getBytes(); + return this.getOwnBytes(); } - getMetricTime(name) { + getMetricDuration(name) { if (name in kNoTimeMetrics) return 0; return this[name]; } - getFirstEvent() { + getFirstEventTimestamp() { if (this.firstEventTimestamp === -1) { this.firstEventTimestamp = timestampMin( [this.parseTimestamp, this.preparseTimestamp, @@ -564,7 +596,7 @@ class Funktion { return this.firstEventTimestamp; } - getFirstParseEvent() { + getFirstParseEventTimestamp() { if (this.firstParseEventTimestamp === -1) { this.firstParseEventTimestamp = timestampMin( [this.parseTimestamp, this.preparseTimestamp, @@ -577,23 +609,23 @@ class Funktion { return this.firstParseEventTimestamp; } - getLastParseEvent() { - if (this.lastParseTimestamp === -1) { - this.lastParseTimestamp = Math.max( - this.preparseTimestamp + this.preparseTime, - this.parseTimestamp + this.parseTime, - this.resolutionTimestamp + this.resolutionTime); - if (!(this.lastParseTimestamp > 0)) { - this.lastParseTimestamp = 0; + getLastParseEventTimestamp() { + if (this.lastParseEventTimestamp === -1) { + this.lastParseEventTimestamp = Math.max( + this.preparseTimestamp + this.preparseDuration, + this.parseTimestamp + this.parseDuration, + this.resolutionTimestamp + this.resolutionDuration); + if (!(this.lastParseEventTimestamp > 0)) { + this.lastParseEventTimestamp = 0; } } - return this.lastParseTimestamp; + return this.lastParseEventTimestamp; } - getLastEvent() { + getLastEventTimestamp() { if (this.lastEventTimestamp === -1) { - this.lastEventTimestamp = Math.max( - this.getLastParseEvent(), this.executionTimestamp); + this.lastEventTimestamp = + Math.max(this.getLastParseEventTimestamp(), this.executionTimestamp); if (!(this.lastEventTimestamp > 0)) { this.lastEventTimestamp = 0; } @@ -687,25 +719,58 @@ function startOf(timestamp, time) { class ParseProcessor extends LogReader { constructor() { super(); - let config = (processor) => { - // {script file},{script id},{start position},{end position}, - // {time},{timestamp},{function name} - return { - parsers: [null, parseInt, parseInt, parseInt, parseFloat, parseInt, null], - processor: processor - } - }; - this.dispatchTable_ = { - 'parse-full': config(this.processFull), - 'parse-function': config(this.processFunction), - 'parse-script': config(this.processScript), - 'parse-eval': config(this.processEval), - 'preparse-no-resolution': config(this.processPreparseNoResolution), - 'preparse-resolution': config(this.processPreparseResolution), - 'first-execution': config(this.processFirstExecution), - 'compile-lazy': config(this.processCompileLazy), - 'compile': config(this.processCompile) + // Avoid accidental leaking of __proto__ properties and force this object + // to be in dictionary-mode. + __proto__: null, + // "function",{event type}, + // {script id},{start position},{end position},{time},{timestamp}, + // {function name} + 'function': { + parsers: [ + parseString, parseInt, parseInt, parseInt, parseFloat, parseInt, + parseString + ], + processor: this.processFunctionEvent + }, + // "compilation-cache", "hit"|"put", {type}, {start position}, + // {end position} + 'compilation-cache': { + parsers: [parseString, parseString, parseInt, parseInt], + processor: this.processCompilationCacheEvent + }, + 'script': { + parsers: [parseString, parseInt], + processor: this.processScriptEvent + }, + // "script-details", {script_id}, {file}, {line}, {column}, {size} + 'script-details': { + parsers: [parseInt, parseString, parseInt, parseInt, parseInt], + processor: this.processScriptDetails + }, + 'script-source': { + parsers: [parseInt, parseString, parseString], + processor: this.processScriptSource + }, + }; + this.functionEventDispatchTable_ = { + // Avoid accidental leaking of __proto__ properties and force this object + // to be in dictionary-mode. + __proto__: null, + 'full-parse': this.processFull.bind(this), + 'parse-function': this.processParseFunction.bind(this), + // TODO(cbruni): make sure arrow functions emit a normal parse-function + // event. + 'parse': this.processParseFunction.bind(this), + 'parse-script': this.processScript.bind(this), + 'parse-eval': this.processEval.bind(this), + 'preparse-no-resolution': this.processPreparseNoResolution.bind(this), + 'preparse-resolution': this.processPreparseResolution.bind(this), + 'first-execution': this.processFirstExecution.bind(this), + 'compile-lazy': this.processCompileLazy.bind(this), + 'compile': this.processCompile.bind(this), + 'compile-eval': this.processCompileEval.bind(this), + 'optimize-lazy': this.processOptimizeLazy.bind(this) }; this.idToScript = new Map(); @@ -713,9 +778,9 @@ class ParseProcessor extends LogReader { this.nameToFunction = new Map(); this.scripts = []; this.totalScript = new TotalScript(); - this.firstEvent = -1; - this.lastParseEvent = -1; - this.lastEvent = -1; + this.firstEventTimestamp = -1; + this.lastParseEventTimestamp = -1; + this.lastEventTimestamp = -1; } print() { @@ -755,54 +820,60 @@ class ParseProcessor extends LogReader { this.scripts = Array.from(this.idToScript.values()) .filter(each => !each.isNative); - this.scripts.forEach(script => script.finalize()); - this.scripts.forEach(script => script.calculateMetrics(false)); + this.scripts.forEach(script => { + script.finalize(); + script.calculateMetrics(false) + }); - this.firstEvent = - timestampMin(this.scripts.map(each => each.firstEvent)); - this.lastParseEvent = this.scripts.reduce( - (max, script) => Math.max(max, script.lastParseEvent), -1); - this.lastEvent = this.scripts.reduce( - (max, script) => Math.max(max, script.lastEvent), -1); + this.firstEventTimestamp = + timestampMin(this.scripts.map(each => each.firstEventTimestamp)); + this.lastParseEventTimestamp = this.scripts.reduce( + (max, script) => Math.max(max, script.lastParseEventTimestamp), -1); + this.lastEventTimestamp = this.scripts.reduce( + (max, script) => Math.max(max, script.lastEventTimestamp), -1); this.scripts.forEach(script => this.totalScript.addAllFunktions(script)); this.totalScript.calculateMetrics(true); - const series = [ - ['firstParseEvent', 'Any Parse Event'], - ['parse', 'Parsing'], - ['preparse', 'Preparsing'], - ['resolution', 'Preparsing with Var. Resolution'], - ['lazyCompile', 'Lazy Compilation'], - ['compile', 'Eager Compilation'], - ['execution', 'First Execution'], - ]; - let metrics = series.map(each => each[0]); - this.totalScript.getAccumulatedTimeMetrics(metrics, 0, this.lastEvent, 10); - }; + const series = { + firstParseEvent: 'Any Parse Event', + parse: 'Parsing', + preparse: 'Preparsing', + resolution: 'Preparsing with Var. Resolution', + lazyCompile: 'Lazy Compilation', + compile: 'Eager Compilation', + execution: 'First Execution', + }; + let metrics = Object.keys(series); + this.totalScript.getAccumulatedTimeMetrics( + metrics, 0, this.lastEventTimestamp, 10); + } + + processFunctionEvent( + eventName, scriptId, startPosition, endPosition, duration, timestamp, + functionName) { + let handlerFn = this.functionEventDispatchTable_[eventName]; + if (handlerFn === undefined) { + console.error('Couldn\'t find handler for function event:' + eventName); + } + handlerFn( + scriptId, startPosition, endPosition, duration, timestamp, + functionName); + } addEntry(entry) { this.entries.push(entry); } - lookupScript(file, id) { - // During preparsing we only have the temporary ranges and no script yet. - let script; - if (this.idToScript.has(id)) { - script = this.idToScript.get(id); - } else { - script = new Script(file, id); - this.idToScript.set(id, script); - } - if (file.length > 0 && script.file.length === 0) { - script.setFile(file); - this.fileToScript.set(file, script); - } - return script; + lookupScript(id) { + return this.idToScript.get(id); } - lookupFunktion(file, scriptId, - startPosition, endPosition, time, timestamp, functionName) { - let script = this.lookupScript(file, scriptId); + getOrCreateFunction( + scriptId, startPosition, endPosition, duration, timestamp, functionName) { + if (scriptId == -1) { + return this.lookupFunktionByRange(startPosition, endPosition); + } + let script = this.lookupScript(scriptId); let funktion = script.funktionAtPosition(startPosition); if (funktion === void 0) { funktion = new Funktion(functionName, startPosition, endPosition, script); @@ -810,60 +881,108 @@ class ParseProcessor extends LogReader { return funktion; } - processEval(file, scriptId, startPosition, - endPosition, time, timestamp, functionName) { - let script = this.lookupScript(file, scriptId); + // Iterates over all functions and tries to find matching ones. + lookupFunktionsByRange(start, end) { + let results = []; + this.idToScript.forEach(script => { + script.forEach(funktion => { + if (funktion.startPostion == start && funktion.endPosition == end) { + results.push(funktion); + } + }); + }); + return results; + } + lookupFunktionByRange(start, end) { + let results = this.lookupFunktionsByRange(start, end); + if (results.length != 1) throw "Could not find unique function by range"; + return results[0]; + } + + processScriptEvent(eventName, scriptId) { + if (['create', 'reserve-id', 'deserialize'].includes(eventName)) { + if (this.idToScript.has(scriptId)) return; + let script = new Script(scriptId); + this.idToScript.set(scriptId, script); + if (eventName == 'deserialize') script.isDeserialized = true; + return; + } else if (eventName === 'background-compile') { + this.idToScript.get(scriptId).isBackgroundCompiled = true; + return; + } + console.error('Unhandled script event: ' + eventName); + } + + processScriptDetails(scriptId, file, startLine, startColumn, size) { + let script = this.lookupScript(scriptId); + script.setFile(file); + } + + processScriptSource(scriptId, url, source) { + let script = this.lookupScript(scriptId); + script.source = source; + } + + processEval( + scriptId, startPosition, endPosition, duration, timestamp, functionName) { + let script = this.lookupScript(scriptId); script.isEval = true; } - processFull(file, scriptId, startPosition, - endPosition, time, timestamp, functionName) { - let funktion = this.lookupFunktion(...arguments); + processFull( + scriptId, startPosition, endPosition, duration, timestamp, functionName) { + if (startPosition == 0) { + // This should only happen for eval. + let script = this.lookupScript(scriptId); + script.isEval = true; + return; + } + let funktion = this.getOrCreateFunction(...arguments); // TODO(cbruni): this should never happen, emit differen event from the // parser. if (funktion.parseTimestamp > 0) return; - funktion.parseTimestamp = startOf(timestamp, time); - funktion.parseTime = time; + funktion.parseTimestamp = startOf(timestamp, duration); + funktion.parseDuration = duration; } - processFunction(file, scriptId, startPosition, - endPosition, time, timestamp, functionName) { - let funktion = this.lookupFunktion(...arguments); - funktion.parseTimestamp = startOf(timestamp, time); - funktion.parseTime = time; + processParseFunction( + scriptId, startPosition, endPosition, duration, timestamp, functionName) { + let funktion = this.getOrCreateFunction(...arguments); + funktion.parseTimestamp = startOf(timestamp, duration); + funktion.parseDuration = duration; } - processScript(file, scriptId, startPosition, - endPosition, time, timestamp, functionName) { - // TODO timestamp and time - let script = this.lookupScript(file, scriptId); - let ts = startOf(timestamp, time); + processScript( + scriptId, startPosition, endPosition, duration, timestamp, functionName) { + // TODO timestamp and duration + let script = this.lookupScript(scriptId); + let ts = startOf(timestamp, duration); script.parseTimestamp = ts; script.firstEventTimestamp = ts; script.firstParseEventTimestamp = ts; - script.parseTime = time; + script.parseDuration = duration; } - processPreparseResolution(file, scriptId, - startPosition, endPosition, time, timestamp, functionName) { - let funktion = this.lookupFunktion(...arguments); + processPreparseResolution( + scriptId, startPosition, endPosition, duration, timestamp, functionName) { + let funktion = this.getOrCreateFunction(...arguments); // TODO(cbruni): this should never happen, emit different event from the // parser. if (funktion.resolutionTimestamp > 0) return; - funktion.resolutionTimestamp = startOf(timestamp, time); - funktion.resolutionTime = time; + funktion.resolutionTimestamp = startOf(timestamp, duration); + funktion.resolutionDuration = duration; } - processPreparseNoResolution(file, scriptId, - startPosition, endPosition, time, timestamp, functionName) { - let funktion = this.lookupFunktion(...arguments); - funktion.preparseTimestamp = startOf(timestamp, time); - funktion.preparseTime = time; + processPreparseNoResolution( + scriptId, startPosition, endPosition, duration, timestamp, functionName) { + let funktion = this.getOrCreateFunction(...arguments); + funktion.preparseTimestamp = startOf(timestamp, duration); + funktion.preparseDuration = duration; } - processFirstExecution(file, scriptId, - startPosition, endPosition, time, timestamp, functionName) { - let script = this.lookupScript(file, scriptId); + processFirstExecution( + scriptId, startPosition, endPosition, duration, timestamp, functionName) { + let script = this.lookupScript(scriptId); if (startPosition === 0) { // undefined = eval fn execution if (script) { @@ -879,28 +998,43 @@ class ParseProcessor extends LogReader { } } - processCompileLazy(file, scriptId, - startPosition, endPosition, time, timestamp, functionName) { - let funktion = this.lookupFunktion(...arguments); - funktion.lazyCompileTimestamp = startOf(timestamp, time); - funktion.lazyCompileTime = time; - script.firstPar + processCompileLazy( + scriptId, startPosition, endPosition, duration, timestamp, functionName) { + let funktion = this.getOrCreateFunction(...arguments); + funktion.lazyCompileTimestamp = startOf(timestamp, duration); + funktion.lazyCompileDuration = duration; } - processCompile(file, scriptId, - startPosition, endPosition, time, timestamp, functionName) { - - let script = this.lookupScript(file, scriptId); + processCompile( + scriptId, startPosition, endPosition, duration, timestamp, functionName) { + let script = this.lookupScript(scriptId); if (startPosition === 0) { - script.compileTimestamp = startOf(timestamp, time); - script.compileTime = time; + script.compileTimestamp = startOf(timestamp, duration); + script.compileDuration = duration; script.bytesTotal = endPosition; } else { let funktion = script.funktionAtPosition(startPosition); - funktion.compileTimestamp = startOf(timestamp, time); - funktion.compileTime = time; + if (funktion === undefined) { + // This should not happen since any funktion has to be parsed first. + console.log("processCompile funktion not found", ...arguments); + } + funktion.compileTimestamp = startOf(timestamp, duration); + funktion.compileDuration = duration; } } + + processCompileEval( + scriptId, startPosition, endPosition, duration, timestamp, functionName) { + } + + processOptimizeLazy( + scriptId, startPosition, endPosition, duration, timestamp, functionName) { + } + + processCompilationCacheEvent(eventType, cacheType, startPosition, + endPosition) { + } + } diff --git a/deps/v8/tools/parser-shell.cc b/deps/v8/tools/parser-shell.cc deleted file mode 100644 index bcee2b82582f1b..00000000000000 --- a/deps/v8/tools/parser-shell.cc +++ /dev/null @@ -1,162 +0,0 @@ -// Copyright 2014 the V8 project authors. All rights reserved. -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#include -#include -#include -#include -#include -#include -#include "src/v8.h" - -#include "include/libplatform/libplatform.h" -#include "src/api.h" -#include "src/compiler.h" -#include "src/objects-inl.h" -#include "src/parsing/parse-info.h" -#include "src/parsing/parsing.h" -#include "src/parsing/preparse-data.h" -#include "src/parsing/preparser.h" -#include "src/parsing/scanner-character-streams.h" -#include "tools/shell-utils.h" - -using namespace v8::internal; - -class StringResource8 : public v8::String::ExternalOneByteStringResource { - public: - StringResource8(const char* data, int length) - : data_(data), length_(length) { } - virtual size_t length() const { return length_; } - virtual const char* data() const { return data_; } - - private: - const char* data_; - int length_; -}; - -v8::base::TimeDelta RunBaselineParser(const char* fname, Encoding encoding, - int repeat, v8::Isolate* isolate, - v8::Local context) { - int length = 0; - const byte* source = ReadFileAndRepeat(fname, &length, repeat); - v8::Local source_handle; - switch (encoding) { - case UTF8: { - source_handle = v8::String::NewFromUtf8( - isolate, reinterpret_cast(source), - v8::NewStringType::kNormal).ToLocalChecked(); - break; - } - case UTF16: { - source_handle = - v8::String::NewFromTwoByte( - isolate, reinterpret_cast(source), - v8::NewStringType::kNormal, length / 2).ToLocalChecked(); - break; - } - case LATIN1: { - StringResource8* string_resource = - new StringResource8(reinterpret_cast(source), length); - source_handle = v8::String::NewExternalOneByte(isolate, string_resource) - .ToLocalChecked(); - break; - } - } - v8::base::TimeDelta parse_time1; - Handle - - - - - - - - - - - - - - - - - - - + + diff --git a/deps/v8/tools/turbolizer/lang-disassembly.js b/deps/v8/tools/turbolizer/lang-disassembly.js deleted file mode 100644 index 590f9fd804f6a8..00000000000000 --- a/deps/v8/tools/turbolizer/lang-disassembly.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2015 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -PR.registerLangHandler( - PR.createSimpleLexer( - [ - [PR.PR_STRING, /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$))/, null, '\''], - [PR.PR_PLAIN, /^\s+/, null, ' \r\n\t\xA0'] - ], - [ // fallthroughStylePatterns - [PR.PR_COMMENT, /;; debug: position \d+/, null], - ]), - ['disassembly']); diff --git a/deps/v8/tools/turbolizer/package-lock.json b/deps/v8/tools/turbolizer/package-lock.json new file mode 100644 index 00000000000000..05a5daf031de72 --- /dev/null +++ b/deps/v8/tools/turbolizer/package-lock.json @@ -0,0 +1,613 @@ +{ + "name": "turbolizer", + "version": "0.1.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/commander": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/@types/commander/-/commander-2.12.2.tgz", + "integrity": "sha512-0QEFiR8ljcHp9bAbWxecjVRuAMr16ivPiGOw6KFQBVrVd0RQIcM3xKdRisH2EDWgVWujiYtHwhSkSUoAAGzH7Q==", + "dev": true, + "requires": { + "commander": "*" + } + }, + "@types/d3": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/d3/-/d3-5.0.0.tgz", + "integrity": "sha512-BVfPw7ha+UgsG24v6ymerMY4+pJgQ/6p+hJA4loCeaaqV9snGS/G6ReVaQEn8Himn67dWn/Je9WhRbnDO7MzLw==", + "requires": { + "@types/d3-array": "*", + "@types/d3-axis": "*", + "@types/d3-brush": "*", + "@types/d3-chord": "*", + "@types/d3-collection": "*", + "@types/d3-color": "*", + "@types/d3-contour": "*", + "@types/d3-dispatch": "*", + "@types/d3-drag": "*", + "@types/d3-dsv": "*", + "@types/d3-ease": "*", + "@types/d3-fetch": "*", + "@types/d3-force": "*", + "@types/d3-format": "*", + "@types/d3-geo": "*", + "@types/d3-hierarchy": "*", + "@types/d3-interpolate": "*", + "@types/d3-path": "*", + "@types/d3-polygon": "*", + "@types/d3-quadtree": "*", + "@types/d3-random": "*", + "@types/d3-scale": "*", + "@types/d3-scale-chromatic": "*", + "@types/d3-selection": "*", + "@types/d3-shape": "*", + "@types/d3-time": "*", + "@types/d3-time-format": "*", + "@types/d3-timer": "*", + "@types/d3-transition": "*", + "@types/d3-voronoi": "*", + "@types/d3-zoom": "*" + } + }, + "@types/d3-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-1.2.1.tgz", + "integrity": "sha512-YBaAfimGdWE4nDuoGVKsH89/dkz2hWZ0i8qC+xxqmqi+XJ/aXiRF0jPtzXmN7VdkpVjy1xuDmM5/m1FNuB6VWA==" + }, + "@types/d3-axis": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-1.0.10.tgz", + "integrity": "sha512-5YF0wfdQMPKw01VAAupLIlg/T4pn5M3/vL9u0KZjiemnVnnKBEWE24na4X1iW+TfZiYJ8j+BgK2KFYnAAT54Ug==", + "requires": { + "@types/d3-selection": "*" + } + }, + "@types/d3-brush": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-1.0.8.tgz", + "integrity": "sha512-9Thv09jvolu9T1BE3fHmIeYSgbwSpdxtF6/A5HZEDjSTfgtA0mtaXRk5AiWOo0KjuLsI+/7ggD3ZGN5Ye8KXPQ==", + "requires": { + "@types/d3-selection": "*" + } + }, + "@types/d3-chord": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-1.0.7.tgz", + "integrity": "sha512-WbCN7SxhZMpQQw46oSjAovAmvl3IdjhLuQ4r7AXCzNKyxtXXBWuihSPZ4bVwFQF3+S2z37i9d4hfUBatcSJpog==" + }, + "@types/d3-collection": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-collection/-/d3-collection-1.0.7.tgz", + "integrity": "sha512-vR3BT0GwHc5y93Jv6bxn3zoxP/vGu+GdXu/r1ApjbP9dLk9I2g6NiV7iP/QMQSuFZd0It0n/qWrfXHxCWwHIkg==" + }, + "@types/d3-color": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-1.2.1.tgz", + "integrity": "sha512-xwb1tqvYNWllbHuhMFhiXk63Imf+QNq/dJdmbXmr2wQVnwGenCuj3/0IWJ9hdIFQIqzvhT7T37cvx93jtAsDbQ==" + }, + "@types/d3-contour": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-1.2.1.tgz", + "integrity": "sha512-p8iC4KeVFyT3qRTGQRj0Jf5QDdPsDUevBEnma7gEsY1yDolVSLanG2eFAiLV+xj8/5DK7oU7Ey8z0drs3pbsug==", + "requires": { + "@types/d3-array": "*", + "@types/geojson": "*" + } + }, + "@types/d3-dispatch": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-1.0.6.tgz", + "integrity": "sha512-xyWJQMr832vqhu6fD/YqX+MSFBWnkxasNhcStvlhqygXxj0cKqPft0wuGoH5TIq5ADXgP83qeNVa4R7bEYN3uA==" + }, + "@types/d3-drag": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-1.2.1.tgz", + "integrity": "sha512-J9liJ4NNeV0oN40MzPiqwWjqNi3YHCRtHNfNMZ1d3uL9yh1+vDuo346LBEr8yyBm30WHvrHssAkExVZrGCswtA==", + "requires": { + "@types/d3-selection": "*" + } + }, + "@types/d3-dsv": { + "version": "1.0.33", + "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-1.0.33.tgz", + "integrity": "sha512-jx5YvaVC3Wfh6LobaiWTeU1NkvL2wPmmpmajk618bD+xVz98yNWzmZMvmlPHGK0HXbMeHmW/6oVX48V9AH1bRQ==" + }, + "@types/d3-ease": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-1.0.7.tgz", + "integrity": "sha1-k6MBhovp4VBh89RDQ7GrP4rLbwk=" + }, + "@types/d3-fetch": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-1.1.2.tgz", + "integrity": "sha512-w6ANZv/mUh+6IV3drT22zgPWMRobzuGXhzOZC8JPD+ygce0/Vx6vTci3m3dizkocnQQCOwNbrWWWPYqpWiKzRQ==", + "requires": { + "@types/d3-dsv": "*" + } + }, + "@types/d3-force": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-1.1.1.tgz", + "integrity": "sha512-ePkELuaFWY4yOuf+Bvx5Xd+ihFiYG4bdnW0BlvigovIm8Sob2t76e9RGO6lybQbv6AlW9Icn9HuZ9fmdzEoJyg==" + }, + "@types/d3-format": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-1.3.0.tgz", + "integrity": "sha512-ZiY4j3iJvAdOwzwW24WjlZbUNvqOsnPAMfPBmdXqxj3uKJbrzBlRrdGl5uC89pZpFs9Dc92E81KcwG2uEgkIZA==" + }, + "@types/d3-geo": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-1.10.3.tgz", + "integrity": "sha512-hfdaxM2L0wA9mDZrrSf2o+DyhEpnJYCiAN+lHFtpfZOVCQrYBA5g33sGRpUbAvjSMyO5jkHbftMWPEhuCMChSg==", + "requires": { + "@types/geojson": "*" + } + }, + "@types/d3-hierarchy": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-1.1.2.tgz", + "integrity": "sha512-L+Ht4doqlCIH8jYN2AC1mYIOj13OxlRhdWNWXv2pc3o5A9i3YmQ0kz6A7w8c+Ujylfusi/FO+zVlVnQoOHc2Qw==" + }, + "@types/d3-interpolate": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-1.2.0.tgz", + "integrity": "sha512-qM9KlUrqbwIhBRtw9OtAEbkis1AxsOJEun2uxaX/vEsBp3vyNBmhPz9boXXEqic9ZRi7fCpUNRwyZvxa0PioIw==", + "requires": { + "@types/d3-color": "*" + } + }, + "@types/d3-path": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-1.0.7.tgz", + "integrity": "sha512-U8dFRG+8WhkLJr2sxZ9Cw/5WeRgBnNqMxGdA1+Z0+ZG6tK0s75OQ4OXnxeyfKuh6E4wQPY8OAKr1+iNDx01BEQ==" + }, + "@types/d3-polygon": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-1.0.6.tgz", + "integrity": "sha512-E6Kyodn9JThgLq20nxSbEce9ow5/ePgm9PX2EO6W1INIL4DayM7cFaiG10DStuamjYAd0X4rntW2q+GRjiIktw==" + }, + "@types/d3-quadtree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-1.0.5.tgz", + "integrity": "sha1-HOHmWerkUw3wyxJ/KX8XQaNnqC4=" + }, + "@types/d3-random": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-1.1.1.tgz", + "integrity": "sha512-jUPeBq1XKK9/5XasTvy5QAUwFeMsjma2yt/nP02yC2Tijovx7i/W5776U/HZugxc5SSmtpx4Z3g9KFVon0QrjQ==" + }, + "@types/d3-scale": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-2.0.1.tgz", + "integrity": "sha512-D5ZWv8ToLvqacE7XkdMNHMiiVDULdDxT7FMMGU0YJC3/nVzBmApjyTyxracUWOQyY3KK7YhZ05on8pOcNi0dfQ==", + "requires": { + "@types/d3-time": "*" + } + }, + "@types/d3-scale-chromatic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-1.2.0.tgz", + "integrity": "sha512-bhS2SVzUzRtrxp1REhGCfHmj8pyDv9oDmsonYiPvBl8KCxPJTxnfXBF39PzAJrYnRKM41TR0kQzsJvL+NmcDtg==" + }, + "@types/d3-selection": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-1.3.1.tgz", + "integrity": "sha512-G+eO+2G1iW3GNrROxhoU+ar+bIJbQq1QkxcfhwjQ19xA20n3T31j5pSJqAOWvPSoFTz4Ets/DQgYhmgT4jepDg==" + }, + "@types/d3-shape": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-1.2.3.tgz", + "integrity": "sha512-iP9TcX0EVi+LlX+jK9ceS+yhEz5abTitF+JaO2ugpRE/J+bccaYLe/0/3LETMmdaEkYarIyboZW8OF67Mpnj1w==", + "requires": { + "@types/d3-path": "*" + } + }, + "@types/d3-time": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-1.0.8.tgz", + "integrity": "sha512-/UCphyyw97YAq4zKsuXH33R3UNB4jDSza0fLvMubWr/ONh9IePi1NbgFP222blhiCe724ebJs8U87+aDuAq/jA==" + }, + "@types/d3-time-format": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-2.1.0.tgz", + "integrity": "sha512-/myT3I7EwlukNOX2xVdMzb8FRgNzRMpsZddwst9Ld/VFe6LyJyRp0s32l/V9XoUzk+Gqu56F/oGk6507+8BxrA==" + }, + "@types/d3-timer": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-1.0.7.tgz", + "integrity": "sha512-830pT+aYZrgbA91AuynP3KldfB1A1s60d0gKiV+L7JcSKSJapUzUffAm8VZod7RQOxF5SzoItV6cvrTzjbmrJQ==" + }, + "@types/d3-transition": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-1.1.1.tgz", + "integrity": "sha512-GHTghl0YYB8gGgbyKxVLHyAp9Na0HqsX2U7M0u0lGw4IdfEaslooykweZ8fDHW13T+KZeZAuzhbmqBZVFO+6kg==", + "requires": { + "@types/d3-selection": "*" + } + }, + "@types/d3-voronoi": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-voronoi/-/d3-voronoi-1.1.7.tgz", + "integrity": "sha512-/dHFLK5jhXTb/W4XEQcFydVk8qlIAo85G3r7+N2fkBFw190l0R1GQ8C1VPeXBb2GfSU5GbT2hjlnE7i7UY5Gvg==" + }, + "@types/d3-zoom": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-1.7.1.tgz", + "integrity": "sha512-Ofjwz6Pt53tRef9TAwwayN+JThNVYC/vFOepa/H4KtwjhsqkmEseHvc2jpJM7vye5PQ5XHtTSOpdY4Y/6xZWEg==", + "requires": { + "@types/d3-interpolate": "*", + "@types/d3-selection": "*" + } + }, + "@types/geojson": { + "version": "7946.0.3", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.3.tgz", + "integrity": "sha512-BYHiG1vQJ7T93uswzuXZ0OBPWqj5tsAPtaMDQADV8sn2InllXarwg9llr6uaW22q1QCwBZ81gVajOpYWzjesug==" + }, + "@types/semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==", + "dev": true + }, + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==" + }, + "commandpost": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/commandpost/-/commandpost-1.3.0.tgz", + "integrity": "sha512-T62tyrmYTkaRDbV2z1k2yXTyxk0cFptXYwo1cUbnfHtp7ThLgQ9/90jG1Ym5WLZgFhvOTaHA5VSARWJ9URpLDw==", + "dev": true + }, + "d3": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-5.4.0.tgz", + "integrity": "sha1-CQGZqFadHeI9BKP/B/4TYJX+p04=", + "requires": { + "d3-array": "1", + "d3-axis": "1", + "d3-brush": "1", + "d3-chord": "1", + "d3-collection": "1", + "d3-color": "1", + "d3-contour": "1", + "d3-dispatch": "1", + "d3-drag": "1", + "d3-dsv": "1", + "d3-ease": "1", + "d3-fetch": "1", + "d3-force": "1", + "d3-format": "1", + "d3-geo": "1", + "d3-hierarchy": "1", + "d3-interpolate": "1", + "d3-path": "1", + "d3-polygon": "1", + "d3-quadtree": "1", + "d3-random": "1", + "d3-scale": "2", + "d3-scale-chromatic": "1", + "d3-selection": "1", + "d3-shape": "1", + "d3-time": "1", + "d3-time-format": "2", + "d3-timer": "1", + "d3-transition": "1", + "d3-voronoi": "1", + "d3-zoom": "1" + } + }, + "d3-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.1.tgz", + "integrity": "sha512-CyINJQ0SOUHojDdFDH4JEM0552vCR1utGyLHegJHyYH0JyCpSeTPxi4OBqHMA2jJZq4NH782LtaJWBImqI/HBw==" + }, + "d3-axis": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.8.tgz", + "integrity": "sha1-MacFoLU15ldZ3hQXOjGTMTfxjvo=" + }, + "d3-brush": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.0.4.tgz", + "integrity": "sha1-AMLyOAGfJPbAoZSibUGhUw/+e8Q=", + "requires": { + "d3-dispatch": "1", + "d3-drag": "1", + "d3-interpolate": "1", + "d3-selection": "1", + "d3-transition": "1" + } + }, + "d3-chord": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.4.tgz", + "integrity": "sha1-fexPC6iG9xP+ERxF92NBT290yiw=", + "requires": { + "d3-array": "1", + "d3-path": "1" + } + }, + "d3-collection": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.4.tgz", + "integrity": "sha1-NC39EoN8kJdPM/HMCnha6lcNzcI=" + }, + "d3-color": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.2.0.tgz", + "integrity": "sha512-dmL9Zr/v39aSSMnLOTd58in2RbregCg4UtGyUArvEKTTN6S3HKEy+ziBWVYo9PTzRyVW+pUBHUtRKz0HYX+SQg==" + }, + "d3-contour": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-1.2.0.tgz", + "integrity": "sha512-nDzZ2KDnrgTrhMjV8TH0RNrljk6uPNAGkG/v/1SKNVvJa2JU8szjh7o2ZYTX8yufA2oCI5HyeMqbzwiB+oDoIA==", + "requires": { + "d3-array": "^1.1.1" + } + }, + "d3-dispatch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.3.tgz", + "integrity": "sha1-RuFJHqqbWMNY/OW+TovtYm54cfg=" + }, + "d3-drag": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.1.tgz", + "integrity": "sha512-Cg8/K2rTtzxzrb0fmnYOUeZHvwa4PHzwXOLZZPwtEs2SKLLKLXeYwZKBB+DlOxUvFmarOnmt//cU4+3US2lyyQ==", + "requires": { + "d3-dispatch": "1", + "d3-selection": "1" + } + }, + "d3-dsv": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.0.8.tgz", + "integrity": "sha512-IVCJpQ+YGe3qu6odkPQI0KPqfxkhbP/oM1XhhE/DFiYmcXKfCRub4KXyiuehV1d4drjWVXHUWx4gHqhdZb6n/A==", + "requires": { + "commander": "2", + "iconv-lite": "0.4", + "rw": "1" + } + }, + "d3-ease": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.3.tgz", + "integrity": "sha1-aL+8NJM4o4DETYrMT7wzBKotjA4=" + }, + "d3-fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-1.1.0.tgz", + "integrity": "sha512-j+V4vtT6dceQbcKYLtpTueB8Zvc+wb9I93WaFtEQIYNADXl0c1ZJMN3qQo0CssiTsAqK8pePwc7f4qiW+b0WOg==", + "requires": { + "d3-dsv": "1" + } + }, + "d3-force": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.1.0.tgz", + "integrity": "sha512-2HVQz3/VCQs0QeRNZTYb7GxoUCeb6bOzMp/cGcLa87awY9ZsPvXOGeZm0iaGBjXic6I1ysKwMn+g+5jSAdzwcg==", + "requires": { + "d3-collection": "1", + "d3-dispatch": "1", + "d3-quadtree": "1", + "d3-timer": "1" + } + }, + "d3-format": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.3.0.tgz", + "integrity": "sha512-ycfLEIzHVZC3rOvuBOKVyQXSiUyCDjeAPIj9n/wugrr+s5AcTQC2Bz6aKkubG7rQaQF0SGW/OV4UEJB9nfioFg==" + }, + "d3-geo": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.10.0.tgz", + "integrity": "sha512-VK/buVGgexthTTqGRNXQ/LSo3EbOFu4p2Pjud5drSIaEnOaF2moc8A3P7WEljEO1JEBEwbpAJjFWMuJiUtoBcw==", + "requires": { + "d3-array": "1" + } + }, + "d3-hierarchy": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.6.tgz", + "integrity": "sha512-nn4bhBnwWnMSoZgkBXD7vRyZ0xVUsNMQRKytWYHhP1I4qHw+qzApCTgSQTZqMdf4XXZbTMqA59hFusga+THA/g==" + }, + "d3-interpolate": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.2.0.tgz", + "integrity": "sha512-zLvTk8CREPFfc/2XglPQriAsXkzoRDAyBzndtKJWrZmHw7kmOWHNS11e40kPTd/oGk8P5mFJW5uBbcFQ+ybxyA==", + "requires": { + "d3-color": "1" + } + }, + "d3-path": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.5.tgz", + "integrity": "sha1-JB6xhJvZ6egCHA0KeZ+KDo5EF2Q=" + }, + "d3-polygon": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.3.tgz", + "integrity": "sha1-FoiOkCZGCTPysXllKtN4Ik04LGI=" + }, + "d3-quadtree": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.3.tgz", + "integrity": "sha1-rHmH4+I/6AWpkPKOG1DTj8uCJDg=" + }, + "d3-random": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.0.tgz", + "integrity": "sha1-ZkLlBsb6OmSFldKyRpeIqNElKdM=" + }, + "d3-scale": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.0.0.tgz", + "integrity": "sha512-Sa2Ny6CoJT7x6dozxPnvUQT61epGWsgppFvnNl8eJEzfJBG0iDBBTJAtz2JKem7Mb+NevnaZiDiIDHsuWkv6vg==", + "requires": { + "d3-array": "^1.2.0", + "d3-collection": "1", + "d3-format": "1", + "d3-interpolate": "1", + "d3-time": "1", + "d3-time-format": "2" + } + }, + "d3-scale-chromatic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.3.0.tgz", + "integrity": "sha512-YwMbiaW2bStWvQFByK8hA6hk7ToWflspIo2TRukCqERd8isiafEMBXmwfh8c7/0Z94mVvIzIveRLVC6RAjhgeA==", + "requires": { + "d3-color": "1", + "d3-interpolate": "1" + } + }, + "d3-selection": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.3.0.tgz", + "integrity": "sha512-qgpUOg9tl5CirdqESUAu0t9MU/t3O9klYfGfyKsXEmhyxyzLpzpeh08gaxBUTQw1uXIOkr/30Ut2YRjSSxlmHA==" + }, + "d3-shape": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.2.0.tgz", + "integrity": "sha1-RdAVOPBkuv0F6j1tLLdI/YxB93c=", + "requires": { + "d3-path": "1" + } + }, + "d3-time": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.0.8.tgz", + "integrity": "sha512-YRZkNhphZh3KcnBfitvF3c6E0JOFGikHZ4YqD+Lzv83ZHn1/u6yGenRU1m+KAk9J1GnZMnKcrtfvSktlA1DXNQ==" + }, + "d3-time-format": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.1.1.tgz", + "integrity": "sha512-8kAkymq2WMfzW7e+s/IUNAtN/y3gZXGRrdGfo6R8NKPAA85UBTxZg5E61bR6nLwjPjj4d3zywSQe1CkYLPFyrw==", + "requires": { + "d3-time": "1" + } + }, + "d3-timer": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.7.tgz", + "integrity": "sha512-vMZXR88XujmG/L5oB96NNKH5lCWwiLM/S2HyyAQLcjWJCloK5shxta4CwOFYLZoY3AWX73v8Lgv4cCAdWtRmOA==" + }, + "d3-transition": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.1.1.tgz", + "integrity": "sha512-xeg8oggyQ+y5eb4J13iDgKIjUcEfIOZs2BqV/eEmXm2twx80wTzJ4tB4vaZ5BKfz7XsI/DFmQL5me6O27/5ykQ==", + "requires": { + "d3-color": "1", + "d3-dispatch": "1", + "d3-ease": "1", + "d3-interpolate": "1", + "d3-selection": "^1.1.0", + "d3-timer": "1" + } + }, + "d3-voronoi": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.2.tgz", + "integrity": "sha1-Fodmfo8TotFYyAwUgMWinLDYlzw=" + }, + "d3-zoom": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.7.1.tgz", + "integrity": "sha512-sZHQ55DGq5BZBFGnRshUT8tm2sfhPHFnOlmPbbwTkAoPeVdRTkB4Xsf9GCY0TSHrTD8PeJPZGmP/TpGicwJDJQ==", + "requires": { + "d3-dispatch": "1", + "d3-drag": "1", + "d3-interpolate": "1", + "d3-selection": "1", + "d3-transition": "1" + } + }, + "editorconfig": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.0.tgz", + "integrity": "sha512-j7JBoj/bpNzvoTQylfRZSc85MlLNKWQiq5y6gwKhmqD2h1eZ+tH4AXbkhEJD468gjDna/XMx2YtSkCxBRX9OGg==", + "dev": true, + "requires": { + "@types/commander": "^2.11.0", + "@types/semver": "^5.4.0", + "commander": "^2.11.0", + "lru-cache": "^4.1.1", + "semver": "^5.4.1", + "sigmund": "^1.0.1" + } + }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "lru-cache": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", + "dev": true + }, + "typescript": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.1.tgz", + "integrity": "sha512-h6pM2f/GDchCFlldnriOhs1QHuwbnmj6/v7499eMHqPeW4V2G0elua2eIc2nu8v2NdHV0Gm+tzX83Hr6nUFjQA==", + "dev": true + }, + "typescript-formatter": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/typescript-formatter/-/typescript-formatter-7.2.2.tgz", + "integrity": "sha512-V7vfI9XArVhriOTYHPzMU2WUnm5IMdu9X/CPxs8mIMGxmTBFpDABlbkBka64PZJ9/xgQeRpK8KzzAG4MPzxBDQ==", + "dev": true, + "requires": { + "commandpost": "^1.0.0", + "editorconfig": "^0.15.0" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } +} diff --git a/deps/v8/tools/turbolizer/package.json b/deps/v8/tools/turbolizer/package.json new file mode 100644 index 00000000000000..5c77b303130e5e --- /dev/null +++ b/deps/v8/tools/turbolizer/package.json @@ -0,0 +1,26 @@ +{ + "name": "turbolizer", + "version": "0.1.0", + "description": "Visualization tool for V8 TurboFan IR graphs", + "main": "index.html", + "scripts": { + "build": "tsc", + "watch": "tsc --watch", + "deploy": "./deploy.sh", + "format": "tsfmt -r" + }, + "author": "The V8 team", + "license": "MIT", + "dependencies": { + "@types/d3": "^5.0.0", + "d3": "^5.4.0" + }, + "repository": { + "type": "git", + "url": "https://github.com/v8/v8.git" + }, + "devDependencies": { + "typescript": "^2.9.1", + "typescript-formatter": "^7.2.2" + } +} diff --git a/deps/v8/tools/turbolizer/schedule-view.js b/deps/v8/tools/turbolizer/schedule-view.js deleted file mode 100644 index ef4789211d3c48..00000000000000 --- a/deps/v8/tools/turbolizer/schedule-view.js +++ /dev/null @@ -1,128 +0,0 @@ -// Copyright 2015 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -"use strict"; - -class ScheduleView extends TextView { - constructor(id, broker) { - super(id, broker, null, false); - let view = this; - let BLOCK_STYLE = { - css: 'tag' - }; - const BLOCK_HEADER_STYLE = { - css: 'com', - block_id: -1, - location: function(text) { - let matches = /\d+/.exec(text); - if (!matches) return undefined; - BLOCK_HEADER_STYLE.block_id = Number(matches[0]); - return { - block_id: BLOCK_HEADER_STYLE.block_id - }; - }, - }; - const BLOCK_LINK_STYLE = { - css: 'tag', - link: function(text) { - let id = Number(text.substr(1)); - view.select(function(location) { return location.block_id == id; }, true, true); - } - }; - const ID_STYLE = { - css: 'tag', - location: function(text) { - let matches = /\d+/.exec(text); - return { - node_id: Number(matches[0]), - block_id: BLOCK_HEADER_STYLE.block_id - }; - }, - }; - const ID_LINK_STYLE = { - css: 'tag', - link: function(text) { - let id = Number(text); - view.select(function(location) { return location.node_id == id; }, true, true); - } - }; - const NODE_STYLE = { css: 'kwd' }; - const GOTO_STYLE = { css: 'kwd', - goto_id: -2, - location: function(text) { - return { - node_id: GOTO_STYLE.goto_id--, - block_id: BLOCK_HEADER_STYLE.block_id - }; - } - } - const ARROW_STYLE = { css: 'kwd' }; - let patterns = [ - [ - [/^--- BLOCK B\d+/, BLOCK_HEADER_STYLE, 1], - [/^\s+\d+: /, ID_STYLE, 2], - [/^\s+Goto/, GOTO_STYLE, 6], - [/^.*/, null, -1] - ], - [ - [/^ +/, null], - [/^\(deferred\)/, BLOCK_HEADER_STYLE], - [/^B\d+/, BLOCK_LINK_STYLE], - [/^<-/, ARROW_STYLE], - [/^->/, ARROW_STYLE], - [/^,/, null], - [/^---/, BLOCK_HEADER_STYLE, -1] - ], - // Parse opcode including [] - [ - [/^[A-Za-z0-9_]+(\[.*\])?$/, NODE_STYLE, -1], - [/^[A-Za-z0-9_]+(\[(\[.*?\]|.)*?\])?/, NODE_STYLE, 3] - ], - // Parse optional parameters - [ - [/^ /, null, 4], - [/^\(/, null], - [/^\d+/, ID_LINK_STYLE], - [/^, /, null], - [/^\)$/, null, -1], - [/^\)/, null, 4], - ], - [ - [/^ -> /, ARROW_STYLE, 5], - [/^.*/, null, -1] - ], - [ - [/^B\d+$/, BLOCK_LINK_STYLE, -1], - [/^B\d+/, BLOCK_LINK_STYLE], - [/^, /, null] - ], - [ - [/^ -> /, ARROW_STYLE], - [/^B\d+$/, BLOCK_LINK_STYLE, -1] - ] - ]; - this.setPatterns(patterns); - } - - initializeContent(data, rememberedSelection) { - super.initializeContent(data, rememberedSelection); - var graph = this; - var locations = []; - for (var id of rememberedSelection) { - locations.push({ node_id : id }); - } - this.selectLocations(locations, true, true); - } - - detachSelection() { - var selection = this.selection.detachSelection(); - var s = new Set(); - for (var i of selection) { - if (i.location.node_id != undefined && i.location.node_id > 0) { - s.add(i.location.node_id); - } - }; - return s; - } -} diff --git a/deps/v8/tools/turbolizer/selection-broker.js b/deps/v8/tools/turbolizer/selection-broker.js deleted file mode 100644 index 822cf1ce1f62fd..00000000000000 --- a/deps/v8/tools/turbolizer/selection-broker.js +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright 2015 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -var SelectionBroker = function() { - this.brokers = []; - this.dispatching = false; - this.lastDispatchingHandler = null; - this.nodePositionMap = []; - this.sortedPositionList = []; - this.positionNodeMap = []; -}; - -SelectionBroker.prototype.addSelectionHandler = function(handler) { - this.brokers.push(handler); -} - -SelectionBroker.prototype.setNodePositionMap = function(map) { - let broker = this; - if (!map) return; - broker.nodePositionMap = map; - broker.positionNodeMap = []; - broker.sortedPositionList = []; - let next = 0; - for (let i in broker.nodePositionMap) { - broker.sortedPositionList[next] = Number(broker.nodePositionMap[i]); - broker.positionNodeMap[next++] = i; - } - broker.sortedPositionList = sortUnique(broker.sortedPositionList, - function(a,b) { return a - b; }); - this.positionNodeMap.sort(function(a,b) { - let result = broker.nodePositionMap[a] - broker.nodePositionMap[b]; - if (result != 0) return result; - return a - b; - }); -} - -SelectionBroker.prototype.select = function(from, locations, selected) { - let broker = this; - if (!broker.dispatching) { - broker.lastDispatchingHandler = from; - try { - broker.dispatching = true; - let enrichLocations = function(locations) { - result = []; - for (let location of locations) { - let newLocation = {}; - if (location.pos_start != undefined) { - newLocation.pos_start = location.pos_start; - } - if (location.pos_end != undefined) { - newLocation.pos_end = location.pos_end; - } - if (location.node_id != undefined) { - newLocation.node_id = location.node_id; - } - if (location.block_id != undefined) { - newLocation.block_id = location.block_id; - } - if (newLocation.pos_start == undefined && - newLocation.pos_end == undefined && - newLocation.node_id != undefined) { - if (broker.nodePositionMap && broker.nodePositionMap[location.node_id]) { - newLocation.pos_start = broker.nodePositionMap[location.node_id]; - newLocation.pos_end = location.pos_start + 1; - } - } - result.push(newLocation); - } - return result; - } - locations = enrichLocations(locations); - for (var b of this.brokers) { - if (b != from) { - b.brokeredSelect(locations, selected); - } - } - } - finally { - broker.dispatching = false; - } - } -} - -SelectionBroker.prototype.clear = function(from) { - this.lastDispatchingHandler = null; - if (!this.dispatching) { - try { - this.dispatching = true; - this.brokers.forEach(function(b) { - if (b != from) { - b.brokeredClear(); - } - }); - } finally { - this.dispatching = false; - } - } -} diff --git a/deps/v8/tools/turbolizer/selection.js b/deps/v8/tools/turbolizer/selection.js deleted file mode 100644 index 26f1bde1972606..00000000000000 --- a/deps/v8/tools/turbolizer/selection.js +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright 2015 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -var Selection = function(handler) { - this.handler = handler; - this.selectionBase = null; - this.lastSelection = null; - this.selection = new Set(); -} - - -Selection.prototype.isEmpty = function() { - return this.selection.size == 0; -} - - -Selection.prototype.clear = function() { - var handler = this.handler; - this.selectionBase = null; - this.lastSelection = null; - handler.select(this.selection, false); - handler.clear(); - this.selection = new Set(); -} - - -count = 0; - -Selection.prototype.select = function(s, isSelected) { - var handler = this.handler; - if (!(Symbol.iterator in Object(s))) { s = [s]; } - if (isSelected) { - let first = true; - for (let i of s) { - if (first) { - this.selectionBase = i; - this.lastSelection = i; - first = false; - } - this.selection.add(i); - } - handler.select(this.selection, true); - } else { - let unselectSet = new Set(); - for (let i of s) { - if (this.selection.has(i)) { - unselectSet.add(i); - this.selection.delete(i); - } - } - handler.select(unselectSet, false); - } -} - - -Selection.prototype.extendTo = function(pos) { - if (pos == this.lastSelection || this.lastSelection === null) return; - - var handler = this.handler; - var pos_diff = handler.selectionDifference(pos, true, this.lastSelection, false); - var unselect_diff = []; - if (pos_diff.length == 0) { - pos_diff = handler.selectionDifference(this.selectionBase, false, pos, true); - if (pos_diff.length != 0) { - unselect_diff = handler.selectionDifference(this.lastSelection, true, this.selectionBase, false); - this.selection = new Set(); - this.selection.add(this.selectionBase); - for (var d of pos_diff) { - this.selection.add(d); - } - } else { - unselect_diff = handler.selectionDifference(this.lastSelection, true, pos, false); - for (var d of unselect_diff) { - this.selection.delete(d); - } - } - } else { - unselect_diff = handler.selectionDifference(this.selectionBase, false, this.lastSelection, true); - if (unselect_diff != 0) { - pos_diff = handler.selectionDifference(pos, true, this.selectionBase, false); - if (pos_diff.length == 0) { - unselect_diff = handler.selectionDifference(pos, false, this.lastSelection, true); - } - for (var d of unselect_diff) { - this.selection.delete(d); - } - } - if (pos_diff.length != 0) { - for (var d of pos_diff) { - this.selection.add(d); - } - } - } - handler.select(unselect_diff, false); - handler.select(pos_diff, true); - this.lastSelection = pos; -} - - -Selection.prototype.detachSelection = function() { - var result = new Set(); - for (var i of this.selection) { - result.add(i); - } - this.clear(); - return result; -} diff --git a/deps/v8/tools/turbolizer/src/code-view.ts b/deps/v8/tools/turbolizer/src/code-view.ts new file mode 100644 index 00000000000000..4bd66412e80cd4 --- /dev/null +++ b/deps/v8/tools/turbolizer/src/code-view.ts @@ -0,0 +1,267 @@ +// Copyright 2015 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +"use strict"; + +enum CodeMode { + MAIN_SOURCE = "main function", + INLINED_SOURCE = "inlined function" +}; + +class CodeView extends View { + broker: SelectionBroker; + source: Source; + sourceResolver: SourceResolver; + codeMode: CodeMode; + sourcePositionToHtmlElement: Map; + showAdditionalInliningPosition: boolean; + selectionHandler: SelectionHandler; + selection: MySelection; + + createViewElement() { + const sourceContainer = document.createElement("div"); + sourceContainer.classList.add("source-container"); + return sourceContainer; + } + + constructor(parentId, broker, sourceResolver, sourceFunction, codeMode: CodeMode) { + super(parentId); + let view = this; + view.broker = broker; + view.source = null; + view.sourceResolver = sourceResolver; + view.source = sourceFunction; + view.codeMode = codeMode; + this.sourcePositionToHtmlElement = new Map(); + this.showAdditionalInliningPosition = false; + + const selectionHandler = { + clear: function () { + view.selection.clear(); + view.updateSelection(); + broker.broadcastClear(this) + }, + select: function (sourcePositions, selected) { + const locations = []; + for (var sourcePosition of sourcePositions) { + locations.push(sourcePosition); + sourceResolver.addInliningPositions(sourcePosition, locations); + } + if (locations.length == 0) return; + view.selection.select(locations, selected); + view.updateSelection(); + broker.broadcastSourcePositionSelect(this, locations, selected); + }, + brokeredSourcePositionSelect: function (locations, selected) { + const firstSelect = view.selection.isEmpty(); + for (const location of locations) { + const translated = sourceResolver.translateToSourceId(view.source.sourceId, location); + if (!translated) continue; + view.selection.select(translated, selected); + } + view.updateSelection(firstSelect); + }, + brokeredClear: function () { + view.selection.clear(); + view.updateSelection(); + }, + }; + view.selection = new MySelection(sourcePositionToStringKey); + broker.addSourcePositionHandler(selectionHandler); + this.selectionHandler = selectionHandler; + this.initializeCode(); + } + + addHtmlElementToSourcePosition(sourcePosition, element) { + const key = sourcePositionToStringKey(sourcePosition); + if (this.sourcePositionToHtmlElement.has(key)) { + console.log("Warning: duplicate source position", sourcePosition); + } + this.sourcePositionToHtmlElement.set(key, element); + } + + getHtmlElementForSourcePosition(sourcePosition) { + const key = sourcePositionToStringKey(sourcePosition); + return this.sourcePositionToHtmlElement.get(key); + } + + updateSelection(scrollIntoView: boolean = false): void { + const mkVisible = new ViewElements(this.divNode.parentNode as HTMLElement); + for (const [sp, el] of this.sourcePositionToHtmlElement.entries()) { + const isSelected = this.selection.isKeySelected(sp); + mkVisible.consider(el, isSelected); + el.classList.toggle("selected", isSelected); + } + mkVisible.apply(scrollIntoView); + } + + initializeContent(data, rememberedSelection) { + } + + getCodeHtmlElementName() { + return `source-pre-${this.source.sourceId}`; + } + + getCodeHeaderHtmlElementName() { + return `source-pre-${this.source.sourceId}-header`; + } + + getHtmlCodeLines(): NodeListOf { + const ordereList = this.divNode.querySelector(`#${this.getCodeHtmlElementName()} ol`); + return ordereList.childNodes as NodeListOf; + } + + onSelectLine(lineNumber: number, doClear: boolean) { + const key = anyToString(lineNumber); + if (doClear) { + this.selectionHandler.clear(); + } + const positions = this.sourceResolver.linetoSourcePositions(lineNumber - 1); + if (positions !== undefined) { + this.selectionHandler.select(positions, undefined); + } + } + + onSelectSourcePosition(sourcePosition, doClear) { + if (doClear) { + this.selectionHandler.clear(); + } + this.selectionHandler.select([sourcePosition], undefined); + } + + initializeCode() { + var view = this; + const source = this.source; + const sourceText = source.sourceText; + if (!sourceText) return; + const sourceContainer = view.divNode; + if (this.codeMode == CodeMode.MAIN_SOURCE) { + sourceContainer.classList.add("main-source"); + } else { + sourceContainer.classList.add("inlined-source"); + } + var codeHeader = document.createElement("div"); + codeHeader.setAttribute("id", this.getCodeHeaderHtmlElementName()); + codeHeader.classList.add("code-header"); + var codeFileFunction = document.createElement("div"); + codeFileFunction.classList.add("code-file-function"); + codeFileFunction.innerHTML = `${source.sourceName}:${source.functionName}`; + codeHeader.appendChild(codeFileFunction); + var codeModeDiv = document.createElement("div"); + codeModeDiv.classList.add("code-mode"); + codeModeDiv.innerHTML = `${this.codeMode}`; + codeHeader.appendChild(codeModeDiv); + const clearDiv = document.createElement("div"); + clearDiv.style.clear = "both"; + codeHeader.appendChild(clearDiv); + sourceContainer.appendChild(codeHeader); + var codePre = document.createElement("pre"); + codePre.setAttribute("id", this.getCodeHtmlElementName()); + codePre.classList.add("prettyprint"); + sourceContainer.appendChild(codePre); + + codeHeader.onclick = function myFunction() { + if (codePre.style.display === "none") { + codePre.style.display = "block"; + } else { + codePre.style.display = "none"; + } + } + if (sourceText != "") { + codePre.classList.add("linenums"); + codePre.textContent = sourceText; + try { + // Wrap in try to work when offline. + PR.prettyPrint(undefined, sourceContainer); + } catch (e) { + console.log(e); + } + + view.divNode.onclick = function (e) { + view.selectionHandler.clear(); + } + + const base: number = source.startPosition; + let current = 0; + const lineListDiv = this.getHtmlCodeLines(); + let newlineAdjust = 0; + for (let i = 0; i < lineListDiv.length; i++) { + // Line numbers are not zero-based. + const lineNumber = i + 1; + const currentLineElement = lineListDiv[i]; + currentLineElement.id = "li" + i; + currentLineElement.dataset.lineNumber = "" + lineNumber; + const spans = currentLineElement.childNodes; + for (let j = 0; j < spans.length; ++j) { + const currentSpan = spans[j]; + const pos = base + current; + const end = pos + currentSpan.textContent.length; + current += currentSpan.textContent.length; + this.insertSourcePositions(currentSpan, lineNumber, pos, end, newlineAdjust); + newlineAdjust = 0; + } + + this.insertLineNumber(currentLineElement, lineNumber); + + while ((current < sourceText.length) && + (sourceText[current] == '\n' || sourceText[current] == '\r')) { + ++current; + ++newlineAdjust; + } + } + } + } + + insertSourcePositions(currentSpan, lineNumber, pos, end, adjust) { + const view = this; + const sps = this.sourceResolver.sourcePositionsInRange(this.source.sourceId, pos - adjust, end); + for (const sourcePosition of sps) { + this.sourceResolver.addAnyPositionToLine(lineNumber, sourcePosition); + const textnode = currentSpan.tagName == 'SPAN' ? currentSpan.firstChild : currentSpan; + const replacementNode = textnode.splitText(Math.max(0, sourcePosition.scriptOffset - pos)); + const span = document.createElement('span'); + span.setAttribute("scriptOffset", sourcePosition.scriptOffset); + span.classList.add("source-position") + const marker = document.createElement('span'); + marker.classList.add("marker") + span.appendChild(marker); + const inlining = this.sourceResolver.getInliningForPosition(sourcePosition); + if (inlining != undefined && view.showAdditionalInliningPosition) { + const sourceName = this.sourceResolver.getSourceName(inlining.sourceId); + const inliningMarker = document.createElement('span'); + inliningMarker.classList.add("inlining-marker") + inliningMarker.setAttribute("data-descr", `${sourceName} was inlined here`) + span.appendChild(inliningMarker); + } + span.onclick = function (e) { + e.stopPropagation(); + view.onSelectSourcePosition(sourcePosition, !e.shiftKey) + }; + view.addHtmlElementToSourcePosition(sourcePosition, span); + textnode.parentNode.insertBefore(span, replacementNode); + } + } + + insertLineNumber(lineElement, lineNumber) { + const view = this; + const lineNumberElement = document.createElement("div"); + lineNumberElement.classList.add("line-number"); + lineNumberElement.dataset.lineNumber = lineNumber; + lineNumberElement.innerText = lineNumber; + lineNumberElement.onclick = function (e) { + e.stopPropagation(); + view.onSelectLine(lineNumber, !e.shiftKey); + } + lineElement.insertBefore(lineNumberElement, lineElement.firstChild) + // Don't add lines to source positions of not in backwardsCompatibility mode. + if (this.source.backwardsCompatibility === true) { + for (const sourcePosition of this.sourceResolver.linetoSourcePositions(lineNumber - 1)) { + view.addHtmlElementToSourcePosition(sourcePosition, lineElement); + } + } + } + + deleteContent() { } + detachSelection() { return null; } +} diff --git a/deps/v8/tools/turbolizer/src/constants.ts b/deps/v8/tools/turbolizer/src/constants.ts new file mode 100644 index 00000000000000..369c97749f5b4b --- /dev/null +++ b/deps/v8/tools/turbolizer/src/constants.ts @@ -0,0 +1,29 @@ +// Copyright 2014 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +const MAX_RANK_SENTINEL = 0; +const GRAPH_MARGIN = 250; +const WIDTH = 'width'; +const HEIGHT = 'height'; +const VISIBILITY = 'visibility'; +const SOURCE_PANE_ID = 'left'; +const SOURCE_COLLAPSE_ID = 'source-shrink'; +const SOURCE_EXPAND_ID = 'source-expand'; +const INTERMEDIATE_PANE_ID = 'middle'; +const GRAPH_PANE_ID = 'graph'; +const SCHEDULE_PANE_ID = 'schedule'; +const GENERATED_PANE_ID = 'right'; +const DISASSEMBLY_PANE_ID = 'disassembly'; +const DISASSEMBLY_COLLAPSE_ID = 'disassembly-shrink'; +const DISASSEMBLY_EXPAND_ID = 'disassembly-expand'; +const COLLAPSE_PANE_BUTTON_VISIBLE = 'button-input'; +const COLLAPSE_PANE_BUTTON_INVISIBLE = 'button-input-invisible'; +const UNICODE_BLOCK = '▋'; +const PROF_COLS = [ + { perc: 0, col: { r: 255, g: 255, b: 255 } }, + { perc: 0.5, col: { r: 255, g: 255, b: 128 } }, + { perc: 5, col: { r: 255, g: 128, b: 0 } }, + { perc: 15, col: { r: 255, g: 0, b: 0 } }, + { perc: 100, col: { r: 0, g: 0, b: 0 } } +]; diff --git a/deps/v8/tools/turbolizer/disassembly-view.js b/deps/v8/tools/turbolizer/src/disassembly-view.ts similarity index 65% rename from deps/v8/tools/turbolizer/disassembly-view.js rename to deps/v8/tools/turbolizer/src/disassembly-view.ts index ecee04988cc820..8bc2e02ac55d4f 100644 --- a/deps/v8/tools/turbolizer/disassembly-view.js +++ b/deps/v8/tools/turbolizer/src/disassembly-view.ts @@ -5,22 +5,54 @@ "use strict"; class DisassemblyView extends TextView { - constructor(id, broker) { - super(id, broker, null, false); + SOURCE_POSITION_HEADER_REGEX: any; + addr_event_counts: any; + total_event_counts: any; + max_event_counts: any; + pos_lines: Array; + + createViewElement() { + const pane = document.createElement('div'); + pane.setAttribute('id', "disassembly"); + pane.innerHTML = + `
+       
    +
+
`; + return pane; + } + constructor(parentId, broker: SelectionBroker) { + super(parentId, broker, null); let view = this; + const sourceResolver = broker.sourceResolver; let ADDRESS_STYLE = { css: 'tag', - location: function(text) { - ADDRESS_STYLE.last_address = text; + linkHandler: function (text, fragment) { + const matches = text.match(/0x[0-9a-f]{8,16}\s*(?[0-9a-f]+)/); + const offset = Number.parseInt(matches.groups["offset"], 16); + if (!Number.isNaN(offset)) { + const [nodes, blockId] = sourceResolver.nodesForPCOffset(offset) + console.log("nodes for", offset, offset.toString(16), " are ", nodes); + if (nodes.length > 0) { + for (const nodeId of nodes) { + view.addHtmlElementForNodeId(nodeId, fragment); + } + return (e) => { + console.log(offset, nodes); + e.stopPropagation(); + if (!e.shiftKey) { + view.selectionHandler.clear(); + } + view.selectionHandler.select(nodes, true); + }; + } + } return undefined; } }; let ADDRESS_LINK_STYLE = { - css: 'tag', - link: function(text) { - view.select(function(location) { return location.address == text; }, true, true); - } + css: 'tag' }; let UNCLASSIFIED_STYLE = { css: 'com' @@ -33,60 +65,45 @@ class DisassemblyView extends TextView { }; let POSITION_STYLE = { css: 'com', - location: function(text) { - view.pos_start = Number(text); - } }; let OPCODE_STYLE = { css: 'kwd', - location: function(text) { - if (BLOCK_HEADER_STYLE.block_id != undefined) { - return { - address: ADDRESS_STYLE.last_address, - block_id: BLOCK_HEADER_STYLE.block_id - }; - } else { - return { - address: ADDRESS_STYLE.last_address - }; - } - } }; const BLOCK_HEADER_STYLE = { - css: 'com', - block_id: -1, - location: function(text) { + css: ['com', 'block'], + block_id: null, + blockId: function (text) { let matches = /\d+/.exec(text); if (!matches) return undefined; BLOCK_HEADER_STYLE.block_id = Number(matches[0]); - return { - block_id: BLOCK_HEADER_STYLE.block_id - }; + return BLOCK_HEADER_STYLE.block_id; }, - }; - const SOURCE_POSITION_HEADER_STYLE = { - css: 'com', - location: function(text) { - let matches = /(\d+):(\d+)/.exec(text); + linkHandler: function (text) { + let matches = /\d+/.exec(text); if (!matches) return undefined; - let li = Number(matches[1]); - if (view.pos_lines === null) return undefined; - let pos = view.pos_lines[li-1] + Number(matches[2]); - return { - pos_start: pos, - pos_end: pos + 1 + const blockId = matches[0]; + return function (e) { + e.stopPropagation(); + if (!e.shiftKey) { + view.selectionHandler.clear(); + } + view.blockSelectionHandler.select([blockId], true); }; - }, + } }; - view.SOURCE_POSITION_HEADER_REGEX = /^(\s*-- .+:)(\d+:\d+)( --)/; + const SOURCE_POSITION_HEADER_STYLE = { + css: 'com' + }; + view.SOURCE_POSITION_HEADER_REGEX = /^\s*--[^<]*<.*(not inlined|inlined\((\d+)\)):(\d+)>\s*--/; let patterns = [ [ - [/^0x[0-9a-f]{8,16}/, ADDRESS_STYLE, 1], + [/^0x[0-9a-f]{8,16}\s*[0-9a-f]+\ /, ADDRESS_STYLE, 1], [view.SOURCE_POSITION_HEADER_REGEX, SOURCE_POSITION_HEADER_STYLE, -1], [/^\s+-- B\d+ start.*/, BLOCK_HEADER_STYLE, -1], [/^.*/, UNCLASSIFIED_STYLE, -1] ], [ + [/^\s+[0-9a-f]+\s+/, NUMBER_STYLE, 2], [/^\s+[0-9a-f]+\s+[0-9a-f]+\s+/, NUMBER_STYLE, 2], [/^.*/, null, -1] ], @@ -119,44 +136,8 @@ class DisassemblyView extends TextView { view.setPatterns(patterns); } - lineLocation(li) { - let view = this; - let result = undefined; - for (let i = 0; i < li.children.length; ++i) { - let fragment = li.children[i]; - let location = fragment.location; - if (location != null) { - if (location.block_id != undefined) { - if (result === undefined) result = {}; - result.block_id = location.block_id; - } - if (location.address != undefined) { - if (result === undefined) result = {}; - result.address = location.address; - } - if (location.pos_start != undefined && location.pos_end != undefined) { - if (result === undefined) result = {}; - result.pos_start = location.pos_start; - result.pos_end = location.pos_end; - } - else if (view.pos_start != -1) { - if (result === undefined) result = {}; - result.pos_start = view.pos_start; - result.pos_end = result.pos_start + 1; - } - } - } - return result; - } - - initializeContent(data, rememberedSelection) { - this.data = data; - super.initializeContent(data, rememberedSelection); - } - initializeCode(sourceText, sourcePosition) { let view = this; - view.pos_start = -1; view.addr_event_counts = null; view.total_event_counts = null; view.max_event_counts = null; @@ -164,13 +145,13 @@ class DisassemblyView extends TextView { // Comment lines for line 0 include sourcePosition already, only need to // add sourcePosition for lines > 0. view.pos_lines[0] = sourcePosition; - if (sourceText != "") { + if (sourceText && sourceText != "") { let base = sourcePosition; let current = 0; let source_lines = sourceText.split("\n"); for (let i = 1; i < source_lines.length; i++) { // Add 1 for newline character that is split off. - current += source_lines[i-1].length + 1; + current += source_lines[i - 1].length + 1; view.pos_lines[i] = base + current; } } @@ -209,16 +190,6 @@ class DisassemblyView extends TextView { processLine(line) { let view = this; - let func = function(match, p1, p2, p3) { - let nums = p2.split(":"); - let li = Number(nums[0]); - let pos = Number(nums[1]); - if(li === 0) - pos -= view.pos_lines[0]; - li++; - return p1 + li + ":" + pos + p3; - }; - line = line.replace(view.SOURCE_POSITION_HEADER_REGEX, func); let fragments = super.processLine(line); // Add profiling data per instruction if available. @@ -230,7 +201,7 @@ class DisassemblyView extends TextView { let count = view.addr_event_counts[event][matches[1]]; let str = " "; let css_cls = "prof"; - if(count !== undefined) { + if (count !== undefined) { let perc = count / view.total_event_counts[event] * 100; let col = { r: 255, g: 255, b: 255 }; @@ -270,4 +241,6 @@ class DisassemblyView extends TextView { } return fragments; } + + detachSelection() { return null; } } diff --git a/deps/v8/tools/turbolizer/src/edge.ts b/deps/v8/tools/turbolizer/src/edge.ts new file mode 100644 index 00000000000000..a7c65df59cbee1 --- /dev/null +++ b/deps/v8/tools/turbolizer/src/edge.ts @@ -0,0 +1,92 @@ +// Copyright 2014 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +var MINIMUM_EDGE_SEPARATION = 20; + +function isEdgeInitiallyVisible(target, index, source, type) { + return type == "control" && (target.cfg || source.cfg); +} + +class Edge { + target: GNode; + source: GNode; + index: number; + type: String; + backEdgeNumber: number; + visible: boolean; + + constructor(target: GNode, index: number, source: GNode, type: string) { + this.target = target; + this.source = source; + this.index = index; + this.type = type; + this.backEdgeNumber = 0; + this.visible = isEdgeInitiallyVisible(target, index, source, type); + } + + + stringID() { + return this.source.id + "," + this.index + "," + this.target.id; + }; + + isVisible() { + return this.visible && this.source.visible && this.target.visible; + }; + + getInputHorizontalPosition(graph) { + if (this.backEdgeNumber > 0) { + return graph.maxGraphNodeX + this.backEdgeNumber * MINIMUM_EDGE_SEPARATION; + } + var source = this.source; + var target = this.target; + var index = this.index; + var input_x = target.x + target.getInputX(index); + var inputApproach = target.getInputApproach(this.index); + var outputApproach = source.getOutputApproach(graph); + if (inputApproach > outputApproach) { + return input_x; + } else { + var inputOffset = MINIMUM_EDGE_SEPARATION * (index + 1); + return (target.x < source.x) + ? (target.x + target.getTotalNodeWidth() + inputOffset) + : (target.x - inputOffset) + } + } + + generatePath(graph) { + var target = this.target; + var source = this.source; + var input_x = target.x + target.getInputX(this.index); + var arrowheadHeight = 7; + var input_y = target.y - 2 * DEFAULT_NODE_BUBBLE_RADIUS - arrowheadHeight; + var output_x = source.x + source.getOutputX(); + var output_y = source.y + graph.getNodeHeight(source) + DEFAULT_NODE_BUBBLE_RADIUS; + var inputApproach = target.getInputApproach(this.index); + var outputApproach = source.getOutputApproach(graph); + var horizontalPos = this.getInputHorizontalPosition(graph); + + var result = "M" + output_x + "," + output_y + + "L" + output_x + "," + outputApproach + + "L" + horizontalPos + "," + outputApproach; + + if (horizontalPos != input_x) { + result += "L" + horizontalPos + "," + inputApproach; + } else { + if (inputApproach < outputApproach) { + inputApproach = outputApproach; + } + } + + result += "L" + input_x + "," + inputApproach + + "L" + input_x + "," + input_y; + return result; + } + + isBackEdge() { + return this.target.hasBackEdges() && (this.target.rank < this.source.rank); + } + +} + +const edgeToStr = (e: Edge) => e.stringID(); diff --git a/deps/v8/tools/turbolizer/graph-layout.js b/deps/v8/tools/turbolizer/src/graph-layout.ts similarity index 88% rename from deps/v8/tools/turbolizer/graph-layout.js rename to deps/v8/tools/turbolizer/src/graph-layout.ts index e9b44b4d2cdf26..14915409f16ae8 100644 --- a/deps/v8/tools/turbolizer/graph-layout.js +++ b/deps/v8/tools/turbolizer/src/graph-layout.ts @@ -6,7 +6,7 @@ var DEFAULT_NODE_ROW_SEPARATION = 130 var traceLayout = false; -function newGraphOccupation(graph){ +function newGraphOccupation(graph) { var isSlotFilled = []; var maxSlot = 0; var minSlot = 0; @@ -42,7 +42,7 @@ function newGraphOccupation(graph){ function findSpace(pos, width, direction) { var widthSlots = Math.floor((width + NODE_INPUT_WIDTH - 1) / - NODE_INPUT_WIDTH); + NODE_INPUT_WIDTH); var currentSlot = positionToSlot(pos + width / 2); var currentScanSlot = currentSlot; var widthSlotsRemainingLeft = widthSlots; @@ -53,14 +53,14 @@ function newGraphOccupation(graph){ currentScanSlot = currentSlot + (mod ? -1 : 1) * (slotsChecked >> 1); if (!isSlotFilled[slotToIndex(currentScanSlot)]) { if (mod) { - if (direction <= 0) --widthSlotsRemainingLeft + if (direction <= 0)--widthSlotsRemainingLeft } else { - if (direction >= 0) --widthSlotsRemainingRight + if (direction >= 0)--widthSlotsRemainingRight } if (widthSlotsRemainingLeft == 0 || - widthSlotsRemainingRight == 0 || - (widthSlotsRemainingLeft + widthSlotsRemainingRight) == widthSlots && - (widthSlots == slotsChecked)) { + widthSlotsRemainingRight == 0 || + (widthSlotsRemainingLeft + widthSlotsRemainingRight) == widthSlots && + (widthSlots == slotsChecked)) { if (mod) { return [currentScanSlot, widthSlots]; } else { @@ -79,7 +79,7 @@ function newGraphOccupation(graph){ function setIndexRange(from, to, value) { if (to < from) { - throw("illegal slot range"); + throw ("illegal slot range"); } while (from <= to) { if (from > maxSlot) { @@ -127,7 +127,7 @@ function newGraphOccupation(graph){ } var occupation = { - occupyNodeInputs: function(node) { + occupyNodeInputs: function (node) { for (var i = 0; i < node.inputs.length; ++i) { if (node.inputs[i].isVisible()) { var edge = node.inputs[i]; @@ -138,14 +138,14 @@ function newGraphOccupation(graph){ console.log("Occupying input " + i + " of " + node.id + " at " + horizontalPos); } occupyPositionRangeWithMargin(horizontalPos, - horizontalPos, - NODE_INPUT_WIDTH / 2); + horizontalPos, + NODE_INPUT_WIDTH / 2); } } } }, - occupyNode: function(node) { - var getPlacementHint = function(n) { + occupyNode: function (node) { + var getPlacementHint = function (n) { var pos = 0; var direction = -1; var outputEdges = 0; @@ -201,28 +201,28 @@ function newGraphOccupation(graph){ return slotToLeftPosition(firstSlot + slotWidth / 2) - (width / 2); } }, - clearOccupiedNodes: function() { - nodeOccupation.forEach(function(o) { + clearOccupiedNodes: function () { + nodeOccupation.forEach(function (o) { clearSlotRange(o[0], o[1]); }); nodeOccupation = []; }, - clearNodeOutputs: function(source) { - source.outputs.forEach(function(edge) { + clearNodeOutputs: function (source) { + source.outputs.forEach(function (edge) { if (edge.isVisible()) { var target = edge.target; for (var i = 0; i < target.inputs.length; ++i) { if (target.inputs[i].source === source) { var horizontalPos = edge.getInputHorizontalPosition(graph); clearPositionRangeWithMargin(horizontalPos, - horizontalPos, - NODE_INPUT_WIDTH / 2); + horizontalPos, + NODE_INPUT_WIDTH / 2); } } } }); }, - print: function() { + print: function () { var s = ""; for (var currentSlot = -40; currentSlot < 40; ++currentSlot) { if (currentSlot != 0) { @@ -251,11 +251,11 @@ function layoutNodeGraph(graph) { // basis for bottom-up DFS to determine rank and node placement. var endNodesHasNoOutputs = []; var startNodesHasNoInputs = []; - graph.nodes.forEach(function(n, i){ + graph.nodes.forEach(function (n, i) { endNodesHasNoOutputs[n.id] = true; startNodesHasNoInputs[n.id] = true; }); - graph.edges.forEach(function(e, i){ + graph.edges.forEach(function (e, i) { endNodesHasNoOutputs[e.source.id] = false; startNodesHasNoInputs[e.target.id] = false; }); @@ -265,7 +265,7 @@ function layoutNodeGraph(graph) { var startNodes = []; var visited = []; var rank = []; - graph.nodes.forEach(function(n, i){ + graph.nodes.forEach(function (n, i) { if (endNodesHasNoOutputs[n.id]) { endNodes.push(n); } @@ -323,7 +323,7 @@ function layoutNodeGraph(graph) { } } - visited = []; + visited = []; function dfsFindRankLate(n) { if (visited[n.id]) return; visited[n.id] = true; @@ -335,7 +335,7 @@ function layoutNodeGraph(graph) { dfsFindRankLate(output); var outputRank = output.rank; if (output.visible && (firstInput || outputRank <= newRank) && - (outputRank > originalRank)) { + (outputRank > originalRank)) { newRank = outputRank - 1; } firstInput = false; @@ -364,15 +364,15 @@ function layoutNodeGraph(graph) { } startNodes.forEach(dfsRankOrder); - endNodes.forEach(function(n) { + endNodes.forEach(function (n) { n.rank = maxRank + 1; }); var rankSets = []; // Collect sets for each rank. - graph.nodes.forEach(function(n, i){ + graph.nodes.forEach(function (n, i) { n.y = n.rank * (DEFAULT_NODE_ROW_SEPARATION + graph.getNodeHeight(n) + - 2 * DEFAULT_NODE_BUBBLE_RADIUS); + 2 * DEFAULT_NODE_BUBBLE_RADIUS); if (n.visible) { if (rankSets[n.rank] === undefined) { rankSets[n.rank] = [n]; @@ -388,7 +388,7 @@ function layoutNodeGraph(graph) { var occupation = newGraphOccupation(graph); var rankCount = 0; - rankSets.reverse().forEach(function(rankSet) { + rankSets.reverse().forEach(function (rankSet) { for (var i = 0; i < rankSet.length; ++i) { occupation.clearNodeOutputs(rankSet[i]); @@ -400,7 +400,7 @@ function layoutNodeGraph(graph) { } var placedCount = 0; - rankSet = rankSet.sort(function(a,b) { + rankSet = rankSet.sort(function (a, b) { return a.visitOrderWithinRank < b.visitOrderWithinRank; }); for (var i = 0; i < rankSet.length; ++i) { @@ -447,7 +447,7 @@ function layoutNodeGraph(graph) { }); graph.maxBackEdgeNumber = 0; - graph.visibleEdges.each(function (e) { + graph.visibleEdges.selectAll("path").each(function (e) { if (e.isBackEdge()) { e.backEdgeNumber = ++graph.maxBackEdgeNumber; } else { @@ -456,7 +456,6 @@ function layoutNodeGraph(graph) { }); redetermineGraphBoundingBox(graph); - } function redetermineGraphBoundingBox(graph) { @@ -490,4 +489,15 @@ function redetermineGraphBoundingBox(graph) { graph.maxGraphX = graph.maxGraphNodeX + graph.maxBackEdgeNumber * MINIMUM_EDGE_SEPARATION; + const width = (graph.maxGraphX - graph.minGraphX); + const height = graph.maxGraphY - graph.minGraphY; + graph.width = width; + graph.height = height; + + const extent = [ + [graph.minGraphX - width / 2, graph.minGraphY - height / 2], + [graph.maxGraphX + width / 2, graph.maxGraphY + height / 2] + ]; + graph.panZoom.translateExtent(extent); + graph.minScale(); } diff --git a/deps/v8/tools/turbolizer/src/graph-view.ts b/deps/v8/tools/turbolizer/src/graph-view.ts new file mode 100644 index 00000000000000..0dc033e0a73a9b --- /dev/null +++ b/deps/v8/tools/turbolizer/src/graph-view.ts @@ -0,0 +1,943 @@ +// Copyright 2015 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +"use strict"; + +function nodeToStringKey(n) { + return "" + n.id; +} + +interface GraphState { + showTypes: boolean; + selection: MySelection; + mouseDownNode: any; + justDragged: boolean, + justScaleTransGraph: boolean, + lastKeyDown: number, + hideDead: boolean +} + +class GraphView extends View implements PhaseView { + divElement: d3.Selection; + svg: d3.Selection; + showPhaseByName: (string) => void; + state: GraphState; + nodes: Array; + edges: Array; + selectionHandler: NodeSelectionHandler; + graphElement: d3.Selection; + visibleNodes: d3.Selection; + visibleEdges: d3.Selection; + minGraphX: number; + maxGraphX: number; + minGraphY: number; + maxGraphY: number; + width: number; + height: number; + maxGraphNodeX: number; + drag: d3.DragBehavior; + panZoom: d3.ZoomBehavior; + nodeMap: Array; + visibleBubbles: d3.Selection; + transitionTimout: number; + + createViewElement() { + const pane = document.createElement('div'); + pane.setAttribute('id', "graph"); + return pane; + } + + constructor(id, broker, showPhaseByName: (string) => void) { + super(id); + var graph = this; + this.showPhaseByName = showPhaseByName; + this.divElement = d3.select(this.divNode); + const svg = this.divElement.append("svg").attr('version', '1.1') + .attr("width", "100%") + .attr("height", "100%"); + svg.on("click", function (d) { + graph.selectionHandler.clear(); + }); + graph.svg = svg; + + graph.nodes = []; + graph.edges = []; + + graph.minGraphX = 0; + graph.maxGraphX = 1; + graph.minGraphY = 0; + graph.maxGraphY = 1; + + graph.state = { + selection: null, + mouseDownNode: null, + justDragged: false, + justScaleTransGraph: false, + lastKeyDown: -1, + showTypes: false, + hideDead: false + }; + + this.selectionHandler = { + clear: function () { + graph.state.selection.clear(); + broker.broadcastClear(this); + graph.updateGraphVisibility(); + }, + select: function (nodes, selected) { + let locations = []; + for (const node of nodes) { + if (node.sourcePosition) { + locations.push(node.sourcePosition); + } + if (node.origin && node.origin.bytecodePosition) { + locations.push({ bytecodePosition: node.origin.bytecodePosition }); + } + } + graph.state.selection.select(nodes, selected); + broker.broadcastSourcePositionSelect(this, locations, selected); + graph.updateGraphVisibility(); + }, + brokeredNodeSelect: function (locations, selected) { + let selection = graph.nodes + .filter(function (n) { + return locations.has(nodeToStringKey(n)) + && (!graph.state.hideDead || n.isLive()); + }); + graph.state.selection.select(selection, selected); + // Update edge visibility based on selection. + graph.nodes.forEach((n) => { + if (graph.state.selection.isSelected(n)) n.visible = true; + }); + graph.edges.forEach(function (e) { + e.visible = e.visible || + (graph.state.selection.isSelected(e.source) && graph.state.selection.isSelected(e.target)); + }); + graph.updateGraphVisibility(); + }, + brokeredClear: function () { + graph.state.selection.clear(); + graph.updateGraphVisibility(); + } + }; + broker.addNodeHandler(this.selectionHandler); + + graph.state.selection = new MySelection(nodeToStringKey); + + const defs = svg.append('svg:defs'); + defs.append('svg:marker') + .attr('id', 'end-arrow') + .attr('viewBox', '0 -4 8 8') + .attr('refX', 2) + .attr('markerWidth', 2.5) + .attr('markerHeight', 2.5) + .attr('orient', 'auto') + .append('svg:path') + .attr('d', 'M0,-4L8,0L0,4'); + + this.graphElement = svg.append("g"); + graph.visibleEdges = this.graphElement.append("g"); + graph.visibleNodes = this.graphElement.append("g"); + + graph.drag = d3.drag() + .on("drag", function (d) { + d.x += d3.event.dx; + d.y += d3.event.dy; + graph.updateGraphVisibility(); + }); + + + d3.select("#layout").on("click", partial(this.layoutAction, graph)); + d3.select("#show-all").on("click", partial(this.showAllAction, graph)); + d3.select("#toggle-hide-dead").on("click", partial(this.toggleHideDead, graph)); + d3.select("#hide-unselected").on("click", partial(this.hideUnselectedAction, graph)); + d3.select("#hide-selected").on("click", partial(this.hideSelectedAction, graph)); + d3.select("#zoom-selection").on("click", partial(this.zoomSelectionAction, graph)); + d3.select("#toggle-types").on("click", partial(this.toggleTypesAction, graph)); + + // listen for key events + d3.select(window).on("keydown", function (e) { + graph.svgKeyDown.call(graph); + }).on("keyup", function () { + graph.svgKeyUp.call(graph); + }); + + function zoomed() { + if (d3.event.shiftKey) return false; + graph.graphElement.attr("transform", d3.event.transform); + } + + const zoomSvg = d3.zoom() + .scaleExtent([0.2, 40]) + .on("zoom", zoomed) + .on("start", function () { + if (d3.event.shiftKey) return; + d3.select('body').style("cursor", "move"); + }) + .on("end", function () { + d3.select('body').style("cursor", "auto"); + }); + + svg.call(zoomSvg).on("dblclick.zoom", null); + + graph.panZoom = zoomSvg; + + } + + + static get selectedClass() { + return "selected"; + } + static get rectClass() { + return "nodeStyle"; + } + static get activeEditId() { + return "active-editing"; + } + static get nodeRadius() { + return 50; + } + + getNodeHeight(d): number { + if (this.state.showTypes) { + return d.normalheight + d.labelbbox.height; + } else { + return d.normalheight; + } + } + + getEdgeFrontier(nodes, inEdges, edgeFilter) { + let frontier = new Set(); + for (const n of nodes) { + var edges = inEdges ? n.inputs : n.outputs; + var edgeNumber = 0; + edges.forEach(function (edge) { + if (edgeFilter == undefined || edgeFilter(edge, edgeNumber)) { + frontier.add(edge); + } + ++edgeNumber; + }); + } + return frontier; + } + + getNodeFrontier(nodes, inEdges, edgeFilter) { + let graph = this; + var frontier = new Set(); + var newState = true; + var edgeFrontier = graph.getEdgeFrontier(nodes, inEdges, edgeFilter); + // Control key toggles edges rather than just turning them on + if (d3.event.ctrlKey) { + edgeFrontier.forEach(function (edge) { + if (edge.visible) { + newState = false; + } + }); + } + edgeFrontier.forEach(function (edge) { + edge.visible = newState; + if (newState) { + var node = inEdges ? edge.source : edge.target; + node.visible = true; + frontier.add(node); + } + }); + graph.updateGraphVisibility(); + if (newState) { + return frontier; + } else { + return undefined; + } + } + + initializeContent(data, rememberedSelection) { + this.createGraph(data, rememberedSelection); + if (rememberedSelection != null) { + this.attachSelection(rememberedSelection); + this.connectVisibleSelectedNodes(); + this.viewSelection(); + } else { + this.viewWholeGraph(); + } + } + + deleteContent() { + if (this.visibleNodes) { + this.nodes = []; + this.edges = []; + this.nodeMap = []; + this.updateGraphVisibility(); + } + }; + + measureText(text) { + const textMeasure = document.getElementById('text-measure'); + textMeasure.textContent = text; + return { + width: textMeasure.getBBox().width, + height: textMeasure.getBBox().height, + }; + } + + createGraph(data, rememberedSelection) { + var g = this; + g.nodes = []; + g.nodeMap = []; + data.nodes.forEach(function (n, i) { + n.__proto__ = GNode.prototype; + n.visible = false; + n.x = 0; + n.y = 0; + if (typeof n.pos === "number") { + // Backwards compatibility. + n.sourcePosition = { scriptOffset: n.pos, inliningId: -1 }; + } + n.rank = MAX_RANK_SENTINEL; + n.inputs = []; + n.outputs = []; + n.rpo = -1; + n.outputApproach = MINIMUM_NODE_OUTPUT_APPROACH; + n.cfg = n.control; + g.nodeMap[n.id] = n; + n.displayLabel = n.getDisplayLabel(); + n.labelbbox = g.measureText(n.displayLabel); + n.typebbox = g.measureText(n.getDisplayType()); + var innerwidth = Math.max(n.labelbbox.width, n.typebbox.width); + n.width = MoreMath.alignUp(innerwidth + NODE_INPUT_WIDTH * 2, + NODE_INPUT_WIDTH); + var innerheight = Math.max(n.labelbbox.height, n.typebbox.height); + n.normalheight = innerheight + 20; + g.nodes.push(n); + }); + g.edges = []; + data.edges.forEach(function (e, i) { + var t = g.nodeMap[e.target]; + var s = g.nodeMap[e.source]; + var newEdge = new Edge(t, e.index, s, e.type); + t.inputs.push(newEdge); + s.outputs.push(newEdge); + g.edges.push(newEdge); + if (e.type == 'control') { + s.cfg = true; + } + }); + g.nodes.forEach(function (n, i) { + n.visible = isNodeInitiallyVisible(n) && (!g.state.hideDead || n.isLive()); + if (rememberedSelection != undefined) { + if (rememberedSelection.has(nodeToStringKey(n))) { + n.visible = true; + } + } + }); + g.updateGraphVisibility(); + g.layoutGraph(); + g.updateGraphVisibility(); + g.viewWholeGraph(); + } + + connectVisibleSelectedNodes() { + var graph = this; + for (const n of graph.state.selection) { + n.inputs.forEach(function (edge) { + if (edge.source.visible && edge.target.visible) { + edge.visible = true; + } + }); + n.outputs.forEach(function (edge) { + if (edge.source.visible && edge.target.visible) { + edge.visible = true; + } + }); + } + } + + updateInputAndOutputBubbles() { + var g = this; + var s = g.visibleBubbles; + s.classed("filledBubbleStyle", function (c) { + var components = this.id.split(','); + if (components[0] == "ib") { + var edge = g.nodeMap[components[3]].inputs[components[2]]; + return edge.isVisible(); + } else { + return g.nodeMap[components[1]].areAnyOutputsVisible() == 2; + } + }).classed("halfFilledBubbleStyle", function (c) { + var components = this.id.split(','); + if (components[0] == "ib") { + var edge = g.nodeMap[components[3]].inputs[components[2]]; + return false; + } else { + return g.nodeMap[components[1]].areAnyOutputsVisible() == 1; + } + }).classed("bubbleStyle", function (c) { + var components = this.id.split(','); + if (components[0] == "ib") { + var edge = g.nodeMap[components[3]].inputs[components[2]]; + return !edge.isVisible(); + } else { + return g.nodeMap[components[1]].areAnyOutputsVisible() == 0; + } + }); + s.each(function (c) { + var components = this.id.split(','); + if (components[0] == "ob") { + var from = g.nodeMap[components[1]]; + var x = from.getOutputX(); + var y = g.getNodeHeight(from) + DEFAULT_NODE_BUBBLE_RADIUS; + var transform = "translate(" + x + "," + y + ")"; + this.setAttribute('transform', transform); + } + }); + } + + attachSelection(s) { + const graph = this; + if (!(s instanceof Set)) return; + graph.selectionHandler.clear(); + const selected = graph.nodes.filter((n) => + s.has(graph.state.selection.stringKey(n)) && (!graph.state.hideDead || n.isLive())); + graph.selectionHandler.select(selected, true); + } + + detachSelection() { + return this.state.selection.detachSelection(); + } + + selectAllNodes() { + var graph = this; + if (!d3.event.shiftKey) { + graph.state.selection.clear(); + } + const allVisibleNodes = graph.nodes.filter((n) => n.visible); + graph.state.selection.select(allVisibleNodes, true); + graph.updateGraphVisibility(); + } + + layoutAction(graph) { + graph.updateGraphVisibility(); + graph.layoutGraph(); + graph.updateGraphVisibility(); + graph.viewWholeGraph(); + } + + showAllAction(graph) { + graph.nodes.forEach(function (n) { + n.visible = !graph.state.hideDead || n.isLive(); + }); + graph.edges.forEach(function (e) { + e.visible = !graph.state.hideDead || (e.source.isLive() && e.target.isLive()); + }); + graph.updateGraphVisibility(); + graph.viewWholeGraph(); + } + + toggleHideDead(graph) { + graph.state.hideDead = !graph.state.hideDead; + if (graph.state.hideDead) graph.hideDead(); + var element = document.getElementById('toggle-hide-dead'); + element.classList.toggle('button-input-toggled', graph.state.hideDead); + } + + hideDead() { + const graph = this; + graph.nodes.filter(function (n) { + if (!n.isLive()) { + n.visible = false; + graph.state.selection.select([n], false); + } + }) + graph.updateGraphVisibility(); + } + + hideUnselectedAction(graph) { + graph.nodes.forEach(function (n) { + if (!graph.state.selection.isSelected(n)) { + n.visible = false; + } + }); + graph.updateGraphVisibility(); + } + + hideSelectedAction(graph) { + graph.nodes.forEach(function (n) { + if (graph.state.selection.isSelected(n)) { + n.visible = false; + } + }); + graph.selectionHandler.clear(); + } + + zoomSelectionAction(graph) { + graph.viewSelection(); + } + + toggleTypesAction(graph) { + graph.toggleTypes(); + } + + searchInputAction(searchBar, e: KeyboardEvent) { + const graph = this; + if (e.keyCode == 13) { + graph.selectionHandler.clear(); + var query = searchBar.value; + window.sessionStorage.setItem("lastSearch", query); + if (query.length == 0) return; + + var reg = new RegExp(query); + var filterFunction = function (n) { + return (reg.exec(n.getDisplayLabel()) != null || + (graph.state.showTypes && reg.exec(n.getDisplayType())) || + (reg.exec(n.getTitle())) || + reg.exec(n.opcode) != null); + }; + + const selection = graph.nodes.filter( + function (n, i) { + if ((e.ctrlKey || n.visible) && filterFunction(n)) { + if (e.ctrlKey) n.visible = true; + return true; + } + return false; + }); + + graph.selectionHandler.select(selection, true); + graph.connectVisibleSelectedNodes(); + graph.updateGraphVisibility(); + searchBar.blur(); + graph.viewSelection(); + } + e.stopPropagation(); + } + + svgKeyDown() { + var state = this.state; + var graph = this; + + // Don't handle key press repetition + if (state.lastKeyDown !== -1) return; + + var showSelectionFrontierNodes = function (inEdges, filter, select) { + var frontier = graph.getNodeFrontier(state.selection, inEdges, filter); + if (frontier != undefined && frontier.size) { + if (select) { + if (!d3.event.shiftKey) { + state.selection.clear(); + } + state.selection.select(frontier, true); + } + graph.updateGraphVisibility(); + } + allowRepetition = false; + } + + var allowRepetition = true; + var eventHandled = true; // unless the below switch defaults + switch (d3.event.keyCode) { + case 49: + case 50: + case 51: + case 52: + case 53: + case 54: + case 55: + case 56: + case 57: + // '1'-'9' + showSelectionFrontierNodes(true, + (edge, index) => { return index == (d3.event.keyCode - 49); }, + false); + break; + case 97: + case 98: + case 99: + case 100: + case 101: + case 102: + case 103: + case 104: + case 105: + // 'numpad 1'-'numpad 9' + showSelectionFrontierNodes(true, + (edge, index) => { return index == (d3.event.keyCode - 97); }, + false); + break; + case 67: + // 'c' + showSelectionFrontierNodes(d3.event.altKey, + (edge, index) => { return edge.type == 'control'; }, + true); + break; + case 69: + // 'e' + showSelectionFrontierNodes(d3.event.altKey, + (edge, index) => { return edge.type == 'effect'; }, + true); + break; + case 79: + // 'o' + showSelectionFrontierNodes(false, undefined, false); + break; + case 73: + // 'i' + showSelectionFrontierNodes(true, undefined, false); + break; + case 65: + // 'a' + graph.selectAllNodes(); + allowRepetition = false; + break; + case 38: + case 40: { + showSelectionFrontierNodes(d3.event.keyCode == 38, undefined, true); + break; + } + case 82: + // 'r' + if (!d3.event.ctrlKey) { + this.layoutAction(this); + } else { + eventHandled = false; + } + break; + case 83: + // 's' + graph.selectOrigins(); + break; + case 191: + // '/' + document.getElementById("search-input").focus(); + break; + default: + eventHandled = false; + break; + } + if (eventHandled) { + d3.event.preventDefault(); + } + if (!allowRepetition) { + state.lastKeyDown = d3.event.keyCode; + } + } + + svgKeyUp() { + this.state.lastKeyDown = -1 + }; + + layoutGraph() { + layoutNodeGraph(this); + } + + selectOrigins() { + const state = this.state; + const origins = []; + let phase = null; + for (const n of state.selection) { + if (n.origin) { + const node = this.nodeMap[n.origin.nodeId]; + origins.push(node); + phase = n.origin.phase; + } + } + if (origins.length) { + state.selection.clear(); + state.selection.select(origins, true); + if (phase) { + this.showPhaseByName(phase); + } + } + } + + // call to propagate changes to graph + updateGraphVisibility() { + let graph = this; + let state = graph.state; + + var filteredEdges = graph.edges.filter(function (e) { + return e.isVisible(); + }); + const selEdges = graph.visibleEdges.selectAll("path").data(filteredEdges, edgeToStr); + + // remove old links + selEdges.exit().remove(); + + // add new paths + selEdges.enter() + .append('path') + .style('marker-end', 'url(#end-arrow)') + .classed('hidden', function (e) { + return !e.isVisible(); + }) + .attr("id", function (edge) { return "e," + edge.stringID(); }) + .on("click", function (edge) { + d3.event.stopPropagation(); + if (!d3.event.shiftKey) { + graph.selectionHandler.clear(); + } + graph.selectionHandler.select([edge.source, edge.target], true); + }) + .attr("adjacentToHover", "false"); + + // Set the correct styles on all of the paths + selEdges.classed('value', function (e) { + return e.type == 'value' || e.type == 'context'; + }).classed('control', function (e) { + return e.type == 'control'; + }).classed('effect', function (e) { + return e.type == 'effect'; + }).classed('frame-state', function (e) { + return e.type == 'frame-state'; + }).attr('stroke-dasharray', function (e) { + if (e.type == 'frame-state') return "10,10"; + return (e.type == 'effect') ? "5,5" : ""; + }); + + // select existing nodes + const filteredNodes = graph.nodes.filter(n => n.visible); + const allNodes = graph.visibleNodes.selectAll("g"); + const selNodes = allNodes.data(filteredNodes, nodeToStr); + + // remove old nodes + selNodes.exit().remove(); + + // add new nodes + var newGs = selNodes.enter() + .append("g"); + + newGs.classed("turbonode", function (n) { return true; }) + .classed("control", function (n) { return n.isControl(); }) + .classed("live", function (n) { return n.isLive(); }) + .classed("dead", function (n) { return !n.isLive(); }) + .classed("javascript", function (n) { return n.isJavaScript(); }) + .classed("input", function (n) { return n.isInput(); }) + .classed("simplified", function (n) { return n.isSimplified(); }) + .classed("machine", function (n) { return n.isMachine(); }) + .on('mouseenter', function (node) { + const visibleEdges = graph.visibleEdges.selectAll('path'); + const adjInputEdges = visibleEdges.filter(e => { return e.target === node; }); + const adjOutputEdges = visibleEdges.filter(e => { return e.source === node; }); + adjInputEdges.attr('relToHover', "input"); + adjOutputEdges.attr('relToHover', "output"); + const adjInputNodes = adjInputEdges.data().map(e => e.source); + const visibleNodes = graph.visibleNodes.selectAll("g"); + const input = visibleNodes.data(adjInputNodes, nodeToStr) + .attr('relToHover', "input"); + const adjOutputNodes = adjOutputEdges.data().map(e => e.target); + const output = visibleNodes.data(adjOutputNodes, nodeToStr) + .attr('relToHover', "output"); + graph.updateGraphVisibility(); + }) + .on('mouseleave', function (node) { + const visibleEdges = graph.visibleEdges.selectAll('path'); + const adjEdges = visibleEdges.filter(e => { return e.target === node || e.source === node; }); + adjEdges.attr('relToHover', "none"); + const adjNodes = adjEdges.data().map(e => e.target).concat(adjEdges.data().map(e => e.source)); + const visibleNodes = graph.visibleNodes.selectAll("g"); + const nodes = visibleNodes.data(adjNodes, nodeToStr) + .attr('relToHover', "none"); + graph.updateGraphVisibility(); + }) + .on("click", (d) => { + if (!d3.event.shiftKey) graph.selectionHandler.clear(); + graph.selectionHandler.select([d], undefined); + d3.event.stopPropagation(); + }) + .call(graph.drag) + + newGs.append("rect") + .attr("rx", 10) + .attr("ry", 10) + .attr(WIDTH, function (d) { + return d.getTotalNodeWidth(); + }) + .attr(HEIGHT, function (d) { + return graph.getNodeHeight(d); + }) + + function appendInputAndOutputBubbles(g, d) { + for (var i = 0; i < d.inputs.length; ++i) { + var x = d.getInputX(i); + var y = -DEFAULT_NODE_BUBBLE_RADIUS; + var s = g.append('circle') + .classed("filledBubbleStyle", function (c) { + return d.inputs[i].isVisible(); + }) + .classed("bubbleStyle", function (c) { + return !d.inputs[i].isVisible(); + }) + .attr("id", "ib," + d.inputs[i].stringID()) + .attr("r", DEFAULT_NODE_BUBBLE_RADIUS) + .attr("transform", function (d) { + return "translate(" + x + "," + y + ")"; + }) + .on("click", function (d) { + var components = this.id.split(','); + var node = graph.nodeMap[components[3]]; + var edge = node.inputs[components[2]]; + var visible = !edge.isVisible(); + node.setInputVisibility(components[2], visible); + d3.event.stopPropagation(); + graph.updateGraphVisibility(); + }); + } + if (d.outputs.length != 0) { + var x = d.getOutputX(); + var y = graph.getNodeHeight(d) + DEFAULT_NODE_BUBBLE_RADIUS; + var s = g.append('circle') + .classed("filledBubbleStyle", function (c) { + return d.areAnyOutputsVisible() == 2; + }) + .classed("halFilledBubbleStyle", function (c) { + return d.areAnyOutputsVisible() == 1; + }) + .classed("bubbleStyle", function (c) { + return d.areAnyOutputsVisible() == 0; + }) + .attr("id", "ob," + d.id) + .attr("r", DEFAULT_NODE_BUBBLE_RADIUS) + .attr("transform", function (d) { + return "translate(" + x + "," + y + ")"; + }) + .on("click", function (d) { + d.setOutputVisibility(d.areAnyOutputsVisible() == 0); + d3.event.stopPropagation(); + graph.updateGraphVisibility(); + }); + } + } + + newGs.each(function (d) { + appendInputAndOutputBubbles(d3.select(this), d); + }); + + newGs.each(function (d) { + d3.select(this).append("text") + .classed("label", true) + .attr("text-anchor", "right") + .attr("dx", 5) + .attr("dy", 5) + .append('tspan') + .text(function (l) { + return d.getDisplayLabel(); + }) + .append("title") + .text(function (l) { + return d.getTitle(); + }) + if (d.type != undefined) { + d3.select(this).append("text") + .classed("label", true) + .classed("type", true) + .attr("text-anchor", "right") + .attr("dx", 5) + .attr("dy", d.labelbbox.height + 5) + .append('tspan') + .text(function (l) { + return d.getDisplayType(); + }) + .append("title") + .text(function (l) { + return d.getType(); + }) + } + }); + + const newAndOldNodes = newGs.merge(selNodes); + + newAndOldNodes.select('.type').each(function (d) { + this.setAttribute('visibility', graph.state.showTypes ? 'visible' : 'hidden'); + }); + + newAndOldNodes + .classed("selected", function (n) { + if (state.selection.isSelected(n)) return true; + return false; + }) + .attr("transform", function (d) { return "translate(" + d.x + "," + d.y + ")"; }) + .select('rect') + .attr(HEIGHT, function (d) { return graph.getNodeHeight(d); }); + + graph.visibleBubbles = d3.selectAll('circle'); + + graph.updateInputAndOutputBubbles(); + + graph.maxGraphX = graph.maxGraphNodeX; + selEdges.attr("d", function (edge) { + return edge.generatePath(graph); + }); + } + + getSvgViewDimensions() { + return [this.container.clientWidth, this.container.clientHeight]; + } + + getSvgExtent(): [[number, number], [number, number]] { + return [[0, 0], [this.container.clientWidth, this.container.clientHeight]]; + } + + minScale() { + const graph = this; + const dimensions = this.getSvgViewDimensions(); + const minXScale = dimensions[0] / (2 * graph.width); + const minYScale = dimensions[1] / (2 * graph.height); + const minScale = Math.min(minXScale, minYScale); + this.panZoom.scaleExtent([minScale, 40]); + return minScale; + } + + onresize() { + const trans = d3.zoomTransform(this.svg.node()); + const ctrans = this.panZoom.constrain()(trans, this.getSvgExtent(), this.panZoom.translateExtent()) + this.panZoom.transform(this.svg, ctrans) + } + + toggleTypes() { + var graph = this; + graph.state.showTypes = !graph.state.showTypes; + var element = document.getElementById('toggle-types'); + element.classList.toggle('button-input-toggled', graph.state.showTypes); + graph.updateGraphVisibility(); + } + + viewSelection() { + var graph = this; + var minX, maxX, minY, maxY; + var hasSelection = false; + graph.visibleNodes.selectAll("g").each(function (n) { + if (graph.state.selection.isSelected(n)) { + hasSelection = true; + minX = minX ? Math.min(minX, n.x) : n.x; + maxX = maxX ? Math.max(maxX, n.x + n.getTotalNodeWidth()) : + n.x + n.getTotalNodeWidth(); + minY = minY ? Math.min(minY, n.y) : n.y; + maxY = maxY ? Math.max(maxY, n.y + graph.getNodeHeight(n)) : + n.y + graph.getNodeHeight(n); + } + }); + if (hasSelection) { + graph.viewGraphRegion(minX - NODE_INPUT_WIDTH, minY - 60, + maxX + NODE_INPUT_WIDTH, maxY + 60, + true); + } + } + + viewGraphRegion(minX, minY, maxX, maxY, transition) { + const [width, height] = this.getSvgViewDimensions(); + const dx = maxX - minX; + const dy = maxY - minY; + const x = (minX + maxX) / 2; + const y = (minY + maxY) / 2; + const scale = Math.min(width / (1.1 * dx), height / (1.1 * dy)); + const transform = d3.zoomIdentity.translate(1500, 100).scale(0.75); + this.svg + .transition().duration(300).call(this.panZoom.translateTo, x, y) + .transition().duration(300).call(this.panZoom.scaleTo, scale) + .transition().duration(300).call(this.panZoom.translateTo, x, y); + } + + viewWholeGraph() { + this.panZoom.scaleTo(this.svg, 0); + this.panZoom.translateTo(this.svg, this.minGraphX + this.width / 2, this.minGraphY + this.height / 2) + } +} diff --git a/deps/v8/tools/turbolizer/src/graphmultiview.ts b/deps/v8/tools/turbolizer/src/graphmultiview.ts new file mode 100644 index 00000000000000..226fc38e030c4a --- /dev/null +++ b/deps/v8/tools/turbolizer/src/graphmultiview.ts @@ -0,0 +1,105 @@ +// Copyright 2018 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +"use strict"; + +class GraphMultiView extends View { + sourceResolver: SourceResolver; + selectionBroker: SelectionBroker; + graph: GraphView; + schedule: ScheduleView; + selectMenu: HTMLSelectElement; + currentPhaseView: View & PhaseView; + + createViewElement() { + const pane = document.createElement('div'); + pane.setAttribute('id', "multiview"); + return pane; + } + + constructor(id, selectionBroker, sourceResolver) { + super(id); + const view = this; + view.sourceResolver = sourceResolver; + view.selectionBroker = selectionBroker; + const searchInput = document.getElementById("search-input") as HTMLInputElement; + searchInput.addEventListener("keyup", e => { + if (!view.currentPhaseView) return; + view.currentPhaseView.searchInputAction(searchInput, e) + }); + searchInput.setAttribute("value", window.sessionStorage.getItem("lastSearch") || ""); + this.graph = new GraphView(id, selectionBroker, + (phaseName) => view.displayPhaseByName(phaseName)); + this.schedule = new ScheduleView(id, selectionBroker); + this.selectMenu = (document.getElementById('display-selector')); + } + + initializeSelect() { + const view = this; + view.selectMenu.innerHTML = ''; + view.sourceResolver.forEachPhase((phase) => { + const optionElement = document.createElement("option"); + optionElement.text = phase.name; + view.selectMenu.add(optionElement); + }); + this.selectMenu.onchange = function (this: HTMLSelectElement) { + window.sessionStorage.setItem("lastSelectedPhase", this.selectedIndex.toString()); + view.displayPhase(view.sourceResolver.getPhase(this.selectedIndex)); + } + } + + show(data, rememberedSelection) { + super.show(data, rememberedSelection); + this.initializeSelect(); + const lastPhaseIndex = +window.sessionStorage.getItem("lastSelectedPhase"); + const initialPhaseIndex = this.sourceResolver.repairPhaseId(lastPhaseIndex); + this.selectMenu.selectedIndex = initialPhaseIndex; + this.displayPhase(this.sourceResolver.getPhase(initialPhaseIndex)); + } + + initializeContent() { } + + displayPhase(phase) { + if (phase.type == 'graph') { + this.displayPhaseView(this.graph, phase.data); + } else if (phase.type == 'schedule') { + this.displayPhaseView(this.schedule, phase); + } + } + + displayPhaseView(view, data) { + const rememberedSelection = this.hideCurrentPhase(); + view.show(data, rememberedSelection); + document.getElementById("middle").classList.toggle("scrollable", view.isScrollable()); + this.currentPhaseView = view; + } + + displayPhaseByName(phaseName) { + const phaseId = this.sourceResolver.getPhaseIdByName(phaseName); + this.selectMenu.selectedIndex = phaseId - 1; + this.displayPhase(this.sourceResolver.getPhase(phaseId)); + } + + hideCurrentPhase() { + let rememberedSelection = null; + if (this.currentPhaseView != null) { + rememberedSelection = this.currentPhaseView.detachSelection(); + this.currentPhaseView.hide(); + this.currentPhaseView = null; + } + return rememberedSelection; + } + + onresize() { + if (this.currentPhaseView) this.currentPhaseView.onresize(); + } + + deleteContent() { + this.hideCurrentPhase(); + } + + detachSelection() { + return null; + } +} diff --git a/deps/v8/tools/turbolizer/src/lang-disassembly.ts b/deps/v8/tools/turbolizer/src/lang-disassembly.ts new file mode 100644 index 00000000000000..9312627abd25ed --- /dev/null +++ b/deps/v8/tools/turbolizer/src/lang-disassembly.ts @@ -0,0 +1,14 @@ +// Copyright 2015 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +PR.registerLangHandler( + PR.createSimpleLexer( + [ + [PR.PR_STRING, /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$))/, null, '\''], + [PR.PR_PLAIN, /^\s+/, null, ' \r\n\t\xA0'] + ], + [ // fallthroughStylePatterns + [PR.PR_COMMENT, /;; debug: position \d+/, null], + ]), + ['disassembly']); diff --git a/deps/v8/tools/turbolizer/monkey.js b/deps/v8/tools/turbolizer/src/monkey.ts similarity index 57% rename from deps/v8/tools/turbolizer/monkey.js rename to deps/v8/tools/turbolizer/src/monkey.ts index 29eaaebb36ee5d..3e38aefcc5091a 100644 --- a/deps/v8/tools/turbolizer/monkey.js +++ b/deps/v8/tools/turbolizer/src/monkey.ts @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -Math.alignUp = function(raw, multiple) { - return Math.floor((raw + multiple - 1) / multiple) * multiple; -} +const MoreMath = { + alignUp: (raw, multiple) => { + return Math.floor((raw + multiple - 1) / multiple) * multiple; + } +}; diff --git a/deps/v8/tools/turbolizer/node.js b/deps/v8/tools/turbolizer/src/node.ts similarity index 60% rename from deps/v8/tools/turbolizer/node.js rename to deps/v8/tools/turbolizer/src/node.ts index b718cdc4dfee34..533c51763b3002 100644 --- a/deps/v8/tools/turbolizer/node.js +++ b/deps/v8/tools/turbolizer/src/node.ts @@ -2,30 +2,60 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -var TYPE_HEIGHT = 25; -var DEFAULT_NODE_BUBBLE_RADIUS = 12; -var NODE_INPUT_WIDTH = 50; -var MINIMUM_NODE_INPUT_APPROACH = 15 + 2 * DEFAULT_NODE_BUBBLE_RADIUS; -var MINIMUM_NODE_OUTPUT_APPROACH = 15; +const TYPE_HEIGHT = 25; +const DEFAULT_NODE_BUBBLE_RADIUS = 12; +const NODE_INPUT_WIDTH = 50; +const MINIMUM_NODE_INPUT_APPROACH = 15 + 2 * DEFAULT_NODE_BUBBLE_RADIUS; +const MINIMUM_NODE_OUTPUT_APPROACH = 15; function isNodeInitiallyVisible(node) { return node.cfg; } -var Node = { - isControl: function() { +function formatOrigin(origin) { + if (origin.nodeId) { + return `#${origin.nodeId} in phase ${origin.phase}/${origin.reducer}`; + } + if (origin.bytecodePosition) { + return `Bytecode line ${origin.bytecodePosition} in phase ${origin.phase}/${origin.reducer}`; + } + return "unknown origin"; +} + +class GNode { + control: boolean; + opcode: string; + live: boolean; + inputs: Array; + width: number; + properties: string; + title: string; + label: string; + origin: NodeOrigin; + outputs: Array; + outputApproach: number; + type: string; + id: number; + x: number; + y: number; + visible: boolean; + rank: number; + opinfo: string; + labelbbox: { width: number, height: number }; + + isControl() { return this.control; - }, - isInput: function() { + } + isInput() { return this.opcode == 'Parameter' || this.opcode.endsWith('Constant'); - }, - isLive: function() { + } + isLive() { return this.live !== false; - }, - isJavaScript: function() { + } + isJavaScript() { return this.opcode.startsWith('JS'); - }, - isSimplified: function() { + } + isSimplified() { if (this.isJavaScript()) return false; return this.opcode.endsWith('Phi') || this.opcode.startsWith('Boolean') || @@ -39,16 +69,16 @@ var Node = { (this.opcode == 'AnyToBoolean') || (this.opcode.startsWith('Load') && this.opcode.length > 4) || (this.opcode.startsWith('Store') && this.opcode.length > 5); - }, - isMachine: function() { + } + isMachine() { return !(this.isControl() || this.isInput() || - this.isJavaScript() || this.isSimplified()); - }, - getTotalNodeWidth: function() { + this.isJavaScript() || this.isSimplified()); + } + getTotalNodeWidth() { var inputWidth = this.inputs.length * NODE_INPUT_WIDTH; return Math.max(inputWidth, this.width); - }, - getTitle: function() { + } + getTitle() { var propsString; if (this.properties === undefined) { propsString = ""; @@ -57,30 +87,34 @@ var Node = { } else { propsString = "[" + this.properties + "]"; } - return this.title + "\n" + propsString + "\n" + this.opinfo; - }, - getDisplayLabel: function() { + let title = this.title + "\n" + propsString + "\n" + this.opinfo; + if (this.origin) { + title += `\nOrigin: ${formatOrigin(this.origin)}`; + } + return title; + } + getDisplayLabel() { var result = this.id + ":" + this.label; if (result.length > 40) { return this.id + ":" + this.opcode; - } else { + } else { return result; } - }, - getType: function() { + } + getType() { return this.type; - }, - getDisplayType: function() { + } + getDisplayType() { var type_string = this.type; if (type_string == undefined) return ""; if (type_string.length > 24) { type_string = type_string.substr(0, 25) + "..."; } return type_string; - }, - deepestInputRank: function() { + } + deepestInputRank() { var deepestRank = 0; - this.inputs.forEach(function(e) { + this.inputs.forEach(function (e) { if (e.isVisible() && !e.isBackEdge()) { if (e.source.rank > deepestRank) { deepestRank = e.source.rank; @@ -88,17 +122,17 @@ var Node = { } }); return deepestRank; - }, - areAnyOutputsVisible: function() { + } + areAnyOutputsVisible() { var visibleCount = 0; - this.outputs.forEach(function(e) { if (e.isVisible()) ++visibleCount; }); + this.outputs.forEach(function (e) { if (e.isVisible())++visibleCount; }); if (this.outputs.length == visibleCount) return 2; if (visibleCount != 0) return 1; return 0; - }, - setOutputVisibility: function(v) { + } + setOutputVisibility(v) { var result = false; - this.outputs.forEach(function(e) { + this.outputs.forEach(function (e) { e.visible = v; if (v) { if (!e.target.visible) { @@ -108,8 +142,8 @@ var Node = { } }); return result; - }, - setInputVisibility: function(i, v) { + } + setInputVisibility(i, v) { var edge = this.inputs[i]; edge.visible = v; if (v) { @@ -119,29 +153,28 @@ var Node = { } } return false; - }, - getInputApproach: function(index) { + } + getInputApproach(index) { return this.y - MINIMUM_NODE_INPUT_APPROACH - (index % 4) * MINIMUM_EDGE_SEPARATION - DEFAULT_NODE_BUBBLE_RADIUS - }, - getOutputApproach: function(graph, index) { + } + getOutputApproach(graph) { return this.y + this.outputApproach + graph.getNodeHeight(this) + + DEFAULT_NODE_BUBBLE_RADIUS; - }, - getInputX: function(index) { + } + getInputX(index) { var result = this.getTotalNodeWidth() - (NODE_INPUT_WIDTH / 2) + - (index - this.inputs.length + 1) * NODE_INPUT_WIDTH; + (index - this.inputs.length + 1) * NODE_INPUT_WIDTH; return result; - }, - getOutputX: function() { + } + getOutputX() { return this.getTotalNodeWidth() - (NODE_INPUT_WIDTH / 2); - }, - getFunctionRelativeSourcePosition: function(graph) { - return this.pos - graph.sourcePosition; - }, - hasBackEdges: function() { + } + hasBackEdges() { return (this.opcode == "Loop") || ((this.opcode == "Phi" || this.opcode == "EffectPhi") && - this.inputs[this.inputs.length - 1].source.opcode == "Loop"); + this.inputs[this.inputs.length - 1].source.opcode == "Loop"); } }; + +const nodeToStr = (n: GNode) => "N" + n.id; diff --git a/deps/v8/tools/turbolizer/src/schedule-view.ts b/deps/v8/tools/turbolizer/src/schedule-view.ts new file mode 100644 index 00000000000000..ec8e1914ac2c42 --- /dev/null +++ b/deps/v8/tools/turbolizer/src/schedule-view.ts @@ -0,0 +1,191 @@ +// Copyright 2015 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +"use strict"; + +class ScheduleView extends TextView implements PhaseView { + schedule: Schedule; + sourceResolver: SourceResolver; + + createViewElement() { + const pane = document.createElement('div'); + pane.setAttribute('id', "schedule"); + return pane; + } + + constructor(parentId, broker) { + super(parentId, broker, null); + this.sourceResolver = broker.sourceResolver; + } + + attachSelection(s) { + const view = this; + if (!(s instanceof Set)) return; + view.selectionHandler.clear(); + view.blockSelectionHandler.clear(); + const selected = new Array(); + for (const key of s) selected.push(key); + view.selectionHandler.select(selected, true); + } + + detachSelection() { + this.blockSelection.clear(); + return this.selection.detachSelection(); + } + + initializeContent(data, rememberedSelection) { + this.divNode.innerHTML = ''; + this.schedule = data.schedule + this.addBlocks(data.schedule.blocks); + this.attachSelection(rememberedSelection); + } + + createElementFromString(htmlString) { + var div = document.createElement('div'); + div.innerHTML = htmlString.trim(); + return div.firstChild; + } + + elementForBlock(block) { + const view = this; + function createElement(tag: string, cls: string | Array, content?: string) { + const el = document.createElement(tag); + if (isIterable(cls)) { + for (const c of cls) el.classList.add(c); + } else { + el.classList.add(cls); + } + if (content != undefined) el.innerHTML = content; + return el; + } + + function mkNodeLinkHandler(nodeId) { + return function (e) { + e.stopPropagation(); + if (!e.shiftKey) { + view.selectionHandler.clear(); + } + view.selectionHandler.select([nodeId], true); + }; + } + + function getMarker(start, end) { + if (start != end) { + return ["⊙", `This node generated instructions in range [${start},${end}). ` + + `This is currently unreliable for constants.`]; + } + if (start != -1) { + return ["·", `The instruction selector did not generate instructions ` + + `for this node, but processed the node at instruction ${start}. ` + + `This usually means that this node was folded into another node; ` + + `the highlighted machine code is a guess.`]; + } + return ["", `This not is not in the final schedule.`] + } + + function createElementForNode(node) { + const nodeEl = createElement("div", "node"); + + const [start, end] = view.sourceResolver.getInstruction(node.id); + const [marker, tooltip] = getMarker(start, end); + const instrMarker = createElement("div", ["instr-marker", "com"], marker); + instrMarker.setAttribute("title", tooltip); + instrMarker.onclick = mkNodeLinkHandler(node.id); + nodeEl.appendChild(instrMarker); + + + const node_id = createElement("div", ["node-id", "tag", "clickable"], node.id); + node_id.onclick = mkNodeLinkHandler(node.id); + view.addHtmlElementForNodeId(node.id, node_id); + nodeEl.appendChild(node_id); + const node_label = createElement("div", "node-label", node.label); + nodeEl.appendChild(node_label); + if (node.inputs.length > 0) { + const node_parameters = createElement("div", ["parameter-list", "comma-sep-list"]); + for (const param of node.inputs) { + const paramEl = createElement("div", ["parameter", "tag", "clickable"], param); + node_parameters.appendChild(paramEl); + paramEl.onclick = mkNodeLinkHandler(param); + view.addHtmlElementForNodeId(param, paramEl); + } + nodeEl.appendChild(node_parameters); + } + + return nodeEl; + } + + function mkBlockLinkHandler(blockId) { + return function (e) { + e.stopPropagation(); + if (!e.shiftKey) { + view.blockSelectionHandler.clear(); + } + view.blockSelectionHandler.select(["" + blockId], true); + }; + } + + const schedule_block = createElement("div", "schedule-block"); + + const [start, end] = view.sourceResolver.getInstructionRangeForBlock(block.id); + const instrMarker = createElement("div", ["instr-marker", "com"], "⊙"); + instrMarker.setAttribute("title", `Instructions range for this block is [${start}, ${end})`) + instrMarker.onclick = mkBlockLinkHandler(block.id); + schedule_block.appendChild(instrMarker); + + const block_id = createElement("div", ["block-id", "com", "clickable"], block.id); + block_id.onclick = mkBlockLinkHandler(block.id); + schedule_block.appendChild(block_id); + const block_pred = createElement("div", ["predecessor-list", "block-list", "comma-sep-list"]); + for (const pred of block.pred) { + const predEl = createElement("div", ["block-id", "com", "clickable"], pred); + predEl.onclick = mkBlockLinkHandler(pred); + block_pred.appendChild(predEl); + } + if (block.pred.length) schedule_block.appendChild(block_pred); + const nodes = createElement("div", "nodes"); + for (const node of block.nodes) { + nodes.appendChild(createElementForNode(node)); + } + schedule_block.appendChild(nodes); + const block_succ = createElement("div", ["successor-list", "block-list", "comma-sep-list"]); + for (const succ of block.succ) { + const succEl = createElement("div", ["block-id", "com", "clickable"], succ); + succEl.onclick = mkBlockLinkHandler(succ); + block_succ.appendChild(succEl); + } + if (block.succ.length) schedule_block.appendChild(block_succ); + this.addHtmlElementForBlockId(block.id, schedule_block); + return schedule_block; + } + + addBlocks(blocks) { + for (const block of blocks) { + const blockEl = this.elementForBlock(block); + this.divNode.appendChild(blockEl); + } + } + + lineString(node) { + return `${node.id}: ${node.label}(${node.inputs.join(", ")})` + } + + searchInputAction(searchBar, e) { + e.stopPropagation(); + this.selectionHandler.clear(); + const query = searchBar.value; + if (query.length == 0) return; + const select = []; + window.sessionStorage.setItem("lastSearch", query); + const reg = new RegExp(query); + for (const node of this.schedule.nodes) { + if (node === undefined) continue; + if (reg.exec(this.lineString(node)) != null) { + select.push(node.id) + } + } + this.selectionHandler.select(select, true); + } + + onresize() { } +} diff --git a/deps/v8/tools/turbolizer/src/selection-broker.ts b/deps/v8/tools/turbolizer/src/selection-broker.ts new file mode 100644 index 00000000000000..973e945da4c508 --- /dev/null +++ b/deps/v8/tools/turbolizer/src/selection-broker.ts @@ -0,0 +1,77 @@ +// Copyright 2015 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +class SelectionBroker { + sourceResolver: SourceResolver; + sourcePositionHandlers: Array; + nodeHandlers: Array; + blockHandlers: Array; + + constructor(sourceResolver) { + this.sourcePositionHandlers = []; + this.nodeHandlers = []; + this.blockHandlers = []; + this.sourceResolver = sourceResolver; + }; + + addSourcePositionHandler(handler) { + this.sourcePositionHandlers.push(handler); + } + + addNodeHandler(handler) { + this.nodeHandlers.push(handler); + } + + addBlockHandler(handler) { + this.blockHandlers.push(handler); + } + + broadcastSourcePositionSelect(from, sourcePositions, selected) { + let broker = this; + sourcePositions = sourcePositions.filter((l) => { + if (!sourcePositionValid(l)) { + console.log("Warning: invalid source position"); + return false; + } + return true; + }); + for (const b of this.sourcePositionHandlers) { + if (b != from) b.brokeredSourcePositionSelect(sourcePositions, selected); + } + const nodes = this.sourceResolver.sourcePositionsToNodeIds(sourcePositions); + for (const b of this.nodeHandlers) { + if (b != from) b.brokeredNodeSelect(nodes, selected); + } + } + + broadcastNodeSelect(from, nodes, selected) { + let broker = this; + for (const b of this.nodeHandlers) { + if (b != from) b.brokeredNodeSelect(nodes, selected); + } + const sourcePositions = this.sourceResolver.nodeIdsToSourcePositions(nodes); + for (const b of this.sourcePositionHandlers) { + if (b != from) b.brokeredSourcePositionSelect(sourcePositions, selected); + } + } + + broadcastBlockSelect(from, blocks, selected) { + let broker = this; + for (var b of this.blockHandlers) { + if (b != from) b.brokeredBlockSelect(blocks, selected); + } + } + + broadcastClear(from) { + this.sourcePositionHandlers.forEach(function (b) { + if (b != from) b.brokeredClear(); + }); + this.nodeHandlers.forEach(function (b) { + if (b != from) b.brokeredClear(); + }); + this.blockHandlers.forEach(function (b) { + if (b != from) b.brokeredClear(); + }); + } +} diff --git a/deps/v8/tools/turbolizer/src/selection-handler.ts b/deps/v8/tools/turbolizer/src/selection-handler.ts new file mode 100644 index 00000000000000..bf0719c8a6626c --- /dev/null +++ b/deps/v8/tools/turbolizer/src/selection-handler.ts @@ -0,0 +1,24 @@ +// Copyright 2018 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +interface SelectionHandler { + clear(): void; + select(nodeIds: any, selected: any): void; + brokeredClear(): void; + brokeredSourcePositionSelect(sourcePositions: any, selected: any): void; +}; + +interface NodeSelectionHandler { + clear(): void; + select(nodeIds: any, selected: any): void; + brokeredClear(): void; + brokeredNodeSelect(nodeIds: any, selected: any): void; +}; + +interface BlockSelectionHandler { + clear(): void; + select(nodeIds: any, selected: any): void; + brokeredClear(): void; + brokeredBlockSelect(blockIds: any, selected: any): void; +}; diff --git a/deps/v8/tools/turbolizer/src/selection.ts b/deps/v8/tools/turbolizer/src/selection.ts new file mode 100644 index 00000000000000..54b685e9d68b7d --- /dev/null +++ b/deps/v8/tools/turbolizer/src/selection.ts @@ -0,0 +1,63 @@ +// Copyright 2015 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +class MySelection { + selection: any; + stringKey: (o: any) => string; + + constructor(stringKeyFnc) { + this.selection = new Map(); + this.stringKey = stringKeyFnc; + } + + isEmpty(): boolean { + return this.selection.size == 0; + } + + clear(): void { + this.selection = new Map(); + } + + select(s, isSelected) { + if (!isIterable(s)) { s = [s]; } + for (const i of s) { + if (!i) continue; + if (isSelected == undefined) { + isSelected = !this.selection.has(this.stringKey(i)); + } + if (isSelected) { + this.selection.set(this.stringKey(i), i); + } else { + this.selection.delete(this.stringKey(i)); + } + } + } + + isSelected(i): boolean { + return this.selection.has(this.stringKey(i)); + } + + isKeySelected(key: string): boolean { + return this.selection.has(key); + } + + selectedKeys() { + var result = new Set(); + for (var i of this.selection.keys()) { + result.add(i); + } + return result; + } + + detachSelection() { + var result = new Set(); + for (var i of this.selection.keys()) { + result.add(i); + } + this.clear(); + return result; + } + + [Symbol.iterator]() { return this.selection.values() } +} diff --git a/deps/v8/tools/turbolizer/src/source-resolver.ts b/deps/v8/tools/turbolizer/src/source-resolver.ts new file mode 100644 index 00000000000000..ba7e55d588611b --- /dev/null +++ b/deps/v8/tools/turbolizer/src/source-resolver.ts @@ -0,0 +1,526 @@ +// Copyright 2018 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +function sourcePositionLe(a, b) { + if (a.inliningId == b.inliningId) { + return a.scriptOffset - b.scriptOffset; + } + return a.inliningId - b.inliningId; +} + +function sourcePositionEq(a, b) { + return a.inliningId == b.inliningId && + a.scriptOffset == b.scriptOffset; +} + +function sourcePositionToStringKey(sourcePosition): string { + if (!sourcePosition) return "undefined"; + if (sourcePosition.inliningId && sourcePosition.scriptOffset) + return "SP:" + sourcePosition.inliningId + ":" + sourcePosition.scriptOffset; + if (sourcePosition.bytecodePosition) + return "BCP:" + sourcePosition.bytecodePosition; + return "undefined"; +} + +function sourcePositionValid(l) { + return (typeof l.scriptOffset !== undefined + && typeof l.inliningId !== undefined) || typeof l.bytecodePosition != undefined; +} + +interface SourcePosition { + scriptOffset: number; + inliningId: number; +} + +interface TurboFanOrigin { + phase: string; + reducer: string; +} + +interface NodeOrigin { + nodeId: number; +} + +interface BytecodePosition { + bytecodePosition: number; +} + +type Origin = NodeOrigin | BytecodePosition; +type TurboFanNodeOrigin = NodeOrigin & TurboFanOrigin; +type TurboFanBytecodeOrigin = BytecodePosition & TurboFanOrigin; + +type AnyPosition = SourcePosition | BytecodePosition; + +interface Source { + sourcePositions: Array; + sourceName: string; + functionName: string; + sourceText: string; + sourceId: number; + startPosition?: number; +} +interface Inlining { + inliningPosition: SourcePosition; + sourceId: number; +} +interface Phase { + type: string; + name: string; + data: any; +} + +interface Schedule { + nodes: Array; +} + +class SourceResolver { + nodePositionMap: Array; + sources: Array; + inlinings: Array; + inliningsMap: Map; + positionToNodes: Map>; + phases: Array; + phaseNames: Map; + disassemblyPhase: Phase; + lineToSourcePositions: Map>; + nodeIdToInstructionRange: Array<[number, number]>; + blockIdToInstructionRange: Array<[number, number]>; + instructionToPCOffset: Array; + pcOffsetToInstructions: Map>; + + + constructor() { + // Maps node ids to source positions. + this.nodePositionMap = []; + // Maps source ids to source objects. + this.sources = []; + // Maps inlining ids to inlining objects. + this.inlinings = []; + // Maps source position keys to inlinings. + this.inliningsMap = new Map(); + // Maps source position keys to node ids. + this.positionToNodes = new Map(); + // Maps phase ids to phases. + this.phases = []; + // Maps phase names to phaseIds. + this.phaseNames = new Map(); + // The disassembly phase is stored separately. + this.disassemblyPhase = undefined; + // Maps line numbers to source positions + this.lineToSourcePositions = new Map(); + // Maps node ids to instruction ranges. + this.nodeIdToInstructionRange = []; + // Maps block ids to instruction ranges. + this.blockIdToInstructionRange = []; + // Maps instruction numbers to PC offsets. + this.instructionToPCOffset = []; + // Maps PC offsets to instructions. + this.pcOffsetToInstructions = new Map(); + } + + setSources(sources, mainBackup) { + if (sources) { + for (let [sourceId, source] of Object.entries(sources)) { + this.sources[sourceId] = source; + this.sources[sourceId].sourcePositions = []; + } + } + // This is a fallback if the JSON is incomplete (e.g. due to compiler crash). + if (!this.sources[-1]) { + this.sources[-1] = mainBackup; + this.sources[-1].sourcePositions = []; + } + } + + setInlinings(inlinings) { + if (inlinings) { + for (const [inliningId, inlining] of Object.entries(inlinings)) { + this.inlinings[inliningId] = inlining; + this.inliningsMap.set(sourcePositionToStringKey(inlining.inliningPosition), inlining); + } + } + // This is a default entry for the script itself that helps + // keep other code more uniform. + this.inlinings[-1] = { sourceId: -1, inliningPosition: null }; + } + + setNodePositionMap(map) { + if (!map) return; + if (typeof map[0] != 'object') { + const alternativeMap = {}; + for (const [nodeId, scriptOffset] of Object.entries(map)) { + alternativeMap[nodeId] = { scriptOffset: scriptOffset, inliningId: -1 }; + } + map = alternativeMap; + }; + + for (const [nodeId, sourcePosition] of Object.entries(map)) { + if (sourcePosition == undefined) { + console.log("Warning: undefined source position ", sourcePosition, " for nodeId ", nodeId); + } + const inliningId = sourcePosition.inliningId; + const inlining = this.inlinings[inliningId]; + if (inlining) { + const sourceId = inlining.sourceId; + this.sources[sourceId].sourcePositions.push(sourcePosition); + } + this.nodePositionMap[nodeId] = sourcePosition; + let key = sourcePositionToStringKey(sourcePosition); + if (!this.positionToNodes.has(key)) { + this.positionToNodes.set(key, []); + } + this.positionToNodes.get(key).push(nodeId); + } + for (const [sourceId, source] of Object.entries(this.sources)) { + source.sourcePositions = sortUnique(source.sourcePositions, + sourcePositionLe, sourcePositionEq); + } + } + + sourcePositionsToNodeIds(sourcePositions) { + const nodeIds = new Set(); + for (const sp of sourcePositions) { + let key = sourcePositionToStringKey(sp); + let nodeIdsForPosition = this.positionToNodes.get(key); + if (!nodeIdsForPosition) continue; + for (const nodeId of nodeIdsForPosition) { + nodeIds.add(nodeId); + } + } + return nodeIds; + } + + nodeIdsToSourcePositions(nodeIds): Array { + const sourcePositions = new Map(); + for (const nodeId of nodeIds) { + let sp = this.nodePositionMap[nodeId]; + let key = sourcePositionToStringKey(sp); + sourcePositions.set(key, sp); + } + const sourcePositionArray = []; + for (const sp of sourcePositions.values()) { + sourcePositionArray.push(sp); + } + return sourcePositionArray; + } + + forEachSource(f) { + this.sources.forEach(f); + } + + translateToSourceId(sourceId, location) { + for (const position of this.getInlineStack(location)) { + let inlining = this.inlinings[position.inliningId]; + if (!inlining) continue; + if (inlining.sourceId == sourceId) { + return position; + } + } + return location; + } + + addInliningPositions(sourcePosition, locations) { + let inlining = this.inliningsMap.get(sourcePositionToStringKey(sourcePosition)); + if (!inlining) return; + let sourceId = inlining.sourceId + const source = this.sources[sourceId]; + for (const sp of source.sourcePositions) { + locations.push(sp); + this.addInliningPositions(sp, locations); + } + } + + getInliningForPosition(sourcePosition) { + return this.inliningsMap.get(sourcePositionToStringKey(sourcePosition)); + } + + getSource(sourceId) { + return this.sources[sourceId]; + } + + getSourceName(sourceId) { + const source = this.sources[sourceId]; + return `${source.sourceName}:${source.functionName}`; + } + + sourcePositionFor(sourceId, scriptOffset) { + if (!this.sources[sourceId]) { + return null; + } + const list = this.sources[sourceId].sourcePositions; + for (let i = 0; i < list.length; i++) { + const sourcePosition = list[i] + const position = sourcePosition.scriptOffset; + const nextPosition = list[Math.min(i + 1, list.length - 1)].scriptOffset; + if ((position <= scriptOffset && scriptOffset < nextPosition)) { + return sourcePosition; + } + } + return null; + } + + sourcePositionsInRange(sourceId, start, end) { + if (!this.sources[sourceId]) return []; + const res = []; + const list = this.sources[sourceId].sourcePositions; + for (let i = 0; i < list.length; i++) { + const sourcePosition = list[i] + if (start <= sourcePosition.scriptOffset && sourcePosition.scriptOffset < end) { + res.push(sourcePosition); + } + } + return res; + } + + getInlineStack(sourcePosition) { + if (!sourcePosition) { + return []; + } + let inliningStack = []; + let cur = sourcePosition; + while (cur && cur.inliningId != -1) { + inliningStack.push(cur); + let inlining = this.inlinings[cur.inliningId]; + if (!inlining) { + break; + } + cur = inlining.inliningPosition; + } + if (cur && cur.inliningId == -1) { + inliningStack.push(cur); + } + return inliningStack; + } + + recordOrigins(phase) { + if (phase.type != "graph") return; + for (const node of phase.data.nodes) { + if (node.origin != undefined && + node.origin.bytecodePosition != undefined) { + const position = { bytecodePosition: node.origin.bytecodePosition }; + this.nodePositionMap[node.id] = position; + let key = sourcePositionToStringKey(position); + if (!this.positionToNodes.has(key)) { + this.positionToNodes.set(key, []); + } + const A = this.positionToNodes.get(key); + if (!A.includes(node.id)) A.push("" + node.id); + } + } + } + + readNodeIdToInstructionRange(nodeIdToInstructionRange) { + for (const [nodeId, range] of Object.entries<[number, number]>(nodeIdToInstructionRange)) { + this.nodeIdToInstructionRange[nodeId] = range; + } + } + + readBlockIdToInstructionRange(blockIdToInstructionRange) { + for (const [blockId, range] of Object.entries<[number, number]>(blockIdToInstructionRange)) { + this.blockIdToInstructionRange[blockId] = range; + } + } + + getInstruction(nodeId):[number, number] { + const X = this.nodeIdToInstructionRange[nodeId]; + if (X === undefined) return [-1, -1]; + return X; + } + + getInstructionRangeForBlock(blockId):[number, number] { + const X = this.blockIdToInstructionRange[blockId]; + if (X === undefined) return [-1, -1]; + return X; + } + + readInstructionOffsetToPCOffset(instructionToPCOffset) { + for (const [instruction, offset] of Object.entries(instructionToPCOffset)) { + this.instructionToPCOffset[instruction] = offset; + if (!this.pcOffsetToInstructions.has(offset)) { + this.pcOffsetToInstructions.set(offset, []); + } + this.pcOffsetToInstructions.get(offset).push(instruction); + } + console.log(this.pcOffsetToInstructions); + } + + hasPCOffsets() { + return this.pcOffsetToInstructions.size > 0; + } + + + nodesForPCOffset(offset): [Array, Array] { + const keys = Array.from(this.pcOffsetToInstructions.keys()).sort((a, b) => b - a); + if (keys.length === 0) return [[],[]]; + for (const key of keys) { + if (key <= offset) { + const instrs = this.pcOffsetToInstructions.get(key); + const nodes = []; + const blocks = []; + for (const instr of instrs) { + for (const [nodeId, range] of this.nodeIdToInstructionRange.entries()) { + if (!range) continue; + const [start, end] = range; + if (start == end && instr == start) { + nodes.push("" + nodeId); + } + if (start <= instr && instr < end) { + nodes.push("" + nodeId); + } + } + } + return [nodes, blocks]; + } + } + return [[],[]]; + } + + parsePhases(phases) { + for (const [phaseId, phase] of Object.entries(phases)) { + if (phase.type == 'disassembly') { + this.disassemblyPhase = phase; + } else if (phase.type == 'schedule') { + this.phases.push(this.parseSchedule(phase)) + this.phaseNames.set(phase.name, this.phases.length); + } else if (phase.type == 'instructions') { + if (phase.nodeIdToInstructionRange) { + this.readNodeIdToInstructionRange(phase.nodeIdToInstructionRange); + } + if (phase.blockIdtoInstructionRange) { + this.readBlockIdToInstructionRange(phase.blockIdtoInstructionRange); + } + if (phase.instructionOffsetToPCOffset) { + this.readInstructionOffsetToPCOffset(phase.instructionOffsetToPCOffset); + } + } else { + this.phases.push(phase); + this.recordOrigins(phase); + this.phaseNames.set(phase.name, this.phases.length); + } + } + } + + repairPhaseId(anyPhaseId) { + return Math.max(0, Math.min(anyPhaseId, this.phases.length - 1)) + } + + getPhase(phaseId) { + return this.phases[phaseId]; + } + + getPhaseIdByName(phaseName) { + return this.phaseNames.get(phaseName); + } + + forEachPhase(f) { + this.phases.forEach(f); + } + + addAnyPositionToLine(lineNumber: number | String, sourcePosition: AnyPosition) { + const lineNumberString = anyToString(lineNumber); + if (!this.lineToSourcePositions.has(lineNumberString)) { + this.lineToSourcePositions.set(lineNumberString, []); + } + const A = this.lineToSourcePositions.get(lineNumberString); + if (!A.includes(sourcePosition)) A.push(sourcePosition); + } + + setSourceLineToBytecodePosition(sourceLineToBytecodePosition: Array | undefined) { + if (!sourceLineToBytecodePosition) return; + sourceLineToBytecodePosition.forEach((pos, i) => { + this.addAnyPositionToLine(i, { bytecodePosition: pos }); + }); + } + + linetoSourcePositions(lineNumber: number | String) { + const positions = this.lineToSourcePositions.get(anyToString(lineNumber)); + if (positions === undefined) return []; + return positions; + } + + parseSchedule(phase) { + function createNode(state, match) { + let inputs = []; + if (match.groups.args) { + const nodeIdsString = match.groups.args.replace(/\s/g, ''); + const nodeIdStrings = nodeIdsString.split(','); + inputs = nodeIdStrings.map((n) => Number.parseInt(n, 10)); + } + const node = { + id: Number.parseInt(match.groups.id, 10), + label: match.groups.label, + inputs: inputs + }; + if (match.groups.blocks) { + const nodeIdsString = match.groups.blocks.replace(/\s/g, '').replace(/B/g, ''); + const nodeIdStrings = nodeIdsString.split(','); + const successors = nodeIdStrings.map((n) => Number.parseInt(n, 10)); + state.currentBlock.succ = successors; + } + state.nodes[node.id] = node; + state.currentBlock.nodes.push(node); + } + function createBlock(state, match) { + let predecessors = []; + if (match.groups.in) { + const blockIdsString = match.groups.in.replace(/\s/g, '').replace(/B/g, ''); + const blockIdStrings = blockIdsString.split(','); + predecessors = blockIdStrings.map((n) => Number.parseInt(n, 10)); + } + const block = { + id: Number.parseInt(match.groups.id, 10), + isDeferred: match.groups.deferred != undefined, + pred: predecessors.sort(), + succ: [], + nodes: [] + }; + state.blocks[block.id] = block; + state.currentBlock = block; + } + function setGotoSuccessor(state, match) { + state.currentBlock.succ = [Number.parseInt(match.groups.successor.replace(/\s/g, ''), 10)]; + } + const rules = [ + { + lineRegexps: + [/^\s*(?\d+):\ (?