diff options
author | Adriaan Moors <adriaan.moors@typesafe.com> | 2013-02-01 09:58:01 -0800 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@typesafe.com> | 2013-02-01 09:58:01 -0800 |
commit | 09d143306432124db7b364034abd94792947231e (patch) | |
tree | a725c1ca7b24c0a1723b7d63e6b5f01682003d74 | |
parent | b403234a27518f35acc360bfa0333b00fdc85175 (diff) | |
parent | 8350cd947290a9a8beb3ff643a1e3dd2342a9182 (diff) | |
download | scala-09d143306432124db7b364034abd94792947231e.tar.gz scala-09d143306432124db7b364034abd94792947231e.tar.bz2 scala-09d143306432124db7b364034abd94792947231e.zip |
Merge pull request #1980 from retronym/backport/1518
[backport] SI-2968 Fix brace healing for `^case (class|object) {`
-rw-r--r-- | src/compiler/scala/tools/nsc/ast/parser/Scanners.scala | 6 | ||||
-rw-r--r-- | test/files/neg/t2968.check | 10 | ||||
-rw-r--r-- | test/files/neg/t2968.scala | 26 | ||||
-rw-r--r-- | test/files/neg/t2968b.check | 4 | ||||
-rw-r--r-- | test/files/neg/t2968b.scala | 7 |
5 files changed, 53 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/parser/Scanners.scala b/src/compiler/scala/tools/nsc/ast/parser/Scanners.scala index 046122d83b..79f0bcf149 100644 --- a/src/compiler/scala/tools/nsc/ast/parser/Scanners.scala +++ b/src/compiler/scala/tools/nsc/ast/parser/Scanners.scala @@ -288,10 +288,16 @@ trait Scanners extends ScannersCommon { prev copyFrom this val nextLastOffset = charOffset - 1 fetchToken() + def resetOffset() { + offset = prev.offset + lastOffset = prev.lastOffset + } if (token == CLASS) { token = CASECLASS + resetOffset() } else if (token == OBJECT) { token = CASEOBJECT + resetOffset() } else { lastOffset = nextLastOffset next copyFrom this diff --git a/test/files/neg/t2968.check b/test/files/neg/t2968.check new file mode 100644 index 0000000000..5d2387f98c --- /dev/null +++ b/test/files/neg/t2968.check @@ -0,0 +1,10 @@ +t2968.scala:8: error: Missing closing brace `}' assumed here +} // missing brace +^ +t2968.scala:17: error: Missing closing brace `}' assumed here +} // missing brace +^ +t2968.scala:26: error: Missing closing brace `}' assumed here +} // missing brace +^ +three errors found diff --git a/test/files/neg/t2968.scala b/test/files/neg/t2968.scala new file mode 100644 index 0000000000..41c3a798a5 --- /dev/null +++ b/test/files/neg/t2968.scala @@ -0,0 +1,26 @@ +object t1 { + case object Const { + } + + class Var + { + +} // missing brace + +object t2 { + case class Const() { + } + + class Var + { + +} // missing brace + +object t3 { + final case class Const() { + } + + class Var + { + +} // missing brace diff --git a/test/files/neg/t2968b.check b/test/files/neg/t2968b.check new file mode 100644 index 0000000000..36d25a2d12 --- /dev/null +++ b/test/files/neg/t2968b.check @@ -0,0 +1,4 @@ +t2968b.scala:7: error: '}' expected but eof found. +// missing brace + ^ +one error found diff --git a/test/files/neg/t2968b.scala b/test/files/neg/t2968b.scala new file mode 100644 index 0000000000..422b618aba --- /dev/null +++ b/test/files/neg/t2968b.scala @@ -0,0 +1,7 @@ +case class Const() +{ +} + +class Var +{ +// missing brace |