I relaxed the grammar to support in the parser for initial values of
variables to not require type annotation, like var x : list (operation) := []
This commit is contained in:
parent
46d6df2146
commit
6c5ae52db6
73
Parser.mly
73
Parser.mly
@ -368,7 +368,7 @@ const_decl:
|
|||||||
}
|
}
|
||||||
|
|
||||||
var_decl:
|
var_decl:
|
||||||
Var var COLON type_expr ASS expr option(SEMI) {
|
Var var COLON var_decl_type_expr ASS expr option(SEMI) {
|
||||||
let stop =
|
let stop =
|
||||||
match $7 with
|
match $7 with
|
||||||
Some region -> region
|
Some region -> region
|
||||||
@ -384,30 +384,73 @@ var_decl:
|
|||||||
terminator = $7}
|
terminator = $7}
|
||||||
in {region; value}
|
in {region; value}
|
||||||
}
|
}
|
||||||
(*
|
|
||||||
| Var var COLON type_name type_tuple
|
| Var var COLON type_name type_tuple
|
||||||
ASS extended_expr option(SEMI) {
|
ASS extended_expr option(SEMI) {
|
||||||
let stop =
|
let region = cover $4.region $5.region in
|
||||||
match $7 with
|
let type_app = TypeApp {region; value=$4,$5} in
|
||||||
Some region -> region
|
let cartesian = {region; value = type_app, []} in
|
||||||
| None -> expr_to_region $6 in
|
let var_type = Prod cartesian in
|
||||||
let region = cover $1 stop in
|
let stop = match $8 with
|
||||||
|
Some region -> region
|
||||||
|
| None -> $7.region in
|
||||||
|
let region = cover $1 stop in
|
||||||
|
let init =
|
||||||
|
match $7.value with
|
||||||
|
`Expr e -> e
|
||||||
|
| `EList (lbracket, rbracket) ->
|
||||||
|
let region = $7.region
|
||||||
|
and value = {
|
||||||
|
lbracket;
|
||||||
|
rbracket;
|
||||||
|
colon = Region.ghost;
|
||||||
|
list_type = var_type} in
|
||||||
|
let value = {
|
||||||
|
lpar = Region.ghost;
|
||||||
|
inside = value;
|
||||||
|
rpar = Region.ghost} in
|
||||||
|
ListExpr (EmptyList {region; value})
|
||||||
|
| `ENone region ->
|
||||||
|
let value = {
|
||||||
|
lpar = Region.ghost;
|
||||||
|
inside = {
|
||||||
|
c_None = region;
|
||||||
|
colon = Region.ghost;
|
||||||
|
opt_type = var_type};
|
||||||
|
rpar = Region.ghost}
|
||||||
|
in ConstrExpr (NoneExpr {region; value}) in
|
||||||
let value = {
|
let value = {
|
||||||
kwd_var = $1;
|
kwd_var = $1;
|
||||||
name = $2;
|
name = $2;
|
||||||
colon = $3;
|
colon = $3;
|
||||||
var_type = $4;
|
var_type;
|
||||||
ass = $5;
|
assign = $6;
|
||||||
init = $6;
|
init;
|
||||||
terminator = $7}
|
terminator = $8}
|
||||||
in {region; value}
|
in {region; value}
|
||||||
}
|
}
|
||||||
|
|
||||||
extended_expr:
|
extended_expr:
|
||||||
expr { }
|
expr { {region = expr_to_region $1;
|
||||||
| LBRACKET RBRACKET { }
|
value = `Expr $1} }
|
||||||
| C_None { }
|
| LBRACKET RBRACKET { {region = cover $1 $2;
|
||||||
*)
|
value = `EList ($1,$2)} }
|
||||||
|
| C_None { {region = $1; value = `ENone $1} }
|
||||||
|
|
||||||
|
var_decl_type_expr:
|
||||||
|
var_decl_cartesian { Prod $1 }
|
||||||
|
| sum_type { Sum $1 }
|
||||||
|
| record_type { Record $1 }
|
||||||
|
|
||||||
|
var_decl_cartesian:
|
||||||
|
nsepseq(var_decl_core_type,TIMES) {
|
||||||
|
let region = nsepseq_to_region type_expr_to_region $1
|
||||||
|
in {region; value=$1}
|
||||||
|
}
|
||||||
|
|
||||||
|
var_decl_core_type:
|
||||||
|
type_name { TAlias $1 }
|
||||||
|
| par(type_expr) { ParType $1 }
|
||||||
|
|
||||||
instruction:
|
instruction:
|
||||||
single_instr { Single $1 }
|
single_instr { Single $1 }
|
||||||
| block { Block $1 }
|
| block { Block $1 }
|
||||||
|
@ -10,7 +10,7 @@ entrypoint contribute (storage store : state;
|
|||||||
const sender : address;
|
const sender : address;
|
||||||
const amount : mutez)
|
const amount : mutez)
|
||||||
: state * list (operation) is
|
: state * list (operation) is
|
||||||
var operations : list (operation) := ([] : list (operation)) // TODO
|
var operations : list (operation) := []
|
||||||
begin
|
begin
|
||||||
if now > store.deadline then
|
if now > store.deadline then
|
||||||
fail "Deadline passed"
|
fail "Deadline passed"
|
||||||
@ -26,9 +26,9 @@ entrypoint contribute (storage store : state;
|
|||||||
end
|
end
|
||||||
end with (store, operations)
|
end with (store, operations)
|
||||||
|
|
||||||
entrypoint get_funds (storage store : state; const sender : address)
|
entrypoint withdraw (storage store : state; const sender : address)
|
||||||
: state * list (operation) is
|
: state * list (operation) is
|
||||||
var operations : list (operation) := ([] : list (operation)) // TODO
|
var operations : list (operation) := []
|
||||||
begin
|
begin
|
||||||
if sender = owner then
|
if sender = owner then
|
||||||
if now >= store.deadline then
|
if now >= store.deadline then
|
||||||
@ -44,7 +44,7 @@ entrypoint get_funds (storage store : state; const sender : address)
|
|||||||
|
|
||||||
entrypoint claim (storage store : state; const sender : address)
|
entrypoint claim (storage store : state; const sender : address)
|
||||||
: state * list (operation) is
|
: state * list (operation) is
|
||||||
var operations : list (operation) := ([] : list (operation)) // TODO
|
var operations : list (operation) := []
|
||||||
var amount : mutez := 0
|
var amount : mutez := 0
|
||||||
begin
|
begin
|
||||||
if now <= store.deadline then
|
if now <= store.deadline then
|
||||||
|
Loading…
Reference in New Issue
Block a user