X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fir2tran.lisp;h=a4fda56c91a2c9f25e3ed3ea1129073dbd193662;hb=beddcfe1ea23d2cfdddde2fa7cde6436799715a2;hp=d764e827a8499f0387b9fcdeca7045c6293dccb6;hpb=293488f3b117854e12b0d7f4faeb742b707bbc9c;p=sbcl.git diff --git a/src/compiler/ir2tran.lisp b/src/compiler/ir2tran.lisp index d764e82..a4fda56 100644 --- a/src/compiler/ir2tran.lisp +++ b/src/compiler/ir2tran.lisp @@ -134,7 +134,11 @@ ((and indirect (not (eq (node-physenv node) (lambda-physenv (lambda-var-home leaf))))) - (vop ancestor-frame-ref node block tn (leaf-info leaf) res)) + (let ((reffer (third (primitive-type-indirect-cell-type + (primitive-type (leaf-type leaf)))))) + (if reffer + (funcall reffer node block tn (leaf-info leaf) res) + (vop ancestor-frame-ref node block tn (leaf-info leaf) res)))) (t (emit-move node block tn res))))) (constant (emit-move node block (constant-tn leaf) res)) @@ -335,7 +339,11 @@ ((and indirect (not (eq (node-physenv node) (lambda-physenv (lambda-var-home leaf))))) - (vop ancestor-frame-set node block tn val (leaf-info leaf))) + (let ((setter (fourth (primitive-type-indirect-cell-type + (primitive-type (leaf-type leaf)))))) + (if setter + (funcall setter node block tn val (leaf-info leaf)) + (vop ancestor-frame-set node block tn val (leaf-info leaf))))) (t (emit-move node block val tn)))))) (global-var (aver (symbolp (leaf-source-name leaf)))