diff --git a/wip-duuqnd/user-side-compiler/asm-function.lisp b/wip-duuqnd/user-side-compiler/asm-function.lisp new file mode 100644 index 0000000..da0ff12 --- /dev/null +++ b/wip-duuqnd/user-side-compiler/asm-function.lisp @@ -0,0 +1,7 @@ +(in-package #:user-side-compiler) + +;;; STUB, TODO + +(define-transformation (token (token-name asm-function)) + ;; TODO: Create table of asm functions that this can draw from + nil) diff --git a/wip-duuqnd/user-side-compiler/reference.lisp b/wip-duuqnd/user-side-compiler/reference.lisp index 6983692..0c08625 100644 --- a/wip-duuqnd/user-side-compiler/reference.lisp +++ b/wip-duuqnd/user-side-compiler/reference.lisp @@ -31,3 +31,6 @@ (write-string " " stream)) (when (slot-boundp object '%index) (format stream "@~A" (ref-index object))))) + +(define-transformation (ref (reference-constant reference)) ref) +(define-transformation (ref (reference-variable reference)) ref) diff --git a/wip-duuqnd/user-side-compiler/tokenizer.lisp b/wip-duuqnd/user-side-compiler/tokenizer.lisp index 8eddf3f..086868f 100644 --- a/wip-duuqnd/user-side-compiler/tokenizer.lisp +++ b/wip-duuqnd/user-side-compiler/tokenizer.lisp @@ -31,9 +31,24 @@ reading immediately. Should be a subset of *SPECIAL-TOKEN-CHARS*.") (when (slot-boundp object '%name) (format stream "\"~A\"" (name object))))) +(define-transformation (token (token-name reference-variable)) + (multiple-value-bind (value existsp) + (find-reference-by-symbol (name token)) + (if existsp + value + (add-reference-symbol (name token) + (make-instance 'reference-variable + :name (name token)))))) + (defclass token-number (token) ((%value :accessor value :initarg :value))) +(define-transformation (token (token-number reference-constant)) + (make-instance 'reference-constant :value (value token))) + +(define-transformation (token (token-number integer)) + (value token)) + (defclass token-comment (token) ((%text :accessor text :initarg :text))) diff --git a/wip-duuqnd/user-side-compiler/user-side-compiler.asd b/wip-duuqnd/user-side-compiler/user-side-compiler.asd index 7e1f7fe..1a65611 100644 --- a/wip-duuqnd/user-side-compiler/user-side-compiler.asd +++ b/wip-duuqnd/user-side-compiler/user-side-compiler.asd @@ -4,9 +4,10 @@ :serial t :components ((:file "package") + (:file "transform") (:file "reference") (:file "symbol-table") - (:file "transform") + (:file "asm-function") (:file "tokenizer") (:file "label") (:file "high-level")