diff options
author | Paul Phillips <paulp@improving.org> | 2009-02-11 17:03:22 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2009-02-11 17:03:22 +0000 |
commit | bcb3384b792b50dd256e407dbe60f3862611cf8f (patch) | |
tree | c58d5e8ef8b7687bc007bb8b4b1a2c364acefc9d | |
parent | ced34334189f3d62c4883a50268bda436aefffbd (diff) | |
download | scala-bcb3384b792b50dd256e407dbe60f3862611cf8f.tar.gz scala-bcb3384b792b50dd256e407dbe60f3862611cf8f.tar.bz2 scala-bcb3384b792b50dd256e407dbe60f3862611cf8f.zip |
fixed bug #1535, added test case
-rw-r--r-- | src/compiler/scala/tools/nsc/transform/Mixin.scala | 20 | ||||
-rw-r--r-- | test/files/run/t1535.check | 2 | ||||
-rw-r--r-- | test/files/run/t1535.scala | 15 |
3 files changed, 29 insertions, 8 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/Mixin.scala b/src/compiler/scala/tools/nsc/transform/Mixin.scala index ce0d3c651d..e1a2e2f916 100644 --- a/src/compiler/scala/tools/nsc/transform/Mixin.scala +++ b/src/compiler/scala/tools/nsc/transform/Mixin.scala @@ -734,14 +734,18 @@ abstract class Mixin extends InfoTransform { def isField(sym: Symbol) = sym.hasFlag(PRIVATE) && sym.isTerm && !sym.isMethod - var fields = - for (sc <- clazz.info.parents; - field <- sc.decls.elements.toList - if !sc.typeSymbol.isTrait - && field.owner != clazz - && (settings.checkInit.value - && isField(field) - || field.hasFlag(LAZY))) yield field + def needsBitmapField(sc: Type, field: Symbol) = + !sc.typeSymbol.isTrait && + field.owner != clazz && + (settings.checkInit.value && isField(field) || + field.hasFlag(LAZY)) + + // parents != baseClasses.map(_.tpe): bug #1535 + val fields = for { + sc <- clazz.info.baseClasses.map(_.tpe) + field <- sc.decls.elements.toList + if needsBitmapField(sc, field) + } yield field if (settings.debug.value) log("Found inherited fields in " + clazz + " : " + fields) fields.length diff --git a/test/files/run/t1535.check b/test/files/run/t1535.check new file mode 100644 index 0000000000..93359aa0d0 --- /dev/null +++ b/test/files/run/t1535.check @@ -0,0 +1,2 @@ +42 +true
\ No newline at end of file diff --git a/test/files/run/t1535.scala b/test/files/run/t1535.scala new file mode 100644 index 0000000000..3633352c39 --- /dev/null +++ b/test/files/run/t1535.scala @@ -0,0 +1,15 @@ +class ASTNode { + lazy val x = 42 +} + +class BlockStmt extends ASTNode + +class ClassDecl extends BlockStmt { + lazy val y = true +} + +object Test extends Application { + val n = new ClassDecl () + println (n.x) + println (n.y) +}
\ No newline at end of file |