@main[]
1. break in method string param
^while(1){=^test1[]=}
2. break in method code param
^while(1){=^test2[]=}
3. break in variable in code
^while(1){=^test3[]=}
4. stack usage is not visible, but exists
^test4[]
5. break can be called from getter
^while(1){ ^test5[] } "$o.v"
6. break can be called from setter
6.0 ^while(1){ ^test6[] } "$o.v"
6.1 ^while(1){ ^test6-1[] } "$o.v"
7. break can be called from constructor
^while(1){ ^test7[] } "$z.CLASS_NAME"
8. break in method name (unusial, but still possible)
^while(1){ ^test8[] }
9. break in expression or parser method expression param is allowed
9.0 ^while(1){ ^test9[] }
9.1 ^while(1){ ^test9-1[] }
10. break in native methods expression params is not allowed
10.0 ^while(1){ ^test10[] }
10.1 ^while(1){ ^test10-1[] }
@test1[]
^method1[%^break[]%;gpf]
@method1[arg1;arg2]
should not be called
@test2[]
^method2{%^break[]%;gpf}
@method2[arg1;arg2]
arg: [$arg1] [$arg2]
@test3[]
$code{%^break[]%}
|$code|
@test4[]
# each iteration uses leaves 6 unwiped values on stack,
# but they are cleaned upon exit from ^for without side effects
$v[^for[i](1;10){- $l1[$l2[$l3[$l4[$l5[$l6[^continue[]?]]]]]] + }]
[$v]
@test5[]
$o[^O::create[]]
=$o.property=
@test6[]
$o[^O::create[]]
=$o.property[value]=
@test6-1[]
$o[^O::create[]]
=$o.property(1+1)=
@test7[]
=$z[^O::create-with-break[]]=
@test8[]
$code{%^break[]%}
=^code[]=
@test9[]
%$x(1+^break[])%
@test9-1[]
=^method9(^break[])=
@method9[cond]
%$x($cond)%
@test10[]
$c{1 ^continue[]}
^try-catch{
=^if($c){yes}{no}=
}
%^break[]%
@test10-1[]
^try-catch{
=^method10(^break[]){yes}{no}=
}
%^break[]%
@method10[cond;yes;no]
%^if($cond){$yes}{$no}%
@CLASS
O
@create[]
$v[]
@create-with-break[]
%^break[]%
@GET_property[]
$v[before] %^break[]% $v[after]
@SET_property[value]
$v[before] %^break[]% $v[after]
E-mail: