Changeset 14694


Ignore:
Timestamp:
04/25/14 07:55:53 (4 years ago)
Author:
mevenson
Message:

Convert Lisp truth values to Java equivalents in JCALL/JSTATIC.

We now convert CL:T and CL:NIL to JAVA:+TRUE+ and JAVA:+FALSE+
respectively when invoking JVM methods through the JAVA package,
establishing the "natural" equivalence for boolean truth values. This
may break some existing usage in that previously CL:NIL was converted
to a Java 'null' reference. Users now need to specify JAVA:+NULL+
explicitly when desiring to pass 'null' Java references as an argument
in invoking JVM methods.

Addresses <http://abcl.org/trac/ticket/84> (#84) and
<http://abcl.org/trac/ticket/339> (#339).

Location:
trunk/abcl
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/abcl/abcl.asd

    r14430 r14694  
    1818;;; could be possibly be done at finer granularity in the files
    1919;;; themselves.
    20 (defsystem :abcl-test-lisp :version "1.2" :components
     20(defsystem :abcl-test-lisp :version "1.3.0" :components
    2121     ((:module abcl-rt
    2222                     :pathname "test/lisp/abcl/" :serial t :components
     
    6060                      #+abcl
    6161                      (:file "zip")
     62                      #+abcl
     63                      (:file "java")
    6264                      #+abcl
    6365                      (:file "pathname-tests" :depends-on
  • trunk/abcl/src/org/armedbear/lisp/Java.java

    r14687 r14694  
    458458                        error(new LispError("no such method"));
    459459                }
    460             } else
     460            } else {
    461461              type_error(methodRef, Symbol.STRING);
     462            }
    462463            Object[] methodArgs = new Object[args.length-2];
    463464            Class[] argTypes = m.getParameterTypes();
    464465            for (int i = 2; i < args.length; i++) {
    465466                LispObject arg = args[i];
    466                 if (arg == NIL)
    467                     methodArgs[i-2] = null;
    468                 else
    469                     methodArgs[i-2] = arg.javaInstance(argTypes[i-2]);
     467                if (arg.equals(NIL)) {
     468                  methodArgs[i-2] = false;
     469                } else if (arg.equals(T)) {
     470                  methodArgs[i-2] = true;
     471                } else {
     472                  methodArgs[i-2] = arg.javaInstance(argTypes[i-2]);
     473                }
    470474            }
    471475            m.setAccessible(true);
     
    563567                for (int i = 1; i < args.length; i++) {
    564568                    LispObject arg = args[i];
    565                     if (arg == NIL)
    566                         initargs[i-1] = null;
    567                     else {
    568                         initargs[i-1] = arg.javaInstance(argTypes[i-1]);
     569                    if (arg.equals(NIL)) {
     570                      initargs[i-1] = false ;
     571                    } else if (arg.equals(T)) {
     572                      initargs[i-1] = true;
     573                    } else {
     574                      initargs[i-1] = arg.javaInstance(argTypes[i-1]);
    569575                    }
    570576                }
     
    879885            methodArgs = new Object[argTypes.length];
    880886            for (int i = 2; i < args.length; i++) {
    881                 LispObject arg = args[i];
    882                 if (arg == NIL)
    883                     methodArgs[i-2] = null;
    884                 else
    885                     methodArgs[i-2] = arg.javaInstance(argTypes[i-2]);
     887              LispObject arg = args[i];
     888              if (arg.equals(NIL)) {
     889                methodArgs[i-2] = false;
     890              } else if (arg.equals(T)) {
     891                methodArgs[i-2] = true;
     892              } else {
     893                methodArgs[i-2] = arg.javaInstance(argTypes[i-2]);
     894              }
    886895            }
    887896            if (!method.isAccessible()) {
     
    924933        Object[] javaArgs = new Object[argCount];
    925934        for (int i = 0; i < argCount; ++i) {
    926             Object x = args[i + offs];
    927             if (x == NIL) {
    928                 javaArgs[i] = null;
    929             } else {
    930                 javaArgs[i] = ((LispObject) x).javaInstance();
    931             }
     935          Object x = args[i + offs];
     936          if (x.equals(NIL)) {
     937            javaArgs[i] = false;
     938          } else if (x.equals(T)) {
     939            javaArgs[i] = true;
     940          } else {
     941            javaArgs[i] = ((LispObject) x).javaInstance();
     942          }
    932943        }
    933944  return javaArgs;
  • trunk/abcl/test/lisp/abcl/java-tests.lisp

    r14687 r14694  
    447447;;#+allegro
    448448;;(jlinker-end)
     449
Note: See TracChangeset for help on using the changeset viewer.