• Joyee Cheung's avatar
    [class] implement reparsing of class instance member initializers · 91f08378
    Joyee Cheung authored
    Previously, since the source code for the synthetic class instance
    member initializer function was recorded as the span from the first
    initializer to the last initializer, there was no way to reparse the
    class and recompile the initializer function. It was working for
    most use cases because the code for the initializer function was
    generated eagarly and it was usually alive as long as the class was
    alive, so the initializer wouldn't normally be lazily parsed. This
    didn't work, however, when the class was snapshotted with
    v8::SnapshotCreator::FunctionCodeHandling::kClear,
    becuase then we needed to recompile the initializer when the class
    was instantiated. This patch implements the reparsing so that
    these classes can work with FunctionCodeHandling::kClear.
    
    This patch refactors ParserBase::ParseClassLiteral() so that we can
    reuse it for both parsing the class body normally and reparsing it
    to collect initializers. When reparsing the synthetic initializer
    function, we rewind the scanner to the beginning of the class, and
    parse the class body to collect the initializers. During the
    reparsing, field initializers are parsed with the full parser while
    methods of the class are pre-parsed.
    
    A few notable changes:
    
    - Extended the source range of the initializer function to cover the
      entire class so that we can rewind the scanner to parse the class
      body to collect initializers (previously, it starts from the first
      field initializer and ends at the last initializer). This resulted
      some expectation changes in the debugger tests, though the
      initializers remain debuggable.
    - A temporary ClassScope is created during reparsing. After the class
      is reparsed, we use the information from the ScopeInfo to update
      the allocated indices of the variables in the ClassScope.
    
    Bug: v8:10704
    Change-Id: Ifb6431a1447d8844f2a548283d59158742fe9027
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2988830Reviewed-by: 's avatarLeszek Swirski <leszeks@chromium.org>
    Reviewed-by: 's avatarToon Verwaest <verwaest@chromium.org>
    Commit-Queue: Joyee Cheung <joyee@igalia.com>
    Cr-Commit-Position: refs/heads/main@{#78299}
    91f08378
Name
Last commit
Last update
..
api Loading commit data...
asmjs Loading commit data...
ast Loading commit data...
base Loading commit data...
baseline Loading commit data...
bigint Loading commit data...
builtins Loading commit data...
codegen Loading commit data...
common Loading commit data...
compiler Loading commit data...
compiler-dispatcher Loading commit data...
d8 Loading commit data...
date Loading commit data...
debug Loading commit data...
deoptimizer Loading commit data...
diagnostics Loading commit data...
execution Loading commit data...
extensions Loading commit data...
flags Loading commit data...
handles Loading commit data...
heap Loading commit data...
ic Loading commit data...
init Loading commit data...
inspector Loading commit data...
interpreter Loading commit data...
json Loading commit data...
libplatform Loading commit data...
libsampler Loading commit data...
logging Loading commit data...
numbers Loading commit data...
objects Loading commit data...
parsing Loading commit data...
profiler Loading commit data...
protobuf Loading commit data...
regexp Loading commit data...
roots Loading commit data...
runtime Loading commit data...
sanitizer Loading commit data...
security Loading commit data...
snapshot Loading commit data...
strings Loading commit data...
tasks Loading commit data...
temporal Loading commit data...
third_party Loading commit data...
torque Loading commit data...
tracing Loading commit data...
trap-handler Loading commit data...
utils Loading commit data...
wasm Loading commit data...
web-snapshot Loading commit data...
zone Loading commit data...
DEPS Loading commit data...
DIR_METADATA Loading commit data...
OWNERS Loading commit data...