diff --git a/wip-duuqnd/user-side-compiler/high-level.lisp b/wip-duuqnd/user-side-compiler/high-level.lisp index 1d7285b..34d1d0f 100644 --- a/wip-duuqnd/user-side-compiler/high-level.lisp +++ b/wip-duuqnd/user-side-compiler/high-level.lisp @@ -36,6 +36,12 @@ (%source :accessor source :initarg :source :initform nil) (%comment :accessor comment :initarg :comment :initform nil))) +(defun nodep (obj) + (typep obj 'node)) + +(defmethod node-nexts ((node node)) + (list (normal-next node))) + (defmethod generate-code :before ((node node)) (produce-comment (format nil "~A" node))) @@ -66,6 +72,9 @@ (defclass node-branch (node) ((%branch-next :accessor branch-next :initarg :branch-next))) +(defmethod node-nexts ((node node-branch)) + (list (normal-next node) (branch-next node))) + (defmethod generate-code ((node node-branch)) (let ((*instruction-source* node) (else-label (make-label :name-prefix "ELSE"))) @@ -83,6 +92,10 @@ :documentation "A reference to a variable being set to the loop index.") (%loopee-node :accessor loopee-node :initarg :loopee-node))) +(defmethod node-nexts ((node node-dotimes)) + (append (list (loopee-node node)) + (call-next-method))) + (defmethod generate-code ((node node-dotimes)) (let ((*instruction-source* node) (loop-label (make-label :name-prefix "LOOPBACK")))