< prev index next >

src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TransPatterns.java

Print this page
rev 57740 : [mq]: 8237528


 153             //=>
 154             //(let T' N$temp = E; N$temp instanceof T && (N = (T) N$temp == (T) N$temp))
 155             JCBindingPattern patt = (JCBindingPattern)tree.pattern;
 156             VarSymbol pattSym = patt.symbol;
 157             Type tempType = tree.expr.type.hasTag(BOT) ?
 158                     syms.objectType
 159                     : tree.expr.type;
 160             VarSymbol temp = new VarSymbol(pattSym.flags() | Flags.SYNTHETIC,
 161                     names.fromString(pattSym.name.toString() + target.syntheticNameChar() + "temp"),
 162                     tempType,
 163                     patt.symbol.owner);
 164             JCExpression translatedExpr = translate(tree.expr);
 165             Type castTargetType = types.boxedTypeOrType(pattSym.erasure(types));
 166 
 167             result = makeTypeTest(make.Ident(temp), make.Type(castTargetType));
 168 
 169             VarSymbol bindingVar = bindingContext.bindingDeclared(patt.symbol);
 170             if (bindingVar != null) { //TODO: cannot be null here?
 171                 JCAssign fakeInit = (JCAssign)make.at(tree.pos).Assign(
 172                         make.Ident(bindingVar), convert(make.Ident(temp), castTargetType)).setType(bindingVar.erasure(types));
 173                 result = makeBinary(Tag.AND, (JCExpression)result,
 174                         makeBinary(Tag.EQ, fakeInit, convert(make.Ident(temp), castTargetType)));



 175             }
 176             result = make.at(tree.pos).LetExpr(make.VarDef(temp, translatedExpr), (JCExpression)result).setType(syms.booleanType);
 177             ((LetExpr) result).needsCond = true;
 178         } else {
 179             super.visitTypeTest(tree);
 180         }
 181     }
 182 
 183     @Override
 184     public void visitBinary(JCBinary tree) {
 185         bindingContext = new BasicBindingContext();
 186         try {
 187             super.visitBinary(tree);
 188             result = bindingContext.decorateExpression(tree);
 189         } finally {
 190             bindingContext.pop();
 191         }
 192     }
 193 
 194     @Override




 153             //=>
 154             //(let T' N$temp = E; N$temp instanceof T && (N = (T) N$temp == (T) N$temp))
 155             JCBindingPattern patt = (JCBindingPattern)tree.pattern;
 156             VarSymbol pattSym = patt.symbol;
 157             Type tempType = tree.expr.type.hasTag(BOT) ?
 158                     syms.objectType
 159                     : tree.expr.type;
 160             VarSymbol temp = new VarSymbol(pattSym.flags() | Flags.SYNTHETIC,
 161                     names.fromString(pattSym.name.toString() + target.syntheticNameChar() + "temp"),
 162                     tempType,
 163                     patt.symbol.owner);
 164             JCExpression translatedExpr = translate(tree.expr);
 165             Type castTargetType = types.boxedTypeOrType(pattSym.erasure(types));
 166 
 167             result = makeTypeTest(make.Ident(temp), make.Type(castTargetType));
 168 
 169             VarSymbol bindingVar = bindingContext.bindingDeclared(patt.symbol);
 170             if (bindingVar != null) { //TODO: cannot be null here?
 171                 JCAssign fakeInit = (JCAssign)make.at(tree.pos).Assign(
 172                         make.Ident(bindingVar), convert(make.Ident(temp), castTargetType)).setType(bindingVar.erasure(types));
 173                 LetExpr nestedLE = make.LetExpr(List.of(make.Exec(fakeInit)),
 174                                                 make.Literal(true));
 175                 nestedLE.needsCond = true;
 176                 nestedLE.setType(syms.booleanType);
 177                 result = makeBinary(Tag.AND, (JCExpression)result, nestedLE);
 178             }
 179             result = make.at(tree.pos).LetExpr(make.VarDef(temp, translatedExpr), (JCExpression)result).setType(syms.booleanType);
 180             ((LetExpr) result).needsCond = true;
 181         } else {
 182             super.visitTypeTest(tree);
 183         }
 184     }
 185 
 186     @Override
 187     public void visitBinary(JCBinary tree) {
 188         bindingContext = new BasicBindingContext();
 189         try {
 190             super.visitBinary(tree);
 191             result = bindingContext.decorateExpression(tree);
 192         } finally {
 193             bindingContext.pop();
 194         }
 195     }
 196 
 197     @Override


< prev index next >