diff options
-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 ) |