MCPcopy Index your code
hub / github.com/clojure/clojure / doEmit

Method doEmit

src/jvm/clojure/lang/Compiler.java:9427–9481  ·  view source on GitHub ↗
(C context, ObjExpr objx, GeneratorAdapter gen, boolean emitUnboxed)

Source from the content-addressed store, hash-verified

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;

Callers 2

emitMethod · 0.95
emitUnboxedMethod · 0.95

Calls 15

getTypeMethod · 0.95
emitExprForIntsMethod · 0.95
emitExprForHashesMethod · 0.95
int_arrayMethod · 0.95
emitThenForIntsMethod · 0.95
containsMethod · 0.95
emitExprMethod · 0.95
emitThenForHashesMethod · 0.95
newLabelMethod · 0.80
keySetMethod · 0.80
markMethod · 0.80
maybePrimitiveTypeMethod · 0.80

Tested by

no test coverage detected