From 2cf6c8816a73e0132bd8fa3b509d62d7c51b6e47 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Mon, 7 May 2012 11:21:11 +0200 Subject: Imported WebKit commit 7e538425aa020340619e927792f3d895061fb54b (http://svn.webkit.org/repository/webkit/trunk@116286) --- Source/JavaScriptCore/parser/Parser.cpp | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) (limited to 'Source/JavaScriptCore/parser/Parser.cpp') 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 TreeExpression Parser::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 TreeExpression Parser::parseObjectLitera consumeOrFail(CLOSEBRACE); + m_nonLHSCount = oldNonLHSCount; + return context.createObjectLiteral(m_lexer->lastLineNumber(), propertyList); } @@ -1299,6 +1303,8 @@ template TreeExpression Parser::parseStrictObject { consumeOrFail(OPENBRACE); + int oldNonLHSCount = m_nonLHSCount; + if (match(CLOSEBRACE)) { next(); return context.createObjectLiteral(m_lexer->lastLineNumber()); @@ -1323,19 +1329,21 @@ template TreeExpression Parser::parseStrictObject property = parseProperty(context); failIfFalse(property); if (!m_syntaxAlreadyValidated) { - std::pair 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 TreeExpression Parser::parseArrayLiteral { consumeOrFailWithFlags(OPENBRACKET, TreeBuilder::DontBuildStrings); + int oldNonLHSCount = m_nonLHSCount; + int elisions = 0; while (match(COMMA)) { next(TreeBuilder::DontBuildStrings); @@ -1379,6 +1389,8 @@ template TreeExpression Parser::parseArrayLiteral consumeOrFail(CLOSEBRACKET); + m_nonLHSCount = oldNonLHSCount; + return context.createArray(m_lexer->lastLineNumber(), elementList); } -- cgit v1.2.1