Implement correct parsing, representation, and printing of DAG argument names

Implements testcase TableGen/TreeNames.td


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7713 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner
2003-08-10 22:14:13 +00:00
parent fb9ea58eb1
commit 91290d7e9a
8 changed files with 90 additions and 34 deletions

View File

@@ -591,9 +591,16 @@ public:
class DagInit : public Init {
Record *NodeTypeDef;
std::vector<Init*> Args;
std::vector<std::string> ArgNames;
public:
DagInit(Record *D, std::vector<Init*> &a) : NodeTypeDef(D) {
Args.swap(a); // DESTRUCTIVELY take the arguments
DagInit(Record *D, const std::vector<std::pair<Init*, std::string> > &args)
: NodeTypeDef(D) {
Args.reserve(args.size());
ArgNames.reserve(args.size());
for (unsigned i = 0, e = args.size(); i != e; ++i) {
Args.push_back(args[i].first);
ArgNames.push_back(args[i].second);
}
}
virtual Init *convertInitializerTo(RecTy *Ty) {
@@ -601,7 +608,16 @@ public:
}
Record *getNodeType() const { return NodeTypeDef; }
const std::vector<Init*> &getArgs() const { return Args; }
unsigned getNumArgs() const { return Args.size(); }
Init *getArg(unsigned Num) const {
assert(Num < Args.size() && "Arg number out of range!");
return Args[Num];
}
const std::string &getArgName(unsigned Num) const {
assert(Num < ArgNames.size() && "Arg number out of range!");
return ArgNames[Num];
}
virtual void print(std::ostream &OS) const;
};