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
2e8e2db1
Commit
2e8e2db1
authored
Oct 03, 2000
by
John van Groningen
Browse files
pass dcl cache using DclCache type
parent
5b686507
Changes
2
Hide whitespace changes
Inline
Side-by-side
main/compile.dcl
View file @
2e8e2db1
definition
module
compile
from
StdFile
import
Files
import
checksupport
compile
::
[{#
Char
}]
*
Files
->
(!
Bool
,
!*
Files
)
compile
::
![{#
Char
}]
!*
DclCache
!*
Files
->
(!
Bool
,!*
DclCache
,!*
Files
)
::
DclCache
=
{
dcl_modules
::!{#
DclModule
},
functions_and_macros
::!{#
FunDef
},
predef_symbols
::!.
PredefinedSymbols
,
hash_table
::!.
HashTable
,
heaps
::!.
Heaps
};
empty_cache
::
*
DclCache
main/compile.icl
View file @
2e8e2db1
...
...
@@ -4,49 +4,47 @@ import StdEnv
import
frontend
import
backendinterface
import
CoclSystemDependent
import
RWSDebug
//
import RWSDebug
::
CoclOptions
=
{
moduleName
::
{#
Char
}
,
pathName
::
{#
Char
}
,
errorPath
::
{#
Char
}
,
errorMode
::
Int
,
outPath
::
{#
Char
}
,
outMode
::
Int
,
searchPaths
::
SearchPaths
moduleName
::
{#
Char
}
,
pathName
::{#
Char
}
,
errorPath
::
{#
Char
}
,
errorMode
::
Int
,
outPath
::
{#
Char
}
,
outMode
::
Int
,
searchPaths
::
SearchPaths
}
InitialCoclOptions
=
{
moduleName
=
""
,
pathName
=
""
,
errorPath
=
"errors"
,
errorMode
=
FWriteText
,
outPath
=
"out"
,
outMode
=
FWriteText
,
searchPaths
=
{
sp_locations
=
[],
sp_paths
=
[]}
{
moduleName
=
""
,
pathName
=
""
,
errorPath
=
"errors"
,
errorMode
=
FWriteText
,
outPath
=
"out"
,
outMode
=
FWriteText
,
searchPaths
=
{
sp_locations
=
[],
sp_paths
=
[]}
}
compile
::
[{#
Char
}]
*
Files
->
(!
Bool
,
!*
Files
)
compile
args
files
#
(
args_without_modules
,
modules
,
cocl_options
)
=
parseCommandLine
args
InitialCoclOptions
#
heaps
=
{
hp_var_heap
=
newHeap
,
hp_expression_heap
=
newHeap
,
hp_type_heaps
=
{
th_vars
=
newHeap
,
th_attrs
=
newHeap
}}
::
DclCache
=
{
dcl_modules
::!{#
DclModule
},
functions_and_macros
::!{#
FunDef
},
predef_symbols
::!.
PredefinedSymbols
,
hash_table
::!.
HashTable
,
heaps
::!.
Heaps
};
empty_cache
::
*
DclCache
empty_cache
#
heaps
=
{
hp_var_heap
=
newHeap
,
hp_expression_heap
=
newHeap
,
hp_type_heaps
=
{
th_vars
=
newHeap
,
th_attrs
=
newHeap
}}
#
(
predef_symbols
,
hash_table
)
=
buildPredefinedSymbols
newHashTable
=
compile_modules
modules
0
cocl_options
args_without_modules
{}
{}
predef_symbols
hash_table
heaps
files
;
=
{
dcl_modules
={},
functions_and_macros
={},
predef_symbols
=
predef_symbols
,
hash_table
=
hash_table
,
heaps
=
heaps
}
compile
::
![{#
Char
}]
!*
DclCache
!*
Files
->
(!
Bool
,!*
DclCache
,!*
Files
)
compile
args
cache
files
#
(
args_without_modules
,
modules
,
cocl_options
)
=
parseCommandLine
args
InitialCoclOptions
=
compile_modules
modules
0
cocl_options
args_without_modules
cache
files
;
parseCommandLine
::
[{#
Char
}]
CoclOptions
->
([{#
Char
}],[{#
Char
}],
CoclOptions
)
parseCommandLine
[]
options
...
...
@@ -134,7 +132,7 @@ directoryName :: {#Char} -> {#Char}
directoryName
path
=
foldr
(\
p
ps
->
p
+++
{
DirectorySeparator
}
+++
ps
)
""
(
init
(
splitBy
DirectorySeparator
path
))
compile_modules
[
module_
:
modules
]
n_compiles
cocl_options
args_without_modules
dcl_modules
functions_and_macros
predef_symbols
hash_table
heaps
files
compile_modules
[
module_
:
modules
]
n_compiles
cocl_options
args_without_modules
cache
files
#
cocl_options
=
prependModulePath
{
cocl_options
&
pathName
=
stripExtension
".icl"
(
stripQuotes
module_
)}
with
// RWS +++ hack, both module name and file path should be passed to frontEndInterface
...
...
@@ -144,39 +142,22 @@ compile_modules [module_:modules] n_compiles cocl_options args_without_modules d
// RWS, voor Maarten +++ , searchPaths = {searchPaths & sp_paths = [directoryName pathName : searchPaths.sp_paths]}
// , searchPaths = [directoryName pathName : searchPaths]
}
#
(
ok
,
dcl_modules
,
functions_and_macros
,
n_functions_and_macros_in_dcl_modules
,
predef_symbols
,
hash_table
,
heaps
,
files
)
=
compileModule
cocl_options
(
args_without_modules
++[
module_
])
dcl_modules
functions_and_macros
predef_symbols
hash_table
heaps
files
;
#
(
ok
,
cache
,
files
)
=
compileModule
cocl_options
(
args_without_modules
++[
module_
])
cache
files
;
|
ok
// # hash_table=remove_module_idents_from_symbol_table 0 dcl_modules hash_table;
/* # hash_table=remove_module_ident_from_symbol_table dcl_modules.[0] hash_table;
with
remove_module_idents_from_symbol_table module_n dcl_modules hash_table
| module_n==size dcl_modules
= hash_table;
# hash_table = remove_module_ident_from_symbol_table dcl_modules.[module_n] hash_table
= remove_module_idents_from_symbol_table (module_n+1) dcl_modules hash_table
remove_module_ident_from_symbol_table dcl_module hash_table
# module_symbol_pointer = dcl_module.dcl_name.id_info;
# symbol_heap=hash_table.hte_symbol_heap;
# (hte_entry,symbol_heap) = readPtr module_symbol_pointer symbol_heap
# symbol_heap=writePtr module_symbol_pointer {hte_entry & ste_kind=STE_Empty} symbol_heap
= {hash_table & hte_symbol_heap=symbol_heap}
# dcl_modules = {dcl_modules.[module_n] \\ module_n <-[1..size dcl_modules-1]}
*/
/*
# heaps = { hp_var_heap = newHeap, hp_expression_heap = newHeap, hp_type_heaps = { th_vars = newHeap, th_attrs = newHeap }}
# (predef_symbols, hash_table) = buildPredefinedSymbols newHashTable
= compile_modules modules 0 cocl_options args_without_modules {} {} predef_symbols hash_table heaps files;
*/
=
compile_modules
modules
(
n_compiles
+1
)
cocl_options
args_without_modules
dcl_modules
functions_and_macros
predef_symbols
hash_table
heaps
files
;
=
compile_modules
modules
(
n_compiles
+1
)
cocl_options
args_without_modules
cache
files
;
=
(
ok
,
files
);
compile_modules
[]
n_compiles
cocl_options
args_without_modules
dcl_modules
functions_and_macros
predef_symbols
hash_table
heaps
files
=
(
True
,
files
);
=
(
ok
,
cache
,
files
);
compile_modules
[]
n_compiles
cocl_options
args_without_modules
cache
files
=
(
True
,
cache
,
files
);
compileModule
::
CoclOptions
[{#
Char
}]
{#
Dcl
Module
}
{#
FunDef
}
*
PredefinedSymbols
!*
HashTable
*
Heaps
*
Files
->
(!
Bool
,!
{#
Dcl
Module
},!{#
FunDef
},!
Int
,!*
PredefinedSymbols
,!*
HashTable
,!*
Heaps
,
!*
Files
)
compileModule
options
commandLineArgs
dcl_modules
functions_and_macros
predef_symbols
hash_table
heaps
files
compileModule
::
CoclOptions
[{#
Char
}]
*
Dcl
Cache
*
Files
->
(!
Bool
,!
*
Dcl
Cache
,
!*
Files
)
compileModule
options
commandLineArgs
{
dcl_modules
,
functions_and_macros
,
predef_symbols
,
hash_table
,
heaps
}
files
#
(
opened
,
error
,
files
)
=
fopen
options
.
errorPath
options
.
errorMode
files
|
not
opened
...
...
@@ -189,7 +170,7 @@ compileModule options commandLineArgs dcl_modules functions_and_macros predef_sy
=
stdio
files
// (moduleIdent, hash_table) = putIdentInHashTable options.moduleName IC_Module hash_table
#
({
boxed_ident
=
moduleIdent
},
hash_table
)
=
putIdentInHashTable
options
.
moduleName
IC_Module
hash_table
#
list_inferred_types
=
if
(
isMember
"-lt"
commandLineArgs
)
(
Yes
(
not
(
isMember
"-lattr"
commandLineArgs
)))
No
#
list_inferred_types
=
if
(
isMember
"-lt"
commandLineArgs
)
(
Yes
(
not
(
isMember
"-lattr"
commandLineArgs
)))
No
#
(
optionalSyntaxTree
,
cached_functions_and_macros
,
n_functions_and_macros_in_dcl_modules
,
main_dcl_module_n
,
predef_symbols
,
hash_table
,
files
,
error
,
io
,
out
,
heaps
)
=
frontEndInterface
FrontEndPhaseAll
moduleIdent
options
.
searchPaths
dcl_modules
functions_and_macros
list_inferred_types
predef_symbols
hash_table
files
error
io
out
heaps
#
unique_copy_of_predef_symbols
={
predef_symbol
\\
predef_symbol
<-:
predef_symbols
}
...
...
@@ -203,23 +184,24 @@ compileModule options commandLineArgs dcl_modules functions_and_macros predef_sy
=
abort
(
"couldn't close out file
\"
"
+++
options
.
outPath
+++
"
\"\n
"
)
#
var_heap
=
heaps
.
hp_var_heap
#
(
success
,
dcl_modules
,
functions_and_macros
,
n_functions_and_macros_in_dcl_modules
,
var_heap
,
error
,
files
)
=
case
optionalSyntaxTree
of
Yes
syntaxTree
#
dcl_modules
=
syntaxTree
.
fe_dcls
#
functions_and_macros
=
syntaxTree
.
fe_icl
.
icl_functions
#
(
success
,
var_heap
,
error
,
files
)
=
backEndInterface
outputPath
(
map
appendRedirection
commandLineArgs
)
predef_symbols
syntaxTree
main_dcl_module_n
var_heap
error
files
->
(
success
,
dcl_modules
,
functions_and_macros
,
n_functions_and_macros_in_dcl_modules
,
var_heap
,
error
,
files
)
with
appendRedirection
arg
=
case
arg
of
"-RE"
->
"-RAE"
"-RO"
->
"-RAO"
arg
->
arg
No
->
(
False
,{},{},
0
,
var_heap
,
error
,
files
)
=
case
optionalSyntaxTree
of
Yes
syntaxTree
#
dcl_modules
=
syntaxTree
.
fe_dcls
#
functions_and_macros
=
syntaxTree
.
fe_icl
.
icl_functions
#
(
success
,
var_heap
,
error
,
files
)
=
backEndInterface
outputPath
(
map
appendRedirection
commandLineArgs
)
predef_symbols
syntaxTree
main_dcl_module_n
var_heap
error
files
->
(
success
,
dcl_modules
,
functions_and_macros
,
n_functions_and_macros_in_dcl_modules
,
var_heap
,
error
,
files
)
with
appendRedirection
arg
=
case
arg
of
"-RE"
->
"-RAE"
"-RO"
->
"-RAO"
arg
->
arg
No
->
(
False
,{},{},
0
,
var_heap
,
error
,
files
)
with
outputPath
// = /* directoryName options.pathName +++ "Clean System Files" +++ {DirectorySeparator} +++ */ baseName options.pathName
...
...
@@ -231,5 +213,7 @@ compileModule options commandLineArgs dcl_modules functions_and_macros predef_sy
=
abort
(
"couldn't close error file
\"
"
+++
options
.
errorPath
+++
"
\"\n
"
)
|
success
#
dcl_modules
={{
dcl_module
\\
dcl_module
<-:
dcl_modules
}
&
[
main_dcl_module_n
].
dcl_conversions
=
No
}
=
(
success
,
dcl_modules
,
cached_functions_and_macros
,
n_functions_and_macros_in_dcl_modules
,
unique_copy_of_predef_symbols
,
hash_table
,
heaps
,
files
)
=
(
success
,
dcl_modules
,
cached_functions_and_macros
,
n_functions_and_macros_in_dcl_modules
,
unique_copy_of_predef_symbols
,
hash_table
,
heaps
,
files
)
#
cache
={
dcl_modules
=
dcl_modules
,
functions_and_macros
=
cached_functions_and_macros
,
predef_symbols
=
unique_copy_of_predef_symbols
,
hash_table
=
hash_table
,
heaps
=
heaps
}
=
(
success
,
cache
,
files
)
#
cache
={
dcl_modules
=
dcl_modules
,
functions_and_macros
=
cached_functions_and_macros
,
predef_symbols
=
unique_copy_of_predef_symbols
,
hash_table
=
hash_table
,
heaps
=
heaps
}
=
(
success
,
cache
,
files
)
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