• Joyee Cheung's avatar
    Revert "[class] implement reparsing of class instance member initializers" · f668e9f7
    Joyee Cheung authored
    This reverts commit 91f08378.
    
    Reason for revert: It's a fairly big change, and the clusterfuzz
    found some bugs. Will reland with the fix after M98 branch point.
    
    Original change's description:
    > [class] implement reparsing of class instance member initializers
    >
    > 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/+/2988830
    > Reviewed-by: Leszek Swirski <leszeks@chromium.org>
    > Reviewed-by: Toon Verwaest <verwaest@chromium.org>
    > Commit-Queue: Joyee Cheung <joyee@igalia.com>
    > Cr-Commit-Position: refs/heads/main@{#78299}
    
    Bug: v8:10704
    Change-Id: I039cb728ebf0ada438a8f26c7d2c2547dbe3bf2d
    No-Presubmit: true
    No-Tree-Checks: true
    No-Try: true
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3325328
    Auto-Submit: Joyee Cheung <joyee@igalia.com>
    Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
    Reviewed-by: 's avatarMarja Hölttä <marja@chromium.org>
    Reviewed-by: 's avatarLeszek Swirski <leszeks@chromium.org>
    Commit-Queue: Leszek Swirski <leszeks@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#78315}
    f668e9f7
parser.h 44.4 KB