chiark / gitweb /
src/: Abolish the special `va-*' instructions.
[sod] / src / c-types-proto.lisp
index a2c57cdb730cbdf19c5df26798be5156ffcbea52..55f2f3105953af203c3294cb0cd99c0e39d09cb7 100644 (file)
@@ -7,7 +7,7 @@
 
 ;;;----- 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
@@ -181,7 +181,7 @@      (defmethod expand-c-type-form ((,head (eql ',name)) ,tail)
           ,@doc
           (destructuring-bind ,bvl ,tail
             ,@decls
-            ,@body))
+            (block ,name ,@body)))
         ',name))))
 
 (export 'c-type-alias)
@@ -197,7 +197,7 @@ (defmacro c-type-alias (original &rest aliases)
        ',aliases)))
 
 (export 'defctype)
-(defmacro defctype (names value)
+(defmacro defctype (names value &key export)
   "Define NAMES all to describe the C-type VALUE.
 
    NAMES can be a symbol (treated as a singleton list), or a list of symbols.
@@ -207,6 +207,8 @@ (defmacro defctype (names value)
         (namevar (gensym "NAME"))
         (typevar (symbolicate 'c-type- (car names))))
     `(progn
+       ,@(and export
+             `((export '(,typevar ,@names))))
        (defparameter ,typevar ,(expand-c-type-spec value))
        (eval-when (:compile-toplevel :load-toplevel :execute)
         ,@(mapcar (lambda (name)
@@ -239,11 +241,13 @@ (defun c-name-case (name)
 ;;; Function arguments.
 
 (export '(argument argumentp make-argument argument-name argument-type))
-(defstruct (argument (:constructor make-argument (name type))
+(defstruct (argument (:constructor make-argument (name type
+                                                 &aux (%type type)))
                     (:predicate argumentp))
   "Simple structure representing a function argument."
-  name
-  type)
+  (name nil :type t :read-only t)
+  (%type nil :type c-type :read-only t))
+(define-access-wrapper argument-type argument-%type :read-only t)
 
 (export 'commentify-argument-name)
 (defgeneric commentify-argument-name (name)
@@ -251,7 +255,7 @@ (defgeneric commentify-argument-name (name)
    "Produce a `commentified' version of the argument.
 
    The default behaviour is that temporary argument names are simply omitted
-   (NIL is returned); otherwise, `/*...*/' markers are wrapped around the
+   (nil is returned); otherwise, `/*...*/' markers are wrapped around the
    printable representation of the argument.")
   (:method ((name null)) nil)
   (:method ((name t)) (format nil "/*~A*/" name)))