1 #include <msp/strings/format.h>
11 Statement::Statement(const string &kw):
14 control(!kw.compare(0, 2, "__"))
17 string Statement::get_location() const
19 string result = source;
21 result += format(":%d", line);
25 string Statement::get_signature() const
28 for(const Value &a: args)
29 result += a.get_signature();
33 Statement &Statement::append_from_token(const Token &token)
35 if(token.type==Token::INTEGER)
36 return append(lexical_cast<IntType::Store>(token.str, Fmt().autobase()));
37 else if(token.type==Token::FLOAT)
38 return append(lexical_cast<FloatType::Store>(token.str));
39 else if(token.type==Token::STRING)
40 return append(token.str);
41 else if(token.type==Token::IDENTIFIER)
45 else if(token.str=="false")
48 return append(Value(Symbol(token.str)));
51 throw invalid_argument("Statement::append_from_token");
55 StatementInfo::StatementInfo(const string &k, const string &s):
59 for(char c: key.signature)
61 arg_offsets.push_back(args_size);
64 case IntType::signature:
65 args_size += sizeof(IntType::Store);
67 case FloatType::signature:
68 args_size += sizeof(FloatType::Store);
70 case BoolType::signature:
71 args_size += sizeof(BoolType::Store);
73 case StringType::signature:
74 args_size += sizeof(StringType::Store);
76 case SymbolType::signature:
77 args_size += sizeof(SymbolType::Store);
83 } // namespace DataFile