;;;----- Licensing notice ---------------------------------------------------
;;;
-;;; This file is part of the Sensble Object Design, an object system for C.
+;;; This file is part of the Sensible Object Design, an object system for C.
;;;
;;; SOD is free software; you can redistribute it and/or modify
;;; it under the terms of the GNU General Public License as published by
(prin1 (temp-tag var) stream))
(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#))
-
-;; Special varargs hacks.
-
-(definst va-start (stream :export t) (ap arg)
- (format stream "va_start(~@<~A, ~_~A~:>);" ap arg))
-
-(definst va-copy (stream :export t) (to from)
- (format stream "va_copy(~@<~A, ~_~A~:>);" to from))
-
-(definst va-end (stream :export t) (ap)
- (format stream "va_end(~A);" ap))
-
-;; 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.
(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 --------------------------------------------------