--- a/libraries/source/spidermonkey/build.sh 2015-11-05 01:31:26.204848864 +0100 +++ b/libraries/source/spidermonkey/build.sh 2015-11-05 01:32:31.717771625 +0100 @@ -84,6 +84,9 @@ # It makes quite a big difference for performance. # https://bugzilla.mozilla.org/show_bug.cgi?id=1046176 patch -p1 -i ../FixForOfBailouts.diff + +# don't return nullptrs in bool functions +patch -p1 -i ../bool-nullptr-return.diff cd .. # Clean up header files that may be left over by earlier versions of SpiderMonkey --- /dev/null 2015-11-02 02:46:51.863218540 +0100 +++ b/libraries/source/spidermonkey/bool-nullptr-return.diff 2015-11-05 01:46:16.839831506 +0100 @@ -0,0 +1,151 @@ +--- a/js/src/frontend/BytecodeCompiler.cpp 2015-11-05 01:09:52.563331263 +0100 ++++ b/js/src/frontend/BytecodeCompiler.cpp 2015-11-05 00:57:40.641427973 +0100 +@@ -544,7 +544,7 @@ + + RootedScriptSource sourceObject(cx, CreateScriptSourceObject(cx, options)); + if (!sourceObject) +- return nullptr; ++ return false; + ScriptSource *ss = sourceObject->source(); + + SourceCompressionTask sct(cx); +--- a/js/src/builtin/TypedObject.cpp 2015-11-05 01:16:52.147112669 +0100 ++++ b/js/src/builtin/TypedObject.cpp 2015-11-05 00:56:15.208587236 +0100 +@@ -710,12 +710,12 @@ + contents.append(")"); + RootedAtom stringRepr(cx, contents.finishAtom()); + if (!stringRepr) +- return nullptr; ++ return false; + + // Extract ArrayType.prototype + RootedObject arrayTypePrototype(cx, GetPrototype(cx, arrayTypeGlobal)); + if (!arrayTypePrototype) +- return nullptr; ++ return false; + + // Create the instance of ArrayType + Rooted obj(cx); +@@ -728,7 +728,7 @@ + if (!JSObject::defineProperty(cx, obj, cx->names().length, + UndefinedHandleValue, nullptr, nullptr, + JSPROP_READONLY | JSPROP_PERMANENT)) +- return nullptr; ++ return false; + + args.rval().setObject(*obj); + return true; +@@ -762,7 +762,7 @@ + if (!size.isValid()) { + JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, + JSMSG_TYPEDOBJECT_TOO_BIG); +- return nullptr; ++ return false; + } + + // Construct a canonical string `new ArrayType().dimension(N)`: +@@ -775,7 +775,7 @@ + contents.append(")"); + RootedAtom stringRepr(cx, contents.finishAtom()); + if (!stringRepr) +- return nullptr; ++ return false; + + // Create the sized type object. + Rooted obj(cx); +@@ -793,7 +793,7 @@ + if (!JSObject::defineProperty(cx, obj, cx->names().length, + lengthVal, nullptr, nullptr, + JSPROP_READONLY | JSPROP_PERMANENT)) +- return nullptr; ++ return false; + + // Add `unsized` property, which is a link from the sized + // array to the unsized array. +@@ -801,7 +801,7 @@ + if (!JSObject::defineProperty(cx, obj, cx->names().unsized, + unsizedTypeDescrValue, nullptr, nullptr, + JSPROP_READONLY | JSPROP_PERMANENT)) +- return nullptr; ++ return false; + + args.rval().setObject(*obj); + return true; +@@ -1253,7 +1253,7 @@ + Rooted proto(cx); + proto = NewObjectWithProto(cx, objProto, nullptr, TenuredObject); + if (!proto) +- return nullptr; ++ return false; + proto->initTypeDescrSlot(*descr); + descr->initReservedSlot(JS_DESCR_SLOT_TYPROTO, ObjectValue(*proto)); + +@@ -1358,14 +1358,14 @@ + #define BINARYDATA_SCALAR_DEFINE(constant_, type_, name_) \ + if (!DefineSimpleTypeDescr(cx, global, module, constant_, \ + cx->names().name_)) \ +- return nullptr; ++ return false; + JS_FOR_EACH_SCALAR_TYPE_REPR(BINARYDATA_SCALAR_DEFINE) + #undef BINARYDATA_SCALAR_DEFINE + + #define BINARYDATA_REFERENCE_DEFINE(constant_, type_, name_) \ + if (!DefineSimpleTypeDescr(cx, global, module, constant_, \ + cx->names().name_)) \ +- return nullptr; ++ return false; + JS_FOR_EACH_REFERENCE_TYPE_REPR(BINARYDATA_REFERENCE_DEFINE) + #undef BINARYDATA_REFERENCE_DEFINE + +@@ -1375,14 +1375,14 @@ + arrayType = DefineMetaTypeDescr( + cx, global, module, TypedObjectModuleObject::ArrayTypePrototype); + if (!arrayType) +- return nullptr; ++ return false; + + RootedValue arrayTypeValue(cx, ObjectValue(*arrayType)); + if (!JSObject::defineProperty(cx, module, cx->names().ArrayType, + arrayTypeValue, + nullptr, nullptr, + JSPROP_READONLY | JSPROP_PERMANENT)) +- return nullptr; ++ return false; + + // StructType. + +@@ -1390,14 +1390,14 @@ + structType = DefineMetaTypeDescr( + cx, global, module, TypedObjectModuleObject::StructTypePrototype); + if (!structType) +- return nullptr; ++ return false; + + RootedValue structTypeValue(cx, ObjectValue(*structType)); + if (!JSObject::defineProperty(cx, module, cx->names().StructType, + structTypeValue, + nullptr, nullptr, + JSPROP_READONLY | JSPROP_PERMANENT)) +- return nullptr; ++ return false; + + // Everything is setup, install module on the global object: + RootedValue moduleValue(cx, ObjectValue(*module)); +@@ -1407,7 +1407,7 @@ + nullptr, nullptr, + 0)) + { +- return nullptr; ++ return false; + } + + return module; +@@ -2466,7 +2466,7 @@ + if (length < 0) { + JS_ReportErrorNumber(cx, js_GetErrorMessage, + nullptr, JSMSG_TYPEDOBJECT_BAD_ARGS); +- return nullptr; ++ return false; + } + Rooted obj(cx, createZeroed(cx, callee, length)); + if (!obj)