Go to file
Joyee Cheung 4d0d31f41b [class] support out-of-scope private member access in debug-evaluate
Previously in the DevTools console, users could inspect a preview of all private class members on an instance, but if they wanted to evaluate or inspect a  specific private class member out of a long list, they had to be debugging and in a scope that has access to those private names.

This patch adds support for extraordinary access of out-of-scope private member access in debug-evaluate, specifically for Debugger.evaluateOnCallframe() (for console calls invoked during debugging) and Runtime.evaluate() (for console calls invoked when the user is not debugging). This kind of access is not otherwise allowed in normal execution, but in the DevTools console it makes sense to relax the rules a bit for a better developer experience.

To support this kind of extraordinary access, if the parsing_while_debugging or is_repl_mode flag is set, when we encounter a private name reference that's in a top-level scope or an eval scope under a top-level scope, instead of throwing immediately, we bind the reference to a dynamic lookup variable, and emit bytecode that calls to %GetPrivateName() or %SetPrivateName() in the runtime to perform lookup of the private name as well as the load/store operations accordingly.

If there are more than on private name on the receiver matching the description (for example, an object with two `#field` private names from different classes), we throw an error for the ambiguity (we can consider supporting selection among the conflicting private names later, for the initial support we just throw for simplicity).

If there are no matching private names, or if the found private class member does not support the desired operation (e.g. attempting to write to a read-only private accessor), we throw an error as well.

If there is exactly one matching private name, and the found private class member support the desired operation, we dispatch to the proper behavior in the runtime calls.

Doc: https://docs.google.com/document/d/1Va89BKHjCDs9RccDWhuZBb6LyRMAd6BXM3-p25oHd8I/edit

Bug: chromium:1381806
Change-Id: I7d1db709470246050d2e4c2a85b2292e63c01fe9
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/4020267
Commit-Queue: Joyee Cheung <joyee@igalia.com>
Reviewed-by: Toon Verwaest <verwaest@chromium.org>
Cr-Commit-Position: refs/heads/main@{#85421}
2023-01-20 22:26:44 +00:00
.github
bazel [turbofan] Add the v8_enable_turbofan build option 2023-01-11 10:57:54 +00:00
build_overrides
custom_deps
docs
gni Disable TF in lite mode 2023-01-12 09:54:54 +00:00
include cppgc: Optimize MakeGarbageCollected 2023-01-19 18:46:28 +00:00
infra [gcmole] Run gcmole on bots with matching architecture 2023-01-17 13:56:18 +00:00
samples [sandbox] Initialize sandbox during V8::Initialize 2022-07-15 09:29:32 +00:00
src [class] support out-of-scope private member access in debug-evaluate 2023-01-20 22:26:44 +00:00
test [class] support out-of-scope private member access in debug-evaluate 2023-01-20 22:26:44 +00:00
testing
third_party [reland] adds the ability for v8 to use sin/cos from libm 2022-12-02 21:59:04 +00:00
tools [gdbinit] Fix sim command 2023-01-19 14:00:32 +00:00
.bazelrc
.clang-format
.clang-tidy
.editorconfig
.flake8
.git-blame-ignore-revs [git blame] Add a few old refactors to .git-blame-ignore-revs 2023-01-04 15:43:38 +00:00
.gitattributes
.gitignore Adds sin/cos from glibc 2022-11-30 09:20:05 +00:00
.gn [fuchsia] Add API target level default value 2022-08-29 14:46:45 +00:00
.mailmap Add .mailmap entries for jgruber 2022-08-04 08:53:02 +00:00
.style.yapf
.vpython3 Reland "[resultdb] Add ResultDB indicator" 2022-10-14 11:05:59 +00:00
.ycm_extra_conf.py [ycm] Fix YouCompleteMe config 2022-11-02 15:59:48 +00:00
AUTHORS [turbofan] Optimize access to the length property of functions 2023-01-19 19:16:48 +00:00
BUILD.bazel [heap] Fix saving the callee-saved registers on stack 2023-01-19 12:29:05 +00:00
BUILD.gn [maglev] MaglevAssembler Scratch Register Scope 2023-01-19 13:07:47 +00:00
CODE_OF_CONDUCT.md
codereview.settings
COMMON_OWNERS [owners] Add mliedtke to COMMON_OWNERS 2022-09-16 14:12:27 +00:00
DEPS Update V8 DEPS (trusted) 2023-01-20 03:49:44 +00:00
DIR_METADATA
ENG_REVIEW_OWNERS Add mlippautz@ to ENG_REVIEW_OWNERS. 2022-10-06 18:48:33 +00:00
INFRA_OWNERS [infra] Add alexschulze@ as infra owner 2022-07-18 09:08:54 +00:00
INTL_OWNERS
LICENSE [mips32] Delete mips32 from v8 2022-09-13 07:54:54 +00:00
LICENSE.fdlibm
LICENSE.strongtalk
LICENSE.v8
LOONG_OWNERS
MIPS_OWNERS
OWNERS Make .ycm_extra_conf owned by COMMON_OWNERS 2022-11-07 09:51:53 +00:00
PPC_OWNERS
PRESUBMIT.py [presubmit] Handle Windows path for header guard check 2022-12-13 17:30:02 +00:00
README.md
RISCV_OWNERS
S390_OWNERS
WATCHLISTS Add a WATCHLIST entry for trap-handler 2023-01-18 09:00:37 +00:00
WORKSPACE [bazel] Remove zlib dependency 2022-08-17 15:30:25 +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.