mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-26 09:30:24 +00:00
LibJS: Implement the CanBeHeldWeakly abstract operation
This AO is required for implementing the rest of the stage 3 'Symbol as WeakMap Keys Proposal'.
This commit is contained in:
parent
8e26edc8de
commit
22a78e8a2c
Notes:
sideshowbarker
2024-07-17 10:01:52 +09:00
Author: https://github.com/IdanHo Commit: https://github.com/SerenityOS/serenity/commit/22a78e8a2c Pull-request: https://github.com/SerenityOS/serenity/pull/14361 Reviewed-by: https://github.com/alimpfard ✅ Reviewed-by: https://github.com/linusg ✅
2 changed files with 20 additions and 0 deletions
|
@ -456,6 +456,25 @@ Environment& get_this_environment(VM& vm)
|
|||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
||||
// 9.14 CanBeHeldWeakly ( v ), https://tc39.es/proposal-symbols-as-weakmap-keys/#sec-canbeheldweakly-abstract-operation
|
||||
bool can_be_held_weakly(Value value)
|
||||
{
|
||||
// 1. If Type(v) is Object, return true.
|
||||
if (value.is_object())
|
||||
return true;
|
||||
|
||||
// 2. If Type(v) is Symbol, then
|
||||
if (value.is_symbol()) {
|
||||
// a. For each element e of the GlobalSymbolRegistry List (see 19.4.2.2), do
|
||||
// i. If SameValue(e.[[Symbol]], v) is true, return false.
|
||||
// b. Return true.
|
||||
return !value.as_symbol().is_global();
|
||||
}
|
||||
|
||||
// 3. Return false.
|
||||
return false;
|
||||
}
|
||||
|
||||
// 13.3.7.2 GetSuperConstructor ( ), https://tc39.es/ecma262/#sec-getsuperconstructor
|
||||
Object* get_super_constructor(VM& vm)
|
||||
{
|
||||
|
|
|
@ -24,6 +24,7 @@ ObjectEnvironment* new_object_environment(Object&, bool is_with_environment, Env
|
|||
FunctionEnvironment* new_function_environment(ECMAScriptFunctionObject&, Object* new_target);
|
||||
PrivateEnvironment* new_private_environment(VM& vm, PrivateEnvironment* outer);
|
||||
Environment& get_this_environment(VM&);
|
||||
bool can_be_held_weakly(Value);
|
||||
Object* get_super_constructor(VM&);
|
||||
ThrowCompletionOr<Reference> make_super_property_reference(GlobalObject&, Value actual_this, PropertyKey const&, bool strict);
|
||||
ThrowCompletionOr<Value> require_object_coercible(GlobalObject&, Value);
|
||||
|
|
Loading…
Reference in a new issue