summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKathy Gray2014-03-18 21:54:38 +0000
committerKathy Gray2014-03-18 21:55:03 +0000
commit651f61c4888666b9d23168722712505cacc33e7c (patch)
tree9b394fe6477f86d9f7451d40277ff4b2a3a33984 /src
parentef17899571edf9f937c0c9397ece277f99540e55 (diff)
Add parser support for empty and one element vectors
Diffstat (limited to 'src')
-rw-r--r--src/finite_map.ml10
-rw-r--r--src/parser.mly6
2 files changed, 11 insertions, 5 deletions
diff --git a/src/finite_map.ml b/src/finite_map.ml
index fd0a5553..32629fdc 100644
--- a/src/finite_map.ml
+++ b/src/finite_map.ml
@@ -93,11 +93,6 @@ module Fmap_map(Key : Set.OrderedType) : Fmap
let insert m (k,v) = M.add k v m
let union m1 m2 =
M.merge (fun k v1 v2 -> match v2 with | None -> v1 | Some _ -> v2) m1 m2
- let intersect m1 m2 =
- M.fold (fun k v res ->
- if (M.mem k m2)
- then M.add k v res
- else res) M.empty m1
let merge f m1 m2 = M.merge f m1 m2
let apply m k =
try
@@ -117,6 +112,11 @@ module Fmap_map(Key : Set.OrderedType) : Fmap
None
let iter f m = M.iter f m
let fold f m base = M.fold (fun k v res -> f res k v) base m
+ let intersect m1 m2 =
+ M.fold (fun k v res ->
+ if (M.mem k m2)
+ then M.add k v res
+ else res) m1 M.empty
let remove m k = M.remove k m
let pp_map pp_key pp_val ppf m =
let l = M.fold (fun k v l -> (k,v)::l) m [] in
diff --git a/src/parser.mly b/src/parser.mly
index 4fef21f7..16d28daa 100644
--- a/src/parser.mly
+++ b/src/parser.mly
@@ -431,6 +431,8 @@ atomic_pat:
{ ploc (P_vector($2)) }
| Lsquare pat Rsquare
{ ploc (P_vector([$2])) }
+ | Lsquare Rsquare
+ { ploc (P_vector []) }
| Lsquare npats Rsquare
{ ploc (P_vector_indexed($2)) }
| Lparen comma_pats Rparen
@@ -507,6 +509,10 @@ atomic_exp:
{ eloc (E_tuple($2)) }
| Lcurly exp With semi_exps Rcurly
{ eloc (E_record_update($2,$4)) }
+ | Lsquare Rsquare
+ { eloc (E_vector([])) }
+ | Lsquare exp Rsquare
+ { eloc (E_vector([$2])) }
| Lsquare comma_exps Rsquare
{ eloc (E_vector($2)) }
| Lsquare exp With atomic_exp Eq exp Rsquare