aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/elaborate.sml
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adam@chlipala.net>2014-12-30 17:02:31 -0500
committerGravatar Adam Chlipala <adam@chlipala.net>2014-12-30 17:02:31 -0500
commit24b9ea0474324a135132390d8bf18d36efea2d4e (patch)
treed0faf112284b863719e379421624781322b30be9 /src/elaborate.sml
parentc72be04ba3d27e8109a2edbea50a391aaa000dfd (diff)
Fix a bug in subsignature checking for submodules
Diffstat (limited to 'src/elaborate.sml')
-rw-r--r--src/elaborate.sml5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/elaborate.sml b/src/elaborate.sml
index 84d3dc09..ca3bac24 100644
--- a/src/elaborate.sml
+++ b/src/elaborate.sml
@@ -3345,7 +3345,12 @@ and subSgn' counterparts env strLoc sgn1 (sgn2 as (_, loc2)) =
L'.SgiStr (x', n1, sgn1) =>
if x = x' then
let
+ (* Don't forget to save & restore the
+ * counterparts map around recursive calls!
+ * Otherwise, all sorts of mayhem may result. *)
+ val saved = !counterparts
val () = subSgn' counterparts env loc sgn1 sgn2
+ val () = counterparts := saved
val env = E.pushStrNamedAs env x n1 sgn1
val env = if n1 = n2 then
env