Putting a description into a table -> a glulxe fatal error

This is long, so I’ll wrap it in a spoiler. It’s not really spoilery, though.

[spoiler][code]A stone is a kind of thing.
There is a room called the Stone garden.
Color is a kind of value. The colors are white, black, red, yellow, green, and blue.
Size is a kind of value. The sizes are small, medium, and large.
A stone has a color. A stone has a size.
Understand the color property as describing a stone.
Understand the size property as describing a stone.
There is a large blue stone in the garden.
There is a small yellow stone in the garden.
There is a medium red stone in the garden.
There is a large white stone in the garden.

Table of Stone types
Description Name
Description of stones “Quartz” [large white]
– “Pyrite” [small yellow]
– “Ruby” [medium red]

When play begins:
Entable large white stones;
Entable small yellow stones;
Entable medium red stones.

To entable (D - a description of stones):
Showme D;
Repeat through the table of stone types:
If there is no description entry:
Now the description entry is D;
Break.

To say type of (S - a stone):
Repeat through the table of stone types:
If S matches the description entry:
Say “After a thorough examination, you identify this stone as [Name entry].”;
Stop;
Say “After a through examination, you can only tell that this stone is [color of S] in color and [size of S] in size.”
After examining a stone:
Say type of the noun.[/code][/spoiler]

If I try to EXAMINE WHITE STONE, I get the following:

[code]You see nothing special about the stone.

Glulxe fatal error: Call to non-function (1)[/code]

Inform doesn’t show a runtime error in the errors tab, so I’m guessing it’s too serious for Inform to know what’s going on.

When I tried to run this in Gargoyle, I got a rather different error:

[code]You see nothing special about the stone.

*** fatal error: Local variable wasn’t 4 bytes wide ***[/code]

My guess is that we’re not supposed to have descriptions in our tables in the first place. If that’s the case, it probably shouldn’t allow me to create a table column with that kind. I guess I’ll just have to use a phrase stone -> truth state instead (but that’s messier). Before I report this, does anyone have any insight?

The compiler shouldn’t be invoking a non-valid function value, so there’s some bug there. Probably it’s the same error on the two interpreters, with different sanity checks failing.

I don’t know whether the real problem is in putting the value into the table, getting the value out, or invoking it. (I don’t have the compiler in front of me right now.)

OK, I’ve reported this as bug #840, which also has a much shorter test case.