private TypeAndValue plus(Vector<TypeAndValue> arguments, String caller) {
      
      if ( arguments.size() < 1 ) {
         System.err.println("Plus expected at least one argument and got zero.");
         System.exit(-1);
      }
      
      // our return value
      TypeAndValue ret = new MyVoid();
      
      // what type of arithmetic?
      boolean canDoInt     = true;
      boolean canDoDouble  = true;
      
      // check the types, if all ints return an int, if there are any double use doubles, string fail
      for ( int i = 0; i < arguments.size(); ++i ) {
         
         // if any argument is not an integer
         if ( arguments.get(i).getType().compareTo("Integer") != 0 ) {
            
            // we cant do integer arthimetic
            canDoInt = false;
            
            // if it is also not a double
            if ( arguments.get(i).getType().compareTo("Double") != 0 ) {
               canDoDouble = false;
            }
            
         }
      }
      
      if ( canDoInt ) {
         int total = 0;
         for ( int i = 0; i < arguments.size(); ++i ) {
            total += ((Integer) arguments.get(i).getValue()).intValue();
         }
         ret = new MyInteger( total );
         
      } else if ( canDoDouble) {
         double total = 0;
         for ( int i = 0; i < arguments.size(); ++i ) {
            
            // if it's an int
            if ( arguments.get(i).getType().compareTo("Integer") == 0 ) {
               total += ((Integer) arguments.get(i).getValue()).doubleValue();
            }
            // it must be a double
            else {
               total += ((Double) arguments.get(i).getValue()).doubleValue();
            }
            ret = new MyDouble( total );
         }
      
      } else {
         System.err.println("Error in plus()! Can only add types that are Integers or Doubles!");
         System.exit(-1);
      }
      
      return ret;
   }