1 #include <msp/strings/format.h>
11 Statement::Statement():
17 Statement::Statement(const string &kw):
20 control(!kw.compare(0, 2, "__")),
24 string Statement::get_location() const
26 string result = source;
28 result += format(":%d", line);
32 string Statement::get_signature() const
35 for(Arguments::const_iterator i = args.begin(); i!=args.end(); ++i)
36 result += i->get_signature();
40 Statement &Statement::append_from_token(const Token &token)
42 if(token.type==Token::INTEGER)
43 return append(lexical_cast<IntType::Store>(token.str));
44 else if(token.type==Token::FLOAT)
45 return append(lexical_cast<FloatType::Store>(token.str));
46 else if(token.type==Token::STRING)
47 return append(token.str);
48 else if(token.type==Token::IDENTIFIER)
52 else if(token.str=="false")
55 return append(Symbol(token.str));
58 throw invalid_argument("Statement::append_from_token");
62 StatementInfo::StatementInfo():
66 StatementInfo::StatementInfo(const string &k, const string &s):
70 for(string::const_iterator i=key.signature.begin(); i!=key.signature.end(); ++i)
72 arg_offsets.push_back(args_size);
75 case IntType::signature:
76 args_size += sizeof(IntType::Store);
78 case FloatType::signature:
79 args_size += sizeof(FloatType::Store);
81 case BoolType::signature:
82 args_size += sizeof(BoolType::Store);
84 case StringType::signature:
85 args_size += sizeof(StringType::Store);
87 case SymbolType::signature:
88 args_size += sizeof(SymbolType::Store);
94 } // namespace DataFile