private Node new_fcall_blockpass(Token operation, BlockPassNode blockPass) {
ISourcePosition position = position(operation, blockPass);
String name = (String) operation.getValue();
Node args = blockPass.getArgsNode();
if (args == null) return new FCallNoArgBlockPassNode(position, name, args, blockPass);
if (!(args instanceof ArrayNode)) return new FCallSpecialArgBlockPassNode(position, name, args, blockPass);
switch (((ArrayNode) args).size()) {
case 0: // foo()
return new FCallNoArgBlockPassNode(position, name, args, blockPass);
case 1:
return new FCallOneArgBlockPassNode(position, name, (ArrayNode) args, blockPass);
case 2:
return new FCallTwoArgBlockPassNode(position, name, (ArrayNode) args, blockPass);
case 3: