The cast import (SpecImport's CastProc) reported failed interface and
'as' casts via CMD_Err2 and then returned False. CMD_Err2 already
dispatches the error to the script's active exception handler and
resets the pending-error state - so when the external proc afterwards
returned False, the interpreter raised a second erCouldNotCallProc for
which the handler was already consumed. Net effect: a failing cast
could never be caught by try/except in a script, and the descriptive
'Cannot cast an interface/object' message was replaced by a generic
'Could not call proc'.
Return True after CMD_Err2 instead, exactly like the DefProc builtins
handle their reported errors (e.g. the string index checks). A failing
cast now surfaces as a regular catchable runtime error with its proper
message:
try
f := IMyFoo(u); // u does not implement IMyFoo
except
// reached now; previously the script died with 'Could not call proc'
end;
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The cast import (SpecImport's CastProc) reported failed interface and
'as' casts via CMD_Err2 and then returned False. CMD_Err2 already
dispatches the error to the script's active exception handler and
resets the pending-error state - so when the external proc afterwards
returned False, the interpreter raised a second erCouldNotCallProc for
which the handler was already consumed. Net effect: a failing cast
could never be caught by try/except in a script, and the descriptive
'Cannot cast an interface/object' message was replaced by a generic
'Could not call proc'.
Return True after CMD_Err2 instead, exactly like the DefProc builtins
handle their reported errors (e.g. the string index checks). A failing
cast now surfaces as a regular catchable runtime error with its proper
message:
try
f := IMyFoo(u); // u does not implement IMyFoo
except
// reached now; previously the script died with 'Could not call proc'
end;
Pairs with the variant-interface-casts PR: the last check of that repro needs this fix; both branches merge cleanly together.
🤖 Generated with Claude Code