code: public boolean isAssignable(Type t, Type s, Warner warn) {
          if (t.hasTag(ERROR))
              return true;
          if (t.getTag().isSubRangeOf(INT) && t.constValue() != null) {
              int value = ((Number)t.constValue()).intValue();
              switch (s.getTag()) {
              case BYTE:
              case CHAR:
              case SHORT:
              case INT:
                  if (s.getTag().checkRange(value))
                      return true;
                  break;
              case CLASS:
                  switch (unboxedType(s).getTag()) {
                  case BYTE:
                  case CHAR:
                  case SHORT:
                      return isAssignable(t, unboxedType(s), warn);
                  }
                  break;
              }
          }
          return isConvertible(t, s, warn);
      }
docs: Is t assignable to s?<br>
  Equivalent to subtype except for constant values and raw
  types.<br>
  (not defined for Method and ForAll types)