about summary refs log tree commit diff stats
path: root/cabs-syn.lisp
diff options
context:
space:
mode:
authorDarren Bane <darren.bane@gmail.com>2020-09-02 23:46:59 +0100
committerDarren Bane <darren.bane@gmail.com>2020-09-02 23:46:59 +0100
commitd34eb60916327589576143fa84c1a2468bee6cf3 (patch)
treed6a4ad519c2bd0801ee9a385ac7da8bfb9e4b40f /cabs-syn.lisp
parentf4389b863ecc0fe17cc13d12cc39ca2b37e3c0d7 (diff)
downloadlsp-d34eb60916327589576143fa84c1a2468bee6cf3.tar.gz
Making changes
Diffstat (limited to 'cabs-syn.lisp')
-rw-r--r--cabs-syn.lisp17
1 files changed, 5 insertions, 12 deletions
diff --git a/cabs-syn.lisp b/cabs-syn.lisp
index 1a921a0..12b9fd4 100644
--- a/cabs-syn.lisp
+++ b/cabs-syn.lisp
@@ -1,5 +1,5 @@
 (defpackage #:cabs-syn
-  (:use #:common-lisp)
+  (:use #:common-lisp #:cutil)
   (:export
    #:<exp-int>
    #:<exp-var>
@@ -16,19 +16,13 @@
    #:<phrase-list>
    #:<phrase-run>
    #:<phrase-p-end>
-   priority-uop
-   priority-binop))
+   #:priority-uop
+   #:priority-binop))
 (in-package #:cabs-syn)
 
 ;; If these were only C enums, without any payload, I'd just use symbols and (error) in the t case.
 ;; But classes seem better for the associated data, in discriminated unions.
 
-;; Is it worth putting just 3 lines in a "cutils.lisp" or something?
-;; Not for now, since it's private.
-(defclass <abstract-class> () ())
-(defmethod make-instance ((self <abstract-class>) &key)
-  (error "Cannot instantiate abstract class ~A" (class-name c)))
-
 (defclass <expression> () () (:metaclass <abstract-class>))
 (defclass <exp-int> (<expression>) ((int :accessor int)))
 (defclass <exp-var> (<expression>) ((var :accessor var)))
@@ -44,7 +38,7 @@
 (defclass <cmd-if> (<command>) ((expr :accessor expr) (num :accessor num)))
 (defclass <cmd-let> (<command>) ((var :accessor var) (expr :accessor expr)))
 
-(defclass <line> () ((num :accessor num) (cmd :accessor cmd)))
+(defclass <line> () ((num :initarg n :accessor num) (cmd :initarg c :accessor cmd)))
 
 (defclass <phrase> () () (:metaclass <abstract-class>))
 (defclass <phrase-line> (<phrase>) ((line :accessor line)))
@@ -57,8 +51,7 @@
     ((not) 1)
     ((uminus) 7)))
 
-(defun priority-binop (bin-op)
-  (cond ((member bin-op '(mult div)) 6)
+(defun priority-binop (bin-op  (cond ((member bin-op '(mult div)) 6)
     ((member bin-op '(plus minus)) 5)
     ((eql bin-op 'mod) 4)
     ((member bin-op '(equal less lesseq great greateq diff)) 3)