(C context, ObjExpr objx, GeneratorAdapter gen)
| 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); |
no test coverage detected