Mercurial > urweb
diff src/compiler.sml @ 1738:1a35e75b6967
Catch duplicate top-level module names; fix dropping of constraints during incremental elaboration; document treatment of record types as type class instance types
author | Adam Chlipala <adam@chlipala.net> |
---|---|
date | Thu, 03 May 2012 09:56:41 -0400 |
parents | ab24a7cb2a64 |
children | c414850f206f |
line wrap: on
line diff
--- a/src/compiler.sml Wed May 02 08:56:19 2012 -0400 +++ b/src/compiler.sml Thu May 03 09:56:41 2012 -0400 @@ -943,8 +943,11 @@ 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 @@ 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,