diff src/elaborate.sml @ 2173:010ce27228f1

Proper error message for excessively fancy FFI signatures
author Adam Chlipala <adam@chlipala.net>
date Thu, 27 Aug 2015 16:28:45 -0400
parents f42fea631c1d
children 1ecef02f67c5
line wrap: on
line diff
--- a/src/elaborate.sml	Thu Aug 20 15:11:40 2015 -0400
+++ b/src/elaborate.sml	Thu Aug 27 16:28:45 2015 -0400
@@ -4123,6 +4123,18 @@
 
                          val dNew = (L'.DFfiStr (x, n, sgn'), loc)
                      in
+                         case #1 sgn' of
+                             L'.SgnConst sgis =>
+                             (case List.find (fn (L'.SgiConAbs _, _) => false
+                                             | (L'.SgiCon _, _) => false
+                                             | (L'.SgiDatatype _, _) => false
+                                             | (L'.SgiVal _, _) => false
+                                             | _ => true) sgis of
+                                  NONE => ()
+                                | SOME sgi => (ErrorMsg.errorAt loc "Disallowed signature item for FFI module";
+                                               epreface ("item", p_sgn_item env sgi)))
+                           | _ => raise Fail "FFI signature isn't SgnConst";
+
                          Option.map (fn tm => ModDb.insert (dNew, tm)) tmo;
                          ([dNew], (env', denv, enD gs' @ gs))
                      end)