mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2026-04-18 09:50:27 +00:00
Specialize only the fixed unary case in the bytecode generator and let all other argument counts keep using the generic Call instruction. This keeps the builtin bytecode simple while still covering the common fast path. The asm interpreter handles int32 inputs directly, applies the ToUint16 mask in-place, and reuses the VM's cached ASCII single-character strings when the result is 7-bit representable. Non-ASCII single code unit results stay on the dedicated builtin path via a small helper, and the dedicated slow path still handles the generic cases.
36 lines
923 B
C++
36 lines
923 B
C++
/*
|
|
* Copyright (c) 2020, Andreas Kling <andreas@ladybird.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <LibJS/Runtime/NativeFunction.h>
|
|
|
|
namespace JS {
|
|
|
|
class StringConstructor final : public NativeFunction {
|
|
JS_OBJECT(StringConstructor, NativeFunction);
|
|
GC_DECLARE_ALLOCATOR(StringConstructor);
|
|
|
|
public:
|
|
virtual void initialize(Realm&) override;
|
|
virtual ~StringConstructor() override = default;
|
|
|
|
static ThrowCompletionOr<Value> from_char_code_impl(VM&, Value);
|
|
|
|
virtual ThrowCompletionOr<Value> call() override;
|
|
virtual ThrowCompletionOr<GC::Ref<Object>> construct(FunctionObject& new_target) override;
|
|
|
|
private:
|
|
explicit StringConstructor(Realm&);
|
|
|
|
virtual bool has_constructor() const override { return true; }
|
|
|
|
JS_DECLARE_NATIVE_FUNCTION(raw);
|
|
JS_DECLARE_NATIVE_FUNCTION(from_char_code);
|
|
JS_DECLARE_NATIVE_FUNCTION(from_code_point);
|
|
};
|
|
|
|
}
|