1 #ifndef _PRIMITIVE_UTIL_H_
2 #define _PRIMITIVE_UTIL_H_
18 namespace interpreter {
21 ///////////////////////////////////////////////
22 // implementation of create primitive object //
23 ///////////////////////////////////////////////
25 // 各プリミティブオブジェクトを生成するための各関数。
26 interpreter::IObject* makeCons(const data::Object& car,
27 const data::Object& cdr);
28 interpreter::IObject* makeNumber(const smart_ptr<unicode::UniString>& real,
29 const smart_ptr<unicode::UniString>& imagin,
30 bool exact, int radix);
31 interpreter::IObject* makeNil();
32 interpreter::IObject* makeString(const smart_ptr<unicode::UniString>& data);
33 interpreter::IObject* makeCharactor(const smart_ptr<unicode::UniChar>& data);
34 interpreter::IObject* makeBoolean(bool b);
35 interpreter::IObject* makeSymbol(const smart_ptr<unicode::UniString>& data);
36 interpreter::IObject* makeByteVector(const std::vector<data::Object>& vec);
37 interpreter::IObject* makeVector(const std::vector<data::Object>& vec);
39 // 各種abbreviationを作成する。
40 interpreter::IObject* makeQuote();
41 interpreter::IObject* makeBackQuote();
42 interpreter::IObject* makeQuote();
43 interpreter::IObject* makeUnquote();
44 interpreter::IObject* makeUnquoteSplicing();
45 interpreter::IObject* makeSyntax();
46 interpreter::IObject* makeQuasisyntax();
47 interpreter::IObject* makeUnsyntax();
48 interpreter::IObject* makeUnsyntaxSplicing();
53 static interpreter::IObject* make() {
58 // 各プリミティブオブジェクト専用のユーティリティ関数
60 // 渡されたconsのcdrに連なるオブジェクトの内、末尾であるオブジェクト
62 data::Object& getLastCons(data::Object& c);
64 // cの末尾に、渡されたdatを追加する。
65 // cがconsでは無い場合、例外を発生させる。
66 void concat(data::Object& c, const data::Object& dat);
68 }; // end of namespace util
72 #endif /* _PRIMITIVE_UTIL_H_ */