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
9173b984
Commit
9173b984
authored
Nov 11, 1999
by
Sjaak Smetsers
Browse files
extension: no longer necessary to repeat macros in icl-file
parent
52594d28
Changes
2
Hide whitespace changes
Inline
Side-by-side
frontend/check.icl
View file @
9173b984
...
...
@@ -658,7 +658,7 @@ where
=
(
AP_Algebraic
cons_symbol
cons_def
.
cons_type_index
patterns
opt_var
,
ums
)
=
(
AP_Empty
cons_def
.
cons_symb
,
{
ums
&
ums_cons_defs
=
ums_cons_defs
,
ums_modules
=
ums_modules
,
ums_error
=
checkError
cons_def
.
cons_symb
" missing argument(s)"
ums_error
})
/* SSS .... */
get_cons_def
mod_index
cons_mod
cons_index
cons_defs
modules
|
mod_index
==
cons_mod
#
(
cons_def
,
cons_defs
)
=
cons_defs
![
cons_index
]
...
...
@@ -666,6 +666,12 @@ where
#!
{
dcl_common
,
dcl_conversions
}
=
modules
.[
cons_mod
]
#!
cons_def
=
dcl_common
.
com_cons_defs
.[
cons_index
]
=
(
cons_def
,
convertIndex
cons_index
(
toInt
STE_Constructor
)
dcl_conversions
,
cons_defs
,
modules
)
/* .... SSS */
get_cons_def
mod_index
cons_mod
cons_index
cons_defs
modules
#!
{
dcl_common
,
dcl_conversions
}
=
modules
.[
cons_mod
]
#!
cons_def
=
dcl_common
.
com_cons_defs
.[
cons_index
]
=
(
cons_def
,
convertIndex
cons_index
(
toInt
STE_Constructor
)
dcl_conversions
,
cons_defs
,
modules
)
unfold_pattern_macro
mod_index
macro_ident
opt_var
(
BasicExpr
bv
bt
)
ums
=
(
AP_Basic
bv
opt_var
,
ums
)
...
...
@@ -1049,6 +1055,7 @@ where
#
cs
=
{
cs
&
cs_symbol_table
=
cs_symbol_table
<:=
(
symb_info
,
{
entry
&
ste_kind
=
STE_FunctionOrMacro
[
ei_fun_index
:
calls
]})}
e_state
=
{
e_state
&
es_calls
=
[{
fc_index
=
ste_index
,
fc_level
=
ste_def_level
}
:
es_calls
]}
=
(
if
(
fun_kind
==
FK_Macro
)
(
SK_Macro
index
)
(
SK_Function
index
),
fun_arity
,
fun_priority
,
cIsAFunction
,
e_state
,
e_info
,
cs
)
// ---> ("determine_info_of_symbol", ei_fun_index, fun_symb, ptrToInt symb_info, ste_index)
where
is_called_before
caller_index
[]
=
False
...
...
@@ -2078,9 +2085,10 @@ where
remove_calls_from_symbol_table
fun_index
fun_level
[{
fc_index
,
fc_level
}
:
fun_calls
]
fun_defs
symbol_table
|
fc_level
<=
fun_level
#!
{
fun_symb
={
id_info
}}
=
fun_defs
.[
fc_index
]
#!
{
fun_symb
=
fun_symb
=:
{
id_info
}}
=
fun_defs
.[
fc_index
]
#!
entry
=
sreadPtr
id_info
symbol_table
#
(
c
,
cs
)
=
get_calls
entry
.
ste_kind
// ---> ("remove_calls_from_symbol_table", fun_symb, ptrToInt id_info, fc_index)
#
(
c
,
cs
)
=
get_calls
entry
.
ste_kind
|
fun_index
==
c
=
remove_calls_from_symbol_table
fun_index
fun_level
fun_calls
fun_defs
(
symbol_table
<:=
(
id_info
,{
entry
&
ste_kind
=
STE_FunctionOrMacro
cs
}))
=
abort
" Error in remove_calls_from_symbol_table"
...
...
@@ -2089,6 +2097,7 @@ where
=
(
fun_defs
,
symbol_table
)
get_calls
(
STE_FunctionOrMacro
[
x
:
xs
])
=
(
x
,
xs
)
get_calls
ste_kind
=
abort
"get_calls (check.icl)"
<<-
ste_kind
checkFunctions
::
!
Index
!
Level
!
Index
!
Index
!*{#
FunDef
}
!*
ExpressionInfo
!*
Heaps
!*
CheckState
->
(!*{#
FunDef
},
!*
ExpressionInfo
,
!*
Heaps
,
!*
CheckState
)
...
...
@@ -2207,10 +2216,8 @@ combineDclAndIclModule _ modules icl_decl_symbols icl_definitions icl_sizes cs
cs
=
addGlobalDefinitionsToSymbolTable
icl_decl_symbols
cs
(
moved_dcl_defs
,
icl_sizes
,
icl_decl_symbols
,
cs
)
=
foldSt
add_undefined_dcl_def
dcls_local
([],
icl_sizes
,
icl_decl_symbols
,
cs
)
(
conversion_table
,
cs
)
=
foldSt
(
add_to_conversion_table
dcl_macros
.
ir_from
)
dcls_local
({
createArray
size
NoIndex
\\
size
<-:
dcl_sizes
},
cs
)
(
moved_dcl_defs
,
conversion_table
,
icl_sizes
,
icl_decl_symbols
,
cs
)
=
foldSt
(
add_to_conversion_table
dcl_macros
.
ir_from
)
dcls_local
([],
{
createArray
size
NoIndex
\\
size
<-:
dcl_sizes
},
icl_sizes
,
icl_decl_symbols
,
cs
)
(
new_type_defs
,
new_class_defs
,
new_cons_defs
,
new_selector_defs
,
new_member_defs
,
cs
)
=
foldSt
(
add_dcl_definition
dcl_common
)
moved_dcl_defs
([],
[],
[],
[],
[],
cs
)
...
...
@@ -2230,37 +2237,50 @@ combineDclAndIclModule _ modules icl_decl_symbols icl_definitions icl_sizes cs
)
where
add_to_conversion_table
first_macro_index
decl
=:{
dcl_ident
,
dcl_kind
,
dcl_index
,
dcl_pos
}
(
conversion_table
,
cs
)
#
({
ste_kind
,
ste_index
,
ste_def_level
},
cs_symbol_table
)
=
readPtr
dcl_ident
.
id_info
cs
.
cs_symbol_table
add_to_conversion_table
first_macro_index
decl
=:{
dcl_ident
=
dcl_ident
=:{
id_info
},
dcl_kind
,
dcl_index
,
dcl_pos
}
(
moved_dcl_defs
,
conversion_table
,
icl_sizes
,
icl_defs
,
cs
)
#
(
entry
=:{
ste_kind
,
ste_index
,
ste_def_level
},
cs_symbol_table
)
=
readPtr
id_info
cs
.
cs_symbol_table
|
ste_kind
==
STE_Empty
#
def_index
=
toInt
dcl_kind
|
can_be_only_in_dcl
def_index
#
(
conversion_table
,
icl_sizes
,
icl_defs
,
cs_symbol_table
)
=
add_dcl_declaration
id_info
entry
decl
def_index
dcl_index
(
conversion_table
,
icl_sizes
,
icl_defs
,
cs_symbol_table
)
=
([
decl
:
moved_dcl_defs
],
conversion_table
,
icl_sizes
,
icl_defs
,
{
cs
&
cs_symbol_table
=
cs_symbol_table
})
|
def_index
==
cMacroDefs
#
(
conversion_table
,
icl_defs
,
cs_symbol_table
)
=
add_macro_declaration
id_info
entry
decl
def_index
(
dcl_index
-
first_macro_index
)
dcl_index
(
conversion_table
,
icl_defs
,
cs_symbol_table
)
=
([
decl
:
moved_dcl_defs
],
conversion_table
,
icl_sizes
,
icl_defs
,
{
cs
&
cs_symbol_table
=
cs_symbol_table
})
#
cs_error
=
checkError
"definition module"
"undefined in implementation module"
(
setErrorAdmin
(
newPosition
dcl_ident
dcl_pos
)
cs
.
cs_error
)
=
(
moved_dcl_defs
,
conversion_table
,
icl_sizes
,
icl_defs
,
{
cs
&
cs_error
=
cs_error
,
cs_symbol_table
=
cs_symbol_table
})
|
ste_def_level
==
cGlobalScope
&&
ste_kind
==
dcl_kind
#
def_index
=
toInt
dcl_kind
dcl_index
=
if
(
def_index
==
cMacroDefs
)
(
dcl_index
-
first_macro_index
)
dcl_index
=
({
conversion_table
&
[
def_index
].[
dcl_index
]
=
ste_index
},
{
cs
&
cs_symbol_table
=
cs_symbol_table
})
=
(
moved_dcl_defs
,
{
conversion_table
&
[
def_index
].[
dcl_index
]
=
ste_index
},
icl_sizes
,
icl_defs
,
{
cs
&
cs_symbol_table
=
cs_symbol_table
})
#
cs_error
=
checkError
"definition module"
"conflicting definition in implementation module"
(
setErrorAdmin
(
newPosition
dcl_ident
dcl_pos
)
cs
.
cs_error
)
=
(
conversion_table
,
{
cs
&
cs_error
=
cs_error
,
cs_symbol_table
=
cs_symbol_table
})
=
(
moved_dcl_defs
,
conversion_table
,
icl_sizes
,
icl_defs
,
{
cs
&
cs_error
=
cs_error
,
cs_symbol_table
=
cs_symbol_table
})
add_undefined_dcl_def
dcl
=:{
dcl_ident
={
id_info
}}
(
moved_dcl_defs
,
icl_sizes
,
icl_defs
,
cs
)
#
(
entry
,
cs_symbol_table
)
=
readPtr
id_info
cs
.
cs_symbol_table
|
entry
.
ste_kind
==
STE_Empty
=
check_and_add_dcl_def
id_info
entry
dcl
(
moved_dcl_defs
,
icl_sizes
,
icl_defs
,
{
cs
&
cs_symbol_table
=
cs_symbol_table
})
=
(
moved_dcl_defs
,
icl_sizes
,
icl_defs
,
{
cs
&
cs_symbol_table
=
cs_symbol_table
})
where
check_and_add_dcl_def
info_ptr
entry
dcl
=:{
dcl_kind
=
STE_Type
}
(
moved_dcl_defs
,
icl_sizes
,
icl_defs
,
cs
)
#
(
icl_sizes
,
icl_defs
,
cs_symbol_table
)
=
add_dcl_declaration
info_ptr
entry
dcl
cTypeDefs
(
icl_sizes
,
icl_defs
,
cs
.
cs_symbol_table
)
=
([
dcl
:
moved_dcl_defs
],
icl_sizes
,
icl_defs
,
{
cs
&
cs_symbol_table
=
cs_symbol_table
})
check_and_add_dcl_def
info_ptr
entry
dcl
=:{
dcl_kind
=
STE_Constructor
}
(
moved_dcl_defs
,
icl_sizes
,
icl_defs
,
cs
)
#
(
icl_sizes
,
icl_defs
,
cs_symbol_table
)
=
add_dcl_declaration
info_ptr
entry
dcl
cConstructorDefs
(
icl_sizes
,
icl_defs
,
cs
.
cs_symbol_table
)
=
([
dcl
:
moved_dcl_defs
],
icl_sizes
,
icl_defs
,
{
cs
&
cs_symbol_table
=
cs_symbol_table
})
check_and_add_dcl_def
info_ptr
entry
{
dcl_ident
,
dcl_pos
}
(
moved_dcl_defs
,
icl_sizes
,
icl_defs
,
cs
)
#
cs_error
=
checkError
"definition module"
"undefined in implementation module"
(
setErrorAdmin
(
newPosition
dcl_ident
dcl_pos
)
cs
.
cs_error
)
=
(
moved_dcl_defs
,
icl_sizes
,
icl_defs
,
{
cs
&
cs_error
=
cs_error
})
add_dcl_declaration
info_ptr
entry
dcl
def_index
(
icl_sizes
,
icl_defs
,
symbol_table
)
#
(
dcl_index
,
icl_sizes
)
=
icl_sizes
![
def_index
]
=
({
icl_sizes
&
[
def_index
]
=
inc
dcl_index
},
[
{
dcl
&
dcl_index
=
dcl_index
}
:
icl_defs
],
NewEntry
symbol_table
info_ptr
dcl
.
dcl_kind
dcl_index
cGlobalScope
entry
)
/* To be done : cClassDefs and cMemberDefs */
can_be_only_in_dcl
def_kind
=
def_kind
==
cTypeDefs
||
def_kind
==
cConstructorDefs
||
def_kind
==
cSelectorDefs
// || def_kind == cClassDefs || def_kind == cMemberDefs
add_dcl_declaration
info_ptr
entry
dcl
def_index
dcl_index
(
conversion_table
,
icl_sizes
,
icl_defs
,
symbol_table
)
#
(
icl_index
,
icl_sizes
)
=
icl_sizes
![
def_index
]
=
(
{
conversion_table
&
[
def_index
].[
dcl_index
]
=
icl_index
}
,
{
icl_sizes
&
[
def_index
]
=
inc
icl_index
}
,
[
{
dcl
&
dcl_index
=
icl_index
}
:
icl_defs
]
,
NewEntry
symbol_table
info_ptr
dcl
.
dcl_kind
icl_index
cGlobalScope
entry
)
add_macro_declaration
info_ptr
entry
dcl
def_index
dcl_index
icl_index
(
conversion_table
,
icl_defs
,
symbol_table
)
=
(
{
conversion_table
&
[
def_index
].[
dcl_index
]
=
icl_index
}
,
[
{
dcl
&
dcl_index
=
icl_index
}
:
icl_defs
]
,
NewEntry
symbol_table
info_ptr
dcl
.
dcl_kind
icl_index
cGlobalScope
entry
)
add_dcl_definition
{
com_type_defs
}
dcl
=:{
dcl_kind
=
STE_Type
,
dcl_index
}
(
new_type_defs
,
new_class_defs
,
new_cons_defs
,
new_selector_defs
,
new_member_defs
,
cs
)
...
...
@@ -2309,7 +2329,12 @@ where
add_dcl_definition
{
com_cons_defs
}
dcl
=:{
dcl_kind
=
STE_Constructor
,
dcl_index
}
(
new_type_defs
,
new_class_defs
,
new_cons_defs
,
new_selector_defs
,
new_member_defs
,
cs
)
=
(
new_type_defs
,
new_class_defs
,
[
com_cons_defs
.[
dcl_index
]
:
new_cons_defs
],
new_selector_defs
,
new_member_defs
,
cs
)
add_dcl_definition
{
com_selector_defs
}
dcl
=:{
dcl_kind
=
STE_Field
_,
dcl_index
}
(
new_type_defs
,
new_class_defs
,
new_cons_defs
,
new_selector_defs
,
new_member_defs
,
cs
)
=
(
new_type_defs
,
new_class_defs
,
new_cons_defs
,
[
com_selector_defs
.[
dcl_index
]
:
new_selector_defs
],
new_member_defs
,
cs
)
add_dcl_definition
_
_
(
new_type_defs
,
new_class_defs
,
new_cons_defs
,
new_selector_defs
,
new_member_defs
,
cs
)
=
(
new_type_defs
,
new_class_defs
,
new_cons_defs
,
new_selector_defs
,
new_member_defs
,
cs
)
rev_append
front
[]
=
front
...
...
frontend/syntax.dcl
View file @
9173b984
...
...
@@ -173,7 +173,7 @@ cIsNotAFunction :== False
These can only occur in definition modules. After parsing the SP_ParsedSubstitutions alternative
is used to indicate the specific instantiation. The SP_Substitutions alternative is used to deduce
the type of the specialized version. Finally the SP_ContextTypes alternative is set and used during
the typing to check whether
the
this instance has been used. The auxiliary SP_Index alternative is used
the typing to check whether this instance has been used. The auxiliary SP_
Fun
Index alternative is used
to store the index of the function that has been specialized.
*/
...
...
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