Swift: Add a test for aliased types.

This commit is contained in:
Geoffrey White
2023-03-10 18:14:50 +00:00
parent d4269251be
commit 0c900e4b8a
5 changed files with 107 additions and 0 deletions

View File

@@ -0,0 +1,13 @@
| nominaltype.swift:35:6:35:6 | a | A | A | |
| nominaltype.swift:36:6:36:6 | a_alias | A_alias | A_alias | |
| nominaltype.swift:37:6:37:6 | a_optional_alias | A_optional_alias | A_optional_alias | |
| nominaltype.swift:38:6:38:6 | b1 | B1 | B1 | getABaseType:A |
| nominaltype.swift:39:6:39:6 | b2 | B2 | B2 | |
| nominaltype.swift:40:6:40:6 | b1_alias | B1_alias | B1_alias | |
| nominaltype.swift:41:6:41:6 | b2_alias | B2_alias | B2_alias | |
| nominaltype.swift:42:6:42:6 | p | P | P | |
| nominaltype.swift:43:6:43:6 | p_alias | P_alias | P_alias | |
| nominaltype.swift:44:6:44:6 | c1 | C1 | C1 | getABaseType:P |
| nominaltype.swift:45:6:45:6 | c2 | C2 | C2 | |
| nominaltype.swift:46:6:46:6 | c1_alias | C1_alias | C1_alias | |
| nominaltype.swift:47:6:47:6 | c2_alias | C2_alias | C2_alias | |

View File

@@ -0,0 +1,16 @@
import swift
string describe(Type t) {
(
result = "getAliasedType:" + t.(TypeAliasType).getAliasedType()
) or (
result = "getABaseType:" + t.(NominalType).getABaseType()
)
}
from VarDecl v, Type t
where
v.getLocation().getFile().getBaseName() != "" and
not v.getName() = "self" and
t = v.getType()
select v, t.toString(), t.getUnderlyingType(), concat(describe(t), ", ")

View File

@@ -0,0 +1,48 @@
class A {
}
typealias A_alias = A
typealias A_optional_alias = A?
class B1 : A {
}
class B2 : A_alias {
}
typealias B1_alias = B1
typealias B2_alias = B2
protocol P {
}
typealias P_alias = P
class C1 : P {
}
class C2 : P_alias {
}
typealias C1_alias = C1
typealias C2_alias = C2
func test() {
var a : A
var a_alias : A_alias
var a_optional_alias : A_optional_alias
var b1 : B1
var b2 : B2
var b1_alias : B1_alias
var b2_alias : B2_alias
var p : P
var p_alias : P_alias
var c1 : C1
var c2 : C2
var c1_alias : C1_alias
var c2_alias : C2_alias
}

View File

@@ -0,0 +1,11 @@
| nominaltype.swift:35:6:35:6 | a | A | |
| nominaltype.swift:36:6:36:6 | a_alias | A_alias | |
| nominaltype.swift:37:6:37:6 | a_optional_alias | A_optional_alias | |
| nominaltype.swift:38:6:38:6 | b1 | B1 | getABaseType:A |
| nominaltype.swift:39:6:39:6 | b2 | B2 | getABaseType:A_alias |
| nominaltype.swift:40:6:40:6 | b1_alias | B1_alias | |
| nominaltype.swift:41:6:41:6 | b2_alias | B2_alias | |
| nominaltype.swift:44:6:44:6 | c1 | C1 | getABaseType:P |
| nominaltype.swift:45:6:45:6 | c2 | C2 | getABaseType:P_alias |
| nominaltype.swift:46:6:46:6 | c1_alias | C1_alias | |
| nominaltype.swift:47:6:47:6 | c2_alias | C2_alias | |

View File

@@ -0,0 +1,19 @@
import swift
string describe(TypeDecl td) {
/*(
result = "getAliasedType:" + td.(TypeAliasDecl).getAliasedType() TODO: not yet implemented.
) or */(
result = "getABaseType:" + td.(NominalTypeDecl).getABaseType()
)
}
from VarDecl v, TypeDecl td
where
v.getLocation().getFile().getBaseName() != "" and
not v.getName() = "self" and
(
td = v.getType().(NominalType).getDeclaration() or
td = v.getType().(TypeAliasType).getDecl()
)
select v, td.toString(), concat(describe(td), ", ")