summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--language/l2.ott4
-rw-r--r--language/l2_parse.ott2
-rw-r--r--src/type_check.ml8
3 files changed, 10 insertions, 4 deletions
diff --git a/language/l2.ott b/language/l2.ott
index d7f03240..b760ca75 100644
--- a/language/l2.ott
+++ b/language/l2.ott
@@ -567,7 +567,7 @@ exp :: 'E_' ::=
| exp [ exp' ] :: :: vector_access
{{ com vector access }}
- | exp [ exp1 : exp2 ] :: :: vector_subrange
+ | exp [ exp1 '..' exp2 ] :: :: vector_subrange
{{ com subvector extraction }}
% do we want to allow a comma-separated list of such thingies?
@@ -632,7 +632,7 @@ lexp :: 'LEXP_' ::= {{ com lvalue expression }}
| id ( exp1 , .. , expn ) :: :: memory {{ com memory write via function call }}
| id exp :: S :: mem_tup {{ ichlo [[id (exp)]] }}
| lexp [ exp ] :: :: vector {{ com vector element }}
- | lexp [ exp1 : exp2 ] :: :: vector_range {{ com subvector }}
+ | lexp [ exp1 '..' exp2 ] :: :: vector_range {{ com subvector }}
% maybe comma-sep such lists too
| lexp . id :: :: field {{ com struct field }}
diff --git a/language/l2_parse.ott b/language/l2_parse.ott
index b617dc6c..2fbf860e 100644
--- a/language/l2_parse.ott
+++ b/language/l2_parse.ott
@@ -466,7 +466,7 @@ exp :: 'E_' ::=
| exp [ exp' ] :: :: vector_access
{{ com vector access }}
- | exp [ exp1 : exp2 ] :: :: vector_subrange
+ | exp [ exp1 '..' exp2 ] :: :: vector_subrange
{{ com subvector extraction }}
% do we want to allow a comma-separated list of such thingies?
diff --git a/src/type_check.ml b/src/type_check.ml
index 85cd59fb..9c1f4942 100644
--- a/src/type_check.ml
+++ b/src/type_check.ml
@@ -823,7 +823,13 @@ and check_lexp envs (LEXP_aux(lexp,(l,annot))) : (tannot lexp * typ * tannot ema
let t = {t=Tapp("reg",[TA_typ u])} in
let tannot = (Some(([],t),Emp,[],pure_e)) in
(LEXP_aux(lexp,(l,tannot)),u,Envmap.from_list [i,tannot],Emp,pure_e))
- | LEXP_memory(id,exps) -> (LEXP_aux(lexp,(l,annot)),new_t(),t_env,Emp,pure_e)
+ | LEXP_memory(id,exps) ->
+ let i = id_to_string id in
+ (match Envmap.apply t_env i with
+ | Some(Some((parms,t),External,cs,ef)) ->
+
+ (LEXP_aux(lexp,(l,annot)),new_t(),t_env,Emp,pure_e)
+ | _ -> (LEXP_aux(lexp,(l,annot)),new_t(),t_env,Emp,pure_e))
| LEXP_vector(vec,acc) -> (LEXP_aux(lexp,(l,annot)),new_t(),t_env,Emp,pure_e)
| LEXP_vector_range(vec,base,range)-> (LEXP_aux(lexp,(l,annot))),new_t(),t_env,Emp,pure_e
| LEXP_field(vec,id)-> (LEXP_aux(lexp,(l,annot))),new_t(),t_env,Emp,pure_e