00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef BINOP_H_
00011 #define BINOP_H_
00012
00013 #include "SaveInstruction.h"
00014
00015 namespace il{
00016 class node;
00017 }
00018 #include "../il/binop_expression.h"
00019
00020
00021
00022
00023
00024
00025
00026
00027 namespace sail {
00028
00029 class Variable;
00030 class Symbol;
00031
00043 class Binop:public SaveInstruction {
00044 friend class boost::serialization::access;
00045
00046 template<class Archive>
00047 void serialize(Archive & ar, const unsigned int version)
00048 {
00049 ar & boost::serialization::base_object<sail::SaveInstruction>(*this);
00050 ar & s1;
00051 ar & s2;
00052 ar & binop;
00053 ar & v;
00054 }
00055
00056 private:
00057
00058 Symbol* s1;
00059 Symbol* s2;
00060 il::binop_type binop;
00061 Variable* v;
00062
00063 public:
00064
00065 Binop(Variable* v, Symbol* s1, Symbol* s2, il::binop_type binop,
00066 il::node* original, int line);
00067 Binop(){};
00068 virtual string to_string() const;
00069 virtual string to_string(bool pretty_print) const;
00070
00074 virtual Variable* get_lhs();
00075 virtual void set_lhs(Variable* v);
00076
00081 Symbol* get_first_operand();
00082
00087 Symbol* get_second_operand();
00088
00093 il::binop_type get_binop();
00094 virtual bool is_removable();
00095 virtual ~Binop();
00096 };
00097
00098 }
00099
00100 #endif