[webkit-changes] [WebKit/WebKit] e2c5cd: [JSC] Implement JSON.parse source text access prop...

Yusuke Suzuki noreply at github.com
Sat Dec 21 13:43:59 PST 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: e2c5cd5d4c07dff63d3670741f6e559534eae2cb
      https://github.com/WebKit/WebKit/commit/e2c5cd5d4c07dff63d3670741f6e559534eae2cb
  Author: Yusuke Suzuki <ysuzuki at apple.com>
  Date:   2024-12-21 (Sat, 21 Dec 2024)

  Changed paths:
    A JSTests/stress/json-parse-source-text-access.js
    A JSTests/stress/json-raw-json-stringify.js
    A JSTests/stress/json-raw-json.js
    M JSTests/test262/config.yaml
    M LayoutTests/js/Object-getOwnPropertyNames-expected.txt
    M LayoutTests/js/script-tests/Object-getOwnPropertyNames.js
    M Source/JavaScriptCore/API/JSValueRef.cpp
    M Source/JavaScriptCore/API/glib/JSCValue.cpp
    M Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
    M Source/JavaScriptCore/SaferCPPExpectations/NoUncountedMemberCheckerExpectations
    M Source/JavaScriptCore/SaferCPPExpectations/UncountedCallArgsCheckerExpectations
    M Source/JavaScriptCore/Sources.txt
    M Source/JavaScriptCore/heap/Heap.cpp
    M Source/JavaScriptCore/heap/Heap.h
    M Source/JavaScriptCore/interpreter/Interpreter.cpp
    M Source/JavaScriptCore/runtime/CommonIdentifiers.h
    M Source/JavaScriptCore/runtime/JSGlobalObject.cpp
    M Source/JavaScriptCore/runtime/JSGlobalObject.h
    M Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp
    M Source/JavaScriptCore/runtime/JSGlobalObjectInlines.h
    M Source/JavaScriptCore/runtime/JSONObject.cpp
    M Source/JavaScriptCore/runtime/JSONObject.h
    A Source/JavaScriptCore/runtime/JSRawJSONObject.cpp
    A Source/JavaScriptCore/runtime/JSRawJSONObject.h
    M Source/JavaScriptCore/runtime/LiteralParser.cpp
    M Source/JavaScriptCore/runtime/LiteralParser.h
    M Source/JavaScriptCore/runtime/OptionsList.h
    M Source/JavaScriptCore/runtime/SmallStrings.h

  Log Message:
  -----------
  [JSC] Implement JSON.parse source text access proposal
https://bugs.webkit.org/show_bug.cgi?id=248031
rdar://131579181

Reviewed by Yijia Huang.

This patch implements JSON.parse source text access proposal[1], which is now stage-3.
This patch implements two major things in the proposal.
The most important part of this patch is not regressing the existing
extremely optimized JSON implementation for the fast path. Thus this
patch adds template parameter to LiteralParser and disable all the
slight changes when we are using the fast path.

1. JSON.rawJSON mechaism. Now new object type is integrated, and JSON.rawJSON can wrap JSON text
   with this object, which is a tool to inject raw JSON text into JSON.stringify. JSON.stringify
   uses held string from rawJSON-created object.
2. JSON.parse collects source information during parsing, and offer substring of text as a third parameter
   of JSON.parse reviver function.

[1]: https://github.com/tc39/proposal-json-parse-with-source

* JSTests/stress/json-parse-source-text-access.js: Added.
(shouldBe):
* JSTests/stress/json-raw-json-stringify.js: Added.
(shouldBe):
(shouldBe.JSON.stringify):
* JSTests/stress/json-raw-json.js: Added.
(shouldBe):
(shouldThrow):
(SyntaxError.JSON.Parse.error.Single.quotes.shouldThrow):
* Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj:
* Source/JavaScriptCore/Sources.txt:
* Source/JavaScriptCore/heap/Heap.cpp:
* Source/JavaScriptCore/heap/Heap.h:
* Source/JavaScriptCore/runtime/CommonIdentifiers.h:
* Source/JavaScriptCore/runtime/JSGlobalObject.cpp:
(JSC::createJSONProperty):
(JSC::JSGlobalObject::init):
* Source/JavaScriptCore/runtime/JSGlobalObject.h:
(JSC::JSGlobalObject::rawJSONObjectStructure const):
* Source/JavaScriptCore/runtime/JSONObject.cpp:
(JSC::JSONObject::finishCreation):
(JSC::Stringifier::appendStringifiedValue):
(JSC::Walker::Walker):
(JSC::Walker::callReviver):
(JSC::Walker::walk):
(JSC::JSC_DEFINE_HOST_FUNCTION):
* Source/JavaScriptCore/runtime/JSONObject.h:
* Source/JavaScriptCore/runtime/JSRawJSONObject.cpp: Added.
(JSC::JSRawJSONObject::JSRawJSONObject):
(JSC::JSRawJSONObject::finishCreation):
(JSC::JSRawJSONObject::createStructure):
(JSC::JSRawJSONObject::rawJSON):
* Source/JavaScriptCore/runtime/JSRawJSONObject.h: Copied from Source/JavaScriptCore/runtime/JSONObject.h.
* Source/JavaScriptCore/runtime/LiteralParser.cpp:
(JSC::LiteralParser<CharType>::tryJSONPParse):
(JSC::LiteralParser<CharType>::parse):
* Source/JavaScriptCore/runtime/LiteralParser.h:
(JSC::JSONRanges::JSONRanges):
(JSC::JSONRanges::root const):
(JSC::LiteralParser::tryLiteralParse):
(JSC::LiteralParser::tryLiteralParsePrimitiveValue):
(JSC::LiteralParser::Lexer::Lexer):
(JSC::LiteralParser::Lexer::start const):
* Source/JavaScriptCore/runtime/OptionsList.h:

Canonical link: https://commits.webkit.org/288223@main



To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications


More information about the webkit-changes mailing list