|
@@ -112,10 +112,10 @@ class Eval {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- function handleReturn( e : TExpr, final : Bool = false ) : TExpr {
|
|
|
|
|
|
+ function handleReturn( e : TExpr, isFinal : Bool = false ) : TExpr {
|
|
switch( e.e ) {
|
|
switch( e.e ) {
|
|
case TReturn(v):
|
|
case TReturn(v):
|
|
- if( !final )
|
|
|
|
|
|
+ if( !isFinal )
|
|
Error.t("Cannot inline not final return", e.p);
|
|
Error.t("Cannot inline not final return", e.p);
|
|
if( v == null )
|
|
if( v == null )
|
|
return { e : TBlock([]), t : TVoid, p : e.p };
|
|
return { e : TBlock([]), t : TVoid, p : e.p };
|
|
@@ -126,27 +126,27 @@ class Eval {
|
|
while( i < last ) {
|
|
while( i < last ) {
|
|
var e = el[i++];
|
|
var e = el[i++];
|
|
if( i == last )
|
|
if( i == last )
|
|
- out.push(handleReturn(e, final));
|
|
|
|
|
|
+ out.push(handleReturn(e, isFinal));
|
|
else switch( e.e ) {
|
|
else switch( e.e ) {
|
|
- case TIf(econd, eif, null) if( final && hasReturn(eif) ):
|
|
|
|
|
|
+ case TIf(econd, eif, null) if( isFinal && hasReturn(eif) ):
|
|
out.push(handleReturn( { e : TIf(econd, eif, { e : TBlock(el.slice(i)), t : e.t, p : e.p } ), t : e.t, p : e.p } ));
|
|
out.push(handleReturn( { e : TIf(econd, eif, { e : TBlock(el.slice(i)), t : e.t, p : e.p } ), t : e.t, p : e.p } ));
|
|
break;
|
|
break;
|
|
case TReturn(e):
|
|
case TReturn(e):
|
|
- out.push(handleReturn(e, final));
|
|
|
|
|
|
+ out.push(handleReturn(e, isFinal));
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
out.push(handleReturn(e));
|
|
out.push(handleReturn(e));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- var t = if( final ) out[out.length - 1].t else e.t;
|
|
|
|
|
|
+ var t = if( isFinal ) out[out.length - 1].t else e.t;
|
|
return { e : TBlock(out), t : t, p : e.p };
|
|
return { e : TBlock(out), t : t, p : e.p };
|
|
case TParenthesis(v):
|
|
case TParenthesis(v):
|
|
- var v = handleReturn(v, final);
|
|
|
|
|
|
+ var v = handleReturn(v, isFinal);
|
|
return { e : TParenthesis(v), t : v.t, p : e.p };
|
|
return { e : TParenthesis(v), t : v.t, p : e.p };
|
|
- case TIf(cond, eif, eelse) if( eelse != null && final ):
|
|
|
|
|
|
+ case TIf(cond, eif, eelse) if( eelse != null && isFinal ):
|
|
var cond = handleReturn(cond);
|
|
var cond = handleReturn(cond);
|
|
- var eif = handleReturn(eif, final);
|
|
|
|
- return { e : TIf(cond, eif, handleReturn(eelse, final)), t : eif.t, p : e.p };
|
|
|
|
|
|
+ var eif = handleReturn(eif, isFinal);
|
|
|
|
+ return { e : TIf(cond, eif, handleReturn(eelse, isFinal)), t : eif.t, p : e.p };
|
|
default:
|
|
default:
|
|
return e.map(handleReturnDef);
|
|
return e.map(handleReturnDef);
|
|
}
|
|
}
|
|
@@ -481,4 +481,4 @@ class Eval {
|
|
return { e : d, t : e.t, p : e.p }
|
|
return { e : d, t : e.t, p : e.p }
|
|
}
|
|
}
|
|
|
|
|
|
-}
|
|
|
|
|
|
+}
|