diff options
author | Adam Chlipala <adam@chlipala.net> | 2014-12-30 17:02:31 -0500 |
---|---|---|
committer | Adam Chlipala <adam@chlipala.net> | 2014-12-30 17:02:31 -0500 |
commit | 24b9ea0474324a135132390d8bf18d36efea2d4e (patch) | |
tree | d0faf112284b863719e379421624781322b30be9 | |
parent | c72be04ba3d27e8109a2edbea50a391aaa000dfd (diff) |
Fix a bug in subsignature checking for submodules
-rw-r--r-- | src/elaborate.sml | 5 |
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 |