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

Method emit

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

Source from the content-addressed store, hash-verified

7154 }
7155
7156 public void emit(C context, ObjExpr objx, GeneratorAdapter gen){
7157 Label loopLabel = (Label) LOOP_LABEL.deref();
7158 if(loopLabel == null)
7159 throw new IllegalStateException();
7160 for(int i = 0; i < loopLocals.count(); i++)
7161 {
7162 LocalBinding lb = (LocalBinding) loopLocals.nth(i);
7163 Expr arg = (Expr) args.nth(i);
7164 if(lb.getPrimitiveType() != null)
7165 {
7166 Class primc = lb.getPrimitiveType();
7167 final Class pc = maybePrimitiveType(arg);
7168 if(pc == primc)
7169 ((MaybePrimitiveExpr) arg).emitUnboxed(C.EXPRESSION, objx, gen);
7170 else if(primc == long.class && pc == int.class)
7171 {
7172 ((MaybePrimitiveExpr) arg).emitUnboxed(C.EXPRESSION, objx, gen);
7173 gen.visitInsn(I2L);
7174 }
7175 else if(primc == double.class && pc == float.class)
7176 {
7177 ((MaybePrimitiveExpr) arg).emitUnboxed(C.EXPRESSION, objx, gen);
7178 gen.visitInsn(F2D);
7179 }
7180 else if(primc == int.class && pc == long.class)
7181 {
7182 ((MaybePrimitiveExpr) arg).emitUnboxed(C.EXPRESSION, objx, gen);
7183 gen.invokeStatic(RT_TYPE, Method.getMethod("int intCast(long)"));
7184 }
7185 else if(primc == float.class && pc == double.class)
7186 {
7187 ((MaybePrimitiveExpr) arg).emitUnboxed(C.EXPRESSION, objx, gen);
7188 gen.visitInsn(D2F);
7189 }
7190 else
7191 {
7192// if(true)//RT.booleanCast(RT.WARN_ON_REFLECTION.deref()))
7193 throw new IllegalArgumentException
7194// RT.errPrintWriter().println
7195 (//source + ":" + line +
7196 " recur arg for primitive local: " +
7197 lb.name + " is not matching primitive, had: " +
7198 (arg.hasJavaClass() ? arg.getJavaClass().getName():"Object") +
7199 ", needed: " +
7200 primc.getName());
7201// arg.emit(C.EXPRESSION, objx, gen);
7202// HostExpr.emitUnboxArg(objx,gen,primc);
7203 }
7204 }
7205 else
7206 {
7207 arg.emit(C.EXPRESSION, objx, gen);
7208 }
7209 }
7210
7211 for(int i = loopLocals.count() - 1; i >= 0; i--)
7212 {
7213 LocalBinding lb = (LocalBinding) loopLocals.nth(i);

Callers 1

emitUnboxedMethod · 0.95

Calls 15

getPrimitiveTypeMethod · 0.95
getMethodMethod · 0.95
hasJavaClassMethod · 0.95
getJavaClassMethod · 0.95
emitMethod · 0.95
getTypeMethod · 0.95
maybePrimitiveTypeMethod · 0.80
storeArgMethod · 0.80
getOpcodeMethod · 0.80
goToMethod · 0.80
derefMethod · 0.65
countMethod · 0.65

Tested by

no test coverage detected