diff options
Diffstat (limited to 'Source/JavaScriptCore/parser/Parser.cpp')
-rw-r--r-- | Source/JavaScriptCore/parser/Parser.cpp | 24 |
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); } |