Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
 package org.jruby.ir;
 
public class IRBuilder20 extends IRBuilder19 {
    public IRBuilder20(IRManager manager) {
        super(manager);
    }
    @Override
    public boolean is1_9() {
        return false;
    }
    @Override
    public boolean is2_0() {
        return true;
    }
    @Override
    public void receiveArgs(final ArgsNode argsNodeIRScope s) {
        // 1.9 pre, opt, rest, post args
        receiveNonBlockArgs(argsNodes);
        // 2.0 keyword args
        ListNode keywords = argsNode.getKeywords();
        int required = argsNode.getRequiredArgsCount();
        if (keywords != null) {
            for (Node knode : keywords.childNodes()) {
                KeywordArgNode kwarg = (KeywordArgNode)knode;
                AssignableNode kasgn = (AssignableNode)kwarg.getAssignable();
                String argName = ((INameNodekasgn).getName();
                Variable av = s.getNewLocalVariable(argName, 0);
                Label l = s.getNewLabel();
                // FIXME: add right arg decriptor
                if (s instanceof IRMethod) ((IRMethod)s).addArgDesc("kwarg"argName);
                s.addInstr(new ReceiveKeywordArgInstr(avrequired));
                s.addInstr(BNEInstr.create(av.l)); // if 'av' is not undefined, we are done
                build(kasgns);
                s.addInstr(new LabelInstr(l));
            }
        }
        // 2.0 keyword rest arg
        KeywordRestArgNode keyRest = argsNode.getKeyRest();
        if (keyRest != null) {
            String argName = keyRest.getName();
            Variable av = s.getNewLocalVariable(argName, 0);
            // FIXME: add right arg decriptor
            if (s instanceof IRMethod) ((IRMethod)s).addArgDesc("kwrestarg"argName);
            s.addInstr(new ReceiveKeywordRestArgInstr(avrequired));
        }
        // Block arg
        receiveBlockArg(argsNodes);
    }
New to GrepCode? Check out our FAQ X