From ff71cb1f6de07479610fb0f45e740b249e8a01c6 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 31 Jul 2018 12:32:53 +0300 Subject: Introduce param & arg list --- src/grammar.ron | 3 +++ src/parser/grammar/expressions.rs | 9 ++++++++- src/parser/grammar/mod.rs | 2 ++ src/syntax_kinds/generated.rs | 4 ++++ 4 files changed, 17 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/grammar.ron b/src/grammar.ron index 5b8a9219c..f640ccb7b 100644 --- a/src/grammar.ron +++ b/src/grammar.ron @@ -151,5 +151,8 @@ Grammar( "LIFETIME_PARAM", "TYPE_PARAM_LIST", "TYPE_ARG_LIST", + + "PARAM_LIST", + "ARG_LIST", ] ) diff --git a/src/parser/grammar/expressions.rs b/src/parser/grammar/expressions.rs index 92aaafa3d..7991b1921 100644 --- a/src/parser/grammar/expressions.rs +++ b/src/parser/grammar/expressions.rs @@ -70,6 +70,13 @@ fn tuple_expr(p: &mut Parser) -> CompletedMarker { fn call_expr(p: &mut Parser, lhs: CompletedMarker) -> CompletedMarker { assert!(p.at(L_PAREN)); let m = lhs.precede(p); + arg_list(p); + m.complete(p, CALL_EXPR) +} + +fn arg_list(p: &mut Parser) { + assert!(p.at(L_PAREN)); + let m = p.start(); p.bump(); while !p.at(R_PAREN) && !p.at(EOF) { expr(p); @@ -78,7 +85,7 @@ fn call_expr(p: &mut Parser, lhs: CompletedMarker) -> CompletedMarker { } } p.eat(R_PAREN); - m.complete(p, CALL_EXPR) + m.complete(p, ARG_LIST); } // test path_expr diff --git a/src/parser/grammar/mod.rs b/src/parser/grammar/mod.rs index 63ad2782e..c2da775a2 100644 --- a/src/parser/grammar/mod.rs +++ b/src/parser/grammar/mod.rs @@ -99,6 +99,7 @@ fn abi(p: &mut Parser) { // fn d(x: i32, y: ()) {} fn fn_value_parameters(p: &mut Parser) { assert!(p.at(L_PAREN)); + let m = p.start(); p.bump(); while !p.at(EOF) && !p.at(R_PAREN) { value_parameter(p); @@ -107,6 +108,7 @@ fn fn_value_parameters(p: &mut Parser) { } } p.expect(R_PAREN); + m.complete(p, PARAM_LIST); fn value_parameter(p: &mut Parser) { let m = p.start(); diff --git a/src/syntax_kinds/generated.rs b/src/syntax_kinds/generated.rs index 1d0f1b724..986df7814 100644 --- a/src/syntax_kinds/generated.rs +++ b/src/syntax_kinds/generated.rs @@ -140,6 +140,8 @@ pub enum SyntaxKind { LIFETIME_PARAM, TYPE_PARAM_LIST, TYPE_ARG_LIST, + PARAM_LIST, + ARG_LIST, // Technical SyntaxKinds: they appear temporally during parsing, // but never end up in the final tree #[doc(hidden)] @@ -287,6 +289,8 @@ impl SyntaxKind { LIFETIME_PARAM => &SyntaxInfo { name: "LIFETIME_PARAM" }, TYPE_PARAM_LIST => &SyntaxInfo { name: "TYPE_PARAM_LIST" }, TYPE_ARG_LIST => &SyntaxInfo { name: "TYPE_ARG_LIST" }, + PARAM_LIST => &SyntaxInfo { name: "PARAM_LIST" }, + ARG_LIST => &SyntaxInfo { name: "ARG_LIST" }, TOMBSTONE => &SyntaxInfo { name: "TOMBSTONE" }, EOF => &SyntaxInfo { name: "EOF" }, } -- cgit v1.2.3