Bug fixing in the AST pretty-printer and new syntax for iterators.

I added a type annotation for the variable iterating a
collection, which is also now marked as "map", "set" or "list".

I fixed and refactored the pretty-printer for the AST.
This commit is contained in:
Christian Rinderknecht 2019-10-16 01:11:54 +02:00
parent 27564426da
commit 15937a2459
4 changed files with 294 additions and 408 deletions

View File

@ -438,11 +438,19 @@ and for_collect = {
kwd_for : kwd_for; kwd_for : kwd_for;
var : variable; var : variable;
bind_to : (arrow * variable) option; bind_to : (arrow * variable) option;
colon : colon;
elt_type : type_expr;
kwd_in : kwd_in; kwd_in : kwd_in;
collection : collection;
expr : expr; expr : expr;
block : block reg block : block reg
} }
and collection =
Map of kwd_map
| Set of kwd_set
| List of kwd_list
(* Expressions *) (* Expressions *)
and expr = and expr =

View File

@ -422,11 +422,19 @@ and for_collect = {
kwd_for : kwd_for; kwd_for : kwd_for;
var : variable; var : variable;
bind_to : (arrow * variable) option; bind_to : (arrow * variable) option;
colon : colon;
elt_type : type_expr;
kwd_in : kwd_in; kwd_in : kwd_in;
collection : collection;
expr : expr; expr : expr;
block : block reg block : block reg
} }
and collection =
Map of kwd_map
| Set of kwd_set
| List of kwd_list
(* Expressions *) (* Expressions *)
and expr = and expr =

View File

@ -630,17 +630,26 @@ for_loop:
block = $5} block = $5}
in For (ForInt {region; value}) in For (ForInt {region; value})
} }
| For var option(arrow_clause) In expr block { | For var option(arrow_clause) COLON type_expr
let region = cover $1 $6.region in In collection expr block {
let region = cover $1 $9.region in
let value = { let value = {
kwd_for = $1; kwd_for = $1;
var = $2; var = $2;
bind_to = $3; bind_to = $3;
kwd_in = $4; colon = $4;
expr = $5; elt_type = $5;
block = $6} kwd_in = $6;
collection = $7;
expr = $8;
block = $9}
in For (ForCollect {region; value})} in For (ForCollect {region; value})}
collection:
Map { Map $1 }
| Set { Set $1 }
| List { List $1 }
var_assign: var_assign:
var ASS expr { var ASS expr {
let region = cover $1.region (expr_to_region $3) let region = cover $1.region (expr_to_region $3)

File diff suppressed because it is too large Load Diff