src/method-{proto,impl}.lisp: Abstract out the receiver type.
[sod] / src / codegen-impl.lisp
index bc6f11d..ccc66a1 100644 (file)
       (format-temporary-name var stream)))
 
 ;;;--------------------------------------------------------------------------
-;;; Instruction types.
-
-;; Compound statements.
-
-;; HACK: use gensyms for the `condition' slots to avoid leaking the slot
-;; names, since the symbol `condition' actually comes from the `common-lisp'
-;; package.  The `definst' machinery will symbolicate the various associated
-;; methods correctly despite this subterfuge.
-
-(definst if (stream :export t) (#1=#:cond conseq alt)
-  (format-compound-statement (stream conseq alt)
-    (format stream "if (~A)" #1#))
-  (when alt
-    (format-compound-statement (stream alt)
-      (write-string "else" stream))))
-
-(definst while (stream :export t) (#1=#:cond body)
-  (format-compound-statement (stream body)
-    (format stream "while (~A)" #1#)))
-
-(definst do-while (stream :export t) (body #1=#:cond)
-  (format-compound-statement (stream body :space)
-    (write-string "do" stream))
-  (format stream "while (~A);" #1#))
-
-
-;; Expressions.
-
-;; HACK: use a gensym for the `func' slot to avoid leaking the slot name,
-;; since the symbol `func' is exported from our package.
-(definst call (stream :export t) (#1=#:func args)
-  (format stream "~A(~@<~{~A~^, ~_~}~:>)" #1# args))
-
-;;;--------------------------------------------------------------------------
 ;;; Code generator objects.
 
 (defclass basic-codegen ()
           (setf (codegen-vars codegen)
                 (cons (make-var-inst name type init) vars)))
          ((not (c-type-equal-p type (inst-type var)))
-          (error "(Internal) Redefining type for variable ~A." name)))
+          (error "(Internal) Redefining type for variable ~A" name)))
     name))
 
 (export 'codegen)
 (defclass codegen (basic-codegen)
-  ((functions :initform nil :type list :accessor codegen-functions)
+  ((functions :initform nil :type list :reader codegen-functions)
    (stack :initform nil :type list :accessor codegen-stack))
   (:documentation
    "A full-fat code generator which can generate and track functions.
                                    :in-use-p t
                                    :tag (prog1 temp-index
                                           (incf temp-index)))))
-         (push (make-var-inst name type nil) vars)
+         (push (make-var-inst name type) vars)
          name))))
 
 ;;;----- That's all, folks --------------------------------------------------