From 757c601d5acf94c7d6a66ceafffa41086f5a6585 Mon Sep 17 00:00:00 2001 From: Jeff Walden Date: Mon, 27 Jan 2014 16:33:03 -0800 Subject: [PATCH] Bug 963641 - Miscellaneous cleanups not implicated in actual bugs. r=jorendorff --HG-- extra : rebase_source : a7969e756bc5456b6524fab8f602f61a7ed83a13 --- js/src/frontend/BytecodeEmitter.cpp | 7 ++----- js/src/frontend/FullParseHandler.h | 7 +------ js/src/jit/BaselineIC.cpp | 18 +++++++++++------- 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/js/src/frontend/BytecodeEmitter.cpp b/js/src/frontend/BytecodeEmitter.cpp index 7c6986ff870..512c8e7003c 100644 --- a/js/src/frontend/BytecodeEmitter.cpp +++ b/js/src/frontend/BytecodeEmitter.cpp @@ -5894,11 +5894,8 @@ EmitObject(ExclusiveContext *cx, BytecodeEmitter *bce, ParseNode *pn) /* * Emit code for {p:a, '%q':b, 2:c} that is equivalent to constructing - * a new object and in source order evaluating each property value and - * adding the property to the object, without invoking latent setters. - * We use the JSOP_NEWINIT and JSOP_INITELEM/JSOP_INITPROP bytecodes to - * ignore setters and to avoid dup'ing and popping the object as each - * property is added, as JSOP_SETELEM/JSOP_SETPROP would do. + * a new object and defining (in source order) each property on the object + * (or mutating the object's [[Prototype]], in the case of __proto__). */ ptrdiff_t offset = bce->offset(); if (!EmitNewInit(cx, bce, JSProto_Object)) diff --git a/js/src/frontend/FullParseHandler.h b/js/src/frontend/FullParseHandler.h index 82d1d77fb6e..90e9e82f7e8 100644 --- a/js/src/frontend/FullParseHandler.h +++ b/js/src/frontend/FullParseHandler.h @@ -254,12 +254,7 @@ class FullParseHandler bool addShorthandPropertyDefinition(ParseNode *literal, ParseNode *name) { JS_ASSERT(literal->isArity(PN_LIST)); literal->pn_xflags |= PNX_DESTRUCT | PNX_NONCONST; // XXX why PNX_DESTRUCT? - - ParseNode *propdef = newBinary(PNK_COLON, name, name, JSOP_INITPROP); - if (!propdef) - return false; - literal->append(propdef); - return true; + return addPropertyDefinition(literal, name, name); } bool addAccessorPropertyDefinition(ParseNode *literal, ParseNode *name, ParseNode *fn, JSOp op) diff --git a/js/src/jit/BaselineIC.cpp b/js/src/jit/BaselineIC.cpp index b45d2c92fbb..4f84a6c5d86 100644 --- a/js/src/jit/BaselineIC.cpp +++ b/js/src/jit/BaselineIC.cpp @@ -7250,8 +7250,9 @@ DoSetPropFallback(JSContext *cx, BaselineFrame *frame, ICSetProp_Fallback *stub, RootedShape oldShape(cx, obj->lastProperty()); uint32_t oldSlots = obj->numDynamicSlots(); - if (op == JSOP_INITPROP && name != cx->names().proto) { - JS_ASSERT(obj->is()); + if (op == JSOP_INITPROP) { + MOZ_ASSERT(name != cx->names().proto, "should have used JSOP_MUTATEPROTO"); + MOZ_ASSERT(obj->is()); if (!DefineNativeProperty(cx, obj, id, rhs, nullptr, nullptr, JSPROP_ENUMERATE, 0, 0, 0)) return false; } else if (op == JSOP_SETNAME || op == JSOP_SETGNAME) { @@ -7259,12 +7260,15 @@ DoSetPropFallback(JSContext *cx, BaselineFrame *frame, ICSetProp_Fallback *stub, return false; } else if (op == JSOP_SETALIASEDVAR) { obj->as().setAliasedVar(cx, pc, name, rhs); - } else if (script->strict()) { - if (!js::SetProperty(cx, obj, id, rhs)) - return false; } else { - if (!js::SetProperty(cx, obj, id, rhs)) - return false; + MOZ_ASSERT(op == JSOP_SETPROP); + if (script->strict()) { + if (!js::SetProperty(cx, obj, id, rhs)) + return false; + } else { + if (!js::SetProperty(cx, obj, id, rhs)) + return false; + } } // Leave the RHS on the stack.