From dc80e6e1e3ab819c62a0e37c34ce60e01329906d Mon Sep 17 00:00:00 2001 From: John Lorentzson Date: Fri, 28 Mar 2025 11:46:03 +0100 Subject: [PATCH] Nicer printing of nodes and references References print shorter and show their contents, call nodes now show what they're calling and with what arguments. Additionally, generated code for a node starts with a comment of the node as printed. --- wip-duuqnd/compiler.lisp | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/wip-duuqnd/compiler.lisp b/wip-duuqnd/compiler.lisp index 22f8971..8d4c7eb 100644 --- a/wip-duuqnd/compiler.lisp +++ b/wip-duuqnd/compiler.lisp @@ -16,23 +16,42 @@ (defclass reference-constant (reference) ((%value :accessor ref-value :initarg :value))) +(defmethod print-object ((object reference-constant) stream) + (print-unreadable-object (object stream :type t) + (format stream "~D" (ref-value object)))) + (defmethod dereference ((ref reference-constant)) (format-inst t "LDA #~D" (ref-value ref))) (defclass reference-variable (reference) ((%index :accessor ref-index :initarg :index))) +(defmethod print-object ((object reference-variable) stream) + (print-unreadable-object (object stream :type t) + (format stream "@~D" (ref-index object)))) + (defmethod dereference ((ref reference-variable)) (format-inst t "LDY #~D" (ref-index ref)) (format-inst t "LDA VARVEC,Y")) + (defclass node () - ((%next :accessor next :accessor normal-next))) + ((%next :accessor next :accessor normal-next :initform nil))) + +(defmethod generate-code :before ((node node)) + (format t ";; ~A~%" node)) + +(defmethod generate-code :after ((node node)) + (terpri)) (defclass node-call (node) ((%callee :accessor callee :initarg :callee) (%arguments :accessor arguments :initarg :arguments))) +(defmethod print-object ((object node-call) stream) + (print-unreadable-object (object stream :type t :identity t) + (format stream "~A~A" (callee object) (arguments object)))) + (defmethod generate-code ((node node-call)) (loop :for ref :in (arguments node) :for index :from 0