Introduce typed semantic analysis pipeline
This commit is contained in:
parent
117d188194
commit
f4cd4f4458
30 changed files with 2079 additions and 2381 deletions
|
|
@ -8,8 +8,8 @@ import (
|
|||
func TestSafeAccessAndNonNullAssertion(t *testing.T) {
|
||||
prog, err := Parse(`package demo
|
||||
data class User(var email: String)
|
||||
fun safe(user: *User?): String? { return user?.email }
|
||||
fun required(user: *User?): String { return user!!.email }`)
|
||||
fun safe(user: User?): String? { return user?.email }
|
||||
fun required(user: User?): String { return user!!.email }`)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
|
@ -26,7 +26,7 @@ fun required(user: *User?): String { return user!!.email }`)
|
|||
|
||||
func TestRejectNullableDereference(t *testing.T) {
|
||||
prog, err := Parse(`package demo
|
||||
fun unsafe(user: *User?): String { return user.email }`)
|
||||
fun unsafe(user: User?): String { return user.email }`)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
|
@ -38,8 +38,8 @@ fun unsafe(user: *User?): String { return user.email }`)
|
|||
|
||||
func TestRejectNullForNonNullableTypes(t *testing.T) {
|
||||
for _, source := range []string{
|
||||
`package demo data class User(var email: String) fun main() { val user: *User = null }`,
|
||||
`package demo data class User(var email: String) fun use(user: *User) {} fun main() { use(null) }`,
|
||||
`package demo data class User(var email: String) fun main() { val user: User = null }`,
|
||||
`package demo data class User(var email: String) fun use(user: User) {} fun main() { use(null) }`,
|
||||
`package demo fun name(): String { return null }`,
|
||||
`package demo fun main() { val value = null }`,
|
||||
} {
|
||||
|
|
@ -56,8 +56,8 @@ func TestRejectNullForNonNullableTypes(t *testing.T) {
|
|||
func TestNullableSmartCasts(t *testing.T) {
|
||||
prog, err := Parse(`package demo
|
||||
data class User(var email: String)
|
||||
fun guarded(user: *User?): String { if (user == null) { return "missing" }; return user.email }
|
||||
fun branched(user: *User?): String { if (user != null) { return user.email } else { return "missing" } }`)
|
||||
fun guarded(user: User?): String { if (user == null) { return "missing" }; return user.email }
|
||||
fun branched(user: User?): String { if (user != null) { return user.email } else { return "missing" } }`)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue