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/compiler.sml | |
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/compiler.sml')
-rw-r--r-- | src/compiler.sml | 14 |
1 files changed, 13 insertions, 1 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, |