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

Collapse All | Expand All

(-)compiler/org/eclipse/jdt/internal/compiler/ast/SingleNameReference.java (-3 / +24 lines)
Lines 349-355 Link Here
349
					if (fieldBinding.isStatic()) {
349
					if (fieldBinding.isStatic()) {
350
						if (!valueRequired) {
350
						if (!valueRequired) {
351
							// if no valueRequired, still need possible side-effects of <clinit> invocation, if field belongs to different class
351
							// if no valueRequired, still need possible side-effects of <clinit> invocation, if field belongs to different class
352
							if (((FieldBinding)binding).original().declaringClass == this.actualReceiverType.erasure()) {
352
							if (((FieldBinding)binding).original().declaringClass == this.actualReceiverType.erasure()
353
									&& ((implicitConversion & TypeIds.UNBOXING) == 0)) {
353
								break;
354
								break;
354
							}
355
							}
355
						}
356
						}
Lines 360-368 Link Here
360
							codeStream.invokestatic(syntheticAccessors[READ]);
361
							codeStream.invokestatic(syntheticAccessors[READ]);
361
						}
362
						}
362
						if (valueRequired) {
363
						if (valueRequired) {
363
							if (this.genericCast != null) codeStream.checkcast(this.genericCast);			
364
							if (this.genericCast != null) codeStream.checkcast(this.genericCast);
364
							codeStream.generateImplicitConversion(implicitConversion);
365
							codeStream.generateImplicitConversion(implicitConversion);
365
						} else {
366
						} else {
367
							if ((implicitConversion & TypeIds.UNBOXING) != 0) {
368
								codeStream.generateImplicitConversion(implicitConversion);
369
							}
366
							// could occur if !valueRequired but static field belongs to different class
370
							// could occur if !valueRequired but static field belongs to different class
367
							switch (fieldBinding.type.id) {
371
							switch (fieldBinding.type.id) {
368
								case T_long :
372
								case T_long :
Lines 374-380 Link Here
374
							}
378
							}
375
						}							
379
						}							
376
					} else {
380
					} else {
377
						if (!valueRequired) {
381
						if (!valueRequired && ((implicitConversion & TypeIds.UNBOXING) == 0)) {
378
							// if no valueRequired, optimize out entire gen
382
							// if no valueRequired, optimize out entire gen
379
							break;
383
							break;
380
						}
384
						}
Lines 410-415 Link Here
410
							codeStream.load(localBinding);
414
							codeStream.load(localBinding);
411
						}
415
						}
412
						codeStream.generateImplicitConversion(implicitConversion);
416
						codeStream.generateImplicitConversion(implicitConversion);
417
					} else if ((implicitConversion & TypeIds.UNBOXING) != 0) {
418
419
						// outer local?
420
						if ((bits & DepthMASK) != 0) {
421
							// outer local can be reached either through a synthetic arg or a synthetic field
422
							VariableBinding[] path = currentScope.getEmulationPath(localBinding);
423
							codeStream.generateOuterAccess(path, this, localBinding, currentScope);
424
						} else {
425
							// regular local variable read
426
							codeStream.load(localBinding);
427
						}
428
						codeStream.generateImplicitConversion(implicitConversion);
429
						if ((localBinding.type == TypeBinding.LONG) || (localBinding.type == TypeBinding.DOUBLE)) {
430
							codeStream.pop2();
431
						} else {
432
							codeStream.pop();
433
						}
413
					}
434
					}
414
			}
435
			}
415
		}
436
		}
(-)compiler/org/eclipse/jdt/internal/compiler/ast/FieldReference.java (-2 / +6 lines)
Lines 188-194 Link Here
188
		codeStream.recordPositionsFrom(pc, this.sourceStart);
188
		codeStream.recordPositionsFrom(pc, this.sourceStart);
189
		return;
189
		return;
190
	}
190
	}
