Ignore:
Timestamp:
Oct 11, 2017, 11:45:23 PM (8 years ago)
Author:
Yusuke Suzuki
Message:

import.meta should not be assignable
https://bugs.webkit.org/show_bug.cgi?id=178202

Reviewed by Saam Barati.

JSTests:

  • modules/import-meta-assignment.js: Added.

(shouldThrow):
(SyntaxError.import.meta.can.shouldThrow):

Source/JavaScriptCore:

import.meta cannot be used for LHS. This patch adds MetaPropertyNode
and make NewTargetNode and ImportMetaNode as derived classes of MetaPropertyNode.
We change the parser not to allow assignments for MetaPropertyNode.

  • bytecompiler/NodesCodegen.cpp:

(JSC::ImportMetaNode::emitBytecode):

  • parser/ASTBuilder.h:

(JSC::ASTBuilder::createImportMetaExpr):
(JSC::ASTBuilder::isMetaProperty):
(JSC::ASTBuilder::isImportMeta):

  • parser/NodeConstructors.h:

(JSC::MetaPropertyNode::MetaPropertyNode):
(JSC::NewTargetNode::NewTargetNode):
(JSC::ImportMetaNode::ImportMetaNode):

  • parser/Nodes.h:

(JSC::ExpressionNode::isMetaProperty const):
(JSC::ExpressionNode::isImportMeta const):

  • parser/Parser.cpp:

(JSC::Parser<LexerType>::metaPropertyName):
(JSC::Parser<LexerType>::parseAssignmentExpression):
(JSC::Parser<LexerType>::parseMemberExpression):
(JSC::Parser<LexerType>::parseUnaryExpression):

  • parser/Parser.h:
  • parser/SyntaxChecker.h:

(JSC::SyntaxChecker::createImportMetaExpr):
(JSC::SyntaxChecker::isMetaProperty):
(JSC::SyntaxChecker::isImportMeta):

File:
1 edited

Legend:

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

    r223175 r223232  
    190190        return new (m_parserArena) NewTargetNode(location);
    191191    }
     192    ExpressionNode* createImportMetaExpr(const JSTokenLocation& location, ExpressionNode* expr) { return new (m_parserArena) ImportMetaNode(location, expr); }
     193    bool isMetaProperty(ExpressionNode* node) { return node->isMetaProperty(); }
    192194    bool isNewTarget(ExpressionNode* node) { return node->isNewTarget(); }
     195    bool isImportMeta(ExpressionNode* node) { return node->isImportMeta(); }
    193196    ExpressionNode* createResolve(const JSTokenLocation& location, const Identifier& ident, const JSTextPosition& start, const JSTextPosition& end)
    194197    {
Note: See TracChangeset for help on using the changeset viewer.