mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-10-16 21:20:18 +00:00
This has quite a lot of fall out. But the majority of it is just type or UDL substitution, where the changes just fall through to other function calls. By changing property key storage to UTF-16, the main affected areas are: * NativeFunction names must now be UTF-16 * Bytecode identifiers must now be UTF-16 * Module/binding names must now be UTF-16
57 lines
1.9 KiB
C++
57 lines
1.9 KiB
C++
/*
|
|
* Copyright (c) 2020, Matthew Olsson <mattco@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <LibJS/Export.h>
|
|
#include <LibJS/Runtime/Object.h>
|
|
|
|
namespace JS {
|
|
|
|
class JS_API JSONObject final : public Object {
|
|
JS_OBJECT(JSONObject, Object);
|
|
GC_DECLARE_ALLOCATOR(JSONObject);
|
|
|
|
public:
|
|
virtual void initialize(Realm&) override;
|
|
virtual ~JSONObject() override = default;
|
|
|
|
// The base implementation of stringify is exposed because it is used by
|
|
// test-js to communicate between the JS tests and the C++ test runner.
|
|
static ThrowCompletionOr<Optional<String>> stringify_impl(VM&, Value value, Value replacer, Value space);
|
|
|
|
static ThrowCompletionOr<Value> parse_json(VM&, StringView text);
|
|
static Value parse_json_value(VM&, JsonValue const&);
|
|
|
|
private:
|
|
explicit JSONObject(Realm&);
|
|
|
|
struct StringifyState {
|
|
GC::Ptr<FunctionObject> replacer_function;
|
|
HashTable<GC::Ptr<Object>> seen_objects;
|
|
String indent;
|
|
String gap;
|
|
Optional<Vector<Utf16String>> property_list;
|
|
};
|
|
|
|
// Stringify helpers
|
|
static ThrowCompletionOr<Optional<String>> serialize_json_property(VM&, StringifyState&, PropertyKey const& key, Object* holder);
|
|
static ThrowCompletionOr<String> serialize_json_object(VM&, StringifyState&, Object&);
|
|
static ThrowCompletionOr<String> serialize_json_array(VM&, StringifyState&, Object&);
|
|
static String quote_json_string(Utf16View const&);
|
|
|
|
// Parse helpers
|
|
static Object* parse_json_object(VM&, JsonObject const&);
|
|
static Array* parse_json_array(VM&, JsonArray const&);
|
|
static ThrowCompletionOr<Value> internalize_json_property(VM&, Object* holder, PropertyKey const& name, FunctionObject& reviver);
|
|
|
|
JS_DECLARE_NATIVE_FUNCTION(stringify);
|
|
JS_DECLARE_NATIVE_FUNCTION(parse);
|
|
JS_DECLARE_NATIVE_FUNCTION(raw_json);
|
|
JS_DECLARE_NATIVE_FUNCTION(is_raw_json);
|
|
};
|
|
|
|
}
|