Ignore:
Timestamp:
Jul 8, 2010, 2:54:08 PM (15 years ago)
Author:
[email protected]
Message:

2010-07-08 Oliver Hunt <[email protected]>

Reviewed by Gavin Barraclough.

Make object-literal parsing conformant with the spec.
https://bugs.webkit.org/show_bug.cgi?id=41892

Bring our parsing of object literals into conformance with the ES5 spec.
Basically disallow conflicting accessor vs. normal property definitions
The bulk of this patch is just fiddling to maintain performance.

  • parser/ASTBuilder.h: (JSC::ASTBuilder::createGetterOrSetterProperty): (JSC::ASTBuilder::createProperty): (JSC::ASTBuilder::getName): (JSC::ASTBuilder::getType):
  • parser/JSParser.cpp: (JSC::jsParse): (JSC::JSParser::JSParser): (JSC::JSParser::parseProperty): (JSC::JSParser::parseObjectLiteral): (JSC::JSParser::parseStrictObjectLiteral):
  • parser/JSParser.h:
  • parser/Lexer.cpp: (JSC::Lexer::clear):
  • parser/Lexer.h: (JSC::Lexer::currentOffset): (JSC::Lexer::setOffset): Add logic to allow us to roll the lexer back in the input stream.
  • parser/Nodes.h: (JSC::PropertyNode::): (JSC::PropertyNode::type):
  • parser/Parser.cpp: (JSC::Parser::parse):
  • parser/SourceProvider.h: (JSC::SourceProvider::SourceProvider): (JSC::SourceProvider::isValid): (JSC::SourceProvider::setValid): SourceProvider now records whether the input text has already been validated.
  • parser/SyntaxChecker.h: (JSC::SyntaxChecker::SyntaxChecker): (JSC::SyntaxChecker::Property::Property): (JSC::SyntaxChecker::Property::operator!): (JSC::SyntaxChecker::createProperty): (JSC::SyntaxChecker::createPropertyList): (JSC::SyntaxChecker::createGetterOrSetterProperty): The SyntaxChecker mode now needs to maintain a bit more information to ensure that we can validate object literals correctly.

2010-07-08 Oliver Hunt <[email protected]>

Reviewed by Gavin Barraclough.

Need a short description and bug URL (OOPS!)

  • fast/js/object-literal-syntax-expected.txt: Added.
  • fast/js/object-literal-syntax.html: Added.
  • fast/js/parser-syntax-check-expected.txt:
  • fast/js/script-tests/object-literal-syntax.js: Added.
  • fast/js/script-tests/parser-syntax-check.js:
  • ietestcenter/Javascript/11.1.5_4-4-b-1-expected.txt:
  • ietestcenter/Javascript/11.1.5_4-4-b-2-expected.txt:
  • ietestcenter/Javascript/11.1.5_4-4-c-1-expected.txt:
  • ietestcenter/Javascript/11.1.5_4-4-c-2-expected.txt:
  • ietestcenter/Javascript/11.1.5_4-4-d-1-expected.txt:
  • ietestcenter/Javascript/11.1.5_4-4-d-2-expected.txt:
  • ietestcenter/Javascript/11.1.5_4-4-d-3-expected.txt:
  • ietestcenter/Javascript/11.1.5_4-4-d-4-expected.txt:
  • platform/chromium/test_expectations.txt:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/parser/ASTBuilder.h

    r62727 r62848  
    250250    }
    251251   
    252     PropertyNode* createGetterOrSetterProperty(const Identifier* getOrSet, const Identifier* name, ParameterNode* params, FunctionBodyNode* body, int openBracePos, int closeBracePos, int bodyStartLine, int bodyEndLine)
     252    template <bool> PropertyNode* createGetterOrSetterProperty(PropertyNode::Type type, const Identifier* name, ParameterNode* params, FunctionBodyNode* body, int openBracePos, int closeBracePos, int bodyStartLine, int bodyEndLine)
    253253    {
    254254        ASSERT(name);
    255         PropertyNode::Type type;
    256         if (*getOrSet == m_globalData->propertyNames->get)
    257             type = PropertyNode::Getter;
    258         else if (*getOrSet == m_globalData->propertyNames->set)
    259             type = PropertyNode::Setter;
    260         else
    261             return 0;
    262255        body->setLoc(bodyStartLine, bodyEndLine);
    263256        return new (m_globalData) PropertyNode(m_globalData, *name, new (m_globalData) FuncExprNode(m_globalData, m_globalData->propertyNames->nullIdentifier, body, m_lexer->sourceCode(openBracePos, closeBracePos, bodyStartLine), params), type);
     
    270263    ArgumentListNode* createArgumentsList(ArgumentListNode* args, ExpressionNode* arg) { return new (m_globalData) ArgumentListNode(m_globalData, args, arg); }
    271264
    272     PropertyNode* createProperty(const Identifier* propertyName, ExpressionNode* node, PropertyNode::Type type) { return new (m_globalData) PropertyNode(m_globalData, *propertyName, node, type); }
    273     PropertyNode* createProperty(double propertyName, ExpressionNode* node, PropertyNode::Type type) { return new (m_globalData) PropertyNode(m_globalData, propertyName, node, type); }
     265    template <bool> PropertyNode* createProperty(const Identifier* propertyName, ExpressionNode* node, PropertyNode::Type type) { return new (m_globalData) PropertyNode(m_globalData, *propertyName, node, type); }
     266    template <bool> PropertyNode* createProperty(JSGlobalData*, double propertyName, ExpressionNode* node, PropertyNode::Type type) { return new (m_globalData) PropertyNode(m_globalData, propertyName, node, type); }
    274267    PropertyListNode* createPropertyList(PropertyNode* property) { return new (m_globalData) PropertyListNode(m_globalData, property); }
    275268    PropertyListNode* createPropertyList(PropertyNode* property, PropertyListNode* tail) { return new (m_globalData) PropertyListNode(m_globalData, property, tail); }
     
    577570        return result;
    578571    }
    579 
     572   
     573    const Identifier& getName(Property property) { return property->name(); }
     574    PropertyNode::Type getType(Property property) { return property->type(); }
    580575private:
    581576    struct Scope {
Note: See TracChangeset for help on using the changeset viewer.