Changeset 15381


Ignore:
Timestamp:
09/26/20 07:32:00 (3 years ago)
Author:
Mark Evenson
Message:

JNEW-ARRAY-FROM-ARRAY constructs more types of java arrays

(jnew-array-from-array "char" #(0 244 2 3))

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abcl/src/org/armedbear/lisp/Java.java

    r15353 r15381  
    729729                Object value = v.javaInstance();
    730730                int index = ((Integer)args[args.length - 1].javaInstance()).intValue();
    731                 if (value instanceof java.lang.Number
    732                     && a.getClass().getComponentType().equals(Byte.TYPE)) {
    733                     Array.setByte(a, index, ((java.lang.Number)value).byteValue());
     731                if (value instanceof java.lang.Number) {
     732                  Class type = a.getClass().getComponentType();
     733                  Number number = (java.lang.Number)value;
     734                  if (type.equals(Byte.TYPE)) {
     735                    Array.setByte(a, index, number.byteValue());
     736                  } else if (type.equals(Short.TYPE)) {
     737                    Array.setShort(a, index, number.shortValue());
     738                  } else if (type.equals(Character.TYPE)) {
     739                    Array.setChar(a, index, (char)number.intValue()); // FIXME: value out of range
     740                  } else if (type.equals(Integer.TYPE)) {
     741                    Array.setInt(a, index, number.intValue());
     742                  } else if (type.equals(Long.TYPE)) {
     743                    Array.setLong(a, index, number.longValue());
     744                  } else if (type.equals(Float.TYPE)) {
     745                    Array.setFloat(a, index, number.floatValue());
     746                  } else if (type.equals(Double.TYPE)) {
     747                    Array.setDouble(a, index, number.doubleValue());
     748                  } else if (type.equals(Boolean.TYPE)) {
     749                    Array.setBoolean(a, index, number.equals(0) ? false : true);
     750                  } else {
     751                    Array.set(a, index, value);
     752                  }
    734753                } else {
    735754                    Array.set(a, index, value);
Note: See TracChangeset for help on using the changeset viewer.