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:
parent
449e36e183
commit
5d0f4b4767
3 changed files with 27 additions and 23 deletions
|
@ -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))))
|
||||||
|
|
||||||
|
|
25
wip-duuqnd/user-side-compiler/reference.lisp
Normal file
25
wip-duuqnd/user-side-compiler/reference.lisp
Normal 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))))
|
|
@ -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")
|
||||||
|
|
Loading…
Add table
Reference in a new issue