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
736908e1
Commit
736908e1
authored
May 03, 2000
by
Martin Wierich
Browse files
bugfix
parent
9224a42e
Changes
3
Hide whitespace changes
Inline
Side-by-side
frontend/check.icl
View file @
736908e1
...
...
@@ -2660,7 +2660,7 @@ checkModule {mod_type,mod_name,mod_imports,mod_imported_objects,mod_defs = cdefs
(
dcl_modules
,
class_instances
,
icl_functions
,
cs_predef_symbols
)
=
adjust_instance_types_of_array_functions_in_std_array_icl
dcl_modules
class_instances
icl_functions
cs_predef_symbols
(
untransformed_
macro_funs_def
s
,
icl_functions
)
=
memcpy
cdefs
.
def_macro
s
icl_functions
(
untransformed_
fun_bodie
s
,
icl_functions
)
=
copy_bodie
s
icl_functions
(
groups
,
icl_functions
,
dcl_modules
,
var_heap
,
expr_heap
,
cs_symbol_table
,
cs_error
)
=
partitionateAndLiftFunctions
[
icl_global_function_range
,
icl_instances
]
cIclModIndex
icl_functions
dcl_modules
var_heap
expr_heap
cs_symbol_table
cs_error
...
...
@@ -2673,7 +2673,7 @@ checkModule {mod_type,mod_name,mod_imports,mod_imported_objects,mod_defs = cdefs
heaps
=
{
heaps
&
hp_var_heap
=
var_heap
,
hp_expression_heap
=
expr_heap
,
hp_type_heaps
=
{
hp_type_heaps
&
th_vars
=
th_vars
}}
(
dcl_modules
,
icl_mod
,
heaps
,
cs_error
)
=
compareDefImp
(
cdefs
.
def_macros
.
ir_from
,
untransformed_macro_funs_defs
)
dcl_modules
icl_mod
heaps
cs_error
=
compareDefImp
untransformed_fun_bodies
dcl_modules
icl_mod
heaps
cs_error
=
(
cs_error
.
ea_ok
,
icl_mod
,
dcl_modules
,
groups
,
dcl_icl_conversions
,
heaps
,
cs_predef_symbols
,
cs_symbol_table
,
cs_error
.
ea_file
)
#
icl_common
=
{
icl_common
&
com_type_defs
=
e_info
.
ef_type_defs
,
com_selector_defs
=
e_info
.
ef_selector_defs
,
com_class_defs
=
e_info
.
ef_class_defs
,
...
...
@@ -2882,10 +2882,11 @@ checkModule {mod_type,mod_name,mod_imports,mod_imported_objects,mod_defs = cdefs
(
Yes
symbol_type
)
=
inst_def
.
fun_type
=
{
instance_defs
&
[
ds_index
]
=
{
inst_def
&
fun_type
=
Yes
(
makeElemTypeOfArrayFunctionStrict
symbol_type
ins_offset
offset_table
)
}
}
memcpy
::
!
IndexRange
!*{#
FunDef
}
->
(!.{
FunDef
},
!*{#
FunDef
})
memcpy
{
ir_from
,
ir_to
}
fun_defs
#
new
=
createArray
(
ir_to
-
ir_from
)
(
abort
"check.icl: don't make that array strict !"
)
=
iFoldSt
(\
i
(
dst
,
src
=:{[
i
]=
src_i
})->({
dst
&
[
i
-
ir_from
]
=
src_i
},
src
))
ir_from
ir_to
(
new
,
fun_defs
)
copy_bodies
::
!*{#
FunDef
}
->
(!.{!
FunctionBody
},
!*{#
FunDef
})
copy_bodies
fun_defs
#!
size
=
size
fun_defs
#
new
=
createArray
size
NoBody
=
iFoldSt
(\
i
(
dst
,
src
=:{[
i
]=
src_i
})->({
dst
&
[
i
]
=
src_i
.
fun_body
},
src
))
0
size
(
new
,
fun_defs
)
check_needed_modules_are_imported
mod_name
extension
cs
=:{
cs_needed_modules
}
#
cs
=
case
cs_needed_modules
bitand
cNeedStdDynamics
of
...
...
frontend/comparedefimp.dcl
View file @
736908e1
...
...
@@ -4,6 +4,6 @@ import syntax, checksupport
// compare definition and implementation module
compareDefImp
::
!
(!
Int
,
!{
FunDef
})
!*{#
DclModule
}
!*
IclModule
!*
Heaps
!*
ErrorAdmin
compareDefImp
::
!
{!
FunctionBody
}
!*{#
DclModule
}
!*
IclModule
!*
Heaps
!*
ErrorAdmin
->
(!.{#
DclModule
},
!.
IclModule
,!.
Heaps
,!.
ErrorAdmin
)
frontend/comparedefimp.icl
View file @
736908e1
...
...
@@ -54,7 +54,7 @@ import RWSDebug
,
ec_tc_state
::
!.
TypesCorrespondState
,
ec_untransformed
::
!
(!
Int
,
!{
FunDef
}
)
::
!
{!
FunctionBody
}
}
::
ExpressionsCorrespondMonad
...
...
@@ -84,7 +84,7 @@ class CorrespondenceNumber a where
initial_hwn
hwn_heap
=
{
hwn_heap
=
hwn_heap
,
hwn_number
=
0
}
compareDefImp
::
!
(!
Int
,
!{
FunDef
})
!*{#
DclModule
}
!*
IclModule
!*
Heaps
!*
ErrorAdmin
compareDefImp
::
!
{!
FunctionBody
}
!*{#
DclModule
}
!*
IclModule
!*
Heaps
!*
ErrorAdmin
->
(!.{#
DclModule
},
!.
IclModule
,!.
Heaps
,!.
ErrorAdmin
)
compareDefImp
untransformed
dcl_modules
icl_module
heaps
error_admin
#
(
main_dcl_module
,
dcl_modules
)
=
dcl_modules
![
cIclModIndex
]
...
...
@@ -231,17 +231,16 @@ compareTwoMacroFuns dclIndex iclIndex
_
->
True
|
not
need_to_be_compared
=
ec_state
#
adjusted_icl_
function
#
adjusted_icl_
body
=
case
(
dcl_function
.
fun_body
,
icl_function
.
fun_body
)
of
(
CheckedBody
_,
TransformedBody
_)
// the macro definition in the icl module is has been transformed but not the dcl
// module's definition: use the untransformed icl original for comparision
#
(
offset
,
untransformed_icl_functions
)
=
ec_untransformed
->
untransformed_icl_functions
.[
iclIndex
-
offset
]
_
->
icl_function
->
ec_untransformed
.[
iclIndex
]
_
->
icl_function
.
fun_body
ident_pos
=
getIdentPos
dcl_function
ec_error_admin
=
pushErrorAdmin
ident_pos
ec_state
.
ec_error_admin
ec_state
=
e_corresponds
dcl_function
adjusted_icl_
function
{
ec_state
&
ec_error_admin
=
ec_error_admin
}
ec_state
=
e_corresponds
dcl_function
.
fun_body
adjusted_icl_
body
{
ec_state
&
ec_error_admin
=
ec_error_admin
}
=
{
ec_state
&
ec_error_admin
=
popErrorAdmin
ec_state
.
ec_error_admin
}
instance
getIdentPos
(
TypeDef
a
)
where
...
...
@@ -706,12 +705,12 @@ instance e_corresponds DefinedSymbol where
e_corresponds
dclDef
iclDef
=
equal2
dclDef
.
ds_ident
iclDef
.
ds_ident
instance
e_corresponds
Fun
Def
where
instance
e_corresponds
Fun
ctionBody
where
// both bodies are either CheckedBodies or TransformedBodies
e_corresponds
dclDef
iclDef
// | False--->("compare",
dclDef,
iclDef)
// | False--->("compare",
from_body dclDef, from_body
iclDef)
// = undef
=
e_corresponds
(
from_body
dclDef
.
fun_body
)
(
from_body
iclDef
.
fun_body
)
=
e_corresponds
(
from_body
dclDef
)
(
from_body
iclDef
)
where
from_body
(
TransformedBody
{
tb_args
,
tb_rhs
})
=
(
tb_args
,
[
tb_rhs
])
from_body
(
CheckedBody
{
cb_args
,
cb_rhs
})
=
(
cb_args
,
cb_rhs
)
...
...
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