Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (209356 => 209357)
--- trunk/Source/_javascript_Core/ChangeLog 2016-12-05 22:56:14 UTC (rev 209356)
+++ trunk/Source/_javascript_Core/ChangeLog 2016-12-05 23:00:36 UTC (rev 209357)
@@ -1,5 +1,22 @@
2016-12-05 Geoffrey Garen <gga...@apple.com>
+ Renamed source => parentSource
+ https://bugs.webkit.org/show_bug.cgi?id=165419
+
+ Reviewed by Saam Barati.
+
+ This should help clarify that a FunctionExecutable holds the source
+ code to its *parent* scope, and not its own SourceCode.
+
+ * builtins/BuiltinExecutables.cpp:
+ (JSC::BuiltinExecutables::createExecutable):
+ * bytecode/UnlinkedFunctionExecutable.cpp:
+ (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
+ (JSC::UnlinkedFunctionExecutable::link):
+ * bytecode/UnlinkedFunctionExecutable.h:
+
+2016-12-05 Geoffrey Garen <gga...@apple.com>
+
ScriptExecutable should not contain a copy of firstLine and startColumn
https://bugs.webkit.org/show_bug.cgi?id=165415
Modified: trunk/Source/_javascript_Core/builtins/BuiltinExecutables.cpp (209356 => 209357)
--- trunk/Source/_javascript_Core/builtins/BuiltinExecutables.cpp 2016-12-05 22:56:14 UTC (rev 209356)
+++ trunk/Source/_javascript_Core/builtins/BuiltinExecutables.cpp 2016-12-05 23:00:36 UTC (rev 209357)
@@ -76,7 +76,7 @@
bool isParsingDefaultConstructor = constructorKind != ConstructorKind::None;
JSParserBuiltinMode builtinMode = isParsingDefaultConstructor ? JSParserBuiltinMode::NotBuiltin : JSParserBuiltinMode::Builtin;
UnlinkedFunctionKind kind = isParsingDefaultConstructor ? UnlinkedNormalFunction : UnlinkedBuiltinFunction;
- RefPtr<SourceProvider> sourceOverride = isParsingDefaultConstructor ? source.provider() : nullptr;
+ SourceCode parentSourceOverride = isParsingDefaultConstructor ? source : SourceCode();
std::unique_ptr<ProgramNode> program = parse<ProgramNode>(
&vm, source, Identifier(), builtinMode,
JSParserStrictMode::NotStrict, JSParserScriptMode::Classic, SourceParseMode::ProgramMode, SuperBinding::NotNeeded, error,
@@ -105,7 +105,7 @@
RELEASE_ASSERT(metadata);
metadata->overrideName(name);
VariableEnvironment dummyTDZVariables;
- UnlinkedFunctionExecutable* functionExecutable = UnlinkedFunctionExecutable::create(&vm, source, metadata, kind, constructAbility, JSParserScriptMode::Classic, dummyTDZVariables, DerivedContextType::None, WTFMove(sourceOverride));
+ UnlinkedFunctionExecutable* functionExecutable = UnlinkedFunctionExecutable::create(&vm, source, metadata, kind, constructAbility, JSParserScriptMode::Classic, dummyTDZVariables, DerivedContextType::None, WTFMove(parentSourceOverride));
return functionExecutable;
}
Modified: trunk/Source/_javascript_Core/bytecode/UnlinkedFunctionExecutable.cpp (209356 => 209357)
--- trunk/Source/_javascript_Core/bytecode/UnlinkedFunctionExecutable.cpp 2016-12-05 22:56:14 UTC (rev 209356)
+++ trunk/Source/_javascript_Core/bytecode/UnlinkedFunctionExecutable.cpp 2016-12-05 23:00:36 UTC (rev 209357)
@@ -75,7 +75,7 @@
return result;
}
-UnlinkedFunctionExecutable::UnlinkedFunctionExecutable(VM* vm, Structure* structure, const SourceCode& source, RefPtr<SourceProvider>&& sourceOverride, FunctionMetadataNode* node, UnlinkedFunctionKind kind, ConstructAbility constructAbility, JSParserScriptMode scriptMode, VariableEnvironment& parentScopeTDZVariables, DerivedContextType derivedContextType)
+UnlinkedFunctionExecutable::UnlinkedFunctionExecutable(VM* vm, Structure* structure, const SourceCode& source, SourceCode&& parentSourceOverride, FunctionMetadataNode* node, UnlinkedFunctionKind kind, ConstructAbility constructAbility, JSParserScriptMode scriptMode, VariableEnvironment& parentScopeTDZVariables, DerivedContextType derivedContextType)
: Base(*vm, structure)
, m_firstLineOffset(node->firstLine() - source.firstLine())
, m_lineCount(node->lastLine() - node->firstLine())
@@ -103,7 +103,7 @@
, m_name(node->ident())
, m_ecmaName(node->ecmaName())
, m_inferredName(node->inferredName())
- , m_sourceOverride(WTFMove(sourceOverride))
+ , m_parentSourceOverride(WTFMove(parentSourceOverride))
, m_classSource(node->classSource())
{
// Make sure these bitfields are adequately wide.
@@ -131,35 +131,35 @@
visitor.append(&thisObject->m_unlinkedCodeBlockForConstruct);
}
-FunctionExecutable* UnlinkedFunctionExecutable::link(VM& vm, const SourceCode& ownerSource, std::optional<int> overrideLineNumber, Intrinsic intrinsic)
+FunctionExecutable* UnlinkedFunctionExecutable::link(VM& vm, const SourceCode& passedParentSource, std::optional<int> overrideLineNumber, Intrinsic intrinsic)
{
- SourceCode source = m_sourceOverride ? SourceCode(m_sourceOverride) : ownerSource;
- unsigned firstLine = source.firstLine() + m_firstLineOffset;
- unsigned startOffset = source.startOffset() + m_startOffset;
+ const SourceCode& parentSource = m_parentSourceOverride.isNull() ? passedParentSource : m_parentSourceOverride;
+ unsigned firstLine = parentSource.firstLine() + m_firstLineOffset;
+ unsigned startOffset = parentSource.startOffset() + m_startOffset;
unsigned lineCount = m_lineCount;
// Adjust to one-based indexing.
bool startColumnIsOnFirstSourceLine = !m_firstLineOffset;
- unsigned startColumn = m_unlinkedBodyStartColumn + (startColumnIsOnFirstSourceLine ? source.startColumn() : 1);
+ unsigned startColumn = m_unlinkedBodyStartColumn + (startColumnIsOnFirstSourceLine ? parentSource.startColumn() : 1);
bool endColumnIsOnStartLine = !lineCount;
unsigned endColumn = m_unlinkedBodyEndColumn + (endColumnIsOnStartLine ? startColumn : 1);
- SourceCode code(source.provider(), startOffset, startOffset + m_sourceLength, firstLine, startColumn);
+ SourceCode source(parentSource.provider(), startOffset, startOffset + m_sourceLength, firstLine, startColumn);
FunctionOverrides::OverrideInfo overrideInfo;
bool hasFunctionOverride = false;
if (UNLIKELY(Options::functionOverrides())) {
- hasFunctionOverride = FunctionOverrides::initializeOverrideFor(code, overrideInfo);
+ hasFunctionOverride = FunctionOverrides::initializeOverrideFor(source, overrideInfo);
if (UNLIKELY(hasFunctionOverride)) {
firstLine = overrideInfo.firstLine;
lineCount = overrideInfo.lineCount;
startColumn = overrideInfo.startColumn;
endColumn = overrideInfo.endColumn;
- code = overrideInfo.sourceCode;
+ source = overrideInfo.sourceCode;
}
}
- FunctionExecutable* result = FunctionExecutable::create(vm, code, this, firstLine + lineCount, endColumn, intrinsic);
+ FunctionExecutable* result = FunctionExecutable::create(vm, source, this, firstLine + lineCount, endColumn, intrinsic);
if (overrideLineNumber)
result->setOverrideLineNumber(*overrideLineNumber);
Modified: trunk/Source/_javascript_Core/bytecode/UnlinkedFunctionExecutable.h (209356 => 209357)
--- trunk/Source/_javascript_Core/bytecode/UnlinkedFunctionExecutable.h 2016-12-05 22:56:14 UTC (rev 209356)
+++ trunk/Source/_javascript_Core/bytecode/UnlinkedFunctionExecutable.h 2016-12-05 23:00:36 UTC (rev 209357)
@@ -64,10 +64,10 @@
typedef JSCell Base;
static const unsigned StructureFlags = Base::StructureFlags | StructureIsImmortal;
- static UnlinkedFunctionExecutable* create(VM* vm, const SourceCode& source, FunctionMetadataNode* node, UnlinkedFunctionKind unlinkedFunctionKind, ConstructAbility constructAbility, JSParserScriptMode scriptMode, VariableEnvironment& parentScopeTDZVariables, DerivedContextType derivedContextType, RefPtr<SourceProvider>&& sourceOverride = nullptr)
+ static UnlinkedFunctionExecutable* create(VM* vm, const SourceCode& source, FunctionMetadataNode* node, UnlinkedFunctionKind unlinkedFunctionKind, ConstructAbility constructAbility, JSParserScriptMode scriptMode, VariableEnvironment& parentScopeTDZVariables, DerivedContextType derivedContextType, SourceCode&& parentSourceOverride = SourceCode())
{
UnlinkedFunctionExecutable* instance = new (NotNull, allocateCell<UnlinkedFunctionExecutable>(vm->heap))
- UnlinkedFunctionExecutable(vm, vm->unlinkedFunctionExecutableStructure.get(), source, WTFMove(sourceOverride), node, unlinkedFunctionKind, constructAbility, scriptMode, parentScopeTDZVariables, derivedContextType);
+ UnlinkedFunctionExecutable(vm, vm->unlinkedFunctionExecutableStructure.get(), source, WTFMove(parentSourceOverride), node, unlinkedFunctionKind, constructAbility, scriptMode, parentScopeTDZVariables, derivedContextType);
instance->finishCreation(*vm);
return instance;
}
@@ -106,7 +106,7 @@
const Identifier&, ExecState&, const SourceCode&, JSObject*& exception,
int overrideLineNumber);
- JS_EXPORT_PRIVATE FunctionExecutable* link(VM&, const SourceCode&, std::optional<int> overrideLineNumber = std::nullopt, Intrinsic = NoIntrinsic);
+ JS_EXPORT_PRIVATE FunctionExecutable* link(VM&, const SourceCode& parentSource, std::optional<int> overrideLineNumber = std::nullopt, Intrinsic = NoIntrinsic);
void clearCode()
{
@@ -142,7 +142,7 @@
void setSourceMappingURLDirective(const String& sourceMappingURL) { m_sourceMappingURLDirective = sourceMappingURL; }
private:
- UnlinkedFunctionExecutable(VM*, Structure*, const SourceCode&, RefPtr<SourceProvider>&& sourceOverride, FunctionMetadataNode*, UnlinkedFunctionKind, ConstructAbility, JSParserScriptMode, VariableEnvironment&, JSC::DerivedContextType);
+ UnlinkedFunctionExecutable(VM*, Structure*, const SourceCode&, SourceCode&& parentSourceOverride, FunctionMetadataNode*, UnlinkedFunctionKind, ConstructAbility, JSParserScriptMode, VariableEnvironment&, JSC::DerivedContextType);
unsigned m_firstLineOffset;
unsigned m_lineCount;
@@ -174,7 +174,7 @@
Identifier m_name;
Identifier m_ecmaName;
Identifier m_inferredName;
- RefPtr<SourceProvider> m_sourceOverride;
+ SourceCode m_parentSourceOverride;
SourceCode m_classSource;
String m_sourceURLDirective;