Skip to content

Commit 3e5ec5a

Browse files
authored
Fix Type parameters and type arguments (#81)
* Const_parameter should receive any type * Type_argument should accept blocks to support expression on const generics
1 parent ec25830 commit 3e5ec5a

File tree

5 files changed

+55467
-55295
lines changed

5 files changed

+55467
-55295
lines changed

corpus/declarations.txt

Lines changed: 63 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ fn foo(x: impl FnOnce() -> result::Result<T, E>) {}
6868

6969
fn foo(#[attr] x: i32, #[attr] x: i64) {}
7070

71+
fn accumulate(self) -> Machine<{State::Accumulate}> {}
72+
7173
---
7274

7375
(source_file
@@ -162,6 +164,19 @@ fn foo(#[attr] x: i32, #[attr] x: i64) {}
162164
(parameter
163165
pattern: (identifier)
164166
type: (primitive_type)))
167+
body: (block))
168+
(function_item
169+
name: (identifier)
170+
parameters: (parameters
171+
(self_parameter
172+
(self)))
173+
return_type: (generic_type
174+
type: (type_identifier)
175+
type_arguments: (type_arguments
176+
(block
177+
(scoped_identifier
178+
path: (identifier)
179+
name: (identifier)))))
165180
body: (block)))
166181

167182
============================================
@@ -445,7 +460,7 @@ struct D<const SIZE: usize> {}
445460
type_parameters: (type_parameters
446461
(const_parameter
447462
name: (identifier)
448-
type: (type_identifier)))
463+
type: (primitive_type)))
449464
body: (field_declaration_list)))
450465

451466
============================================
@@ -562,7 +577,7 @@ pub fn uninit_array<const LEN: usize>() -> [Self; LEN] {}
562577
type_parameters: (type_parameters
563578
(const_parameter
564579
name: (identifier)
565-
type: (type_identifier)))
580+
type: (primitive_type)))
566581
parameters: (parameters)
567582
return_type: (array_type
568583
element: (type_identifier)
@@ -854,15 +869,55 @@ impl Person {
854869
fn talk_mut(&'a mut self) {}
855870
}
856871

872+
impl Machine<{State::Init}> {}
873+
857874
---
858875

859876
(source_file
860-
(impl_item (type_identifier) (declaration_list
861-
(const_item (identifier) (primitive_type) (integer_literal))
862-
(function_item (identifier) (parameters (self_parameter (self))) (block))
863-
(function_item (identifier) (parameters (self_parameter (mutable_specifier) (self))) (block))
864-
(function_item (identifier) (parameters (self_parameter (self))) (block))
865-
(function_item (identifier) (parameters (self_parameter (lifetime (identifier)) (mutable_specifier) (self))) (block)))))
877+
(impl_item
878+
type: (type_identifier)
879+
body: (declaration_list
880+
(const_item
881+
name: (identifier)
882+
type: (primitive_type)
883+
value: (integer_literal))
884+
(function_item
885+
name: (identifier)
886+
parameters: (parameters
887+
(self_parameter
888+
(self)))
889+
body: (block))
890+
(function_item
891+
name: (identifier)
892+
parameters: (parameters
893+
(self_parameter
894+
(mutable_specifier)
895+
(self)))
896+
body: (block))
897+
(function_item
898+
name: (identifier)
899+
parameters: (parameters
900+
(self_parameter
901+
(self)))
902+
body: (block))
903+
(function_item
904+
name: (identifier)
905+
parameters: (parameters
906+
(self_parameter
907+
(lifetime
908+
(identifier))
909+
(mutable_specifier)
910+
(self)))
911+
body: (block))))
912+
(impl_item
913+
type: (generic_type
914+
type: (type_identifier)
915+
type_arguments: (type_arguments
916+
(block
917+
(scoped_identifier
918+
path: (identifier)
919+
name: (identifier)))))
920+
body: (declaration_list)))
866921

867922
===========================================
868923
Trait impls

grammar.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -524,7 +524,7 @@ module.exports = grammar({
524524
'const',
525525
field('name', $.identifier),
526526
':',
527-
field('type', $._type_identifier),
527+
field('type', $._type),
528528
),
529529

530530
constrained_type_parameter: $ => seq(
@@ -778,6 +778,7 @@ module.exports = grammar({
778778
$.type_binding,
779779
$.lifetime,
780780
$._literal,
781+
$.block,
781782
)),
782783
optional(','),
783784
'>'

src/grammar.json

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -755,7 +755,7 @@
755755
},
756756
{
757757
"type": "PATTERN",
758-
"value": "[\\/_\\-=->,;:::!=?.@*=\\/=&=#%=^=+<>|~]+"
758+
"value": "[/_\\-=->,;:::!=?.@*=/=&=#%=^=+<>|~]+"
759759
},
760760
{
761761
"type": "STRING",
@@ -2975,7 +2975,7 @@
29752975
"name": "type",
29762976
"content": {
29772977
"type": "SYMBOL",
2978-
"name": "_type_identifier"
2978+
"name": "_type"
29792979
}
29802980
}
29812981
]
@@ -4345,6 +4345,10 @@
43454345
{
43464346
"type": "SYMBOL",
43474347
"name": "_literal"
4348+
},
4349+
{
4350+
"type": "SYMBOL",
4351+
"name": "block"
43484352
}
43494353
]
43504354
},
@@ -4375,6 +4379,10 @@
43754379
{
43764380
"type": "SYMBOL",
43774381
"name": "_literal"
4382+
},
4383+
{
4384+
"type": "SYMBOL",
4385+
"name": "block"
43784386
}
43794387
]
43804388
}

src/node-types.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1076,7 +1076,7 @@
10761076
"required": true,
10771077
"types": [
10781078
{
1079-
"type": "type_identifier",
1079+
"type": "_type",
10801080
"named": true
10811081
}
10821082
]
@@ -3835,6 +3835,10 @@
38353835
"type": "_type",
38363836
"named": true
38373837
},
3838+
{
3839+
"type": "block",
3840+
"named": true
3841+
},
38383842
{
38393843
"type": "lifetime",
38403844
"named": true

0 commit comments

Comments
 (0)