Make methods for nodes to list their potential next nodes

This commit is contained in:
John Lorentzson 2025-05-22 12:23:06 +02:00
parent 4bf1316536
commit ebe27cf026

View file

@ -36,6 +36,12 @@
(%source :accessor source :initarg :source :initform nil) (%source :accessor source :initarg :source :initform nil)
(%comment :accessor comment :initarg :comment :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)) (defmethod generate-code :before ((node node))
(produce-comment (format nil "~A" node))) (produce-comment (format nil "~A" node)))
@ -66,6 +72,9 @@
(defclass node-branch (node) (defclass node-branch (node)
((%branch-next :accessor branch-next :initarg :branch-next))) ((%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)) (defmethod generate-code ((node node-branch))
(let ((*instruction-source* node) (let ((*instruction-source* node)
(else-label (make-label :name-prefix "ELSE"))) (else-label (make-label :name-prefix "ELSE")))
@ -83,6 +92,10 @@
:documentation "A reference to a variable being set to the loop index.") :documentation "A reference to a variable being set to the loop index.")
(%loopee-node :accessor loopee-node :initarg :loopee-node))) (%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)) (defmethod generate-code ((node node-dotimes))
(let ((*instruction-source* node) (let ((*instruction-source* node)
(loop-label (make-label :name-prefix "LOOPBACK"))) (loop-label (make-label :name-prefix "LOOPBACK")))