CodeBlock's cloned SymbolTables only need the captured names.
<https://webkit.org/b/127978>
Renamed SymbolTable::clone() to SymbolTable::cloneCapturedNames()
and make it skip over any symbols that aren't captured, since those
won't be needed after codegen.
This is a first step towards getting rid of redundant symbol tables.
Reviewed by Geoffrey Garen.
* bytecode/CodeBlock.cpp:
(JSC::CodeBlock::CodeBlock):
* runtime/SymbolTable.cpp:
(JSC::SymbolTable::cloneCapturedNames):
* runtime/SymbolTable.h:
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@163151 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/JavaScriptCore/runtime/SymbolTable.cpp b/Source/JavaScriptCore/runtime/SymbolTable.cpp
index 556dbf7..8ad55b1 100644
--- a/Source/JavaScriptCore/runtime/SymbolTable.cpp
+++ b/Source/JavaScriptCore/runtime/SymbolTable.cpp
@@ -134,7 +134,7 @@
}
}
-SymbolTable* SymbolTable::clone(VM& vm)
+SymbolTable* SymbolTable::cloneCapturedNames(VM& vm)
{
SymbolTable* result = SymbolTable::create(vm);
@@ -142,10 +142,10 @@
result->m_usesNonStrictEval = m_usesNonStrictEval;
result->m_captureStart = m_captureStart;
result->m_captureEnd = m_captureEnd;
-
- Map::iterator iter = m_map.begin();
- Map::iterator end = m_map.end();
- for (; iter != end; ++iter) {
+
+ for (auto iter = m_map.begin(), end = m_map.end(); iter != end; ++iter) {
+ if (!isCaptured(iter->value.getIndex()))
+ continue;
result->m_map.add(
iter->key,
SymbolTableEntry(iter->value.getIndex(), iter->value.getAttributes()));