(C context, ObjExpr objx, GeneratorAdapter gen, boolean emitUnboxed)
| 3253 | } |
| 3254 | |
| 3255 | public void doEmit(C context, ObjExpr objx, GeneratorAdapter gen, boolean emitUnboxed){ |
| 3256 | Label nullLabel = gen.newLabel(); |
| 3257 | Label falseLabel = gen.newLabel(); |
| 3258 | Label endLabel = gen.newLabel(); |
| 3259 | |
| 3260 | gen.visitLineNumber(line, gen.mark()); |
| 3261 | |
| 3262 | if(testExpr instanceof StaticMethodExpr && ((StaticMethodExpr)testExpr).canEmitIntrinsicPredicate()) |
| 3263 | { |
| 3264 | ((StaticMethodExpr) testExpr).emitIntrinsicPredicate(C.EXPRESSION, objx, gen, falseLabel); |
| 3265 | } |
| 3266 | else if(maybePrimitiveType(testExpr) == boolean.class) |
| 3267 | { |
| 3268 | ((MaybePrimitiveExpr) testExpr).emitUnboxed(C.EXPRESSION, objx, gen); |
| 3269 | gen.ifZCmp(gen.EQ, falseLabel); |
| 3270 | } |
| 3271 | else |
| 3272 | { |
| 3273 | testExpr.emit(C.EXPRESSION, objx, gen); |
| 3274 | gen.dup(); |
| 3275 | gen.ifNull(nullLabel); |
| 3276 | gen.getStatic(BOOLEAN_OBJECT_TYPE, "FALSE", BOOLEAN_OBJECT_TYPE); |
| 3277 | gen.visitJumpInsn(IF_ACMPEQ, falseLabel); |
| 3278 | } |
| 3279 | if(emitUnboxed) |
| 3280 | ((MaybePrimitiveExpr)thenExpr).emitUnboxed(context, objx, gen); |
| 3281 | else |
| 3282 | thenExpr.emit(context, objx, gen); |
| 3283 | gen.goTo(endLabel); |
| 3284 | gen.mark(nullLabel); |
| 3285 | gen.pop(); |
| 3286 | gen.mark(falseLabel); |
| 3287 | if(emitUnboxed) |
| 3288 | ((MaybePrimitiveExpr)elseExpr).emitUnboxed(context, objx, gen); |
| 3289 | else |
| 3290 | elseExpr.emit(context, objx, gen); |
| 3291 | gen.mark(endLabel); |
| 3292 | } |
| 3293 | |
| 3294 | public boolean hasJavaClass() { |
| 3295 | return thenExpr.hasJavaClass() |
no test coverage detected