Skip to content

Commit d317f0a

Browse files
q-ataliufengyun
authored andcommitted
Add global init checking test cases
1 parent 50e6406 commit d317f0a

17 files changed

+185
-0
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import reflect.Selectable.reflectiveSelectable
2+
3+
class C(var x: Int) {
4+
def foo(): Int = 20
5+
}
6+
7+
class D(var y: Int) {
8+
def foo(): Int = A.m
9+
}
10+
11+
class Box(var value: {
12+
def foo(): Int
13+
})
14+
15+
object A:
16+
val box1: Box = new Box(new C(5))
17+
val box2: Box = new Box(new D(10))
18+
val m: Int = box1.value.foo() // error

tests/init/neg/global-cycle5.scala

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
class X {
2+
def foo(): Int = 10
3+
}
4+
5+
object A {
6+
var a: X = new X()
7+
}
8+
9+
object B {
10+
val b: Int = A.a.foo()
11+
}
12+
13+
class Y extends X {
14+
override def foo() = C.c
15+
}
16+
17+
object C {
18+
val c: Int = B.b
19+
}
20+
21+
def main = {
22+
A.a = new Y(); C // error
23+
}

tests/init/neg/global-list.scala

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
case class Foo(name: String)
2+
3+
object O:
4+
val a = Foo("Apple")
5+
val b = Foo("Banana")
6+
val c = Foo("Cherry")
7+
8+
object Foo:
9+
val all: List[Foo] = List(O.a, O.b, O.c) // error

tests/init/neg/global-this.scala

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
object NameKinds:
2+
abstract class NameKind(val tag: Int):
3+
class Info
4+
class QualifiedNameKind(tag: Int, val separator: String) extends NameKind(tag):
5+
qualifiedNameKinds(tag) = this // error
6+
7+
8+
val MAX_TAG = 8
9+
val qualifiedNameKinds = new Array[QualifiedNameKind](MAX_TAG)
10+
11+
val QualifiedName: QualifiedNameKind = new QualifiedNameKind(0, ".")
12+
val FlatName: QualifiedNameKind = new QualifiedNameKind(1, "$")

tests/init/neg/mutable-read1.scala

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Box(var value: Int)
2+
3+
object A:
4+
val box: Box = new Box(4)
5+
6+
object B:
7+
val boxB: Box = new Box(5)
8+
val boxA: Box = A.box
9+
val m: Int = boxB.value
10+
val n: Int = boxA.value // error

tests/init/neg/mutable-read2.scala

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
object A:
2+
class Box(var value: Int) {
3+
val initial: Int = value
4+
}
5+
val box: Box = new Box(0)
6+
7+
object B:
8+
val box: A.Box = A.box
9+
val a: Int = box.initial
10+
val b: Int = box.value // error

tests/init/neg/mutable-read3.scala

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
object A:
2+
class Box(var value: Int)
3+
val box: Box = new Box(0)
4+
5+
object B:
6+
val boxes: Array[A.Box] = Array(A.box)
7+
val box: A.Box = boxes(0)
8+
val x: Int = box.value // error

tests/init/neg/mutable-read4.scala

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Box(var value: Int)
2+
3+
object A:
4+
val box: Box = new Box(4)
5+
6+
object B:
7+
val boxB: Box = new Box(5)
8+
val boxA: Box = A.box
9+
val m: Int = boxB.value
10+
val n: Int = boxA.value // error

tests/init/neg/mutable-read5.scala

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
object Names:
2+
class Name(val start: Int, val length: Int)
3+
var chrs: Array[Char] = new Array[Char](0x20000)
4+
def name(s: String): Name = Name(0, chrs.length) // error
5+
6+
object StdNames:
7+
val AnyRef: Names.Name = Names.name("AnyRef")
8+
val Array: Names.Name = Names.name("Array")
9+
val List: Names.Name = Names.name("List")

tests/init/neg/mutable-read6.scala

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class SourceFile
2+
3+
object Contexts:
4+
val NoContext: Context = new Context
5+
class Context:
6+
private var _source: SourceFile = null
7+
final def source: SourceFile = _source // error
8+
def setSource(source: SourceFile) = {
9+
this._source = source
10+
}
11+
12+
object Implicits:
13+
import Contexts.*
14+
case class SearchFailure(tag: Int, source: SourceFile)
15+
val NoMatchingFailure: SearchFailure = SearchFailure(1, NoContext.source)

tests/init/neg/mutable-read7.scala

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
object Positioned:
2+
var debug: Boolean = false
3+
var debugId = Int.MinValue
4+
var nextId: Int = 0
5+
6+
abstract class Positioned:
7+
if (Positioned.debug) { // error
8+
println("do debugging")
9+
}
10+
11+
object Trees:
12+
class Tree extends Positioned
13+
val emptyTree = new Tree

tests/init/neg/mutable-read8.scala

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
object Stats {
2+
var monitored: Boolean = false
3+
}
4+
5+
class UncachedGroundType {
6+
if (Stats.monitored) println("record stats") // error
7+
}
8+
9+
class LazyType extends UncachedGroundType
10+
11+
object NoCompleter extends LazyType

tests/init/neg/partial-ordering.scala

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
object Names:
2+
val ctorString = "<init>"
3+
val ctorName: MethodName = MethodName.apply(ctorString)
4+
5+
class MethodName(encoded: String)
6+
object MethodName:
7+
val ctor: MethodName = new MethodName(Names.ctorString) // error
8+
def apply(name: String): MethodName = new MethodName(name)
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
class A(x: Int) {
2+
def foo(): Int = B.m
3+
}
4+
5+
object B:
6+
val m: Int = 20
7+
val n: Int = new A(10).foo()

tests/init/pos/global-read.scala

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
object A:
2+
val a: Int = 10
3+
val b: Int = 20
4+
5+
object B:
6+
var n: Int = A.a * A.b
7+
8+
@main def entry() = println(B.n)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
class A(val a: A)
2+
3+
object B:
4+
val a: A = loop(ofA())
5+
def ofA(): A = ofA().a
6+
def loop(a: A): A = loop(new A(a))

tests/init/pos/tree-counter.scala

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
object Trees:
2+
private var counter = 0
3+
class Tree {
4+
counter += 1
5+
}
6+
7+
class EmptyTree extends Tree
8+
val theEmptyTree = new EmptyTree

0 commit comments

Comments
 (0)