From a605c553c5b3a7268dd268a31d727fc13bf2bd9b Mon Sep 17 00:00:00 2001 From: Tom Schuster Date: Sat, 18 Aug 2018 17:22:19 +0200 Subject: [PATCH] Bug 1483999 - Avoid duplicate GetBuiltinClass call. r=sfink --HG-- extra : rebase_source : a81bce76862f6f219ce84120aab9b393b6605e6e extra : histedit_source : f9dedef53df5568948935c0f5f30c5b578a87168 --- js/src/vm/StructuredClone.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/js/src/vm/StructuredClone.cpp b/js/src/vm/StructuredClone.cpp index 5315ea113466..8dfd3cee9661 100644 --- a/js/src/vm/StructuredClone.cpp +++ b/js/src/vm/StructuredClone.cpp @@ -519,7 +519,7 @@ struct JSStructuredCloneWriter { bool writeSharedWasmMemory(HandleObject obj); bool startObject(HandleObject obj, bool* backref); bool startWrite(HandleValue v); - bool traverseObject(HandleObject obj); + bool traverseObject(HandleObject obj, ESClass cls); bool traverseMap(HandleObject obj); bool traverseSet(HandleObject obj); bool traverseSavedFrame(HandleObject obj); @@ -1376,7 +1376,7 @@ JSStructuredCloneWriter::startObject(HandleObject obj, bool* backref) } bool -JSStructuredCloneWriter::traverseObject(HandleObject obj) +JSStructuredCloneWriter::traverseObject(HandleObject obj, ESClass cls) { // Get enumerable property ids and put them in reverse order so that they // will come off the stack in forward order. @@ -1397,11 +1397,14 @@ JSStructuredCloneWriter::traverseObject(HandleObject obj) checkStack(); - // Write the header for obj. - ESClass cls; - if (!GetBuiltinClass(context(), obj, &cls)) +#if DEBUG + ESClass cls2; + if (!GetBuiltinClass(context(), obj, &cls2)) return false; + MOZ_ASSERT(cls2 == cls); +#endif + // Write the header for obj. if (cls == ESClass::Array) { uint32_t length = 0; if (!JS_GetArrayLength(context(), obj, &length)) @@ -1614,7 +1617,7 @@ JSStructuredCloneWriter::startWrite(HandleValue v) switch (cls) { case ESClass::Object: case ESClass::Array: - return traverseObject(obj); + return traverseObject(obj, cls); case ESClass::Number: { RootedValue unboxed(context()); if (!Unbox(context(), obj, &unboxed))