00001: package clogs.ast;
00002: 
00003: import clogs.util.Optional;
00004: 
00005: 
00006: public class ExpBinOp extends Exp
00007: {
00008:   public enum BinOp { 
00009:     PLUS ("+"),
00010:     MINUS ("-"),
00011:     TIMES ("*"),
00012:     DIVIDE ("/"),
00013:     MOD ("%"),
00014:     LESSTHAN ("<"),
00015:     GREATERTHAN (">"),
00016:     LEQ ("<="),
00017:     GEQ (">="),
00018:     EQUALSEQUALS ("=="),
00019:     BANGEQUALS ("!="),
00020:     AMP ("&"),
00021:     CARET ("^"),
00022:     BAR ("|"),
00023:     AMPAMP ("&&"),
00024:     BARBAR ("||");
00025: 
00026:     final String string;
00027: 
00028:     BinOp (String string) 
00029:     {
00030:       this.string = string;
00031:     }
00032: 
00033:     public String toString ()
00034:     {
00035:       return string;
00036:     }
00037:   };
00038: 
00039: 
00040:   public final BinOp op;
00041:   public final Exp left;
00042:   public final Exp right;
00043: 
00044: 
00045:   public ExpBinOp (BinOp op, Exp left, Exp right)
00046:   {
00047:     this (new Optional<Type> (), op, left, right);
00048:   }
00049: 
00050:   
00051:   ExpBinOp (Optional<Type> to, BinOp op, Exp left, Exp right)
00052:   {
00053:     super (to);
00054:     clogs.util.NonNull.check (op, left, right);
00055:     this.op = op;
00056:     this.left = left;
00057:     this.right = right;
00058:   }
00059: 
00060: 
00061:   public Exp setType (Type type)
00062:   {
00063:     return new ExpBinOp (new Optional<Type> (type), op, left, right);
00064:   }
00065: }
00066: