00001
00002
00003
00004
00005
00006
00007
00008 #ifndef FUNCTION_ADDRESS_EXPRESSION_H_
00009 #define FUNCTION_ADDRESS_EXPRESSION_H_
00010
00011 #include "expression.h"
00012
00013
00014 namespace il {
00015
00016
00017
00018
00019
00020
00021
00025 class function_address_expression: public il::expression {
00026 friend class boost::serialization::access;
00027
00028 template<class Archive>
00029 void save(Archive & ar, const unsigned int version) const
00030 {
00031 ar & boost::serialization::base_object<il::expression>(*this);
00032 ar & fn_name;
00033 ar & fn_signature;
00034 }
00035
00036 template<class Archive>
00037 void load(Archive & ar, const unsigned int version)
00038 {
00039 ar & boost::serialization::base_object<il::expression>(*this);
00040 ar & fn_name;
00041 ar & fn_signature;
00042 type::register_loaded_typeref(&fn_signature);
00043 }
00044
00045 BOOST_SERIALIZATION_SPLIT_MEMBER()
00046 private:
00047 string fn_name;
00048 type* fn_signature;
00049 public:
00050 function_address_expression();
00051 function_address_expression(string fn_name, type* fn_signature,
00052 type* t, location loc);
00053 virtual string to_string() const;
00054 virtual void print(){};
00055 virtual string get_function_name();
00056 virtual type* get_function_signature();
00057 virtual ~function_address_expression();
00058 };
00059
00060 }
00061
00062 #endif