From 1ca9408089542b282078cc1b7f3c8aa71659f00c Mon Sep 17 00:00:00 2001 From: Adam Chlipala Date: Thu, 3 May 2012 09:56:41 -0400 Subject: Catch duplicate top-level module names; fix dropping of constraints during incremental elaboration; document treatment of record types as type class instance types --- src/compiler.sml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'src/compiler.sml') 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, -- cgit v1.2.3