(C context, ObjExpr objx, GeneratorAdapter gen, boolean emitUnboxed)
| 9425 | } |
| 9426 | |
| 9427 | public void doEmit(C context, ObjExpr objx, GeneratorAdapter gen, boolean emitUnboxed){ |
| 9428 | Label defaultLabel = gen.newLabel(); |
| 9429 | Label endLabel = gen.newLabel(); |
| 9430 | SortedMap<Integer,Label> labels = new TreeMap(); |
| 9431 | |
| 9432 | for(Integer i : tests.keySet()) |
| 9433 | { |
| 9434 | labels.put(i, gen.newLabel()); |
| 9435 | } |
| 9436 | |
| 9437 | gen.visitLineNumber(line, gen.mark()); |
| 9438 | |
| 9439 | Class primExprClass = maybePrimitiveType(expr); |
| 9440 | Type primExprType = primExprClass == null ? null : Type.getType(primExprClass); |
| 9441 | |
| 9442 | if (testType == intKey) |
| 9443 | emitExprForInts(objx, gen, primExprType, defaultLabel); |
| 9444 | else |
| 9445 | emitExprForHashes(objx, gen); |
| 9446 | |
| 9447 | if (switchType == sparseKey) |
| 9448 | { |
| 9449 | Label[] la = new Label[labels.size()]; |
| 9450 | la = labels.values().toArray(la); |
| 9451 | int[] ints = Numbers.int_array(tests.keySet()); |
| 9452 | gen.visitLookupSwitchInsn(defaultLabel, ints, la); |
| 9453 | } |
| 9454 | else |
| 9455 | { |
| 9456 | Label[] la = new Label[(high-low)+1]; |
| 9457 | for(int i=low;i<=high;i++) |
| 9458 | { |
| 9459 | la[i-low] = labels.containsKey(i) ? labels.get(i) : defaultLabel; |
| 9460 | } |
| 9461 | gen.visitTableSwitchInsn(low, high, defaultLabel, la); |
| 9462 | } |
| 9463 | |
| 9464 | for(Integer i : labels.keySet()) |
| 9465 | { |
| 9466 | gen.mark(labels.get(i)); |
| 9467 | if (testType == intKey) |
| 9468 | emitThenForInts(objx, gen, primExprType, tests.get(i), thens.get(i), defaultLabel, emitUnboxed); |
| 9469 | else if (RT.contains(skipCheck, i) == RT.T) |
| 9470 | emitExpr(objx, gen, thens.get(i), emitUnboxed); |
| 9471 | else |
| 9472 | emitThenForHashes(objx, gen, tests.get(i), thens.get(i), defaultLabel, emitUnboxed); |
| 9473 | gen.goTo(endLabel); |
| 9474 | } |
| 9475 | |
| 9476 | gen.mark(defaultLabel); |
| 9477 | emitExpr(objx, gen, defaultExpr, emitUnboxed); |
| 9478 | gen.mark(endLabel); |
| 9479 | if(context == C.STATEMENT) |
| 9480 | gen.pop(); |
| 9481 | } |
| 9482 | |
| 9483 | private boolean isShiftMasked(){ |
| 9484 | return mask != 0; |
no test coverage detected