From: Mark Wooding Date: Wed, 16 Dec 2015 01:24:16 +0000 (+0000) Subject: src/builtin.lisp (class-slot "init"): Fix declaration of temporaries. X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/sod/commitdiff_plain/f6eafb24c6798b8c68fa00b08814ddf57a0f630c src/builtin.lisp (class-slot "init"): Fix declaration of temporaries. Each slot initializer is first used to initialize a temporary of the correct type, which is then assigned to the slot's structure member. (This was introduced in commit 1d8206e.) Unfortunately, the temporary was declared naïvely, as `TYPE NAME', which works when TYPE involves only declaration specifiers and pointer declarator operators, but not otherwise. Fix this, by using the `pprint-c-type' function like it was meant to be. --- diff --git a/src/builtin.lisp b/src/builtin.lisp index 1dde0d5..1c14f19 100644 --- a/src/builtin.lisp +++ b/src/builtin.lisp @@ -140,9 +140,10 @@ (define-class-slot "init" (class stream) " struct ~A *sod__obj = ~A__imprint(p);~2%" (ilayout-struct-tag class) class) (setf used t)) - (format stream " {~% ~A ~A =" - (sod-slot-type dslot) - *sod-tmp-val*) + (format stream " {~% ") + (pprint-c-type (sod-slot-type dslot) stream + *sod-tmp-val*) + (format stream " =") (ecase (sod-initializer-value-kind init) (:simple (write (sod-initializer-value-form init) :stream stream