191
	if (valueRequired || (!isThisReceiver && currentScope.compilerOptions().complianceLevel >= ClassFileConstants.JDK1_4)) {
191
	if (valueRequired || (!isThisReceiver && currentScope.compilerOptions().complianceLevel >= ClassFileConstants.JDK1_4)
192
			|| ((implicitConversion & TypeIds.UNBOXING) != 0)) {
192
		receiver.generateCode(currentScope, codeStream, !isStatic);
193
		receiver.generateCode(currentScope, codeStream, !isStatic);
193
		pc = codeStream.position;
194
		pc = codeStream.position;
194
		if (this.codegenBinding.declaringClass == null) { // array length
195
		if (this.codegenBinding.declaringClass == null) { // array length
Lines 210-218 Link Here
210
				codeStream.invokestatic(syntheticAccessors[READ]);
211
				codeStream.invokestatic(syntheticAccessors[READ]);
211
			}
212
			}
212
			if (valueRequired) {
213
			if (valueRequired) {
213
				if (this.genericCast != null) codeStream.checkcast(this.genericCast);			
214
				if (this.genericCast != null) codeStream.checkcast(this.genericCast);
214
				codeStream.generateImplicitConversion(implicitConversion);
215
				codeStream.generateImplicitConversion(implicitConversion);
215
			} else {
216
			} else {
217
				if ((implicitConversion & TypeIds.UNBOXING) != 0) {
218
					codeStream.generateImplicitConversion(implicitConversion);
219
				}
216
				// could occur if !valueRequired but compliance >= 1.4
220
				// could occur if !valueRequired but compliance >= 1.4
217
				switch (this.codegenBinding.type.id) {
221
				switch (this.codegenBinding.type.id) {
218
					case T_long :
222
					case T_long :
(-)compiler/org/eclipse/jdt/internal/compiler/ast/ArrayReference.java (+3 lines)
Lines 95-100 Link Here
95
		if (valueRequired) {
95
		if (valueRequired) {
96
			codeStream.generateImplicitConversion(implicitConversion);
96
			codeStream.generateImplicitConversion(implicitConversion);
97
		} else {
97
		} else {
98
			if ((implicitConversion & TypeIds.UNBOXING) != 0) {
99
				codeStream.generateImplicitConversion(implicitConversion);
100
			}
98
			if (this.resolvedType == TypeBinding.LONG
101
			if (this.resolvedType == TypeBinding.LONG
99
				|| this.resolvedType == TypeBinding.DOUBLE) {
102
				|| this.resolvedType == TypeBinding.DOUBLE) {
100
				codeStream.pop2();
103
				codeStream.pop2();
(-)compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedNameReference.java (-1 / +5 lines)
Lines 402-408 Link Here
402
					boolean isFirst = lastFieldBinding == this.binding 
402
					boolean isFirst = lastFieldBinding == this.binding 
403
													&& (this.indexOfFirstFieldBinding == 1 || lastFieldBinding.declaringClass == currentScope.enclosingReceiverType())
403
													&& (this.indexOfFirstFieldBinding == 1 || lastFieldBinding.declaringClass == currentScope.enclosingReceiverType())
404
													&& this.otherBindings == null; // could be dup: next.next.next
404
													&& this.otherBindings == null; // could be dup: next.next.next
405
					if (valueRequired  || (!isFirst && currentScope.compilerOptions().complianceLevel >= ClassFileConstants.JDK1_4)) {
405
					if (valueRequired  || (!isFirst && currentScope.compilerOptions().complianceLevel >= ClassFileConstants.JDK1_4)
406
							|| ((implicitConversion & TypeIds.UNBOXING) != 0)) {
406
						int lastFieldPc = codeStream.position;
407
						int lastFieldPc = codeStream.position;
407
						if (lastFieldBinding.declaringClass == null) { // array length
408
						if (lastFieldBinding.declaringClass == null) { // array length
408
							codeStream.arraylength();
409
							codeStream.arraylength();
Lines 431-436 Link Here
431
								if (requiredGenericCast != null) codeStream.checkcast(requiredGenericCast);
432
								if (requiredGenericCast != null) codeStream.checkcast(requiredGenericCast);
432
								codeStream.generateImplicitConversion(implicitConversion);
433
								codeStream.generateImplicitConversion(implicitConversion);
433
							} else {
434
							} else {
435
								if ((implicitConversion & TypeIds.UNBOXING) != 0) {
436
									codeStream.generateImplicitConversion(implicitConversion);
437
								}
434
								// could occur if !valueRequired but compliance >= 1.4
438
								// could occur if !valueRequired but compliance >= 1.4
435
								switch (lastFieldBinding.type.id) {
439
								switch (lastFieldBinding.type.id) {
436
									case T_long :
440
									case T_long :

Return to bug 174879