Skip to content

Commit

Permalink
Merge pull request #5 from geoffw0/integraltypes
Browse files Browse the repository at this point in the history
Swift: Work on integral type classes
  • Loading branch information
MathiasVP authored Jan 13, 2023
2 parents 7f5344e + 7f31c9c commit cf9998b
Show file tree
Hide file tree
Showing 7 changed files with 118 additions and 49 deletions.
12 changes: 0 additions & 12 deletions swift/ql/lib/codeql/swift/elements/type/FloatingPointType.qll

This file was deleted.

35 changes: 0 additions & 35 deletions swift/ql/lib/codeql/swift/elements/type/NumericOrCharType.qll

This file was deleted.

44 changes: 44 additions & 0 deletions swift/ql/lib/codeql/swift/elements/type/NumericType.qll
Original file line number Diff line number Diff line change
@@ -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
}
}
3 changes: 1 addition & 2 deletions swift/ql/lib/swift.qll
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +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.FloatingPointType
import codeql.swift.elements.type.NumericOrCharType
import codeql.swift.elements.type.NumericType
import codeql.swift.Unit
Original file line number Diff line number Diff line change
@@ -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
}
Original file line number Diff line number Diff line change
@@ -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 |
Original file line number Diff line number Diff line change
@@ -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), ", ")

0 comments on commit cf9998b

Please sign in to comment.