|
@@ -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)
|
|
|
{
|