aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/corify.sml
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adam@chlipala.net>2014-02-20 10:48:17 -0500
committerGravatar Adam Chlipala <adam@chlipala.net>2014-02-20 10:48:17 -0500
commit023d9ecbbc2bd1fc14098e84f5b0216da12a48a0 (patch)
tree9d0092264594ba927fc2e1977d7173d5297545c0 /src/corify.sml
parente76ee80695acce02b283d12eedc26477ace15b1f (diff)
Fixed issue with datatype constructors inside functors; now on to some problem with modules inside functors
Diffstat (limited to 'src/corify.sml')
-rw-r--r--src/corify.sml16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/corify.sml b/src/corify.sml
index 7fda1034..085b2eb8 100644
--- a/src/corify.sml
+++ b/src/corify.sml
@@ -99,6 +99,7 @@ structure St : sig
val lookupConstructorByNameOpt : t -> string -> L'.patCon option
val lookupConstructorByName : t -> string -> L'.patCon
val lookupConstructorById : t -> int -> L'.patCon
+ val lookupConstructorByIdOpt : t -> int -> L'.patCon option
datatype core_val =
ENormal of int
@@ -320,6 +321,9 @@ fun lookupConstructorById ({constructors, ...} : t) n =
NONE => raise Fail "Corify.St.lookupConstructorById"
| SOME x => x
+fun lookupConstructorByIdOpt ({constructors, ...} : t) n =
+ IM.find (constructors, n)
+
fun lookupConstructorByNameOpt ({current, ...} : t) x =
case current of
FFfi {mod = m, constructors, ...} =>
@@ -744,6 +748,18 @@ fun corifyDecl mods (all as (d, loc : EM.span), st) =
in
((L'.DCon (x, n, k', cBase), loc) :: cds, st)
end
+ | L.DVal (x, n, t, e as (L.ENamed n', _)) =>
+ let
+ val st =
+ case St.lookupConstructorByIdOpt st n' of
+ SOME pc => St.bindConstructorAs st x n pc
+ | _ => st
+
+ val (st, n) = St.bindVal st x n
+ val s = doRestify Settings.Url (mods, x)
+ in
+ ([(L'.DVal (x, n, corifyCon st t, corifyExp st e, s), loc)], st)
+ end
| L.DVal (x, n, t, e) =>
let
val (st, n) = St.bindVal st x n