Good morning,
according to the documents, (currently in en_flx_tutorial_0045.html
from cvs), exceptions can be simulated via dynamic gotos. What do you
all think about wrapping this pattern with the classis "try ... with"?
so something like this:
union string_option =
| Some of string
| None
;
proc raiser
{
raise 1;
raise Some "string";
raise None;
}
proc main
{
try raiser() with
| ?i:int => {print "int="; print i; endl}
| Some ?s => {print "Some="; print s; endl}
| None => {print "None"; endl}
endmatch;
print "done"; endl;
}
is just sugar for this:
proc raiser (err1: int->void, err2: string_option->void)
{
err1 1;
err2 (Some "string");
err2 None;
}
proc main
{
proc err1(i:int)
{
print "int="; print i; endl;
goto resume;
}
proc err2(s:string_option)
{
match s with
| Some ?s => print "Some="; print s; endl;
| None => print "None"; endl;
goto resume;
}
raiser(err1, err2)
resume:>
print "done"; endl;
}
main;
of course, this means that every exception must be handled at the call
site, but it would be a nice stop-gap until if/when full exceptions are
supported. Can a macro handle this translation, or would it require
lexer/parser changes?
-e