comparison 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
comparison
equal deleted inserted replaced
2172:3b4a5604ed97 2173:010ce27228f1
4121 4121
4122 val (env', n) = E.pushStrNamed env x sgn' 4122 val (env', n) = E.pushStrNamed env x sgn'
4123 4123
4124 val dNew = (L'.DFfiStr (x, n, sgn'), loc) 4124 val dNew = (L'.DFfiStr (x, n, sgn'), loc)
4125 in 4125 in
4126 case #1 sgn' of
4127 L'.SgnConst sgis =>
4128 (case List.find (fn (L'.SgiConAbs _, _) => false
4129 | (L'.SgiCon _, _) => false
4130 | (L'.SgiDatatype _, _) => false
4131 | (L'.SgiVal _, _) => false
4132 | _ => true) sgis of
4133 NONE => ()
4134 | SOME sgi => (ErrorMsg.errorAt loc "Disallowed signature item for FFI module";
4135 epreface ("item", p_sgn_item env sgi)))
4136 | _ => raise Fail "FFI signature isn't SgnConst";
4137
4126 Option.map (fn tm => ModDb.insert (dNew, tm)) tmo; 4138 Option.map (fn tm => ModDb.insert (dNew, tm)) tmo;
4127 ([dNew], (env', denv, enD gs' @ gs)) 4139 ([dNew], (env', denv, enD gs' @ gs))
4128 end) 4140 end)
4129 4141
4130 | L.DOpen (m, ms) => 4142 | L.DOpen (m, ms) =>