public JCTree build(final JCTree lhs) { int newTag = tree.tag - JCTree.ASGOffset; // Erasure (TransTypes) can change the type of // tree.lhs. However, we can still get the // unerased type of tree.lhs as it is stored // in tree.type in Attr. Symbol newOperator = rs.resolveBinaryOperator(tree.pos(), newTag, attrEnv, tree.type, tree.rhs.type); JCExpression expr = (JCExpression)lhs; if (expr.type != tree.type) expr = make.TypeCast(tree.type, expr); JCBinary opResult = make.Binary(newTag, expr, tree.rhs); opResult.operator = newOperator; opResult.type = newOperator.type.getReturnType(); JCTypeCast newRhs = make.TypeCast(types.unboxedType(tree.type), opResult); return make.Assign((JCExpression)lhs, newRhs).setType(tree.type); } });
public JCTree build(final JCTree lhs) { JCTree.Tag newTag = tree.getTag().noAssignOp(); // Erasure (TransTypes) can change the type of // tree.lhs. However, we can still get the // unerased type of tree.lhs as it is stored // in tree.type in Attr. Symbol newOperator = rs.resolveBinaryOperator(tree.pos(), newTag, attrEnv, tree.type, tree.rhs.type); JCExpression expr = (JCExpression)lhs; if (expr.type != tree.type) expr = make.TypeCast(tree.type, expr); JCBinary opResult = make.Binary(newTag, expr, tree.rhs); opResult.operator = newOperator; opResult.type = newOperator.type.getReturnType(); JCExpression newRhs = boxingReq ? make.TypeCast(types.unboxedType(tree.type), opResult) : opResult; return make.Assign((JCExpression)lhs, newRhs).setType(tree.type); } });
/** Return tree simulating the assignment {@code this.name = name}, where * name is the name of a free variable. */ JCStatement initField(int pos, Name name) { Scope.Entry e = proxies.lookup(name); Symbol rhs = e.sym; Assert.check(rhs.owner.kind == MTH); Symbol lhs = e.next().sym; Assert.check(rhs.owner.owner == lhs.owner); make.at(pos); return make.Exec( make.Assign( make.Select(make.This(lhs.owner.erasure(types)), lhs), make.Ident(rhs)).setType(lhs.erasure(types))); }
/** Return tree simulating the assignment <this.name = name>, where * name is the name of a free variable. */ JCStatement initField(int pos, Name name) { Scope.Entry e = proxies.lookup(name); Symbol rhs = e.sym; assert rhs.owner.kind == MTH; Symbol lhs = e.next().sym; assert rhs.owner.owner == lhs.owner; make.at(pos); return make.Exec( make.Assign( make.Select(make.This(lhs.owner.erasure(types)), lhs), make.Ident(rhs)).setType(lhs.erasure(types))); }
/** Return tree simulating the assignment <this.name = name>, where * name is the name of a free variable. */ JCStatement initField(int pos, Name name) { Scope.Entry e = proxies.lookup(name); Symbol rhs = e.sym; assert rhs.owner.kind == MTH; Symbol lhs = e.next().sym; assert rhs.owner.owner == lhs.owner; make.at(pos); return make.Exec( make.Assign( make.Select(make.This(lhs.owner.erasure(types)), lhs), make.Ident(rhs)).setType(lhs.erasure(types))); }
/** Return tree simulating the assignment {@code this.name = name}, where * name is the name of a free variable. */ JCStatement initField(int pos, Name name) { Scope.Entry e = proxies.lookup(name); Symbol rhs = e.sym; Assert.check(rhs.owner.kind == MTH); Symbol lhs = e.next().sym; Assert.check(rhs.owner.owner == lhs.owner); make.at(pos); return make.Exec( make.Assign( make.Select(make.This(lhs.owner.erasure(types)), lhs), make.Ident(rhs)).setType(lhs.erasure(types))); }
/** Return tree simulating the assignment {@code this.this$n = this$n}. */ JCStatement initOuterThis(int pos) { VarSymbol rhs = outerThisStack.head; Assert.check(rhs.owner.kind == MTH); VarSymbol lhs = outerThisStack.tail.head; Assert.check(rhs.owner.owner == lhs.owner); make.at(pos); return make.Exec( make.Assign( make.Select(make.This(lhs.owner.erasure(types)), lhs), make.Ident(rhs)).setType(lhs.erasure(types))); }
/** Return tree simulating the assignment {@code this.this$n = this$n}. */ JCStatement initOuterThis(int pos) { VarSymbol rhs = outerThisStack.head; Assert.check(rhs.owner.kind == MTH); VarSymbol lhs = outerThisStack.tail.head; Assert.check(rhs.owner.owner == lhs.owner); make.at(pos); return make.Exec( make.Assign( make.Select(make.This(lhs.owner.erasure(types)), lhs), make.Ident(rhs)).setType(lhs.erasure(types))); }
/** Return tree simulating the assignment <this.this$n = this$n>. */ JCStatement initOuterThis(int pos) { VarSymbol rhs = outerThisStack.head; assert rhs.owner.kind == MTH; VarSymbol lhs = outerThisStack.tail.head; assert rhs.owner.owner == lhs.owner; make.at(pos); return make.Exec( make.Assign( make.Select(make.This(lhs.owner.erasure(types)), lhs), make.Ident(rhs)).setType(lhs.erasure(types))); }
public JCAnnotation visitTypeCompoundInternal(Attribute.TypeCompound compound) { ListBuffer<JCExpression> args = new ListBuffer<JCExpression>(); for (List<Pair<Symbol.MethodSymbol,Attribute>> values = compound.values; values.nonEmpty(); values=values.tail) { Pair<MethodSymbol,Attribute> pair = values.head; JCExpression valueTree = translate(pair.snd); args.append(Assign(Ident(pair.fst), valueTree).setType(valueTree.type)); } return TypeAnnotation(Type(compound.type), args.toList()); } public void visitArray(Attribute.Array array) {
public JCAnnotation visitCompoundInternal(Attribute.Compound compound) { ListBuffer<JCExpression> args = new ListBuffer<JCExpression>(); for (List<Pair<Symbol.MethodSymbol,Attribute>> values = compound.values; values.nonEmpty(); values=values.tail) { Pair<MethodSymbol,Attribute> pair = values.head; JCExpression valueTree = translate(pair.snd); args.append(Assign(Ident(pair.fst), valueTree).setType(valueTree.type)); } return Annotation(Type(compound.type), args.toList()); } public JCAnnotation visitTypeCompoundInternal(Attribute.TypeCompound compound) {
/** Return tree simulating the assignment <this.this$n = this$n>. */ JCStatement initOuterThis(int pos) { VarSymbol rhs = outerThisStack.head; assert rhs.owner.kind == MTH; VarSymbol lhs = outerThisStack.tail.head; assert rhs.owner.owner == lhs.owner; make.at(pos); return make.Exec( make.Assign( make.Select(make.This(lhs.owner.erasure(types)), lhs), make.Ident(rhs)).setType(lhs.erasure(types))); }
public JCAnnotation visitCompoundInternal(Attribute.Compound compound) { ListBuffer<JCExpression> args = new ListBuffer<JCExpression>(); for (List<Pair<Symbol.MethodSymbol,Attribute>> values = compound.values; values.nonEmpty(); values=values.tail) { Pair<MethodSymbol,Attribute> pair = values.head; JCExpression valueTree = translate(pair.snd); args.append(Assign(Ident(pair.fst), valueTree).setType(valueTree.type)); } return Annotation(Type(compound.type), args.toList()); } public void visitArray(Attribute.Array array) {
public JCAnnotation visitCompoundInternal(Attribute.Compound compound) { ListBuffer<JCExpression> args = new ListBuffer<JCExpression>(); for (List<Pair<Symbol.MethodSymbol,Attribute>> values = compound.values; values.nonEmpty(); values=values.tail) { Pair<MethodSymbol,Attribute> pair = values.head; JCExpression valueTree = translate(pair.snd); args.append(Assign(Ident(pair.fst), valueTree).setType(valueTree.type)); } return Annotation(Type(compound.type), args.toList()); } public JCAnnotation visitTypeCompoundInternal(Attribute.TypeCompound compound) {
/** Construct an assignment from a variable symbol and a right hand side. */ public JCStatement Assignment(Symbol v, JCExpression rhs) { return Exec(Assign(Ident(v), rhs).setType(v.type)); }
/** Construct an assignment from a variable symbol and a right hand side. */ public JCStatement Assignment(Symbol v, JCExpression rhs) { return Exec(Assign(Ident(v), rhs).setType(v.type)); }
/** Construct an assignment from a variable symbol and a right hand side. */ public JCStatement Assignment(Symbol v, JCExpression rhs) { return Exec(Assign(Ident(v), rhs).setType(v.type)); }
public JCAnnotation visitTypeCompoundInternal(Attribute.TypeCompound compound) { ListBuffer<JCExpression> args = new ListBuffer<JCExpression>(); for (List<Pair<Symbol.MethodSymbol,Attribute>> values = compound.values; values.nonEmpty(); values=values.tail) { Pair<MethodSymbol,Attribute> pair = values.head; JCExpression valueTree = translate(pair.snd); args.append(Assign(Ident(pair.fst), valueTree).setType(valueTree.type)); } return TypeAnnotation(Type(compound.type), args.toList()); } public void visitArray(Attribute.Array array) {
/** Construct an assignment from a variable symbol and a right hand side. */ public JCStatement Assignment(Symbol v, JCExpression rhs) { return Exec(Assign(Ident(v), rhs).setType(v.type)); }
public JCAnnotation visitCompoundInternal(Attribute.Compound compound) { ListBuffer<JCExpression> args = new ListBuffer<JCExpression>(); for (List<Pair<Symbol.MethodSymbol,Attribute>> values = compound.values; values.nonEmpty(); values=values.tail) { Pair<MethodSymbol,Attribute> pair = values.head; JCExpression valueTree = translate(pair.snd); args.append(Assign(Ident(pair.fst), valueTree).setType(valueTree.type)); } return Annotation(Type(compound.type), args.toList()); } public void visitArray(Attribute.Array array) {