Ignore:
Timestamp:
04/23/10 21:23:02 (13 years ago)
Author:
astalla
Message:

First rough attempt at a fasl classloader to load local functions using new.
Top-level functions are loaded through the same classloader but still using
reflection.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/less-reflection/abcl/src/org/armedbear/lisp/compiler-pass2.lisp

    r12622 r12630  
    199199          n)))
    200200
     201(defconstant +fasl-loader-class+
     202  "org/armedbear/lisp/FaslClassLoader")
    201203(defconstant +java-string+ "Ljava/lang/String;")
    202204(defconstant +java-object+ "Ljava/lang/Object;")
     
    21752177   (setf g (symbol-name (gensym "LFUN")))
    21762178   (let* ((pathname (abcl-class-file-pathname (local-function-class-file local-function)))
     2179    (class-name (concatenate 'string "org/armedbear/lisp/" (pathname-name pathname)))
    21772180    (*code* *static-code*))
    21782181     ;; fixme *declare-inline*
    21792182     (declare-field g +lisp-object+ +field-access-default+)
    2180      (emit 'ldc (pool-string (file-namestring pathname)))
    2181      (emit-invokestatic +lisp-function-proxy-class+ "loadPreloadedFunction"
    2182       (list +java-string+) +lisp-object+)
     2183     (emit 'new class-name)
     2184     (emit 'dup)
     2185     (emit-invokespecial-init class-name '())
     2186
     2187     ;(emit 'ldc (pool-string (pathname-name pathname)))
     2188     ;(emit-invokestatic +fasl-loader-class+ "faslLoadFunction"
     2189     ;(list +java-string+) +lisp-object+)
     2190
     2191;     (emit 'ldc (pool-string (file-namestring pathname)))
     2192     
     2193;     (emit-invokestatic +lisp-function-proxy-class+ "loadPreloadedFunction"
     2194;     (list +java-string+) +lisp-object+)
    21832195     (emit 'putstatic *this-class* g +lisp-object+)
    21842196     (setf *static-code* *code*)
     
    23312343  (let ((g (symbol-name (gensym "INSTANCE")))
    23322344        saved-code)
     2345    (sys::%format t "OBJ = ~A ~S~%" (type-of obj) obj)
    23332346    (let* ((s (with-output-to-string (stream) (dump-form obj stream)))
    23342347           (*code* (if *declare-inline* *code* *static-code*)))
     
    53165329               (emit 'getstatic *this-class*
    53175330                     g +lisp-object+))))) ; Stack: template-function
    5318          ((member name *functions-defined-in-current-file* :test #'equal)
     5331         ((and (member name *functions-defined-in-current-file* :test #'equal)
     5332         (not (notinline-p name)))
    53195333          (emit 'getstatic *this-class*
    53205334                (declare-setf-function name) +lisp-object+)
     
    78927906      (compile-function-call form target representation))))
    78937907
     7908#|(defknown p2-java-jcall (t t t) t)
     7909(define-inlined-function p2-java-jcall (form target representation)
     7910  ((and (> *speed* *safety*)
     7911  (< 1 (length form))
     7912  (eq 'jmethod (car (cadr form)))
     7913  (every #'stringp (cdr (cadr form)))))
     7914  (let ((m (ignore-errors (eval (cadr form)))))
     7915    (if m
     7916  (let ((must-clear-values nil)
     7917        (arg-types (raw-arg-types (jmethod-params m))))
     7918    (declare (type boolean must-clear-values))
     7919    (dolist (arg (cddr form))
     7920      (compile-form arg 'stack nil)
     7921      (unless must-clear-values
     7922        (unless (single-valued-p arg)
     7923    (setf must-clear-values t))))
     7924    (when must-clear-values
     7925      (emit-clear-values))
     7926    (dotimes (i (jarray-length raw-arg-types))
     7927      (push (jarray-ref raw-arg-types i) arg-types))
     7928    (emit-invokevirtual (jclass-name (jmethod-declaring-class m))
     7929            (jmethod-name m)
     7930            (nreverse arg-types)
     7931            (jmethod-return-type m)))
     7932      ;; delay resolving the method to run-time; it's unavailable now
     7933      (compile-function-call form target representation))))|#
    78947934
    78957935(defknown p2-char= (t t t) t)
     
    88628902  (install-p2-handler 'java:jconstructor   'p2-java-jconstructor)
    88638903  (install-p2-handler 'java:jmethod        'p2-java-jmethod)
     8904;  (install-p2-handler 'java:jcall          'p2-java-jcall)
    88648905  (install-p2-handler 'char=               'p2-char=)
    88658906  (install-p2-handler 'characterp          'p2-characterp)
Note: See TracChangeset for help on using the changeset viewer.