author | Brian Hackett <bhackett1024@gmail.com> |
Thu, 29 Jan 2015 11:50:43 -0700 | |
changeset 226559 | 51ac953371fe498d244c1fa9abcdbb42ac2a9df8 |
parent 226558 | f6ac06e9143de3a389d972f140fd7c35305d98c8 |
child 226560 | b35d3104b6bd7a20ffd9cac9e57cca395d2cc284 |
push id | 28200 |
push user | kwierso@gmail.com |
push date | Thu, 29 Jan 2015 23:01:46 +0000 |
treeherder | mozilla-central@4380ed39de3a [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | jandem |
bugs | 1125389 |
milestone | 38.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
js/src/jsinfer.cpp | file | annotate | diff | comparison | revisions | |
js/src/vm/Shape.cpp | file | annotate | diff | comparison | revisions |
--- a/js/src/jsinfer.cpp +++ b/js/src/jsinfer.cpp @@ -4041,18 +4041,23 @@ TypeNewScript::maybeAnalyze(JSContext *c JSObject *objBase = preliminaryObjects->get(i); if (!objBase) continue; PlainObject *obj = &objBase->as<PlainObject>(); // For now, we require all preliminary objects to have only simple // lineages of plain data properties. Shape *shape = obj->lastProperty(); - if (shape->inDictionary() || !OnlyHasDataProperties(shape)) + if (shape->inDictionary() || + !OnlyHasDataProperties(shape) || + shape->getObjectFlags() != 0 || + shape->getObjectMetadata() != nullptr) + { return true; + } maxSlotSpan = Max<size_t>(maxSlotSpan, obj->slotSpan()); if (prefixShape) { MOZ_ASSERT(shape->numFixedSlots() == prefixShape->numFixedSlots()); prefixShape = CommonPrefix(prefixShape, shape); } else { prefixShape = shape;
--- a/js/src/vm/Shape.cpp +++ b/js/src/vm/Shape.cpp @@ -635,17 +635,22 @@ js::NewReshapedObject(JSContext *cx, Han while (!nshape->isEmptyShape()) { ids[nshape->slot()].set(nshape->propid()); nshape = nshape->previous(); } } /* Construct the new shape, without updating type information. */ RootedId id(cx); - RootedShape newShape(cx, res->lastProperty()); + RootedShape newShape(cx, EmptyShape::getInitialShape(cx, res->getClass(), + res->getTaggedProto(), + res->getMetadata(), + res->getParent(), + res->numFixedSlots(), + shape->getObjectFlags())); for (unsigned i = 0; i < ids.length(); i++) { id = ids[i]; MOZ_ASSERT(!res->contains(cx, id)); uint32_t index; bool indexed = js_IdIsIndex(id, &index); Rooted<UnownedBaseShape*> nbase(cx, newShape->base()->unowned());