MEMVAR oMemvar
MEMVAR mPrivate
PROCEDURE MAIN
LOCAL oLocal
PRIVATE mPrivate:='private value in MAIN'
BEGIN SEQUENCE
? " Inside SEQUENCE 1"
? " No break issued...."
RECOVER
? " Recovering in 1 ..."
END SEQUENCE
? "After SEQUENCE 1"
BEGIN SEQUENCE
? " Inside SEQUENCE 2"
Break( "VALUE 2" )
RECOVER USING oLocal
? " Recovering in 2 using....", oLocal
END SEQUENCE
? "After SEQUENCE 2"
BEGIN SEQUENCE
? " Inside SEQUENCE 3"
Break
RECOVER USING oLocal
? " Recovering in 3 using....", oLocal
END SEQUENCE
? "After SEQUENCE 3"
BEGIN SEQUENCE
? " Inside SEQUENCE 4"
Break
? " Recovering in 4 using....", oLocal
END SEQUENCE
? "After SEQUENCE 4"
BEGIN SEQUENCE
? " Inside SEQUENCE 5"
Break1( )
? " Recovering in 5 using....", oLocal
END SEQUENCE
? "After SEQUENCE 5"
BEGIN SEQUENCE
? " Inside SEQUENCE 6"
Break1( )
RECOVER USING oMemvar
? " Recovering in 6 using... ", oMemvar
END SEQUENCE
? "After SEQUENCE 6"
BEGIN SEQUENCE
? " Inside SEQUENCE 7"
Break2( )
RECOVER USING oMemvar
? " Recovering in 7 using... ", oMemvar
END SEQUENCE
? "After SEQUENCE 7"
? M->mPrivate
BREAK( "exit from MAIN" )
? "This text will be not printed"
RETURN
PROCEDURE Break1()
PRIVATE mPrivate:='VALUE from Break1'
BREAK M->mPrivate
RETURN
PROCEDURE Break2()
BEGIN SEQUENCE
? " Inside SEQUENCE 8"
Break3( )
RECOVER USING oMemvar
? " Recovering in 8 using...", EVAL( oMemvar, ' eval in 8' )
BREAK( "BREAK from recovery code" )
END SEQUENCE
? "After SEQUENCE 8"
RETURN
PROCEDURE Break3()
STATIC oStatic
BEGIN SEQUENCE
? " Inside SEQUENCE 9"
BEGIN SEQUENCE
? " Inside SEQUENCE 10"
Break( "value from nested SEQUENCE 10" )
RECOVER USING oStatic
? " Recovering in 10 using...", oStatic
END SEQUENCE
? "After SEQUENCE 10"
Break4( " and parameter" )
RECOVER USING oMemvar
? " Recovering in 9 using...", EVAL( oMemvar, ' eval in 9' )
BREAK( oMemvar )
END SEQUENCE
? "After SEQUENCE 9"
RETURN
PROCEDURE Break4( cValue )
LOCAL oLocal:=' detached Break4 '
BREAK( {|x| oLocal + x + cValue} )
RETURN