--- cp/gxxint.texi.orig Wed Oct 11 19:29:39 1995 +++ cp/gxxint.texi Mon Mar 20 13:29:12 2000 @@ -1285,13 +1285,13 @@ copy value onto heap jump throw (Ln, id, address of copy of value on heap) - try { + try @{ +Lstart: the start of the main EH region |... ... +Lend: the end of the main EH region - } catch (T o) { + @} catch (T o) @{ ...1 - } + @} Lresume: nop used to make sure there is something before the next region ends, if there is one @@ -1312,7 +1312,7 @@ [ [ call throw_type_match - if (eq) { + if (eq) @{ ] these lines disappear when there is no catch condition +Lsregion2: | ...1 @@ -1320,7 +1320,7 @@ |Lhandler: handler for the region Lsregion2-Leregion2 | rethrow (Lresume, same id, same obj); +Leregion2 - } + @} ] there are zero or more of these sections, depending upon how many catch clauses there are ----------------------------- expand_end_all_catch -------------------------- @@ -1336,7 +1336,7 @@ start_all_catch emits labels: Lresume, -#end example +@end example The __unwind_function takes a pointer to the throw handler, and is expected to pop the stack frame that was built to call it, as well as @@ -1346,7 +1346,7 @@ into. The way I normally start is to compile: void *g; - foo(void* a) { g = a; } + foo(void* a) @{ g = a; @} with -S, and change the thing that alters the PC (return, or ret usually) to not alter the PC, making sure to leave all other semantics @@ -1453,7 +1453,7 @@ should also be removed, although not doing this is harmless in terms of semantics. -#end itemize +@end itemize The above is not meant to be exhaustive, but does include all things I have thought of so far. I am sure other limitations exist. @@ -1515,7 +1515,7 @@ The eh archive (~mrs/eh) might be good reading for understanding the Ada perspective, and some of kenners mindset, and a detailed explanation -(Message-Id: <9308301130.AA10543@vlsi1.ultra.nyu.edu>) of the concepts +(Message-Id: <9308301130.AA10543@@vlsi1.ultra.nyu.edu>) of the concepts involved. Here is a guide to existing backend type code. It is all in