Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
clean-compiler-and-rts
compiler
Commits
721517e7
Commit
721517e7
authored
Apr 08, 2021
by
John van Groningen
Browse files
refactor, rename constructor OverloadedListPatterns as OverloadedPatterns
parent
14bef518
Changes
20
Hide whitespace changes
Inline
Side-by-side
backend/backendconvert.icl
View file @
721517e7
...
...
@@ -601,7 +601,7 @@ instance declareVars CasePatterns where
=
declareVars
patterns
dvInput
declareVars
(
BasicPatterns
_
patterns
)
dvInput
=
declareVars
patterns
dvInput
declareVars
(
Overloaded
List
Patterns
_
decons_expr
patterns
)
dvInput
declareVars
(
OverloadedPatterns
_
decons_expr
patterns
)
dvInput
=
declareVars
patterns
dvInput
instance
declareVars
AlgebraicPattern
where
...
...
@@ -2322,8 +2322,8 @@ instance convertCases CasePatterns where
=
convertCases
patterns
aliasDummyId
var
default_case
main_dcl_module_n
convertCases
(
BasicPatterns
_
patterns
)
aliasDummyId
var
default_case
main_dcl_module_n
=
convertCases
patterns
aliasDummyId
var
default_case
main_dcl_module_n
convertCases
(
Overloaded
List
Patterns
_
decons_expr
patterns
)
aliasDummyId
var
default_case
main_dcl_module_n
=
convertOverloaded
List
Patterns
patterns
decons_expr
aliasDummyId
var
default_case
main_dcl_module_n
convertCases
(
OverloadedPatterns
_
decons_expr
patterns
)
aliasDummyId
var
default_case
main_dcl_module_n
=
convertOverloadedPatterns
patterns
decons_expr
aliasDummyId
var
default_case
main_dcl_module_n
// +++ other patterns ???
instance
convertCases
[
a
]
|
convertCase
a
where
...
...
@@ -2438,7 +2438,7 @@ instance convertCase BasicPattern where
(
convertRhsStrictNodeIds
bp_expr
)
(
convertRootExpr
aliasDummyId
bp_expr
main_dcl_module_n
)
convertOverloaded
List
Patterns
patterns
decons_expr
aliasDummyId
var
optionalCase
main_dcl_module_n
convertOverloadedPatterns
patterns
decons_expr
aliasDummyId
var
optionalCase
main_dcl_module_n
=
sfoldr
(
beArgs
o
convertOverloadedListPattern
decons_expr
(
localRefCounts
patterns
optionalCase
))
(
convertDefaultCase
optionalCase
aliasDummyId
main_dcl_module_n
)
patterns
where
...
...
backend/backendpreprocess.icl
View file @
721517e7
...
...
@@ -130,7 +130,7 @@ instance sequence CasePatterns where
=
sequence
patterns
sequence
(
BasicPatterns
_
patterns
)
=
sequence
patterns
sequence
(
Overloaded
List
Patterns
_
decons_expr
patterns
)
sequence
(
OverloadedPatterns
_
decons_expr
patterns
)
=
sequence
patterns
instance
sequence
AlgebraicPattern
where
...
...
frontend/check.icl
View file @
721517e7
...
...
@@ -1127,10 +1127,10 @@ instance checkMacro CasePatterns where
#
(
patterns
,
ea
)
=
checkMacro
topLevel
patterns
ea
=
(
DynamicPatterns
patterns
,
ea
)
checkMacro
topLevel
(
Overloaded
List
Patterns
type
decons
patterns
)
ea
checkMacro
topLevel
(
OverloadedPatterns
type
decons
patterns
)
ea
#
(
patterns
,
ea
)
=
checkMacro
topLevel
patterns
ea
=
(
Overloaded
List
Patterns
type
decons
patterns
,
ea
)
=
(
OverloadedPatterns
type
decons
patterns
,
ea
)
checkMacro
_
NoPattern
ea
=
(
NoPattern
,
ea
)
...
...
frontend/checkFunctionBodies.icl
View file @
721517e7
...
...
@@ -151,19 +151,19 @@ make_case_guards cons_symbol global_type_index alg_patterns expr_heap cs
#
pd_cons_index
=
cons_symbol
.
glob_object
.
ds_index
+
FirstConstructorPredefinedSymbolIndex
|
pd_cons_index
==
PD_UnboxedConsSymbol
||
pd_cons_index
==
PD_UnboxedNilSymbol
#
(
unboxed_list
,
decons_expr
,
expr_heap
,
cs
)
=
make_unboxed_list
expr_heap
cs
=
(
Overloaded
List
Patterns
unboxed_list
decons_expr
alg_patterns
,
expr_heap
,
cs
)
=
(
OverloadedPatterns
unboxed_list
decons_expr
alg_patterns
,
expr_heap
,
cs
)
|
pd_cons_index
==
PD_UnboxedTailStrictConsSymbol
||
pd_cons_index
==
PD_UnboxedTailStrictNilSymbol
#
(
unboxed_tail_strict_list
,
decons_expr
,
expr_heap
,
cs
)
=
make_unboxed_tail_strict_list
expr_heap
cs
=
(
Overloaded
List
Patterns
unboxed_tail_strict_list
decons_expr
alg_patterns
,
expr_heap
,
cs
)
=
(
OverloadedPatterns
unboxed_tail_strict_list
decons_expr
alg_patterns
,
expr_heap
,
cs
)
|
pd_cons_index
==
PD_OverloadedConsSymbol
||
pd_cons_index
==
PD_OverloadedNilSymbol
#
(
overloaded_list
,
decons_expr
,
expr_heap
,
cs
)
=
make_overloaded_list
expr_heap
cs
=
(
Overloaded
List
Patterns
overloaded_list
decons_expr
alg_patterns
,
expr_heap
,
cs
)
=
(
OverloadedPatterns
overloaded_list
decons_expr
alg_patterns
,
expr_heap
,
cs
)
|
pd_cons_index
==
PD_UnboxedJustSymbol
||
pd_cons_index
==
PD_UnboxedNothingSymbol
#
(
unboxed_maybe
,
from_just_expr
,
expr_heap
,
cs
)
=
make_unboxed_maybe
expr_heap
cs
=
(
Overloaded
List
Patterns
unboxed_maybe
from_just_expr
alg_patterns
,
expr_heap
,
cs
)
=
(
OverloadedPatterns
unboxed_maybe
from_just_expr
alg_patterns
,
expr_heap
,
cs
)
|
pd_cons_index
==
PD_OverloadedJustSymbol
||
pd_cons_index
==
PD_OverloadedNothingSymbol
#
(
overloaded_maybe
,
from_just_expr
,
expr_heap
,
cs
)
=
make_overloaded_maybe
expr_heap
cs
=
(
Overloaded
List
Patterns
overloaded_maybe
from_just_expr
alg_patterns
,
expr_heap
,
cs
)
=
(
OverloadedPatterns
overloaded_maybe
from_just_expr
alg_patterns
,
expr_heap
,
cs
)
=
(
AlgebraicPatterns
global_type_index
alg_patterns
,
expr_heap
,
cs
)
=
(
AlgebraicPatterns
global_type_index
alg_patterns
,
expr_heap
,
cs
)
...
...
@@ -1015,49 +1015,49 @@ transform_pattern (AP_Algebraic cons_symbol global_type_index args opt_var) patt
|
pd_cons_index
==
PD_UnboxedConsSymbol
||
pd_cons_index
==
PD_UnboxedNilSymbol
#
(
unboxed_list
,
decons_expr
,
expr_heap
,
cs
)
=
make_unboxed_list
expr_heap
cs
=
case
pattern_scheme
of
Overloaded
List
Patterns
(
UnboxedList
_
_
_)
_
_
#
alg_patterns
=
alg_patterns_of_Overloaded
List
Patterns_or_NoPattern
patterns
->
(
Overloaded
List
Patterns
unboxed_list
decons_expr
[
pattern
:
alg_patterns
],
pattern_scheme
,
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
Overloaded
List
Patterns
(
OverloadedList
_
_
_)
_
_
#
alg_patterns
=
alg_patterns_of_Overloaded
List
Patterns_or_NoPattern
patterns
OverloadedPatterns
(
UnboxedList
_
_
_)
_
_
#
alg_patterns
=
alg_patterns_of_OverloadedPatterns_or_NoPattern
patterns
->
(
OverloadedPatterns
unboxed_list
decons_expr
[
pattern
:
alg_patterns
],
pattern_scheme
,
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
OverloadedPatterns
(
OverloadedList
_
_
_)
_
_
#
alg_patterns
=
alg_patterns_of_OverloadedPatterns_or_NoPattern
patterns
#
(
alg_patterns
,
cs
)
=
replace_overloaded_symbols_in_patterns
alg_patterns
PD_UnboxedConsSymbol
PD_UnboxedNilSymbol
cs
->
(
Overloaded
List
Patterns
unboxed_list
decons_expr
[
pattern
:
alg_patterns
],
Overloaded
List
Patterns
unboxed_list
decons_expr
[],
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
->
(
OverloadedPatterns
unboxed_list
decons_expr
[
pattern
:
alg_patterns
],
OverloadedPatterns
unboxed_list
decons_expr
[],
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
NoPattern
->
(
Overloaded
List
Patterns
unboxed_list
decons_expr
[
pattern
],
Overloaded
List
Patterns
unboxed_list
decons_expr
[],
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
->
(
OverloadedPatterns
unboxed_list
decons_expr
[
pattern
],
OverloadedPatterns
unboxed_list
decons_expr
[],
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
_
->
(
patterns
,
pattern_scheme
,
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
illegal_combination_of_patterns_error
cons_symbol
cs
)
|
pd_cons_index
==
PD_UnboxedTailStrictConsSymbol
||
pd_cons_index
==
PD_UnboxedTailStrictNilSymbol
#
(
unboxed_tail_strict_list
,
decons_expr
,
expr_heap
,
cs
)
=
make_unboxed_tail_strict_list
expr_heap
cs
=
case
pattern_scheme
of
Overloaded
List
Patterns
(
UnboxedTailStrictList
_
_
_)
_
_
#
alg_patterns
=
alg_patterns_of_Overloaded
List
Patterns_or_NoPattern
patterns
->
(
Overloaded
List
Patterns
unboxed_tail_strict_list
decons_expr
[
pattern
:
alg_patterns
],
pattern_scheme
,
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
Overloaded
List
Patterns
(
OverloadedList
_
_
_)
_
_
#
alg_patterns
=
alg_patterns_of_Overloaded
List
Patterns_or_NoPattern
patterns
OverloadedPatterns
(
UnboxedTailStrictList
_
_
_)
_
_
#
alg_patterns
=
alg_patterns_of_OverloadedPatterns_or_NoPattern
patterns
->
(
OverloadedPatterns
unboxed_tail_strict_list
decons_expr
[
pattern
:
alg_patterns
],
pattern_scheme
,
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
OverloadedPatterns
(
OverloadedList
_
_
_)
_
_
#
alg_patterns
=
alg_patterns_of_OverloadedPatterns_or_NoPattern
patterns
#
(
alg_patterns
,
cs
)
=
replace_overloaded_symbols_in_patterns
alg_patterns
PD_UnboxedTailStrictConsSymbol
PD_UnboxedTailStrictNilSymbol
cs
->
(
Overloaded
List
Patterns
unboxed_tail_strict_list
decons_expr
[
pattern
:
alg_patterns
],
Overloaded
List
Patterns
unboxed_tail_strict_list
decons_expr
[],
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
->
(
OverloadedPatterns
unboxed_tail_strict_list
decons_expr
[
pattern
:
alg_patterns
],
OverloadedPatterns
unboxed_tail_strict_list
decons_expr
[],
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
NoPattern
->
(
Overloaded
List
Patterns
unboxed_tail_strict_list
decons_expr
[
pattern
],
Overloaded
List
Patterns
unboxed_tail_strict_list
decons_expr
[],
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
->
(
OverloadedPatterns
unboxed_tail_strict_list
decons_expr
[
pattern
],
OverloadedPatterns
unboxed_tail_strict_list
decons_expr
[],
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
_
->
(
patterns
,
pattern_scheme
,
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
illegal_combination_of_patterns_error
cons_symbol
cs
)
|
pd_cons_index
==
PD_OverloadedConsSymbol
||
pd_cons_index
==
PD_OverloadedNilSymbol
=
case
pattern_scheme
of
Overloaded
List
Patterns
(
OverloadedList
_
_
_)
_
_
OverloadedPatterns
(
OverloadedList
_
_
_)
_
_
#
(
overloaded_list
,
decons_expr
,
expr_heap
,
cs
)
=
make_overloaded_list
expr_heap
cs
#
alg_patterns
=
alg_patterns_of_Overloaded
List
Patterns_or_NoPattern
patterns
->
(
Overloaded
List
Patterns
overloaded_list
decons_expr
[
pattern
:
alg_patterns
],
pattern_scheme
,
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
Overloaded
List
Patterns
(
UnboxedList
_
_
_)
_
_
#
alg_patterns
=
alg_patterns_of_OverloadedPatterns_or_NoPattern
patterns
->
(
OverloadedPatterns
overloaded_list
decons_expr
[
pattern
:
alg_patterns
],
pattern_scheme
,
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
OverloadedPatterns
(
UnboxedList
_
_
_)
_
_
#
(
unboxed_list
,
decons_expr
,
expr_heap
,
cs
)
=
make_unboxed_list
expr_heap
cs
#
alg_patterns
=
alg_patterns_of_Overloaded
List
Patterns_or_NoPattern
patterns
#
alg_patterns
=
alg_patterns_of_OverloadedPatterns_or_NoPattern
patterns
#
(
pattern
,
cs
)
=
replace_overloaded_symbol_in_pattern
pattern
PD_UnboxedConsSymbol
PD_UnboxedNilSymbol
cs
->
(
Overloaded
List
Patterns
unboxed_list
decons_expr
[
pattern
:
alg_patterns
],
pattern_scheme
,
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
Overloaded
List
Patterns
(
UnboxedTailStrictList
_
_
_)
_
_
->
(
OverloadedPatterns
unboxed_list
decons_expr
[
pattern
:
alg_patterns
],
pattern_scheme
,
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
OverloadedPatterns
(
UnboxedTailStrictList
_
_
_)
_
_
#
(
unboxed_tail_strict_list
,
decons_expr
,
expr_heap
,
cs
)
=
make_unboxed_tail_strict_list
expr_heap
cs
#
alg_patterns
=
alg_patterns_of_Overloaded
List
Patterns_or_NoPattern
patterns
#
alg_patterns
=
alg_patterns_of_OverloadedPatterns_or_NoPattern
patterns
#
(
pattern
,
cs
)
=
replace_overloaded_symbol_in_pattern
pattern
PD_UnboxedTailStrictConsSymbol
PD_UnboxedTailStrictNilSymbol
cs
->
(
Overloaded
List
Patterns
unboxed_tail_strict_list
decons_expr
[
pattern
:
alg_patterns
],
pattern_scheme
,
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
->
(
OverloadedPatterns
unboxed_tail_strict_list
decons_expr
[
pattern
:
alg_patterns
],
pattern_scheme
,
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
AlgebraicPatterns
alg_type
=:{
gi_module
,
gi_index
}
_
|
gi_module
==
cPredefinedModuleIndex
|
gi_index
==
PD_ListTypeIndex
...
...
@@ -1080,34 +1080,34 @@ transform_pattern (AP_Algebraic cons_symbol global_type_index args opt_var) patt
->
(
patterns
,
pattern_scheme
,
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
illegal_combination_of_patterns_error
cons_symbol
cs
)
NoPattern
#
(
overloaded_list
,
decons_expr
,
expr_heap
,
cs
)
=
make_overloaded_list
expr_heap
cs
->
(
Overloaded
List
Patterns
overloaded_list
decons_expr
[
pattern
],
Overloaded
List
Patterns
overloaded_list
decons_expr
[],
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
->
(
OverloadedPatterns
overloaded_list
decons_expr
[
pattern
],
OverloadedPatterns
overloaded_list
decons_expr
[],
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
_
->
(
patterns
,
pattern_scheme
,
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
illegal_combination_of_patterns_error
cons_symbol
cs
)
|
pd_cons_index
==
PD_UnboxedJustSymbol
||
pd_cons_index
==
PD_UnboxedNothingSymbol
#
(
unboxed_maybe
,
from_just_expr
,
expr_heap
,
cs
)
=
make_unboxed_maybe
expr_heap
cs
=
case
pattern_scheme
of
Overloaded
List
Patterns
(
UnboxedMaybe
_
_
_)
_
_
#
alg_patterns
=
alg_patterns_of_Overloaded
List
Patterns_or_NoPattern
patterns
->
(
Overloaded
List
Patterns
unboxed_maybe
from_just_expr
[
pattern
:
alg_patterns
],
pattern_scheme
,
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
Overloaded
List
Patterns
(
OverloadedMaybe
_
_
_)
_
_
#
alg_patterns
=
alg_patterns_of_Overloaded
List
Patterns_or_NoPattern
patterns
OverloadedPatterns
(
UnboxedMaybe
_
_
_)
_
_
#
alg_patterns
=
alg_patterns_of_OverloadedPatterns_or_NoPattern
patterns
->
(
OverloadedPatterns
unboxed_maybe
from_just_expr
[
pattern
:
alg_patterns
],
pattern_scheme
,
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
OverloadedPatterns
(
OverloadedMaybe
_
_
_)
_
_
#
alg_patterns
=
alg_patterns_of_OverloadedPatterns_or_NoPattern
patterns
#
(
alg_patterns
,
cs
)
=
replace_overloaded_maybe_symbols_in_patterns
alg_patterns
PD_UnboxedJustSymbol
PD_UnboxedNothingSymbol
cs
->
(
Overloaded
List
Patterns
unboxed_maybe
from_just_expr
[
pattern
:
alg_patterns
],
Overloaded
List
Patterns
unboxed_maybe
from_just_expr
[],
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
->
(
OverloadedPatterns
unboxed_maybe
from_just_expr
[
pattern
:
alg_patterns
],
OverloadedPatterns
unboxed_maybe
from_just_expr
[],
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
NoPattern
->
(
Overloaded
List
Patterns
unboxed_maybe
from_just_expr
[
pattern
],
Overloaded
List
Patterns
unboxed_maybe
from_just_expr
[],
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
->
(
OverloadedPatterns
unboxed_maybe
from_just_expr
[
pattern
],
OverloadedPatterns
unboxed_maybe
from_just_expr
[],
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
_
->
(
patterns
,
pattern_scheme
,
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
illegal_combination_of_patterns_error
cons_symbol
cs
)
|
pd_cons_index
==
PD_OverloadedJustSymbol
||
pd_cons_index
==
PD_OverloadedNothingSymbol
=
case
pattern_scheme
of
Overloaded
List
Patterns
(
OverloadedMaybe
_
_
_)
_
_
OverloadedPatterns
(
OverloadedMaybe
_
_
_)
_
_
#
(
overloaded_maybe
,
from_just_expr
,
expr_heap
,
cs
)
=
make_overloaded_maybe
expr_heap
cs
#
alg_patterns
=
alg_patterns_of_Overloaded
List
Patterns_or_NoPattern
patterns
->
(
Overloaded
List
Patterns
overloaded_maybe
from_just_expr
[
pattern
:
alg_patterns
],
pattern_scheme
,
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
Overloaded
List
Patterns
(
UnboxedMaybe
_
_
_)
_
_
#
alg_patterns
=
alg_patterns_of_OverloadedPatterns_or_NoPattern
patterns
->
(
OverloadedPatterns
overloaded_maybe
from_just_expr
[
pattern
:
alg_patterns
],
pattern_scheme
,
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
OverloadedPatterns
(
UnboxedMaybe
_
_
_)
_
_
#
(
unboxed_list
,
from_just_expr
,
expr_heap
,
cs
)
=
make_unboxed_maybe
expr_heap
cs
#
alg_patterns
=
alg_patterns_of_Overloaded
List
Patterns_or_NoPattern
patterns
#
alg_patterns
=
alg_patterns_of_OverloadedPatterns_or_NoPattern
patterns
#
(
pattern
,
cs
)
=
replace_overloaded_maybe_symbol_in_pattern
pattern
PD_UnboxedJustSymbol
PD_UnboxedNothingSymbol
cs
->
(
Overloaded
List
Patterns
unboxed_list
from_just_expr
[
pattern
:
alg_patterns
],
pattern_scheme
,
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
->
(
OverloadedPatterns
unboxed_list
from_just_expr
[
pattern
:
alg_patterns
],
pattern_scheme
,
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
AlgebraicPatterns
alg_type
=:{
gi_module
,
gi_index
}
_
|
gi_module
==
cPredefinedModuleIndex
|
gi_index
==
PD_MaybeTypeIndex
...
...
@@ -1122,7 +1122,7 @@ transform_pattern (AP_Algebraic cons_symbol global_type_index args opt_var) patt
->
(
patterns
,
pattern_scheme
,
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
illegal_combination_of_patterns_error
cons_symbol
cs
)
NoPattern
#
(
overloaded_maybe
,
from_just_expr
,
expr_heap
,
cs
)
=
make_overloaded_maybe
expr_heap
cs
->
(
Overloaded
List
Patterns
overloaded_maybe
from_just_expr
[
pattern
],
Overloaded
List
Patterns
overloaded_maybe
from_just_expr
[],
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
->
(
OverloadedPatterns
overloaded_maybe
from_just_expr
[
pattern
],
OverloadedPatterns
overloaded_maybe
from_just_expr
[],
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
_
->
(
patterns
,
pattern_scheme
,
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
illegal_combination_of_patterns_error
cons_symbol
cs
)
=
case
pattern_scheme
of
...
...
@@ -1132,22 +1132,22 @@ transform_pattern (AP_Algebraic cons_symbol global_type_index args opt_var) patt
->
(
AlgebraicPatterns
global_type_index
[
pattern
:
alg_patterns
],
pattern_scheme
,
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
#
cs
&
cs_error
=
checkErrorWithOptionalPosition
cons_symbol
.
glob_object
.
ds_ident
pos
"incompatible types of patterns"
cs
.
cs_error
->
(
patterns
,
pattern_scheme
,
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
Overloaded
List
Patterns
(
OverloadedList
_
_
_)
_
_
OverloadedPatterns
(
OverloadedList
_
_
_)
_
_
|
global_type_index
.
gi_module
==
cPredefinedModuleIndex
|
global_type_index
.
gi_index
==
PD_ListTypeIndex
#
alg_patterns
=
alg_patterns_of_Overloaded
List
Patterns_or_NoPattern
patterns
#
alg_patterns
=
alg_patterns_of_OverloadedPatterns_or_NoPattern
patterns
#
(
alg_patterns
,
cs
)
=
replace_overloaded_symbols_in_patterns
alg_patterns
PD_ConsSymbol
PD_NilSymbol
cs
->
(
AlgebraicPatterns
global_type_index
[
pattern
:
alg_patterns
],
AlgebraicPatterns
global_type_index
[],
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
|
global_type_index
.
gi_index
==
PD_StrictListTypeIndex
#
alg_patterns
=
alg_patterns_of_Overloaded
List
Patterns_or_NoPattern
patterns
#
alg_patterns
=
alg_patterns_of_OverloadedPatterns_or_NoPattern
patterns
#
(
alg_patterns
,
cs
)
=
replace_overloaded_symbols_in_patterns
alg_patterns
PD_StrictConsSymbol
PD_StrictNilSymbol
cs
->
(
AlgebraicPatterns
global_type_index
[
pattern
:
alg_patterns
],
AlgebraicPatterns
global_type_index
[],
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
|
global_type_index
.
gi_index
==
PD_TailStrictListTypeIndex
#
alg_patterns
=
alg_patterns_of_Overloaded
List
Patterns_or_NoPattern
patterns
#
alg_patterns
=
alg_patterns_of_OverloadedPatterns_or_NoPattern
patterns
#
(
alg_patterns
,
cs
)
=
replace_overloaded_symbols_in_patterns
alg_patterns
PD_TailStrictConsSymbol
PD_TailStrictNilSymbol
cs
->
(
AlgebraicPatterns
global_type_index
[
pattern
:
alg_patterns
],
AlgebraicPatterns
global_type_index
[],
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
|
global_type_index
.
gi_index
==
PD_StrictTailStrictListTypeIndex
#
alg_patterns
=
alg_patterns_of_Overloaded
List
Patterns_or_NoPattern
patterns
#
alg_patterns
=
alg_patterns_of_OverloadedPatterns_or_NoPattern
patterns
#
(
alg_patterns
,
cs
)
=
replace_overloaded_symbols_in_patterns
alg_patterns
PD_StrictTailStrictConsSymbol
PD_StrictTailStrictNilSymbol
cs
->
(
AlgebraicPatterns
global_type_index
[
pattern
:
alg_patterns
],
AlgebraicPatterns
global_type_index
[],
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
cs
)
->
(
patterns
,
pattern_scheme
,
pattern_variables
,
defaul
,
var_store
,
expr_heap
,
opt_dynamics
,
illegal_combination_of_patterns_error
cons_symbol
cs
)
...
...
@@ -1170,8 +1170,8 @@ transform_pattern (AP_Algebraic cons_symbol global_type_index args opt_var) patt
alg_patterns_of_AlgebraicPatterns_or_NoPattern
(
AlgebraicPatterns
_
alg_patterns
)
=
alg_patterns
alg_patterns_of_AlgebraicPatterns_or_NoPattern
NoPattern
=
[]
alg_patterns_of_Overloaded
List
Patterns_or_NoPattern
(
Overloaded
List
Patterns
_
_
alg_patterns
)
=
alg_patterns
alg_patterns_of_Overloaded
List
Patterns_or_NoPattern
NoPattern
=
[]
alg_patterns_of_OverloadedPatterns_or_NoPattern
(
OverloadedPatterns
_
_
alg_patterns
)
=
alg_patterns
alg_patterns_of_OverloadedPatterns_or_NoPattern
NoPattern
=
[]
illegal_combination_of_patterns_error
cons_symbol
cs
=
{
cs
&
cs_error
=
checkError
cons_symbol
.
glob_object
.
ds_ident
"illegal combination of patterns"
cs
.
cs_error
}
...
...
frontend/classify.icl
View file @
721517e7
...
...
@@ -688,14 +688,14 @@ instance consumerRequirements Case where
=
(
combineClasses
ccgs
ccd
,
not
safe
,
ai
)
where
handle_overloaded_list_patterns
(
Overloaded
List
Patterns
(
OverloadedList
_
_
_)
decons_expr
=:(
App
{
app_symb
={
symb_kind
=
SK_Function
_},
app_args
=[
app_arg
]})
patterns
)
(
OverloadedPatterns
(
OverloadedList
_
_
_)
decons_expr
=:(
App
{
app_symb
={
symb_kind
=
SK_Function
_},
app_args
=[
app_arg
]})
patterns
)
ai
// decons_expr will be optimized to a decons_u Selector in transform
#
(
cc
,
_,
ai
)
=
consumerRequirements
app_arg
ro
ai
#
ai
=
aiUnifyClassifications
CActive
cc
ai
=
ai
handle_overloaded_list_patterns
(
Overloaded
List
Patterns
_
decons_expr
_)
ai
(
OverloadedPatterns
_
decons_expr
_)
ai
#
(_,_,
ai
)
=
consumerRequirements
decons_expr
ro
ai
=
ai
handle_overloaded_list_patterns
...
...
@@ -721,7 +721,7 @@ instance consumerRequirements Case where
=
(
appearance_loop
all_sorted_constructors
constructors_and_unsafe_bits
,
not
(
multimatch_loop
has_default
constructors_and_unsafe_bits
))
inspect_patterns
common_defs
has_default
(
BasicPatterns
BT_Bool
_)
constructors_and_unsafe_bits
=
(
appearance_loop
[
0
,
1
]
constructors_and_unsafe_bits
,
not
(
multimatch_loop
has_default
constructors_and_unsafe_bits
))
inspect_patterns
common_defs
has_default
(
Overloaded
List
Patterns
_
_
_)
constructors_and_unsafe_bits
inspect_patterns
common_defs
has_default
(
OverloadedPatterns
_
_
_)
constructors_and_unsafe_bits
=
(
check_n_safe_pattern_constructors
constructors_and_unsafe_bits
2
,
not
(
multimatch_loop
has_default
constructors_and_unsafe_bits
))
inspect_patterns
_
_
_
_
=
(
False
,
False
)
...
...
@@ -788,7 +788,7 @@ where
->
True
// BasicPatterns (BT_String _) basic_patterns)
// -> [ string \\ {bp_value=BVS string}<-basic_patterns ] ---> ("BasicPatterns String")
Overloaded
List
Patterns
overloaded_list
_
algebraic_patterns
OverloadedPatterns
overloaded_list
_
algebraic_patterns
->
True
_
->
False
...
...
@@ -803,7 +803,7 @@ where
->
[
int
\\
{
bp_value
=
BVInt
int
}<-
basic_patterns
]
// BasicPatterns (BT_String _) basic_patterns
// -> [string \\ {bp_value=BVS string}<-basic_patterns]
Overloaded
List
Patterns
overloaded_list
_
algebraic_patterns
OverloadedPatterns
overloaded_list
_
algebraic_patterns
->
[
glob_object
.
ds_index
\\
{
ap_symbol
={
glob_object
}}<-
algebraic_patterns
]
sort
constr_indices
pattern_exprs
...
...
@@ -825,7 +825,7 @@ get_pattern_exprs_and_bind_pattern_vars (AlgebraicPatterns type patterns) ai
get_pattern_exprs_and_bind_pattern_vars
(
BasicPatterns
type
patterns
)
ai
#
pattern_exprs
=
[
bp_expr
\\
{
bp_expr
}<-
patterns
]
=
(
pattern_exprs
,
ai
)
get_pattern_exprs_and_bind_pattern_vars
(
Overloaded
List
Patterns
type
_
patterns
)
ai
get_pattern_exprs_and_bind_pattern_vars
(
OverloadedPatterns
type
_
patterns
)
ai
#
pattern_exprs
=
[
ap_expr
\\
{
ap_expr
}<-
patterns
]
pattern_vars
=
flatten
[
ap_vars
\\
{
ap_vars
}<-
patterns
]
(
ai_next_var
,
ai_next_var_of_fun
,
ai_var_heap
)
...
...
@@ -1407,7 +1407,7 @@ where
get_linearity_info
cc_linear_bits
(
AlgebraicPatterns
_
algebraic_patterns
)
var_heap
=
get_linearity_info_of_patterns
cc_linear_bits
algebraic_patterns
var_heap
get_linearity_info
cc_linear_bits
(
Overloaded
List
Patterns
_
_
algebraic_patterns
)
var_heap
get_linearity_info
cc_linear_bits
(
OverloadedPatterns
_
_
algebraic_patterns
)
var_heap
=
get_linearity_info_of_patterns
cc_linear_bits
algebraic_patterns
var_heap
get_linearity_info
cc_linear_bits
_
var_heap
=
([!!],
var_heap
)
...
...
@@ -1536,7 +1536,7 @@ count_case_locals (AlgebraicPatterns _ patterns) n
count_case_locals
(
BasicPatterns
_
patterns
)
n
#
pattern_exprs
=
[
bp_expr
\\
{
bp_expr
}
<-
patterns
]
=
foldSt
count_locals
pattern_exprs
n
count_case_locals
(
Overloaded
List
Patterns
_
_
patterns
)
n
count_case_locals
(
OverloadedPatterns
_
_
patterns
)
n
#
pattern_exprs
=
[
ap_expr
\\
{
ap_expr
}
<-
patterns
]
pattern_vars
=
flatten
[
ap_vars
\\
{
ap_vars
}
<-
patterns
]
=
foldSt
count_locals
pattern_exprs
(
foldSt
count_case_guard_locals
pattern_vars
n
)
...
...
@@ -1836,7 +1836,7 @@ instance producerRequirements CasePatterns where
=
producerRequirements
patterns
prs
producerRequirements
(
BasicPatterns
type
patterns
)
prs
=
producerRequirements
patterns
prs
producerRequirements
(
Overloaded
List
Patterns
_
_
patterns
)
prs
producerRequirements
(
OverloadedPatterns
_
_
patterns
)
prs
=
producerRequirements
patterns
prs
producerRequirements
(
DynamicPatterns
patterns
)
prs
//...disallow for now...
...
...
frontend/comparedefimp.icl
View file @
721517e7
...
...
@@ -1406,7 +1406,7 @@ instance e_corresponds CasePatterns where
o`
e_corresponds
dcl_patterns
icl_patterns
e_corresponds
(
NewTypePatterns
_
dcl_patterns
)
(
NewTypePatterns
_
icl_patterns
)
=
e_corresponds
dcl_patterns
icl_patterns
e_corresponds
(
Overloaded
List
Patterns
dcl_alg_type
_
dcl_patterns
)
(
Overloaded
List
Patterns
icl_alg_type
_
icl_patterns
)
e_corresponds
(
OverloadedPatterns
dcl_alg_type
_
dcl_patterns
)
(
OverloadedPatterns
icl_alg_type
_
icl_patterns
)
=
e_corresponds
dcl_patterns
icl_patterns
e_corresponds
(
DynamicPatterns
dcl_patterns
)
(
DynamicPatterns
icl_patterns
)
=
e_corresponds
dcl_patterns
icl_patterns
...
...
frontend/convertDynamics.icl
View file @
721517e7
...
...
@@ -348,9 +348,9 @@ instance convertDynamics CasePatterns where
convertDynamics
cinp
(
AlgebraicPatterns
type
alts
)
ci
#
(
alts
,
ci
)
=
convertDynamics
cinp
alts
ci
=
(
AlgebraicPatterns
type
alts
,
ci
)
convertDynamics
cinp
(
Overloaded
List
Patterns
type
decons
alts
)
ci
convertDynamics
cinp
(
OverloadedPatterns
type
decons
alts
)
ci
#
(
alts
,
ci
)
=
convertDynamics
cinp
alts
ci
=
(
Overloaded
List
Patterns
type
decons
alts
,
ci
)
=
(
OverloadedPatterns
type
decons
alts
,
ci
)
convertDynamic
cinp
=:{
cinp_dynamic_representation
={
dr_type_ident
}}
{
dyn_expr
,
dyn_type_code
}
ci
...
...
frontend/convertcases.icl
View file @
721517e7
...
...
@@ -322,7 +322,7 @@ where
same_length
[_:
l1
]
[_:
l2
]
=
same_length
l1
l2
same_length
[]
[]
=
False
same_length
_
_
=
True
all_constructors_matched
(
Overloaded
List
Patterns
_
_
[_,_])
common_defs
all_constructors_matched
(
OverloadedPatterns
_
_
[_,_])
common_defs
=
True
all_constructors_matched
case_guards
common_defs
=
False
...
...
@@ -475,7 +475,7 @@ weightedRefCountOfCase rci=:{rci_depth,rci_imported,rci_has_default} {case_expr,
=
mapSt
(
weighted_ref_count_in_algebraic_pattern
rci
)
patterns
([],
No
,
collected_imports
,
var_heap
,
expr_heap
)
weighted_ref_count_in_case_patterns
rci
(
BasicPatterns
type
patterns
)
collected_imports
var_heap
expr_heap
=
mapSt
(\{
bp_expr
}
->
weightedRefCountAddPatternExpr
rci
bp_expr
)
patterns
([],
No
,
collected_imports
,
var_heap
,
expr_heap
)
weighted_ref_count_in_case_patterns
rci
(
Overloaded
List
Patterns
type
_
patterns
)
collected_imports
var_heap
expr_heap
weighted_ref_count_in_case_patterns
rci
(
OverloadedPatterns
type
_
patterns
)
collected_imports
var_heap
expr_heap
=
mapSt
(
weighted_ref_count_in_algebraic_pattern
rci
)
patterns
([],
No
,
collected_imports
,
var_heap
,
expr_heap
)
weighted_ref_count_in_case_patterns
rci
(
DynamicPatterns
patterns
)
collected_imports
var_heap
expr_heap
=
mapSt
(\{
dp_rhs
}
->
weightedRefCountAddPatternExpr
rci
dp_rhs
)
patterns
([],
No
,
collected_imports
,
var_heap
,
expr_heap
)
...
...
@@ -494,7 +494,7 @@ weightedRefCountOfCase rci=:{rci_depth,rci_imported,rci_has_default} {case_expr,
cons_type_ptr
(
collected_imports
,
var_heap
)
=
(
collected_imports
,
var_heap
)
weighted_ref_count_of_decons_expr
rci
(
Overloaded
List
Patterns
_
decons_exp
_)
rs
weighted_ref_count_of_decons_expr
rci
(
OverloadedPatterns
_
decons_exp
_)
rs
=
weightedRefCount
rci
decons_exp
rs
;
weighted_ref_count_of_decons_expr
rci
case_guards
rs
=
rs
;
...
...
@@ -870,9 +870,9 @@ where
distribute_lets_in_basic_pattern
di
(
ref_counts
,
pattern
)
ds
#
(
bp_expr
,
ds
)
=
distribute_lets_in_pattern_expr
di
ref_counts
pattern
.
bp_expr
ds
=
({
pattern
&
bp_expr
=
bp_expr
},
ds
)
distribute_lets_in_patterns
di
ref_counts
(
Overloaded
List
Patterns
conses
decons_expr
patterns
)
heaps
distribute_lets_in_patterns
di
ref_counts
(
OverloadedPatterns
conses
decons_expr
patterns
)
heaps
#
(
patterns
,
heaps
)
=
mapSt
(
distribute_lets_in_alg_pattern
di
)
(
exactZip
ref_counts
patterns
)
heaps
=
(
Overloaded
List
Patterns
conses
decons_expr
patterns
,
heaps
)
=
(
OverloadedPatterns
conses
decons_expr
patterns
,
heaps
)
distribute_lets_in_alg_pattern
di
(
ref_counts
,
pattern
)
ds
=:{
ds_var_heap
}
#
(
ap_vars
,
ds_var_heap
)
=
mapSt
refresh_variable
pattern
.
ap_vars
ds_var_heap
...
...
@@ -1220,7 +1220,7 @@ instance findSplitCases Case where
=
split_alts
si
use_outer_alt
alts
ss
split_guards
si
use_outer_alt
(
BasicPatterns
_
alts
)
ss
=
split_alts
si
use_outer_alt
alts
ss
split_guards
si
use_outer_alt
(
Overloaded
List
Patterns
_
_
alts
)
ss
split_guards
si
use_outer_alt
(
OverloadedPatterns
_
_
alts
)
ss
=
split_alts
si
use_outer_alt
alts
ss
split_alts
::
SplitInfo
(
Optional
SplitInfo
)
[
a
]
*
SplitState
->
*
SplitState
|
findSplitCases
a
...
...
@@ -1679,10 +1679,10 @@ instance splitIt CasePatterns where
#
(
alts1
,
alts2
)
=
splitIt
alt_nr
alts
=
(
BasicPatterns
type
alts1
,
BasicPatterns
type
alts2
)
splitIt
alt_nr
(
Overloaded
List
Patterns
type
decons
alts
)
splitIt
alt_nr
(
OverloadedPatterns
type
decons
alts
)
#
(
alts1
,
alts2
)
=
splitIt
alt_nr
alts
=
(
Overloaded
List
Patterns
type
decons
alts1
,
Overloaded
List
Patterns
type
decons
alts2
)
=
(
OverloadedPatterns
type
decons
alts1
,
OverloadedPatterns
type
decons
alts2
)
instance
splitIt
[
a
]
where
splitIt
alt_nr
l
...
...
@@ -1720,10 +1720,10 @@ convertRootCasesCasePatterns ci (AlgebraicPatterns gi patterns) arg_types cs
#
(
patterns
,
cs
)
=
convertRootCasesAlgebraicPatterns
ci
(
exactZip
patterns
arg_types
)
cs
=
(
AlgebraicPatterns
gi
patterns
,
cs
)
convertRootCasesCasePatterns
ci
(
Overloaded
List
Patterns
type
decons_expr
patterns
)
arg_types
cs
convertRootCasesCasePatterns
ci
(
OverloadedPatterns
type
decons_expr
patterns
)
arg_types
cs
#
(
patterns
,
cs
)
=
convertRootCasesAlgebraicPatterns
ci
(
exactZip
patterns
arg_types
)
cs
=
(
Overloaded
List
Patterns
type
decons_expr
patterns
,
cs
)
=
(
OverloadedPatterns
type
decons_expr
patterns
,
cs
)
convertRootCasesAlgebraicPatterns
::
ConvertInfo
[(
AlgebraicPattern
,
[
AType
])]
*
ConvertState
->
([
AlgebraicPattern
],
*
ConvertState
)
convertRootCasesAlgebraicPatterns
ci
l
cs
...
...
@@ -2014,7 +2014,7 @@ where
=
(
True
,
defoult
)
case_is_degenerate
{
case_guards
=
BasicPatterns
_
[],
case_default
=
Yes
defoult
}
=
(
True
,
defoult
)
case_is_degenerate
{
case_guards
=
Overloaded
List
Patterns
_
_
[],
case_default
=
Yes
defoult
}
case_is_degenerate
{
case_guards
=
OverloadedPatterns
_
_
[],
case_default
=
Yes
defoult
}
=
(
True
,
defoult
)
case_is_degenerate
_
=
(
False
,
undef
)
...
...
@@ -2104,8 +2104,8 @@ splitGuards (AlgebraicPatterns index patterns)
=
[
AlgebraicPatterns
index
[
pattern
]
\\
pattern
<-
patterns
]
splitGuards
(
BasicPatterns
basicType
patterns
)
=
[
BasicPatterns
basicType
[
pattern
]
\\
pattern
<-
patterns
]
splitGuards
(
Overloaded
List
Patterns
type
decons_expr
patterns
)
=
[
Overloaded
List
Patterns
type
decons_expr
[
pattern
]
\\
pattern
<-
patterns
]
splitGuards
(
OverloadedPatterns
type
decons_expr
patterns
)
=
[
OverloadedPatterns
type
decons_expr
[
pattern
]
\\
pattern
<-
patterns
]
::
CopyState
=
{
cp_free_vars
::
![(
VarInfoPtr
,
AType
)]
...
...
@@ -2242,10 +2242,10 @@ where
copy
(
BasicPatterns
type
patterns
)
cp_info
#
(
patterns
,
cp_info
)
=
copy
patterns
cp_info
=
(
BasicPatterns
type
patterns
,
cp_info
)
copy
(
Overloaded
List
Patterns
type
decons_expr
patterns
)
cp_info
copy
(
OverloadedPatterns
type
decons_expr
patterns
)
cp_info
#
(
patterns
,
cp_info
)
=
copy
patterns
cp_info
#
(
decons_expr
,
cp_info
)
=
copy
decons_expr
cp_info
=
(
Overloaded
List
Patterns
type
decons_expr
patterns
,
cp_info
)
=
(
OverloadedPatterns
type
decons_expr
patterns
,
cp_info
)
instance
copy
AlgebraicPattern
where
...
...
frontend/explicitimports.icl
View file @
721517e7
...
...
@@ -708,7 +708,7 @@ instance check_completeness CasePatterns where
=
check_completeness
algebraicPatterns
cci
ccs
check_completeness
(
BasicPatterns
_
basicPatterns
)
cci
ccs
=
check_completeness
basicPatterns
cci
ccs
check_completeness
(
Overloaded
List
Patterns
_
_
algebraicPatterns
)
cci
ccs
check_completeness
(
OverloadedPatterns
_
_
algebraicPatterns
)
cci
ccs
=
check_completeness
algebraicPatterns
cci
ccs
check_completeness
(
DynamicPatterns
dynamicPatterns
)
cci
ccs
=
check_completeness
dynamicPatterns
cci
ccs
...
...
frontend/generics1.icl
View file @
721517e7
...
...
@@ -1355,19 +1355,19 @@ where
|
type_def_index
==
PD_UnboxedListTypeIndex
#
(
unboxed_list
,
decons_expr
,
expression_heap
)
=
make_unboxed_list
heaps
.
hp_expression_heap
predefs
.
psd_predefs_a
heaps
&
hp_expression_heap
=
expression_heap
case_patterns
=
Overloaded
List
Patterns
unboxed_list
decons_expr
case_alts
case_patterns
=
OverloadedPatterns
unboxed_list
decons_expr
case_alts
(
case_expr
,
heaps
)
=
buildCaseExpr
arg_expr
case_patterns
heaps
->
(
case_expr
,
heaps
,
error
)
|
type_def_index
==
PD_UnboxedTailStrictListTypeIndex
#
(
unboxed_list
,
decons_expr
,
expression_heap
)
=
make_unboxed_tail_strict_list
heaps
.
hp_expression_heap
predefs
.
psd_predefs_a
heaps
&
hp_expression_heap
=
expression_heap
case_patterns
=
Overloaded
List
Patterns
unboxed_list
decons_expr
case_alts
case_patterns
=
OverloadedPatterns
unboxed_list
decons_expr
case_alts
(
case_expr
,
heaps
)
=
buildCaseExpr
arg_expr
case_patterns
heaps
->
(
case_expr
,
heaps
,
error
)
|
type_def_index
==
PD_UnboxedMaybeTypeIndex
#
(
unboxed_maybe
,
from_just_expr
,
expression_heap
)
=
make_unboxed_maybe
heaps
.
hp_expression_heap
predefs
.
psd_predefs_a
heaps
&
hp_expression_heap
=
expression_heap
case_patterns
=
Overloaded
List
Patterns
unboxed_maybe
from_just_expr
case_alts
case_patterns
=
OverloadedPatterns
unboxed_maybe
from_just_expr
case_alts
(
case_expr
,
heaps
)
=
buildCaseExpr
arg_expr
case_patterns
heaps
->
(
case_expr
,
heaps
,
error
)
_
...
...
@@ -4885,19 +4885,19 @@ build_bimap_unboxed_list_case :: !GlobalIndex !Expression ![AlgebraicPattern] !B
build_bimap_unboxed_list_case
global_type_def_index
arg
alg_patterns
case_explicit
predefs
heaps
#
(
unboxed_list
,
decons_expr
,
expression_heap
)
=
make_unboxed_list
heaps
.
hp_expression_heap
predefs
.
psd_predefs_a
heaps
&
hp_expression_heap
=
expression_heap
=
build_bimap_unboxed_case
(
Overloaded
List
Patterns
unboxed_list
decons_expr
alg_patterns
)
arg
case_explicit
heaps
=
build_bimap_unboxed_case
(
OverloadedPatterns
unboxed_list
decons_expr
alg_patterns
)
arg
case_explicit
heaps
build_bimap_unboxed_tail_strict_list_case
::
!
GlobalIndex
!
Expression
![
AlgebraicPattern
]
!
Bool
PredefinedSymbolsData
!*
Heaps
->
(!
Expression
,!*
Heaps
)
build_bimap_unboxed_tail_strict_list_case
global_type_def_index
arg
alg_patterns
case_explicit
predefs
heaps
#
(
unboxed_list
,
decons_expr
,
expression_heap
)
=
make_unboxed_tail_strict_list
heaps
.
hp_expression_heap
predefs
.
psd_predefs_a
heaps
&
hp_expression_heap
=
expression_heap
=
build_bimap_unboxed_case
(
Overloaded
List
Patterns
unboxed_list
decons_expr
alg_patterns
)
arg
case_explicit
heaps
=
build_bimap_unboxed_case
(
OverloadedPatterns
unboxed_list
decons_expr
alg_patterns
)
arg
case_explicit
heaps
build_bimap_unboxed_maybe_case
::
!
GlobalIndex
!
Expression
![
AlgebraicPattern
]
!
Bool
PredefinedSymbolsData
!*
Heaps
->
(!
Expression
,!*
Heaps
)
build_bimap_unboxed_maybe_case
global_type_def_index
arg
alg_patterns
case_explicit
predefs
heaps
#
(
unboxed_maybe
,
from_just_expr
,
expression_heap
)
=
make_unboxed_maybe
heaps
.
hp_expression_heap
predefs
.
psd_predefs_a
heaps
&
hp_expression_heap
=
expression_heap
=
build_bimap_unboxed_case
(
Overloaded
List
Patterns
unboxed_maybe
from_just_expr
alg_patterns
)
arg
case_explicit
heaps
=
build_bimap_unboxed_case
(
OverloadedPatterns
unboxed_maybe
from_just_expr
alg_patterns
)
arg
case_explicit
heaps
build_bimap_newtype_case
::
!
GlobalIndex
!
Expression
![
AlgebraicPattern
]
!*
Heaps
->
(!
Expression
,!*
Heaps
)
build_bimap_newtype_case
global_type_def_index
arg
alg_patterns
heaps
...
...
@@ -6355,7 +6355,7 @@ where
fold_guards
f
(
BasicPatterns
gi
bps
)
st
=
foldSt
(
foldExpr
f
)
[
bp_expr
\\{
bp_expr
}<-
bps
]
st
fold_guards
f
(
DynamicPatterns
dps
)
st
=
foldSt
(
foldExpr
f
)
[
dp_rhs
\\{
dp_rhs
}<-
dps
]
st
fold_guards
f
(
NewTypePatterns
gi
aps
)
st
=
foldSt
(
foldExpr
f
)
[
ap_expr
\\{
ap_expr
}<-
aps
]
st
fold_guards
f
(
Overloaded
List
Patterns
_
_
aps
)
st
=
foldSt
(
foldExpr
f
)
[
ap_expr
\\{
ap_expr
}<-
aps
]
st
fold_guards
f
(
OverloadedPatterns
_
_
aps
)
st
=
foldSt
(
foldExpr
f
)
[
ap_expr
\\{
ap_expr
}<-
aps
]
st
fold_guards
f
NoPattern
st
=
st
foldExpr
f
expr
=:(
Selection
_
expr1
_)
st
#
st
=
f
expr
st
...
...
@@ -6459,7 +6459,7 @@ where
collect
(
BasicPatterns
_
bps
)
=
[]
collect
(
DynamicPatterns
dps
)
=
[
dp_var
\\
{
dp_var
}<-
dps
]
collect
(
NewTypePatterns
_
aps
)
=
flatten
[
ap_vars
\\{
ap_vars
}<-
aps
]
collect
(
Overloaded
List
Patterns
_
_
aps
)
=
flatten
[
ap_vars
\\{
ap_vars
}<-
aps
]
collect
(
OverloadedPatterns
_
_
aps
)
=
flatten
[
ap_vars
\\{
ap_vars
}<-
aps
]
collect
NoPattern
=
[]
collect_vars
expr
st
=
st
...
...
frontend/mergecases.icl
View file @
721517e7
...
...
@@ -72,13 +72,13 @@ where
->
(
No
,
var_heap
,
symbol_heap
)