if (optional != null) {
for (int i = 0; i < optional.size(); i++) {
Node node = optional.get(i);
if (!(node instanceof LocalAsgnNode))
return;
LocalAsgnNode lan = (LocalAsgnNode) node;
Node valueNode = lan.getValueNode();
if ((valueNode instanceof StrNode))
args.add(new Argument(lan.getName(), argEncode(((StrNode) valueNode).getValue().toString()), Type.STRING));
else if (valueNode instanceof RegexpNode)
args.add(new Argument(lan.getName(), ((RegexpNode) valueNode).getValue().toString(), Type.REGEX));
else if (valueNode instanceof BignumNode)
args.add(new Argument(lan.getName(), "" + ((BignumNode) valueNode).getValue().toString(), Type.NUMBER));
else if (valueNode instanceof FixnumNode)
args.add(new Argument(lan.getName(), ((FixnumNode) valueNode).getValue() + "", Type.NUMBER));
else if (valueNode instanceof FloatNode)
args.add(new Argument(lan.getName(), ((FloatNode) valueNode).getValue() + "", Type.NUMBER));
else if (valueNode instanceof TrueNode)
args.add(new Argument(lan.getName(), ((TrueNode) valueNode).getName(), Type.BOOLEAN));
else if (valueNode instanceof FalseNode)
args.add(new Argument(lan.getName(), ((FalseNode) valueNode).getName(), Type.BOOLEAN));
else if (valueNode instanceof ArrayNode && ((ArrayNode) valueNode).size() > 0) {
ArrayNode arrayNode = (ArrayNode) valueNode;
List<String> argValue = getListValue(arrayNode);
if (argValue != null) {
Node node2 = arrayNode.get(0);
Type type = Type.NONE;
if (node2 instanceof StrNode)
type = Type.STRING;
else if (node2 instanceof RegexpNode)
type = Type.REGEX;
else if (node instanceof BignumNode || node instanceof FixnumNode || node instanceof FloatNode)
type = Type.NUMBER;
args.add(new Argument(lan.getName(), argValue, type));
} else
return;
} else {
return;
}