aboutsummaryrefslogtreecommitdiffstats
path: root/tuplr.hpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2009-03-07 02:03:33 +0000
committerDavid Robillard <d@drobilla.net>2009-03-07 02:03:33 +0000
commit76a2dc8afc2e59e2927cacb7270e28943ec9841d (patch)
tree014c7f15ad4cb9609e9466271e0f23cf0555f345 /tuplr.hpp
parentd2c34198db88c8ffdf9a9352825a71c85a00c26e (diff)
downloadresp-76a2dc8afc2e59e2927cacb7270e28943ec9841d.tar.gz
resp-76a2dc8afc2e59e2927cacb7270e28943ec9841d.tar.bz2
resp-76a2dc8afc2e59e2927cacb7270e28943ec9841d.zip
Fancy varargs AType constructor.
git-svn-id: http://svn.drobilla.net/resp/tuplr@69 ad02d1e2-f140-0410-9f75-f8b11f17cedd
Diffstat (limited to 'tuplr.hpp')
-rw-r--r--tuplr.hpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/tuplr.hpp b/tuplr.hpp
index 54f48b2..a906743 100644
--- a/tuplr.hpp
+++ b/tuplr.hpp
@@ -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();