File tree 5 files changed +70741
-69657
lines changed
5 files changed +70741
-69657
lines changed Original file line number Diff line number Diff line change @@ -752,6 +752,29 @@ a.map(|b: usize| b.push(c));
752
752
(closure_parameters (parameter (identifier) (primitive_type)))
753
753
(call_expression (field_expression (identifier) (field_identifier)) (arguments (identifier)))))))
754
754
755
+ ===========================================
756
+ Generators
757
+ ===========================================
758
+
759
+ move || {
760
+ while i <= n {
761
+ yield i;
762
+ i += 1;
763
+ }
764
+ return;
765
+ };
766
+
767
+ ---
768
+
769
+ (source_file
770
+ (closure_expression
771
+ (closure_parameters)
772
+ (block
773
+ (while_expression (binary_expression (identifier) (identifier))
774
+ (block (yield_expression (identifier))
775
+ (compound_assignment_expr (identifier) (integer_literal))))
776
+ (return_expression))))
777
+
755
778
===========================================
756
779
Unsafe blocks
757
780
===========================================
Original file line number Diff line number Diff line change @@ -842,6 +842,7 @@ module.exports = grammar({
842
842
$ . range_expression ,
843
843
$ . call_expression ,
844
844
$ . return_expression ,
845
+ $ . yield_expression ,
845
846
$ . _literal ,
846
847
prec . left ( $ . identifier ) ,
847
848
alias ( choice ( ...primitive_types ) , $ . identifier ) ,
@@ -988,6 +989,11 @@ module.exports = grammar({
988
989
prec ( - 1 , 'return' ) ,
989
990
) ,
990
991
992
+ yield_expression : $ => choice (
993
+ prec . left ( seq ( 'yield' , $ . _expression ) ) ,
994
+ prec ( - 1 , 'yield' ) ,
995
+ ) ,
996
+
991
997
call_expression : $ => prec ( PREC . call , seq (
992
998
field ( 'function' , $ . _expression ) ,
993
999
field ( 'arguments' , $ . arguments )
Original file line number Diff line number Diff line change 4665
4665
"type" : " SYMBOL" ,
4666
4666
"name" : " return_expression"
4667
4667
},
4668
+ {
4669
+ "type" : " SYMBOL" ,
4670
+ "name" : " yield_expression"
4671
+ },
4668
4672
{
4669
4673
"type" : " SYMBOL" ,
4670
4674
"name" : " _literal"
5742
5746
}
5743
5747
]
5744
5748
},
5749
+ "yield_expression" : {
5750
+ "type" : " CHOICE" ,
5751
+ "members" : [
5752
+ {
5753
+ "type" : " PREC_LEFT" ,
5754
+ "value" : 0 ,
5755
+ "content" : {
5756
+ "type" : " SEQ" ,
5757
+ "members" : [
5758
+ {
5759
+ "type" : " STRING" ,
5760
+ "value" : " yield"
5761
+ },
5762
+ {
5763
+ "type" : " SYMBOL" ,
5764
+ "name" : " _expression"
5765
+ }
5766
+ ]
5767
+ }
5768
+ },
5769
+ {
5770
+ "type" : " PREC" ,
5771
+ "value" : -1 ,
5772
+ "content" : {
5773
+ "type" : " STRING" ,
5774
+ "value" : " yield"
5775
+ }
5776
+ }
5777
+ ]
5778
+ },
5745
5779
"call_expression" : {
5746
5780
"type" : " PREC" ,
5747
5781
"value" : 14 ,
Original file line number Diff line number Diff line change 248
248
{
249
249
"type" : " while_let_expression" ,
250
250
"named" : true
251
+ },
252
+ {
253
+ "type" : " yield_expression" ,
254
+ "named" : true
251
255
}
252
256
]
253
257
},
4532
4536
]
4533
4537
}
4534
4538
},
4539
+ {
4540
+ "type" : " yield_expression" ,
4541
+ "named" : true ,
4542
+ "fields" : {},
4543
+ "children" : {
4544
+ "multiple" : false ,
4545
+ "required" : false ,
4546
+ "types" : [
4547
+ {
4548
+ "type" : " _expression" ,
4549
+ "named" : true
4550
+ }
4551
+ ]
4552
+ }
4553
+ },
4535
4554
{
4536
4555
"type" : " !" ,
4537
4556
"named" : false
4988
5007
"type" : " while" ,
4989
5008
"named" : false
4990
5009
},
5010
+ {
5011
+ "type" : " yield" ,
5012
+ "named" : false
5013
+ },
4991
5014
{
4992
5015
"type" : " {" ,
4993
5016
"named" : false
You can’t perform that action at this time.
0 commit comments