summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/parser/Parser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/JavaScriptCore/parser/Parser.cpp')
-rw-r--r--Source/JavaScriptCore/parser/Parser.cpp24
1 files changed, 18 insertions, 6 deletions
diff --git a/Source/JavaScriptCore/parser/Parser.cpp b/Source/JavaScriptCore/parser/Parser.cpp
index f58847fd2..a03af24df 100644
--- a/Source/JavaScriptCore/parser/Parser.cpp
+++ b/Source/JavaScriptCore/parser/Parser.cpp
@@ -1256,6 +1256,8 @@ template <class TreeBuilder> TreeExpression Parser<LexerType>::parseObjectLitera
unsigned oldLineNumber = m_lexer->lineNumber();
consumeOrFailWithFlags(OPENBRACE, TreeBuilder::DontBuildStrings);
+ int oldNonLHSCount = m_nonLHSCount;
+
if (match(CLOSEBRACE)) {
next();
return context.createObjectLiteral(m_lexer->lastLineNumber());
@@ -1291,6 +1293,8 @@ template <class TreeBuilder> TreeExpression Parser<LexerType>::parseObjectLitera
consumeOrFail(CLOSEBRACE);
+ m_nonLHSCount = oldNonLHSCount;
+
return context.createObjectLiteral(m_lexer->lastLineNumber(), propertyList);
}
@@ -1299,6 +1303,8 @@ template <class TreeBuilder> TreeExpression Parser<LexerType>::parseStrictObject
{
consumeOrFail(OPENBRACE);
+ int oldNonLHSCount = m_nonLHSCount;
+
if (match(CLOSEBRACE)) {
next();
return context.createObjectLiteral(m_lexer->lastLineNumber());
@@ -1323,19 +1329,21 @@ template <class TreeBuilder> TreeExpression Parser<LexerType>::parseStrictObject
property = parseProperty<true>(context);
failIfFalse(property);
if (!m_syntaxAlreadyValidated) {
- std::pair<ObjectValidationMap::iterator, bool> propertyEntryIter = objectValidator.add(context.getName(property).impl(), context.getType(property));
- if (!propertyEntryIter.second) {
- failIfTrue(propertyEntryIter.first->second == PropertyNode::Constant);
+ ObjectValidationMap::AddResult propertyEntry = objectValidator.add(context.getName(property).impl(), context.getType(property));
+ if (!propertyEntry.isNewEntry) {
+ failIfTrue(propertyEntry.iterator->second == PropertyNode::Constant);
failIfTrue(context.getType(property) == PropertyNode::Constant);
- failIfTrue(context.getType(property) & propertyEntryIter.first->second);
- propertyEntryIter.first->second |= context.getType(property);
+ failIfTrue(context.getType(property) & propertyEntry.iterator->second);
+ propertyEntry.iterator->second |= context.getType(property);
}
}
tail = context.createPropertyList(m_lexer->lastLineNumber(), property, tail);
}
consumeOrFail(CLOSEBRACE);
-
+
+ m_nonLHSCount = oldNonLHSCount;
+
return context.createObjectLiteral(m_lexer->lastLineNumber(), propertyList);
}
@@ -1344,6 +1352,8 @@ template <class TreeBuilder> TreeExpression Parser<LexerType>::parseArrayLiteral
{
consumeOrFailWithFlags(OPENBRACKET, TreeBuilder::DontBuildStrings);
+ int oldNonLHSCount = m_nonLHSCount;
+
int elisions = 0;
while (match(COMMA)) {
next(TreeBuilder::DontBuildStrings);
@@ -1379,6 +1389,8 @@ template <class TreeBuilder> TreeExpression Parser<LexerType>::parseArrayLiteral
consumeOrFail(CLOSEBRACKET);
+ m_nonLHSCount = oldNonLHSCount;
+
return context.createArray(m_lexer->lastLineNumber(), elementList);
}