Go to file
Seth Brenith c2d419a341 [torque] Add a way to specify that a class field is optional
Currently, some ScopeInfo fields are defined as indexed fields with a
length of either one or zero, because the field might be present or it
might not. Based on comments in https://crrev.com/c/v8/v8/+/2601880 ,
this strategy is not sustainable and we need a better way to represent
optional fields so that we don't have to pass zero when accessing their
only element. This change is a proposal to fix that problem.

Syntax:

I'm proposing using a question mark because TypeScript does, and Torque
syntax looks somewhat like TypeScript. I don't feel strongly about this
though, and I'm open to other suggestions.
  field_name?[condition_expression]: FieldType;

Internal Torque compiler representation:

Internally, I've updated the Torque compiler to still treat these fields
as indexed, but with an extra flag saying they're optional. When getting
a LocationReference for a field access expression on an optional field,
Torque produces a Slice like it would for any other indexed field and
subsequently calls AtIndex(0) to get a Reference.

AtIndex can crash the process if the index is out of bounds (which is
good), so some other parts of the Torque compiler need minor adjustments
so that it doesn't take references to optional fields unless it actually
needs them.

Initialization:

This proposal doesn't include any changes to initialization logic, so an
optional field can still be initialized using '...' and an iterator.
Perhaps we could introduce an Optional<T> struct for prettier
initialization in a future change.

Bug: v8:7793
Change-Id: I37649495f4c259e685261f53e4cf2859da66a31f
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2706306
Commit-Queue: Seth Brenith <seth.brenith@microsoft.com>
Reviewed-by: Nico Hartmann <nicohartmann@chromium.org>
Reviewed-by: Leszek Swirski <leszeks@chromium.org>
Cr-Commit-Position: refs/heads/master@{#73018}
2021-02-24 18:35:40 +00:00
.github [github] Close PRs created on the V8 GitHub mirror automatically 2021-01-12 08:39:59 +00:00
build_overrides [build] Remove obsolete gn flag 2021-01-11 15:50:59 +00:00
custom_deps Use relative paths to OWNERS files 2019-08-12 13:52:52 +00:00
docs Add OWNERS for docs/ 2019-05-15 12:06:15 +00:00
gni [build] Assert that webassembly is disabled on lite mode 2021-02-23 15:00:33 +00:00
include cppgc: Add testing::Heap that allows invoking stand-alone GCs 2021-02-24 14:51:54 +00:00
infra [MB] Add a Mac-on_arm compile only trybot 2021-02-22 15:36:34 +00:00
samples cppgc: Avoid initializing cppgc platform through V8 2021-02-09 08:26:11 +00:00
src [torque] Add a way to specify that a class field is optional 2021-02-24 18:35:40 +00:00
test Revert "[wasm][eh] Stage exception handling" 2021-02-24 17:38:25 +00:00
testing build: Remove no-op calls to set_sources_assignment_filter 2020-10-08 14:44:01 +00:00
third_party [csa][cleanup] Simplify StoreFixedArrayElement 2021-02-19 14:01:50 +00:00
tools Revert "[wasm][eh] Stage exception handling" 2021-02-24 17:38:25 +00:00
.clang-format
.clang-tidy [tool] Remove unfixed clang-tidy warnings to ease use. 2018-10-26 07:40:32 +00:00
.editorconfig Add .editorconfig 2017-07-28 13:39:24 +00:00
.flake8 Add .flake8 to allow for python style checking. 2019-07-19 21:44:03 +00:00
.git-blame-ignore-revs [infra] Update .git-blame-ignore-revs 2020-03-03 12:59:13 +00:00
.gitattributes .gitattributes: Mark minified emscripten js files as -diff 2018-09-19 16:27:10 +00:00
.gitignore [build] Remove legacy binutils 2021-01-08 12:33:31 +00:00
.gn [build] Dynamically decide if to use system xcode 2019-07-29 08:20:24 +00:00
.vpython [tools] Implement confidence-based number of runs 2019-05-09 09:42:28 +00:00
.ycm_extra_conf.py Fix ycm config for headers without source 2019-12-09 11:59:21 +00:00
AUTHORS [aarm64] Fix GetSharedLibraryAddresses 2021-02-22 09:10:20 +00:00
BUILD.gn [wasm][turbofan] Implement loop unrolling for wasm 2021-02-24 14:44:24 +00:00
CODE_OF_CONDUCT.md
codereview.settings
COMMON_OWNERS Remove tebbi from OWNERS and TODOs 2021-01-21 13:23:00 +00:00
DEPS Update V8 DEPS. 2021-02-24 03:52:21 +00:00
DIR_METADATA Add DIR_METADATA files to v8. 2020-10-20 22:12:28 +00:00
ENG_REVIEW_OWNERS Add eng review owners as escalation path 2019-05-15 19:12:10 +00:00
INFRA_OWNERS Add team members as owners 2020-08-18 08:29:04 +00:00
INTL_OWNERS add ftang as owner 2020-04-24 19:19:36 +00:00
LICENSE [wasm] Draft version of C/C++ Wasm API 2019-04-17 16:00:26 +00:00
LICENSE.fdlibm
LICENSE.strongtalk
LICENSE.v8
MIPS_OWNERS [mips] Request to be an owner of MIPS files 2020-11-23 09:43:49 +00:00
OWNERS Add RISC-V backend 2021-02-09 17:06:36 +00:00
PPC_OWNERS Adding myself to relevant OWNERS files. 2020-11-02 16:37:28 +00:00
PRESUBMIT.py cppgc: Add testing API structure 2021-02-03 16:00:37 +00:00
README.md [docs] Change links from old wiki to v8.dev 2019-03-07 12:13:30 +00:00
RISCV_OWNERS Add RISC-V backend 2021-02-09 17:06:36 +00:00
S390_OWNERS Adding myself to relevant OWNERS files. 2020-11-02 16:37:28 +00:00
WATCHLISTS Add a watchlist for ieee754.(cc|h) changes. 2021-01-11 18:10:19 +00:00

V8 JavaScript Engine

V8 is Google's open source JavaScript engine.

V8 implements ECMAScript as specified in ECMA-262.

V8 is written in C++ and is used in Google Chrome, the open source browser from Google.

V8 can run standalone, or can be embedded into any C++ application.

V8 Project page: https://v8.dev/docs

Getting the Code

Checkout depot tools, and run

    fetch v8

This will checkout V8 into the directory v8 and fetch all of its dependencies. To stay up to date, run

    git pull origin
    gclient sync

For fetching all branches, add the following into your remote configuration in .git/config:

    fetch = +refs/branch-heads/*:refs/remotes/branch-heads/*
    fetch = +refs/tags/*:refs/tags/*

Contributing

Please follow the instructions mentioned at v8.dev/docs/contribute.