package.ceylon
"Demonstration of a [[ceylon.ast.core::Visitor]] and an [[ceylon.ast.core::Editor]].
It is sometimes desireable to rewrite a body of the form
~~~
if (condition) {
return a;
} else {
return b;
}
~~~
into a series of statements without intermediate returns, like this:
~~~
value ret;
if (condition) {
ret = a;
} else {
ret = b;
}
~~~
However, this is not possible for every block:
~~~
if (condition) {
return a;
}
return b;
~~~
If we replace `return`s with `ret` assignments here,
the second return would still be reached.
[[hasEarlyReturns]] detects if a body contains such an early return
by [[visit|ceylon.ast.core::Node.visit]]ing the body;
[[RewriteReturnsEditor]] rewrites a body as shown above.
This could be used for some [compiler optimizations](https://github.com/ceylon/ceylon-compiler/issues/1794)."
shared package ceylon.ast.samples.bodyReturnRewrite;