Dictionary properties in angle brackets?

While learning TADS 3, I read in the System Manual that grammar productions can take lists of dictionary properties enclosed in angle brackets. I cannot find any examples of this and I cannot get it to work myself.

In the following testing code, FOO ITEM works, but FOO X crashes. Why? How does one use this feature?

#include <adv3.h>
#include <en_us.h>
versionInfo: GameID;
gameMain: GameMainDef initialPlayerChar: Actor { location = entrance };
entrance: Room 'Testing Room';
dictionary property dp1;
dictionary property dp2;
+ item: Thing 'item' 'item'
    dp1 = 'a' 'b' 'c'
    dp2 = 'x' 'y' 'z'
;

DefineTAction(Foo);
VerbRule(Foo)
    'foo' (singleDobj | <dp1 dp2>->dobjMatch)
    : FooAction
;
modify Thing
    dobjFor(Foo)
    {
        verify { illogical('You can\'t foo {the dobj/him}! '); }
    }
;

Short answer: I don’t know.

Slightly longer answer (which might steer you in a useful direction, or might be completely misguided):

(1) I’ve never seen the syntactic element -> used in T3 code. Poking around in the source code, I find this:

#define singleDobj     singleNoun->dobjMatch

Evidently this symbol is something to do with templates. But is your thingie a template?

(2) Why should the VerbRule think that dp1 and dp2 are dictionary properties?

(3) Aren’t lists supposed to be enclosed in brackets? This syntax:

dp1 = 'a' 'b' 'c'

looks dodgy to me.

Maybe this feature doesn’t work anymore, and no one noticed because no one used it.

You mean templates as in Thing template ‘vocabWords’ ‘name’ @location? “desc”?; and SyncEventList template ->masterObject inherited;? is used in templates, but also in grammar productions, as in the macro definition of singleDobj.

I don’t know, but I assume that the dictionary property lines would set that up properly.

Normal lists are, but dictionary property lists aren’t. Search for noun = ’ in en_us.t for an example.