Mercurial > urweb
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) => |