File path: /jruby-1.4.0/src/org/jruby/compiler/ASTCompiler.java | File path: /jruby-1.4.0/src/org/jruby/compiler/ASTCompiler19.java | |||
Method name: void compileArgs(Node, BodyCompiler, boolean)
|
Method name: void compileMethodArgs(Node, BodyCompiler, boolean)
|
|||
Number of AST nodes: 22 | Number of AST nodes: 21 | |||
1 | final ArgsNode argsNode = (ArgsNode) node;↵ | 1 | final ArgsNode argsNode = (ArgsNode) node;↵ | |
2 | final int required = argsNode.getRequiredArgsCount();↵ | 2 | final int required = argsNode.getRequiredArgsCount();↵ | |
3 | final int opt = argsNode.getOptionalArgsCount();↵ | 3 | final int opt = argsNode.getOptionalArgsCount();↵ | |
4 | final int rest = argsNode.getRestArg();↵ | 4 | final int rest = argsNode.getRestArg();↵ | |
5 | ArrayCallback requiredAssignment = null;↵ | 5 | ArrayCallback requiredAssignment = null;↵ | |
6 | ArrayCallback optionalGiven = null;↵ | 6 | ArrayCallback optionalGiven = null;↵ | |
7 | ArrayCallback optionalNotGiven = null;↵ | 7 | ArrayCallback optionalNotGiven = null;↵ | |
8 | CompilerCallback restAssignment = null;↵ | 8 | CompilerCallback restAssignment = null;↵ | |
9 | CompilerCallback blockAssignment = null;↵ | 9 | CompilerCallback blockAssignment = null;↵ | |
10 | if (required > 0) {↵ | 10 | if (required > 0) {↵ | |
11 | requiredAssignment = new ArrayCallback() {↵ | 11 | requiredAssignment = new ArrayCallback() {↵ | |
12 | public void nextValue(BodyCompiler context, Object object, int index) {↵ | 12 | public void nextValue(BodyCompiler context, Object object, int index) {↵ | |
13 | // FIXME: Somehow I'd feel better if this could get the appropriate var index from the ArgumentNode↵ | 13 | // FIXME: Somehow I'd feel better if this could get the appropriate var index from the ArgumentNode↵ | |
14 | context.getVariableCompiler().assignLocalVariable(index, false);↵ | 14 | context.getVariableCompiler().assignLocalVariable(index, false);↵ | |
15 | }↵ | 15 | ↵ | |
16 | ↵ | 16 | }↵ | |
17 | };↵ | 17 | };↵ | |
18 | }↵ | 18 | }↵ | |
19 | if (opt > 0) {↵ | 19 | if (opt > 0) {↵ | |
20 | optionalGiven = new ArrayCallback() {↵ | 20 | optionalGiven = new ArrayCallback() {↵ | |
21 | public void nextValue(BodyCompiler context, Object object, int index) {↵ | 21 | public void nextValue(BodyCompiler context, Object object, int index) {↵ | |
22 | Node optArg = ((ListNode) object).get(index);↵ | 22 | OptArgNode optArg = (OptArgNode)((ListNode) object).get(index);↵ | |
23 | compileAssignment(optArg, context,true);↵ | 23 | compileAssignment(optArg↵ | |
24 | context.consumeCurrentValue();↵ | 24 | .getValue(), context, false);↵ | |
25 | }↵ | 25 | ↵ | |
26 | ↵ | 26 | }↵ | |
27 | };↵ | 27 | };↵ | |
28 | optionalNotGiven = new ArrayCallback() {↵ | 28 | optionalNotGiven = new ArrayCallback() {↵ | |
29 | public void nextValue(BodyCompiler context, Object object, int index) {↵ | 29 | public void nextValue(BodyCompiler context, Object object, int index) {↵ | |
30 | Node optArg = ((ListNode) object).get(index);↵ | 30 | OptArgNode optArg = (OptArgNode)((ListNode) object).get(index);↵ | |
31 | compile(optArg, context,true);↵ | 31 | compile(optArg↵ | |
32 | context.consumeCurrentValue();↵ | 32 | .getValue(), context, false);↵ | |
33 | }↵ | 33 | ↵ | |
34 | ↵ | 34 | }↵ | |
35 | };↵ | 35 | };↵ | |
36 | }↵ | 36 | }↵ | |
37 | if (rest > -1) {↵ | 37 | if (rest > -1) {↵ | |
38 | restAssignment = new CompilerCallback() {↵ | 38 | restAssignment = new CompilerCallback() {↵ | |
39 | public void call(BodyCompiler context) {↵ | 39 | public void call(BodyCompiler context) {↵ | |
40 | context.getVariableCompiler().assignLocalVariable(argsNode.getRestArg(), false);↵ | 40 | context.getVariableCompiler().assignLocalVariable(argsNode.getRestArg(), false);↵ | |
41 | }↵ | 41 | ↵ | |
42 | ↵ | 42 | }↵ | |
43 | };↵ | 43 | };↵ | |
44 | }↵ | 44 | }↵ | |
45 | if (argsNode.getBlock() != null) {↵ | 45 | if (argsNode.getBlock() != null) {↵ | |
46 | blockAssignment = new CompilerCallback() {↵ | 46 | blockAssignment = new CompilerCallback() {↵ | |
47 | public void call(BodyCompiler context) {↵ | 47 | public void call(BodyCompiler context) {↵ | |
48 | context.getVariableCompiler().assignLocalVariable(argsNode.getBlock().getCount(), false);↵ | 48 | context.getVariableCompiler().assignLocalVariable(argsNode.getBlock().getCount(), false);↵ | |
49 | }↵ | 49 | ↵ | |
50 | ↵ | 50 | }↵ | |
51 | };↵ | 51 | };↵ | |
52 | }↵ | 52 | }↵ | |
53 | context.getVariableCompiler().checkMethodArity(required, opt, rest);↵ | 53 | context.getVariableCompiler().assignMethodAr↵ | |
54 | context.getVariableCompiler().assignMethodArguments(↵ | 54 | guments19(↵ | |
55 | argsNode.getPre(),↵ | |||
56 | argsNode.getPreCount(),↵ | |||
57 | argsNode.getPost(),↵ | |||
55 | argsNode.getPre(),↵ | 58 | argsNode.getPostCount(),↵ | |
56 | argsNode.getRequiredArgsCount(),↵ | 59 | argsNode.getPostIndex(),↵ | |
57 | argsNode.getOptArgs(),↵ | 60 | argsNode.getOptArgs(),↵ | |
58 | argsNode.getOptionalArgsCount(),↵ | 61 | argsNode.getOptionalArgsCount(),↵ | |
59 | requiredAssignment,↵ | 62 | requiredAssignment,↵ | |
60 | optionalGiven,↵ | 63 | optionalGiven,↵ | |
61 | optionalNotGiven,↵ | 64 | optionalNotGiven,↵ | |
62 | restAssignment,↵ | 65 | restAssignment,↵ | |
63 | blockAssignment);↵ | 66 | blockAssignment);↵ | |
64 | // TODO: don't require pop↵ | 67 | // TODO: don't require pop↵ | |
65 | if (!expr) context.consumeCurrentValue(); | 68 |
| |
See real code fragment | See real code fragment |
Number of common nesting structure subtrees | 1 |
Number of refactorable cases | 0 |
Number of non-refactorable cases | 1 |
Time elapsed for finding largest common nesting structure subtrees (ms) | 45.9 |
Clones location | Clones are in different classes having the same super class |
Number of node comparisons | 193 |
Number of mapped statements | 19 |
Number of unmapped statements in the first code fragment | 3 |
Number of unmapped statements in the second code fragment | 2 |
Time elapsed for statement mapping (ms) | 110.1 |
Clone type | Type 3 |
ID | Statement | ID | Statement | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | final ArgsNode argsNode = (ArgsNode)node; | 1 | final ArgsNode argsNode = (ArgsNode)node; | ||||||||||||||||||||||
2 | final int required = argsNode.getRequiredArgsCount(); | 2 | final int required = argsNode.getRequiredArgsCount(); | ||||||||||||||||||||||
3 | final int opt = argsNode.getOptionalArgsCount(); | 3 | final int opt = argsNode.getOptionalArgsCount(); | ||||||||||||||||||||||
4 | final int rest = argsNode.getRestArg(); | 4 | final int rest = argsNode.getRestArg(); | ||||||||||||||||||||||
5 | ArrayCallback requiredAssignment = null; | 5 | ArrayCallback requiredAssignment = null; | ||||||||||||||||||||||
6 | ArrayCallback optionalGiven = null; | 6 | ArrayCallback optionalGiven = null; | ||||||||||||||||||||||
7 | ArrayCallback optionalNotGiven = null; | 7 | ArrayCallback optionalNotGiven = null; | ||||||||||||||||||||||
8 | CompilerCallback restAssignment = null; | 8 | CompilerCallback restAssignment = null; | ||||||||||||||||||||||
9 | CompilerCallback blockAssignment = null; | 9 | CompilerCallback blockAssignment = null; | ||||||||||||||||||||||
10 | if (required > 0) | 10 | if (required > 0) | ||||||||||||||||||||||
11 | requiredAssignment = new ArrayCallback() {...}; | 11 | requiredAssignment = new ArrayCallback() {...}; | ||||||||||||||||||||||
12 | if (opt > 0) | 12 | if (opt > 0) | ||||||||||||||||||||||
|
| 13 | optionalGiven = new ArrayCallback() {...}; | ||||||||||||||||||||||
13 | optionalGiven = new ArrayCallback() {...}; |
| | ||||||||||||||||||||||
|
| 14 | optionalNotGiven = new ArrayCallback() {...}; | ||||||||||||||||||||||
14 | optionalNotGiven = new ArrayCallback() {...}; |
| | ||||||||||||||||||||||
15 | if (rest > -1) | 15 | if (rest > -1) | ||||||||||||||||||||||
16 | restAssignment = new CompilerCallback() {...}; | 16 | restAssignment = new CompilerCallback() {...}; | ||||||||||||||||||||||
17 | if (argsNode.getBlock() != null) | 17 | if (argsNode.getBlock() != null) | ||||||||||||||||||||||
18 | blockAssignment = new CompilerCallback() {...}; | 18 | blockAssignment = new CompilerCallback() {...}; | ||||||||||||||||||||||
19 | context.getVariableCompiler().checkMethodArity(required, opt, rest); | | |||||||||||||||||||||||
20 | context.getVariableCompiler().assignMethodArguments(argsNode.getPre(), argsNode.getRequiredArgsCount(), argsNode.getOptArgs(), argsNode.getOptionalArgsCount(), requiredAssignment, optionalGiven, optionalNotGiven, restAssignment, blockAssignment); |
| 19 | context.getVariableCompiler().assignMethodArguments19(argsNode.getPre(), argsNode.getPreCount(), argsNode.getPost(), argsNode.getPostCount(), argsNode.getPostIndex(), argsNode.getOptArgs(), argsNode.getOptionalArgsCount(), requiredAssignment, optionalGiven, optionalNotGiven, restAssignment, blockAssignment); | |||||||||||||||||||||
21 | if (!expr) | 20 | if (!expr) | ||||||||||||||||||||||
22 | context.consumeCurrentValue(); | 21 | context.consumeCurrentValue(); |
Row | Violation |
---|---|
1 | Unmatched statement optionalGiven=new ArrayCallback(){ public void nextValue( BodyCompiler context, Object object, int index){ OptArgNode optArg=(OptArgNode)((ListNode)object).get(index); compileAssignment(optArg.getValue(),context,false); } } ; cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted |
2 | Unmatched statement optionalGiven=new ArrayCallback(){ public void nextValue( BodyCompiler context, Object object, int index){ Node optArg=((ListNode)object).get(index); compileAssignment(optArg,context,true); context.consumeCurrentValue(); } } ; cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted |
3 | Unmatched statement optionalNotGiven=new ArrayCallback(){ public void nextValue( BodyCompiler context, Object object, int index){ OptArgNode optArg=(OptArgNode)((ListNode)object).get(index); compile(optArg.getValue(),context,false); } } ; cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted |
4 | Unmatched statement optionalNotGiven=new ArrayCallback(){ public void nextValue( BodyCompiler context, Object object, int index){ Node optArg=((ListNode)object).get(index); compile(optArg,context,true); context.consumeCurrentValue(); } } ; cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted |
5 | Expression context.getVariableCompiler().assignMethodArguments(argsNode.getPre(),argsNode.getRequiredArgsCount(),argsNode.getOptArgs(),argsNode.getOptionalArgsCount(),requiredAssignment,optionalGiven,optionalNotGiven,restAssignment,blockAssignment) cannot be parameterized, because it has dependencies to/from statements that will be extracted |
6 | Expression context.getVariableCompiler().assignMethodArguments19(argsNode.getPre(),argsNode.getPreCount(),argsNode.getPost(),argsNode.getPostCount(),argsNode.getPostIndex(),argsNode.getOptArgs(),argsNode.getOptionalArgsCount(),requiredAssignment,optionalGiven,optionalNotGiven,restAssignment,blockAssignment) cannot be parameterized, because it has dependencies to/from statements that will be extracted |
7 | Expression context.getVariableCompiler().assignMethodArguments(argsNode.getPre(),argsNode.getRequiredArgsCount(),argsNode.getOptArgs(),argsNode.getOptionalArgsCount(),requiredAssignment,optionalGiven,optionalNotGiven,restAssignment,blockAssignment) is a void method call, and thus it cannot be parameterized |
8 | Expression context.getVariableCompiler().assignMethodArguments19(argsNode.getPre(),argsNode.getPreCount(),argsNode.getPost(),argsNode.getPostCount(),argsNode.getPostIndex(),argsNode.getOptArgs(),argsNode.getOptionalArgsCount(),requiredAssignment,optionalGiven,optionalNotGiven,restAssignment,blockAssignment) is a void method call, and thus it cannot be parameterized |
9 | Expression context.getVariableCompiler().assignMethodArguments(argsNode.getPre(),argsNode.getRequiredArgsCount(),argsNode.getOptArgs(),argsNode.getOptionalArgsCount(),requiredAssignment,optionalGiven,optionalNotGiven,restAssignment,blockAssignment) cannot be parameterized, because it has dependencies to/from statements that will be extracted |
10 | Expression context.getVariableCompiler().assignMethodArguments19(argsNode.getPre(),argsNode.getPreCount(),argsNode.getPost(),argsNode.getPostCount(),argsNode.getPostIndex(),argsNode.getOptArgs(),argsNode.getOptionalArgsCount(),requiredAssignment,optionalGiven,optionalNotGiven,restAssignment,blockAssignment) cannot be parameterized, because it has dependencies to/from statements that will be extracted |
11 | Expression context.getVariableCompiler().assignMethodArguments(argsNode.getPre(),argsNode.getRequiredArgsCount(),argsNode.getOptArgs(),argsNode.getOptionalArgsCount(),requiredAssignment,optionalGiven,optionalNotGiven,restAssignment,blockAssignment) is a void method call, and thus it cannot be parameterized |
12 | Expression context.getVariableCompiler().assignMethodArguments19(argsNode.getPre(),argsNode.getPreCount(),argsNode.getPost(),argsNode.getPostCount(),argsNode.getPostIndex(),argsNode.getOptArgs(),argsNode.getOptionalArgsCount(),requiredAssignment,optionalGiven,optionalNotGiven,restAssignment,blockAssignment) is a void method call, and thus it cannot be parameterized |
13 | Clone fragment #1 returns variables optionalGiven, optionalNotGiven, required, opt, rest , while Clone fragment #2 returns variables optionalGiven, optionalNotGiven |