File path: /jruby-1.4.0/src/org/jruby/compiler/impl/AbstractVariableCompiler.java
|
|
File path: /jruby-1.4.0/src/org/jruby/compiler/impl/AbstractVariableCompiler.java
|
Method name: void assignMethodArguments(Object, int, Object, int, ArrayCallback, ArrayCallback, ArrayCallback, CompilerCallback, CompilerCallback)
|
|
Method name: void assignMethodArguments19(Object, int, Object, int, int, Object, int, ArrayCallback, ArrayCallback, ArrayCallback, CompilerCallback, CompilerCallback)
|
Number of AST nodes: 18
|
|
Number of AST nodes: 18
|
|
1 | if (optArgsCount > 0) {↵ | | 1 | if (optArgsCount > 0) {↵
|
2 | // prepare labels for opt logic↵ | | 2 | // prepare labels for opt logic↵
|
3 | Label doneWithOpt = new Label();↵ | | 3 | Label doneWithOpt = new Label();↵
|
4 | Label[] optLabels = new Label[optArgsCount];↵ | | 4 | Label[] optLabels = new Label[optArgsCount];↵
|
5 | for (int i = 0; i < optLabels.length; i ++) optLabels[i] = new Label();↵ | | 5 | for (int i = 0; i < optLabels.length; i ++) optLabels[i] = new Label();↵
|
|
6 | // next, iterate over all optional args, until no more arguments↵ | | 6 | // next, iterate over all optional args, until no more arguments↵
|
7 | for (int optArgElement = 0; optArgElement < optArgsCount; currentArgElement++, optArgElement++) {↵ | | 7 | for (int optArgElement = 0; optArgElement < optArgsCount; currentArgElement++, optArgElement++) {↵
|
8 | method.aload(argsIndex);↵ | | 8 | method.aload(argsIndex);↵
|
9 | method.pushInt(currentArgElement); // index for the item↵ | | 9 | method.pushInt(currentArgElement); // index for the item↵
|
10 | methodCompiler.invokeUtilityMethod("elementOrNull", sig(IRubyObject.class, IRubyObject[].class, int.class));↵ | | 10 | methodCompiler.invokeUtilityMethod("elementOrNull", sig(IRubyObject.class, IRubyObject[].class, int.class));↵
|
11 | method.dup();↵ | | 11 | method.dup();↵
|
12 | method.ifnull(optLabels[optArgElement]);↵ | | 12 | method.ifnull(optLabels[optArgElement]);↵
|
|
13 | optGivenAssignment.nextValue(methodCompiler, optArgs, optArgElement);↵ | | 13 | optGivenAssignment.nextValue(methodCompiler, optArgs, optArgElement);↵
|
14 | }↵ | | 14 | }↵
|
15 | method.go_to(doneWithOpt);↵ | | 15 | method.go_to(doneWithOpt);↵
|
|
16 | // now logic for each optional value↵ | | 16 | // now logic for each optional value↵
|
17 | for (int optArgElement = 0; optArgElement < optArgsCount; optArgElement++) {↵ | | 17 | for (int optArgElement = 0; optArgElement < optArgsCount; optArgElement++) {↵
|
18 | // otherwise no items left available, use the code for default↵ | | 18 | // otherwise no items left available, use the code for default↵
|
19 | method.label(optLabels[optArgElement]);↵ | | 19 | method.label(optLabels[optArgElement]);↵
|
20 | optNotGivenAssignment.nextValue(methodCompiler, optArgs, optArgElement);↵ | | 20 | optNotGivenAssignment.nextValue(methodCompiler, optArgs, optArgElement);↵
|
21 | }↵ | | 21 | }↵
|
|
22 | // pop extra failed value from first cycle and we're done↵ | | 22 | // pop extra failed value from first cycle and we're done↵
|
23 | method.pop();↵ | | 23 | method.pop();↵
|
24 | method.label(doneWithOpt);↵ | | 24 | method.label(doneWithOpt);↵
|
25 | } | | 25 | }
|