Skip to content
GitLab
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
5c8aeef4
Commit
5c8aeef4
authored
Oct 05, 2001
by
Ronny Wichers Schreur
🏢
Browse files
bind special idents (such as abort, undef from StdMisc) to the correct identifiers
parent
60812627
Changes
9
Hide whitespace changes
Inline
Side-by-side
MacLibraries/CleanCompilerLib
View file @
5c8aeef4
No preview for this file type
backend/Clean System Files/backend_library
View file @
5c8aeef4
...
...
@@ -4,6 +4,8 @@ BEInit
BEFree
BEArg
BEDeclareModules
BEBindSpecialModule
BEBindSpecialFunction
BESpecialArrayFunctionSymbol
BEDictionarySelectFunSymbol
BEDictionaryUpdateFunSymbol
...
...
backend/backend.dcl
View file @
5c8aeef4
...
...
@@ -37,6 +37,7 @@ from StdString import String;
::
BEArrayFunKind
:==
Int
;
::
BESelectorKind
:==
Int
;
::
BEUpdateKind
:==
Int
;
::
BESpecialIdentIndex
:==
Int
;
BEGetVersion
::
(!
Int
,!
Int
,!
Int
);
// void BEGetVersion (int* current,int* oldestDefinition,int* oldestImplementation);
BEInit
::
!
Int
!
UWorld
->
(!
BackEnd
,!
UWorld
);
...
...
@@ -47,6 +48,10 @@ BEArg :: !String !BackEnd -> BackEnd;
// void BEArg (CleanString arg);
BEDeclareModules
::
!
Int
!
BackEnd
->
BackEnd
;
// void BEDeclareModules (int nModules);
BEBindSpecialModule
::
!
BESpecialIdentIndex
!
Int
!
BackEnd
->
BackEnd
;
// void BEBindSpecialModule (BESpecialIdentIndex index,int moduleIndex);
BEBindSpecialFunction
::
!
BESpecialIdentIndex
!
Int
!
Int
!
BackEnd
->
BackEnd
;
// void BEBindSpecialFunction (BESpecialIdentIndex index,int functionIndex,int moduleIndex);
BESpecialArrayFunctionSymbol
::
!
BEArrayFunKind
!
Int
!
Int
!
BackEnd
->
(!
BESymbolP
,!
BackEnd
);
// BESymbolP BESpecialArrayFunctionSymbol (BEArrayFunKind arrayFunKind,int functionIndex,int moduleIndex);
BEDictionarySelectFunSymbol
::
!
BackEnd
->
(!
BESymbolP
,!
BackEnd
);
...
...
@@ -279,9 +284,9 @@ BEDeclareDynamicTypeSymbol :: !Int !Int !BackEnd -> BackEnd;
// void BEDeclareDynamicTypeSymbol (int typeIndex,int moduleIndex);
BEDynamicTempTypeSymbol
::
!
BackEnd
->
(!
BESymbolP
,!
BackEnd
);
// BESymbolP BEDynamicTempTypeSymbol ();
kBEVersionCurrent
:==
0x0200021
4
;
kBEVersionCurrent
:==
0x0200021
5
;
kBEVersionOldestDefinition
:==
0x02000213
;
kBEVersionOldestImplementation
:==
0x0200021
4
;
kBEVersionOldestImplementation
:==
0x0200021
5
;
kBEDebug
:==
1
;
kPredefinedModuleIndex
:==
1
;
BENoAnnot
:==
0
;
...
...
@@ -354,6 +359,13 @@ BESelector_N:==5;
BEUpdateDummy
:==
0
;
BEUpdate
:==
1
;
BEUpdate_U
:==
2
;
BESpecialIdentStdMisc
:==
0
;
BESpecialIdentAbort
:==
1
;
BESpecialIdentUndef
:==
2
;
BESpecialIdentStdBool
:==
3
;
BESpecialIdentAnd
:==
4
;
BESpecialIdentOr
:==
5
;
BESpecialIdentCount
:==
6
;
BELhsNodeId
:==
0
;
BERhsNodeId
:==
1
;
BEIsNotACaf
:==
0
;
...
...
backend/backend.icl
View file @
5c8aeef4
...
...
@@ -37,6 +37,7 @@ from StdString import String;
::
BEArrayFunKind
:==
Int
;
::
BESelectorKind
:==
Int
;
::
BEUpdateKind
:==
Int
;
::
BESpecialIdentIndex
:==
Int
;
BEGetVersion
::
(!
Int
,!
Int
,!
Int
);
BEGetVersion
=
code {
...
...
@@ -68,6 +69,18 @@ BEDeclareModules a0 a1 = code {
}
;
// void BEDeclareModules (int nModules);
BEBindSpecialModule
::
!
BESpecialIdentIndex
!
Int
!
BackEnd
->
BackEnd
;
BEBindSpecialModule
a0
a1
a2
=
code {
ccall
BEBindSpecialModule
"II:V:I"
}
;
// void BEBindSpecialModule (BESpecialIdentIndex index,int moduleIndex);
BEBindSpecialFunction
::
!
BESpecialIdentIndex
!
Int
!
Int
!
BackEnd
->
BackEnd
;
BEBindSpecialFunction
a0
a1
a2
a3
=
code {
ccall
BEBindSpecialFunction
"III:V:I"
}
;
// void BEBindSpecialFunction (BESpecialIdentIndex index,int functionIndex,int moduleIndex);
BESpecialArrayFunctionSymbol
::
!
BEArrayFunKind
!
Int
!
Int
!
BackEnd
->
(!
BESymbolP
,!
BackEnd
);
BESpecialArrayFunctionSymbol
a0
a1
a2
a3
=
code {
ccall
BESpecialArrayFunctionSymbol
"III:I:I"
...
...
@@ -763,9 +776,9 @@ BEDynamicTempTypeSymbol a0 = code {
ccall
BEDynamicTempTypeSymbol
":I:I"
}
;
// BESymbolP BEDynamicTempTypeSymbol ();
kBEVersionCurrent
:==
0x0200021
4
;
kBEVersionCurrent
:==
0x0200021
5
;
kBEVersionOldestDefinition
:==
0x02000213
;
kBEVersionOldestImplementation
:==
0x0200021
4
;
kBEVersionOldestImplementation
:==
0x0200021
5
;
kBEDebug
:==
1
;
kPredefinedModuleIndex
:==
1
;
BENoAnnot
:==
0
;
...
...
@@ -838,6 +851,13 @@ BESelector_N:==5;
BEUpdateDummy
:==
0
;
BEUpdate
:==
1
;
BEUpdate_U
:==
2
;
BESpecialIdentStdMisc
:==
0
;
BESpecialIdentAbort
:==
1
;
BESpecialIdentUndef
:==
2
;
BESpecialIdentStdBool
:==
3
;
BESpecialIdentAnd
:==
4
;
BESpecialIdentOr
:==
5
;
BESpecialIdentCount
:==
6
;
BELhsNodeId
:==
0
;
BERhsNodeId
:==
1
;
BEIsNotACaf
:==
0
;
...
...
backend/backendconvert.icl
View file @
5c8aeef4
...
...
@@ -363,6 +363,10 @@ beNoUniVarEquations
:==
beFunction0
BENoUniVarEquations
beUniVarEquationsList
:==
beFunction2
BEUniVarEquationsList
beBindSpecialModule
specialIdentIndex
moduleIndex
:==
beApFunction0
(
BEBindSpecialModule
specialIdentIndex
moduleIndex
)
beBindSpecialFunction
specialIdentIndex
functionIndex
moduleIndex
:==
beApFunction0
(
BEBindSpecialFunction
specialIdentIndex
functionIndex
moduleIndex
)
// temporary hack
beDynamicTempTypeSymbol
...
...
@@ -483,6 +487,7 @@ backEndConvertModulesH predefs {fe_icl =
with
dcl_common
=
currentDcl
.
dcl_common
#
backEnd
=
bindSpecialIdents
predefs
icl_used_module_numbers
backEnd
#!
backEnd
=
removeExpandedTypesFromDclModules
fe_dcls
icl_used_module_numbers
backEnd
=
(
backEnd
-*->
"backend done"
)
where
...
...
@@ -1076,6 +1081,47 @@ predefineSymbols {dcl_common} predefs
// ... sanity check
=
appBackEnd
(
BEPredefineConstructorSymbol
arity
predefs
.[
index
].
pds_def
cPredefinedModuleIndex
symbolKind
)
bindSpecialIdents
::
PredefinedSymbols
NumberSet
->
BackEnder
bindSpecialIdents
predefs
usedModules
=
foldState
(
bindSpecialModule
predefs
usedModules
)
specialModules
where
bindSpecialModule
::
PredefinedSymbols
NumberSet
(
Int
,
BESpecialIdentIndex
,
[(
Int
,
BESpecialIdentIndex
)])
->
BackEnder
bindSpecialModule
predefs
usedModules
(
predefIndex
,
specialIdentIndex
,
specialFunctions
)
|
moduleIndex
==
NoIndex
||
not
(
inNumberSet
moduleIndex
usedModules
)
=
identity
// otherwise
=
beBindSpecialModule
specialIdentIndex
moduleIndex
o`
foldState
(
bindSpecialFunction
predefs
)
specialFunctions
where
predef
=
predefs
.[
predefIndex
]
moduleIndex
=
predef
.
pds_def
bindSpecialFunction
::
PredefinedSymbols
(
Int
,
BESpecialIdentIndex
)
->
BackEnder
bindSpecialFunction
predefs
(
predefIndex
,
specialIdentIndex
)
|
predef
.
pds_def
==
NoIndex
=
identity
// otherwise
=
beBindSpecialFunction
specialIdentIndex
predef
.
pds_def
predef
.
pds_module
where
predef
=
predefs
.[
predefIndex
]
specialModules
=
[
(
PD_StdMisc
,
BESpecialIdentStdMisc
,
[
(
PD_abort
,
BESpecialIdentAbort
)
,
(
PD_undef
,
BESpecialIdentUndef
)
]
)
,
(
PD_StdBool
,
BESpecialIdentStdBool
,
[
(
PD_AndOp
,
BESpecialIdentAnd
)
,
(
PD_OrOp
,
BESpecialIdentOr
)
]
)
]
adjustStrictListFunctions
::
[
Int
]
[
Int
]
{#
PredefinedSymbol
}
{#
DclModule
}
NumberSet
Int
*
BackEndState
->
*
BackEndState
;
adjustStrictListFunctions
list_first_instance_indices
tail_strict_list_first_instance_indices
predefs
dcls
used_module_numbers
main_dcl_module_n
backEnd
|
std_strict_list_module_index
==
NoIndex
||
not
(
inNumberSet
std_strict_list_module_index
used_module_numbers
)
...
...
backendC/CleanCompilerSources/backend.c
View file @
5c8aeef4
...
...
@@ -170,6 +170,9 @@ static SymbolP gTupleSelectSymbols [MaxNodeArity];
static
int
number_of_node_ids
=
0
;
typedef
IdentP
*
IdentH
;
static
IdentH
gSpecialIdents
[
BESpecialIdentCount
];
static
IdentP
Identifier
(
char
*
name
)
{
...
...
@@ -536,6 +539,37 @@ GetArrayFunctionType (SymbDefP sdef, TypeNode *elementTypeP, TypeNode *arrayType
}
}
/* GetArrayFunctionType */
void
BEBindSpecialModule
(
BESpecialIdentIndex
index
,
int
moduleIndex
)
{
BEModuleP
module
;
Assert
(
index
>=
0
&&
index
<
BESpecialIdentCount
);
Assert
((
unsigned
int
)
moduleIndex
<
gBEState
.
be_nModules
);
module
=
&
gBEState
.
be_modules
[
moduleIndex
];
(
*
gSpecialIdents
[
index
])
->
ident_name
=
module
->
bem_name
;
}
/* BEBindSpecialModule */
void
BEBindSpecialFunction
(
BESpecialIdentIndex
index
,
int
functionIndex
,
int
moduleIndex
)
{
SymbolP
functionSymbol
;
BEModuleP
module
;
Assert
(
index
>=
0
&&
index
<
BESpecialIdentCount
);
Assert
((
unsigned
int
)
moduleIndex
<
gBEState
.
be_nModules
);
module
=
&
gBEState
.
be_modules
[
moduleIndex
];
Assert
((
unsigned
int
)
functionIndex
<
module
->
bem_nFunctions
);
functionSymbol
=
&
module
->
bem_functions
[
functionIndex
];
if
(
functionSymbol
->
symb_kind
==
definition
)
*
gSpecialIdents
[
index
]
=
functionSymbol
->
symb_def
->
sdef_ident
;
}
/* BEBindSpecialFunction */
BESymbolP
BESpecialArrayFunctionSymbol
(
BEArrayFunKind
arrayFunKind
,
int
functionIndex
,
int
moduleIndex
)
{
...
...
@@ -3522,7 +3556,6 @@ BEInit (int argc)
/* +++ remove symbol table from backend */
ScanInitIdentStringTable
();
InitScanner
();
/* for inlining */
DeltaBId
=
Identifier
(
"StdBool"
);
ApplyId
=
Identifier
(
"AP"
);
ListId
=
Identifier
(
"List"
);
TupleId
=
Identifier
(
"Tuple"
);
...
...
@@ -3535,6 +3568,23 @@ BEInit (int argc)
DynamicId
=
Identifier
(
"Dynamic"
);
#endif
#if SA_RECOGNIZES_ABORT_AND_UNDEF
StdMiscId
=
Identifier
(
"StdMisc"
);
abort_id
=
NULL
;
undef_id
=
NULL
;
gSpecialIdents
[
BESpecialIdentStdMisc
]
=
&
StdMiscId
;
gSpecialIdents
[
BESpecialIdentAbort
]
=
&
abort_id
;
gSpecialIdents
[
BESpecialIdentUndef
]
=
&
undef_id
;
#endif
DeltaBId
=
Identifier
(
"StdBool"
);
AndId
=
NULL
;
OrId
=
NULL
;
gSpecialIdents
[
BESpecialIdentStdBool
]
=
&
DeltaBId
;
gSpecialIdents
[
BESpecialIdentAnd
]
=
&
AndId
;
gSpecialIdents
[
BESpecialIdentOr
]
=
&
OrId
;
UserDefinedArrayFunctions
=
NULL
;
#if STRICT_LISTS
unboxed_record_cons_list
=
NULL
;
...
...
backendC/CleanCompilerSources/backend.h
View file @
5c8aeef4
/* version info */
// increment this for every release
# define kBEVersionCurrent 0x0200021
4
# define kBEVersionCurrent 0x0200021
5
// change this to the same value as kBEVersionCurrent if the new release is
not
// upward compatible (for example when a function is added)
// change this to the same value as kBEVersionCurrent if the new release is
//
not
upward compatible (for example when a function is added)
# define kBEVersionOldestDefinition 0x02000213
// change this to the same value as kBEVersionCurrent if the new release is
not
// downward compatible (for example when a function is removed)
# define kBEVersionOldestImplementation 0x0200021
4
// change this to the same value as kBEVersionCurrent if the new release is
//
not
downward compatible (for example when a function is removed)
# define kBEVersionOldestImplementation 0x0200021
5
# define kBEDebug 1
...
...
@@ -161,7 +161,15 @@ enum {
BEUpdateDummy
,
BEUpdate
,
BEUpdate_U
};
typedef
int
BESpecialIdentIndex
;
Clean
(
::
BESpecialIdentIndex
:==
Int
)
enum
{
/* StdMisc */
BESpecialIdentStdMisc
,
BESpecialIdentAbort
,
BESpecialIdentUndef
,
BESpecialIdentStdBool
,
BESpecialIdentAnd
,
BESpecialIdentOr
,
BESpecialIdentCount
};
/* functions */
void
BEGetVersion
(
int
*
current
,
int
*
oldestDefinition
,
int
*
oldestImplementation
);
...
...
@@ -179,6 +187,12 @@ Clean (BEArg :: String BackEnd -> BackEnd)
void
BEDeclareModules
(
int
nModules
);
Clean
(
BEDeclareModules
::
Int
BackEnd
->
BackEnd
)
void
BEBindSpecialModule
(
BESpecialIdentIndex
index
,
int
moduleIndex
);
Clean
(
BEBindSpecialModule
::
BESpecialIdentIndex
Int
BackEnd
->
BackEnd
)
void
BEBindSpecialFunction
(
BESpecialIdentIndex
index
,
int
functionIndex
,
int
moduleIndex
);
Clean
(
BEBindSpecialFunction
::
BESpecialIdentIndex
Int
Int
BackEnd
->
BackEnd
)
BESymbolP
BESpecialArrayFunctionSymbol
(
BEArrayFunKind
arrayFunKind
,
int
functionIndex
,
int
moduleIndex
);
Clean
(
BESpecialArrayFunctionSymbol
::
BEArrayFunKind
Int
Int
BackEnd
->
(
BESymbolP
,
BackEnd
))
...
...
backendC/CleanCompilerSources/compiledefines.h
View file @
5c8aeef4
...
...
@@ -18,7 +18,7 @@
#define WRITE_DCL_MODIFICATION_TIME 1
#define SA_RECOGNIZES_ABORT_AND_UNDEF
0
#define SA_RECOGNIZES_ABORT_AND_UNDEF
1
#define STRICT_LISTS 1
...
...
coclmaindll/backend.dll
View file @
5c8aeef4
No preview for this file type
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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