Exemplo n.º 1
0
 public Type typeCheck(SymbolTable stable) throws TypeCheckError {
   final Type tleft = _left.typeCheck(stable);
   final Type tright = _right.typeCheck(stable);
   final MethodType ptype =
       lookupPrimop(stable, Ops[_op], new MethodType(Type.Void, tleft, tright));
   if (ptype != null) {
     final Type arg1 = (Type) ptype.argsType().elementAt(0);
     if (!arg1.identicalTo(tleft)) {
       _left = new CastExpr(_left, arg1);
     }
     final Type arg2 = (Type) ptype.argsType().elementAt(1);
     if (!arg2.identicalTo(tright)) {
       _right = new CastExpr(_right, arg1);
     }
     return _type = ptype.resultType();
   }
   throw new TypeCheckError(this);
 }