# HG changeset patch # User Adam Chlipala # Date 1440707325 14400 # Node ID 010ce27228f1894d2adc7672d11b39131ab91f47 # Parent 3b4a5604ed971961ef20ac450d0ff228d8b57cdd Proper error message for excessively fancy FFI signatures diff -r 3b4a5604ed97 -r 010ce27228f1 src/elaborate.sml --- 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) diff -r 3b4a5604ed97 -r 010ce27228f1 tests/ffisub.urp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/ffisub.urp Thu Aug 27 16:28:45 2015 -0400 @@ -0,0 +1,3 @@ +ffi ffisub + +empty diff -r 3b4a5604ed97 -r 010ce27228f1 tests/ffisub.urs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/ffisub.urs Thu Aug 27 16:28:45 2015 -0400 @@ -0,0 +1,5 @@ +structure S : sig + type t +end + +val x : S.t