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 / +12 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
					// the resolveType cannot be double or long
337
						codeStream.pop();
334
					codeStream.pop();
338
					}
339
				}
335
				}
340
			}
336
			}
341
			codeStream.recordPositionsFrom(pc, this.sourceStart);
337
			codeStream.recordPositionsFrom(pc, this.sourceStart);
342
			return;
338
			return;
343
		}
339
		}
344
		expression.generateCode(
340
		expression.generateCode(currentScope, codeStream, valueRequired || needRuntimeCheckcast);
345
			currentScope,
341
		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);
342
			codeStream.checkcast(this.resolvedType);
351
			if (valueRequired) {
343
		}
352
				codeStream.generateImplicitConversion(implicitConversion);
344
		if (valueRequired) {
353
			} else {
345
			codeStream.generateImplicitConversion(implicitConversion);
354
				codeStream.pop();
346
		} else if (needRuntimeCheckcast) {
355
			}
347
			codeStream.pop();
356
		} else {
357
			if (valueRequired)
358
				codeStream.generateImplicitConversion(implicitConversion);
359
		}
348
		}
360
		codeStream.recordPositionsFrom(pc, this.sourceStart);
349
		codeStream.recordPositionsFrom(pc, this.sourceStart);
361
	}
350
	}

Return to bug 159654