From: Mark Wooding Date: Sun, 30 Aug 2015 10:04:18 +0000 (+0100) Subject: src/{codegen,method}-impl.lisp: Allow non-variables in `vars' lists. X-Git-Tag: 0.2.0~54 X-Git-Url: https://git.distorted.org.uk/~mdw/sod/commitdiff_plain/66836e149e29c12c8bf4884ff91de7d9a9c879cb src/{codegen,method}-impl.lisp: Allow non-variables in `vars' lists. It used to be assumed that everything in the `vars' list was a `var-inst' object, but that's not going to be true any more. --- diff --git a/src/codegen-impl.lisp b/src/codegen-impl.lisp index 3790d9d..e99a0c2 100644 --- a/src/codegen-impl.lisp +++ b/src/codegen-impl.lisp @@ -127,7 +127,9 @@ (defmethod ensure-var ((codegen basic-codegen) name type &optional init) (let* ((vars (codegen-vars codegen)) - (var (find name vars :key #'inst-name :test #'equal))) + (var (find name + (remove-if-not (lambda (var) (typep var 'var-inst)) vars) + :key #'inst-name :test #'equal))) (cond ((not var) (setf (codegen-vars codegen) (cons (make-var-inst name type init) vars))) @@ -176,7 +178,7 @@ (c-type-equal-p type (inst-type var))) name nil))) - vars) + (remove-if-not (lambda (var) (typep var 'var-inst)) vars)) (let* ((name (make-instance 'temporary-variable :in-use-p t :tag (prog1 temp-index diff --git a/src/method-impl.lisp b/src/method-impl.lisp index 09dbb2b..f3673d8 100644 --- a/src/method-impl.lisp +++ b/src/method-impl.lisp @@ -474,8 +474,10 @@ (dolist (tail chain-tails) (setup-entry tail) (dolist (var vars) - (ensure-var codegen (inst-name var) - (inst-type var) (inst-init var))) + (if (typep var 'var-inst) + (ensure-var codegen (inst-name var) + (inst-type var) (inst-init var)) + (emit-decl codegen var))) (when parm-n (varargs-prologue)) (emit-insts codegen insts) (when parm-n (varargs-epilogue))