From 774bd9179ecc515902db63ef2ba7271e6d6d4a6e Mon Sep 17 00:00:00 2001 From: paltherr Date: Mon, 13 Oct 2003 15:43:36 +0000 Subject: - Addded Definitions.PATTERN_WILDCARD - Removed Names.WILDCARD - Added Names.PATTERN_WILDCARD - Added Names.IMPORT_WILDCARD - Replaced most uses of Names.PATTERN_WILDCARD by Definitions.PATTERN_WILDCARD - Removed TreeInfo.isWildcardPattern --- sources/scalac/ast/TreeInfo.java | 11 ----------- sources/scalac/ast/parser/Parser.java | 19 ++++++++++--------- sources/scalac/ast/parser/PatternNormalizer.java | 2 +- sources/scalac/symtab/Definitions.java | 6 ++++++ sources/scalac/transformer/UnCurry.java | 2 +- .../transformer/matching/AlgebraicMatcher.java | 14 ++++++++------ .../scalac/transformer/matching/Autom2Scala.java | 4 +--- .../transformer/matching/BindingBerrySethi.java | 5 +++-- .../transformer/matching/LeftTracerInScala.java | 4 +--- .../transformer/matching/PatternMatcher.java | 8 ++++---- .../scalac/transformer/matching/PatternTool.java | 1 - .../transformer/matching/RightTracerInScala.java | 4 +--- .../transformer/matching/TestRegTraverser.java | 8 +++++--- .../transformer/matching/TestRegTraverser.scala | 6 ++++-- sources/scalac/typechecker/Analyzer.java | 22 ++++++++++++++-------- sources/scalac/typechecker/AnalyzerPhase.java | 8 ++++---- sources/scalac/typechecker/DeSugarize.java | 10 +++++----- sources/scalac/typechecker/ImportList.java | 2 +- sources/scalac/typechecker/RefCheck.java | 2 +- sources/scalac/util/Names.java | 3 ++- 20 files changed, 72 insertions(+), 69 deletions(-) (limited to 'sources/scalac') diff --git a/sources/scalac/ast/TreeInfo.java b/sources/scalac/ast/TreeInfo.java index d0a8b41311..d7efc130cc 100644 --- a/sources/scalac/ast/TreeInfo.java +++ b/sources/scalac/ast/TreeInfo.java @@ -239,15 +239,4 @@ public class TreeInfo { return false; } } - - /** returns true if the argument is a wildcard pattern - */ - public static boolean isWildcardPattern( Tree tree ) { - switch( tree ) { - case Ident( Name n ): - return ( n == Names.WILDCARD ) && ( tree.symbol() == null ); - default: - return false; - } - } } diff --git a/sources/scalac/ast/parser/Parser.java b/sources/scalac/ast/parser/Parser.java index 03231b150f..a25b219d3b 100644 --- a/sources/scalac/ast/parser/Parser.java +++ b/sources/scalac/ast/parser/Parser.java @@ -1136,7 +1136,7 @@ public class Parser implements Tokens { rhs.pos, pat.duplicate(), Tree.Empty, make.Literal(s.pos, Boolean.TRUE)), (CaseDef)make.CaseDef( - rhs.pos, make.Ident(rhs.pos, Names.WILDCARD), Tree.Empty, + rhs.pos, make.Ident(rhs.pos, Names.PATTERN_WILDCARD), Tree.Empty, make.Literal(s.pos, Boolean.FALSE))})}); return make.PatDef(pos, 0, pat, rhs); } @@ -1222,10 +1222,11 @@ public class Parser implements Tokens { Tree pattern2() { Tree p = pattern3(); if (s.token == AT && TreeInfo.isVarPattern(p)) { - if( !TreeInfo.isWildcardPattern(p) ) - return make.Bind(s.skipToken(), ((Ident)p).name, pattern3()); - else - return pattern3(); + switch (p) { + case Ident(Name name): + if (name == Names.PATTERN_WILDCARD) return pattern3(); + } + return make.Bind(s.skipToken(), ((Ident)p).name, pattern3()); } return p; } @@ -1316,7 +1317,7 @@ public class Parser implements Tokens { } return t; case USCORE: - return make.Ident(s.skipToken(), Names.WILDCARD); + return make.Ident(s.skipToken(), Names.PATTERN_WILDCARD); case CHARLIT: case INTLIT: case LONGLIT: @@ -1571,7 +1572,7 @@ public class Parser implements Tokens { while (true) { if (s.token == USCORE) { s.nextToken(); - return make.Import(startpos, t, new Name[]{Names.WILDCARD}); + return make.Import(startpos, t, new Name[]{Names.IMPORT_WILDCARD}); } else if (s.token == LBRACE) { return make.Import(startpos, t, importSelectors()); } else { @@ -1610,7 +1611,7 @@ public class Parser implements Tokens { boolean importSelector(LinkedList/**/ names) { if (s.token == USCORE) { s.nextToken(); - names.add(Names.WILDCARD); + names.add(Names.IMPORT_WILDCARD); return true; } else { Name name = ident(); @@ -1619,7 +1620,7 @@ public class Parser implements Tokens { s.nextToken(); if (s.token == USCORE) { s.nextToken(); - names.add(Names.WILDCARD); + names.add(Names.IMPORT_WILDCARD); } else { names.add(ident()); } diff --git a/sources/scalac/ast/parser/PatternNormalizer.java b/sources/scalac/ast/parser/PatternNormalizer.java index 1a358f859f..b76fd11a3b 100644 --- a/sources/scalac/ast/parser/PatternNormalizer.java +++ b/sources/scalac/ast/parser/PatternNormalizer.java @@ -88,7 +88,7 @@ public class PatternNormalizer { case Ident( Name var ): if(( inAlt ) - &&( var != Names.WILDCARD ) + &&( var != Names.PATTERN_WILDCARD ) &&( var.toString().lastIndexOf("$") == -1)) { unit.error( t.pos, diff --git a/sources/scalac/symtab/Definitions.java b/sources/scalac/symtab/Definitions.java index f4dfe9560b..481da7c6d0 100644 --- a/sources/scalac/symtab/Definitions.java +++ b/sources/scalac/symtab/Definitions.java @@ -193,6 +193,8 @@ public class Definitions { public Symbol BARBAR() { loadBooleanMembers(); return BARBAR; } public Symbol AMPAMP() { loadBooleanMembers(); return AMPAMP; } + public final Symbol PATTERN_WILDCARD; + public Definitions(Global global) { // a hack to make definitions accessible earlier to other // components @@ -427,6 +429,10 @@ public class Definitions { Position.NOPOS, Names.ZERO, ROOT_CLASS, 0); ZERO.setInfo(ALL_TYPE); ROOT.members().enter(ZERO); + + PATTERN_WILDCARD = new TermSymbol( + Position.NOPOS, Names.PATTERN_WILDCARD, Symbol.NONE, 0); + PATTERN_WILDCARD.setType(ALL_TYPE); } private Symbol newParameter(Symbol owner, Type tp) { diff --git a/sources/scalac/transformer/UnCurry.java b/sources/scalac/transformer/UnCurry.java index ce5ad8035c..bdc0072adc 100644 --- a/sources/scalac/transformer/UnCurry.java +++ b/sources/scalac/transformer/UnCurry.java @@ -177,7 +177,7 @@ public class UnCurry extends OwnerTransformer if (name == TypeNames.WILDCARD_STAR) { unit.error(tree.pos, " argument does not correspond to `*'-parameter"); return tree; - } else if (TreeInfo.isWildcardPattern(tree)) { + } else if (tree.symbol() == global.definitions.PATTERN_WILDCARD) { return tree; } else { return applyDef(super.transform(tree)); diff --git a/sources/scalac/transformer/matching/AlgebraicMatcher.java b/sources/scalac/transformer/matching/AlgebraicMatcher.java index 57ba2ce7fe..0914cb7f15 100644 --- a/sources/scalac/transformer/matching/AlgebraicMatcher.java +++ b/sources/scalac/transformer/matching/AlgebraicMatcher.java @@ -189,10 +189,10 @@ public class AlgebraicMatcher extends PatternMatcher { return res; } return mk.ConstrPat(tree.pos, theType); - case Typed(Ident(Name name), Tree tpe): // typed pattern + case Typed(Ident ident, Tree tpe): // typed pattern theType = getConstrType( tpe.type ); assert (env != null ) : "env is null"; - if (/*(env != null) &&*/ (name != Names.WILDCARD)) + if (/*(env != null) &&*/ (ident.symbol() != defs.PATTERN_WILDCARD)) env.newBoundVar( ((Tree.Typed)tree).expr.symbol(), theType, @@ -202,8 +202,8 @@ public class AlgebraicMatcher extends PatternMatcher { return mk.DefaultPat( tree.pos, theType ); else return mk.ConstrPat( tree.pos, theType ); - case Bind(Name name, Ident(Name id)): // x @ _ - if( id == Names.WILDCARD ) { + case Bind(Name name, Ident ident): // x @ _ + if( ident.symbol() == defs.PATTERN_WILDCARD ) { env.newBoundVar( tree.symbol(), theType, @@ -212,11 +212,13 @@ public class AlgebraicMatcher extends PatternMatcher { } throw new ApplicationError("cannot handle "+tree); case Ident(Name name): // pattern without args or variable - if ((tree.symbol() != null) && tree.symbol().isPrimaryConstructor()) + Symbol symbol = tree.symbol(); + assert symbol != null: tree; + if (symbol.isPrimaryConstructor()) return mk.ConstrPat(tree.pos, theType); else if (name.isVariable()) { assert (env != null ) : "env is null"; - if (/*(env != null) &&*/ (name != Names.WILDCARD)) + if (/*(env != null) &&*/ (symbol != defs.PATTERN_WILDCARD)) env.newBoundVar( tree.symbol(), theType, diff --git a/sources/scalac/transformer/matching/Autom2Scala.java b/sources/scalac/transformer/matching/Autom2Scala.java index d380172993..8b2430a07b 100644 --- a/sources/scalac/transformer/matching/Autom2Scala.java +++ b/sources/scalac/transformer/matching/Autom2Scala.java @@ -261,9 +261,7 @@ public class Autom2Scala { Tree.Empty, gen.mkBooleanLit( Position.FIRSTPOS, true )), (CaseDef) cf.make.CaseDef( pat.pos, - cf.make.Ident(pat.pos, Names.WILDCARD) - //.setSymbol( Symbol.NONE ) - .setType(pat.type()), + cf.gen.Ident(pat.pos, defs.PATTERN_WILDCARD), Tree.Empty, gen.mkBooleanLit( pat.pos, false )) }, false diff --git a/sources/scalac/transformer/matching/BindingBerrySethi.java b/sources/scalac/transformer/matching/BindingBerrySethi.java index ab1528bdb8..e9da02fa92 100644 --- a/sources/scalac/transformer/matching/BindingBerrySethi.java +++ b/sources/scalac/transformer/matching/BindingBerrySethi.java @@ -1,5 +1,6 @@ package scalac.transformer.matching ; +import scalac.Global ; import scalac.ApplicationError ; import scalac.ast.Tree ; import scalac.util.Name ; @@ -58,11 +59,11 @@ public class BindingBerrySethi extends BerrySethi { this.varAt.put( i, activeBinders.clone() ); // below @ ? break; case Ident( Name name ): - assert ( name == Names.WILDCARD )||( name.toString().indexOf("$") > -1 ) : "found variable label "+name; + assert ( pat.symbol() == Global.instance.definitions.PATTERN_WILDCARD )||( name.toString().indexOf("$") > -1 ) : "found variable label "+name; Vector binders = (Vector) activeBinders.clone(); /* - if( name != Names.WILDCARD) { + if( pat.symbol() != Global.instance.definitions.PATTERN_WILDCARD) { binders.add( pat.symbol() ); } */ diff --git a/sources/scalac/transformer/matching/LeftTracerInScala.java b/sources/scalac/transformer/matching/LeftTracerInScala.java index a74f4f994a..9a20a93bc2 100644 --- a/sources/scalac/transformer/matching/LeftTracerInScala.java +++ b/sources/scalac/transformer/matching/LeftTracerInScala.java @@ -294,9 +294,7 @@ public class LeftTracerInScala extends TracerInScala { Tree.Empty, gen.mkBooleanLit( cf.pos, true )), (CaseDef) cf.make.CaseDef( pat.pos, - cf.make.Ident(pat.pos, Names.WILDCARD) - //DON'T .setSymbol( Symbol.NONE ) ! - .setType(pat.type()), + cf.gen.Ident(pat.pos, defs.PATTERN_WILDCARD), Tree.Empty, gen.mkBooleanLit( cf.pos, false)) }, false diff --git a/sources/scalac/transformer/matching/PatternMatcher.java b/sources/scalac/transformer/matching/PatternMatcher.java index 887b117595..8b1bbdb5c1 100644 --- a/sources/scalac/transformer/matching/PatternMatcher.java +++ b/sources/scalac/transformer/matching/PatternMatcher.java @@ -272,7 +272,7 @@ public class PatternMatcher extends PatternTool { switch (tree) { case Bind(Name name, Tree pat): PatternNode node = patternNode(pat, header, env); - if ((env != null) && (name != Names.WILDCARD)) + if ((env != null) && (tree.symbol() != defs.PATTERN_WILDCARD)) env.newBoundVar( tree.symbol(), tree.type, header.selector); @@ -284,12 +284,12 @@ public class PatternMatcher extends PatternTool { return mk.SequencePat( tree.pos, tree.type, ts.length ); } return mk.ConstrPat(tree.pos, tree.type); - case Typed(Ident(Name name), Tree tpe): // variable pattern + case Typed(Ident ident, Tree tpe): // variable pattern PatternNode node = (header.type.isSubType(tpe.type)) ? mk.DefaultPat(tree.pos, tpe.type) : mk.ConstrPat(tree.pos, tpe.type); - if ((env != null) && (name != Names.WILDCARD)) + if ((env != null) && (ident.symbol() != defs.PATTERN_WILDCARD)) switch (node) { case ConstrPat(Symbol casted): env.newBoundVar( @@ -305,7 +305,7 @@ public class PatternMatcher extends PatternTool { } return node; case Ident(Name name): // pattern without args or variable - if (name == Names.WILDCARD) + if (tree.symbol() == defs.PATTERN_WILDCARD) return mk.DefaultPat(tree.pos, header.type); else if (tree.symbol().isPrimaryConstructor()) return mk.ConstrPat(tree.pos, tree.type); diff --git a/sources/scalac/transformer/matching/PatternTool.java b/sources/scalac/transformer/matching/PatternTool.java index bad82cde60..7cd144de7c 100644 --- a/sources/scalac/transformer/matching/PatternTool.java +++ b/sources/scalac/transformer/matching/PatternTool.java @@ -32,7 +32,6 @@ abstract class PatternTool { public static final Name SCALA_MATCHERROR_N = Name.fromString("scala.MatchError"); public static final Name MATCHERROR_N = Name.fromString("MatchError"); public static final Name FAIL_N = Name.fromString("fail"); - //public static final Name WILDCARD_N = Name.fromString("_"); use Names public static final Name LENGTH_N = Name.fromString("length"); public static final Name APPLY_N = Name.fromString("apply"); diff --git a/sources/scalac/transformer/matching/RightTracerInScala.java b/sources/scalac/transformer/matching/RightTracerInScala.java index 5648c49833..73ef37520f 100644 --- a/sources/scalac/transformer/matching/RightTracerInScala.java +++ b/sources/scalac/transformer/matching/RightTracerInScala.java @@ -356,9 +356,7 @@ public class RightTracerInScala extends TracerInScala { Tree.Empty, handleBody1( helpMap3 )/* "freshening */), (CaseDef) cf.make.CaseDef( pat.pos, - cf.make.Ident( pat.pos, Names.WILDCARD ) - //DON'T .setSymbol( Symbol.NONE ) !!FIXED - .setType( pat.type() ), + cf.gen.Ident( pat.pos, defs.PATTERN_WILDCARD ), Tree.Empty, gen.mkBooleanLit( pat.pos, false )) }, // else return false true // do binding please diff --git a/sources/scalac/transformer/matching/TestRegTraverser.java b/sources/scalac/transformer/matching/TestRegTraverser.java index cea429eb03..0394110128 100644 --- a/sources/scalac/transformer/matching/TestRegTraverser.java +++ b/sources/scalac/transformer/matching/TestRegTraverser.java @@ -8,6 +8,7 @@ package scalac.transformer.matching; +import scalac.Global; import scalac.ast.*; import scalac.util.*; import scalac.symtab.*; @@ -28,9 +29,10 @@ public class TestRegTraverser extends Traverser { variables.add(tree.symbol()); traverse(pat); break; - case Ident(Name name): - if ((name != Names.WILDCARD) && - variables.contains(tree.symbol())) + case Ident(_): + Symbol symbol = tree.symbol(); + if ((symbol != Global.instance.definitions.PATTERN_WILDCARD) && + variables.contains(symbol)) result = true; break; case CaseDef(Tree pat, _, _): diff --git a/sources/scalac/transformer/matching/TestRegTraverser.scala b/sources/scalac/transformer/matching/TestRegTraverser.scala index 9db9dac492..b00de87626 100644 --- a/sources/scalac/transformer/matching/TestRegTraverser.scala +++ b/sources/scalac/transformer/matching/TestRegTraverser.scala @@ -8,6 +8,7 @@ package scalac.transformer.matching; +import scalac.Global; import scalac.ast._; import scalac.util._; import scalac.symtab._; @@ -28,8 +29,9 @@ object TestRegTraverser extends Traverser { variables.add(tree.symbol()); traverse(pat); case Tree$Ident( name ) => - result = ((name != Names.WILDCARD) - && variables.contains(tree.symbol())) + val symbol = tree.symbol(); + result = ((symbol != Global.instance.definitions.PATTERN_WILDCARD) + && variables.contains(symbol)) case Tree$CaseDef(pat, _, _) => traverse(pat); case _ => diff --git a/sources/scalac/typechecker/Analyzer.java b/sources/scalac/typechecker/Analyzer.java index 3834f4ddb0..595f1e462c 100644 --- a/sources/scalac/typechecker/Analyzer.java +++ b/sources/scalac/typechecker/Analyzer.java @@ -1040,6 +1040,7 @@ public class Analyzer extends Transformer implements Modifiers, Kinds { } else { ((DefDef) tree).rhs = rhs = transform(rhs, EXPRmode); restype = rhs.type; + // !!! restype = rhs.type.widen(); // !!! } restype = checkNoEscape(tpe.pos, restype); popContext(); @@ -1069,6 +1070,7 @@ public class Analyzer extends Transformer implements Modifiers, Kinds { ((ValDef) tree).rhs = rhs = transform(rhs, EXPRmode); } owntype = rhs.type; + // !!! owntype = rhs.type.widen(); // !!! } popContext(); } @@ -1102,7 +1104,7 @@ public class Analyzer extends Transformer implements Modifiers, Kinds { owntype = expr.type; Type tp = owntype.widen(); for (int i = 0; i < selectors.length; i = i + 2) { - if (selectors[i] != Names.WILDCARD && + if (selectors[i] != Names.IMPORT_WILDCARD && tp.lookup(selectors[i]) == Symbol.NONE && tp.lookup(selectors[i].toTypeName()) == Symbol.NONE) error(tree.pos, NameTransformer.decode(selectors[i]) + " is not a member of " + expr + " of type " + expr.type); @@ -1373,7 +1375,7 @@ public class Analyzer extends Transformer implements Modifiers, Kinds { Type seqConstructorType(Type paramtp, Type resulttp) { Symbol constr = resulttp.symbol().primaryConstructor(); Symbol param = new TermSymbol( - Position.NOPOS, Names.WILDCARD, constr, PARAM | REPEATED).setInfo( + Position.NOPOS, Names.PATTERN_WILDCARD, constr, PARAM | REPEATED).setInfo( paramtp.baseType(definitions.SEQ_CLASS)); return Type.MethodType(new Symbol[]{param}, resulttp); } @@ -2438,25 +2440,27 @@ public class Analyzer extends Transformer implements Modifiers, Kinds { Symbol vble, vble2 = null; // if vble is bound with @, there is already a symbol - if( name != Names.WILDCARD ) { + if( name != Names.PATTERN_WILDCARD ) { vble2 = context.scope.lookup( name ); } if ( patternVars.containsKey( vble2 ) ) vble = vble2; else { - vble = new TermSymbol(tree.pos, + vble = name == Names.PATTERN_WILDCARD + ? definitions.PATTERN_WILDCARD + : new TermSymbol(tree.pos, name, context.owner, 0).setType( pt ); - if((( mode & SEQUENCEmode) != 0)&&( name != Names.WILDCARD )) { + if((( mode & SEQUENCEmode) != 0)&&( name != Names.PATTERN_WILDCARD )) { // x => x @ _ in sequence patterns tree = desugarize.IdentPattern( tree ); } } - if ( name != Names.WILDCARD ) enterInScope(vble); + if ( name != Names.PATTERN_WILDCARD ) enterInScope(vble); return tree.setSymbol(vble).setType(pt); } else { return transformIdent(tree, name); @@ -2567,7 +2571,7 @@ public class Analyzer extends Transformer implements Modifiers, Kinds { for( int i = 0; i < trees.length; i ++ ) switch(trees[i]) { case Ident( Name name ): - if( name != Names.WILDCARD ) { + if( name != Names.PATTERN_WILDCARD ) { Symbol vble = context.scope.lookup( name ); /* Symbol vble = new TermSymbol( trees[ i ].pos, name, currentOwner, 0) @@ -2577,7 +2581,9 @@ public class Analyzer extends Transformer implements Modifiers, Kinds { */ trees[i] = desugarize.IdentPattern(trees[i]).setSymbol(vble) .setType(vble.type()); - } + } else { + trees[i] = gen.Ident(trees[i].pos, definitions.PATTERN_WILDCARD); + } } } diff --git a/sources/scalac/typechecker/AnalyzerPhase.java b/sources/scalac/typechecker/AnalyzerPhase.java index 2b7d0fa886..3db1a0bf1c 100644 --- a/sources/scalac/typechecker/AnalyzerPhase.java +++ b/sources/scalac/typechecker/AnalyzerPhase.java @@ -44,7 +44,7 @@ public class AnalyzerPhase extends Phase { .setSymbol(definitions.JAVALANG) .setType(Type.singleType(java.type, definitions.JAVALANG)); Tree importjavalang = make.Import( - Position.NOPOS, javalang, new Name[]{Names.WILDCARD}) + Position.NOPOS, javalang, new Name[]{Names.IMPORT_WILDCARD}) .setSymbol(definitions.JAVALANG) .setType(definitions.UNIT_TYPE); startContext.imports = new ImportList( @@ -54,7 +54,7 @@ public class AnalyzerPhase extends Phase { .setSymbol(definitions.SCALA) .setType(Type.singleType(definitions.ROOT_TYPE, definitions.SCALA)); Tree importscala = make.Import( - Position.NOPOS, scala, new Name[]{Names.WILDCARD}) + Position.NOPOS, scala, new Name[]{Names.IMPORT_WILDCARD}) .setSymbol(definitions.SCALA) .setType(definitions.UNIT_TYPE); startContext.imports = new ImportList( @@ -73,7 +73,7 @@ public class AnalyzerPhase extends Phase { .setType(Type.singleType(scala.type, scalaPredefSym)); Tree importscalaPredef = make.Import( - Position.NOPOS, scalaPredef, new Name[]{Names.WILDCARD}) + Position.NOPOS, scalaPredef, new Name[]{Names.IMPORT_WILDCARD}) .setSymbol(scalaPredefSym) .setType(definitions.UNIT_TYPE); startContext.imports = new ImportList( @@ -96,7 +96,7 @@ public class AnalyzerPhase extends Phase { .setType(Type.singleType(definitions.ROOT_TYPE, module)); Tree importConsole = make.Import( - Position.NOPOS, console, new Name[]{Names.WILDCARD}) + Position.NOPOS, console, new Name[]{Names.IMPORT_WILDCARD}) .setSymbol(module) .setType(definitions.UNIT_TYPE); consoleContext.imports = new ImportList( diff --git a/sources/scalac/typechecker/DeSugarize.java b/sources/scalac/typechecker/DeSugarize.java index 09c27be4ac..8640962780 100644 --- a/sources/scalac/typechecker/DeSugarize.java +++ b/sources/scalac/typechecker/DeSugarize.java @@ -84,7 +84,7 @@ public class DeSugarize implements Kinds, Modifiers { void getVariables(Tree tree, ArrayList vars) { switch(tree) { case Ident(Name name): - if (name.isVariable() && name != Names.WILDCARD) vars.add(name); + if (name.isVariable() && name != Names.PATTERN_WILDCARD) vars.add(name); break; case Typed(Tree expr, Tree type): getVariables(expr, vars); @@ -103,7 +103,7 @@ public class DeSugarize implements Kinds, Modifiers { case Literal( _ ): break; case Bind( Name name, Tree t ): - if (name.isVariable() && name != Names.WILDCARD) vars.add(name); + if (name.isVariable() && name != Names.PATTERN_WILDCARD) vars.add(name); getVariables( t, vars ); break; case Alternative( Tree ts[] ): @@ -207,7 +207,7 @@ public class DeSugarize implements Kinds, Modifiers { } cases1[cases.length] = (CaseDef) make.CaseDef( tree.pos, - make.Ident(tree.pos, Names.WILDCARD), + gen.Ident(tree.pos, global.definitions.PATTERN_WILDCARD), Tree.Empty, gen.mkBooleanLit(tree.pos, false)); return make.Visitor(tree.pos, cases1); @@ -544,10 +544,10 @@ public class DeSugarize implements Kinds, Modifiers { public Tree IdentPattern( Tree tree ) { switch( tree ) { case Ident( Name name ): - if( name == Names.WILDCARD ) throw new ApplicationError("nothing to desugarize"); + if( name == Names.PATTERN_WILDCARD ) throw new ApplicationError("nothing to desugarize"); return make.Bind( tree.pos, name, - make.Ident( tree.pos, Names.WILDCARD ).setType( tree.type )).setType( tree.type ); + gen.Ident( tree.pos, global.definitions.PATTERN_WILDCARD )).setType( tree.type ); default: throw new ApplicationError("ident expected"); } diff --git a/sources/scalac/typechecker/ImportList.java b/sources/scalac/typechecker/ImportList.java index f631ade171..c26bff092d 100644 --- a/sources/scalac/typechecker/ImportList.java +++ b/sources/scalac/typechecker/ImportList.java @@ -62,7 +62,7 @@ class ImportList { return t.lookupNonPrivate(selectors[i]); } else if (name.toTermName() == selectors[i]) { renamed = true; - } else if (selectors[i] == Names.WILDCARD && !renamed) { + } else if (selectors[i] == Names.IMPORT_WILDCARD && !renamed) { return t.lookupNonPrivate(name); } } diff --git a/sources/scalac/typechecker/RefCheck.java b/sources/scalac/typechecker/RefCheck.java index b1356c2826..3d1461272c 100644 --- a/sources/scalac/typechecker/RefCheck.java +++ b/sources/scalac/typechecker/RefCheck.java @@ -987,7 +987,7 @@ public class RefCheck extends Transformer implements Modifiers, Kinds { if (name == TypeNames.WILDCARD_STAR) return tree; - if( TreeInfo.isWildcardPattern( tree ) ) + if( sym == defs.PATTERN_WILDCARD ) return elimTypeNode(tree); //System.out.println("name: "+name); diff --git a/sources/scalac/util/Names.java b/sources/scalac/util/Names.java index ab192c99de..fc7d44ff9f 100644 --- a/sources/scalac/util/Names.java +++ b/sources/scalac/util/Names.java @@ -47,7 +47,8 @@ public class Names { public static final Name ERROR = Name.ERROR; public static final Name NOSYMBOL = Name.fromString(""); public static final Name EMPTY = Name.fromString(""); - public static final Name WILDCARD = Name.fromString("_"); + public static final Name IMPORT_WILDCARD = Name.fromString("_"); + public static final Name PATTERN_WILDCARD = Name.fromString("_"); public static final Name COMPOUND_NAME = Name.fromString(""); public static final Name ANON_CLASS_NAME = Name.fromString("$anon"); public static final Name ZERO = Name.fromString(""); -- cgit v1.2.3