mirror of
https://github.com/github/codeql.git
synced 2026-07-20 18:58:36 +02:00
Merge pull request #11841 from MathiasVP/swift-add-integral-types
Swift: Add integral type classes
This commit is contained in:
44
swift/ql/lib/codeql/swift/elements/type/NumericType.qll
Normal file
44
swift/ql/lib/codeql/swift/elements/type/NumericType.qll
Normal file
@@ -0,0 +1,44 @@
|
||||
private import swift
|
||||
|
||||
/**
|
||||
* A floating-point type. This includes the `Float` type, the `Double`, and
|
||||
* builtin floating-point types.
|
||||
*/
|
||||
class FloatingPointType extends Type {
|
||||
FloatingPointType() {
|
||||
this.getName() = ["Float", "Double"] or
|
||||
this instanceof BuiltinFloatType
|
||||
}
|
||||
}
|
||||
|
||||
/** The `Character` type. */
|
||||
class CharacterType extends StructType {
|
||||
CharacterType() { this.getName() = "Character" }
|
||||
}
|
||||
|
||||
/**
|
||||
* An integer-like type. For example, `Int`, `Int16`, `Uint16`, etc.
|
||||
*/
|
||||
class IntegralType extends Type {
|
||||
IntegralType() {
|
||||
this.getName() =
|
||||
["Int", "Int8", "Int16", "Int32", "Int64", "UInt", "UInt8", "UInt16", "UInt32", "UInt64"]
|
||||
or
|
||||
this instanceof BuiltinIntegerType
|
||||
}
|
||||
}
|
||||
|
||||
/** The `Bool` type. */
|
||||
class BoolType extends Type {
|
||||
BoolType() { this.getName() = "Bool" }
|
||||
}
|
||||
|
||||
/**
|
||||
* A numeric type. This includes the integer and floating point types.
|
||||
*/
|
||||
class NumericType extends Type {
|
||||
NumericType() {
|
||||
this instanceof IntegralType or
|
||||
this instanceof FloatingPointType
|
||||
}
|
||||
}
|
||||
@@ -10,4 +10,5 @@ import codeql.swift.elements.expr.InitializerCallExpr
|
||||
import codeql.swift.elements.expr.SelfRefExpr
|
||||
import codeql.swift.elements.decl.MethodDecl
|
||||
import codeql.swift.elements.decl.ClassOrStructDecl
|
||||
import codeql.swift.elements.type.NumericType
|
||||
import codeql.swift.Unit
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
|
||||
typealias MyFloat = Float
|
||||
|
||||
func test() {
|
||||
var f1: Float
|
||||
let f2 = 123.456
|
||||
let f3 = f2
|
||||
var f4: Float?
|
||||
var f5: MyFloat
|
||||
var f6: MyFloat?
|
||||
|
||||
var d: Double
|
||||
|
||||
var c: Character
|
||||
|
||||
var i1: Int
|
||||
let i2 = 123
|
||||
let i3 = 0xFFFF
|
||||
var i4: Int8
|
||||
var i5: Int16
|
||||
var i6: Int32
|
||||
var i7: Int64
|
||||
|
||||
var u1: UInt
|
||||
var u2: UInt8
|
||||
var u3: UInt16
|
||||
var u4: UInt32
|
||||
var u5: UInt64
|
||||
|
||||
var b1: Bool
|
||||
let b2 = true
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
| numeric.swift:5:6:5:6 | f1 | Float | FloatingPointType, NumericType |
|
||||
| numeric.swift:6:6:6:6 | f2 | Double | FloatingPointType, NumericType |
|
||||
| numeric.swift:7:6:7:6 | f3 | Double | FloatingPointType, NumericType |
|
||||
| numeric.swift:8:6:8:6 | f4 | Float? | |
|
||||
| numeric.swift:9:6:9:6 | f5 | MyFloat | |
|
||||
| numeric.swift:10:6:10:6 | f6 | MyFloat? | |
|
||||
| numeric.swift:12:6:12:6 | d | Double | FloatingPointType, NumericType |
|
||||
| numeric.swift:14:6:14:6 | c | Character | CharacterType |
|
||||
| numeric.swift:16:6:16:6 | i1 | Int | IntegralType, NumericType |
|
||||
| numeric.swift:17:6:17:6 | i2 | Int | IntegralType, NumericType |
|
||||
| numeric.swift:18:6:18:6 | i3 | Int | IntegralType, NumericType |
|
||||
| numeric.swift:19:6:19:6 | i4 | Int8 | IntegralType, NumericType |
|
||||
| numeric.swift:20:6:20:6 | i5 | Int16 | IntegralType, NumericType |
|
||||
| numeric.swift:21:6:21:6 | i6 | Int32 | IntegralType, NumericType |
|
||||
| numeric.swift:22:6:22:6 | i7 | Int64 | IntegralType, NumericType |
|
||||
| numeric.swift:24:6:24:6 | u1 | UInt | IntegralType, NumericType |
|
||||
| numeric.swift:25:6:25:6 | u2 | UInt8 | IntegralType, NumericType |
|
||||
| numeric.swift:26:6:26:6 | u3 | UInt16 | IntegralType, NumericType |
|
||||
| numeric.swift:27:6:27:6 | u4 | UInt32 | IntegralType, NumericType |
|
||||
| numeric.swift:28:6:28:6 | u5 | UInt64 | IntegralType, NumericType |
|
||||
| numeric.swift:30:6:30:6 | b1 | Bool | BoolType |
|
||||
| numeric.swift:31:6:31:6 | b2 | Bool | BoolType |
|
||||
@@ -0,0 +1,19 @@
|
||||
import swift
|
||||
|
||||
string describe(Type t) {
|
||||
t instanceof FloatingPointType and result = "FloatingPointType"
|
||||
or
|
||||
t instanceof CharacterType and result = "CharacterType"
|
||||
or
|
||||
t instanceof IntegralType and result = "IntegralType"
|
||||
or
|
||||
t instanceof BoolType and result = "BoolType"
|
||||
or
|
||||
t instanceof NumericType and result = "NumericType"
|
||||
}
|
||||
|
||||
from VarDecl v, Type t
|
||||
where
|
||||
v.getLocation().getFile().getBaseName() != "" and
|
||||
t = v.getType()
|
||||
select v, t.toString(), concat(describe(t), ", ")
|
||||
Reference in New Issue
Block a user