]> git.tdb.fi Git - libs/datafile.git/blobdiff - source/statement.cpp
Move token-to-argument conversion to Statement
[libs/datafile.git] / source / statement.cpp
index b1ff05826e314441fd3e93ced8c5117f295b5824..9dfb54421a47c6f041b344cc175a6c67e232f43c 100644 (file)
@@ -1,5 +1,6 @@
 #include <msp/strings/format.h>
 #include "statement.h"
+#include "token.h"
 #include "type.h"
 
 using namespace std;
@@ -36,6 +37,27 @@ string Statement::get_signature() const
        return result;
 }
 
+Statement &Statement::append_from_token(const Token &token)
+{
+       if(token.type==Token::INTEGER)
+               return append(lexical_cast<IntType::Store>(token.str));
+       else if(token.type==Token::FLOAT)
+               return append(lexical_cast<FloatType::Store>(token.str));
+       else if(token.type==Token::STRING)
+               return append(token.str);
+       else if(token.type==Token::IDENTIFIER)
+       {
+               if(token.str=="true")
+                       return append(true);
+               else if(token.str=="false")
+                       return append(false);
+               else
+                       return append(Symbol(token.str));
+       }
+       else
+               throw invalid_argument("Statement::append_from_token");
+}
+
 
 StatementInfo::StatementInfo():
        args_size(0)