diff options
author | Martok <martok@martoks-place.de> | 2023-04-09 19:18:03 +0200 |
---|---|---|
committer | Martok <martok@martoks-place.de> | 2023-04-30 20:56:23 +0200 |
commit | d4be309498c8e99df597923edbe4ec2d65974606 (patch) | |
tree | 10bd533722a4e37beb18bfd87433bfa2506b889d | |
parent | 196d6a6931d32e2812162141f16888f5baf26984 (diff) | |
download | uxp-d4be309498c8e99df597923edbe4ec2d65974606.tar.gz |
Issue #2142 - Change InitPropertyOperation to accept a PropertyName directy and use DefineDataProperty
Based-on: m-c 1413907, 1547129
-rw-r--r-- | js/src/jit/BaselineIC.cpp | 2 | ||||
-rw-r--r-- | js/src/jit/VMFunctions.cpp | 3 | ||||
-rw-r--r-- | js/src/vm/Interpreter-inl.h | 11 | ||||
-rw-r--r-- | js/src/vm/Interpreter.cpp | 7 |
4 files changed, 11 insertions, 12 deletions
diff --git a/js/src/jit/BaselineIC.cpp b/js/src/jit/BaselineIC.cpp index 7dbe239a7e..61d77adc2e 100644 --- a/js/src/jit/BaselineIC.cpp +++ b/js/src/jit/BaselineIC.cpp @@ -4584,7 +4584,7 @@ DoSetPropFallback(JSContext* cx, BaselineFrame* frame, ICSetProp_Fallback* stub_ op == JSOP_INITLOCKEDPROP || op == JSOP_INITHIDDENPROP) { - if (!InitPropertyOperation(cx, op, obj, id, rhs)) + if (!InitPropertyOperation(cx, op, obj, name, rhs)) return false; } else if (op == JSOP_SETNAME || op == JSOP_STRICTSETNAME || diff --git a/js/src/jit/VMFunctions.cpp b/js/src/jit/VMFunctions.cpp index 01a22482eb..f191ce7d6d 100644 --- a/js/src/jit/VMFunctions.cpp +++ b/js/src/jit/VMFunctions.cpp @@ -232,8 +232,7 @@ bool InitProp(JSContext* cx, HandleObject obj, HandlePropertyName name, HandleValue value, jsbytecode* pc) { - RootedId id(cx, NameToId(name)); - return InitPropertyOperation(cx, JSOp(*pc), obj, id, value); + return InitPropertyOperation(cx, JSOp(*pc), obj, name, value); } template<bool Equal> diff --git a/js/src/vm/Interpreter-inl.h b/js/src/vm/Interpreter-inl.h index 5c2320d3fb..79a4b90200 100644 --- a/js/src/vm/Interpreter-inl.h +++ b/js/src/vm/Interpreter-inl.h @@ -340,12 +340,15 @@ InitGlobalLexicalOperation(JSContext* cx, LexicalEnvironmentObject* lexicalEnvAr } inline bool -InitPropertyOperation(JSContext* cx, JSOp op, HandleObject obj, HandleId id, HandleValue rhs) +InitPropertyOperation(JSContext* cx, JSOp op, HandleObject obj, HandlePropertyName name, HandleValue rhs) { - if (obj->is<PlainObject>() || obj->is<JSFunction>()) { + RootedId id(cx, NameToId(name)); + + // {Goanna} DefineProperty works on almost any JSObject, but there's no good way to check what works + // So instead, check what we don't handle explicitly. + if (!obj->is<UnboxedPlainObject>()) { unsigned propAttrs = GetInitDataPropAttrs(op); - return NativeDefineProperty(cx, obj.as<NativeObject>(), id, rhs, nullptr, nullptr, - propAttrs); + return DefineProperty(cx, obj, id, rhs, nullptr, nullptr, propAttrs); } MOZ_ASSERT(obj->as<UnboxedPlainObject>().layout().lookup(id)); diff --git a/js/src/vm/Interpreter.cpp b/js/src/vm/Interpreter.cpp index 5fccc00d54..b17c762eae 100644 --- a/js/src/vm/Interpreter.cpp +++ b/js/src/vm/Interpreter.cpp @@ -3744,12 +3744,9 @@ CASE(JSOP_INITHIDDENPROP) /* Load the object being initialized into lval/obj. */ ReservedRooted<JSObject*> obj(&rootObject0, ®S.sp[-2].toObject()); - PropertyName* name = script->getName(REGS.pc); - - RootedId& id = rootId0; - id = NameToId(name); + ReservedRooted<PropertyName*> name(&rootName0, script->getName(REGS.pc)); - if (!InitPropertyOperation(cx, JSOp(*REGS.pc), obj, id, rval)) + if (!InitPropertyOperation(cx, JSOp(*REGS.pc), obj, name, rval)) goto error; REGS.sp--; |