Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/parser/src/grammar/generic_args.rs23
-rw-r--r--crates/parser/src/grammar/generic_params.rs10
-rw-r--r--crates/parser/test_data/parser/inline/ok/0188_const_arg_path.rs1
-rw-r--r--crates/parser/test_data/parser/inline/ok/0188_const_param_default_path.rast (renamed from crates/parser/test_data/parser/inline/ok/0188_const_arg_path.rast)19
-rw-r--r--crates/parser/test_data/parser/inline/ok/0188_const_param_default_path.rs1
-rw-r--r--crates/parser/test_data/parser/inline/ok/0199_const_param_default_expression.rast34
-rw-r--r--crates/parser/test_data/parser/inline/ok/0199_const_param_default_expression.rs1
-rw-r--r--crates/parser/test_data/parser/inline/ok/0200_const_param_default_literal.rast (renamed from crates/parser/test_data/parser/inline/ok/0165_const_param_defaults.rast)9
-rw-r--r--crates/parser/test_data/parser/inline/ok/0200_const_param_default_literal.rs (renamed from crates/parser/test_data/parser/inline/ok/0165_const_param_defaults.rs)0
9 files changed, 69 insertions, 29 deletions
diff --git a/crates/parser/src/grammar/generic_args.rs b/crates/parser/src/grammar/generic_args.rs
index 1148c6c35c..948873ae2d 100644
--- a/crates/parser/src/grammar/generic_args.rs
+++ b/crates/parser/src/grammar/generic_args.rs
@@ -72,28 +72,24 @@ fn lifetime_arg(p: &mut Parser) {
m.complete(p, LIFETIME_ARG);
}
-// test const_arg
-// type T = S<92>;
-pub(super) fn const_arg(p: &mut Parser) {
- let m = p.start();
+pub(super) fn const_arg_expr(p: &mut Parser) {
+ // The tests in here are really for `const_arg`, which wraps the content
+ // CONST_ARG.
match p.current() {
// test const_arg_block
// type T = S<{90 + 2}>;
T!['{'] => {
expressions::block_expr(p);
- m.complete(p, CONST_ARG);
}
// test const_arg_literal
// type T = S<"hello", 0xdeadbeef>;
k if k.is_literal() => {
expressions::literal(p);
- m.complete(p, CONST_ARG);
}
// test const_arg_bool_literal
// type T = S<true>;
T![true] | T![false] => {
expressions::literal(p);
- m.complete(p, CONST_ARG);
}
// test const_arg_negative_number
// type T = S<-92>;
@@ -102,19 +98,24 @@ pub(super) fn const_arg(p: &mut Parser) {
p.bump(T![-]);
expressions::literal(p);
lm.complete(p, PREFIX_EXPR);
- m.complete(p, CONST_ARG);
}
- // test const_arg_path
- // struct S<const N: u32 = u32::MAX>;
_ => {
+ // This shouldn't be hit by `const_arg`
let lm = p.start();
paths::use_path(p);
lm.complete(p, PATH_EXPR);
- m.complete(p, CONST_ARG);
}
}
}
+// test const_arg
+// type T = S<92>;
+pub(super) fn const_arg(p: &mut Parser) {
+ let m = p.start();
+ const_arg_expr(p);
+ m.complete(p, CONST_ARG);
+}
+
fn type_arg(p: &mut Parser) {
let m = p.start();
types::type_(p);
diff --git a/crates/parser/src/grammar/generic_params.rs b/crates/parser/src/grammar/generic_params.rs
index 1009c67ffa..fbd514078d 100644
--- a/crates/parser/src/grammar/generic_params.rs
+++ b/crates/parser/src/grammar/generic_params.rs
@@ -79,10 +79,16 @@ fn const_param(p: &mut Parser, m: Marker) {
}
if p.at(T![=]) {
- // test const_param_defaults
+ // test const_param_default_literal
// struct A<const N: i32 = -1>;
p.bump(T![=]);
- generic_args::const_arg(p);
+
+ // test const_param_default_expression
+ // struct A<const N: i32 = { 1 }>;
+
+ // test const_param_default_path
+ // struct A<const N: i32 = i32::MAX>;
+ generic_args::const_arg_expr(p);
}
m.complete(p, CONST_PARAM);
diff --git a/crates/parser/test_data/parser/inline/ok/0188_const_arg_path.rs b/crates/parser/test_data/parser/inline/ok/0188_const_arg_path.rs
deleted file mode 100644
index ee075f3e50..0000000000
--- a/crates/parser/test_data/parser/inline/ok/0188_const_arg_path.rs
+++ /dev/null
@@ -1 +0,0 @@
-struct S<const N: u32 = u32::MAX>;
diff --git a/crates/parser/test_data/parser/inline/ok/0188_const_arg_path.rast b/crates/parser/test_data/parser/inline/ok/0188_const_param_default_path.rast
index 440dfb06a3..11002bf98d 100644
--- a/crates/parser/test_data/parser/inline/ok/0188_const_arg_path.rast
+++ b/crates/parser/test_data/parser/inline/ok/0188_const_param_default_path.rast
@@ -3,7 +3,7 @@ SOURCE_FILE
STRUCT_KW "struct"
WHITESPACE " "
NAME
- IDENT "S"
+ IDENT "A"
GENERIC_PARAM_LIST
L_ANGLE "<"
CONST_PARAM
@@ -17,21 +17,20 @@ SOURCE_FILE
PATH
PATH_SEGMENT
NAME_REF
- IDENT "u32"
+ IDENT "i32"
WHITESPACE " "
EQ "="
WHITESPACE " "
- CONST_ARG
- PATH_EXPR
+ PATH_EXPR
+ PATH
PATH
- PATH
- PATH_SEGMENT
- NAME_REF
- IDENT "u32"
- COLON2 "::"
PATH_SEGMENT
NAME_REF
- IDENT "MAX"
+ IDENT "i32"
+ COLON2 "::"
+ PATH_SEGMENT
+ NAME_REF
+ IDENT "MAX"
R_ANGLE ">"
SEMICOLON ";"
WHITESPACE "\n"
diff --git a/crates/parser/test_data/parser/inline/ok/0188_const_param_default_path.rs b/crates/parser/test_data/parser/inline/ok/0188_const_param_default_path.rs
new file mode 100644
index 0000000000..f3da43ca06
--- /dev/null
+++ b/crates/parser/test_data/parser/inline/ok/0188_const_param_default_path.rs
@@ -0,0 +1 @@
+struct A<const N: i32 = i32::MAX>;
diff --git a/crates/parser/test_data/parser/inline/ok/0199_const_param_default_expression.rast b/crates/parser/test_data/parser/inline/ok/0199_const_param_default_expression.rast
new file mode 100644
index 0000000000..0607ff54fb
--- /dev/null
+++ b/crates/parser/test_data/parser/inline/ok/0199_const_param_default_expression.rast
@@ -0,0 +1,34 @@
+SOURCE_FILE
+ STRUCT
+ STRUCT_KW "struct"
+ WHITESPACE " "
+ NAME
+ IDENT "A"
+ GENERIC_PARAM_LIST
+ L_ANGLE "<"
+ CONST_PARAM
+ CONST_KW "const"
+ WHITESPACE " "
+ NAME
+ IDENT "N"
+ COLON ":"
+ WHITESPACE " "
+ PATH_TYPE
+ PATH
+ PATH_SEGMENT
+ NAME_REF
+ IDENT "i32"
+ WHITESPACE " "
+ EQ "="
+ WHITESPACE " "
+ BLOCK_EXPR
+ STMT_LIST
+ L_CURLY "{"
+ WHITESPACE " "
+ LITERAL
+ INT_NUMBER "1"
+ WHITESPACE " "
+ R_CURLY "}"
+ R_ANGLE ">"
+ SEMICOLON ";"
+ WHITESPACE "\n"
diff --git a/crates/parser/test_data/parser/inline/ok/0199_const_param_default_expression.rs b/crates/parser/test_data/parser/inline/ok/0199_const_param_default_expression.rs
new file mode 100644
index 0000000000..551bde0b00
--- /dev/null
+++ b/crates/parser/test_data/parser/inline/ok/0199_const_param_default_expression.rs
@@ -0,0 +1 @@
+struct A<const N: i32 = { 1 }>;
diff --git a/crates/parser/test_data/parser/inline/ok/0165_const_param_defaults.rast b/crates/parser/test_data/parser/inline/ok/0200_const_param_default_literal.rast
index 6de10353bf..8e52313651 100644
--- a/crates/parser/test_data/parser/inline/ok/0165_const_param_defaults.rast
+++ b/crates/parser/test_data/parser/inline/ok/0200_const_param_default_literal.rast
@@ -21,11 +21,10 @@ SOURCE_FILE
WHITESPACE " "
EQ "="
WHITESPACE " "
- CONST_ARG
- PREFIX_EXPR
- MINUS "-"
- LITERAL
- INT_NUMBER "1"
+ PREFIX_EXPR
+ MINUS "-"
+ LITERAL
+ INT_NUMBER "1"
R_ANGLE ">"
SEMICOLON ";"
WHITESPACE "\n"
diff --git a/crates/parser/test_data/parser/inline/ok/0165_const_param_defaults.rs b/crates/parser/test_data/parser/inline/ok/0200_const_param_default_literal.rs
index 879ecffa75..879ecffa75 100644
--- a/crates/parser/test_data/parser/inline/ok/0165_const_param_defaults.rs
+++ b/crates/parser/test_data/parser/inline/ok/0200_const_param_default_literal.rs