WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
28691
Do not retain ScopeNodes outside of parsing
https://bugs.webkit.org/show_bug.cgi?id=28691
Summary
Do not retain ScopeNodes outside of parsing
Gavin Barraclough
Reported
2009-08-24 16:20:32 PDT
There is now no need for these to exist outside of parsing – their use in the runtime is replaced by Executable types.
Attachments
The Patch
(54.79 KB, patch)
2009-08-24 16:23 PDT
,
Gavin Barraclough
oliver
: review+
Details
Formatted Diff
Diff
fixed typo
(1.48 KB, patch)
2009-08-31 09:04 PDT
,
Robert Agoston
barraclough
: review+
Details
Formatted Diff
Diff
View All
Add attachment
proposed patch, testcase, etc.
Gavin Barraclough
Comment 1
2009-08-24 16:23:06 PDT
Created
attachment 38504
[details]
The Patch
Oliver Hunt
Comment 2
2009-08-24 16:28:31 PDT
Comment on
attachment 38504
[details]
The Patch fix the formatting issue i mentioned
Darin Adler
Comment 3
2009-08-24 16:33:29 PDT
Comment on
attachment 38504
[details]
The Patch
> + There is now no need for these to exist outside of parsing â their use in the runtime is replaced by Executable types.
Looks like you had an em dash in some encoding other than UTF-8.
> ScopeNodeData::ScopeNodeData(ParserArena& arena, SourceElements* children, VarStack* varStack, FunctionStack* funcStack, int numConstants) > - : m_numConstants(numConstants) > + : m_arena(new ParserArena())
I usually don't use parentheses when there are no arguments to the constructor.
> + , m_numConstants(numConstants) > { > - m_arena.swap(arena); > + m_arena->swap(arena);
The ParserArena goes out of its way to be "swappable" so you can just store it rather than a pointer to it. If we no longer need that behavior, we could simplify ParserArena and remove a bit of indirection.
> + static const bool scopeIsFunction = false;
This seems kind of dangerous to me. If this is different in the base class and derived class you could get the wrong answer if you asked the base class.
> + : m_arena(new ParserArena())
Same thing about parentheses.
> + StatementVector& children = program->children(); > + if (children.size() != 1) > + return 0; > + > + StatementNode* exprStatement = children[0];
This won't compile any more. You need to merge with my recent changes.
> + Identifier* parameters = static_cast<Identifier*>(fastMalloc(m_parameterCount * sizeof(Identifier))); > + WTF::VectorCopier<false, Identifier>::uninitializedCopy(m_parameters, m_parameters + m_parameterCount, parameters); > + return parameters;
You need comments explaining this, but also, it seems unfortunate to use this vector-internal helper here. I'd almost rather just see a loop using placement new instead.
Gavin Barraclough
Comment 4
2009-08-24 19:49:35 PDT
Re the ParseArena changes (pointer to, rather than wholly contained), these were ultimately not necessary as a part of this patch, and caused merge conflicts on update, so I have reverted. Might still be worth investigating again (along with removing ParserArenaRefCounted), but I will leave this for another patch for now.
> > + static const bool scopeIsFunction = false; > > This seems kind of dangerous to me. If this is different in the base class and > derived class you could get the wrong answer if you asked the base class.
To take your concern into account I've moved the false definition from ScopeNode to ProgramNode & EvalNode, so there should be no chance of reading the value from the base by mistake (I'm open to a better solution, if you have any suggestions).
> > + Identifier* parameters = static_cast<Identifier*>(fastMalloc(m_parameterCount * sizeof(Identifier))); > > + WTF::VectorCopier<false, Identifier>::uninitializedCopy(m_parameters, m_parameters + m_parameterCount, parameters); > > + return parameters; > > You need comments explaining this, but also, it seems unfortunate to use this > vector-internal helper here. I'd almost rather just see a loop using placement > new instead.
I'll comment this as requested - this code is actually just being hoisted up from FunctionBodyNode, and I too don't like it. This patch also makes what seems like an unnecessary number of copies of the array of parameters, I'd like to fix this by making parameters be a separate ref counted object shared between FunctionExpressions and FunctionBodyNodes, but again I'd like to leave this for another patch. G.
Gavin Barraclough
Comment 5
2009-08-24 19:54:20 PDT
Sending JavaScriptCore/ChangeLog Sending JavaScriptCore/bytecode/EvalCodeCache.h Sending JavaScriptCore/bytecompiler/BytecodeGenerator.cpp Sending JavaScriptCore/bytecompiler/BytecodeGenerator.h Sending JavaScriptCore/debugger/Debugger.cpp Sending JavaScriptCore/debugger/DebuggerCallFrame.cpp Sending JavaScriptCore/interpreter/Interpreter.cpp Sending JavaScriptCore/jit/JITStubs.cpp Sending JavaScriptCore/parser/Nodes.cpp Sending JavaScriptCore/parser/Nodes.h Sending JavaScriptCore/parser/Parser.cpp Sending JavaScriptCore/parser/Parser.h Sending JavaScriptCore/runtime/ArrayPrototype.cpp Sending JavaScriptCore/runtime/Completion.cpp Sending JavaScriptCore/runtime/Executable.cpp Sending JavaScriptCore/runtime/Executable.h Sending JavaScriptCore/runtime/FunctionConstructor.cpp Sending JavaScriptCore/runtime/JSGlobalData.cpp Sending JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp Transmitting file data ................... Committed revision 47738.
Pavel Feldman
Comment 6
2009-08-25 13:10:33 PDT
This change has introduced regression in web inspector. 1. Open some page 2. Set a breakpoint in code that should execute 3. Make execution hit the breakpoint Expected: call frame and source line are highlighted Actual: nothing is highlighted. Continue the execution, open inspector on inspector, observe javascript error.
Robert Agoston
Comment 7
2009-08-31 09:04:45 PDT
Created
attachment 38816
[details]
fixed typo
Gavin Barraclough
Comment 8
2009-08-31 12:32:41 PDT
Comment on
attachment 38816
[details]
fixed typo Good catch, thank you! Sending JavaScriptCore/ChangeLog Sending JavaScriptCore/parser/Parser.h Transmitting file data .. Committed revision 47902.
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug