mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-22 10:24:26 +00:00
Make VarInit Name an Init
Make the VarInit name an Init itself. We need this to implement paste functionality so we can reference variables whose names are not yet completely resolved. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@142497 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -1058,9 +1058,11 @@ public:
|
|||||||
/// VarInit - 'Opcode' - Represent a reference to an entire variable object.
|
/// VarInit - 'Opcode' - Represent a reference to an entire variable object.
|
||||||
///
|
///
|
||||||
class VarInit : public TypedInit {
|
class VarInit : public TypedInit {
|
||||||
std::string VarName;
|
Init *VarName;
|
||||||
|
|
||||||
explicit VarInit(const std::string &VN, RecTy *T)
|
explicit VarInit(const std::string &VN, RecTy *T)
|
||||||
|
: TypedInit(T), VarName(StringInit::get(VN)) {}
|
||||||
|
explicit VarInit(Init *VN, RecTy *T)
|
||||||
: TypedInit(T), VarName(VN) {}
|
: TypedInit(T), VarName(VN) {}
|
||||||
|
|
||||||
VarInit(const VarInit &Other); // Do not define.
|
VarInit(const VarInit &Other); // Do not define.
|
||||||
@ -1074,7 +1076,11 @@ public:
|
|||||||
return Ty->convertValue(const_cast<VarInit *>(this));
|
return Ty->convertValue(const_cast<VarInit *>(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string &getName() const { return VarName; }
|
const std::string &getName() const;
|
||||||
|
Init *getNameInit() const { return VarName; }
|
||||||
|
std::string getNameInitAsString() const {
|
||||||
|
return getNameInit()->getAsUnquotedString();
|
||||||
|
}
|
||||||
|
|
||||||
virtual Init *resolveBitReference(Record &R, const RecordVal *RV,
|
virtual Init *resolveBitReference(Record &R, const RecordVal *RV,
|
||||||
unsigned Bit) const;
|
unsigned Bit) const;
|
||||||
@ -1092,7 +1098,7 @@ public:
|
|||||||
///
|
///
|
||||||
virtual Init *resolveReferences(Record &R, const RecordVal *RV) const;
|
virtual Init *resolveReferences(Record &R, const RecordVal *RV) const;
|
||||||
|
|
||||||
virtual std::string getAsString() const { return VarName; }
|
virtual std::string getAsString() const { return getName(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -1298,7 +1298,12 @@ TypedInit::convertInitListSlice(const std::vector<unsigned> &Elements) const {
|
|||||||
|
|
||||||
|
|
||||||
VarInit *VarInit::get(const std::string &VN, RecTy *T) {
|
VarInit *VarInit::get(const std::string &VN, RecTy *T) {
|
||||||
typedef std::pair<RecTy *, TableGenStringKey> Key;
|
Init *Value = StringInit::get(VN);
|
||||||
|
return VarInit::get(Value, T);
|
||||||
|
}
|
||||||
|
|
||||||
|
VarInit *VarInit::get(Init *VN, RecTy *T) {
|
||||||
|
typedef std::pair<RecTy *, Init *> Key;
|
||||||
typedef DenseMap<Key, VarInit *> Pool;
|
typedef DenseMap<Key, VarInit *> Pool;
|
||||||
static Pool ThePool;
|
static Pool ThePool;
|
||||||
|
|
||||||
@ -1309,6 +1314,13 @@ VarInit *VarInit::get(const std::string &VN, RecTy *T) {
|
|||||||
return I;
|
return I;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const std::string &VarInit::getName() const {
|
||||||
|
StringInit *NameString =
|
||||||
|
dynamic_cast<StringInit *>(getNameInit());
|
||||||
|
assert(NameString && "VarInit name is not a string!");
|
||||||
|
return NameString->getValue();
|
||||||
|
}
|
||||||
|
|
||||||
Init *VarInit::resolveBitReference(Record &R, const RecordVal *IRV,
|
Init *VarInit::resolveBitReference(Record &R, const RecordVal *IRV,
|
||||||
unsigned Bit) const {
|
unsigned Bit) const {
|
||||||
if (R.isTemplateArg(getName())) return 0;
|
if (R.isTemplateArg(getName())) return 0;
|
||||||
|
Reference in New Issue
Block a user