Source/JavaScriptCore: Rolled back in <http://trac.webkit.org/changeset/127698> with a fix for
fast/dom/HTMLScriptElement/script-reexecution-pretty-diff.html, which
is to make sure that function declarations don't put their names in scope.
Reviewed by Gavin Barraclough.
Named functions should not allocate scope objects for their names
https://bugs.webkit.org/show_bug.cgi?id=95659
Reviewed by Oliver Hunt.
LayoutTests: Rolled back in <http://trac.webkit.org/changeset/127698> with a fix for
fast/dom/HTMLScriptElement/script-reexecution-pretty-diff.html.
Added a more explicit test for the feature I broke in
fast/dom/HTMLScriptElement/script-reexecution-pretty-diff.html.
Reviewed by Gavin Barraclough.
Named functions should not allocate scope objects for their names
https://bugs.webkit.org/show_bug.cgi?id=95659
Reviewed by Oliver Hunt.
* fast/dom/HTMLScriptElement/script-reexecution.html:
* fast/js/function-name-is-in-scope-expected.txt: Added.
* fast/js/function-name-is-in-scope.html: Added.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@127810 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h b/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h
index d3b5266..037a2ce 100644
--- a/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h
+++ b/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h
@@ -617,7 +617,9 @@
int addGlobalVar(const Identifier&, ConstantMode, FunctionMode);
void addParameter(const Identifier&, int parameterIndex);
-
+ RegisterID* resolveCallee(FunctionBodyNode*);
+ void addCallee(FunctionBodyNode*, RegisterID*);
+
void preserveLastVar();
bool shouldAvoidResolveGlobal();
@@ -626,6 +628,9 @@
if (index >= 0)
return m_calleeRegisters[index];
+ if (index == RegisterFile::Callee)
+ return m_calleeRegister;
+
ASSERT(m_parameters.size());
return m_parameters[index + m_parameters.size() + RegisterFile::CallFrameHeaderSize];
}
@@ -636,16 +641,6 @@
unsigned addConstantBuffer(unsigned length);
- FunctionExecutable* makeFunction(ExecState* exec, FunctionBodyNode* body)
- {
- return FunctionExecutable::create(exec, body->ident(), body->inferredName(), body->source(), body->usesArguments(), body->parameters(), body->isStrictMode(), body->lineNo(), body->lastLine());
- }
-
- FunctionExecutable* makeFunction(JSGlobalData* globalData, FunctionBodyNode* body)
- {
- return FunctionExecutable::create(*globalData, body->ident(), body->inferredName(), body->source(), body->usesArguments(), body->parameters(), body->isStrictMode(), body->lineNo(), body->lastLine());
- }
-
JSString* addStringConstant(const Identifier&);
void addLineInfo(unsigned lineNo)
@@ -716,6 +711,7 @@
HashSet<RefPtr<StringImpl>, IdentifierRepHash> m_functions;
RegisterID m_ignoredResultRegister;
RegisterID m_thisRegister;
+ RegisterID m_calleeRegister;
RegisterID* m_activationRegister;
SegmentedVector<RegisterID, 32> m_constantPoolRegisters;
SegmentedVector<RegisterID, 32> m_calleeRegisters;