



The compiler crashes hard when compiling this file,
and produces no complaint about the syntax error present in the before property of the "thing" object.
It's not just the print statement and the comma causing the problem,
as it doesn't happen if you use that construction inside a description property. The compiler sees the comma and interprets the line as an action
switch case.
The string, which is longer than an identifier is expected to be,
is then passed to action_of_name(), which is where the crash actually happens.
Adding a few lines around the function call in parse_switch_spec safeguards against this:
About Patches
Issue C63021 [previous patch]
In a 'before' property, "print," crashes the compiler
Submitted by: milkshake
Appeared in: Compiler 6.30 or before
Fixed in: -
Problem
Constant Story "Test story";
Constant Headline "^A simple Inform test^";
Include "Parser";
Include "VerbLib";
Include "Grammar";
[ Initialise; location = void; ];
Object void "Void"
with description "You stand in a featureless void.",
has light;
Object -> "thing"
with description "A miscellaneous thing.",
name 'thing',
before [;
Smell:
print, "It smells like every other miscellaneous thing you've ever smelled.";
];
Solution (by Cedric Knight)
if (token_type == SYMBOL_TT || token_type >= STATEMENT_TT)
spec_stack[spec_sp] = action_of_name(token_text);
else
{ spec_stack[spec_sp].value = -1; /* signal as invalid action */
warning("Extraneous comma or 'to'? This looks like a switch() case.");
}
Last updated 2 May 2008. The librarian in charge of this page is Roger Firth. Please email any comments, suggestions or corrections to roger@firthworks.com.