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.
(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)))
(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
(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))