summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2009-02-11 17:03:22 +0000
committerPaul Phillips <paulp@improving.org>2009-02-11 17:03:22 +0000
commitbcb3384b792b50dd256e407dbe60f3862611cf8f (patch)
treec58d5e8ef8b7687bc007bb8b4b1a2c364acefc9d
parentced34334189f3d62c4883a50268bda436aefffbd (diff)
downloadscala-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.scala20
-rw-r--r--test/files/run/t1535.check2
-rw-r--r--test/files/run/t1535.scala15
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