mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-06 04:31:08 +00:00
For PR645:
Keep track of global constant and variable definitions for eventual use in resolving conflicts between global and local symbol usage. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32234 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9eef56f532
commit
999b2df114
@ -60,6 +60,12 @@ struct TypeInfo {
|
|||||||
|
|
||||||
void destroy() const { delete newTy; }
|
void destroy() const { delete newTy; }
|
||||||
|
|
||||||
|
TypeInfo clone() const {
|
||||||
|
TypeInfo result = *this;
|
||||||
|
result.newTy = new std::string(*newTy);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
Types getElementType() const { return elemTy; }
|
Types getElementType() const { return elemTy; }
|
||||||
|
|
||||||
bool isSigned() const {
|
bool isSigned() const {
|
||||||
|
@ -39,6 +39,7 @@ typedef std::vector<TypeInfo> TypeVector;
|
|||||||
static TypeVector EnumeratedTypes;
|
static TypeVector EnumeratedTypes;
|
||||||
typedef std::map<std::string,TypeInfo> TypeMap;
|
typedef std::map<std::string,TypeInfo> TypeMap;
|
||||||
static TypeMap NamedTypes;
|
static TypeMap NamedTypes;
|
||||||
|
static TypeMap Globals;
|
||||||
|
|
||||||
void destroy(ValueList* VL) {
|
void destroy(ValueList* VL) {
|
||||||
while (!VL->empty()) {
|
while (!VL->empty()) {
|
||||||
@ -777,29 +778,37 @@ ConstPool : ConstPool OptAssign TYPE TypesV {
|
|||||||
$$ = 0;
|
$$ = 0;
|
||||||
}
|
}
|
||||||
| ConstPool OptAssign OptLinkage GlobalType ConstVal GlobalVarAttributes {
|
| ConstPool OptAssign OptLinkage GlobalType ConstVal GlobalVarAttributes {
|
||||||
if (!$2->empty())
|
if (!$2->empty()) {
|
||||||
*O << *$2 << " = ";
|
*O << *$2 << " = ";
|
||||||
|
Globals[*$2] = $5.type.clone();
|
||||||
|
}
|
||||||
*O << *$3 << " " << *$4 << " " << *$5.cnst << " " << *$6 << "\n";
|
*O << *$3 << " " << *$4 << " " << *$5.cnst << " " << *$6 << "\n";
|
||||||
delete $2; delete $3; delete $4; $5.destroy(); delete $6;
|
delete $2; delete $3; delete $4; $5.destroy(); delete $6;
|
||||||
$$ = 0;
|
$$ = 0;
|
||||||
}
|
}
|
||||||
| ConstPool OptAssign External GlobalType Types GlobalVarAttributes {
|
| ConstPool OptAssign External GlobalType Types GlobalVarAttributes {
|
||||||
if (!$2->empty())
|
if (!$2->empty()) {
|
||||||
*O << *$2 << " = ";
|
*O << *$2 << " = ";
|
||||||
|
Globals[*$2] = $5.clone();
|
||||||
|
}
|
||||||
*O << *$3 << " " << *$4 << " " << *$5.newTy << " " << *$6 << "\n";
|
*O << *$3 << " " << *$4 << " " << *$5.newTy << " " << *$6 << "\n";
|
||||||
delete $2; delete $3; delete $4; $5.destroy(); delete $6;
|
delete $2; delete $3; delete $4; $5.destroy(); delete $6;
|
||||||
$$ = 0;
|
$$ = 0;
|
||||||
}
|
}
|
||||||
| ConstPool OptAssign DLLIMPORT GlobalType Types GlobalVarAttributes {
|
| ConstPool OptAssign DLLIMPORT GlobalType Types GlobalVarAttributes {
|
||||||
if (!$2->empty())
|
if (!$2->empty()) {
|
||||||
*O << *$2 << " = ";
|
*O << *$2 << " = ";
|
||||||
|
Globals[*$2] = $5.clone();
|
||||||
|
}
|
||||||
*O << *$3 << " " << *$4 << " " << *$5.newTy << " " << *$6 << "\n";
|
*O << *$3 << " " << *$4 << " " << *$5.newTy << " " << *$6 << "\n";
|
||||||
delete $2; delete $3; delete $4; $5.destroy(); delete $6;
|
delete $2; delete $3; delete $4; $5.destroy(); delete $6;
|
||||||
$$ = 0;
|
$$ = 0;
|
||||||
}
|
}
|
||||||
| ConstPool OptAssign EXTERN_WEAK GlobalType Types GlobalVarAttributes {
|
| ConstPool OptAssign EXTERN_WEAK GlobalType Types GlobalVarAttributes {
|
||||||
if (!$2->empty())
|
if (!$2->empty()) {
|
||||||
*O << *$2 << " = ";
|
*O << *$2 << " = ";
|
||||||
|
Globals[*$2] = $5.clone();
|
||||||
|
}
|
||||||
*O << *$3 << " " << *$4 << " " << *$5.newTy << " " << *$6 << "\n";
|
*O << *$3 << " " << *$4 << " " << *$5.newTy << " " << *$6 << "\n";
|
||||||
delete $2; delete $3; delete $4; $5.destroy(); delete $6;
|
delete $2; delete $3; delete $4; $5.destroy(); delete $6;
|
||||||
$$ = 0;
|
$$ = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user