Changeset 181183 in webkit


Ignore:
Timestamp:
Mar 6, 2015 2:31:28 PM (9 years ago)
Author:
commit-queue@webkit.org
Message:

ES6: Object Literal Extensions - Methods
https://bugs.webkit.org/show_bug.cgi?id=142390

Patch by Joseph Pecoraro <Joseph Pecoraro> on 2015-03-06
Reviewed by Geoffrey Garen.

Source/JavaScriptCore:

Support method syntax in object literals.

  • parser/Parser.h:
  • parser/Parser.cpp:

(JSC::stringForFunctionMode):
(JSC::Parser<LexerType>::parseProperty):
Methods are allowed for identifier, string, and numeric names,
and computed property names.

(JSC::Parser<LexerType>::parsePropertyMethod):
Helper for parsing a property method.

LayoutTests:

  • js/object-literal-computed-methods-expected.txt: Added.
  • js/object-literal-computed-methods.html: Added.
  • js/object-literal-methods-expected.txt: Added.
  • js/object-literal-methods.html: Added.
  • js/script-tests/object-literal-computed-methods.js: Added.
  • js/script-tests/object-literal-methods.js: Added.
Location:
trunk
Files:
6 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r181179 r181183  
     12015-03-06  Joseph Pecoraro  <pecoraro@apple.com>
     2
     3        ES6: Object Literal Extensions - Methods
     4        https://bugs.webkit.org/show_bug.cgi?id=142390
     5
     6        Reviewed by Geoffrey Garen.
     7
     8        * js/object-literal-computed-methods-expected.txt: Added.
     9        * js/object-literal-computed-methods.html: Added.
     10        * js/object-literal-methods-expected.txt: Added.
     11        * js/object-literal-methods.html: Added.
     12        * js/script-tests/object-literal-computed-methods.js: Added.
     13        * js/script-tests/object-literal-methods.js: Added.
     14
    1152015-03-06  Joseph Pecoraro  <pecoraro@apple.com>
    216
  • trunk/Source/JavaScriptCore/ChangeLog

    r181179 r181183  
     12015-03-06  Joseph Pecoraro  <pecoraro@apple.com>
     2
     3        ES6: Object Literal Extensions - Methods
     4        https://bugs.webkit.org/show_bug.cgi?id=142390
     5
     6        Reviewed by Geoffrey Garen.
     7
     8        Support method syntax in object literals.
     9
     10        * parser/Parser.h:
     11        * parser/Parser.cpp:
     12        (JSC::stringForFunctionMode):
     13        (JSC::Parser<LexerType>::parseProperty):
     14        Methods are allowed for identifier, string, and numeric names,
     15        and computed property names.
     16
     17        (JSC::Parser<LexerType>::parsePropertyMethod):
     18        Helper for parsing a property method.
     19
    1202015-03-05  Joseph Pecoraro  <pecoraro@apple.com>
    221
  • trunk/Source/JavaScriptCore/parser/Parser.cpp

    r181179 r181183  
    12831283    case FunctionMode:
    12841284        return "function";
    1285 #if ENABLE(ES6_CLASS_SYNTAX)
    12861285    case MethodMode:
    12871286        return "method";
    1288 #endif
    12891287    }
    12901288    RELEASE_ASSERT_NOT_REACHED();
     
    19371935        }
    19381936
     1937        if (match(OPENPAREN)) {
     1938            auto method = parsePropertyMethod(context, ident);
     1939            propagateError();
     1940            return context.createProperty(ident, method, PropertyNode::Constant, PropertyNode::KnownDirect, complete);
     1941        }
     1942
    19391943        failIfFalse(wasIdent, "Expected an identifier as property name");
    19401944
     
    19601964        double propertyName = m_token.m_data.doubleValue;
    19611965        next();
     1966
     1967        if (match(OPENPAREN)) {
     1968            const Identifier& ident = m_parserArena.identifierArena().makeNumericIdentifier(const_cast<VM*>(m_vm), propertyName);
     1969            auto method = parsePropertyMethod(context, &ident);
     1970            propagateError();
     1971            return context.createProperty(&ident, method, PropertyNode::Constant, PropertyNode::Unknown, complete);
     1972        }
     1973
    19621974        consumeOrFail(COLON, "Expected ':' after property name");
    19631975        TreeExpression node = parseAssignmentExpression(context);
     
    19701982        auto propertyName = parseExpression(context);
    19711983        failIfFalse(propertyName, "Cannot parse computed property name");
    1972        
    19731984        handleProductionOrFail(CLOSEBRACKET, "]", "end", "computed property name");
     1985
     1986        if (match(OPENPAREN)) {
     1987            auto method = parsePropertyMethod(context, &m_vm->propertyNames->nullIdentifier);
     1988            propagateError();
     1989            return context.createProperty(propertyName, method, PropertyNode::Constant, PropertyNode::KnownDirect, complete);
     1990        }
     1991
    19741992        consumeOrFail(COLON, "Expected ':' after property name");
    19751993        TreeExpression node = parseAssignmentExpression(context);
     
    19822000        goto namedProperty;
    19832001    }
     2002}
     2003
     2004template <typename LexerType>
     2005template <class TreeBuilder> TreeExpression Parser<LexerType>::parsePropertyMethod(TreeBuilder& context, const Identifier* methodName)
     2006{
     2007    JSTokenLocation methodLocation(tokenLocation());
     2008    unsigned methodStart = tokenStart();
     2009    ParserFunctionInfo<TreeBuilder> methodInfo;
     2010    failIfFalse((parseFunctionInfo(context, FunctionNoRequirements, MethodMode, false, methodInfo)), "Cannot parse this method");
     2011    methodInfo.name = methodName;
     2012    return context.createFunctionExpr(methodLocation, methodInfo, methodStart);
    19842013}
    19852014
  • trunk/Source/JavaScriptCore/parser/Parser.h

    r180637 r181183  
    8686    GetterMode,
    8787    SetterMode,
    88 #if ENABLE(ES6_CLASS_SYNTAX)
    89     MethodMode
    90 #endif
     88    MethodMode,
    9189};
    9290enum DeconstructionKind {
     
    740738    template <class TreeBuilder> ALWAYS_INLINE TreeArguments parseArguments(TreeBuilder&, SpreadMode);
    741739    template <class TreeBuilder> TreeProperty parseProperty(TreeBuilder&, bool strict);
     740    template <class TreeBuilder> TreeExpression parsePropertyMethod(TreeBuilder& context, const Identifier* methodName);
    742741    template <class TreeBuilder> TreeProperty parseGetterSetter(TreeBuilder&, bool strict, PropertyNode::Type, unsigned getterOrSetterStartOffset);
    743742    template <class TreeBuilder> ALWAYS_INLINE TreeFunctionBody parseFunctionBody(TreeBuilder&);
Note: See TracChangeset for help on using the changeset viewer.