class UniChar;
}
+namespace lexer {
+class Token;
+} // namespace lexer
+
namespace datum {
class Environment;
// ます。
class String : public Datum {
public:
- String(const lexer::Token& token, const unicode::UniString& string)
- : Datum(token),
- string_(new unicode::UniString(string)) {}
+ String(const lexer::Token& token, const unicode::UniString& string);
virtual ~String() {}
// このオブジェクトの文字列表現を返します。
// stringと同じく、symbolを構成する文字列のみを保持します。
class Symbol : public Datum {
public:
- Symbol(const lexer::Token& token, const unicode::UniString& symbol)
- : Datum(token),
- symbol_(new unicode::UniString(symbol)) {}
+ Symbol(const lexer::Token& token, const unicode::UniString& symbol);
virtual ~Symbol() {}
// このオブジェクトの文字列表現を返します。
class Charactor : public Datum {
public:
Charactor(const lexer::Token& token,
- const unicode::UniString& charactor_name,
- const unicode::UniChar& charactor)
- : Datum(token),
- charactor_(new unicode::UniChar(charactor)),
- charactor_name_(new unicode::UniString(charactor_name)) {}
+ const unicode::UniChar& charactor,
+ const unicode::UniString& charactor_name);
virtual ~Charactor() {}
// このオブジェクトの文字列表現を返します。
// そのように変更される場合があります。
class Boolean : public datum::Datum {
public:
- Boolean(const lexer::Token& token, const unicode::UniString& base, bool auth)
- : Datum(token),
- boolean_value_(auth), original_string_(new unicode::UniString(base)) {}
+ Boolean(const lexer::Token& token, bool auth);
virtual ~Boolean() {}
// このオブジェクトの文字列表現を返します。
// 真偽値を直接保存します。
bool boolean_value_;
-
- // 真偽値の文字列をそのまま保存します。
- akebono::scoped_ptr<unicode::UniString> original_string_;
};
// datum syntaxにおける<number>を表現します。
// そのように変更される場合があります。
class Number : public datum::Datum {
public:
- Number(const lexer::Token& token, const unicode::UniString& base, int number)
- : Datum(token),
- tmp_number_(number), original_string_(new unicode::UniString(base)) {}
+ Number(const lexer::Token& token, int number);
virtual ~Number() {}
// このオブジェクトの文字列表現を返します。
virtual datum::DatumType type() const {return datum::kNumber;}
- virtual const lexer::Token& GetBaseToken() const;
-
private:
// 数値オブジェクトを設定します。
int tmp_number_;
-
- // 真偽値の文字列をそのまま保存します。
- akebono::scoped_ptr<unicode::UniString> original_string_;
};
// compound datum内のlist>を構築するためのconsセルです。
// Consセル自体はいかなるデータも保存しません。
class Cons : public datum::Datum {
public:
- explicit Cons(const lexer::Token& token) : Datum(token) {}
+ explicit Cons(const lexer::Token& token);
virtual ~Cons() {}
// このオブジェクトの文字列表現を返します。
// しているのみとなります。
class Vector : public datum::Datum {
public:
- explicit Vector(const lexer::Token& token) : Datum(token) {}
+ explicit Vector(const lexer::Token& token);
virtual ~Vector() {}
// このオブジェクトの文字列表現を返します。
// 行いません。
class Bytevector : public datum::Datum {
public:
- explicit Bytevector(const lexer::Token& token)
- : Datum(token), datum_list_() {}
+ explicit Bytevector(const lexer::Token& token);
virtual ~Bytevector() {}
// このオブジェクトの文字列表現を返します。
virtual datum::IDatumBase* Eval(interpreter::Environment* env);
// 内部で保持しているdatumのvectorを返します。
- virtual const std::vector<akebono::smart_ptr<Datum> >& GetBytevector() const {
+ virtual const std::vector<akebono::smart_ptr<IDatumBase> >& GetBytevector() const {
return datum_list_;
}
// 渡されたvectorを設定します。
virtual void SetBytevector(
- const std::vector<akebono::smart_ptr<Datum> >& vector) {
+ const std::vector<akebono::smart_ptr<IDatumBase> >& vector) {
datum_list_ = vector;
}
// 内部に内包しているDatumのリストとなります。
// 内部に内包することが可能なのは、任意のdatumであるため、この時点
// では一意に確定はしません。
- std::vector<akebono::smart_ptr<Datum> > datum_list_;
+ std::vector<akebono::smart_ptr<IDatumBase> > datum_list_;
};
}