170 * expression's original type. |
170 * expression's original type. |
171 */ |
171 */ |
172 JCExpression retype(JCExpression tree, Type erasedType, Type target) { |
172 JCExpression retype(JCExpression tree, Type erasedType, Type target) { |
173 // System.err.println("retype " + tree + " to " + erasedType);//DEBUG |
173 // System.err.println("retype " + tree + " to " + erasedType);//DEBUG |
174 if (!erasedType.isPrimitive()) { |
174 if (!erasedType.isPrimitive()) { |
175 if (target != null && target.isPrimitive()) |
175 if (target != null && target.isPrimitive()) { |
176 target = erasure(tree.type); |
176 target = erasure(tree.type); |
|
177 } |
177 tree.type = erasedType; |
178 tree.type = erasedType; |
178 if (target != null) return coerce(tree, target); |
179 if (target != null) { |
|
180 return coerce(tree, target); |
|
181 } |
179 } |
182 } |
180 return tree; |
183 return tree; |
181 } |
184 } |
182 |
185 |
183 /** Translate method argument list, casting each argument |
186 /** Translate method argument list, casting each argument |
684 } |
687 } |
685 |
688 |
686 public void visitAssign(JCAssign tree) { |
689 public void visitAssign(JCAssign tree) { |
687 tree.lhs = translate(tree.lhs, null); |
690 tree.lhs = translate(tree.lhs, null); |
688 tree.rhs = translate(tree.rhs, erasure(tree.lhs.type)); |
691 tree.rhs = translate(tree.rhs, erasure(tree.lhs.type)); |
689 tree.type = erasure(tree.type); |
692 tree.type = erasure(tree.lhs.type); |
690 result = tree; |
693 result = retype(tree, tree.type, pt); |
691 } |
694 } |
692 |
695 |
693 public void visitAssignop(JCAssignOp tree) { |
696 public void visitAssignop(JCAssignOp tree) { |
694 tree.lhs = translate(tree.lhs, null); |
697 tree.lhs = translate(tree.lhs, null); |
695 tree.rhs = translate(tree.rhs, tree.operator.type.getParameterTypes().tail.head); |
698 tree.rhs = translate(tree.rhs, tree.operator.type.getParameterTypes().tail.head); |