X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/3109662aca9c06495ac22c5c58b46e1c036aca5c..54fa3df9560fe739b5fe20ca561749092cef0fd5:/src/c-types-proto.lisp diff --git a/src/c-types-proto.lisp b/src/c-types-proto.lisp index 9481a99..9fe6126 100644 --- a/src/c-types-proto.lisp +++ b/src/c-types-proto.lisp @@ -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 @@ -149,7 +149,7 @@ This function is suitable for use in `format's ~/.../ command.")) -(export 'expand-c-type-spec) +(export '(expand-c-type-spec expand-c-type-form)) (eval-when (:compile-toplevel :load-toplevel :execute) (defgeneric expand-c-type-spec (spec) (:documentation @@ -181,7 +181,7 @@ ,@doc (destructuring-bind ,bvl ,tail ,@decls - ,@body)) + (block ,name ,@body))) ',name)))) (export 'c-type-alias) @@ -197,7 +197,7 @@ ',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 @@ (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) @@ -238,12 +240,16 @@ ;;;-------------------------------------------------------------------------- ;;; Function arguments. -(export '(argument argumentp make-argument argument-name argument-type)) -(defstruct (argument (:constructor make-argument (name type)) +(export '(argument argumentp make-argument + argument-name argument-type argument-default)) +(defstruct (argument (:constructor make-argument (name type &optional default + &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) + (default nil :type t :read-only t)) +(define-access-wrapper argument-type argument-%type :read-only t) (export 'commentify-argument-name) (defgeneric commentify-argument-name (name) @@ -251,7 +257,7 @@ "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)))