diff options
author | Chris Lattner <sabre@nondot.org> | 2003-07-30 04:05:07 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2003-07-30 04:05:07 +0000 |
commit | 9b929aa7495ee0b5d389370baeb332456632b2fe (patch) | |
tree | 17c280b87bbfaba4c971b13ef60d393d821a2dc2 /utils/TableGen/Record.cpp | |
parent | ee6b5f69bdc639e6e71d6cbcbe17356573b3f335 (diff) | |
download | external_llvm-9b929aa7495ee0b5d389370baeb332456632b2fe.zip external_llvm-9b929aa7495ee0b5d389370baeb332456632b2fe.tar.gz external_llvm-9b929aa7495ee0b5d389370baeb332456632b2fe.tar.bz2 |
Implement resolution of variables to the value of the variable once it gets a value
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7406 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen/Record.cpp')
-rw-r--r-- | utils/TableGen/Record.cpp | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/utils/TableGen/Record.cpp b/utils/TableGen/Record.cpp index 2aabef4..72c5a23 100644 --- a/utils/TableGen/Record.cpp +++ b/utils/TableGen/Record.cpp @@ -215,6 +215,9 @@ bool BitsInit::printAsUnset(std::ostream &OS) const { return false; } +// resolveReferences - If there are any field references that refer to fields +// that have been filled in, we can propagate the values now. +// Init *BitsInit::resolveReferences(Record &R) { bool Changed = false; BitsInit *New = new BitsInit(getNumBits()); @@ -309,7 +312,18 @@ Init *VarInit::getFieldInit(Record &R, const std::string &FieldName) const { return 0; } - +/// resolveReferences - This method is used by classes that refer to other +/// variables which may not be defined at the time they expression is formed. +/// If a value is set for the variable later, this method will be called on +/// users of the value to allow the value to propagate out. +/// +Init *VarInit::resolveReferences(Record &R) { + if (RecordVal *Val = R.getValue(VarName)) + if (!dynamic_cast<UnsetInit*>(Val->getValue())) + return Val->getValue(); + return this; +} + Init *VarBitInit::resolveReferences(Record &R) { Init *I = getVariable()->resolveBitReference(R, getBitNum()); |