View | Details | Raw Unified | Return to bug 159654 | Differences between
and this patch

Collapse All | Expand All

(-)compiler/org/eclipse/jdt/internal/compiler/ast/CastExpression.java (-23 / +13 lines)
Lines 319-328 Link Here
319
	 * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
319
	 * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
320
	 * @param valueRequired boolean
320
	 * @param valueRequired boolean
321
	 */
321
	 */
322
	public void generateCode(
322
	public void generateCode(BlockScope currentScope, CodeStream codeStream, boolean valueRequired) {
323
		BlockScope currentScope,
324
		CodeStream codeStream,
325
		boolean valueRequired) {
326
	
323
	
327
		int pc = codeStream.position;
324
		int pc = codeStream.position;
328
		boolean needRuntimeCheckcast = (this.bits & GenerateCheckcast) != 0;
325
		boolean needRuntimeCheckcast = (this.bits & GenerateCheckcast) != 0;
Lines 331-361 Link Here
331
				codeStream.generateConstant(constant, implicitConversion);
328
				codeStream.generateConstant(constant, implicitConversion);
332
				if (needRuntimeCheckcast) {
329
				if (needRuntimeCheckcast) {
333
					codeStream.checkcast(this.resolvedType);
330
					codeStream.checkcast(this.resolvedType);
334
					if (valueRequired) {
331
				}
335
						codeStream.generateImplicitConversion(this.implicitConversion);
332
				if (valueRequired) {
336
					} else {
333
					codeStream.generateImplicitConversion(this.implicitConversion);
337
						codeStream.pop();
334
				} else {
338
					}
335
					codeStream.pop();
339
				}
336
				}
340
			}
337
			}
341
			codeStream.recordPositionsFrom(pc, this.sourceStart);
338
			codeStream.recordPositionsFrom(pc, this.sourceStart);
342
			return;
339
			return;
343
		}
340
		}
344
		expression.generateCode(
341
		expression.generateCode(currentScope, codeStream, valueRequired || needRuntimeCheckcast);
345
			currentScope,
342
		if (needRuntimeCheckcast && this.expression.postConversionType(currentScope) != this.resolvedType) { // no need to issue a checkcast if already done as genericCast
346
			codeStream,
347
			valueRequired || needRuntimeCheckcast);
348
		if (needRuntimeCheckcast 
349
				&& this.expression.postConversionType(currentScope) != this.resolvedType) { // no need to issue a checkcast if already done as genericCast
350
			codeStream.checkcast(this.resolvedType);
343
			codeStream.checkcast(this.resolvedType);
351
			if (valueRequired) {
344
		}
352
				codeStream.generateImplicitConversion(implicitConversion);
345
		if (valueRequired) {
353
			} else {
346
			codeStream.generateImplicitConversion(implicitConversion);
354
				codeStream.pop();
347
		} else if (needRuntimeCheckcast) {
355
			}
348
			codeStream.pop();
356
		} else {
357
			if (valueRequired)
358
				codeStream.generateImplicitConversion(implicitConversion);
359
		}
349
		}
360
		codeStream.recordPositionsFrom(pc, this.sourceStart);
350
		codeStream.recordPositionsFrom(pc, this.sourceStart);
361
	}
351
	}

Return to bug 159654