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 (-12 / +12 lines)
Lines 326-341 Link Here
326
	
326
	
327
		int pc = codeStream.position;
327
		int pc = codeStream.position;
328
		boolean needRuntimeCheckcast = (this.bits & GenerateCheckcast) != 0;
328
		boolean needRuntimeCheckcast = (this.bits & GenerateCheckcast) != 0;
329
		boolean generateExpression = valueRequired || needRuntimeCheckcast;
329
		if (constant != Constant.NotAConstant) {
330
		if (constant != Constant.NotAConstant) {
330
			if (valueRequired || needRuntimeCheckcast) { // Added for: 1F1W9IG: IVJCOM:WINNT - Compiler omits casting check
331
			if (generateExpression) { // Added for: 1F1W9IG: IVJCOM:WINNT - Compiler omits casting check
331
				codeStream.generateConstant(constant, implicitConversion);
332
				codeStream.generateConstant(constant, implicitConversion);
332
				if (needRuntimeCheckcast) {
333
				if (needRuntimeCheckcast) {
333
					codeStream.checkcast(this.resolvedType);
334
					codeStream.checkcast(this.resolvedType);
334
					if (valueRequired) {
335
				}
335
						codeStream.generateImplicitConversion(this.implicitConversion);
336
				if (valueRequired) {
336
					} else {
337
					codeStream.generateImplicitConversion(this.implicitConversion);
337
						codeStream.pop();
338
				} else {
338
					}
339
					codeStream.pop();
339
				}
340
				}
340
			}
341
			}
341
			codeStream.recordPositionsFrom(pc, this.sourceStart);
342
			codeStream.recordPositionsFrom(pc, this.sourceStart);
Lines 344-362 Link Here
344
		expression.generateCode(
345
		expression.generateCode(
345
			currentScope,
346
			currentScope,
346
			codeStream,
347
			codeStream,
347
			valueRequired || needRuntimeCheckcast);
348
			generateExpression);
348
		if (needRuntimeCheckcast 
349
		if (needRuntimeCheckcast 
349
				&& this.expression.postConversionType(currentScope) != this.resolvedType) { // no need to issue a checkcast if already done as genericCast
350
				&& this.expression.postConversionType(currentScope) != this.resolvedType) { // no need to issue a checkcast if already done as genericCast
350
			codeStream.checkcast(this.resolvedType);
351
			codeStream.checkcast(this.resolvedType);
352
		}
353
		if (generateExpression) {
351
			if (valueRequired) {
354
			if (valueRequired) {
352
				codeStream.generateImplicitConversion(implicitConversion);
355
				codeStream.generateImplicitConversion(implicitConversion);
353
			} else {
356
			} else {
354
				codeStream.pop();
357
	   			codeStream.pop();
355
			}
358
			}
356
		} else {
359
   		}
357
			if (valueRequired)
358
				codeStream.generateImplicitConversion(implicitConversion);
359
		}
360
		codeStream.recordPositionsFrom(pc, this.sourceStart);
360
		codeStream.recordPositionsFrom(pc, this.sourceStart);
361
	}
361
	}
362
362

Return to bug 159654