AST change : op_desc becomes a record.
This commit is contained in:
parent
3d2e449cbe
commit
e400ffd9a5
|
@ -212,7 +212,6 @@ let rec typing h e =
|
||||||
skeleton i e.e_ty
|
skeleton i e.e_ty
|
||||||
| Earray(e_list) ->
|
| Earray(e_list) ->
|
||||||
product (List.map (typing h) e_list)
|
product (List.map (typing h) e_list)
|
||||||
| Ereset_mem _ -> assert false
|
|
||||||
|
|
||||||
(** Typing an application *)
|
(** Typing an application *)
|
||||||
and apply h op e_list =
|
and apply h op e_list =
|
||||||
|
|
|
@ -57,7 +57,7 @@ type exp =
|
||||||
| Eiterator of iterator_type * op_desc * exp option (** [op_desc] node to map
|
| Eiterator of iterator_type * op_desc * exp option (** [op_desc] node to map
|
||||||
[exp option] reset *)
|
[exp option] reset *)
|
||||||
|
|
||||||
and op_desc = longname * size_exp list * op_kind
|
and op_desc = { op_name : longname; op_params: size_exp list; op_kind: op_kind }
|
||||||
and op_kind = | Eop | Enode
|
and op_kind = | Eop | Enode
|
||||||
|
|
||||||
and const =
|
and const =
|
||||||
|
|
|
@ -407,7 +407,7 @@ simple_exp:
|
||||||
|
|
||||||
node_name:
|
node_name:
|
||||||
| longname call_params
|
| longname call_params
|
||||||
{ $1, $2, Enode }
|
{ mk_op_desc $1 $2 Enode }
|
||||||
|
|
||||||
exp:
|
exp:
|
||||||
| simple_exp { $1 }
|
| simple_exp { $1 }
|
||||||
|
|
|
@ -53,7 +53,7 @@ and array_op =
|
||||||
| Econcat
|
| Econcat
|
||||||
| Eiterator of iterator_type * op_desc
|
| Eiterator of iterator_type * op_desc
|
||||||
|
|
||||||
and op_desc = longname * exp list * op_kind
|
and op_desc = { op_name : longname; op_params: exp list; op_kind: op_kind }
|
||||||
and op_kind = | Eop | Enode
|
and op_kind = | Eop | Enode
|
||||||
|
|
||||||
and const =
|
and const =
|
||||||
|
@ -180,11 +180,14 @@ let mk_call desc exps =
|
||||||
let mk_op_call s params exps =
|
let mk_op_call s params exps =
|
||||||
mk_call (Name s, params, Eop) exps
|
mk_call (Name s, params, Eop) exps
|
||||||
|
|
||||||
|
let mk_op_desc ln params kind =
|
||||||
|
{ op_name = ln; op_params = params; op_kind = kind }
|
||||||
|
|
||||||
let mk_array_op_call op exps =
|
let mk_array_op_call op exps =
|
||||||
Eapp (mk_app (Earray_op op), exps)
|
Eapp (mk_app (Earray_op op), exps)
|
||||||
|
|
||||||
let mk_iterator_call it ln params exps =
|
let mk_iterator_call it ln params exps =
|
||||||
mk_array_op_call (Eiterator (it, (ln, params, Enode))) exps
|
mk_array_op_call (Eiterator (it, mk_op_desc ln params Enode)) exps
|
||||||
|
|
||||||
let mk_type_dec name desc =
|
let mk_type_dec name desc =
|
||||||
{ t_name = name; t_desc = desc; t_loc = Location.get_current_location () }
|
{ t_name = name; t_desc = desc; t_loc = Location.get_current_location () }
|
||||||
|
|
|
@ -16,6 +16,7 @@ open Names
|
||||||
open Ident
|
open Ident
|
||||||
open Signature
|
open Signature
|
||||||
open Static
|
open Static
|
||||||
|
open Types
|
||||||
|
|
||||||
type iterator_type =
|
type iterator_type =
|
||||||
| Imap
|
| Imap
|
||||||
|
@ -33,12 +34,12 @@ and tdesc =
|
||||||
| Type_struct of structure
|
| Type_struct of structure
|
||||||
|
|
||||||
and exp =
|
and exp =
|
||||||
{ e_desc: desc; (* its descriptor *)
|
{ e_desc: edesc; (* its descriptor *)
|
||||||
mutable e_ck: ck;
|
mutable e_ck: ck;
|
||||||
mutable e_ty: ty;
|
mutable e_ty: ty;
|
||||||
e_loc: location }
|
e_loc: location }
|
||||||
|
|
||||||
and desc =
|
and edesc =
|
||||||
| Econst of const
|
| Econst of const
|
||||||
| Evar of ident
|
| Evar of ident
|
||||||
| Econstvar of name
|
| Econstvar of name
|
||||||
|
@ -66,7 +67,7 @@ and array_op =
|
||||||
| Econcat of exp * exp
|
| Econcat of exp * exp
|
||||||
| Eiterator of iterator_name * longname * size_exp list * size_exp * exp list * ident option
|
| Eiterator of iterator_name * longname * size_exp list * size_exp * exp list * ident option
|
||||||
|
|
||||||
and op_desc = longname * size_exp list * op_kind
|
and op_desc = { op_name: longname; op_params: size_exp list; op_kind: op_kind }
|
||||||
and op_kind = | Eop | Enode
|
and op_kind = | Eop | Enode
|
||||||
|
|
||||||
and ct =
|
and ct =
|
||||||
|
@ -95,7 +96,7 @@ and pat =
|
||||||
type eq =
|
type eq =
|
||||||
{ eq_lhs : pat;
|
{ eq_lhs : pat;
|
||||||
eq_rhs : exp;
|
eq_rhs : exp;
|
||||||
eq_loc : loc }
|
eq_loc : location }
|
||||||
|
|
||||||
type var_dec =
|
type var_dec =
|
||||||
{ v_name : ident;
|
{ v_name : ident;
|
||||||
|
@ -135,19 +136,18 @@ type program =
|
||||||
p_consts : const_dec list; }
|
p_consts : const_dec list; }
|
||||||
|
|
||||||
(*Helper functions to build the AST*)
|
(*Helper functions to build the AST*)
|
||||||
let make_exp desc ty l ck loc =
|
|
||||||
{ e_desc = desc; e_ty = ty; e_linearity = l; e_ck = ck; e_loc = loc }
|
|
||||||
|
|
||||||
let make_dummy_exp desc ty =
|
|
||||||
{ e_desc = desc; e_ty = ty; e_linearity = NotLinear;
|
let mk_exp ?(exp_ty = Tprod []) ?(clock = Cbase) ?(loc = no_location) desc =
|
||||||
e_ck = Cbase; e_loc = no_location }
|
{ e_desc = desc; e_ty = exp_ty; e_ck = clock; e_loc = loc }
|
||||||
|
|
||||||
|
|
||||||
let rec size_exp_of_exp e =
|
let rec size_exp_of_exp e =
|
||||||
match e.e_desc with
|
match e.e_desc with
|
||||||
| Econstvar n -> SVar n
|
| Econstvar n -> SVar n
|
||||||
| Econst (Cint i) -> SConst i
|
| Econst (Cint i) -> SConst i
|
||||||
| Eop(op, _, [e1;e2]) ->
|
| Ecall(op, [e1;e2], _) ->
|
||||||
let sop = op_from_app_name op in
|
let sop = op_from_app_name op.op_name in
|
||||||
SOp(sop, size_exp_of_exp e1, size_exp_of_exp e2)
|
SOp(sop, size_exp_of_exp e1, size_exp_of_exp e2)
|
||||||
| _ -> raise Not_static
|
| _ -> raise Not_static
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue