public Operand buildYield(YieldNode node, Variable result) { if (scope instanceof IRScriptBody) throwSyntaxError(node, "Invalid yield"); boolean unwrap = true; Node argNode = node.getArgsNode(); // Get rid of one level of array wrapping if (argNode != null && (argNode instanceof ArrayNode) && ((ArrayNode)argNode).size() == 1) { argNode = ((ArrayNode)argNode).getLast(); unwrap = false; } Variable ret = result == null ? createTemporaryVariable() : result; if (argNode instanceof ArrayNode && unwrap) { addInstr(new YieldInstr(ret, scope.getYieldClosureVariable(), buildArray((ArrayNode)argNode, true), unwrap)); } else { addInstr(new YieldInstr(ret, scope.getYieldClosureVariable(), build(argNode), unwrap)); } return ret; }
public Operand buildYield(YieldNode node, Variable result) { if (scope instanceof IRScriptBody) throwSyntaxError(node, "Invalid yield"); boolean unwrap = true; Node argNode = node.getArgsNode(); // Get rid of one level of array wrapping if (argNode != null && (argNode instanceof ArrayNode) && ((ArrayNode)argNode).size() == 1) { argNode = ((ArrayNode)argNode).getLast(); unwrap = false; } Variable ret = result == null ? createTemporaryVariable() : result; if (argNode instanceof ArrayNode && unwrap) { addInstr(new YieldInstr(ret, scope.getYieldClosureVariable(), buildArray((ArrayNode)argNode, true), unwrap)); } else { addInstr(new YieldInstr(ret, scope.getYieldClosureVariable(), build(argNode), unwrap)); } return ret; }
case ARGSCATNODE: return buildArgsCat((ArgsCatNode) node); case ARGSPUSHNODE: return buildArgsPush((ArgsPushNode) node); case ARRAYNODE: return buildArray((ArrayNode) node, false); case ATTRASSIGNNODE: return buildAttrAssign(result, (AttrAssignNode) node); case BACKREFNODE: return buildBackref(result, (BackRefNode) node);
case ARGSCATNODE: return buildArgsCat((ArgsCatNode) node); case ARGSPUSHNODE: return buildArgsPush((ArgsPushNode) node); case ARRAYNODE: return buildArray((ArrayNode) node, false); case ATTRASSIGNNODE: return buildAttrAssign(result, (AttrAssignNode) node); case BACKREFNODE: return buildBackref(result, (BackRefNode) node);
case ARGSCATNODE: return buildArgsCat((ArgsCatNode) node, s); case ARGSPUSHNODE: return buildArgsPush((ArgsPushNode) node, s); case ARRAYNODE: return buildArray(node, s); case ATTRASSIGNNODE: return buildAttrAssign((AttrAssignNode) node, s); case BACKREFNODE: return buildBackref((BackRefNode) node, s);
case ARGSCATNODE: return buildArgsCat((ArgsCatNode) node, s); case ARGSPUSHNODE: return buildArgsPush((ArgsPushNode) node, s); case ARRAYNODE: return buildArray(node, s); case ATTRASSIGNNODE: return buildAttrAssign((AttrAssignNode) node, s); case BACKREFNODE: return buildBackref((BackRefNode) node, s);