Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
compiler
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
16
Issues
16
List
Boards
Labels
Service Desk
Milestones
Operations
Operations
Incidents
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
clean-compiler-and-rts
compiler
Commits
e52f3653
Commit
e52f3653
authored
Nov 29, 2001
by
Ronny Wichers Schreur
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
different representation of selector kind in Selection
parent
ba6d8915
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
59 additions
and
45 deletions
+59
-45
backend/backendconvert.icl
backend/backendconvert.icl
+8
-8
frontend/checkFunctionBodies.icl
frontend/checkFunctionBodies.icl
+9
-9
frontend/convertDynamics.icl
frontend/convertDynamics.icl
+3
-3
frontend/generics.icl
frontend/generics.icl
+2
-2
frontend/overloading.icl
frontend/overloading.icl
+3
-3
frontend/syntax.dcl
frontend/syntax.dcl
+8
-3
frontend/syntax.icl
frontend/syntax.icl
+14
-5
frontend/trans.icl
frontend/trans.icl
+9
-9
frontend/type.icl
frontend/type.icl
+3
-3
No files found.
backend/backendconvert.icl
View file @
e52f3653
...
...
@@ -1791,10 +1791,10 @@ where
=
beNormalNode
(
beBasicSymbol
BEApplySymb
)
(
convertArgs
[
f
,
a
])
convertExpr
(
f
@
[
a
:
as
])
=
convertExpr
(
f
@
[
a
]
@
as
)
convertExpr
(
Selection
isUnique
expression
selections
)
=
convertSelections
(
convertExpr
expression
)
(
addKinds
isUnique
selections
)
convertExpr
(
Selection
selectorKind
expression
selections
)
=
convertSelections
(
convertExpr
expression
)
(
addKinds
selectorKind
selections
)
where
addKinds
No
selections
addKinds
No
rmalSelector
selections
=
[(
BESelector
,
selection
)
\\
selection
<-
selections
]
addKinds
_
[
selection
]
=
[(
BESelector_U
,
selection
)]
...
...
@@ -1826,7 +1826,7 @@ where
convertExpr
(
Update
expr1
[
singleSelection
]
expr2
)
=
case
singleSelection
of
RecordSelection
_
_
->
beUpdateNode
(
convertArgs
[
expr1
,
Selection
No
expr2
[
singleSelection
]])
->
beUpdateNode
(
convertArgs
[
expr1
,
Selection
No
rmalSelector
expr2
[
singleSelection
]])
ArraySelection
{
glob_object
={
ds_index
},
glob_module
}
_
index
// RWS not used?, eleminate beSpecialArrayFunctionSymbol?
->
beNormalNode
...
...
@@ -1834,11 +1834,11 @@ where
(
convertArgs
[
expr1
,
index
,
expr2
])
//
DictionarySelection
dictionaryVar
dictionarySelections
_
index
->
convertExpr
(
Selection
No
(
Var
dictionaryVar
)
dictionarySelections
@
[
expr1
,
index
,
expr2
])
->
convertExpr
(
Selection
No
rmalSelector
(
Var
dictionaryVar
)
dictionarySelections
@
[
expr1
,
index
,
expr2
])
convertExpr
(
Update
expr1
selections
expr2
)
=
case
lastSelection
of
RecordSelection
_
_
->
beUpdateNode
(
beArgs
selection
(
convertArgs
[
Selection
No
expr2
[
lastSelection
]]))
->
beUpdateNode
(
beArgs
selection
(
convertArgs
[
Selection
No
rmalSelector
expr2
[
lastSelection
]]))
ArraySelection
{
glob_object
={
ds_index
},
glob_module
}
_
index
->
beNormalNode
(
beSpecialArrayFunctionSymbol
BE_ArrayUpdateFun
ds_index
glob_module
)
(
beArgs
selection
(
convertArgs
[
index
,
expr2
]))
DictionarySelection
dictionaryVar
dictionarySelections
_
index
...
...
@@ -1846,7 +1846,7 @@ where
(
beArgs
dictionary
(
beArgs
selection
(
convertArgs
[
index
,
expr2
])))
with
dictionary
=
convertExpr
(
Selection
No
(
Var
dictionaryVar
)
dictionarySelections
)
=
convertExpr
(
Selection
No
rmalSelector
(
Var
dictionaryVar
)
dictionarySelections
)
where
lastSelection
=
last
selections
...
...
@@ -1902,7 +1902,7 @@ where
(
beArgs
dictionary
(
beArgs
expression
(
convertArgs
[
index
])))
where
dictionary
=
convertExpr
(
Selection
No
(
Var
dictionaryVar
)
dictionarySelections
)
=
convertExpr
(
Selection
No
rmalSelector
(
Var
dictionaryVar
)
dictionarySelections
)
caseVar
::
Expression
->
BoundVar
caseVar
(
Var
var
)
...
...
frontend/checkFunctionBodies.icl
View file @
e52f3653
...
...
@@ -1012,17 +1012,17 @@ checkExpression free_vars (PE_Selection is_unique expr [PS_Array index_expr]) e_
|
is_unique
#
(
glob_select_symb
,
cs
)
=
getPredefinedGlobalSymbol
PD_UnqArraySelectFun
PD_StdArray
STE_Member
2
cs
(
selector
,
free_vars
,
e_state
,
e_info
,
cs
)
=
checkArraySelection
glob_select_symb
free_vars
index_expr
e_input
e_state
e_info
cs
=
(
Selection
No
expr
[
selector
],
free_vars
,
e_state
,
e_info
,
cs
)
=
(
Selection
No
rmalSelector
expr
[
selector
],
free_vars
,
e_state
,
e_info
,
cs
)
#
(
glob_select_symb
,
cs
)
=
getPredefinedGlobalSymbol
PD_ArraySelectFun
PD_StdArray
STE_Member
2
cs
(
selector
,
free_vars
,
e_state
,
e_info
,
cs
)
=
checkArraySelection
glob_select_symb
free_vars
index_expr
e_input
e_state
e_info
cs
=
(
Selection
No
expr
[
selector
],
free_vars
,
e_state
,
e_info
,
cs
)
=
(
Selection
No
rmalSelector
expr
[
selector
],
free_vars
,
e_state
,
e_info
,
cs
)
checkExpression
free_vars
(
PE_Selection
is_unique
expr
selectors
)
e_input
e_state
e_info
cs
#
(
selectors
,
free_vars
,
e_state
,
e_info
,
cs
)
=
checkSelectors
cEndWithSelection
free_vars
selectors
e_input
e_state
e_info
cs
(
expr
,
free_vars
,
e_state
,
e_info
,
cs
)
=
checkExpression
free_vars
expr
e_input
e_state
e_info
cs
|
is_unique
#
(
tuple_type
,
cs
)
=
getPredefinedGlobalSymbol
(
GetTupleTypeIndex
2
)
PD_PredefinedModule
STE_Type
2
cs
=
(
Selection
(
Yes
tuple_typ
e
)
expr
selectors
,
free_vars
,
e_state
,
e_info
,
cs
)
=
(
Selection
No
expr
selectors
,
free_vars
,
e_state
,
e_info
,
cs
)
=
(
Selection
(
UniqueSelector
tuple_type
Fals
e
)
expr
selectors
,
free_vars
,
e_state
,
e_info
,
cs
)
=
(
Selection
No
rmalSelector
expr
selectors
,
free_vars
,
e_state
,
e_info
,
cs
)
checkExpression
free_vars
(
PE_Update
expr1
selectors
expr2
)
e_input
e_state
e_info
cs
#
(
expr1
,
free_vars
,
e_state
,
e_info
,
cs
)
=
checkExpression
free_vars
expr1
e_input
e_state
e_info
cs
(
selectors
,
free_vars
,
e_state
,
e_info
,
cs
)
=
checkSelectors
cEndWithUpdate
free_vars
selectors
e_input
e_state
e_info
cs
...
...
@@ -1836,7 +1836,7 @@ where
selector
=
{
glob_module
=
field_module
,
glob_object
=
MakeDefinedSymbol
fs_name
fs_index
1
}
(
this_record_expr
,
expr_heap
)
=
adjust_match_expression
record_expr
expr_heap
(
binds
,
var_store
,
expr_heap
,
e_info
,
cs
)
=
transfromPatternIntoBind
mod_index
def_level
pattern
(
Selection
No
this_record_expr
[
RecordSelection
selector
field_index
])
=
transfromPatternIntoBind
mod_index
def_level
pattern
(
Selection
No
rmalSelector
this_record_expr
[
RecordSelection
selector
field_index
])
position
var_store
expr_heap
e_info
cs
=
transform_sub_patterns_of_record
mod_index
def_level
patterns
fields
field_module
(
inc
field_index
)
record_expr
(
binds
++
all_binds
)
position
var_store
expr_heap
e_info
cs
...
...
@@ -2181,13 +2181,13 @@ buildSelections e_input {ap_opt_var, ap_array_var, ap_selections}
=
mapSt
newPtr
(
repeatn
dimension
EI_Empty
)
es_expr_heap
(
tuple_cons
,
cs
)
=
getPredefinedGlobalSymbol
(
GetTupleConsIndex
2
)
PD_PredefinedModule
STE_Constructor
2
cs
(
glob_select_symb
,
opt_tuple_type
,
cs
)
(
glob_select_symb
,
selector_kind
,
cs
)
=
case
dimension
of
1
#
(
unq_select_symb
,
cs
)
=
getPredefinedGlobalSymbol
PD_UnqArraySelectFun
PD_StdArray
STE_Member
2
cs
->
(
unq_select_symb
,
No
,
cs
)
->
(
unq_select_symb
,
No
rmalSelector
,
cs
)
_
#
(
select_symb
,
cs
)
=
getPredefinedGlobalSymbol
PD_ArraySelectFun
PD_StdArray
STE_Member
2
cs
(
tuple_type
,
cs
)
=
getPredefinedGlobalSymbol
(
GetTupleTypeIndex
2
)
PD_PredefinedModule
STE_Type
2
cs
->
(
select_symb
,
Yes
tuple_typ
e
,
cs
)
->
(
select_symb
,
UniqueSelector
tuple_type
Fals
e
,
cs
)
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
))
...
...
@@ -2195,7 +2195,7 @@ buildSelections e_input {ap_opt_var, ap_array_var, ap_selections}
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
opt_tuple_type
(
Var
bound_array_var
)
selections
,
lb_position
=
NoPos
}
,
[
{
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
...
...
frontend/convertDynamics.icl
View file @
e52f3653
...
...
@@ -175,7 +175,7 @@ convertDynamicPatternsIntoUnifyAppls global_type_instances common_defs main_dcl_
,
glob_module
=
pds_module2
}
#!
ci_sel_type_field
=
(\
dynamic_expr
->
Selection
No
dynamic_expr
[
RecordSelection
type_defined_symbol
sd_field_nr
])
=
(\
dynamic_expr
->
Selection
No
rmalSelector
dynamic_expr
[
RecordSelection
type_defined_symbol
sd_field_nr
])
// value field
#
({
pds_module
=
pds_module3
,
pds_def
=
pds_def3
}
,
predefined_symbols
)
=
predefined_symbols
![
PD_DynamicValue
]
...
...
@@ -192,7 +192,7 @@ convertDynamicPatternsIntoUnifyAppls global_type_instances common_defs main_dcl_
,
glob_module
=
pds_module3
}
#!
ci_sel_value_field
=
(\
dynamic_expr
->
Selection
No
dynamic_expr
[
RecordSelection
value_defined_symbol
sd_field_nr3
])
=
(\
dynamic_expr
->
Selection
No
rmalSelector
dynamic_expr
[
RecordSelection
value_defined_symbol
sd_field_nr3
])
->
(
dynamic_temp_symb_ident
,
ci_sel_value_field
,
ci_sel_type_field
,
predefined_symbols
)
#
(
module_symb
,
module_id_app
,
predefined_symbols
)
...
...
@@ -600,7 +600,7 @@ where
convertTypecode
cinp
(
TCE_Selector
selections
var_info_ptr
)
replace_tc_args
binds
placeholders_and_tc_args
ci
#!
(
var
,
binds
,
placeholders_and_tc_args
,
ci
)
=
convertTypecode
cinp
(
TCE_Var
var_info_ptr
)
replace_tc_args
binds
placeholders_and_tc_args
ci
=
(
Selection
No
var
selections
,
binds
,
placeholders_and_tc_args
,
ci
)
=
(
Selection
No
rmalSelector
var
selections
,
binds
,
placeholders_and_tc_args
,
ci
)
//convertTypecodes :: !ConversionInput [TypeCodeExpression] !*ConversionInfo -> (Expression,!*ConversionInfo)
convertTypecodes
_
[]
replace_tc_args
binds
placeholders_and_tc_args
ci
...
...
frontend/generics.icl
View file @
e52f3653
...
...
@@ -3883,7 +3883,7 @@ buildIsoToSelectionExpr record_expr predefs
#
selector
=
{
glob_module
=
pds_module
,
glob_object
=
{
ds_ident
=
pds_ident
,
ds_index
=
pds_def
,
ds_arity
=
1
}}
=
Selection
No
record_expr
[
RecordSelection
selector
0
]
=
Selection
No
rmalSelector
record_expr
[
RecordSelection
selector
0
]
buildIsoFromSelectionExpr
::
!
Expression
!
PredefinedSymbols
->
Expression
buildIsoFromSelectionExpr
record_expr
predefs
...
...
@@ -3891,7 +3891,7 @@ buildIsoFromSelectionExpr record_expr predefs
#
selector
=
{
glob_module
=
pds_module
,
glob_object
=
{
ds_ident
=
pds_ident
,
ds_index
=
pds_def
,
ds_arity
=
1
}}
=
Selection
No
record_expr
[
RecordSelection
selector
1
]
=
Selection
No
rmalSelector
record_expr
[
RecordSelection
selector
1
]
buildVarExpr
::
!
String
!*
Heaps
->
(!
Expression
,
!
FreeVar
,
!*
Heaps
)
buildVarExpr
name
heaps
=:{
hp_var_heap
,
hp_expression_heap
}
...
...
frontend/overloading.icl
View file @
e52f3653
...
...
@@ -864,7 +864,7 @@ where
#
(
class_context
,
context_address
,
hp_type_heaps
)
=
determineContextAddress
contexts
defs
tc
hp_type_heaps
|
isEmpty
context_address
=
(
ClassVariable
class_context
.
tc_var
,
({
heaps
&
hp_type_heaps
=
hp_type_heaps
},
ptrs
))
=
(
Selection
No
(
ClassVariable
class_context
.
tc_var
)
(
generateClassSelection
context_address
[]),
({
heaps
&
hp_type_heaps
=
hp_type_heaps
},
ptrs
))
=
(
Selection
No
rmalSelector
(
ClassVariable
class_context
.
tc_var
)
(
generateClassSelection
context_address
[]),
({
heaps
&
hp_type_heaps
=
hp_type_heaps
},
ptrs
))
convert_class_appl_to_expression
defs
contexts
(
CA_LocalTypeCode
new_var_ptr
)
heaps_and_ptrs
=
(
TypeCodeExpression
(
TCE_Var
new_var_ptr
),
heaps_and_ptrs
)
convert_class_appl_to_expression
defs
contexts
(
CA_GlobalTypeCode
{
tci_index
,
tci_contexts
})
heaps_and_ptrs
...
...
@@ -1302,7 +1302,7 @@ where
EI_Selection
selectors
record_var
context_args
#
(
all_args
,
ui
=:{
ui_var_heap
,
ui_error
})
=
adjustClassExpressions
symb_name
context_args
app_args
ui
(
var_name
,
var_info_ptr
,
ui_var_heap
,
ui_error
)
=
getClassVariable
symb_name
record_var
ui_var_heap
ui_error
select_expr
=
Selection
No
(
Var
{
var_name
=
var_name
,
var_info_ptr
=
var_info_ptr
,
var_expr_ptr
=
nilPtr
})
selectors
select_expr
=
Selection
No
rmalSelector
(
Var
{
var_name
=
var_name
,
var_info_ptr
=
var_info_ptr
,
var_expr_ptr
=
nilPtr
})
selectors
|
isEmpty
all_args
->
(
select_expr
,
{
ui
&
ui_var_heap
=
ui_var_heap
,
ui_error
=
ui_error
})
->
(
select_expr
@
all_args
,
examine_calls
context_args
...
...
@@ -1595,7 +1595,7 @@ where
{
ui
&
ui_var_heap
=
ui_var_heap
})
// ... MV
convertTypecode
(
TCE_Selector
selections
var_info_ptr
)
ui
=
(
Selection
No
(
Var
{
var_name
=
a_ij_var_name
,
var_info_ptr
=
var_info_ptr
,
var_expr_ptr
=
nilPtr
})
selections
,
ui
)
=
(
Selection
No
rmalSelector
(
Var
{
var_name
=
a_ij_var_name
,
var_info_ptr
=
var_info_ptr
,
var_expr_ptr
=
nilPtr
})
selections
,
ui
)
convertTypecode
(
TCE_UniType
uni_vars
type_code
)
ui
#
(
let_binds
,
ui
)
=
createVariables
uni_vars
ui
(
let_expr
,
ui
)
=
convertTypecode
type_code
ui
...
...
frontend/syntax.dcl
View file @
e52f3653
...
...
@@ -1099,6 +1099,12 @@ cNonUniqueSelection :== False
cIsStrict
:==
True
cIsNotStrict
:==
False
::
SelectorKind
=
NormalSelector
// .
|
UniqueSelector
// !
(
Global
DefinedSymbol
)
// tuple type
!
Bool
// is result element unique?
/*
:: SelectorKind = SEK_Normal | SEK_First | SEK_Next | SEK_Last
...
...
@@ -1110,8 +1116,7 @@ cIsNotStrict :== False
|
(@)
infixl
9
!
Expression
![
Expression
]
|
Let
!
Let
|
Case
!
Case
|
Selection
!(
Optional
(
Global
DefinedSymbol
))
!
Expression
![
Selection
]
// Yes: a "!" selection
|
Selection
!
SelectorKind
!
Expression
![
Selection
]
|
Update
!
Expression
![
Selection
]
Expression
|
RecordUpdate
!(
Global
DefinedSymbol
)
!
Expression
![
Bind
Expression
(
Global
FieldSymbol
)]
|
TupleSelect
!
DefinedSymbol
!
Int
!
Expression
...
...
@@ -1293,7 +1298,7 @@ instance == ModuleKind, Ident
instance
<<<
(
Module
a
)
|
<<<
a
,
ParsedDefinition
,
InstanceType
,
AttributeVar
,
TypeVar
,
SymbolType
,
Expression
,
Type
,
Ident
,
(
Global
object
)
|
<<<
object
,
Position
,
CaseAlt
,
AType
,
FunDef
,
ParsedExpr
,
TypeAttribute
,
(
Bind
a
b
)
|
<<<
a
&
<<<
b
,
ParsedConstructor
,
(
TypeDef
a
)
|
<<<
a
,
TypeVarInfo
,
BasicValue
,
ATypeVar
,
TypeRhs
,
FunctionPattern
,
(
Import
from_symbol
)
|
<<<
from_symbol
,
ImportDeclaration
,
ImportedIdent
,
CasePatterns
,
(
Optional
a
)
|
<<<
a
,
ConsVariable
,
BasicType
,
Annotation
,
Selection
,
SelectorDef
,
ConsDef
,
LocalDefs
,
FreeVar
,
ClassInstance
,
SignClassification
,
(
Optional
a
)
|
<<<
a
,
ConsVariable
,
BasicType
,
Annotation
,
Select
orKind
,
Select
ion
,
SelectorDef
,
ConsDef
,
LocalDefs
,
FreeVar
,
ClassInstance
,
SignClassification
,
TypeCodeExpression
,
CoercionPosition
,
AttrInequality
,
LetBind
,
Declaration
,
STE_Kind
,
BoundVar
instance
<<<
FunctionBody
...
...
frontend/syntax.icl
View file @
e52f3653
...
...
@@ -1092,12 +1092,18 @@ cNonUniqueSelection :== False
cIsStrict
:==
True
cIsNotStrict
:==
False
::
SelectorKind
=
NormalSelector
// .
|
UniqueSelector
// !
(
Global
DefinedSymbol
)
// tuple type
!
Bool
// is result element unique?
::
Expression
=
Var
!
BoundVar
|
App
!
App
|
(@)
infixl
9
!
Expression
![
Expression
]
|
Let
!
Let
|
Case
!
Case
|
Selection
!
(
Optional
(
Global
DefinedSymbol
))
!
Expression
![
Selection
]
|
Selection
!
SelectorKind
!
Expression
![
Selection
]
|
Update
!
Expression
![
Selection
]
Expression
|
RecordUpdate
!(
Global
DefinedSymbol
)
!
Expression
![
Bind
Expression
(
Global
FieldSymbol
)]
|
TupleSelect
!
DefinedSymbol
!
Int
!
Expression
...
...
@@ -1583,10 +1589,7 @@ where
else_part file No = file <<< '\n'
else_part file (Yes else) = file <<< "\nELSE\n" <<< else <<< '\n'
*/
(<<<)
file
(
Selection
opt_tuple
expr
selectors
)
=
file
<<<
expr
<<<
selector_kind
opt_tuple
<<<
selectors
where
selector_kind
No
=
'.'
selector_kind
(
Yes
_)
=
'!'
(<<<)
file
(
Selection
selector_kind
expr
selectors
)
=
file
<<<
expr
<<<
selector_kind
<<<
selectors
(<<<)
file
(
Update
expr1
selections
expr2
)
=
file
<<<
'{'
<<<
expr1
<<<
" & "
<<<
selections
<<<
" = "
<<<
expr2
<<<
'}'
(<<<)
file
(
RecordUpdate
cons_symbol
expression
expressions
)
=
file
<<<
'{'
<<<
cons_symbol
<<<
' '
<<<
expression
<<<
" & "
<<<
expressions
<<<
'}'
(<<<)
file
(
TupleSelect
field
field_nr
expr
)
=
file
<<<
expr
<<<
'.'
<<<
field_nr
...
...
@@ -1656,6 +1659,12 @@ where
(<<<)
file
ptr
=
file
<<<
ptrToInt
ptr
instance
<<<
SelectorKind
where
(<<<)
file
NormalSelector
=
file
<<<
"!"
(<<<)
file
(
UniqueSelector
_
False
)
=
file
<<<
"!"
(<<<)
file
(
UniqueSelector
_
True
)
=
file
<<<
"!*"
instance
<<<
Selection
where
(<<<)
file
(
RecordSelection
selector
_)
=
file
<<<
selector
...
...
frontend/trans.icl
View file @
e52f3653
...
...
@@ -2369,7 +2369,7 @@ transformApplication app=:{app_symb=symb=:{symb_kind,symb_arity}, app_args} extr
// && trace_tn ("select_member "+++toString select_symb.glob_object.ds_ident.id_name)
=
(
app_args
!!
me_offset
,
ti
)
select_member
exp
select_symb
me_offset
ti
=
(
Selection
No
exp
[
RecordSelection
select_symb
me_offset
],
ti
)
=
(
Selection
No
rmalSelector
exp
[
RecordSelection
select_symb
me_offset
],
ti
)
// XXX linear_bits field has to be added for generated functions
transformApplication
app
=:{
app_symb
={
symb_name
,
symb_kind
=
SK_GeneratedFunction
fun_def_ptr
fun_index
}}
extra_args
...
...
@@ -2386,23 +2386,23 @@ transformApplication app [] ro ti
transformApplication
app
extra_args
ro
ti
=
(
App
app
@
extra_args
,
ti
)
transformSelection
::
(
Optional
.(
Global
DefinedSymbol
))
[
Selection
]
Expression
*
TransformInfo
->
(!
Expression
,!*
TransformInfo
)
transformSelection
No
s
=:[
RecordSelection
_
field_index
:
selectors
]
transformSelection
::
SelectorKind
[
Selection
]
Expression
*
TransformInfo
->
(!
Expression
,!*
TransformInfo
)
transformSelection
No
rmalSelector
s
=:[
RecordSelection
_
field_index
:
selectors
]
app
=:(
App
{
app_symb
={
symb_kind
=
SK_Constructor
_
},
app_args
,
app_info_ptr
})
ti
=:{
ti_symbol_heap
}
|
isNilPtr
app_info_ptr
=
(
Selection
No
app
s
,
ti
)
=
(
Selection
No
rmalSelector
app
s
,
ti
)
#
(
app_info
,
ti_symbol_heap
)
=
readPtr
app_info_ptr
ti_symbol_heap
ti
=
{
ti
&
ti_symbol_heap
=
ti_symbol_heap
}
=
case
app_info
of
EI_DictionaryType
_
->
transformSelection
No
selectors
(
app_args
!!
field_index
)
ti
->
transformSelection
No
rmalSelector
selectors
(
app_args
!!
field_index
)
ti
_
->
(
Selection
No
app
s
,
ti
)
transformSelection
No
[]
expr
ti
->
(
Selection
No
rmalSelector
app
s
,
ti
)
transformSelection
No
rmalSelector
[]
expr
ti
=
(
expr
,
ti
)
transformSelection
opt_type
selectors
expr
ti
=
(
Selection
opt_type
expr
selectors
,
ti
)
transformSelection
selector_kind
selectors
expr
ti
=
(
Selection
selector_kind
expr
selectors
,
ti
)
// XXX store linear_bits and cc_args together ?
...
...
frontend/type.icl
View file @
e52f3653
...
...
@@ -1467,10 +1467,10 @@ where
requirements
ti
(
DynamicExpr
dienamic
)
reqs_ts
=
requirements
ti
dienamic
reqs_ts
requirements
ti
(
Selection
result_type_symb
expr
selectors
)
reqs_ts
requirements
ti
(
Selection
selector_kind
expr
selectors
)
reqs_ts
#
(
expr_type
,
opt_expr_ptr
,
(
reqs
,
ts
))
=
requirements
ti
expr
reqs_ts
=
case
result_type_symb
of
Yes
{
glob_object
={
ds_ident
,
ds_index
,
ds_arity
},
glob_module
}
=
case
selector_kind
of
UniqueSelector
{
glob_object
={
ds_ident
,
ds_index
,
ds_arity
},
glob_module
}
_
#
(
var
,
ts
)
=
freshAttributedVariable
ts
(_,
result_type
,
(
reqs
,
ts
))
=
requirementsOfSelectors
ti
No
expr
selectors
False
var
expr
(
reqs
,
ts
)
tuple_type
=
MakeTypeSymbIdent
{
glob_object
=
ds_index
,
glob_module
=
glob_module
}
ds_ident
ds_arity
...
...
Write
Preview
Markdown
is supported
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