name = NULL;
else {
const char *quote = strchr(*encoding + 1, '"');
- if (quote == NULL) {
- printf("unterminated specific id type {%s}\n", *encoding - 10);
- _assert(false);
- } else if (!named || quote[1] == eos || quote[1] == '"') {
+ if (quote == NULL)
+ CYThrow("unterminated specific id type {%s}", *encoding - 10);
+ else if (!named || quote[1] == eos || quote[1] == '"') {
name = pool.strmemdup(*encoding + 1, quote - *encoding - 1);
*encoding = quote + 1;
} else {
case '[': {
size_t size(strtoul(*encoding, (char **) encoding, 10));
type = new(pool) Array(*Parse_(pool, encoding, eos, false, callback), size);
- if (**encoding != ']') {
- printf("']' != \"%s\"\n", *encoding);
- _assert(false);
- }
+ if (**encoding != ']')
+ CYThrow("']' != \"%s\"", *encoding);
++*encoding;
} break;
break;
case 'c': type = new(pool) Primitive<signed char>(); break;
+ case 'D': type = new(pool) Primitive<long double>(); break;
case 'd': type = new(pool) Primitive<double>(); break;
case 'f': type = new(pool) Primitive<float>(); break;
case 'i': type = new(pool) Primitive<signed int>(); break;
break;
default:
- printf("invalid type character: '%c' {%s}\n", next, *encoding - 10);
- _assert(false);
+ CYThrow("invalid type character: '%c' {%s}", next, *encoding - 10);
}
type->flags = flags;
return "f";
}
+template <>
+const char *Primitive<long double>::Encode(CYPool &pool) const {
+ return "D";
+}
+
template <>
const char *Primitive<signed char>::Encode(CYPool &pool) const {
return "c";