chiark
/
gitweb
/
~mdw
/
sod
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
src/classes.lisp, src/class-layout-proto.lisp: Docstring fixes.
[sod]
/
src
/
codegen-impl.lisp
diff --git
a/src/codegen-impl.lisp
b/src/codegen-impl.lisp
index 3790d9d1d837b692712c057d4addedec4ed99662..acb0da1a9a3bc2e743ddbb71d6036b7c229b96b9 100644
(file)
--- a/
src/codegen-impl.lisp
+++ b/
src/codegen-impl.lisp
@@
-125,9
+125,17
@@
(defmethod emit-inst ((codegen basic-codegen) inst)
(defmethod emit-insts ((codegen basic-codegen) insts)
(asetf (codegen-insts codegen) (revappend insts it)))
(defmethod emit-insts ((codegen basic-codegen) insts)
(asetf (codegen-insts codegen) (revappend insts it)))
+(defmethod emit-decl ((codegen basic-codegen) inst)
+ (push inst (codegen-vars codegen)))
+
+(defmethod emit-decls ((codegen basic-codegen) insts)
+ (asetf (codegen-vars codegen) (revappend insts it)))
+
(defmethod ensure-var ((codegen basic-codegen) name type &optional init)
(let* ((vars (codegen-vars codegen))
(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)))
(cond ((not var)
(setf (codegen-vars codegen)
(cons (make-var-inst name type init) vars)))
@@
-176,7
+184,7
@@
(defmethod temporary-var ((codegen basic-codegen) type)
(c-type-equal-p type (inst-type var)))
name
nil)))
(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
(let* ((name (make-instance 'temporary-variable
:in-use-p t
:tag (prog1 temp-index