diff options
author | Martin Odersky <odersky@gmail.com> | 2006-10-31 12:52:53 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2006-10-31 12:52:53 +0000 |
commit | 1ccd9b6ceddd2b234256eb6a549b7cb056cc5147 (patch) | |
tree | 1239f730ea23049db5c02c79e9196fca4cba1943 | |
parent | 37b3648e30cbce8ac9f2b9b48b63cdf15d6a2d34 (diff) | |
download | scala-1ccd9b6ceddd2b234256eb6a549b7cb056cc5147.tar.gz scala-1ccd9b6ceddd2b234256eb6a549b7cb056cc5147.tar.bz2 scala-1ccd9b6ceddd2b234256eb6a549b7cb056cc5147.zip |
fixed bug756
-rw-r--r-- | src/compiler/scala/tools/nsc/ast/parser/Parsers.scala | 12 | ||||
-rw-r--r-- | test/files/pos/bug684.scala | 11 |
2 files changed, 19 insertions, 4 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala index 0f9d334862..c7e59925d5 100644 --- a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala +++ b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala @@ -535,6 +535,7 @@ trait Parsers requires SyntaxAnalyzer { accept(RPAREN) atPos(accept(ARROW)) { makeByNameFunctionTypeTree(t0, typ()) } } else { + val pos = in.currentPos val t0 = typ() if (in.token == COMMA) { in.nextToken() @@ -542,7 +543,8 @@ trait Parsers requires SyntaxAnalyzer { accept(RPAREN) atPos (accept(ARROW)) { makeFunctionTypeTree(ts.toList, typ()) } } else { - accept(RPAREN); t0 + accept(RPAREN) + type1rest(pos, t0, false) } } } else { @@ -556,9 +558,11 @@ trait Parsers requires SyntaxAnalyzer { /** Type1 ::= SimpleType {with SimpleType} [Refinement] * TypePattern1 ::= SimpleTypePattern [TypePatternArgs] */ - def type1(isPattern: boolean): Tree = { - val pos = in.currentPos - var ts = new ListBuffer[Tree] + simpleType(isPattern) + def type1(isPattern: boolean): Tree = + type1rest(in.currentPos, simpleType(isPattern), isPattern) + + def type1rest(pos: int, t: Tree, isPattern: boolean): Tree = { + var ts = new ListBuffer[Tree] + t while (in.token == WITH && !isPattern) { in.nextToken(); ts += simpleType(isPattern) } diff --git a/test/files/pos/bug684.scala b/test/files/pos/bug684.scala new file mode 100644 index 0000000000..fb5cac3a1a --- /dev/null +++ b/test/files/pos/bug684.scala @@ -0,0 +1,11 @@ +package test; +trait Test { + trait Ti; + class Foo; + def foo(t : Ti) = t match { + case t : Foo => true; + case _ => false; + } + class Bar extends Foo with Ti; + assert(foo(new Bar)); +} |