00001
00002
00003 #ifndef CALL_EXPR_H
00004 #define CALL_EXPR_H
00005
00006 #include "Expr.h"
00007 #include "CliArgList.h"
00008
00009 #include "Serializable.h"
00010
00011
00019 class CallExpr : public Expr {
00020 public:
00023 void eval(CliArgList *loop_vars, AData *return_value);
00024
00028 CallExpr(char *class_name, AData * arraysize);
00029
00033 CallExpr(char *class_name, CliArgList *args);
00034
00038 CallExpr(char *object_name, char *method_name, CliArgList *args);
00039
00041 virtual ~CallExpr();
00042
00043 private:
00045 enum {METHOD_CALL, CONSTRUCTOR_CALL, ARRAY_CALL_};
00047 int call_type;
00049 std::string class_name;
00051 std::string method_name;
00053 std::string object_name;
00055 CliArgList * args;
00056
00057
00058 protected:
00059 CallExpr() {}
00060 private:
00061 friend class boost::serialization::access;
00062 template<class Archive>
00063 void serialize(Archive & ar, const unsigned int version) {
00064 this->pre_serialize(ar, version);
00065 try {
00066 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Expr);
00067 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION;
00068 }
00069 try {
00070 ar & BOOST_SERIALIZATION_NVP(call_type);
00071 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION;
00072 }
00073 try {
00074 ar & BOOST_SERIALIZATION_NVP(class_name);
00075 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION;
00076 }
00077 try {
00078 ar & BOOST_SERIALIZATION_NVP(method_name);
00079 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION;
00080 }
00081 try {
00082 ar & BOOST_SERIALIZATION_NVP(object_name);
00083 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION;
00084 }
00085 try {
00086 ar & BOOST_SERIALIZATION_NVP(args);
00087 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION;
00088 }
00089 this->post_serialize(ar, version);
00090 }
00091
00092 };
00093
00094
00095 BIE_CLASS_TYPE_INFO(CallExpr)
00096 BIE_CLASS_EXPORT_KEY(CallExpr)
00097 #endif