RubyArray values = (RubyArray) arg;
int length = values.getLength();
switch (length) {
case 0:
assign(runtime, context, self, block);
break;
case 1:
assign(runtime, context, self, values.eltInternal(0), block);
break;
case 2:
assign(runtime, context, self, values.eltInternal(0), values.eltInternal(1), block);
break;
case 3:
assign(runtime, context, self, values.eltInternal(0), values.eltInternal(1),
values.eltInternal(2), block);
break;
default:
parameter1.assign(runtime, context, self, values.eltInternal(0), block, false);
parameter2.assign(runtime, context, self, values.eltInternal(1), block, false);
rest.assign(runtime, context, self, values.subseqLight(2, length - 2), block, true);
break;
}
RubyArray values = (RubyArray) arg;
int valueLength = values.getLength();
switch (valueLength) {
case 0:
assign(runtime, context, self, block);
break;
case 1:
assign(runtime, context, self, values.eltInternal(0), block);
break;
case 2:
assign(runtime, context, self, values.eltInternal(0), values.eltInternal(1), block);
break;
case 3:
assign(runtime, context, self, values.eltInternal(0), values.eltInternal(1),
values.eltInternal(2), block);
break;
}
// Populate up to shorter of calling arguments or local parameters in the block
for (int i = 0; i < preLength && i < valueLength; i++) {
pre.get(i).assign(runtime, context, self, values.eltInternal(i), block, false);
}
Clone fragments detected by clone detection tool
File path: /jruby-1.4.0/src/org/jruby/runtime/assigner/Pre2Rest1Post0Assigner.java
|
|
File path: /jruby-1.4.0/src/org/jruby/runtime/assigner/PreManyRest0Post0Assigner.java
|
Method name: void assignArray(Ruby, ThreadContext, IRubyObject, IRubyObject, Block)
|
|
Method name: void assignArray(Ruby, ThreadContext, IRubyObject, IRubyObject, Block)
|
Number of AST nodes: 20
|
|
Number of AST nodes: 17
|
|
1 | RubyArray values = (RubyArray) arg;↵ | | 1 | RubyArray values = (RubyArray) arg;↵
|
2 | int length = values.getLength();↵ | | 2 | int valueLength = values.getLength();↵
|
|
3 | switch (length) {↵ | | 3 | switch (valueLength) {↵
|
4 | case 0:↵ | | 4 | case 0:↵
|
5 | assign(runtime, context, self, block);↵ | | 5 | assign(runtime, context, self, block);↵
|
6 | break;↵ | | 6 | break;↵
|
7 | case 1:↵ | | 7 | case 1:↵
|
8 | assign(runtime, context, self, values.eltInternal(0), block);↵ | | 8 | assign(runtime, context, self, values.eltInternal(0), block);↵
|
9 | break;↵ | | 9 | break;↵
|
10 | case 2:↵ | | 10 | case 2:↵
|
11 | assign(runtime, context, self, values.eltInternal(0), values.eltInternal(1), block);↵ | | 11 | assign(runtime, context, self, values.eltInternal(0), values.eltInternal(1), block);↵
|
12 | break;↵ | | 12 | break;↵
|
13 | case 3:↵ | | 13 | case 3:↵
|
14 | assign(runtime, context, self, values.eltInternal(0), values.eltInternal(1),↵ | | 14 | assign(runtime, context, self, values.eltInternal(0), values.eltInternal(1),↵
|
15 | values.eltInternal(2), block);↵ | | 15 | values.eltInternal(2), block);↵
|
16 | break;↵ | | 16 | break;↵
|
17 | default:↵ | | 17 | ↵
|
18 | parameter1.assign(runtime, context, self, values.eltInternal(0), block, false);↵ | | |
|
19 | parameter2.assign(runtime, context, self, values.eltInternal(1), block, false);↵ | | |
|
|
20 | ↵ | | 18 | }↵
|
|
| | | 19 | // Populate up to shorter of calling arguments or local parameters in the block↵
|
| | | 20 | for (int i = 0; i < preLength && i < valueLength; i++) {↵
|
21 | rest.assign(runtime, context, self, values.subseqLight(2, length - 2), block, true);↵ | | 21 | pre.get(i).assign(runtime, context, self, values.↵
|
22 | break;↵ | | 22 | eltInternal(i), block, false);↵
|
23 | } | | 23 | }
|
See real code fragment |
|
See real code fragment |
Summary
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) | 0.1 |
Clones location | Clones are in different classes having the same super class |
Number of node comparisons | 96 |
-
{Non-refactorable}
Mapping Summary
Number of mapped statements | 15 |
Number of unmapped statements in the first code fragment | 5 |
Number of unmapped statements in the second code fragment | 0 |
Time elapsed for statement mapping (ms) | 3.4 |
Clone type | Type 3 |
Mapped Statements
ID |
Statement |
|
ID |
Statement |
1 | RubyArray values = (RubyArray)arg; | | 1 | RubyArray values = (RubyArray)arg; |
2 | int length = values.getLength(); | | 2 | int valueLength = values.getLength(); |
3 | switch (length) | | 3 | switch (valueLength) |
4 | | | 4 | |
5 | assign(runtime, context, self, block); | | 5 | assign(runtime, context, self, block); |
6 | | | 6 | |
7 | | | 7 | |
8 | assign(runtime, context, self, values.eltInternal(0), block); | | 8 | assign(runtime, context, self, values.eltInternal(0), block); |
9 | | | 9 | |
10 | | | 10 | |
11 | assign(runtime, context, self, values.eltInternal(0), values.eltInternal(1), block); | | 11 | assign(runtime, context, self, values.eltInternal(0), values.eltInternal(1), block); |
12 | | | 12 | |
13 | | | 13 | |
14 | assign(runtime, context, self, values.eltInternal(0), values.eltInternal(1), values.eltInternal(2), block); | | 14 | assign(runtime, context, self, values.eltInternal(0), values.eltInternal(1), values.eltInternal(2), block); |
15 | | | 15 | |
16 | | | | |
17 | parameter1.assign(runtime, context, self, values.eltInternal(0), block, false); | | | |
18 | parameter2.assign(runtime, context, self, values.eltInternal(1), block, false); | | | |
19 | rest.assign(runtime, context, self, values.subseqLight(2, length - 2), block, true); | | | |
20 | | | | |
Precondition Violations (2)
Row |
Violation |
1 | Unmatched break; |
2 | Clone fragment #1 returns variables values, length , while Clone fragment #2 returns variables valueLength, values |