aboutsummaryrefslogtreecommitdiff
path: root/frontend
diff options
context:
space:
mode:
authorjohnvg2013-10-14 12:30:51 +0000
committerjohnvg2013-10-14 12:30:51 +0000
commitab85d84e03afc0244960d4672d2ae5f627d83858 (patch)
tree15ccfd581d8a4f05f227070c8a1c267866d7efd7 /frontend
parentprevent 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.icl5
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