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 |
} |