src/codegen-{proto,impl}.lisp: Have `definst' optionally export symbols.
[sod] / src / codegen-impl.lisp
index 25413f8..3790d9d 100644 (file)
 
 ;; Compound statements.
 
-(export '(if-inst make-if-inst
-         while-inst make-while-inst
-         do-inst make-do-inst
-         inst-condition inst-consequent inst-alternative inst-body))
-
-(definst if (stream) (condition consequent alternative)
+(definst if (stream :export t) (condition consequent alternative)
   (format-compound-statement (stream consequent alternative)
     (format stream "if (~A)" condition))
   (when alternative
     (format-compound-statement (stream alternative)
       (write-string "else" stream))))
 
-(definst while (stream) (condition body)
+(definst while (stream :export t) (condition body)
   (format-compound-statement (stream body)
     (format stream "while (~A)" condition)))
 
-(definst do-while (stream) (body condition)
+(definst do-while (stream :export t) (body condition)
   (format-compound-statement (stream body :space)
     (write-string "do" stream))
   (format stream "while (~A);" condition))
 
 ;; Special varargs hacks.
 
-(export '(va-start-inst make-va-start-inst
-         va-copy-inst make-va-copy-inst
-         va-end-inst make-va-end-inst
-         inst-ap inst-arg inst-to inst-from))
-
-(definst va-start (stream) (ap arg)
+(definst va-start (stream :export t) (ap arg)
   (format stream "va_start(~@<~A, ~_~A~:>);" ap arg))
 
-(definst va-copy (stream) (to from)
+(definst va-copy (stream :export t) (to from)
   (format stream "va_copy(~@<~A, ~_~A~:>);" to from))
 
-(definst va-end (stream) (ap)
+(definst va-end (stream :export t) (ap)
   (format stream "va_end(~A);" ap))
 
 ;; Expressions.
 
-(export '(call-inst make-call-inst inst-func inst-args))
-
-(definst call (stream) (func args)
+(definst call (stream :export t) (func args)
   (format stream "~A(~@<~{~A~^, ~_~}~:>)" func args))
 
 ;;;--------------------------------------------------------------------------
   (:documentation
    "Base class for code generator state.
 
-   This contains the bare essentials for supporting the EMIT-INST and
-   ENSURE-VAR protocols; see the documentation for those generic functions
+   This contains the bare essentials for supporting the `emit-inst' and
+   `ensure-var' protocols; see the documentation for those generic functions
    for more details.
 
-   This class isn't abstract.  A full CODEGEN object uses instances of this
+   This class isn't abstract.  A full `codegen' object uses instances of this
    to keep track of pending functions which haven't been completed yet.
 
    Just in case that wasn't clear enough: this is nothing to do with the
 
    This is the real deal.  Subclasses may which to attach additional state
    for convenience's sake, but this class is self-contained.  It supports the
-   CODEGEN-PUSH, CODEGEN-POP and CODEGEN-POP-FUNCTION protocols."))
+   `codegen-push', `codegen-pop' and `codegen-pop-function' protocols."))
 
 (defmethod codegen-push ((codegen codegen))
   (with-slots (vars insts temp-index stack) codegen