diff options
author | Adam Chlipala <adam@chlipala.net> | 2012-05-03 09:56:41 -0400 |
---|---|---|
committer | Adam Chlipala <adam@chlipala.net> | 2012-05-03 09:56:41 -0400 |
commit | 39df5b18cb633f6c83c06c2f9ddba3f9330aa06b (patch) | |
tree | 2956d1f36b61e86f6846f488271dfd550f9d1ca9 /src | |
parent | bba878651c459b4863ae907784270070e0048e51 (diff) |
Catch duplicate top-level module names; fix dropping of constraints during incremental elaboration; document treatment of record types as type class instance types
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler.sml | 14 | ||||
-rw-r--r-- | src/elaborate.sml | 2 |
2 files changed, 14 insertions, 2 deletions
diff --git a/src/compiler.sml b/src/compiler.sml index 575d95c7..45d87b6a 100644 --- a/src/compiler.sml +++ b/src/compiler.sml @@ -943,8 +943,11 @@ val parse = { first = ErrorMsg.dummyPos, last = ErrorMsg.dummyPos} + val urt = OS.FileSys.modTime ur + val urst = (OS.FileSys.modTime urs) handle _ => urt + val ds = #func parseUr ur - val d = (Source.DStr (mname, sgnO, if !Elaborate.incremental then SOME (OS.FileSys.modTime ur) else NONE, + val d = (Source.DStr (mname, sgnO, if !Elaborate.incremental then SOME (if Time.> (urt, urst) then urt else urst) else NONE, (Source.StrConst ds, loc)), loc) val fname = OS.Path.mkCanonical fname @@ -1078,6 +1081,15 @@ val parse = { NONE => ds | SOME v => ds @ [(Source.DOnError v, loc)] in + ignore (List.foldl (fn (d, used) => + case #1 d of + Source.DStr (x, _, _, _) => + if SS.member (used, x) then + (ErrorMsg.errorAt (#2 d) ("Duplicate top-level module name " ^ x); + used) + else + SS.add (used, x) + | _ => used) SS.empty ds); ds end handle Empty => ds end, diff --git a/src/elaborate.sml b/src/elaborate.sml index 41e9e9ab..f098b580 100644 --- a/src/elaborate.sml +++ b/src/elaborate.sml @@ -3934,7 +3934,7 @@ and elabDecl (dAll as (d, loc), (env, denv, gs)) = val env' = E.declBinds env d val denv' = dopenConstraints (loc, env', denv) {str = x, strs = []} in - ([d], (env', denv', [])) + ([d], (env', denv', gs)) end | NONE => let |