Changeset 62848 in webkit


Ignore:
Timestamp:
Jul 8, 2010 2:54:08 PM (14 years ago)
Author:
oliver@apple.com
Message:

2010-07-08 Oliver Hunt <oliver@apple.com>

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 <oliver@apple.com>

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:
Location:
trunk
Files:
3 added
22 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/ChangeLog

    r62847 r62848  
     12010-07-08  Oliver Hunt  <oliver@apple.com>
     2
     3        Reviewed by Gavin Barraclough.
     4
     5        Make object-literal parsing conformant with the spec.
     6        https://bugs.webkit.org/show_bug.cgi?id=41892
     7
     8        Bring our parsing of object literals into conformance with the ES5 spec.
     9        Basically disallow conflicting accessor vs. normal property definitions
     10        The bulk of this patch is just fiddling to maintain performance.
     11
     12        * parser/ASTBuilder.h:
     13        (JSC::ASTBuilder::createGetterOrSetterProperty):
     14        (JSC::ASTBuilder::createProperty):
     15        (JSC::ASTBuilder::getName):
     16        (JSC::ASTBuilder::getType):
     17        * parser/JSParser.cpp:
     18        (JSC::jsParse):
     19        (JSC::JSParser::JSParser):
     20        (JSC::JSParser::parseProperty):
     21        (JSC::JSParser::parseObjectLiteral):
     22        (JSC::JSParser::parseStrictObjectLiteral):
     23        * parser/JSParser.h:
     24        * parser/Lexer.cpp:
     25        (JSC::Lexer::clear):
     26        * parser/Lexer.h:
     27        (JSC::Lexer::currentOffset):
     28        (JSC::Lexer::setOffset):
     29          Add logic to allow us to roll the lexer back in the input stream.
     30        * parser/Nodes.h:
     31        (JSC::PropertyNode::):
     32        (JSC::PropertyNode::type):
     33        * parser/Parser.cpp:
     34        (JSC::Parser::parse):
     35        * parser/SourceProvider.h:
     36        (JSC::SourceProvider::SourceProvider):
     37        (JSC::SourceProvider::isValid):
     38        (JSC::SourceProvider::setValid):
     39          SourceProvider now records whether the input text
     40          has already been validated.
     41        * parser/SyntaxChecker.h:
     42        (JSC::SyntaxChecker::SyntaxChecker):
     43        (JSC::SyntaxChecker::Property::Property):
     44        (JSC::SyntaxChecker::Property::operator!):
     45        (JSC::SyntaxChecker::createProperty):
     46        (JSC::SyntaxChecker::createPropertyList):
     47        (JSC::SyntaxChecker::createGetterOrSetterProperty):
     48          The SyntaxChecker mode now needs to maintain a bit more information
     49          to ensure that we can validate object literals correctly.
     50
    1512010-07-08  Darin Adler  <darin@apple.com>
    252
  • 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 {
  • trunk/JavaScriptCore/parser/JSParser.cpp

    r62727 r62848  
    3333#include "NodeInfo.h"
    3434#include "ASTBuilder.h"
     35#include <wtf/HashFunctions.h>
    3536#include <utility>
    3637
     
    6465class JSParser {
    6566public:
    66     JSParser(Lexer*, JSGlobalData*);
     67    JSParser(Lexer*, JSGlobalData*, SourceProvider*);
    6768    bool parseProgram();
    6869private:
     
    151152    template <class TreeBuilder> ALWAYS_INLINE TreeExpression parseArrayLiteral(TreeBuilder&);
    152153    template <class TreeBuilder> ALWAYS_INLINE TreeExpression parseObjectLiteral(TreeBuilder&);
     154    template <class TreeBuilder> ALWAYS_INLINE TreeExpression parseStrictObjectLiteral(TreeBuilder&);
    153155    template <class TreeBuilder> ALWAYS_INLINE TreeArguments parseArguments(TreeBuilder&);
    154     template <class TreeBuilder> ALWAYS_INLINE TreeProperty parseProperty(TreeBuilder&);
     156    template <bool strict, class TreeBuilder> ALWAYS_INLINE TreeProperty parseProperty(TreeBuilder&);
    155157    template <class TreeBuilder> ALWAYS_INLINE TreeFunctionBody parseFunctionBody(TreeBuilder&);
    156158    template <class TreeBuilder> ALWAYS_INLINE TreeFormalParameterList parseFormalParameters(TreeBuilder&, bool& usesArguments);
     
    195197    int m_assignmentCount;
    196198    int m_nonLHSCount;
     199    bool m_syntaxAlreadyValidated;
    197200};
    198201
    199 int jsParse(JSGlobalData* globalData)
    200 {
    201     JSParser parser(globalData->lexer, globalData);
     202int jsParse(JSGlobalData* globalData, const SourceCode* source)
     203{
     204    JSParser parser(globalData->lexer, globalData, source->provider());
    202205    return parser.parseProgram();
    203206}
    204207
    205 JSParser::JSParser(Lexer* lexer, JSGlobalData* globalData)
     208JSParser::JSParser(Lexer* lexer, JSGlobalData* globalData, SourceProvider* provider)
    206209    : m_lexer(lexer)
    207210    , m_endAddress(0)
     
    214217    , m_assignmentCount(0)
    215218    , m_nonLHSCount(0)
     219    , m_syntaxAlreadyValidated(provider->isValid())
    216220{
    217221    m_endAddress = *(globalData->stackGuards);
     
    11461150
    11471151
    1148 template <class TreeBuilder> TreeProperty JSParser::parseProperty(TreeBuilder& context)
     1152template <bool complete, class TreeBuilder> TreeProperty JSParser::parseProperty(TreeBuilder& context)
    11491153{
    11501154    bool wasIdent = false;
     
    11591163            TreeExpression node = parseAssignmentExpression(context);
    11601164            failIfFalse(node);
    1161             return context.createProperty(ident, node, PropertyNode::Constant);
     1165            return context.template createProperty<complete>(ident, node, PropertyNode::Constant);
    11621166        }
    11631167        failIfFalse(wasIdent);
     
    11691173        int closeBracePos = 0;
    11701174        int bodyStartLine = 0;
    1171         failIfFalse(*ident == m_globalData->propertyNames->get || *ident == m_globalData->propertyNames->set);
     1175        PropertyNode::Type type;
     1176        if (*ident == m_globalData->propertyNames->get)
     1177            type = PropertyNode::Getter;
     1178        else if (*ident == m_globalData->propertyNames->set)
     1179            type = PropertyNode::Setter;
     1180        else
     1181            fail();
    11721182        failIfFalse(parseFunctionInfo<FunctionNeedsName>(context, accessorName, parameters, body, openBracePos, closeBracePos, bodyStartLine));
    1173         return context.createGetterOrSetterProperty(ident, accessorName, parameters, body, openBracePos, closeBracePos, bodyStartLine, m_lastLine);
     1183        return context.template createGetterOrSetterProperty<complete>(type, accessorName, parameters, body, openBracePos, closeBracePos, bodyStartLine, m_lastLine);
    11741184    }
    11751185    case NUMBER: {
     
    11791189        TreeExpression node = parseAssignmentExpression(context);
    11801190        failIfFalse(node);
    1181         return context.createProperty(propertyName, node, PropertyNode::Constant);
     1191        return context.template createProperty<complete>(m_globalData, propertyName, node, PropertyNode::Constant);
    11821192    }
    11831193    }
     
    11871197template <class TreeBuilder> TreeExpression JSParser::parseObjectLiteral(TreeBuilder& context)
    11881198{
     1199    int startOffset = token().m_data.intValue;
    11891200    consumeOrFail(OPENBRACE);
    11901201
     
    11941205    }
    11951206
    1196     TreeProperty property = parseProperty(context);
     1207    TreeProperty property = parseProperty<false>(context);
    11971208    failIfFalse(property);
    1198 
     1209    if (!m_syntaxAlreadyValidated && context.getType(property) != PropertyNode::Constant) {
     1210        m_lexer->setOffset(startOffset);
     1211        next();
     1212        return parseStrictObjectLiteral(context);
     1213    }
    11991214    TreePropertyList propertyList = context.createPropertyList(property);
    12001215    TreePropertyList tail = propertyList;
    1201 
    12021216    while (match(',')) {
    12031217        next();
     
    12051219        if (match(CLOSEBRACE))
    12061220            break;
    1207         property = parseProperty(context);
     1221        property = parseProperty<false>(context);
    12081222        failIfFalse(property);
    1209 
     1223        if (!m_syntaxAlreadyValidated && context.getType(property) != PropertyNode::Constant) {
     1224            m_lexer->setOffset(startOffset);
     1225            next();
     1226            return parseStrictObjectLiteral(context);
     1227        }
    12101228        tail = context.createPropertyList(property, tail);
    12111229    }
     
    12131231    consumeOrFail(CLOSEBRACE);
    12141232
     1233    return context.createObjectLiteral(propertyList);
     1234}
     1235
     1236template <class TreeBuilder> TreeExpression JSParser::parseStrictObjectLiteral(TreeBuilder& context)
     1237{
     1238    consumeOrFail(OPENBRACE);
     1239   
     1240    if (match(CLOSEBRACE)) {
     1241        next();
     1242        return context.createObjectLiteral();
     1243    }
     1244   
     1245    TreeProperty property = parseProperty<true>(context);
     1246    failIfFalse(property);
     1247   
     1248    typedef HashMap<RefPtr<UString::Rep>, unsigned, IdentifierRepHash> ObjectValidationMap;
     1249    ObjectValidationMap objectValidator;
     1250    // Add the first property
     1251    if (!m_syntaxAlreadyValidated)
     1252        objectValidator.add(context.getName(property).ustring().rep(), context.getType(property));
     1253   
     1254    TreePropertyList propertyList = context.createPropertyList(property);
     1255    TreePropertyList tail = propertyList;
     1256    while (match(',')) {
     1257        next();
     1258        // allow extra comma, see http://bugs.webkit.org/show_bug.cgi?id=5939
     1259        if (match(CLOSEBRACE))
     1260            break;
     1261        property = parseProperty<true>(context);
     1262        failIfFalse(property);
     1263        if (!m_syntaxAlreadyValidated) {
     1264            std::pair<ObjectValidationMap::iterator, bool> propertyEntryIter = objectValidator.add(context.getName(property).ustring().rep(), context.getType(property));
     1265            if (!propertyEntryIter.second) {
     1266                if ((context.getType(property) & propertyEntryIter.first->second) != PropertyNode::Constant) {
     1267                    // Can't have multiple getters or setters with the same name, nor can we define
     1268                    // a property as both an accessor and a constant value
     1269                    failIfTrue(context.getType(property) & propertyEntryIter.first->second);
     1270                    failIfTrue((context.getType(property) | propertyEntryIter.first->second) & PropertyNode::Constant);
     1271                }
     1272            }
     1273        }
     1274        tail = context.createPropertyList(property, tail);
     1275    }
     1276   
     1277    consumeOrFail(CLOSEBRACE);
     1278   
    12151279    return context.createObjectLiteral(propertyList);
    12161280}
  • trunk/JavaScriptCore/parser/JSParser.h

    r61878 r62848  
    3131class Identifier;
    3232class JSGlobalData;
     33class SourceCode;
    3334
    3435enum JSTokenType {
     
    119120};
    120121
    121 int jsParse(JSGlobalData*);
     122int jsParse(JSGlobalData*, const SourceCode*);
    122123}
    123124#endif // JSParser_h
  • trunk/JavaScriptCore/parser/Lexer.cpp

    r62628 r62848  
    11181118{
    11191119    m_arena = 0;
    1120     m_codeWithoutBOMs.clear();
    11211120
    11221121    Vector<char> newBuffer8;
  • trunk/JavaScriptCore/parser/Lexer.h

    r62628 r62848  
    6262        bool sawError() const { return m_error; }
    6363        void clear();
     64        int currentOffset() { return m_code - m_codeStart; }
     65        void setOffset(int offset)
     66        {
     67            m_code = m_codeStart + offset;
     68            m_current = *m_code;
     69        }
    6470
    6571    private:
     
    116122
    117123        const HashTable m_keywordTable;
    118 
    119         Vector<UChar> m_codeWithoutBOMs;
    120124    };
    121125
  • trunk/JavaScriptCore/parser/Nodes.h

    r60762 r62848  
    405405    class PropertyNode : public ParserArenaFreeable {
    406406    public:
    407         enum Type { Constant, Getter, Setter };
     407        enum Type { Constant = 1, Getter = 2, Setter = 4 };
    408408
    409409        PropertyNode(JSGlobalData*, const Identifier& name, ExpressionNode* value, Type);
     
    411411
    412412        const Identifier& name() const { return m_name; }
     413        Type type() const { return m_type; }
    413414
    414415    private:
  • trunk/JavaScriptCore/parser/Parser.cpp

    r61878 r62848  
    5454    lexer.setCode(*m_source, m_arena);
    5555
    56     int parseError = jsParse(globalData);
     56    int parseError = jsParse(globalData, m_source);
    5757    int lineNumber = lexer.lineNumber();
    5858    bool lexError = lexer.sawError();
  • trunk/JavaScriptCore/parser/SourceProvider.h

    r62449 r62848  
    3939        SourceProvider(const UString& url)
    4040            : m_url(url)
     41            , m_validated(false)
    4142        {
    4243        }
     
    5051        intptr_t asID() { return reinterpret_cast<intptr_t>(this); }
    5152
     53        bool isValid() const { return m_validated; }
     54        void setValid() { m_validated = true; }
     55
    5256    private:
    5357        UString m_url;
     58        bool m_validated;
    5459    };
    5560
  • trunk/JavaScriptCore/parser/SyntaxChecker.h

    r61732 r62848  
    3030class SyntaxChecker {
    3131public:
    32     SyntaxChecker(JSGlobalData*, Lexer*)
     32    SyntaxChecker(JSGlobalData* , Lexer*)
    3333    {
    3434    }
     
    4040    typedef int Arguments;
    4141    typedef int Comma;
    42     typedef int Property;
     42    struct Property {
     43        ALWAYS_INLINE Property(void* = 0)
     44            : type((PropertyNode::Type)0)
     45        {
     46        }
     47        ALWAYS_INLINE Property(const Identifier* ident, PropertyNode::Type ty)
     48        : name(ident)
     49        , type(ty)
     50        {
     51        }
     52        ALWAYS_INLINE Property(PropertyNode::Type ty)
     53            : name(0)
     54            , type(ty)
     55        {
     56        }
     57        ALWAYS_INLINE bool operator!() { return !type; }
     58        const Identifier* name;
     59        PropertyNode::Type type;
     60    };
    4361    typedef int PropertyList;
    4462    typedef int ElementList;
     
    91109    int createArgumentsList(int) { return 1; }
    92110    int createArgumentsList(int, int) { return 1; }
    93     int createProperty(const Identifier*, int, PropertyNode::Type) { return 1; }
    94     int createProperty(double, int, PropertyNode::Type) { return 1; }
    95     int createPropertyList(int) { return 1; }
    96     int createPropertyList(int, int) { return 1; }
     111    template <bool complete> Property createProperty(const Identifier* name, int, PropertyNode::Type type)
     112    {
     113        ASSERT(name);
     114        if (!complete)
     115            return Property(type);
     116        return Property(name, type);
     117    }
     118    template <bool complete> Property createProperty(JSGlobalData* globalData, double name, int, PropertyNode::Type type)
     119    {
     120        if (!complete)
     121            return Property(type);
     122        return Property(&globalData->parser->arena().identifierArena().makeNumericIdentifier(globalData, name), type);
     123    }
     124    int createPropertyList(Property) { return 1; }
     125    int createPropertyList(Property, int) { return 1; }
    97126    int createElementList(int, int) { return 1; }
    98127    int createElementList(int, int, int) { return 1; }
     
    128157    int createConstStatement(int, int, int) { return 1; }
    129158    int appendConstDecl(int, const Identifier*, int) { return 1; }
    130     int createGetterOrSetterProperty(const Identifier*, const Identifier*, int, int, int, int, int, int) { return 1; }
     159    template <bool strict> Property createGetterOrSetterProperty(PropertyNode::Type type, const Identifier* name, int, int, int, int, int, int)
     160    {
     161        ASSERT(name);
     162        if (!strict)
     163            return Property(type);
     164        return Property(name, type);
     165    }
    131166
    132167    void appendStatement(int, int) { }
     
    152187    void assignmentStackAppend(int, int, int, int, int, Operator) { }
    153188    int createAssignment(int, int, int, int, int) { ASSERT_NOT_REACHED(); return 1; }
     189    const Identifier& getName(const Property& property) { ASSERT(property.name); return *property.name; }
     190    PropertyNode::Type getType(const Property& property) { return property.type; }
    154191};
    155192
  • trunk/LayoutTests/ChangeLog

    r62846 r62848  
     12010-07-08  Oliver Hunt  <oliver@apple.com>
     2
     3        Reviewed by Gavin Barraclough.
     4
     5        Make object-literal parsing conformant with the spec.
     6        https://bugs.webkit.org/show_bug.cgi?id=41892
     7
     8        Add tests to ensure correct parsing of object literals.
     9
     10        * fast/js/object-literal-syntax-expected.txt: Added.
     11        * fast/js/object-literal-syntax.html: Added.
     12        * fast/js/parser-syntax-check-expected.txt:
     13        * fast/js/script-tests/object-literal-syntax.js: Added.
     14        * fast/js/script-tests/parser-syntax-check.js:
     15        * ietestcenter/Javascript/11.1.5_4-4-b-1-expected.txt:
     16        * ietestcenter/Javascript/11.1.5_4-4-b-2-expected.txt:
     17        * ietestcenter/Javascript/11.1.5_4-4-c-1-expected.txt:
     18        * ietestcenter/Javascript/11.1.5_4-4-c-2-expected.txt:
     19        * ietestcenter/Javascript/11.1.5_4-4-d-1-expected.txt:
     20        * ietestcenter/Javascript/11.1.5_4-4-d-2-expected.txt:
     21        * ietestcenter/Javascript/11.1.5_4-4-d-3-expected.txt:
     22        * ietestcenter/Javascript/11.1.5_4-4-d-4-expected.txt:
     23        * platform/chromium/test_expectations.txt:
     24
    1252010-07-08  Jon Honeycutt  <jhoneycutt@apple.com>
    226
  • trunk/LayoutTests/fast/js/parser-syntax-check-expected.txt

    r54530 r62848  
    187187PASS Invalid: "(a,)"
    188188PASS Invalid: "function f() { (a,) }"
    189 PASS Valid:   "1 + {get get(){}, set set(a){}, get:4, set:get-set, }"
    190 PASS Valid:   "function f() { 1 + {get get(){}, set set(a){}, get:4, set:get-set, } }"
     189PASS Valid:   "1 + {get get(){}, set set(a){}, get1:4, set1:get-set, }"
     190PASS Valid:   "function f() { 1 + {get get(){}, set set(a){}, get1:4, set1:get-set, } }"
    191191PASS Invalid: "1 + {a"
    192192PASS Invalid: "function f() { 1 + {a }"
  • trunk/LayoutTests/fast/js/script-tests/parser-syntax-check.js

    r54530 r62848  
    154154invalid("[,");
    155155invalid("(a,)");
    156 valid  ("1 + {get get(){}, set set(a){}, get:4, set:get-set, }");
     156valid  ("1 + {get get(){}, set set(a){}, get1:4, set1:get-set, }");
    157157invalid("1 + {a");
    158158invalid("1 + {a:");
  • trunk/LayoutTests/ietestcenter/Javascript/11.1.5_4-4-b-1-expected.txt

    r62810 r62848  
    55
    66PASS ES5Harness.preconditionPassed is true
    7 FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
     7PASS ES5Harness.testPassed is true
    88PASS successfullyParsed is true
    99
  • trunk/LayoutTests/ietestcenter/Javascript/11.1.5_4-4-b-2-expected.txt

    r62810 r62848  
    55
    66PASS ES5Harness.preconditionPassed is true
    7 FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
     7PASS ES5Harness.testPassed is true
    88PASS successfullyParsed is true
    99
  • trunk/LayoutTests/ietestcenter/Javascript/11.1.5_4-4-c-1-expected.txt

    r62810 r62848  
    55
    66PASS ES5Harness.preconditionPassed is true
    7 FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
     7PASS ES5Harness.testPassed is true
    88PASS successfullyParsed is true
    99
  • trunk/LayoutTests/ietestcenter/Javascript/11.1.5_4-4-c-2-expected.txt

    r62810 r62848  
    55
    66PASS ES5Harness.preconditionPassed is true
    7 FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
     7PASS ES5Harness.testPassed is true
    88PASS successfullyParsed is true
    99
  • trunk/LayoutTests/ietestcenter/Javascript/11.1.5_4-4-d-1-expected.txt

    r62810 r62848  
    55
    66PASS ES5Harness.preconditionPassed is true
    7 FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
     7PASS ES5Harness.testPassed is true
    88PASS successfullyParsed is true
    99
  • trunk/LayoutTests/ietestcenter/Javascript/11.1.5_4-4-d-2-expected.txt

    r62810 r62848  
    55
    66PASS ES5Harness.preconditionPassed is true
    7 FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
     7PASS ES5Harness.testPassed is true
    88PASS successfullyParsed is true
    99
  • trunk/LayoutTests/ietestcenter/Javascript/11.1.5_4-4-d-3-expected.txt

    r62810 r62848  
    55
    66PASS ES5Harness.preconditionPassed is true
    7 FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
     7PASS ES5Harness.testPassed is true
    88PASS successfullyParsed is true
    99
  • trunk/LayoutTests/ietestcenter/Javascript/11.1.5_4-4-d-4-expected.txt

    r62810 r62848  
    55
    66PASS ES5Harness.preconditionPassed is true
    7 FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
     7PASS ES5Harness.testPassed is true
    88PASS successfullyParsed is true
    99
  • trunk/LayoutTests/platform/chromium/test_expectations.txt

    r62844 r62848  
    30203020BUGAWONG WIN LINUX SKIP : ietestcenter/Javascript/15.4.4.15-3-8.html = TIMEOUT
    30213021
     3022
     3023SKIP : fast/js/object-literal-syntax.html
     3024SKIP : ietestcenter/Javascript/11.1.5_4-4-b-1.html
     3025SKIP : ietestcenter/Javascript/11.1.5_4-4-b-2.html
     3026SKIP : ietestcenter/Javascript/11.1.5_4-4-c-1.html
     3027SKIP : ietestcenter/Javascript/11.1.5_4-4-c-2.html
     3028SKIP : ietestcenter/Javascript/11.1.5_4-4-d-1.html
     3029SKIP : ietestcenter/Javascript/11.1.5_4-4-d-2.html
     3030SKIP : ietestcenter/Javascript/11.1.5_4-4-d-3.html
     3031SKIP : ietestcenter/Javascript/11.1.5_4-4-d-4.html
Note: See TracChangeset for help on using the changeset viewer.