summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2008-04-17 13:31:24 +0000
committerMartin Odersky <odersky@gmail.com>2008-04-17 13:31:24 +0000
commite9c8a59b638ce589e362ee6993f60aa4e9bea2cb (patch)
tree7f844eeed39231fb043c9c1ee9d0db0357c3184c /src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
parentad36c662586ad65a3b97cffc1c5382cb25c8e53b (diff)
downloadscala-e9c8a59b638ce589e362ee6993f60aa4e9bea2cb.tar.gz
scala-e9c8a59b638ce589e362ee6993f60aa4e9bea2cb.tar.bz2
scala-e9c8a59b638ce589e362ee6993f60aa4e9bea2cb.zip
fixed modifiers for virtuals
Diffstat (limited to 'src/compiler/scala/tools/nsc/ast/parser/Parsers.scala')
-rw-r--r--src/compiler/scala/tools/nsc/ast/parser/Parsers.scala16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
index d81769f1a5..fb14ef8ba8 100644
--- a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
+++ b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
@@ -2171,15 +2171,16 @@ trait Parsers extends NewScanners with MarkupParsers {
if (mods.hasFlag(Flags.TRAIT)) (Modifiers(Flags.TRAIT), List())
else (accessModifierOpt(), paramClauses(name, implicitClassViews, mods.hasFlag(Flags.CASE)))
val thistpe = requiresTypeOpt()
- var template = templateOpt(mods, name, constrMods withAnnotations constrAnnots, vparamss)
+ var mods1 = mods
+ if (inToken == SUBTYPE) mods1 |= DEFERRED
+ var template = templateOpt(mods1, name, constrMods withAnnotations constrAnnots, vparamss)
if (!thistpe.isEmpty) {
if (template.self.isEmpty) {
template = copy.Template(
template, template.parents, makeSelfDef(nme.WILDCARD, thistpe), template.body)
} else syntaxError("`requires' cannot be combined with explicit self type", false)
}
- val mods1 = if (isInterface(mods, template.body)) mods | Flags.INTERFACE
- else mods
+ if (isInterface(mods1, template.body)) mods1 |= Flags.INTERFACE
val result = ClassDef(mods1, name, tparams, template)
implicitClassViews = savedViews
result
@@ -2194,8 +2195,10 @@ trait Parsers extends NewScanners with MarkupParsers {
val name = ident().toTermName
if (name != nme.ERROR) pos = namePos
atPos(pos) {
- val template = templateOpt(mods, name, NoMods, List())
- ModuleDef(mods, name, template)
+ var mods1 = mods
+ if (inToken == SUBTYPE) mods1 |= DEFERRED
+ val template = templateOpt(mods1, name, NoMods, List())
+ ModuleDef(mods1, name, template)
}
}
@@ -2254,8 +2257,7 @@ trait Parsers extends NewScanners with MarkupParsers {
* TraitTemplateOpt ::= Extends TraitTemplate | [[Extends] TemplateBody]
* Extends ::= extends | `<:'
*/
- def templateOpt(mods0: Modifiers, name: Name, constrMods: Modifiers, vparamss: List[List[ValDef]]): Template = {
- val mods = if (inToken == SUBTYPE) mods0 | Flags.DEFERRED else mods0
+ def templateOpt(mods: Modifiers, name: Name, constrMods: Modifiers, vparamss: List[List[ValDef]]): Template = {
val pos = inCurrentPos;
val (parents0, argss, self, body) =
if (inToken == EXTENDS || inToken == SUBTYPE) {