Ignore:
Timestamp:
10/15/16 12:41:27 (5 years ago)
Author:
Mark Evenson
Message:

[PATCH 4/5] Runtime class improvements (ferada)

From faceaa2be78d92b6a6c43f5925fae926f9607bce Mon Sep 17 00:00:00 2001
Work in progress to get to a more functioning runtime class support.

Make static functions and :int parameters work.
Fix return conversion for null.
Ensure that the same classloader is used.

Because otherwise the name of the superclass couldn't be found as it's
not cached anywhere.

It would probably make sense to make the normal classloader a caching
one, so that custom classes can be found by other parts of the (Java)
system?

<http://abcl.org/trac/timeline/14903>

vc:reverts <http://abcl.org/trac/changeset/14882> ;
vc:restores <http://abcl.org/trac/changeset/14858> .

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abcl/test/lisp/abcl/runtime-class.lisp

    r14882 r14903  
    11(in-package :abcl.test.lisp)
    2 
    32
    43;; method with no arguments
    54(deftest runtime-class.1
    6     (java:jnew-runtime-class
    7      "Actor"
    8      :fields `(("name" "java.lang.String"))
    9      :methods `(("getName" "java.lang.String" nil
    10                            (lambda (this)
    11                              (java:jfield this "name")))))
    12   t)
     5    (java:jclass-name
     6     (java:jnew-runtime-class
     7      "Actor"
     8      :fields '(("name" "java.lang.String" :getter NIL))
     9      :methods '(("getName" "java.lang.String" NIL
     10                  (lambda (this)
     11                    (java:jfield "name" this))))))
     12  "Actor")
    1313
    1414;; method with primitive type
    1515(deftest runtime-class.2
    16     (java:jnew-runtime-class
    17      "Actor"
    18      :fields `(("name" "java.lang.String"))
    19      :methods `(("getName" "java.lang.String" (:int)
    20                            (lambda (this)
    21                              (java:jfield this "name")))))
    22   t)
     16    (java:jclass-name
     17     (java:jnew-runtime-class
     18      "Actor"
     19      :fields '(("name" "java.lang.String" :getter NIL))
     20      :methods '(("getName" "java.lang.String" (:int)
     21                  (lambda (this x)
     22                    (declare (ignore x))
     23                    (java:jfield "name" this))))))
     24  "Actor")
    2325
    24 ;; inheritance of type
    25 
     26;; inheritance of type
    2627(deftest runtime-class.3
    27     (progn
    28       (java:jnew-runtime-class 
     28    (let ((class-loader (java::make-memory-class-loader)))
     29      (java:jnew-runtime-class
    2930       "foo.Actor"
    30        :fields `(("name" "java.lang.String")))
    31       (java:jnew-runtime-class
    32        "foo.StageActor"
    33        :superclass "foo.Actor"
    34        :fields (list '("givenName" "java.lang.String"))))
    35   t)
    36 
    37 
    38 #|
    39 // Simple constructor test
    40 public class Actor {
    41   String name;
    42  
    43   public Actor(String name) {
    44     this.name = name;
    45   }
    46 
    47   public String getName() {
    48     return name;
    49   }
    50  
    51 }
    52 |#
     31       :fields '(("name" "java.lang.String"))
     32       :class-loader class-loader)
     33      (java:jclass-name
     34       (java:jnew-runtime-class
     35        "foo.StageActor"
     36        :superclass "foo.Actor"
     37        :fields '(("givenName" "java.lang.String"))
     38        :class-loader class-loader)))
     39  "foo.StageActor")
    5340
    5441;; constructor
    5542(deftest runtime-class.4
    56     (java:jnew-runtime-class
    57      "Actor"
    58      :constructors `(("java.lang.String")
    59                      (lambda (name)
    60                        (setf (jfield this "name")
    61                              name)))
    62      :methods `(("getName" "java.lang.String" ("java.lang.String")  ;; no-arg methods not working
    63                            (lambda (this dummy)
    64                              (declare (ignore dummy))
    65                              (java:jfield this "name"))))
    66      :fields `(("name" "java.lang.String")))
    67   t)
    68 
    69 
    70    
     43    (java:jcall "getName"
     44                (java:jnew
     45                 (java:jnew-runtime-class
     46                  "Actor"
     47                  :constructors '((("java.lang.String")
     48                                   (lambda (this name)
     49                                     (setf (java:jfield "name" this) name))))
     50                  :methods '(("getName" "java.lang.String" NIL
     51                              (lambda (this)
     52                                (java:jfield "name" this))))
     53                  :fields '(("name" "java.lang.String" :getter NIL)))
     54                 "Someone"))
     55  "Someone")
Note: See TracChangeset for help on using the changeset viewer.