Bug 1575055 - Avoid duplicating CompileOptions constructor code. r=jandem

Differential Revision: https://phabricator.services.mozilla.com/D42562

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Ted Campbell 2019-08-22 11:59:42 +00:00
parent 094cb37502
commit 64ba0d5e30
2 changed files with 15 additions and 22 deletions

View File

@ -214,8 +214,9 @@ class JS_PUBLIC_API ReadOnlyCompileOptions : public TransitiveCompileOptions {
ReadOnlyCompileOptions() = default;
// Set all POD options (those not requiring reference counts, copies,
// rooting, or other hand-holding) to their values in |rhs|.
void copyPODOptions(const ReadOnlyCompileOptions& rhs);
// rooting, or other hand-holding) not set by copyPODTransitiveOptions to
// their values in |rhs|.
void copyPODNonTransitiveOptions(const ReadOnlyCompileOptions& rhs);
public:
// Read-only accessors for non-POD options. The proper way to set these
@ -288,25 +289,10 @@ class MOZ_STACK_CLASS JS_PUBLIC_API CompileOptions final
Rooted<JSScript*> scriptOrModuleRoot;
public:
// Default options determined using the JSContext.
explicit CompileOptions(JSContext* cx);
CompileOptions(JSContext* cx, const ReadOnlyCompileOptions& rhs)
: ReadOnlyCompileOptions(),
elementRoot(cx),
elementAttributeNameRoot(cx),
introductionScriptRoot(cx),
scriptOrModuleRoot(cx) {
copyPODOptions(rhs);
filename_ = rhs.filename();
introducerFilename_ = rhs.introducerFilename();
sourceMapURL_ = rhs.sourceMapURL();
elementRoot = rhs.element();
elementAttributeNameRoot = rhs.elementAttributeName();
introductionScriptRoot = rhs.introductionScript();
scriptOrModuleRoot = rhs.scriptOrModule();
}
// Copy the transitive options from another options object.
CompileOptions(JSContext* cx, const TransitiveCompileOptions& rhs)
: ReadOnlyCompileOptions(),
elementRoot(cx),
@ -324,6 +310,13 @@ class MOZ_STACK_CLASS JS_PUBLIC_API CompileOptions final
scriptOrModuleRoot = rhs.scriptOrModule();
}
// Copy both the transitive and the non-transitive options from another
// options object.
CompileOptions(JSContext* cx, const ReadOnlyCompileOptions& rhs)
: CompileOptions(cx, static_cast<const TransitiveCompileOptions&>(rhs)) {
copyPODNonTransitiveOptions(rhs);
}
JSObject* element() const override { return elementRoot; }
JSString* elementAttributeName() const override {

View File

@ -3541,9 +3541,8 @@ void JS::TransitiveCompileOptions::copyPODTransitiveOptions(
fieldsEnabledOption = rhs.fieldsEnabledOption;
}
void JS::ReadOnlyCompileOptions::copyPODOptions(
void JS::ReadOnlyCompileOptions::copyPODNonTransitiveOptions(
const ReadOnlyCompileOptions& rhs) {
copyPODTransitiveOptions(rhs);
lineno = rhs.lineno;
column = rhs.column;
scriptSourceOffset = rhs.scriptSourceOffset;
@ -3583,7 +3582,8 @@ bool JS::OwningCompileOptions::copy(JSContext* cx,
// Release existing string allocations.
release();
copyPODOptions(rhs);
copyPODTransitiveOptions(rhs);
copyPODNonTransitiveOptions(rhs);
elementRoot = rhs.element();
elementAttributeNameRoot = rhs.elementAttributeName();