diff options
Diffstat (limited to 'tuplr.hpp')
-rw-r--r-- | tuplr.hpp | 10 |
1 files changed, 8 insertions, 2 deletions
@@ -136,9 +136,11 @@ struct ASTTuple : public AST, public vector<AST*> { ASTTuple(const vector<AST*>& t=vector<AST*>(), Cursor c=Cursor()) : AST(c), vector<AST*>(t) {} ASTTuple(size_t size, Cursor c) : AST(c), vector<AST*>(size) {} ASTTuple(AST* ast, ...) { + va_list args; va_start(args, ast); + init(ast, args); + } + void init(AST* ast, va_list args) { push_back(ast); - va_list args; - va_start(args, ast); for (AST* a = va_arg(args, AST*); a; a = va_arg(args, AST*)) push_back(a); va_end(args); @@ -178,6 +180,10 @@ struct AType : public ASTTuple { AType(unsigned i, Cursor c=Cursor()) : ASTTuple(0, c), kind(VAR), id(i) {} AType(ASTSymbol* s) : ASTTuple(0, s->loc), kind(PRIM), id(0) { push_back(s); } AType(const ASTTuple& t, Cursor c) : ASTTuple(t, c), kind(EXPR), id(0) {} + AType(Cursor c, AST* ast, ...) : ASTTuple(0, c) { + va_list args; va_start(args, ast); + init(ast, args); + } string str() const { switch (kind) { case VAR: return (format("?%1%") % id).str(); |