Posting this here because inform7.com and therefore our Mantis bug tracker is currently down (see https://intfiction.org/t/inform7-com-has-messed-up-dns/11129/1).
While tinkering with Possessive() in english.h in the Inform6 Library (for https://intfiction.org/t/i6-referring-to-body-parts-with-your/11122/1), I wound up getting this error when compiling a simple test game:
$ inform +./ wave.inf
Inform 6.34 for Unix (5th March 2016)
"./English.h", line 643: Error: No such constant as "obj2"
*** Error in `inform': double free or corruption (!prev): 0x0000000001408d10 ***
Aborted
Here’s the modified english.h:
[ Possessive obj caps owned; ! "owned" is a new parameter
if (obj == player) {
if (player provides narrative_voice) switch(player.narrative_voice) {
1: if (caps) print "M"; else print "m"; print "y"; return;
2: ! Do nothing.
3: CDefart(player);
print "'s"; return;
default: RunTimeError(16, player.narrative_voice);
}
if (caps) print "Y"; else print "y";
print "our"; return;
}
! This is the new block of code
if (owned) {
CDefart(obj2);
! CDefart(obj);
print "'s";
return;
}
if (caps) print "H"; else print "h";
if (obj has male) { print "is"; return; }
if (obj has female) { print "er"; return; }
if (caps) print "I"; else { print "i"; print "ts"; return; }
];
The compiler correctly complained about “obj2” being undeclared, but somehow the precise way I did this caused the compiler to choke. Yes, it would abort anyway, but this is abnormal, right?
Now here’s a test game:
Constant Story "ROCKS";
Constant Headline "^An Interactive Bug Reproduction^";
Constant DEBUG;
Include "parser.h";
Include "verblib.h";
Object Start_Room "Somewhere"
with description "You're not sure where you are.",
has light;
Class Rock
with name "rock" "rocks//p",
short_name "rock",
plural "rocks";
Rock ->;
Rock ->;
Rock ->;
Rock ->;
[ Initialise;
location = Start_Room;
"It is time to do some bugfixing...";
];
Include "grammar.h";