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