Is this a known bug?

Someone using some of my extensions reported a bug which turned out not to involve the extensions at all. It seems to be a general I7 bug.

[code]“Bugtesting” by Shadow Wolf

Testing is a room.

Dog is a privately-named animal in Testing. The dog has an indexed text called current-name. The current-name of the dog is “Fido”. Understand the current-name property as describing the dog.
The printed name of the dog is “[current-name of the dog]”. The dog is proper-named.

A muzzle is a kind of thing. A muzzle is part of every animal.

Instead of examining a muzzle, say “[The noun] looks normal.”

Instead of touching a muzzle, say “You touch [the noun] without any errors.”

Test me with “x fido/touch muzzle/x muzzle”[/code]

The output looks like

[code]Testing
You can see Fido here.

test me
(Testing.)

[1] x fido
You see nothing special about Fido.

[2] touch muzzle
You touch Fido’s muzzle without any errors.

[3] x muzzle

[** Programming error: tried to read (something) **]
's muzzle looks normal.

[/code]

I checked Mantis to see if there were other errors with this error message, but the only open one had to do with using the wrong kinds of things in a relation.

The “Programming error” only occurs if using the capitalized form of “[The X]”, where X is the dog’s muzzle.

Any ideas on what’s going wrong here? Should I file a report in Mantis?

Nope, haven’t seen this one before.

Go ahead and file it.

Oh, I get it! ‘Mantis’, like ‘bug’. Sorry, slow on the uptake here.

Notes: the problem occurs in CDefArt(). The object (the muzzle) has “proper”.

I think what happens is that the muzzle cap_short_name() method is called, which tries to invoke the dog’s cap_short_name() method, but there isn’t one.

The use of indexed text is irrelevant here and can be trimmed out.

Reported as bug 1128.

Any suggested workarounds?

Try replacing the autogenerated printing-the-name rule with your own:

Rule for printing the name of a muzzle:
	if the item described is part of something (called D):
		say "[D]'s muzzle";
	else:
		say "muzzle";

OK, I think I can work with that.