@Override
public DirectCompilerResult visit(FunctionDefNode n) {
MethodCallExpr list = Expressions.list();
n.getFormalParameters()
.stream()
.map(fp -> fp.accept(this))
.map(DirectCompilerResult::getExpression)
.forEach(list::addArgument);
if (n.isExternal()) {
List<String> paramNames =
n.getFormalParameters().stream()
.map(BaseNode::getText)
.collect(Collectors.toList());
return Functions.declaration(
n, list,
Functions.external(paramNames, n.getBody()));
} else {
DirectCompilerResult body = n.getBody().accept(this);
return Functions.declaration(n, list,
body.getExpression()).withFD(body);
}
}