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
17a7dca5
Commit
17a7dca5
authored
Jun 03, 2013
by
John van Groningen
Browse files
remove unused Bool of PE_Let contructor
parent
87abbfd0
Changes
5
Hide whitespace changes
Inline
Side-by-side
frontend/checkFunctionBodies.icl
View file @
17a7dca5
...
...
@@ -130,7 +130,7 @@ make_case_guards cons_symbol global_type_index alg_patterns expr_heap cs
=
(
AlgebraicPatterns
global_type_index
alg_patterns
,
expr_heap
,
cs
)
checkFunctionBodies
::
!
FunctionBody
!
Ident
!.
ExpressionInput
!*
ExpressionState
!*
ExpressionInfo
!*
CheckState
->
(!
FunctionBody
,
![
FreeVar
],
!*
ExpressionState
,
!*
ExpressionInfo
,
!*
CheckState
)
->
(!
FunctionBody
,
![
FreeVar
],
!*
ExpressionState
,!*
ExpressionInfo
,!*
CheckState
)
checkFunctionBodies
(
ParsedBody
[{
pb_args
,
pb_rhs
={
rhs_alts
,
rhs_locals
},
pb_position
}
:
bodies
])
function_ident_for_errors
e_input
=:{
ei_expr_level
,
ei_mod_index
}
e_state
=:{
es_var_heap
,
es_fun_defs
}
e_info
cs
...
...
@@ -143,7 +143,7 @@ checkFunctionBodies (ParsedBody [{pb_args,pb_rhs={rhs_alts,rhs_locals}, pb_posit
=
addArraySelections
array_patterns
rhs_expr
free_vars
e_input
e_state
e_info
cs
cs_symbol_table
=
removeLocalIdentsFromSymbolTable
ei_expr_level
var_env
cs
.
cs_symbol_table
cs
=
{
cs
&
cs_symbol_table
=
cs_symbol_table
}
(
cb_args
,
es_var_heap
)
=
mapSt
determine_function_arg
aux_patterns
es_var_heap
(
cb_args
,
es_var_heap
)
=
mapSt
determine_function_arg
aux_patterns
es_var_heap
(
rhss
,
free_vars
,
e_state
=:{
es_dynamics
,
es_expr_heap
,
es_var_heap
},
e_info
,
cs
)
=
check_function_bodies
free_vars
cb_args
bodies
e_input
{
e_state
&
es_dynamics
=
[],
es_var_heap
=
es_var_heap
}
e_info
cs
(
rhs
,
position
,
es_var_heap
,
es_expr_heap
,
dynamics_in_patterns
,
cs
)
...
...
@@ -178,7 +178,7 @@ where
determine_function_arg
_
var_store
#
({
bind_src
,
bind_dst
},
var_store
)
=
determinePatternVariable
No
var_store
=
({
fv_ident
=
bind_src
,
fv_info_ptr
=
bind_dst
,
fv_def_level
=
NotALevel
,
fv_count
=
0
},
var_store
)
check_function_bodies
free_vars
fun_args
[{
pb_args
,
pb_rhs
={
rhs_alts
,
rhs_locals
},
pb_position
}
:
bodies
]
e_input
=:{
ei_expr_level
,
ei_mod_index
}
e_state
=:{
es_var_heap
,
es_fun_defs
}
e_info
cs
#
cs
=
pushErrorAdmin
(
newPosition
function_ident_for_errors
pb_position
)
cs
...
...
@@ -345,7 +345,8 @@ removeLocalsFromSymbolTable module_index level loc_vars (CollectedLocalDefs {loc
::
LetBinds
:==
[([
LetBind
],[
LetBind
])]
checkRhs
::
[
FreeVar
]
OptGuardedAlts
LocalDefs
ExpressionInput
*
ExpressionState
*
ExpressionInfo
*
CheckState
->
*(!
Expression
,![
FreeVar
],!*
ExpressionState
,!*
ExpressionInfo
,!*
CheckState
);
checkRhs
::
[
FreeVar
]
OptGuardedAlts
LocalDefs
ExpressionInput
*
ExpressionState
*
ExpressionInfo
*
CheckState
->
*(!
Expression
,![
FreeVar
],!*
ExpressionState
,!*
ExpressionInfo
,!*
CheckState
);
checkRhs
free_vars
rhs_alts
rhs_locals
e_input
=:{
ei_expr_level
,
ei_mod_index
,
ei_local_functions_index_offset
}
e_state
e_info
cs
#
ei_expr_level
=
inc
ei_expr_level
(
loc_defs
,
(
var_env
,
array_patterns
),
e_state
,
e_info
,
cs
)
=
checkLhssOfLocalDefs
ei_expr_level
ei_mod_index
rhs_locals
ei_local_functions_index_offset
e_state
e_info
cs
...
...
@@ -441,7 +442,7 @@ where
remove_seq_let_vars
level
[
let_vars
:
let_vars_list
]
symbol_table
=
remove_seq_let_vars
(
dec
level
)
let_vars_list
(
removeLocalIdentsFromSymbolTable
level
let_vars
symbol_table
)
check_sequential_lets
::
[
FreeVar
]
[
NodeDefWithLocals
]
u
:[[
Ident
]]
!
ExpressionInput
*
ExpressionState
*
ExpressionInfo
*
CheckState
check_sequential_lets
::
[
FreeVar
]
[
NodeDefWithLocals
]
u
:[[
Ident
]]
!
ExpressionInput
*
ExpressionState
*
ExpressionInfo
*
CheckState
->
*(!
LetBinds
,!
u
:[[
Ident
]],!
Int
,![
FreeVar
],!*
ExpressionState
,!*
ExpressionInfo
,!*
CheckState
);
check_sequential_lets
free_vars
[
seq_let
:
seq_lets
]
let_vars_list
e_input
=:{
ei_expr_level
,
ei_mod_index
}
e_state
e_info
cs
#
ei_expr_level
=
inc
ei_expr_level
...
...
@@ -507,7 +508,7 @@ checkLocalFunctions mod_index level (CollectedLocalDefs {loc_functions={ir_from,
=
(
fun_defs
,
e_info
,
heaps
,
cs
)
checkExpression
::
![
FreeVar
]
!
ParsedExpr
!
ExpressionInput
!*
ExpressionState
!*
ExpressionInfo
!*
CheckState
->
*(!
Expression
,
![
FreeVar
],
!*
ExpressionState
,
!*
ExpressionInfo
,
!*
CheckState
);
->
*(!
Expression
,
![
FreeVar
],
!*
ExpressionState
,!*
ExpressionInfo
,!*
CheckState
);
checkExpression
free_vars
(
PE_List
exprs
)
e_input
e_state
e_info
cs
#
(
exprs
,
free_vars
,
e_state
,
e_info
,
cs
)
=
check_expressions
free_vars
exprs
e_input
e_state
e_info
cs
(
expr
,
e_state
,
cs_error
)
=
build_expression
exprs
e_state
cs
.
cs_error
...
...
@@ -619,7 +620,7 @@ where
#
(
result_expr
,
e_state
,
cs_error
)
=
buildApplication
symb
arity
2
[
left
,
result_expr
]
e_state
cs_error
=
build_final_expression
left_appls
result_expr
e_state
cs_error
checkExpression
free_vars
(
PE_Let
strict
let_locals
expr
)
e_input
=:{
ei_expr_level
,
ei_mod_index
,
ei_local_functions_index_offset
}
e_state
e_info
cs
checkExpression
free_vars
(
PE_Let
let_locals
expr
)
e_input
=:{
ei_expr_level
,
ei_mod_index
,
ei_local_functions_index_offset
}
e_state
e_info
cs
#
ei_expr_level
=
inc
ei_expr_level
(
loc_defs
,
(
var_env
,
array_patterns
),
e_state
,
e_info
,
cs
)
=
checkLhssOfLocalDefs
ei_expr_level
ei_mod_index
let_locals
ei_local_functions_index_offset
e_state
e_info
cs
...
...
@@ -2585,15 +2586,14 @@ where
cs
=
checkPatternVariable
pi_def_level
entry
id
new_info_ptr
{
cs
&
cs_symbol_table
=
cs_symbol_table
}
=
(
AP_Variable
id
new_info_ptr
opt_var
,
([
id
:
var_env
],
array_patterns
),
{
ps
&
ps_var_heap
=
ps_var_heap
},
e_info
,
cs
)
check_local_lhs_pattern
pattern
opt_var
p_input
accus
var_store
e_info
cs
=
checkPattern
pattern
opt_var
p_input
accus
var_store
e_info
cs
=
checkPattern
pattern
opt_var
p_input
accus
var_store
e_info
cs
addArraySelections
[]
rhs_expr
free_vars
e_input
e_state
e_info
cs
=
(
rhs_expr
,
free_vars
,
e_state
,
e_info
,
cs
)
addArraySelections
array_patterns
rhs_expr
free_vars
e_input
e_state
e_info
cs
#
(
let_strict_binds
,
let_lazy_binds
,
free_vars
,
e_state
,
e_info
,
cs
)
=
buildArraySelections
e_input
array_patterns
free_vars
e_state
e_info
cs
(
let_expr_ptr
,
es_expr_heap
)
=
newPtr
EI_Empty
e_state
.
es_expr_heap
(
let_expr_ptr
,
es_expr_heap
)
=
newPtr
EI_Empty
e_state
.
es_expr_heap
=
(
Let
{
let_strict_binds
=
let_strict_binds
,
let_lazy_binds
=
let_lazy_binds
,
let_expr
=
rhs_expr
,
let_info_ptr
=
let_expr_ptr
,
let_expr_position
=
NoPos
}
,
free_vars
,
{
e_state
&
es_expr_heap
=
es_expr_heap
}
,
e_info
,
cs
)
...
...
@@ -2641,23 +2641,17 @@ buildSelections e_input {ap_opt_var, ap_array_var, ap_selections}
->
(
unq_select_symb
,
UniqueSingleArraySelector
,
cs
)
_
#
(
select_symb
,
cs
)
=
getPredefinedGlobalSymbol
PD_ArraySelectFun
PD_StdArray
STE_Member
2
cs
->
(
select_symb
,
UniqueSelector
,
cs
)
e_state
=
{
e_state
&
es_var_heap
=
es_var_heap
,
es_expr_heap
=
es_expr_heap
}
e_state
=
{
e_state
&
es_var_heap
=
es_var_heap
,
es_expr_heap
=
es_expr_heap
}
(
index_exprs
,
(
free_vars
,
e_state
,
e_info
,
cs
))
=
mapSt
(
check_index_expr
e_input
)
parsed_index_exprs
(
free_vars
,
e_state
,
e_info
,
cs
)
selections
=
[
ArraySelection
glob_select_symb
new_expr_ptr
index_expr
\\
new_expr_ptr
<-
new_expr_ptrs
&
index_expr
<-
index_exprs
]
selections
=
[
ArraySelection
glob_select_symb
new_expr_ptr
index_expr
\\
new_expr_ptr
<-
new_expr_ptrs
&
index_expr
<-
index_exprs
]
=
(
new_array_var
,
[
{
lb_dst
=
var_for_uselect_result
,
lb_src
=
Selection
selector_kind
(
Var
bound_array_var
)
selections
,
lb_position
=
NoPos
}
,
{
lb_dst
=
new_array_var
,
lb_src
=
TupleSelect
tuple_cons
.
glob_object
1
(
Var
bound_var_for_uselect_result
),
lb_position
=
NoPos
}
,
{
lb_dst
=
array_element_var
,
lb_src
=
TupleSelect
tuple_cons
.
glob_object
0
(
Var
bound_var_for_uselect_result
),
lb_position
=
NoPos
}
:
binds
]
,
free_vars
,
e_state
,
e_info
,
cs
)
,
free_vars
,
e_state
,
e_info
,
cs
)
check_index_expr
e_input
parsed_index_expr
(
free_vars
,
e_state
,
e_info
,
cs
)
#
(
index_expr
,
free_vars
,
e_state
,
e_info
,
cs
)
=
checkExpression
free_vars
parsed_index_expr
e_input
e_state
e_info
cs
...
...
@@ -2802,7 +2796,7 @@ retrieveSelectorIndexes mod_index {ste_kind = STE_Selector selector_list, ste_in
where
adjust_mod_index
mod_index
selector
=:{
glob_module
}
|
glob_module
==
NoIndex
=
{
selector
&
glob_module
=
mod_index
}
=
{
selector
&
glob_module
=
mod_index
}
=
selector
retrieveSelectorIndexes
mod_index
off_kind
=
[]
...
...
frontend/parse.icl
View file @
17a7dca5
...
...
@@ -3571,7 +3571,7 @@ trySimpleNonLhsExpressionT (LetToken strict) pState // let! is not supported in
# (let_binds, pState) = wantLocals pState
pState = wantToken FunctionContext "let expression" InToken pState
(let_expr, pState) = wantExpression pState
= (True, PE_Let
strict
let_binds let_expr, pState)
= (True, PE_Let let_binds let_expr, pState)
trySimpleNonLhsExpressionT CaseToken pState
# (case_exp, pState) = wantCaseExp pState
= (True, case_exp, pState)
...
...
@@ -4375,7 +4375,7 @@ transform_record_or_array_update type expr updates level pState
build_update record_type No expr assignments
= PE_Record expr record_type assignments
build_update record_type (Yes ident) expr assignments
= PE_Let
False
(LocalParsedDefs [buildNodeDef (PE_Ident ident) expr])
= PE_Let (LocalParsedDefs [buildNodeDef (PE_Ident ident) expr])
(PE_Record (PE_Ident ident) record_type assignments)
check_field_and_record_types :: OptionalRecordName OptionalRecordName ParseState -> (!OptionalRecordName,!ParseState);
...
...
@@ -4429,7 +4429,7 @@ transform_record_or_array_update type expr updates level pState
= transform_record_update NoRecordName
(PE_Ident element_id)
[[{nu_selectors=(reverse record_selectors), nu_update_expr=update_expr}]] (level+1) pState
= (PE_Let
False
= (PE_Let
(LocalParsedDefs [index_def, select_def])
(PE_Update (PE_Ident array_id) (reverse [PS_Array (PE_Ident index_id) : initial_selectors]) updated_element), pState)
...
...
frontend/postparse.icl
View file @
17a7dca5
...
...
@@ -120,7 +120,7 @@ where
collectFunctions
(
PE_Lambda
lam_ident
args
res
pos
)
icl_module
ca
#
((
args
,
res
),
ca
)
=
collectFunctions
(
args
,
res
)
icl_module
ca
#
(
range
,
ca
)
=
addFunctionsRange
[
transformLambda
lam_ident
args
res
pos
]
ca
=
(
PE_Let
cIsStrict
(
CollectedLocalDefs
{
loc_functions
=
range
,
loc_nodes
=
[],
loc_in_icl_module
=
icl_module
})
=
(
PE_Let
(
CollectedLocalDefs
{
loc_functions
=
range
,
loc_nodes
=
[],
loc_in_icl_module
=
icl_module
})
(
PE_Ident
lam_ident
),
ca
)
collectFunctions
(
PE_Record
rec_expr
type_ident
fields
)
icl_module
ca
#
((
rec_expr
,
fields
),
ca
)
=
collectFunctions
(
rec_expr
,
fields
)
icl_module
ca
...
...
@@ -143,9 +143,9 @@ where
(
c
,
ca
)
=
collectFunctions
c
icl_module
ca
(
case_alts
,
ca
)
=
collectFunctions
case_alts
icl_module
ca
=
(
PE_Case
if_ident
c
case_alts
,
ca
)
collectFunctions
(
PE_Let
strict
locals
in_expr
)
icl_module
ca
collectFunctions
(
PE_Let
locals
in_expr
)
icl_module
ca
#
((
node_defs
,
in_expr
),
ca
)
=
collectFunctions
(
locals
,
in_expr
)
icl_module
ca
=
(
PE_Let
strict
node_defs
in_expr
,
ca
)
=
(
PE_Let
node_defs
in_expr
,
ca
)
collectFunctions
(
PE_ListCompr
predef_cons_index
predef_nil_index
expr
qualifiers
)
icl_module
ca
#
(
compr
,
ca
)
=
transformListComprehension
predef_cons_index
predef_nil_index
expr
qualifiers
ca
=
collectFunctions
compr
icl_module
ca
...
...
@@ -677,17 +677,17 @@ where
minimum
exp1
ident2
=:(
PE_Ident
_)
ca
#
node_def1
=
PD_NodeDef
(
LinePos
qual_filename
gen_position
.
lc_line
)
ident1
(
exprToRhs
exp1
)
#
(
min_exp
,
ca
)
=
minimum_of_idents
ident1
ident2
ca
=
(
PE_Let
cIsNotStrict
(
LocalParsedDefs
[
node_def1
])
min_exp
,
ca
)
=
(
PE_Let
(
LocalParsedDefs
[
node_def1
])
min_exp
,
ca
)
minimum
ident1
=:(
PE_Ident
_)
exp2
ca
#
node_def2
=
PD_NodeDef
(
LinePos
qual_filename
gen_position
.
lc_line
)
ident2
(
exprToRhs
exp2
)
#
(
min_exp
,
ca
)
=
minimum_of_idents
ident1
ident2
ca
=
(
PE_Let
cIsNotStrict
(
LocalParsedDefs
[
node_def2
])
min_exp
,
ca
)
=
(
PE_Let
(
LocalParsedDefs
[
node_def2
])
min_exp
,
ca
)
minimum
exp1
exp2
ca
#
pos
=
LinePos
qual_filename
gen_position
.
lc_line
#
node_def1
=
PD_NodeDef
pos
ident1
(
exprToRhs
exp1
)
#
node_def2
=
PD_NodeDef
pos
ident2
(
exprToRhs
exp2
)
#
(
min_exp
,
ca
)
=
minimum_of_idents
ident1
ident2
ca
=
(
PE_Let
cIsNotStrict
(
LocalParsedDefs
[
node_def1
,
node_def2
])
min_exp
,
ca
)
=
(
PE_Let
(
LocalParsedDefs
[
node_def1
,
node_def2
])
min_exp
,
ca
)
minimum_of_idents
ident1
ident2
ca
#
smaller_fun
=
get_predef_id
PD_SmallerFun
...
...
@@ -733,7 +733,7 @@ add_node_defs_to_exp [] exp
add_node_defs_to_exp
[{
tg_expr
=([],_)}:
generators
]
exp
=
add_node_defs_to_exp
generators
exp
add_node_defs_to_exp
[{
tg_expr
=(
node_defs
,_)}:
generators
]
exp
=
PE_Let
cIsNotStrict
(
LocalParsedDefs
node_defs
)
(
add_node_defs_to_exp
generators
exp
)
=
PE_Let
(
LocalParsedDefs
node_defs
)
(
add_node_defs_to_exp
generators
exp
)
transformQualifier
::
Qualifier
*
CollectAdmin
->
(
TransformedQualifier
,
*
CollectAdmin
)
transformQualifier
{
qual_generators
,
qual_let_defs
,
qual_filter
,
qual_position
,
qual_filename
}
ca
...
...
@@ -915,7 +915,7 @@ makeComprehensions [{tq_generators,tq_let_defs,tq_filter, tq_end, tq_call, tq_lh
#
failure
=
PE_List
[
PE_Ident
tq_fun_id
:
threading
++
rhs_continuation_args_from_generators
tq_generators
]
rhs
=
build_rhs
tq_generators
success
tq_let_defs
tq_filter
failure
tq_end
tq_fun_pos
parsed_def
=
MakeNewParsedDef
tq_fun_id
tq_lhs_args
rhs
tq_fun_pos
=
(
PE_Let
cIsStrict
(
LocalParsedDefs
[
parsed_def
])
tq_call
,
ca
)
=
(
PE_Let
(
LocalParsedDefs
[
parsed_def
])
tq_call
,
ca
)
where
build_rhs
::
[
TransformedGenerator
]
ParsedExpr
LocalDefs
(
Optional
ParsedExpr
)
ParsedExpr
ParsedExpr
Position
->
Rhs
build_rhs
[
generator
:
generators
]
success
let_defs
optional_filter
failure
end
fun_pos
...
...
frontend/syntax.dcl
View file @
17a7dca5
...
...
@@ -1293,7 +1293,7 @@ instance toString KindInfo
|
PE_Update
!
ParsedExpr
[
ParsedSelection
]
ParsedExpr
|
PE_Case
!
Ident
!
ParsedExpr
[
CaseAlt
]
|
PE_If
!
Ident
!
ParsedExpr
!
ParsedExpr
!
ParsedExpr
|
PE_Let
!
Bool
!
LocalDefs
!
ParsedExpr
|
PE_Let
!
LocalDefs
!
ParsedExpr
|
PE_ListCompr
/*predef_cons_index:*/
!
Int
/*predef_nil_index:*/
!
Int
!
ParsedExpr
![
Qualifier
]
|
PE_ArrayCompr
!
ArrayKind
!
ParsedExpr
![
Qualifier
]
|
PE_Sequ
Sequence
...
...
frontend/syntax.icl
View file @
17a7dca5
...
...
@@ -87,7 +87,7 @@ instance toString BasicType where
toString
BT_Dynamic
=
"Dynamic"
toString
BT_File
=
"File"
toString
BT_World
=
"World"
instance
<<<
BasicType
where
(<<<)
file
bt
=
file
<<<
toString
bt
...
...
@@ -191,10 +191,10 @@ where
=
file
<<<
consid
<<<
' '
<<<
strictness
<<<
' '
<<<
types
(<<<)
file
(
arg_type
-->
res_type
)
=
file
<<<
arg_type
<<<
" -> "
<<<
res_type
(<<<)
file
(
type
:@:
types
)
=
file
<<<
type
<<<
" @"
<<<
types
(<<<)
file
(
TB
tb
)
=
file
<<<
tb
(<<<)
file
(
type
:@:
types
)
=
file
<<<
type
<<<
" @"
<<<
types
(<<<)
file
TArrow
=
file
<<<
"(->)"
(<<<)
file
(
TArrow1
t
)
...
...
@@ -505,7 +505,7 @@ where
(<<<)
file
(
PE_Lambda
_
exprs
expr
_)
=
file
<<<
'\\'
<<<
exprs
<<<
" -> "
<<<
expr
(<<<)
file
(
PE_Bound
bind
)
=
file
<<<
bind
(<<<)
file
(
PE_Case
_
expr
alts
)
=
file
<<<
"case "
<<<
expr
<<<
" of
\n
"
<<<
alts
(<<<)
file
(
PE_Let
_
defs
expr
)
=
file
<<<
"let "
<<<
defs
<<<
" in
\n
"
<<<
expr
(<<<)
file
(
PE_Let
defs
expr
)
=
file
<<<
"let "
<<<
defs
<<<
" in
\n
"
<<<
expr
(<<<)
file
(
PE_DynamicPattern
expr
type
)
=
file
<<<
expr
<<<
"::"
<<<
type
(<<<)
file
(
PE_Dynamic
expr
maybetype
)
=
case
maybetype
of
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment