From 379a4231fee789f0962aa3a0f21955c326af7ada Mon Sep 17 00:00:00 2001 From: Gaming4JC Date: Sat, 13 Jul 2019 23:21:45 -0400 Subject: [PATCH] 1367204 - Generate "[sourceless code]" for class constructors when sourceIsLazy and no source hook is set. --- js/src/jsfun.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/js/src/jsfun.cpp b/js/src/jsfun.cpp index 06dc40162a..9edf238efd 100644 --- a/js/src/jsfun.cpp +++ b/js/src/jsfun.cpp @@ -1013,7 +1013,20 @@ js::FunctionToString(JSContext* cx, HandleFunction fun, bool prettyPrint) if (!out.append(")")) return nullptr; } - } else if (fun->isInterpreted() && !fun->isSelfHostedBuiltin()) { + } else if (fun->isInterpreted() && + (!fun->isSelfHostedBuiltin() || + fun->infallibleIsDefaultClassConstructor(cx))) + { + // Default class constructors should always haveSource except; + // + // 1. Source has been discarded for the whole compartment. + // + // 2. The source is marked as "lazy", i.e., retrieved on demand, and + // the embedding has not provided a hook to retrieve sources. + MOZ_ASSERT_IF(fun->infallibleIsDefaultClassConstructor(cx), + !cx->runtime()->sourceHook || + !script->scriptSource()->sourceRetrievable() || + fun->compartment()->behaviors().discardSource()); if (!AppendPrelude() || !out.append("() {\n ") || !out.append("[sourceless code]") || @@ -1022,10 +1035,6 @@ js::FunctionToString(JSContext* cx, HandleFunction fun, bool prettyPrint) return nullptr; } } else { - // Default class constructors should always haveSource unless source - // has been discarded for the whole compartment. - MOZ_ASSERT(!fun->infallibleIsDefaultClassConstructor(cx) || - fun->compartment()->behaviors().discardSource()); if (!AppendPrelude() || !out.append("() {\n "))