00001 #ifndef FUNCTION_POINTER_CALL_EXPRESSION_H_
00002 #define FUNCTION_POINTER_CALL_EXPRESSION_H_
00003 
00004 #include "expression.h"
00005 #include <vector>
00006 
00007 using namespace std;
00008 
00009 
00010 namespace il
00011 {
00015 class function_pointer_call_expression : public il::expression
00016 {
00017     friend class boost::serialization::access;
00018 
00019     template<class Archive>
00020     void serialize(Archive & ar, const unsigned int version)
00021     {
00022         ar & boost::serialization::base_object<il::expression>(*this);
00023         ar & fn_ptr;
00024         ar & args;
00025     }
00026 private:
00027         expression* fn_ptr;
00028         vector<expression*> args;
00029 
00030 
00031 public:
00032         function_pointer_call_expression();
00033         function_pointer_call_expression(expression* fn_ptr,
00034                         vector<expression*> args, type* t, location loc);
00035         virtual string to_string() const;
00036         virtual expression* get_function_pointer();
00037         bool has_return();
00038         virtual vector<expression*>& get_arguments();
00039         virtual ~function_pointer_call_expression();
00040 };
00041 
00042 }
00043 
00044 #endif