Changeset 11782


Ignore:
Timestamp:
04/25/09 05:56:46 (14 years ago)
Author:
ehuelsmann
Message:

Remove code duplication.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp

    r11781 r11782  
    20662066     (setf (gethash symbol ht) g))))
    20672067
    2068 (defknown declare-function (symbol) string)
    2069 (defun declare-function (symbol)
     2068(defknown declare-function (symbol &optional setf) string)
     2069(defun declare-function (symbol &optional setf)
    20702070  (declare (type symbol symbol))
    20712071  (declare-with-hashtable
    20722072   symbol *declared-functions* ht f
    2073    (setf f (symbol-name (gensym "FUN")))
     2073   (setf f (symbol-name (if setf (gensym "SETF") (gensym "FUN"))))
    20742074   (let ((s (sanitize symbol)))
    20752075     (when s
     
    20812081     (let ((*code* *static-code*))
    20822082       (emit 'getstatic class name +lisp-symbol+)
    2083        (emit-invokevirtual +lisp-symbol-class+ "getSymbolFunctionOrDie"
     2083       (emit-invokevirtual +lisp-symbol-class+
     2084                           (if setf
     2085                               "getSymbolSetfFunctionOrDie"
     2086                               "getSymbolFunctionOrDie")
    20842087                           nil +lisp-object+)
    20852088       (emit 'putstatic *this-class* f +lisp-object+)
     
    20892092(defknown declare-setf-function (name) string)
    20902093(defun declare-setf-function (name)
    2091   (declare-with-hashtable
    2092    name *declared-functions* ht f
    2093    (let ((symbol (cadr name)))
    2094      (declare (type symbol symbol))
    2095      (setf f (symbol-name (gensym)))
    2096      (let ((s (sanitize symbol)))
    2097        (when s
    2098    (setf f (concatenate 'string f "_SETF_" s))))
    2099      (multiple-value-bind
    2100            (name class)
    2101          (lookup-or-declare-symbol symbol)
    2102        (let ((*code* *static-code*))
    2103          (emit 'getstatic class name +lisp-symbol+)
    2104          (declare-field f +lisp-object+)
    2105          (emit-invokevirtual +lisp-symbol-class+ "getSymbolSetfFunctionOrDie"
    2106                              nil +lisp-object+)
    2107          (emit 'putstatic *this-class* f +lisp-object+)
    2108          (setf *static-code* *code*)
    2109          (setf (gethash name ht) f))))))
     2094  (declare-function (cadr name) t))
    21102095
    21112096
Note: See TracChangeset for help on using the changeset viewer.