diff options
author | Burak Emir <emir@epfl.ch> | 2005-07-20 23:03:53 +0000 |
---|---|---|
committer | Burak Emir <emir@epfl.ch> | 2005-07-20 23:03:53 +0000 |
commit | 170cb99b47f53075342b9e960150219e76d7eea7 (patch) | |
tree | 29c3e2e0dab776fa0f8ee93e4c96546752bf7fa0 | |
parent | 2317a3656322733c5381a12a4b8b98f0e4a3dd9d (diff) | |
download | scala-170cb99b47f53075342b9e960150219e76d7eea7.tar.gz scala-170cb99b47f53075342b9e960150219e76d7eea7.tar.bz2 scala-170cb99b47f53075342b9e960150219e76d7eea7.zip |
ArrayValue ...
-rw-r--r-- | sources/scala/tools/nsc/matching/PatternMatchers.scala | 12 | ||||
-rw-r--r-- | sources/scala/tools/nsc/matching/PatternNodes.scala | 3 | ||||
-rw-r--r-- | sources/scala/tools/nsc/matching/TransMatcher.scala | 6 |
3 files changed, 17 insertions, 4 deletions
diff --git a/sources/scala/tools/nsc/matching/PatternMatchers.scala b/sources/scala/tools/nsc/matching/PatternMatchers.scala index aac86f1fe5..6ef2f8d973 100644 --- a/sources/scala/tools/nsc/matching/PatternMatchers.scala +++ b/sources/scala/tools/nsc/matching/PatternMatchers.scala @@ -135,14 +135,18 @@ trait PatternMatchers: (TransMatcher with PatternNodes) extends AnyRef with Patt case Apply(_, args) => if ( isSeqApply(tree.asInstanceOf[Apply]) && !delegateSequenceMatching) args(0) match { - case Sequence(ts) => + case ArrayValue(_, ts) => // test array values ts; + //case Sequence(ts) => + // ts; case _ => args; } else args case Sequence(ts) if (!delegateSequenceMatching) => ts; + case ArrayValue(_, ts) => // test array values + ts; case _ => List(); } @@ -161,7 +165,8 @@ trait PatternMatchers: (TransMatcher with PatternNodes) extends AnyRef with Patt * but fails */ protected def isSeqApply( tree: Apply ): Boolean = - (( tree.args.length == 1 ) && tree.args(0).isInstanceOf[Sequence]) + (( tree.args.length == 1 ) && //tree.args(0).isInstanceOf[Sequence]) + tree.args(0).isInstanceOf[ArrayValue]) && (tree.tpe.symbol.flags & Flags.CASE) == 0; protected def patternNode(tree:Tree , header:Header , env: CaseEnv ): PatternNode = { @@ -206,7 +211,8 @@ trait PatternMatchers: (TransMatcher with PatternNodes) extends AnyRef with Patt if (isSeqApply(t)) { if (!delegateSequenceMatching) { args(0) match { - case Sequence(ts)=> + // case Sequence(ts)=> + case ArrayValue(_, ts)=> //Console.println("doing pSeqpat "); val res = pSequencePat(tree.pos, tree.tpe, ts.length); //Console.println("pSeqpat.casted = "+res.casted); diff --git a/sources/scala/tools/nsc/matching/PatternNodes.scala b/sources/scala/tools/nsc/matching/PatternNodes.scala index 4e4e0970b2..9be79f1b0a 100644 --- a/sources/scala/tools/nsc/matching/PatternNodes.scala +++ b/sources/scala/tools/nsc/matching/PatternNodes.scala @@ -335,7 +335,8 @@ trait PatternNodes: TransMatcher { System.arraycopy(boundVars, 0, newVars, 0, numVars); this.boundVars = newVars; } - sym.setInfo(tpe); + //sym.setInfo(tpe); + sym.setType(tpe); this.boundVars(numVars) = ValDef(sym, init.duplicate); numVars = numVars + 1; } diff --git a/sources/scala/tools/nsc/matching/TransMatcher.scala b/sources/scala/tools/nsc/matching/TransMatcher.scala index 1564beca18..579181f944 100644 --- a/sources/scala/tools/nsc/matching/TransMatcher.scala +++ b/sources/scala/tools/nsc/matching/TransMatcher.scala @@ -139,6 +139,9 @@ with RightTracers { case Sequence( trees ) => ( trees.length == 0 ) || (trees exists { isRegular }); + case ArrayValue( _, trees ) => + ( trees.length == 0 ) || (trees exists { isRegular }); + case Apply( fn, List(Sequence(List()))) => false; @@ -181,6 +184,9 @@ with RightTracers { case Sequence( trees ) => copy.Sequence( pat, trees map remove ) + case ArrayValue( tt, trees ) => + copy.ArrayValue( pat, tt, trees map remove ) + case Apply( fn, args ) => copy.Apply( pat, fn, args map remove ) |