diff options
author | johnvg | 2001-12-17 16:31:03 +0000 |
---|---|---|
committer | johnvg | 2001-12-17 16:31:03 +0000 |
commit | 86154d79680a69802325a1ecd1f29ac7a183ec97 (patch) | |
tree | 76f393933b1e13058b116af146cf7264641b2a25 /backend/backendconvert.icl | |
parent | fix bug in label names of cons for unboxed lists of records (diff) |
implement pattern matching of strict, unboxed and overloaded lists
in let, with and where expressions
git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@942 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
Diffstat (limited to 'backend/backendconvert.icl')
-rw-r--r-- | backend/backendconvert.icl | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/backend/backendconvert.icl b/backend/backendconvert.icl index 23ab64d..73475dd 100644 --- a/backend/backendconvert.icl +++ b/backend/backendconvert.icl @@ -1866,7 +1866,17 @@ where convertExpr (TupleSelect {ds_arity} n expr) = beTupleSelectNode ds_arity n (convertExpr expr) convertExpr (MatchExpr {glob_module, glob_object={ds_index,ds_arity}} expr) - = beMatchNode ds_arity (beConstructorSymbol glob_module ds_index) (convertExpr expr) + | glob_module==cPredefinedModuleIndex + && (let + pd_cons_index=ds_index+FirstConstructorPredefinedSymbolIndex + in + pd_cons_index==PD_UnboxedConsSymbol || pd_cons_index==PD_UnboxedTailStrictConsSymbol || pd_cons_index==PD_OverloadedConsSymbol) + = case expr of + App {app_args=[src_expr],app_symb={symb_kind=SK_Function {glob_module=decons_module,glob_object=deconsindex}}} + -> beMatchNode ds_arity (beOverloadedConsSymbol glob_module ds_index decons_module deconsindex) (convertExpr src_expr) + _ + -> convertExpr expr + = beMatchNode ds_arity (beConstructorSymbol glob_module ds_index) (convertExpr expr) convertExpr (Conditional {if_cond=cond, if_then, if_else=Yes else}) = beIfNode (convertExpr cond) (convertExpr if_then) (convertExpr else) |