}
private boolean compileRecursiveCall(String name, int generation, CallType callType, boolean iterator, DynamicMethod method, BodyCompiler context, ArgumentsCallback argsCallback, CompilerCallback closure, boolean expr) {
if (currentBodyNode != null && context.isSimpleRoot()) {
if (method instanceof InterpretedMethod) {
InterpretedMethod target = (InterpretedMethod)method;
if (target.getBodyNode() == currentBodyNode) {
context.getInvocationCompiler().invokeRecursive(name, generation, argsCallback, closure, callType, iterator);
if (!expr) context.consumeCurrentValue();
return true;
}
}
if (method instanceof DefaultMethod) {
DefaultMethod target = (DefaultMethod)method;
if (target.getBodyNode() == currentBodyNode) {
context.getInvocationCompiler().invokeRecursive(name, generation, argsCallback, closure, callType, iterator);
if (!expr) context.consumeCurrentValue();
return true;
}
}
if (method instanceof JittedMethod) {
DefaultMethod target = (DefaultMethod)((JittedMethod)method).getRealMethod();
if (target.getBodyNode() == currentBodyNode) {
context.getInvocationCompiler().invokeRecursive(name, generation, argsCallback, closure, callType, iterator);
if (!expr) context.consumeCurrentValue();
return true;
}
}