< prev index next >

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

Print this page
rev 51258 : imported patch switch

*** 46,55 **** --- 46,56 ---- import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE; import static com.sun.tools.javac.code.TypeTag.CLASS; import static com.sun.tools.javac.code.TypeTag.TYPEVAR; import static com.sun.tools.javac.code.TypeTag.VOID; import static com.sun.tools.javac.comp.CompileStates.CompileState; + import com.sun.tools.javac.tree.JCTree.JCBreak; /** This pass translates Generic Java to conventional Java. * * <p><b>This is NOT part of any supported API. * If you write code that depends on this, you do so at your own risk.
*** 559,573 **** tree.cases = translateCases(tree.cases); result = tree; } public void visitCase(JCCase tree) { ! tree.pat = translate(tree.pat, null); tree.stats = translate(tree.stats); result = tree; } public void visitSynchronized(JCSynchronized tree) { tree.lock = translate(tree.lock, erasure(tree.lock.type)); tree.body = translate(tree.body); result = tree; } --- 560,585 ---- tree.cases = translateCases(tree.cases); result = tree; } public void visitCase(JCCase tree) { ! tree.pats = translate(tree.pats, null); tree.stats = translate(tree.stats); result = tree; } + public void visitSwitchExpression(JCSwitchExpression tree) { + Type selsuper = types.supertype(tree.selector.type); + boolean enumSwitch = selsuper != null && + selsuper.tsym == syms.enumSym; + Type target = enumSwitch ? erasure(tree.selector.type) : syms.intType; + tree.selector = translate(tree.selector, target); + tree.cases = translate(tree.cases); + tree.type = erasure(tree.type); + result = retype(tree, tree.type, pt); + } + public void visitSynchronized(JCSynchronized tree) { tree.lock = translate(tree.lock, erasure(tree.lock.type)); tree.body = translate(tree.body); result = tree; }
*** 604,613 **** --- 616,635 ---- if (!returnType.hasTag(VOID)) tree.expr = translate(tree.expr, returnType); result = tree; } + @Override + public void visitBreak(JCBreak tree) { + if (tree.isValueBreak()) { + tree.value = translate(tree.value, erasure(tree.value.type)); + tree.value.type = erasure(tree.value.type); + tree.value = retype(tree.value, tree.value.type, pt); + } + result = tree; + } + public void visitThrow(JCThrow tree) { tree.expr = translate(tree.expr, erasure(tree.expr.type)); result = tree; }
< prev index next >