diff options
author | johnvg | 2013-10-14 12:30:51 +0000 |
---|---|---|
committer | johnvg | 2013-10-14 12:30:51 +0000 |
commit | ab85d84e03afc0244960d4672d2ae5f627d83858 (patch) | |
tree | 15ccfd581d8a4f05f227070c8a1c267866d7efd7 /frontend | |
parent | prevent crash if a newtype is used with -dynamics (diff) |
check the type of instances defined using :== (maybe the parser should reject these instances)
git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@2297 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
Diffstat (limited to 'frontend')
-rw-r--r-- | frontend/transform.icl | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/frontend/transform.icl b/frontend/transform.icl index 714ea74..eb55392 100644 --- a/frontend/transform.icl +++ b/frontend/transform.icl @@ -1392,6 +1392,11 @@ where remove_macros_from_group [FunctionOrIclMacroIndex fun:funs] fun_defs # (funs,fun_defs)=remove_macros_from_group funs fun_defs | fun_defs.[fun].fun_info.fi_group_index<NoIndex + /* Macros don't have types, however the parser allows :== for instances, which results in a macro with a type. + These types must be checked, because if the type of the expression is incorrect and the instance is exported, + an incorrectly typed program can be compiled. Currently using :== in instances probably has no effect, + so it might be better to reject this in the parser. */ + && case fun_defs.[fun].fun_type of No -> True; _ -> False = (funs,fun_defs) = ([fun:funs],fun_defs) remove_macros_from_group [DclMacroIndex macro_module_index macro_index:funs] fun_defs |