mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-25 16:24:23 +00:00
Don't pollute the namespace with template arguments after they have been resolved
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7410 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -409,9 +409,9 @@ ObjectBody : OptID {
|
|||||||
} OptTemplateArgList ClassList {
|
} OptTemplateArgList ClassList {
|
||||||
for (unsigned i = 0, e = $4->size(); i != e; ++i) {
|
for (unsigned i = 0, e = $4->size(); i != e; ++i) {
|
||||||
addSubClass((*$4)[i].first, *(*$4)[i].second);
|
addSubClass((*$4)[i].first, *(*$4)[i].second);
|
||||||
delete (*$4)[i].second; // Delete the template list
|
// Delete the template arg values for the class
|
||||||
}
|
delete (*$4)[i].second;
|
||||||
delete $4;
|
}
|
||||||
|
|
||||||
// Process any variables on the set stack...
|
// Process any variables on the set stack...
|
||||||
for (unsigned i = 0, e = SetStack.size(); i != e; ++i)
|
for (unsigned i = 0, e = SetStack.size(); i != e; ++i)
|
||||||
@ -419,6 +419,17 @@ ObjectBody : OptID {
|
|||||||
SetStack[i].second);
|
SetStack[i].second);
|
||||||
} Body {
|
} Body {
|
||||||
CurRec->resolveReferences();
|
CurRec->resolveReferences();
|
||||||
|
|
||||||
|
// Now that all of the references have been resolved, we can delete template
|
||||||
|
// arguments for superclasses, so they don't pollute our record, and so that
|
||||||
|
// their names won't conflict with later uses of the name...
|
||||||
|
for (unsigned i = 0, e = $4->size(); i != e; ++i) {
|
||||||
|
Record *SuperClass = (*$4)[i].first;
|
||||||
|
for (unsigned i = 0, e = SuperClass->getTemplateArgs().size(); i != e; ++i)
|
||||||
|
CurRec->removeValue(SuperClass->getTemplateArgs()[i]);
|
||||||
|
}
|
||||||
|
delete $4; // Delete the class list...
|
||||||
|
|
||||||
$$ = CurRec;
|
$$ = CurRec;
|
||||||
CurRec = 0;
|
CurRec = 0;
|
||||||
};
|
};
|
||||||
|
@ -536,6 +536,16 @@ public:
|
|||||||
Values.push_back(RV);
|
Values.push_back(RV);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void removeValue(const std::string &Name) {
|
||||||
|
assert(getValue(Name) && "Cannot remove an entry that does not exist!");
|
||||||
|
for (unsigned i = 0, e = Values.size(); i != e; ++i)
|
||||||
|
if (Values[i].getName() == Name) {
|
||||||
|
Values.erase(Values.begin()+i);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
assert(0 && "Name does not exist in record!");
|
||||||
|
}
|
||||||
|
|
||||||
bool isSubClassOf(Record *R) const {
|
bool isSubClassOf(Record *R) const {
|
||||||
for (unsigned i = 0, e = SuperClasses.size(); i != e; ++i)
|
for (unsigned i = 0, e = SuperClasses.size(); i != e; ++i)
|
||||||
if (SuperClasses[i] == R)
|
if (SuperClasses[i] == R)
|
||||||
|
@ -409,9 +409,9 @@ ObjectBody : OptID {
|
|||||||
} OptTemplateArgList ClassList {
|
} OptTemplateArgList ClassList {
|
||||||
for (unsigned i = 0, e = $4->size(); i != e; ++i) {
|
for (unsigned i = 0, e = $4->size(); i != e; ++i) {
|
||||||
addSubClass((*$4)[i].first, *(*$4)[i].second);
|
addSubClass((*$4)[i].first, *(*$4)[i].second);
|
||||||
delete (*$4)[i].second; // Delete the template list
|
// Delete the template arg values for the class
|
||||||
}
|
delete (*$4)[i].second;
|
||||||
delete $4;
|
}
|
||||||
|
|
||||||
// Process any variables on the set stack...
|
// Process any variables on the set stack...
|
||||||
for (unsigned i = 0, e = SetStack.size(); i != e; ++i)
|
for (unsigned i = 0, e = SetStack.size(); i != e; ++i)
|
||||||
@ -419,6 +419,17 @@ ObjectBody : OptID {
|
|||||||
SetStack[i].second);
|
SetStack[i].second);
|
||||||
} Body {
|
} Body {
|
||||||
CurRec->resolveReferences();
|
CurRec->resolveReferences();
|
||||||
|
|
||||||
|
// Now that all of the references have been resolved, we can delete template
|
||||||
|
// arguments for superclasses, so they don't pollute our record, and so that
|
||||||
|
// their names won't conflict with later uses of the name...
|
||||||
|
for (unsigned i = 0, e = $4->size(); i != e; ++i) {
|
||||||
|
Record *SuperClass = (*$4)[i].first;
|
||||||
|
for (unsigned i = 0, e = SuperClass->getTemplateArgs().size(); i != e; ++i)
|
||||||
|
CurRec->removeValue(SuperClass->getTemplateArgs()[i]);
|
||||||
|
}
|
||||||
|
delete $4; // Delete the class list...
|
||||||
|
|
||||||
$$ = CurRec;
|
$$ = CurRec;
|
||||||
CurRec = 0;
|
CurRec = 0;
|
||||||
};
|
};
|
||||||
|
@ -536,6 +536,16 @@ public:
|
|||||||
Values.push_back(RV);
|
Values.push_back(RV);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void removeValue(const std::string &Name) {
|
||||||
|
assert(getValue(Name) && "Cannot remove an entry that does not exist!");
|
||||||
|
for (unsigned i = 0, e = Values.size(); i != e; ++i)
|
||||||
|
if (Values[i].getName() == Name) {
|
||||||
|
Values.erase(Values.begin()+i);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
assert(0 && "Name does not exist in record!");
|
||||||
|
}
|
||||||
|
|
||||||
bool isSubClassOf(Record *R) const {
|
bool isSubClassOf(Record *R) const {
|
||||||
for (unsigned i = 0, e = SuperClasses.size(); i != e; ++i)
|
for (unsigned i = 0, e = SuperClasses.size(); i != e; ++i)
|
||||||
if (SuperClasses[i] == R)
|
if (SuperClasses[i] == R)
|
||||||
|
Reference in New Issue
Block a user