aboutsummaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
authorjohnvg2001-12-17 16:31:03 +0000
committerjohnvg2001-12-17 16:31:03 +0000
commit86154d79680a69802325a1ecd1f29ac7a183ec97 (patch)
tree76f393933b1e13058b116af146cf7264641b2a25 /backend
parentfix 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')
-rw-r--r--backend/backendconvert.icl12
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)