diff options
author | David Greene <greened@obbligato.org> | 2011-10-19 13:02:33 +0000 |
---|---|---|
committer | David Greene <greened@obbligato.org> | 2011-10-19 13:02:33 +0000 |
commit | 914adf0ecb80d87dd5d42058c664c7684914d3b4 (patch) | |
tree | b18b3441fc54dcd7ca7dd4cb7e88d1de89858b54 /llvm/lib/TableGen | |
parent | 28438acd466111b0d67d1f26b8cc730d2180fc1e (diff) | |
download | bcm5719-llvm-914adf0ecb80d87dd5d42058c664c7684914d3b4.tar.gz bcm5719-llvm-914adf0ecb80d87dd5d42058c664c7684914d3b4.zip |
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.
llvm-svn: 142497
Diffstat (limited to 'llvm/lib/TableGen')
-rw-r--r-- | llvm/lib/TableGen/Record.cpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/llvm/lib/TableGen/Record.cpp b/llvm/lib/TableGen/Record.cpp index 06a41c9eb26..64975e46564 100644 --- a/llvm/lib/TableGen/Record.cpp +++ b/llvm/lib/TableGen/Record.cpp @@ -1298,7 +1298,12 @@ TypedInit::convertInitListSlice(const std::vector<unsigned> &Elements) const { 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; static Pool ThePool; @@ -1309,6 +1314,13 @@ VarInit *VarInit::get(const std::string &VN, RecTy *T) { 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, unsigned Bit) const { if (R.isTemplateArg(getName())) return 0; |