- case '@':
- if (**name == '"') {
- char *quote = strchr(*name + 1, '"');
- if (!named || quote[1] == eos || quote[1] == '"') {
- type->name = apr_pstrmemdup(pool, *name + 1, quote - *name - 1);
- *name = quote + 1;
+ case '@': {
+ char next(**name);
+
+ if (next == '?') {
+ type->primitive = block_P;
+ ++*name;
+ } else {
+ type->primitive = object_P;
+
+ if (next == '"') {
+ const char *quote = strchr(*name + 1, '"');
+ if (!named || quote[1] == eos || quote[1] == '"') {
+ type->name = apr_pstrmemdup(pool, *name + 1, quote - *name - 1);
+ *name = quote + 1;
+ }