瀏覽代碼

LibJS: Implement basic MemberExpression parsing

At last we can parse "hello friends".length :^)
Andreas Kling 5 年之前
父節點
當前提交
f405cb6a77
共有 2 個文件被更改,包括 6 次插入4 次删除
  1. 1 3
      Base/home/anon/js/string-length.js
  2. 5 1
      Libraries/LibJS/Parser.cpp

+ 1 - 3
Base/home/anon/js/string-length.js

@@ -1,3 +1 @@
-function foo() {
-    "hello friends".length
-}
+"hello friends".length

+ 5 - 1
Libraries/LibJS/Parser.cpp

@@ -132,6 +132,9 @@ NonnullOwnPtr<Expression> Parser::parse_secondary_expression(NonnullOwnPtr<Expre
     case TokenType::Equals:
         consume();
         return make<AssignmentExpression>(AssignmentOp::Assign, move(lhs), parse_expression());
+    case TokenType::Period:
+        consume();
+        return make<MemberExpression>(move(lhs), parse_expression());
     default:
         m_has_errors = true;
         expected("secondary expression (missing switch case)");
@@ -239,7 +242,8 @@ bool Parser::match_secondary_expression() const
         || type == TokenType::Asterisk
         || type == TokenType::Slash
         || type == TokenType::Equals
-        || type == TokenType::ParenOpen;
+        || type == TokenType::ParenOpen
+        || type == TokenType::Period;
 }
 
 bool Parser::match_statement() const