summaryrefslogtreecommitdiff
path: root/sources
diff options
context:
space:
mode:
authorBurak Emir <emir@epfl.ch>2005-07-20 23:03:53 +0000
committerBurak Emir <emir@epfl.ch>2005-07-20 23:03:53 +0000
commit170cb99b47f53075342b9e960150219e76d7eea7 (patch)
tree29c3e2e0dab776fa0f8ee93e4c96546752bf7fa0 /sources
parent2317a3656322733c5381a12a4b8b98f0e4a3dd9d (diff)
downloadscala-170cb99b47f53075342b9e960150219e76d7eea7.tar.gz
scala-170cb99b47f53075342b9e960150219e76d7eea7.tar.bz2
scala-170cb99b47f53075342b9e960150219e76d7eea7.zip
ArrayValue ...
Diffstat (limited to 'sources')
-rw-r--r--sources/scala/tools/nsc/matching/PatternMatchers.scala12
-rw-r--r--sources/scala/tools/nsc/matching/PatternNodes.scala3
-rw-r--r--sources/scala/tools/nsc/matching/TransMatcher.scala6
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 )