#include "minimal/stdlib.h"
-#include <apr-1/apr_strings.h>
+#include <apr_strings.h>
#include <string.h>
case '#': type->primitive = typename_P; break;
case '(':
- type->primitive = union_P;
+ if (type->data.signature.count < 2)
+ type->primitive = struct_P;
+ else
+ type->primitive = union_P;
next = ')';
goto aggregate;
case '^':
type->primitive = pointer_P;
- if (**name == 'v') {
- type->data.data.type = NULL;
- ++*name;
- } else if (**name == '"') {
+ if (**name == '"') {
type->data.data.type = NULL;
} else {
type->data.data.type = Parse_(pool, name, eos, named, callback);
+ sig::Type *&target(type->data.data.type);
+ if (target != NULL && target->primitive == void_P)
+ target = NULL;
}
break;
return apr_psprintf(pool, "[%lu%s]", type->data.data.size, value);
} break;
- case pointer_P: return apr_psprintf(pool, "^%s", type->data.data.type == NULL ? "" : Unparse(pool, type->data.data.type));
+ case pointer_P: return apr_psprintf(pool, "^%s", type->data.data.type == NULL ? "v" : Unparse(pool, type->data.data.type));
case bit_P: return apr_psprintf(pool, "b%zu", type->data.data.size);
case char_P: return "c";
case double_P: return "d";