Move definition of REFERENCE classes to its own file

Dereferencing is still defined in high-level.lisp, this might change
in the future since I'm sort of restructuring a little bit.
This commit is contained in:
John Lorentzson 2025-05-16 15:09:11 +02:00
parent 449e36e183
commit 5d0f4b4767
3 changed files with 27 additions and 23 deletions

View file

@ -22,33 +22,11 @@
(defmacro format-inst (destination control-string &rest format-arguments) (defmacro format-inst (destination control-string &rest format-arguments)
`(format ,destination "~C~A~%" #\Tab (format nil ,control-string ,@format-arguments))) `(format ,destination "~C~A~%" #\Tab (format nil ,control-string ,@format-arguments)))
(defclass reference () ()) ;;; Dereferencing
(defgeneric ref-constantp (reference) (:method (reference) nil))
(defclass reference-constant (reference)
((%value :accessor ref-value :initarg :value)))
(defmethod ref-constantp ((reference reference-constant))
t)
(defmethod print-object ((object reference-constant) stream)
(print-unreadable-object (object stream :type t)
(format stream "~D" (ref-value object))))
(defmethod ref= ((a reference-constant) (b reference-constant))
(= (value a) (value b)))
(defmethod dereference ((ref reference-constant)) (defmethod dereference ((ref reference-constant))
(produce-instruction 'inst-lda-immediate (ref-value ref))) (produce-instruction 'inst-lda-immediate (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)) (defmethod dereference ((ref reference-variable))
(produce-instruction 'inst-lda-absolute (make-offset-label *varvec* (ref-index ref)))) (produce-instruction 'inst-lda-absolute (make-offset-label *varvec* (ref-index ref))))

View file

@ -0,0 +1,25 @@
(in-package #:user-side-compiler)
(defclass reference () ())
(defgeneric ref-constantp (reference) (:method (reference) nil))
(defclass reference-constant (reference)
((%value :accessor ref-value :initarg :value)))
(defmethod ref-constantp ((reference reference-constant))
t)
(defmethod print-object ((object reference-constant) stream)
(print-unreadable-object (object stream :type t)
(format stream "~D" (ref-value object))))
(defmethod ref= ((a reference-constant) (b reference-constant))
(= (value a) (value b)))
(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))))

View file

@ -4,6 +4,7 @@
:serial t :serial t
:components :components
((:file "package") ((:file "package")
(:file "reference")
(:file "transform") (:file "transform")
(:file "tokenizer") (:file "tokenizer")
(:file "label") (:file "label")