Swift: synthesize MethodRefExpr

This introduces a `MethodRefExpr` node synthesized out of
`DotSyntaxCallExpr` under the `LookupExpr` hierarchy. This means that
much like
```free_function(1, 2)```
is a `CallExpr` with `getFunction` giving a `DeclRefExpr`,
```foo.method(1, 2)```
is now a `CallExpr` with `getFunction` giving a `MethodRefExpr`.

`ApplyExpr::getStaticTarget` has been made work with it (as well as
`ConstructorRefCallExpr` which for the moment has been left where it
is), a new `MethodApplyExpr` has been introduced deriving from it,
and control and data flow libraries have adapted.

A small but was fixed in `qlgen` where the default constructor for DB
types was not correctly subtracting derived IPA types depending on the
order of definitions in `schema.yml`.

There are still some occurrences of `DotSyntaxCallExpr`, and as already
mentioned the other `SelfApply` class (`ConstructorRefCallExpr`) was
left alone. Their treatment is left for a future PR.
This commit is contained in:
Paolo Tranquilli
2022-08-19 14:48:36 +02:00
parent 93fc952ef1
commit 9b50336e47
53 changed files with 956 additions and 1197 deletions

View File

@@ -275,6 +275,7 @@ def generate(opts, renderer):
non_final_ipa_types = []
constructor_imports = []
ipa_constructor_imports = []
stubs = {}
for cls in sorted(data.classes.values(), key=lambda cls: (cls.dir, cls.name)):
ipa_type = get_ql_ipa_class(cls)
if ipa_type.is_final:
@@ -282,7 +283,8 @@ def generate(opts, renderer):
if ipa_type.has_params:
stub_file = stub_out / cls.dir / f"{cls.name}Constructor.qll"
if not stub_file.is_file() or _is_generated_stub(stub_file):
renderer.render(ql.Synth.ConstructorStub(ipa_type), stub_file)
# stub rendering must be postponed as we might not have yet all subtracted ipa types in `ipa_type`
stubs[stub_file] = ql.Synth.ConstructorStub(ipa_type)
constructor_import = get_import(stub_file, opts.swift_dir)
constructor_imports.append(constructor_import)
if ipa_type.is_ipa:
@@ -290,6 +292,8 @@ def generate(opts, renderer):
else:
non_final_ipa_types.append(ipa_type)
for stub_file, data in stubs.items():
renderer.render(data, stub_file)
renderer.render(ql.Synth.Types(schema.root_class_name, final_ipa_types, non_final_ipa_types), out / "Synth.qll")
renderer.render(ql.ImportList(constructor_imports), out / "SynthConstructors.qll")
renderer.render(ql.ImportList(ipa_constructor_imports), out / "PureSynthConstructors.qll")

View File

@@ -419,7 +419,7 @@ DotSyntaxBaseIgnoredExpr:
DynamicTypeExpr:
_extends: Expr
_children:
base_expr: Expr
base: Expr
EditorPlaceholderExpr:
_extends: Expr
@@ -492,7 +492,7 @@ LiteralExpr:
LookupExpr:
_extends: Expr
_children:
base_expr: Expr
base: Expr
member: Decl?
MakeTemporarilyEscapableExpr:
@@ -835,7 +835,7 @@ PrefixUnaryExpr:
SelfApplyExpr:
_extends: ApplyExpr
_children:
base_expr: Expr
base: Expr
ArrayExpr:
_extends: CollectionExpr
@@ -990,6 +990,11 @@ MemberRefExpr:
has_direct_to_implementation_semantics: predicate
has_ordinary_semantics: predicate
MethodRefExpr:
_extends: LookupExpr
_synth:
from: DotSyntaxCallExpr
SubscriptExpr:
_extends:
- LookupExpr

View File

@@ -1206,13 +1206,13 @@ module Exprs {
override SubscriptExpr ast;
final override predicate propagatesAbnormal(ControlFlowElement child) {
child.asAstNode() = ast.getBaseExpr().getFullyConverted()
child.asAstNode() = ast.getBase().getFullyConverted()
or
child.asAstNode() = ast.getAnArgument().getExpr().getFullyConverted()
}
final override predicate first(ControlFlowElement first) {
astFirst(ast.getBaseExpr().getFullyConverted(), first)
astFirst(ast.getBase().getFullyConverted(), first)
}
final override predicate last(ControlFlowElement last, Completion c) {
@@ -1230,7 +1230,7 @@ module Exprs {
}
override predicate succ(ControlFlowElement pred, ControlFlowElement succ, Completion c) {
astLast(ast.getBaseExpr().getFullyConverted(), pred, c) and
astLast(ast.getBase().getFullyConverted(), pred, c) and
c instanceof NormalCompletion and
astFirst(ast.getFirstArgument().getExpr().getFullyConverted(), succ)
or
@@ -1296,7 +1296,7 @@ module Exprs {
override DynamicTypeExpr ast;
final override ControlFlowElement getChildElement(int i) {
result.asAstNode() = ast.getBaseExpr().getFullyConverted() and i = 0
result.asAstNode() = ast.getBase().getFullyConverted() and i = 0
}
}
@@ -1427,6 +1427,14 @@ module Exprs {
}
}
class MethodRefExprTree extends AstStandardPreOrderTree {
override MethodRefExpr ast;
override ControlFlowElement getChildElement(int i) {
i = 0 and result.asAstNode() = ast.getBase().getFullyConverted()
}
}
module MemberRefs {
/**
* The control-flow of a member reference expression.
@@ -1439,11 +1447,11 @@ module Exprs {
override MemberRefExpr ast;
final override predicate propagatesAbnormal(ControlFlowElement child) {
child.asAstNode() = ast.getBaseExpr().getFullyConverted()
child.asAstNode() = ast.getBase().getFullyConverted()
}
final override predicate first(ControlFlowElement first) {
astFirst(ast.getBaseExpr().getFullyConverted(), first)
astFirst(ast.getBase().getFullyConverted(), first)
}
}
@@ -1459,7 +1467,7 @@ module Exprs {
}
override predicate succ(ControlFlowElement pred, ControlFlowElement succ, Completion c) {
astLast(ast.getBaseExpr().getFullyConverted(), pred, c) and
astLast(ast.getBase().getFullyConverted(), pred, c) and
c instanceof NormalCompletion and
succ.asAstNode() = ast
}
@@ -1489,7 +1497,7 @@ module Exprs {
}
override predicate succ(ControlFlowElement pred, ControlFlowElement succ, Completion c) {
astLast(ast.getBaseExpr().getFullyConverted(), pred, c) and
astLast(ast.getBase().getFullyConverted(), pred, c) and
c instanceof NormalCompletion and
succ.asAstNode() = ast
}
@@ -1510,7 +1518,7 @@ module Exprs {
}
override predicate succ(ControlFlowElement pred, ControlFlowElement succ, Completion c) {
astLast(ast.getBaseExpr().getFullyConverted(), pred, c) and
astLast(ast.getBase().getFullyConverted(), pred, c) and
c instanceof NormalCompletion and
isPropertyGetterElement(succ, accessor, ast)
}

View File

@@ -86,11 +86,11 @@ module Ssa {
predicate isInoutDef(ExprCfgNode argument) {
// TODO: This should probably not be only `ExprCfgNode`s.
exists(
ApplyExpr c, BasicBlock bb, int blockIndex, int argIndex, VarDecl v, InOutExpr argExpr // TODO: use CFG node for assignment expr
ApplyExpr c, BasicBlock bb, int blockIndex, VarDecl v, InOutExpr argExpr // TODO: use CFG node for assignment expr
|
this.definesAt(v, bb, blockIndex) and
bb.getNode(blockIndex).getNode().asAstNode() = c and
c.getArgument(argIndex).getExpr() = argExpr and
[c.getAnArgument().getExpr(), c.getQualifier()] = argExpr and
argExpr = argument.getNode().asAstNode() and
argExpr.getSubExpr() = v.getAnAccess() // TODO: fields?
)

View File

@@ -154,9 +154,7 @@ class InterpretNode extends TInterpretNode {
DataFlowCallable asCallable() { result.getUnderlyingCallable() = this.asElement() }
/** Gets the target of this call, if any. */
AbstractFunctionDecl getCallTarget() {
result = this.asCall().asCall().getFunction().(ApplyExpr).getStaticTarget()
}
AbstractFunctionDecl getCallTarget() { result = this.asCall().asCall().getStaticTarget() }
/** Gets a textual representation of this node. */
string toString() {

View File

@@ -29,9 +29,9 @@ predicate variableWrite(BasicBlock bb, int i, SourceVariable v, boolean certain)
certain = true
)
or
exists(ApplyExpr call, Argument arg |
arg.getExpr().(InOutExpr).getSubExpr() = v.getAnAccess() and
call.getAnArgument() = arg and
exists(ApplyExpr call, InOutExpr expr |
expr = [call.getAnArgument().getExpr(), call.getQualifier()] and
expr.getSubExpr() = v.getAnAccess() and
bb.getNode(i).getNode().asAstNode() = call and
certain = false
)

View File

@@ -28,11 +28,10 @@ private module Cached {
// appendInterpolation(&$interpolated, n)
// appendLiteral(&$interpolated, " years old.")
// ```
exists(ApplyExpr apply1, ApplyExpr apply2, ExprCfgNode e |
nodeFrom.asExpr() = [apply1, apply2].getAnArgument().getExpr() and
apply1.getFunction() = apply2 and
apply2.getStaticTarget().getName() = ["appendLiteral(_:)", "appendInterpolation(_:)"] and
e.getExpr() = apply2.getAnArgument().getExpr() and
exists(ApplyExpr apply, ExprCfgNode e |
nodeFrom.asExpr() = [apply.getAnArgument().getExpr(), apply.getQualifier()] and
apply.getStaticTarget().getName() = ["appendLiteral(_:)", "appendInterpolation(_:)"] and
e.getExpr() = [apply.getAnArgument().getExpr(), apply.getQualifier()] and
nodeTo.asDefinition().(Ssa::WriteDefinition).isInoutDef(e)
)
or

View File

@@ -137,6 +137,7 @@ import codeql.swift.elements.expr.MagicIdentifierLiteralExpr
import codeql.swift.elements.expr.MakeTemporarilyEscapableExpr
import codeql.swift.elements.expr.MemberRefExpr
import codeql.swift.elements.expr.MetatypeConversionExpr
import codeql.swift.elements.expr.MethodRefExpr
import codeql.swift.elements.expr.NilLiteralExpr
import codeql.swift.elements.expr.NumberLiteralExpr
import codeql.swift.elements.expr.ObjCSelectorExpr

View File

@@ -1,9 +1,25 @@
private import codeql.swift.generated.expr.ApplyExpr
private import codeql.swift.elements.decl.AbstractFunctionDecl
private import codeql.swift.elements.expr.DeclRefExpr
private import codeql.swift.elements.expr.MethodRefExpr
private import codeql.swift.elements.expr.ConstructorRefCallExpr
class ApplyExpr extends ApplyExprBase {
AbstractFunctionDecl getStaticTarget() { result = this.getFunction().(DeclRefExpr).getDecl() }
AbstractFunctionDecl getStaticTarget() {
exists(Expr f |
f = this.getFunction() and
(
result = f.(DeclRefExpr).getDecl()
or
result = f.(MethodRefExpr).getMethod()
or
result = f.(ConstructorRefCallExpr).getFunction().(DeclRefExpr).getDecl()
)
)
}
/** Gets the method qualifier, if this is applying a method */
Expr getQualifier() { none() }
override string toString() {
result = "call to " + this.getStaticTarget().toString()
@@ -12,3 +28,11 @@ class ApplyExpr extends ApplyExprBase {
result = "call to ..."
}
}
class MethodApplyExpr extends ApplyExpr {
MethodApplyExpr() { this.getFunction() instanceof MethodRefExpr }
AbstractFunctionDecl getMethod() { result = this.getFunction().(MethodRefExpr).getMethod() }
override Expr getQualifier() { result = this.getFunction().(MethodRefExpr).getBase() }
}

View File

@@ -48,7 +48,7 @@ class BinaryArithmeticOperation extends BinaryExpr {
* ```
*/
class AddExpr extends BinaryExpr {
AddExpr() { this.getFunction().(DotSyntaxCallExpr).getStaticTarget().getName() = "+(_:_:)" }
AddExpr() { this.getStaticTarget().getName() = "+(_:_:)" }
}
/**
@@ -58,7 +58,7 @@ class AddExpr extends BinaryExpr {
* ```
*/
class SubExpr extends BinaryExpr {
SubExpr() { this.getFunction().(DotSyntaxCallExpr).getStaticTarget().getName() = "-(_:_:)" }
SubExpr() { this.getStaticTarget().getName() = "-(_:_:)" }
}
/**
@@ -68,7 +68,7 @@ class SubExpr extends BinaryExpr {
* ```
*/
class MulExpr extends BinaryExpr {
MulExpr() { this.getFunction().(DotSyntaxCallExpr).getStaticTarget().getName() = "*(_:_:)" }
MulExpr() { this.getStaticTarget().getName() = "*(_:_:)" }
}
/**
@@ -78,7 +78,7 @@ class MulExpr extends BinaryExpr {
* ```
*/
class DivExpr extends BinaryExpr {
DivExpr() { this.getFunction().(DotSyntaxCallExpr).getStaticTarget().getName() = "/(_:_:)" }
DivExpr() { this.getStaticTarget().getName() = "/(_:_:)" }
}
/**
@@ -88,7 +88,7 @@ class DivExpr extends BinaryExpr {
* ```
*/
class RemExpr extends BinaryExpr {
RemExpr() { this.getFunction().(DotSyntaxCallExpr).getStaticTarget().getName() = "%(_:_:)" }
RemExpr() { this.getStaticTarget().getName() = "%(_:_:)" }
}
/**
@@ -108,5 +108,5 @@ class UnaryArithmeticOperation extends PrefixUnaryExpr {
* ```
*/
class UnaryMinusExpr extends PrefixUnaryExpr {
UnaryMinusExpr() { this.getFunction().(DotSyntaxCallExpr).getStaticTarget().getName() = "-(_:)" }
UnaryMinusExpr() { this.getStaticTarget().getName() = "-(_:)" }
}

View File

@@ -1,4 +1,5 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.Raw
private import codeql.swift.generated.PureSynthConstructors
predicate constructDotSyntaxCallExpr(Raw::DotSyntaxCallExpr id) { any() }
predicate constructDotSyntaxCallExpr(Raw::DotSyntaxCallExpr id) { not constructMethodRefExpr(id) }

View File

@@ -6,12 +6,10 @@ private import codeql.swift.elements.expr.DeclRefExpr
private import codeql.swift.elements.decl.ConcreteFuncDecl
private predicate unaryHasName(PrefixUnaryExpr e, string name) {
e.getFunction().(DotSyntaxCallExpr).getStaticTarget().getName() = name
e.getStaticTarget().getName() = name
}
private predicate binaryHasName(BinaryExpr e, string name) {
e.getFunction().(DotSyntaxCallExpr).getStaticTarget().getName() = name
}
private predicate binaryHasName(BinaryExpr e, string name) { e.getStaticTarget().getName() = name }
class LogicalAndExpr extends BinaryExpr {
LogicalAndExpr() { binaryHasName(this, "&&(_:_:)") }

View File

@@ -0,0 +1,24 @@
private import codeql.swift.generated.expr.MethodRefExpr
private import codeql.swift.elements.expr.Expr
private import codeql.swift.elements.decl.Decl
private import codeql.swift.elements.decl.AbstractFunctionDecl
private import codeql.swift.generated.Raw
private import codeql.swift.generated.Synth
class MethodRefExpr extends MethodRefExprBase {
override string toString() { result = "." + this.getMember().toString() }
override Expr getImmediateBase() {
result = Synth::convertExprFromRaw(this.getUnderlying().getBase())
}
override Decl getImmediateMember() {
result =
Synth::convertDeclFromRaw(this.getUnderlying().getFunction().(Raw::DeclRefExpr).getDecl())
}
AbstractFunctionDecl getMethod() { result = getMember() }
cached
private Raw::DotSyntaxCallExpr getUnderlying() { this = Synth::TMethodRefExpr(result) }
}

View File

@@ -0,0 +1,5 @@
private import codeql.swift.generated.Raw
predicate constructMethodRefExpr(Raw::DotSyntaxCallExpr id) {
id.getFunction() instanceof Raw::DeclRefExpr
}

View File

@@ -63,7 +63,7 @@ Element getAnImmediateChild(Element e) {
or
result = e.(DotSyntaxBaseIgnoredExpr).getImmediateSubExpr()
or
result = e.(DynamicTypeExpr).getImmediateBaseExpr()
result = e.(DynamicTypeExpr).getImmediateBase()
or
result = e.(EnumIsCaseExpr).getImmediateSubExpr()
or
@@ -99,7 +99,7 @@ Element getAnImmediateChild(Element e) {
or
result = e.(LazyInitializerExpr).getImmediateSubExpr()
or
result = e.(LookupExpr).getImmediateBaseExpr()
result = e.(LookupExpr).getImmediateBase()
or
result = e.(MakeTemporarilyEscapableExpr).getImmediateEscapingClosure()
or
@@ -123,7 +123,7 @@ Element getAnImmediateChild(Element e) {
or
result = e.(RebindSelfInConstructorExpr).getImmediateSelf()
or
result = e.(SelfApplyExpr).getImmediateBaseExpr()
result = e.(SelfApplyExpr).getImmediateBase()
or
result = e.(SequenceExpr).getImmediateElement(_)
or

View File

@@ -1,2 +1,2 @@
// generated by codegen/codegen.py
import codeql.swift.elements.expr.MethodRefExprConstructor

View File

@@ -509,7 +509,7 @@ module Raw {
class DynamicTypeExpr extends @dynamic_type_expr, Expr {
override string toString() { result = "DynamicTypeExpr" }
Expr getBaseExpr() { dynamic_type_exprs(this, result) }
Expr getBase() { dynamic_type_exprs(this, result) }
}
class EditorPlaceholderExpr extends @editor_placeholder_expr, Expr {
@@ -657,7 +657,7 @@ module Raw {
class LiteralExpr extends @literal_expr, Expr { }
class LookupExpr extends @lookup_expr, Expr {
Expr getBaseExpr() { lookup_exprs(this, result) }
Expr getBase() { lookup_exprs(this, result) }
Decl getMember() { lookup_expr_members(this, result) }
}
@@ -1256,7 +1256,7 @@ module Raw {
}
class SelfApplyExpr extends @self_apply_expr, ApplyExpr {
Expr getBaseExpr() { self_apply_exprs(this, result) }
Expr getBase() { self_apply_exprs(this, result) }
}
class StringToPointerExpr extends @string_to_pointer_expr, ImplicitConversionExpr {

View File

@@ -145,6 +145,7 @@ module Synth {
} or
TMemberRefExpr(Raw::MemberRefExpr id) { constructMemberRefExpr(id) } or
TMetatypeConversionExpr(Raw::MetatypeConversionExpr id) { constructMetatypeConversionExpr(id) } or
TMethodRefExpr(Raw::DotSyntaxCallExpr id) { constructMethodRefExpr(id) } or
TNilLiteralExpr(Raw::NilLiteralExpr id) { constructNilLiteralExpr(id) } or
TObjCSelectorExpr(Raw::ObjCSelectorExpr id) { constructObjCSelectorExpr(id) } or
TObjectLiteralExpr(Raw::ObjectLiteralExpr id) { constructObjectLiteralExpr(id) } or
@@ -403,7 +404,7 @@ module Synth {
TBuiltinLiteralExpr or TInterpolatedStringLiteralExpr or TNilLiteralExpr or
TObjectLiteralExpr or TRegexLiteralExpr;
class TLookupExpr = TDynamicLookupExpr or TMemberRefExpr or TSubscriptExpr;
class TLookupExpr = TDynamicLookupExpr or TMemberRefExpr or TMethodRefExpr or TSubscriptExpr;
class TNumberLiteralExpr = TFloatLiteralExpr or TIntegerLiteralExpr;
@@ -892,6 +893,9 @@ module Synth {
result = TMetatypeConversionExpr(e)
}
cached
TMethodRefExpr convertMethodRefExprFromRaw(Raw::Element e) { result = TMethodRefExpr(e) }
cached
TNilLiteralExpr convertNilLiteralExprFromRaw(Raw::Element e) { result = TNilLiteralExpr(e) }
@@ -1846,6 +1850,8 @@ module Synth {
or
result = convertMemberRefExprFromRaw(e)
or
result = convertMethodRefExprFromRaw(e)
or
result = convertSubscriptExprFromRaw(e)
}
@@ -2547,6 +2553,9 @@ module Synth {
e = TMetatypeConversionExpr(result)
}
cached
Raw::Element convertMethodRefExprToRaw(TMethodRefExpr e) { e = TMethodRefExpr(result) }
cached
Raw::Element convertNilLiteralExprToRaw(TNilLiteralExpr e) { e = TNilLiteralExpr(result) }
@@ -3501,6 +3510,8 @@ module Synth {
or
result = convertMemberRefExprToRaw(e)
or
result = convertMethodRefExprToRaw(e)
or
result = convertSubscriptExprToRaw(e)
}

View File

@@ -103,6 +103,7 @@ import codeql.swift.elements.expr.MagicIdentifierLiteralExprConstructor
import codeql.swift.elements.expr.MakeTemporarilyEscapableExprConstructor
import codeql.swift.elements.expr.MemberRefExprConstructor
import codeql.swift.elements.expr.MetatypeConversionExprConstructor
import codeql.swift.elements.expr.MethodRefExprConstructor
import codeql.swift.elements.expr.NilLiteralExprConstructor
import codeql.swift.elements.expr.ObjCSelectorExprConstructor
import codeql.swift.elements.expr.ObjectLiteralExprConstructor

View File

@@ -6,12 +6,12 @@ import codeql.swift.elements.expr.Expr
class DynamicTypeExprBase extends Synth::TDynamicTypeExpr, Expr {
override string getAPrimaryQlClass() { result = "DynamicTypeExpr" }
Expr getImmediateBaseExpr() {
Expr getImmediateBase() {
result =
Synth::convertExprFromRaw(Synth::convertDynamicTypeExprToRaw(this)
.(Raw::DynamicTypeExpr)
.getBaseExpr())
.getBase())
}
final Expr getBaseExpr() { result = getImmediateBaseExpr().resolve() }
final Expr getBase() { result = getImmediateBase().resolve() }
}

View File

@@ -5,12 +5,12 @@ import codeql.swift.elements.decl.Decl
import codeql.swift.elements.expr.Expr
class LookupExprBase extends Synth::TLookupExpr, Expr {
Expr getImmediateBaseExpr() {
Expr getImmediateBase() {
result =
Synth::convertExprFromRaw(Synth::convertLookupExprToRaw(this).(Raw::LookupExpr).getBaseExpr())
Synth::convertExprFromRaw(Synth::convertLookupExprToRaw(this).(Raw::LookupExpr).getBase())
}
final Expr getBaseExpr() { result = getImmediateBaseExpr().resolve() }
final Expr getBase() { result = getImmediateBase().resolve() }
Decl getImmediateMember() {
result =

View File

@@ -0,0 +1,8 @@
// generated by codegen/codegen.py
private import codeql.swift.generated.Synth
private import codeql.swift.generated.Raw
import codeql.swift.elements.expr.LookupExpr
class MethodRefExprBase extends Synth::TMethodRefExpr, LookupExpr {
override string getAPrimaryQlClass() { result = "MethodRefExpr" }
}

View File

@@ -5,12 +5,12 @@ import codeql.swift.elements.expr.ApplyExpr
import codeql.swift.elements.expr.Expr
class SelfApplyExprBase extends Synth::TSelfApplyExpr, ApplyExpr {
Expr getImmediateBaseExpr() {
Expr getImmediateBase() {
result =
Synth::convertExprFromRaw(Synth::convertSelfApplyExprToRaw(this)
.(Raw::SelfApplyExpr)
.getBaseExpr())
.getBase())
}
final Expr getBaseExpr() { result = getImmediateBaseExpr().resolve() }
final Expr getBase() { result = getImmediateBase().resolve() }
}

View File

@@ -908,7 +908,7 @@ dot_syntax_base_ignored_exprs( //dir=expr
dynamic_type_exprs( //dir=expr
unique int id: @dynamic_type_expr,
int base_expr: @expr ref
int base: @expr ref
);
editor_placeholder_exprs( //dir=expr
@@ -1048,13 +1048,14 @@ lazy_initializer_exprs( //dir=expr
@lookup_expr =
@dynamic_lookup_expr
| @member_ref_expr
| @method_ref_expr
| @subscript_expr
;
#keyset[id]
lookup_exprs( //dir=expr
int id: @lookup_expr ref,
int base_expr: @expr ref
int base: @expr ref
);
#keyset[id]
@@ -1613,7 +1614,7 @@ prefix_unary_exprs( //dir=expr
#keyset[id]
self_apply_exprs( //dir=expr
int id: @self_apply_expr ref,
int base_expr: @expr ref
int base: @expr ref
);
array_exprs( //dir=expr
@@ -1859,6 +1860,10 @@ member_ref_expr_has_ordinary_semantics( //dir=expr
int id: @member_ref_expr ref
);
method_ref_exprs( //dir=expr
unique int id: @method_ref_expr
);
subscript_exprs( //dir=expr
unique int id: @subscript_expr
);

View File

@@ -50,7 +50,7 @@ class Sink extends DataFlow::Node {
) and
c.getName() = className and
c.getAMember() = funcDecl and
call.getFunction().(ApplyExpr).getStaticTarget() = funcDecl
call.getStaticTarget() = funcDecl
) and
// match up `funcName`, `paramName`, `arg`, `node`.
funcDecl.getName() = funcName and

View File

@@ -58,7 +58,7 @@ class StringLengthConflationConfiguration extends DataFlow::Configuration {
override predicate isSource(DataFlow::Node node, string flowstate) {
// result of a call to `String.count`
exists(MemberRefExpr member |
member.getBaseExpr().getType().getName() = "String" and
member.getBase().getType().getName() = "String" and
member.getMember().(VarDecl).getName() = "count" and
node.asExpr() = member and
flowstate = "String"
@@ -66,7 +66,7 @@ class StringLengthConflationConfiguration extends DataFlow::Configuration {
or
// result of a call to `NSString.length`
exists(MemberRefExpr member |
member.getBaseExpr().getType().getName() = ["NSString", "NSMutableString"] and
member.getBase().getType().getName() = ["NSString", "NSMutableString"] and
member.getMember().(VarDecl).getName() = "length" and
node.asExpr() = member and
flowstate = "NSString"
@@ -74,7 +74,7 @@ class StringLengthConflationConfiguration extends DataFlow::Configuration {
or
// result of a call to `String.utf8.count`
exists(MemberRefExpr member |
member.getBaseExpr().getType().getName() = "String.UTF8View" and
member.getBase().getType().getName() = "String.UTF8View" and
member.getMember().(VarDecl).getName() = "count" and
node.asExpr() = member and
flowstate = "String.utf8"
@@ -82,7 +82,7 @@ class StringLengthConflationConfiguration extends DataFlow::Configuration {
or
// result of a call to `String.utf16.count`
exists(MemberRefExpr member |
member.getBaseExpr().getType().getName() = "String.UTF16View" and
member.getBase().getType().getName() = "String.UTF16View" and
member.getMember().(VarDecl).getName() = "count" and
node.asExpr() = member and
flowstate = "String.utf16"
@@ -90,7 +90,7 @@ class StringLengthConflationConfiguration extends DataFlow::Configuration {
or
// result of a call to `String.unicodeScalars.count`
exists(MemberRefExpr member |
member.getBaseExpr().getType().getName() = "String.UnicodeScalarView" and
member.getBase().getType().getName() = "String.UnicodeScalarView" and
member.getMember().(VarDecl).getName() = "count" and
node.asExpr() = member and
flowstate = "String.unicodeScalars"
@@ -136,7 +136,7 @@ class StringLengthConflationConfiguration extends DataFlow::Configuration {
) and
c.getName() = className and
c.getAMember() = funcDecl and
call.getFunction().(ApplyExpr).getStaticTarget() = funcDecl and
call.getStaticTarget() = funcDecl and
flowstate = "NSString"
)
or
@@ -169,7 +169,7 @@ class StringLengthConflationConfiguration extends DataFlow::Configuration {
funcName = ["formIndex(_:offsetBy:)", "formIndex(_:offsetBy:limitBy:)"] and
paramName = "distance"
) and
call.getFunction().(ApplyExpr).getStaticTarget() = funcDecl and
call.getStaticTarget() = funcDecl and
flowstate = "String"
) and
// match up `funcName`, `paramName`, `arg`, `node`.

View File

@@ -8,31 +8,31 @@
| expressions.swift:7:10:7:10 | OpaqueValueExpr | OpaqueValueExpr |
| expressions.swift:7:10:7:10 | TapExpr | TapExpr |
| expressions.swift:7:10:7:10 | hello | StringLiteralExpr |
| expressions.swift:7:11:7:10 | call to ... | CallExpr |
| expressions.swift:7:11:7:10 | call to appendLiteral(_:) | CallExpr |
| expressions.swift:7:11:7:11 | $interpolation | DeclRefExpr |
| expressions.swift:7:11:7:11 | &... | InOutExpr |
| expressions.swift:7:11:7:11 | call to appendLiteral(_:) | DotSyntaxCallExpr |
| expressions.swift:7:11:7:11 | .appendLiteral(_:) | MethodRefExpr |
| expressions.swift:7:18:7:18 | $interpolation | DeclRefExpr |
| expressions.swift:7:18:7:18 | &... | InOutExpr |
| expressions.swift:7:18:7:18 | .appendInterpolation(_:) | MethodRefExpr |
| expressions.swift:7:18:7:18 | appendInterpolation(_:) | DeclRefExpr |
| expressions.swift:7:18:7:18 | call to appendInterpolation(_:) | DotSyntaxCallExpr |
| expressions.swift:7:18:7:20 | call to ... | CallExpr |
| expressions.swift:7:18:7:20 | call to appendInterpolation(_:) | CallExpr |
| expressions.swift:7:19:7:19 | a | DeclRefExpr |
| expressions.swift:7:21:7:21 | | StringLiteralExpr |
| expressions.swift:7:21:7:21 | $interpolation | DeclRefExpr |
| expressions.swift:7:21:7:21 | &... | InOutExpr |
| expressions.swift:7:21:7:21 | call to ... | CallExpr |
| expressions.swift:7:21:7:21 | call to appendLiteral(_:) | DotSyntaxCallExpr |
| expressions.swift:7:21:7:21 | .appendLiteral(_:) | MethodRefExpr |
| expressions.swift:7:21:7:21 | call to appendLiteral(_:) | CallExpr |
| expressions.swift:8:15:8:15 | nil | NilLiteralExpr |
| expressions.swift:15:9:15:9 | x | DeclRefExpr |
| expressions.swift:15:9:15:14 | ... call to !=(_:_:) ... | BinaryExpr |
| expressions.swift:15:9:15:14 | ... .!=(_:_:) ... | BinaryExpr |
| expressions.swift:15:11:15:11 | !=(_:_:) | DeclRefExpr |
| expressions.swift:15:11:15:11 | .!=(_:_:) | MethodRefExpr |
| expressions.swift:15:11:15:11 | Int.Type | TypeExpr |
| expressions.swift:15:11:15:11 | call to !=(_:_:) | DotSyntaxCallExpr |
| expressions.swift:15:14:15:14 | 0 | IntegerLiteralExpr |
| expressions.swift:16:11:16:11 | AnError.Type | TypeExpr |
| expressions.swift:16:11:16:19 | (Error) ... | ErasureExpr |
| expressions.swift:16:11:16:19 | call to ... | DotSyntaxCallExpr |
| expressions.swift:16:11:16:19 | .failed | MethodRefExpr |
| expressions.swift:16:19:16:19 | failed | DeclRefExpr |
| expressions.swift:20:1:20:16 | try! ... | ForceTryExpr |
| expressions.swift:20:6:20:6 | failure(_:) | DeclRefExpr |
@@ -88,37 +88,37 @@
| expressions.swift:41:1:43:1 | call to closured(closure:) | CallExpr |
| expressions.swift:41:10:43:1 | { ... } | ClosureExpr |
| expressions.swift:42:12:42:12 | x | DeclRefExpr |
| expressions.swift:42:12:42:16 | ... call to +(_:_:) ... | BinaryExpr |
| expressions.swift:42:12:42:16 | ... .+(_:_:) ... | BinaryExpr |
| expressions.swift:42:14:42:14 | +(_:_:) | DeclRefExpr |
| expressions.swift:42:14:42:14 | .+(_:_:) | MethodRefExpr |
| expressions.swift:42:14:42:14 | Int.Type | TypeExpr |
| expressions.swift:42:14:42:14 | call to +(_:_:) | DotSyntaxCallExpr |
| expressions.swift:42:16:42:16 | y | DeclRefExpr |
| expressions.swift:44:1:44:1 | closured(closure:) | DeclRefExpr |
| expressions.swift:44:1:46:1 | call to closured(closure:) | CallExpr |
| expressions.swift:44:10:46:1 | { ... } | ClosureExpr |
| expressions.swift:45:12:45:12 | x | DeclRefExpr |
| expressions.swift:45:12:45:16 | ... call to +(_:_:) ... | BinaryExpr |
| expressions.swift:45:12:45:16 | ... .+(_:_:) ... | BinaryExpr |
| expressions.swift:45:14:45:14 | +(_:_:) | DeclRefExpr |
| expressions.swift:45:14:45:14 | .+(_:_:) | MethodRefExpr |
| expressions.swift:45:14:45:14 | Int.Type | TypeExpr |
| expressions.swift:45:14:45:14 | call to +(_:_:) | DotSyntaxCallExpr |
| expressions.swift:45:16:45:16 | y | DeclRefExpr |
| expressions.swift:47:1:47:1 | closured(closure:) | DeclRefExpr |
| expressions.swift:47:1:47:27 | call to closured(closure:) | CallExpr |
| expressions.swift:47:10:47:27 | { ... } | ClosureExpr |
| expressions.swift:47:19:47:19 | $0 | DeclRefExpr |
| expressions.swift:47:19:47:24 | ... call to +(_:_:) ... | BinaryExpr |
| expressions.swift:47:19:47:24 | ... .+(_:_:) ... | BinaryExpr |
| expressions.swift:47:22:47:22 | +(_:_:) | DeclRefExpr |
| expressions.swift:47:22:47:22 | .+(_:_:) | MethodRefExpr |
| expressions.swift:47:22:47:22 | Int.Type | TypeExpr |
| expressions.swift:47:22:47:22 | call to +(_:_:) | DotSyntaxCallExpr |
| expressions.swift:47:24:47:24 | $1 | DeclRefExpr |
| expressions.swift:48:1:48:1 | closured(closure:) | DeclRefExpr |
| expressions.swift:48:1:48:20 | call to closured(closure:) | CallExpr |
| expressions.swift:48:10:48:20 | { ... } | ClosureExpr |
| expressions.swift:48:12:48:12 | $0 | DeclRefExpr |
| expressions.swift:48:12:48:17 | ... call to +(_:_:) ... | BinaryExpr |
| expressions.swift:48:12:48:17 | ... .+(_:_:) ... | BinaryExpr |
| expressions.swift:48:15:48:15 | +(_:_:) | DeclRefExpr |
| expressions.swift:48:15:48:15 | .+(_:_:) | MethodRefExpr |
| expressions.swift:48:15:48:15 | Int.Type | TypeExpr |
| expressions.swift:48:15:48:15 | call to +(_:_:) | DotSyntaxCallExpr |
| expressions.swift:48:17:48:17 | $1 | DeclRefExpr |
| expressions.swift:54:1:54:1 | _ | DiscardAssignmentExpr |
| expressions.swift:54:1:54:8 | ... = ... | AssignExpr |
@@ -139,10 +139,10 @@
| expressions.swift:60:35:60:61 | call to unsafeFunction(pointer:) | CallExpr |
| expressions.swift:60:59:60:59 | $0 | DeclRefExpr |
| expressions.swift:64:8:64:8 | x | DeclRefExpr |
| expressions.swift:64:8:64:12 | ... call to <(_:_:) ... | BinaryExpr |
| expressions.swift:64:8:64:12 | ... .<(_:_:) ... | BinaryExpr |
| expressions.swift:64:10:64:10 | .<(_:_:) | MethodRefExpr |
| expressions.swift:64:10:64:10 | <(_:_:) | DeclRefExpr |
| expressions.swift:64:10:64:10 | Int.Type | TypeExpr |
| expressions.swift:64:10:64:10 | call to <(_:_:) | DotSyntaxCallExpr |
| expressions.swift:64:12:64:12 | 0 | IntegerLiteralExpr |
| expressions.swift:73:5:73:5 | .xx | MemberRefExpr |
| expressions.swift:73:5:73:5 | self | DeclRefExpr |
@@ -177,10 +177,10 @@
| expressions.swift:88:1:88:7 | ...! | ForceValueExpr |
| expressions.swift:88:3:88:3 | a | StringLiteralExpr |
| expressions.swift:92:14:92:14 | Unmanaged<ToPtr>.Type | TypeExpr |
| expressions.swift:92:14:92:24 | call to passRetained(_:) | DotSyntaxCallExpr |
| expressions.swift:92:14:92:44 | call to ... | CallExpr |
| expressions.swift:92:14:92:46 | call to toOpaque() | DotSyntaxCallExpr |
| expressions.swift:92:14:92:55 | call to ... | CallExpr |
| expressions.swift:92:14:92:24 | .passRetained(_:) | MethodRefExpr |
| expressions.swift:92:14:92:44 | call to passRetained(_:) | CallExpr |
| expressions.swift:92:14:92:46 | .toOpaque() | MethodRefExpr |
| expressions.swift:92:14:92:55 | call to toOpaque() | CallExpr |
| expressions.swift:92:24:92:24 | passRetained(_:) | DeclRefExpr |
| expressions.swift:92:37:92:37 | ToPtr.Type | TypeExpr |
| expressions.swift:92:37:92:37 | call to init | ConstructorRefCallExpr |
@@ -188,8 +188,8 @@
| expressions.swift:92:37:92:43 | call to ... | CallExpr |
| expressions.swift:92:46:92:46 | toOpaque() | DeclRefExpr |
| expressions.swift:93:1:93:16 | Unmanaged<ToPtr>.Type | TypeExpr |
| expressions.swift:93:1:93:18 | call to fromOpaque(_:) | DotSyntaxCallExpr |
| expressions.swift:93:1:93:35 | call to ... | CallExpr |
| expressions.swift:93:1:93:18 | .fromOpaque(_:) | MethodRefExpr |
| expressions.swift:93:1:93:35 | call to fromOpaque(_:) | CallExpr |
| expressions.swift:93:18:93:18 | fromOpaque(_:) | DeclRefExpr |
| expressions.swift:93:29:93:29 | (UnsafeRawPointer) ... | PointerToPointerExpr |
| expressions.swift:93:29:93:29 | opaque | DeclRefExpr |

View File

@@ -1,3 +1,3 @@
| constructor_ref_calls.swift:7:9:7:9 | call to init | getFunction: | constructor_ref_calls.swift:7:9:7:9 | init | getBaseExpr: | constructor_ref_calls.swift:7:9:7:9 | X.Type |
| constructor_ref_calls.swift:8:10:8:10 | call to init | getFunction: | constructor_ref_calls.swift:8:10:8:10 | init | getBaseExpr: | constructor_ref_calls.swift:8:10:8:10 | Y.Type |
| constructor_ref_calls.swift:9:10:9:10 | call to init | getFunction: | constructor_ref_calls.swift:9:10:9:10 | init | getBaseExpr: | constructor_ref_calls.swift:9:10:9:10 | Y.Type |
| constructor_ref_calls.swift:7:9:7:9 | call to init | getFunction: | constructor_ref_calls.swift:7:9:7:9 | init | getBase: | constructor_ref_calls.swift:7:9:7:9 | X.Type |
| constructor_ref_calls.swift:8:10:8:10 | call to init | getFunction: | constructor_ref_calls.swift:8:10:8:10 | init | getBase: | constructor_ref_calls.swift:8:10:8:10 | Y.Type |
| constructor_ref_calls.swift:9:10:9:10 | call to init | getFunction: | constructor_ref_calls.swift:9:10:9:10 | init | getBase: | constructor_ref_calls.swift:9:10:9:10 | Y.Type |

View File

@@ -2,10 +2,10 @@
import codeql.swift.elements
import TestUtils
from ConstructorRefCallExpr x, Expr getFunction, Expr getBaseExpr
from ConstructorRefCallExpr x, Expr getFunction, Expr getBase
where
toBeTested(x) and
not x.isUnknown() and
getFunction = x.getFunction() and
getBaseExpr = x.getBaseExpr()
select x, "getFunction:", getFunction, "getBaseExpr:", getBaseExpr
getBase = x.getBase()
select x, "getFunction:", getFunction, "getBase:", getBase

View File

@@ -1,9 +1 @@
| dot_syntax_call.swift:7:13:7:13 | call to ... | getFunction: | dot_syntax_call.swift:7:13:7:13 | { ... } | getBaseExpr: | dot_syntax_call.swift:7:13:7:13 | self |
| dot_syntax_call.swift:7:13:7:13 | call to baz(_:) | getFunction: | dot_syntax_call.swift:7:13:7:13 | baz(_:) | getBaseExpr: | file://:0:0:0:0 | self |
| dot_syntax_call.swift:11:1:11:3 | call to foo(_:_:) | getFunction: | dot_syntax_call.swift:11:3:11:3 | foo(_:_:) | getBaseExpr: | dot_syntax_call.swift:11:1:11:1 | X.Type |
| dot_syntax_call.swift:12:1:12:3 | call to bar() | getFunction: | dot_syntax_call.swift:12:3:12:3 | bar() | getBaseExpr: | dot_syntax_call.swift:12:1:12:1 | X.Type |
| dot_syntax_call.swift:13:1:13:5 | call to baz(_:) | getFunction: | dot_syntax_call.swift:13:5:13:5 | baz(_:) | getBaseExpr: | dot_syntax_call.swift:13:1:13:3 | call to ... |
| dot_syntax_call.swift:15:9:15:11 | call to ... | getFunction: | dot_syntax_call.swift:15:11:15:11 | { ... } | getBaseExpr: | dot_syntax_call.swift:15:9:15:9 | X.Type |
| dot_syntax_call.swift:15:11:15:11 | call to bar() | getFunction: | dot_syntax_call.swift:15:11:15:11 | bar() | getBaseExpr: | file://:0:0:0:0 | self |
| dot_syntax_call.swift:16:9:16:13 | call to ... | getFunction: | dot_syntax_call.swift:16:13:16:13 | { ... } | getBaseExpr: | dot_syntax_call.swift:16:9:16:11 | call to ... |
| dot_syntax_call.swift:16:13:16:13 | call to baz(_:) | getFunction: | dot_syntax_call.swift:16:13:16:13 | baz(_:) | getBaseExpr: | file://:0:0:0:0 | self |
| dot_syntax_call.swift:9:9:9:11 | call to ... | getFunction: | dot_syntax_call.swift:9:11:9:11 | { ... } | getBase: | dot_syntax_call.swift:9:9:9:9 | X.Type |

View File

@@ -2,10 +2,10 @@
import codeql.swift.elements
import TestUtils
from DotSyntaxCallExpr x, Expr getFunction, Expr getBaseExpr
from DotSyntaxCallExpr x, Expr getFunction, Expr getBase
where
toBeTested(x) and
not x.isUnknown() and
getFunction = x.getFunction() and
getBaseExpr = x.getBaseExpr()
select x, "getFunction:", getFunction, "getBaseExpr:", getBaseExpr
getBase = x.getBase()
select x, "getFunction:", getFunction, "getBase:", getBase

View File

@@ -1,9 +1 @@
| dot_syntax_call.swift:7:13:7:13 | call to ... | 0 | dot_syntax_call.swift:7:13:7:13 | : self |
| dot_syntax_call.swift:7:13:7:13 | call to baz(_:) | 0 | file://:0:0:0:0 | : self |
| dot_syntax_call.swift:11:1:11:3 | call to foo(_:_:) | 0 | dot_syntax_call.swift:11:1:11:1 | : X.Type |
| dot_syntax_call.swift:12:1:12:3 | call to bar() | 0 | dot_syntax_call.swift:12:1:12:1 | : X.Type |
| dot_syntax_call.swift:13:1:13:5 | call to baz(_:) | 0 | dot_syntax_call.swift:13:1:13:3 | : call to ... |
| dot_syntax_call.swift:15:9:15:11 | call to ... | 0 | dot_syntax_call.swift:15:9:15:9 | : X.Type |
| dot_syntax_call.swift:15:11:15:11 | call to bar() | 0 | file://:0:0:0:0 | : self |
| dot_syntax_call.swift:16:9:16:13 | call to ... | 0 | dot_syntax_call.swift:16:9:16:11 | : call to ... |
| dot_syntax_call.swift:16:13:16:13 | call to baz(_:) | 0 | file://:0:0:0:0 | : self |
| dot_syntax_call.swift:9:9:9:11 | call to ... | 0 | dot_syntax_call.swift:9:9:9:9 | : X.Type |

View File

@@ -1,9 +1 @@
| dot_syntax_call.swift:7:13:7:13 | call to ... | (Int) -> () |
| dot_syntax_call.swift:7:13:7:13 | call to baz(_:) | (Int) -> () |
| dot_syntax_call.swift:11:1:11:3 | call to foo(_:_:) | (Int, Int) -> () |
| dot_syntax_call.swift:12:1:12:3 | call to bar() | () -> () |
| dot_syntax_call.swift:13:1:13:5 | call to baz(_:) | (Int) -> () |
| dot_syntax_call.swift:15:9:15:11 | call to ... | () -> () |
| dot_syntax_call.swift:15:11:15:11 | call to bar() | () -> () |
| dot_syntax_call.swift:16:9:16:13 | call to ... | (Int) -> () |
| dot_syntax_call.swift:16:13:16:13 | call to baz(_:) | (Int) -> () |
| dot_syntax_call.swift:9:9:9:11 | call to ... | () -> () |

View File

@@ -1,16 +1,9 @@
class X {
static func foo(_: Int, _:Int) {}
class func bar() {}
func baz(_: Int) {}
init() {
let f = baz
}
}
X.foo(1, 2)
X.bar()
X().baz(42)
let f = X.bar
let g = X().baz

View File

@@ -0,0 +1,4 @@
| method_refs.swift:5:13:5:13 | .bar(_:) | getBase: | file://:0:0:0:0 | self |
| method_refs.swift:6:5:6:5 | .bar(_:) | getBase: | method_refs.swift:6:5:6:5 | self |
| method_refs.swift:11:1:11:3 | .bar(_:) | getBase: | method_refs.swift:11:1:11:1 | x |
| method_refs.swift:13:11:13:11 | .bar(_:) | getBase: | file://:0:0:0:0 | self |

View File

@@ -0,0 +1,10 @@
// generated by codegen/codegen.py
import codeql.swift.elements
import TestUtils
from MethodRefExpr x, Expr getBase
where
toBeTested(x) and
not x.isUnknown() and
getBase = x.getBase()
select x, "getBase:", getBase

View File

@@ -0,0 +1,4 @@
| method_refs.swift:5:13:5:13 | .bar(_:) | method_refs.swift:2:3:2:21 | bar(_:) |
| method_refs.swift:6:5:6:5 | .bar(_:) | method_refs.swift:2:3:2:21 | bar(_:) |
| method_refs.swift:11:1:11:3 | .bar(_:) | method_refs.swift:2:3:2:21 | bar(_:) |
| method_refs.swift:13:11:13:11 | .bar(_:) | method_refs.swift:2:3:2:21 | bar(_:) |

View File

@@ -0,0 +1,7 @@
// generated by codegen/codegen.py
import codeql.swift.elements
import TestUtils
from MethodRefExpr x
where toBeTested(x) and not x.isUnknown()
select x, x.getMember()

View File

@@ -0,0 +1,4 @@
| method_refs.swift:5:13:5:13 | .bar(_:) | (Int) -> () |
| method_refs.swift:6:5:6:5 | .bar(_:) | (Int) -> () |
| method_refs.swift:11:1:11:3 | .bar(_:) | (Int) -> () |
| method_refs.swift:13:11:13:11 | .bar(_:) | (Int) -> () |

View File

@@ -0,0 +1,7 @@
// generated by codegen/codegen.py
import codeql.swift.elements
import TestUtils
from MethodRefExpr x
where toBeTested(x) and not x.isUnknown()
select x, x.getType()

View File

@@ -0,0 +1,13 @@
class X {
func bar(_: Int) {}
init() {
let f = bar
bar(0)
}
}
let x = X()
x.bar(42)
let f = x.bar

View File

@@ -1,6 +1,6 @@
| statements.swift:3:8:3:13 | ... call to ==(_:_:) ... | statements.swift:3:8:3:13 | ... call to ==(_:_:) ... |
| statements.swift:10:17:10:24 | ... call to <(_:_:) ... | statements.swift:10:18:10:22 | ... call to <(_:_:) ... |
| statements.swift:39:9:39:14 | ... call to !=(_:_:) ... | statements.swift:39:9:39:14 | ... call to !=(_:_:) ... |
| statements.swift:3:8:3:13 | ... .==(_:_:) ... | statements.swift:3:8:3:13 | ... .==(_:_:) ... |
| statements.swift:10:17:10:24 | ... .<(_:_:) ... | statements.swift:10:18:10:22 | ... .<(_:_:) ... |
| statements.swift:39:9:39:14 | ... .!=(_:_:) ... | statements.swift:39:9:39:14 | ... .!=(_:_:) ... |
| statements.swift:65:4:65:19 | let ... = ... | statements.swift:65:9:65:15 | let ... |
| statements.swift:65:4:65:19 | let ... = ... | statements.swift:65:19:65:19 | x |
| statements.swift:67:4:67:20 | .some(...) = ... | statements.swift:67:9:67:16 | .some(...) |

View File

@@ -5,12 +5,12 @@
| types.swift:3:6:3:6 | default terminator | String |
| types.swift:3:7:3:7 | x | Int |
| types.swift:3:7:3:11 | (Any) ... | Any |
| types.swift:3:7:3:11 | ... call to +(_:_:) ... | Int |
| types.swift:3:7:3:11 | ... .+(_:_:) ... | Int |
| types.swift:3:7:3:11 | [...] | Any... |
| types.swift:3:7:3:11 | [...] | Any... |
| types.swift:3:9:3:9 | +(_:_:) | (Int.Type) -> (Int, Int) -> Int |
| types.swift:3:9:3:9 | .+(_:_:) | (Int, Int) -> Int |
| types.swift:3:9:3:9 | Int.Type | Int.Type |
| types.swift:3:9:3:9 | call to +(_:_:) | (Int, Int) -> Int |
| types.swift:3:11:3:11 | 10 | Int |
| types.swift:7:16:7:16 | X.Type | X.Type |
| types.swift:7:16:7:16 | call to init | () -> X |
@@ -25,10 +25,10 @@
| types.swift:14:22:14:31 | call to ... | C.Nested |
| types.swift:14:24:14:24 | init | (C.Nested.Type) -> () -> C.Nested |
| types.swift:17:10:17:10 | x | Int |
| types.swift:17:10:17:14 | ... call to +(_:_:) ... | Int |
| types.swift:17:10:17:14 | ... .+(_:_:) ... | Int |
| types.swift:17:12:17:12 | +(_:_:) | (Int.Type) -> (Int, Int) -> Int |
| types.swift:17:12:17:12 | .+(_:_:) | (Int, Int) -> Int |
| types.swift:17:12:17:12 | Int.Type | Int.Type |
| types.swift:17:12:17:12 | call to +(_:_:) | (Int, Int) -> Int |
| types.swift:17:14:17:14 | y | Int |
| types.swift:21:10:21:10 | f | (Int) -> Int |
| types.swift:21:10:21:13 | call to ... | Int |

File diff suppressed because it is too large Load Diff

View File

@@ -398,7 +398,7 @@ class Structors {
deinit {
field = 0
}
}
}
func dictionaryLiteral(x: Int, y: Int) -> [String: Int] {
@@ -462,4 +462,4 @@ func test(a : A) {
var apply_kpGet_bs_0_x = a[keyPath: kpGet_bs_0_x]
var apply_kpGet_mayB_force_x = a[keyPath: kpGet_mayB_force_x]
var apply_kpGet_mayB_x = a[keyPath: kpGet_mayB_x]
}
}

View File

@@ -1,131 +1,100 @@
| data.swift:12:6:12:6 | WriteDef | data.swift:16:12:16:12 | dataClean |
| data.swift:12:18:12:36 | call to ... | data.swift:12:6:12:6 | WriteDef |
| data.swift:12:18:12:36 | call to init | data.swift:12:6:12:6 | WriteDef |
| data.swift:13:6:13:6 | WriteDef | data.swift:14:26:14:26 | dataTainted |
| data.swift:13:20:13:38 | call to ... | data.swift:13:6:13:6 | WriteDef |
| data.swift:13:20:13:38 | call to init | data.swift:13:6:13:6 | WriteDef |
| data.swift:14:6:14:6 | WriteDef | data.swift:18:12:18:12 | dataTainted2 |
| data.swift:14:21:14:37 | call to ... | data.swift:14:6:14:6 | WriteDef |
| data.swift:14:21:14:37 | call to init | data.swift:14:6:14:6 | WriteDef |
| data.swift:14:26:14:26 | dataTainted | data.swift:17:12:17:12 | dataTainted |
| data.swift:16:12:16:12 | dataClean | data.swift:20:33:20:33 | dataClean |
| file://:0:0:0:0 | Phi | string.swift:7:14:7:14 | $interpolation |
| file://:0:0:0:0 | Phi | string.swift:9:14:9:14 | $interpolation |
| file://:0:0:0:0 | Phi | string.swift:11:14:11:14 | $interpolation |
| file://:0:0:0:0 | Phi | string.swift:14:14:14:14 | $interpolation |
| file://:0:0:0:0 | Phi | string.swift:16:14:16:14 | $interpolation |
| file://:0:0:0:0 | Phi | string.swift:18:14:18:14 | $interpolation |
| file://:0:0:0:0 | Phi | string.swift:21:14:21:14 | $interpolation |
| string.swift:5:7:5:7 | WriteDef | string.swift:7:16:7:16 | x |
| string.swift:5:11:5:18 | call to source() | string.swift:5:7:5:7 | WriteDef |
| string.swift:7:13:7:13 | WriteDef | file://:0:0:0:0 | Phi |
| string.swift:7:13:7:13 | WriteDef | string.swift:7:14:7:14 | Phi |
| string.swift:7:14:7:13 | WriteDef | string.swift:7:15:7:15 | $interpolation |
| string.swift:7:14:7:14 | $interpolation | string.swift:7:14:7:14 | &... |
| string.swift:7:14:7:14 | : &... | string.swift:7:14:7:14 | WriteDef |
| string.swift:7:14:7:14 | WriteDef | string.swift:7:15:7:15 | $interpolation |
| string.swift:7:14:7:14 | Phi | string.swift:7:14:7:14 | $interpolation |
| string.swift:7:15:7:15 | $interpolation | string.swift:7:15:7:15 | &... |
| string.swift:7:15:7:15 | : &... | string.swift:7:15:7:15 | WriteDef |
| string.swift:7:15:7:15 | WriteDef | string.swift:7:18:7:18 | $interpolation |
| string.swift:7:15:7:17 | WriteDef | string.swift:7:18:7:18 | $interpolation |
| string.swift:7:16:7:16 | x | string.swift:9:16:9:16 | x |
| string.swift:7:18:7:18 | $interpolation | string.swift:7:18:7:18 | &... |
| string.swift:7:18:7:18 | : &... | string.swift:7:18:7:18 | WriteDef |
| string.swift:7:18:7:18 | WriteDef | string.swift:7:13:7:13 | TapExpr |
| string.swift:9:13:9:13 | WriteDef | file://:0:0:0:0 | Phi |
| string.swift:9:13:9:13 | WriteDef | string.swift:9:14:9:14 | Phi |
| string.swift:9:14:9:13 | WriteDef | string.swift:9:15:9:15 | $interpolation |
| string.swift:9:14:9:14 | $interpolation | string.swift:9:14:9:14 | &... |
| string.swift:9:14:9:14 | : &... | string.swift:9:14:9:14 | WriteDef |
| string.swift:9:14:9:14 | WriteDef | string.swift:9:15:9:15 | $interpolation |
| string.swift:9:14:9:14 | Phi | string.swift:9:14:9:14 | $interpolation |
| string.swift:9:15:9:15 | $interpolation | string.swift:9:15:9:15 | &... |
| string.swift:9:15:9:15 | : &... | string.swift:9:15:9:15 | WriteDef |
| string.swift:9:15:9:15 | WriteDef | string.swift:9:18:9:18 | $interpolation |
| string.swift:9:15:9:17 | WriteDef | string.swift:9:18:9:18 | $interpolation |
| string.swift:9:16:9:16 | x | string.swift:9:21:9:21 | x |
| string.swift:9:18:9:18 | $interpolation | string.swift:9:18:9:18 | &... |
| string.swift:9:18:9:18 | : &... | string.swift:9:18:9:18 | WriteDef |
| string.swift:9:18:9:18 | WriteDef | string.swift:9:20:9:20 | $interpolation |
| string.swift:9:20:9:20 | $interpolation | string.swift:9:20:9:20 | &... |
| string.swift:9:20:9:20 | : &... | string.swift:9:20:9:20 | WriteDef |
| string.swift:9:20:9:20 | WriteDef | string.swift:9:23:9:23 | $interpolation |
| string.swift:9:20:9:22 | WriteDef | string.swift:9:23:9:23 | $interpolation |
| string.swift:9:21:9:21 | x | string.swift:11:16:11:16 | x |
| string.swift:9:23:9:23 | $interpolation | string.swift:9:23:9:23 | &... |
| string.swift:9:23:9:23 | : &... | string.swift:9:23:9:23 | WriteDef |
| string.swift:9:23:9:23 | WriteDef | string.swift:9:13:9:13 | TapExpr |
| string.swift:11:13:11:13 | WriteDef | file://:0:0:0:0 | Phi |
| string.swift:11:13:11:13 | WriteDef | string.swift:11:14:11:14 | Phi |
| string.swift:11:14:11:13 | WriteDef | string.swift:11:15:11:15 | $interpolation |
| string.swift:11:14:11:14 | $interpolation | string.swift:11:14:11:14 | &... |
| string.swift:11:14:11:14 | : &... | string.swift:11:14:11:14 | WriteDef |
| string.swift:11:14:11:14 | WriteDef | string.swift:11:15:11:15 | $interpolation |
| string.swift:11:14:11:14 | Phi | string.swift:11:14:11:14 | $interpolation |
| string.swift:11:15:11:15 | $interpolation | string.swift:11:15:11:15 | &... |
| string.swift:11:15:11:15 | : &... | string.swift:11:15:11:15 | WriteDef |
| string.swift:11:15:11:15 | WriteDef | string.swift:11:18:11:18 | $interpolation |
| string.swift:11:15:11:17 | WriteDef | string.swift:11:18:11:18 | $interpolation |
| string.swift:11:16:11:16 | x | string.swift:11:26:11:26 | x |
| string.swift:11:18:11:18 | $interpolation | string.swift:11:18:11:18 | &... |
| string.swift:11:18:11:18 | : &... | string.swift:11:18:11:18 | WriteDef |
| string.swift:11:18:11:18 | WriteDef | string.swift:11:20:11:20 | $interpolation |
| string.swift:11:20:11:20 | $interpolation | string.swift:11:20:11:20 | &... |
| string.swift:11:20:11:20 | : &... | string.swift:11:20:11:20 | WriteDef |
| string.swift:11:20:11:20 | WriteDef | string.swift:11:23:11:23 | $interpolation |
| string.swift:11:20:11:22 | WriteDef | string.swift:11:23:11:23 | $interpolation |
| string.swift:11:23:11:23 | $interpolation | string.swift:11:23:11:23 | &... |
| string.swift:11:23:11:23 | : &... | string.swift:11:23:11:23 | WriteDef |
| string.swift:11:23:11:23 | WriteDef | string.swift:11:25:11:25 | $interpolation |
| string.swift:11:25:11:25 | $interpolation | string.swift:11:25:11:25 | &... |
| string.swift:11:25:11:25 | : &... | string.swift:11:25:11:25 | WriteDef |
| string.swift:11:25:11:25 | WriteDef | string.swift:11:28:11:28 | $interpolation |
| string.swift:11:25:11:27 | WriteDef | string.swift:11:28:11:28 | $interpolation |
| string.swift:11:26:11:26 | x | string.swift:16:16:16:16 | x |
| string.swift:11:28:11:28 | $interpolation | string.swift:11:28:11:28 | &... |
| string.swift:11:28:11:28 | : &... | string.swift:11:28:11:28 | WriteDef |
| string.swift:11:28:11:28 | WriteDef | string.swift:11:13:11:13 | TapExpr |
| string.swift:13:7:13:7 | WriteDef | string.swift:14:16:14:16 | y |
| string.swift:13:11:13:11 | 42 | string.swift:13:7:13:7 | WriteDef |
| string.swift:14:13:14:13 | WriteDef | file://:0:0:0:0 | Phi |
| string.swift:14:13:14:13 | WriteDef | string.swift:14:14:14:14 | Phi |
| string.swift:14:14:14:13 | WriteDef | string.swift:14:15:14:15 | $interpolation |
| string.swift:14:14:14:14 | $interpolation | string.swift:14:14:14:14 | &... |
| string.swift:14:14:14:14 | : &... | string.swift:14:14:14:14 | WriteDef |
| string.swift:14:14:14:14 | WriteDef | string.swift:14:15:14:15 | $interpolation |
| string.swift:14:14:14:14 | Phi | string.swift:14:14:14:14 | $interpolation |
| string.swift:14:15:14:15 | $interpolation | string.swift:14:15:14:15 | &... |
| string.swift:14:15:14:15 | : &... | string.swift:14:15:14:15 | WriteDef |
| string.swift:14:15:14:15 | WriteDef | string.swift:14:18:14:18 | $interpolation |
| string.swift:14:15:14:17 | WriteDef | string.swift:14:18:14:18 | $interpolation |
| string.swift:14:16:14:16 | y | string.swift:16:27:16:27 | y |
| string.swift:14:18:14:18 | $interpolation | string.swift:14:18:14:18 | &... |
| string.swift:14:18:14:18 | : &... | string.swift:14:18:14:18 | WriteDef |
| string.swift:14:18:14:18 | WriteDef | string.swift:14:13:14:13 | TapExpr |
| string.swift:16:13:16:13 | WriteDef | file://:0:0:0:0 | Phi |
| string.swift:16:13:16:13 | WriteDef | string.swift:16:14:16:14 | Phi |
| string.swift:16:14:16:13 | WriteDef | string.swift:16:15:16:15 | $interpolation |
| string.swift:16:14:16:14 | $interpolation | string.swift:16:14:16:14 | &... |
| string.swift:16:14:16:14 | : &... | string.swift:16:14:16:14 | WriteDef |
| string.swift:16:14:16:14 | WriteDef | string.swift:16:15:16:15 | $interpolation |
| string.swift:16:14:16:14 | Phi | string.swift:16:14:16:14 | $interpolation |
| string.swift:16:15:16:15 | $interpolation | string.swift:16:15:16:15 | &... |
| string.swift:16:15:16:15 | : &... | string.swift:16:15:16:15 | WriteDef |
| string.swift:16:15:16:15 | WriteDef | string.swift:16:18:16:18 | $interpolation |
| string.swift:16:15:16:17 | WriteDef | string.swift:16:18:16:18 | $interpolation |
| string.swift:16:16:16:16 | x | string.swift:18:27:18:27 | x |
| string.swift:16:18:16:18 | $interpolation | string.swift:16:18:16:18 | &... |
| string.swift:16:18:16:18 | : &... | string.swift:16:18:16:18 | WriteDef |
| string.swift:16:18:16:18 | WriteDef | string.swift:16:26:16:26 | $interpolation |
| string.swift:16:26:16:26 | $interpolation | string.swift:16:26:16:26 | &... |
| string.swift:16:26:16:26 | : &... | string.swift:16:26:16:26 | WriteDef |
| string.swift:16:26:16:26 | WriteDef | string.swift:16:29:16:29 | $interpolation |
| string.swift:16:26:16:28 | WriteDef | string.swift:16:29:16:29 | $interpolation |
| string.swift:16:27:16:27 | y | string.swift:18:16:18:16 | y |
| string.swift:16:29:16:29 | $interpolation | string.swift:16:29:16:29 | &... |
| string.swift:16:29:16:29 | : &... | string.swift:16:29:16:29 | WriteDef |
| string.swift:16:29:16:29 | WriteDef | string.swift:16:13:16:13 | TapExpr |
| string.swift:18:13:18:13 | WriteDef | file://:0:0:0:0 | Phi |
| string.swift:18:13:18:13 | WriteDef | string.swift:18:14:18:14 | Phi |
| string.swift:18:14:18:13 | WriteDef | string.swift:18:15:18:15 | $interpolation |
| string.swift:18:14:18:14 | $interpolation | string.swift:18:14:18:14 | &... |
| string.swift:18:14:18:14 | : &... | string.swift:18:14:18:14 | WriteDef |
| string.swift:18:14:18:14 | WriteDef | string.swift:18:15:18:15 | $interpolation |
| string.swift:18:14:18:14 | Phi | string.swift:18:14:18:14 | $interpolation |
| string.swift:18:15:18:15 | $interpolation | string.swift:18:15:18:15 | &... |
| string.swift:18:15:18:15 | : &... | string.swift:18:15:18:15 | WriteDef |
| string.swift:18:15:18:15 | WriteDef | string.swift:18:18:18:18 | $interpolation |
| string.swift:18:15:18:17 | WriteDef | string.swift:18:18:18:18 | $interpolation |
| string.swift:18:18:18:18 | $interpolation | string.swift:18:18:18:18 | &... |
| string.swift:18:18:18:18 | : &... | string.swift:18:18:18:18 | WriteDef |
| string.swift:18:18:18:18 | WriteDef | string.swift:18:26:18:26 | $interpolation |
| string.swift:18:26:18:26 | $interpolation | string.swift:18:26:18:26 | &... |
| string.swift:18:26:18:26 | : &... | string.swift:18:26:18:26 | WriteDef |
| string.swift:18:26:18:26 | WriteDef | string.swift:18:29:18:29 | $interpolation |
| string.swift:18:26:18:28 | WriteDef | string.swift:18:29:18:29 | $interpolation |
| string.swift:18:29:18:29 | $interpolation | string.swift:18:29:18:29 | &... |
| string.swift:18:29:18:29 | : &... | string.swift:18:29:18:29 | WriteDef |
| string.swift:18:29:18:29 | WriteDef | string.swift:18:13:18:13 | TapExpr |
| string.swift:20:3:20:7 | WriteDef | string.swift:21:16:21:16 | x |
| string.swift:20:7:20:7 | 0 | string.swift:20:3:20:7 | WriteDef |
| string.swift:21:13:21:13 | WriteDef | file://:0:0:0:0 | Phi |
| string.swift:21:13:21:13 | WriteDef | string.swift:21:14:21:14 | Phi |
| string.swift:21:14:21:13 | WriteDef | string.swift:21:15:21:15 | $interpolation |
| string.swift:21:14:21:14 | $interpolation | string.swift:21:14:21:14 | &... |
| string.swift:21:14:21:14 | : &... | string.swift:21:14:21:14 | WriteDef |
| string.swift:21:14:21:14 | WriteDef | string.swift:21:15:21:15 | $interpolation |
| string.swift:21:14:21:14 | Phi | string.swift:21:14:21:14 | $interpolation |
| string.swift:21:15:21:15 | $interpolation | string.swift:21:15:21:15 | &... |
| string.swift:21:15:21:15 | : &... | string.swift:21:15:21:15 | WriteDef |
| string.swift:21:15:21:15 | WriteDef | string.swift:21:18:21:18 | $interpolation |
| string.swift:21:15:21:17 | WriteDef | string.swift:21:18:21:18 | $interpolation |
| string.swift:21:18:21:18 | $interpolation | string.swift:21:18:21:18 | &... |
| string.swift:21:18:21:18 | : &... | string.swift:21:18:21:18 | WriteDef |
| string.swift:21:18:21:18 | WriteDef | string.swift:21:13:21:13 | TapExpr |
| string.swift:27:7:27:7 | WriteDef | string.swift:30:13:30:13 | clean |
| string.swift:27:15:27:15 | abcdef | string.swift:27:7:27:7 | WriteDef |
@@ -154,20 +123,17 @@
| string.swift:51:7:51:7 | WriteDef | string.swift:53:13:53:13 | str2 |
| string.swift:51:14:51:14 | abc | string.swift:51:7:51:7 | WriteDef |
| string.swift:53:13:53:13 | str2 | string.swift:55:3:55:3 | str2 |
| string.swift:55:3:55:3 | : &... | string.swift:55:3:55:8 | WriteDef |
| string.swift:55:3:55:3 | str2 | string.swift:55:3:55:3 | &... |
| string.swift:55:3:55:8 | WriteDef | string.swift:56:13:56:13 | str2 |
| string.swift:55:3:55:20 | WriteDef | string.swift:56:13:56:13 | str2 |
| string.swift:56:13:56:13 | str2 | string.swift:58:3:58:3 | str2 |
| string.swift:58:3:58:3 | : &... | string.swift:58:3:58:8 | WriteDef |
| string.swift:58:3:58:3 | str2 | string.swift:58:3:58:3 | &... |
| string.swift:58:3:58:8 | WriteDef | string.swift:59:13:59:13 | str2 |
| string.swift:58:3:58:24 | WriteDef | string.swift:59:13:59:13 | str2 |
| string.swift:59:13:59:13 | str2 | string.swift:69:13:69:13 | str2 |
| string.swift:61:7:61:7 | WriteDef | string.swift:63:13:63:13 | str3 |
| string.swift:61:14:61:14 | abc | string.swift:61:7:61:7 | WriteDef |
| string.swift:63:13:63:13 | str3 | string.swift:65:3:65:3 | str3 |
| string.swift:65:3:65:3 | : &... | string.swift:65:3:65:8 | WriteDef |
| string.swift:65:3:65:3 | str3 | string.swift:65:3:65:3 | &... |
| string.swift:65:3:65:8 | WriteDef | string.swift:66:13:66:13 | str3 |
| string.swift:65:3:65:32 | WriteDef | string.swift:66:13:66:13 | str3 |
| string.swift:66:13:66:13 | str3 | string.swift:68:3:68:3 | str3 |
| string.swift:68:3:68:3 | str3 | string.swift:68:3:68:3 | &... |
| string.swift:73:7:73:7 | WriteDef | string.swift:77:20:77:20 | clean |
@@ -195,28 +161,28 @@
| url.swift:13:6:13:6 | WriteDef | url.swift:15:31:15:31 | tainted |
| url.swift:13:16:13:23 | call to source() | url.swift:13:6:13:6 | WriteDef |
| url.swift:14:6:14:6 | WriteDef | url.swift:17:12:17:12 | urlClean |
| url.swift:14:17:14:34 | call to ... | url.swift:14:17:14:35 | ...! |
| url.swift:14:17:14:34 | call to init | url.swift:14:17:14:35 | ...! |
| url.swift:14:17:14:35 | ...! | url.swift:14:6:14:6 | WriteDef |
| url.swift:14:29:14:29 | clean | url.swift:20:24:20:24 | clean |
| url.swift:15:6:15:6 | WriteDef | url.swift:18:12:18:12 | urlTainted |
| url.swift:15:19:15:38 | call to ... | url.swift:15:19:15:39 | ...! |
| url.swift:15:19:15:38 | call to init | url.swift:15:19:15:39 | ...! |
| url.swift:15:19:15:39 | ...! | url.swift:15:6:15:6 | WriteDef |
| url.swift:15:31:15:31 | tainted | url.swift:21:24:21:24 | tainted |
| url.swift:17:12:17:12 | urlClean | url.swift:22:43:22:43 | urlClean |
| url.swift:18:12:18:12 | urlTainted | url.swift:23:43:23:43 | urlTainted |
| url.swift:20:12:20:46 | call to ... | url.swift:20:12:20:47 | ...! |
| url.swift:20:12:20:46 | call to init | url.swift:20:12:20:47 | ...! |
| url.swift:20:24:20:24 | clean | url.swift:22:24:22:24 | clean |
| url.swift:21:12:21:48 | call to ... | url.swift:21:12:21:49 | ...! |
| url.swift:21:12:21:48 | call to init | url.swift:21:12:21:49 | ...! |
| url.swift:21:24:21:24 | tainted | url.swift:29:25:29:25 | tainted |
| url.swift:22:12:22:51 | call to ... | url.swift:22:12:22:52 | ...! |
| url.swift:22:12:22:51 | call to init | url.swift:22:12:22:52 | ...! |
| url.swift:22:24:22:24 | clean | url.swift:23:24:23:24 | clean |
| url.swift:23:12:23:53 | call to ... | url.swift:23:12:23:54 | ...! |
| url.swift:23:12:23:53 | call to init | url.swift:23:12:23:54 | ...! |
| url.swift:23:24:23:24 | clean | url.swift:25:25:25:25 | clean |
| url.swift:25:25:25:25 | clean | url.swift:34:26:34:26 | clean |
| url.swift:29:25:29:25 | tainted | url.swift:38:28:38:28 | tainted |
| url.swift:34:2:34:31 | WriteDef | url.swift:35:12:35:12 | urlClean2 |
| url.swift:34:14:34:31 | call to ... | url.swift:34:2:34:31 | WriteDef |
| url.swift:34:14:34:31 | call to init | url.swift:34:2:34:31 | WriteDef |
| url.swift:35:12:35:12 | urlClean2 | url.swift:35:12:35:12 | ...! |
| url.swift:38:2:38:35 | WriteDef | url.swift:39:12:39:12 | urlTainted2 |
| url.swift:38:16:38:35 | call to ... | url.swift:38:2:38:35 | WriteDef |
| url.swift:38:16:38:35 | call to init | url.swift:38:2:38:35 | WriteDef |
| url.swift:39:12:39:12 | urlTainted2 | url.swift:39:12:39:12 | ...! |

View File

@@ -5,10 +5,10 @@ edges
| string.swift:5:11:5:18 | call to source() : | string.swift:16:13:16:13 | "..." |
| string.swift:5:11:5:18 | call to source() : | string.swift:18:13:18:13 | "..." |
| string.swift:28:17:28:25 | call to source2() : | string.swift:31:13:31:13 | tainted |
| string.swift:28:17:28:25 | call to source2() : | string.swift:34:13:34:21 | ... call to +(_:_:) ... |
| string.swift:28:17:28:25 | call to source2() : | string.swift:35:13:35:23 | ... call to +(_:_:) ... |
| string.swift:28:17:28:25 | call to source2() : | string.swift:36:13:36:23 | ... call to +(_:_:) ... |
| string.swift:28:17:28:25 | call to source2() : | string.swift:39:13:39:29 | ... call to +(_:_:) ... |
| string.swift:28:17:28:25 | call to source2() : | string.swift:34:13:34:21 | ... .+(_:_:) ... |
| string.swift:28:17:28:25 | call to source2() : | string.swift:35:13:35:23 | ... .+(_:_:) ... |
| string.swift:28:17:28:25 | call to source2() : | string.swift:36:13:36:23 | ... .+(_:_:) ... |
| string.swift:28:17:28:25 | call to source2() : | string.swift:39:13:39:29 | ... .+(_:_:) ... |
| try.swift:9:17:9:24 | call to source() : | try.swift:9:13:9:24 | try ... |
| try.swift:15:17:15:24 | call to source() : | try.swift:15:12:15:24 | try! ... |
| try.swift:18:18:18:25 | call to source() : | try.swift:18:12:18:27 | ...! |
@@ -25,10 +25,10 @@ nodes
| string.swift:18:13:18:13 | "..." | semmle.label | "..." |
| string.swift:28:17:28:25 | call to source2() : | semmle.label | call to source2() : |
| string.swift:31:13:31:13 | tainted | semmle.label | tainted |
| string.swift:34:13:34:21 | ... call to +(_:_:) ... | semmle.label | ... call to +(_:_:) ... |
| string.swift:35:13:35:23 | ... call to +(_:_:) ... | semmle.label | ... call to +(_:_:) ... |
| string.swift:36:13:36:23 | ... call to +(_:_:) ... | semmle.label | ... call to +(_:_:) ... |
| string.swift:39:13:39:29 | ... call to +(_:_:) ... | semmle.label | ... call to +(_:_:) ... |
| string.swift:34:13:34:21 | ... .+(_:_:) ... | semmle.label | ... .+(_:_:) ... |
| string.swift:35:13:35:23 | ... .+(_:_:) ... | semmle.label | ... .+(_:_:) ... |
| string.swift:36:13:36:23 | ... .+(_:_:) ... | semmle.label | ... .+(_:_:) ... |
| string.swift:39:13:39:29 | ... .+(_:_:) ... | semmle.label | ... .+(_:_:) ... |
| try.swift:9:13:9:24 | try ... | semmle.label | try ... |
| try.swift:9:17:9:24 | call to source() : | semmle.label | call to source() : |
| try.swift:15:12:15:24 | try! ... | semmle.label | try! ... |
@@ -48,10 +48,10 @@ subpaths
| string.swift:16:13:16:13 | "..." | string.swift:5:11:5:18 | call to source() : | string.swift:16:13:16:13 | "..." | result |
| string.swift:18:13:18:13 | "..." | string.swift:5:11:5:18 | call to source() : | string.swift:18:13:18:13 | "..." | result |
| string.swift:31:13:31:13 | tainted | string.swift:28:17:28:25 | call to source2() : | string.swift:31:13:31:13 | tainted | result |
| string.swift:34:13:34:21 | ... call to +(_:_:) ... | string.swift:28:17:28:25 | call to source2() : | string.swift:34:13:34:21 | ... call to +(_:_:) ... | result |
| string.swift:35:13:35:23 | ... call to +(_:_:) ... | string.swift:28:17:28:25 | call to source2() : | string.swift:35:13:35:23 | ... call to +(_:_:) ... | result |
| string.swift:36:13:36:23 | ... call to +(_:_:) ... | string.swift:28:17:28:25 | call to source2() : | string.swift:36:13:36:23 | ... call to +(_:_:) ... | result |
| string.swift:39:13:39:29 | ... call to +(_:_:) ... | string.swift:28:17:28:25 | call to source2() : | string.swift:39:13:39:29 | ... call to +(_:_:) ... | result |
| string.swift:34:13:34:21 | ... .+(_:_:) ... | string.swift:28:17:28:25 | call to source2() : | string.swift:34:13:34:21 | ... .+(_:_:) ... | result |
| string.swift:35:13:35:23 | ... .+(_:_:) ... | string.swift:28:17:28:25 | call to source2() : | string.swift:35:13:35:23 | ... .+(_:_:) ... | result |
| string.swift:36:13:36:23 | ... .+(_:_:) ... | string.swift:28:17:28:25 | call to source2() : | string.swift:36:13:36:23 | ... .+(_:_:) ... | result |
| string.swift:39:13:39:29 | ... .+(_:_:) ... | string.swift:28:17:28:25 | call to source2() : | string.swift:39:13:39:29 | ... .+(_:_:) ... | result |
| try.swift:9:13:9:24 | try ... | try.swift:9:17:9:24 | call to source() : | try.swift:9:13:9:24 | try ... | result |
| try.swift:15:12:15:24 | try! ... | try.swift:15:17:15:24 | call to source() : | try.swift:15:12:15:24 | try! ... | result |
| try.swift:18:12:18:27 | ...! | try.swift:18:18:18:25 | call to source() : | try.swift:18:12:18:27 | ...! | result |

View File

@@ -3,7 +3,7 @@ func sink(arg: String) {}
func taintThroughInterpolatedStrings() {
var x = source()
sink(arg: "\(x)") // $ tainted=5
sink(arg: "\(x) \(x)") // $ tainted=5
@@ -83,7 +83,7 @@ func taintThroughStringOperations() {
sink(arg: clean.description)
sink(arg: tainted.description) // $ MISSING: tainted=74
sink(arg: clean.debugDescription)
sink(arg: tainted.debugDescription) // $ MISSING: tainted=74
}

View File

@@ -1,6 +1,6 @@
| arithmeticoperation.swift:6:6:6:10 | ... call to +(_:_:) ... | AddExpr, BinaryArithmeticOperation |
| arithmeticoperation.swift:7:6:7:10 | ... call to -(_:_:) ... | BinaryArithmeticOperation, SubExpr |
| arithmeticoperation.swift:8:6:8:10 | ... call to *(_:_:) ... | BinaryArithmeticOperation, MulExpr |
| arithmeticoperation.swift:9:6:9:10 | ... call to /(_:_:) ... | BinaryArithmeticOperation, DivExpr |
| arithmeticoperation.swift:10:6:10:10 | ... call to %(_:_:) ... | BinaryArithmeticOperation, RemExpr |
| arithmeticoperation.swift:11:6:11:7 | call to ... | UnaryArithmeticOperation, UnaryMinusExpr |
| arithmeticoperation.swift:6:6:6:10 | ... .+(_:_:) ... | AddExpr, BinaryArithmeticOperation |
| arithmeticoperation.swift:7:6:7:10 | ... .-(_:_:) ... | BinaryArithmeticOperation, SubExpr |
| arithmeticoperation.swift:8:6:8:10 | ... .*(_:_:) ... | BinaryArithmeticOperation, MulExpr |
| arithmeticoperation.swift:9:6:9:10 | ... ./(_:_:) ... | BinaryArithmeticOperation, DivExpr |
| arithmeticoperation.swift:10:6:10:10 | ... .%(_:_:) ... | BinaryArithmeticOperation, RemExpr |
| arithmeticoperation.swift:11:6:11:7 | call to -(_:) | UnaryArithmeticOperation, UnaryMinusExpr |

View File

@@ -1,6 +1,6 @@
| logicaloperation.swift:4:6:4:11 | ... call to &&(_:_:) ... | BinaryLogicalExpr, LogicalAndExpr |
| logicaloperation.swift:5:6:5:11 | ... call to \|\|(_:_:) ... | BinaryLogicalExpr, LogicalOrExpr |
| logicaloperation.swift:6:6:6:7 | call to ... | NotExpr, UnaryLogicalOperation |
| logicaloperation.swift:7:6:7:21 | call to ... | NotExpr, UnaryLogicalOperation |
| logicaloperation.swift:7:8:7:20 | ... call to \|\|(_:_:) ... | BinaryLogicalExpr, LogicalOrExpr |
| logicaloperation.swift:7:9:7:14 | ... call to &&(_:_:) ... | BinaryLogicalExpr, LogicalAndExpr |
| logicaloperation.swift:4:6:4:11 | ... .&&(_:_:) ... | BinaryLogicalExpr, LogicalAndExpr |
| logicaloperation.swift:5:6:5:11 | ... .\|\|(_:_:) ... | BinaryLogicalExpr, LogicalOrExpr |
| logicaloperation.swift:6:6:6:7 | call to !(_:) | NotExpr, UnaryLogicalOperation |
| logicaloperation.swift:7:6:7:21 | call to !(_:) | NotExpr, UnaryLogicalOperation |
| logicaloperation.swift:7:8:7:20 | ... .\|\|(_:_:) ... | BinaryLogicalExpr, LogicalOrExpr |
| logicaloperation.swift:7:9:7:14 | ... .&&(_:_:) ... | BinaryLogicalExpr, LogicalAndExpr |

View File

@@ -25,20 +25,18 @@
| declarations.swift:3:7:3:14 | ... as ... | TypedPattern | declarations.swift:3:14:3:14 | Int | TypeRepr |
| declarations.swift:4:5:4:24 | get | AccessorDecl | declarations.swift:4:9:4:24 | { ... } | BraceStmt |
| declarations.swift:4:9:4:24 | { ... } | BraceStmt | declarations.swift:4:11:4:22 | return ... | ReturnStmt |
| declarations.swift:4:11:4:22 | return ... | ReturnStmt | declarations.swift:4:18:4:22 | ... call to +(_:_:) ... | BinaryExpr |
| declarations.swift:4:11:4:22 | return ... | ReturnStmt | declarations.swift:4:18:4:22 | ... .+(_:_:) ... | BinaryExpr |
| declarations.swift:4:18:4:18 | .x | MemberRefExpr | declarations.swift:4:18:4:18 | self | DeclRefExpr |
| declarations.swift:4:18:4:22 | ... call to +(_:_:) ... | BinaryExpr | declarations.swift:4:20:4:20 | call to +(_:_:) | DotSyntaxCallExpr |
| declarations.swift:4:18:4:22 | ... .+(_:_:) ... | BinaryExpr | declarations.swift:4:20:4:20 | .+(_:_:) | MethodRefExpr |
| declarations.swift:4:20:4:20 | Int.Type | TypeExpr | declarations.swift:4:20:4:20 | Int | TypeRepr |
| declarations.swift:4:20:4:20 | call to +(_:_:) | DotSyntaxCallExpr | declarations.swift:4:20:4:20 | +(_:_:) | DeclRefExpr |
| declarations.swift:5:5:5:38 | set | AccessorDecl | declarations.swift:5:9:5:9 | newValue | ParamDecl |
| declarations.swift:5:5:5:38 | set | AccessorDecl | declarations.swift:5:19:5:38 | { ... } | BraceStmt |
| declarations.swift:5:19:5:38 | { ... } | BraceStmt | declarations.swift:5:21:5:36 | ... = ... | AssignExpr |
| declarations.swift:5:21:5:21 | .x | MemberRefExpr | declarations.swift:5:21:5:21 | self | DeclRefExpr |
| declarations.swift:5:21:5:36 | ... = ... | AssignExpr | declarations.swift:5:21:5:21 | .x | MemberRefExpr |
| declarations.swift:5:21:5:36 | ... = ... | AssignExpr | declarations.swift:5:25:5:36 | ... call to -(_:_:) ... | BinaryExpr |
| declarations.swift:5:25:5:36 | ... call to -(_:_:) ... | BinaryExpr | declarations.swift:5:34:5:34 | call to -(_:_:) | DotSyntaxCallExpr |
| declarations.swift:5:21:5:36 | ... = ... | AssignExpr | declarations.swift:5:25:5:36 | ... .-(_:_:) ... | BinaryExpr |
| declarations.swift:5:25:5:36 | ... .-(_:_:) ... | BinaryExpr | declarations.swift:5:34:5:34 | .-(_:_:) | MethodRefExpr |
| declarations.swift:5:34:5:34 | Int.Type | TypeExpr | declarations.swift:5:34:5:34 | Int | TypeRepr |
| declarations.swift:5:34:5:34 | call to -(_:_:) | DotSyntaxCallExpr | declarations.swift:5:34:5:34 | -(_:_:) | DeclRefExpr |
| declarations.swift:9:7:9:7 | deinit | DestructorDecl | declarations.swift:9:7:9:7 | { ... } | BraceStmt |
| declarations.swift:9:7:9:7 | init | ConstructorDecl | declarations.swift:9:7:9:7 | { ... } | BraceStmt |
| declarations.swift:9:7:9:7 | { ... } | BraceStmt | declarations.swift:9:7:9:7 | return | ReturnStmt |
@@ -148,7 +146,7 @@
| declarations.swift:76:19:79:1 | { ... } | BraceStmt | declarations.swift:77:20:77:20 | x | ConcreteVarDecl |
| declarations.swift:76:19:79:1 | { ... } | BraceStmt | declarations.swift:78:3:78:10 | return ... | ReturnStmt |
| declarations.swift:77:4:77:4 | ZeroWrapper.Type | TypeExpr | declarations.swift:77:4:77:4 | ZeroWrapper | TypeRepr |
| declarations.swift:77:4:77:4 | call to ... | CallExpr | declarations.swift:77:4:77:4 | call to init | ConstructorRefCallExpr |
| declarations.swift:77:4:77:4 | call to init | CallExpr | declarations.swift:77:4:77:4 | call to init | ConstructorRefCallExpr |
| declarations.swift:77:4:77:4 | call to init | ConstructorRefCallExpr | declarations.swift:77:4:77:4 | init | DeclRefExpr |
| declarations.swift:77:16:77:23 | var ... = ... | PatternBindingDecl | declarations.swift:77:20:77:23 | ... as ... | TypedPattern |
| declarations.swift:77:20:77:20 | ... as ... | TypedPattern | declarations.swift:77:20:77:20 | _x | NamedPattern |
@@ -241,7 +239,7 @@
| declarations.swift:115:7:115:7 | yield ... | YieldStmt | file://:0:0:0:0 | &... | InOutExpr |
| declarations.swift:115:7:115:7 | { ... } | BraceStmt | declarations.swift:115:7:115:7 | yield ... | YieldStmt |
| declarations.swift:115:7:115:7 | { ... } | BraceStmt | file://:0:0:0:0 | ... = ... | AssignExpr |
| declarations.swift:115:7:115:7 | { ... } | BraceStmt | file://:0:0:0:0 | call to ... | CallExpr |
| declarations.swift:115:7:115:7 | { ... } | BraceStmt | file://:0:0:0:0 | call to willSet | CallExpr |
| declarations.swift:115:7:115:7 | { ... } | BraceStmt | file://:0:0:0:0 | return ... | ReturnStmt |
| declarations.swift:115:7:115:21 | ... as ... | TypedPattern | declarations.swift:115:7:115:7 | hasWillSet1 | NamedPattern |
| declarations.swift:115:7:115:21 | ... as ... | TypedPattern | declarations.swift:115:21:115:21 | Int | TypeRepr |
@@ -259,7 +257,7 @@
| declarations.swift:119:7:119:7 | yield ... | YieldStmt | file://:0:0:0:0 | &... | InOutExpr |
| declarations.swift:119:7:119:7 | { ... } | BraceStmt | declarations.swift:119:7:119:7 | yield ... | YieldStmt |
| declarations.swift:119:7:119:7 | { ... } | BraceStmt | file://:0:0:0:0 | ... = ... | AssignExpr |
| declarations.swift:119:7:119:7 | { ... } | BraceStmt | file://:0:0:0:0 | call to ... | CallExpr |
| declarations.swift:119:7:119:7 | { ... } | BraceStmt | file://:0:0:0:0 | call to willSet | CallExpr |
| declarations.swift:119:7:119:7 | { ... } | BraceStmt | file://:0:0:0:0 | return ... | ReturnStmt |
| declarations.swift:119:7:119:21 | ... as ... | TypedPattern | declarations.swift:119:7:119:7 | hasWillSet2 | NamedPattern |
| declarations.swift:119:7:119:21 | ... as ... | TypedPattern | declarations.swift:119:21:119:21 | Int | TypeRepr |
@@ -277,7 +275,7 @@
| declarations.swift:123:7:123:7 | yield ... | YieldStmt | file://:0:0:0:0 | &... | InOutExpr |
| declarations.swift:123:7:123:7 | { ... } | BraceStmt | declarations.swift:123:7:123:7 | yield ... | YieldStmt |
| declarations.swift:123:7:123:7 | { ... } | BraceStmt | file://:0:0:0:0 | ... = ... | AssignExpr |
| declarations.swift:123:7:123:7 | { ... } | BraceStmt | file://:0:0:0:0 | call to ... | CallExpr |
| declarations.swift:123:7:123:7 | { ... } | BraceStmt | file://:0:0:0:0 | call to didSet | CallExpr |
| declarations.swift:123:7:123:7 | { ... } | BraceStmt | file://:0:0:0:0 | return ... | ReturnStmt |
| declarations.swift:123:7:123:7 | { ... } | BraceStmt | file://:0:0:0:0 | tmp | ConcreteVarDecl |
| declarations.swift:123:7:123:7 | { ... } | BraceStmt | file://:0:0:0:0 | var ... = ... | PatternBindingDecl |
@@ -297,8 +295,8 @@
| declarations.swift:127:7:127:7 | yield ... | YieldStmt | file://:0:0:0:0 | &... | InOutExpr |
| declarations.swift:127:7:127:7 | { ... } | BraceStmt | declarations.swift:127:7:127:7 | yield ... | YieldStmt |
| declarations.swift:127:7:127:7 | { ... } | BraceStmt | file://:0:0:0:0 | ... = ... | AssignExpr |
| declarations.swift:127:7:127:7 | { ... } | BraceStmt | file://:0:0:0:0 | call to ... | CallExpr |
| declarations.swift:127:7:127:7 | { ... } | BraceStmt | file://:0:0:0:0 | call to ... | CallExpr |
| declarations.swift:127:7:127:7 | { ... } | BraceStmt | file://:0:0:0:0 | call to didSet | CallExpr |
| declarations.swift:127:7:127:7 | { ... } | BraceStmt | file://:0:0:0:0 | call to didSet | CallExpr |
| declarations.swift:127:7:127:7 | { ... } | BraceStmt | file://:0:0:0:0 | return ... | ReturnStmt |
| declarations.swift:127:7:127:20 | ... as ... | TypedPattern | declarations.swift:127:7:127:7 | hasDidSet2 | NamedPattern |
| declarations.swift:127:7:127:20 | ... as ... | TypedPattern | declarations.swift:127:20:127:20 | Int | TypeRepr |
@@ -316,8 +314,8 @@
| declarations.swift:131:7:131:7 | yield ... | YieldStmt | file://:0:0:0:0 | &... | InOutExpr |
| declarations.swift:131:7:131:7 | { ... } | BraceStmt | declarations.swift:131:7:131:7 | yield ... | YieldStmt |
| declarations.swift:131:7:131:7 | { ... } | BraceStmt | file://:0:0:0:0 | ... = ... | AssignExpr |
| declarations.swift:131:7:131:7 | { ... } | BraceStmt | file://:0:0:0:0 | call to ... | CallExpr |
| declarations.swift:131:7:131:7 | { ... } | BraceStmt | file://:0:0:0:0 | call to ... | CallExpr |
| declarations.swift:131:7:131:7 | { ... } | BraceStmt | file://:0:0:0:0 | call to didSet | CallExpr |
| declarations.swift:131:7:131:7 | { ... } | BraceStmt | file://:0:0:0:0 | call to willSet | CallExpr |
| declarations.swift:131:7:131:7 | { ... } | BraceStmt | file://:0:0:0:0 | return ... | ReturnStmt |
| declarations.swift:131:7:131:17 | ... as ... | TypedPattern | declarations.swift:131:7:131:7 | hasBoth | NamedPattern |
| declarations.swift:131:7:131:17 | ... as ... | TypedPattern | declarations.swift:131:17:131:17 | Int | TypeRepr |
@@ -327,9 +325,8 @@
| declarations.swift:139:3:141:3 | id() | ConcreteFuncDecl | declarations.swift:139:20:141:3 | { ... } | BraceStmt |
| declarations.swift:139:20:141:3 | { ... } | BraceStmt | declarations.swift:140:5:140:12 | return ... | ReturnStmt |
| declarations.swift:140:5:140:12 | return ... | ReturnStmt | declarations.swift:140:12:140:12 | self | DeclRefExpr |
| declarations.swift:144:1:144:4 | call to id() | DotSyntaxCallExpr | declarations.swift:144:4:144:4 | id() | DeclRefExpr |
| declarations.swift:144:1:144:7 | call to ... | CallExpr | declarations.swift:144:1:144:4 | call to id() | DotSyntaxCallExpr |
| declarations.swift:144:1:144:7 | { ... } | BraceStmt | declarations.swift:144:1:144:7 | call to ... | CallExpr |
| declarations.swift:144:1:144:7 | call to id() | CallExpr | declarations.swift:144:1:144:4 | .id() | MethodRefExpr |
| declarations.swift:144:1:144:7 | { ... } | BraceStmt | declarations.swift:144:1:144:7 | call to id() | CallExpr |
| declarations.swift:144:1:144:7 | { ... } | TopLevelCodeDecl | declarations.swift:144:1:144:7 | { ... } | BraceStmt |
| expressions.swift:1:1:1:9 | var ... = ... | PatternBindingDecl | expressions.swift:1:5:1:5 | a | NamedPattern |
| expressions.swift:1:1:1:9 | var ... = ... | PatternBindingDecl | expressions.swift:1:9:1:9 | 15 | IntegerLiteralExpr |
@@ -364,19 +361,16 @@
| expressions.swift:7:10:7:10 | "..." | InterpolatedStringLiteralExpr | file://:0:0:0:0 | 6 | IntegerLiteralExpr |
| expressions.swift:7:10:7:10 | TapExpr | TapExpr | expressions.swift:7:10:7:10 | OpaqueValueExpr | OpaqueValueExpr |
| expressions.swift:7:10:7:10 | TapExpr | TapExpr | expressions.swift:7:10:7:10 | { ... } | BraceStmt |
| expressions.swift:7:10:7:10 | { ... } | BraceStmt | expressions.swift:7:11:7:10 | call to ... | CallExpr |
| expressions.swift:7:10:7:10 | { ... } | BraceStmt | expressions.swift:7:18:7:20 | call to ... | CallExpr |
| expressions.swift:7:10:7:10 | { ... } | BraceStmt | expressions.swift:7:21:7:21 | call to ... | CallExpr |
| expressions.swift:7:10:7:10 | { ... } | BraceStmt | expressions.swift:7:11:7:10 | call to appendLiteral(_:) | CallExpr |
| expressions.swift:7:10:7:10 | { ... } | BraceStmt | expressions.swift:7:18:7:20 | call to appendInterpolation(_:) | CallExpr |
| expressions.swift:7:10:7:10 | { ... } | BraceStmt | expressions.swift:7:21:7:21 | call to appendLiteral(_:) | CallExpr |
| expressions.swift:7:10:7:10 | { ... } | BraceStmt | file://:0:0:0:0 | $interpolation | ConcreteVarDecl |
| expressions.swift:7:11:7:10 | call to ... | CallExpr | expressions.swift:7:11:7:11 | call to appendLiteral(_:) | DotSyntaxCallExpr |
| expressions.swift:7:11:7:10 | call to appendLiteral(_:) | CallExpr | expressions.swift:7:11:7:11 | .appendLiteral(_:) | MethodRefExpr |
| expressions.swift:7:11:7:11 | &... | InOutExpr | expressions.swift:7:11:7:11 | $interpolation | DeclRefExpr |
| expressions.swift:7:11:7:11 | call to appendLiteral(_:) | DotSyntaxCallExpr | file://:0:0:0:0 | appendLiteral(_:) | DeclRefExpr |
| expressions.swift:7:18:7:18 | &... | InOutExpr | expressions.swift:7:18:7:18 | $interpolation | DeclRefExpr |
| expressions.swift:7:18:7:18 | call to appendInterpolation(_:) | DotSyntaxCallExpr | expressions.swift:7:18:7:18 | appendInterpolation(_:) | DeclRefExpr |
| expressions.swift:7:18:7:20 | call to ... | CallExpr | expressions.swift:7:18:7:18 | call to appendInterpolation(_:) | DotSyntaxCallExpr |
| expressions.swift:7:18:7:20 | call to appendInterpolation(_:) | CallExpr | expressions.swift:7:18:7:18 | .appendInterpolation(_:) | MethodRefExpr |
| expressions.swift:7:21:7:21 | &... | InOutExpr | expressions.swift:7:21:7:21 | $interpolation | DeclRefExpr |
| expressions.swift:7:21:7:21 | call to ... | CallExpr | expressions.swift:7:21:7:21 | call to appendLiteral(_:) | DotSyntaxCallExpr |
| expressions.swift:7:21:7:21 | call to appendLiteral(_:) | DotSyntaxCallExpr | file://:0:0:0:0 | appendLiteral(_:) | DeclRefExpr |
| expressions.swift:7:21:7:21 | call to appendLiteral(_:) | CallExpr | expressions.swift:7:21:7:21 | .appendLiteral(_:) | MethodRefExpr |
| expressions.swift:8:1:8:15 | var ... = ... | PatternBindingDecl | expressions.swift:8:5:8:11 | ... as ... | TypedPattern |
| expressions.swift:8:1:8:15 | var ... = ... | PatternBindingDecl | expressions.swift:8:15:8:15 | nil | NilLiteralExpr |
| expressions.swift:8:1:8:15 | { ... } | BraceStmt | expressions.swift:8:1:8:15 | var ... = ... | PatternBindingDecl |
@@ -389,14 +383,12 @@
| expressions.swift:14:31:18:1 | { ... } | BraceStmt | expressions.swift:15:3:17:3 | guard ... else { ... } | GuardStmt |
| expressions.swift:15:3:17:3 | guard ... else { ... } | GuardStmt | expressions.swift:15:9:15:14 | StmtCondition | StmtCondition |
| expressions.swift:15:3:17:3 | guard ... else { ... } | GuardStmt | expressions.swift:15:21:17:3 | { ... } | BraceStmt |
| expressions.swift:15:9:15:14 | ... call to !=(_:_:) ... | BinaryExpr | expressions.swift:15:11:15:11 | call to !=(_:_:) | DotSyntaxCallExpr |
| expressions.swift:15:9:15:14 | ... .!=(_:_:) ... | BinaryExpr | expressions.swift:15:11:15:11 | .!=(_:_:) | MethodRefExpr |
| expressions.swift:15:11:15:11 | Int.Type | TypeExpr | expressions.swift:15:11:15:11 | Int | TypeRepr |
| expressions.swift:15:11:15:11 | call to !=(_:_:) | DotSyntaxCallExpr | expressions.swift:15:11:15:11 | !=(_:_:) | DeclRefExpr |
| expressions.swift:15:21:17:3 | { ... } | BraceStmt | expressions.swift:16:5:16:19 | throw ... | ThrowStmt |
| expressions.swift:16:5:16:19 | throw ... | ThrowStmt | expressions.swift:16:11:16:19 | (Error) ... | ErasureExpr |
| expressions.swift:16:11:16:11 | AnError.Type | TypeExpr | expressions.swift:16:11:16:11 | AnError | TypeRepr |
| expressions.swift:16:11:16:19 | (Error) ... | ErasureExpr | expressions.swift:16:11:16:19 | call to ... | DotSyntaxCallExpr |
| expressions.swift:16:11:16:19 | call to ... | DotSyntaxCallExpr | expressions.swift:16:19:16:19 | failed | DeclRefExpr |
| expressions.swift:16:11:16:19 | (Error) ... | ErasureExpr | expressions.swift:16:11:16:19 | .failed | MethodRefExpr |
| expressions.swift:20:1:20:16 | try! ... | ForceTryExpr | expressions.swift:20:6:20:16 | call to failure(_:) | CallExpr |
| expressions.swift:20:1:20:16 | { ... } | BraceStmt | expressions.swift:20:1:20:16 | try! ... | ForceTryExpr |
| expressions.swift:20:1:20:16 | { ... } | TopLevelCodeDecl | expressions.swift:20:1:20:16 | { ... } | BraceStmt |
@@ -410,12 +402,12 @@
| expressions.swift:24:3:24:11 | init | ConstructorDecl | expressions.swift:24:10:24:11 | { ... } | BraceStmt |
| expressions.swift:24:10:24:11 | { ... } | BraceStmt | expressions.swift:24:11:24:11 | return | ReturnStmt |
| expressions.swift:27:1:27:19 | var ... = ... | PatternBindingDecl | expressions.swift:27:5:27:5 | klass | NamedPattern |
| expressions.swift:27:1:27:19 | var ... = ... | PatternBindingDecl | expressions.swift:27:13:27:19 | call to ... | CallExpr |
| expressions.swift:27:1:27:19 | var ... = ... | PatternBindingDecl | expressions.swift:27:13:27:19 | call to init | CallExpr |
| expressions.swift:27:1:27:19 | { ... } | BraceStmt | expressions.swift:27:1:27:19 | var ... = ... | PatternBindingDecl |
| expressions.swift:27:1:27:19 | { ... } | TopLevelCodeDecl | expressions.swift:27:1:27:19 | { ... } | BraceStmt |
| expressions.swift:27:13:27:13 | Klass.Type | TypeExpr | expressions.swift:27:13:27:13 | Klass | TypeRepr |
| expressions.swift:27:13:27:13 | call to init | ConstructorRefCallExpr | expressions.swift:27:13:27:13 | init | DeclRefExpr |
| expressions.swift:27:13:27:19 | call to ... | CallExpr | expressions.swift:27:13:27:13 | call to init | ConstructorRefCallExpr |
| expressions.swift:27:13:27:19 | call to init | CallExpr | expressions.swift:27:13:27:13 | call to init | ConstructorRefCallExpr |
| expressions.swift:29:1:29:19 | var ... = ... | PatternBindingDecl | expressions.swift:29:5:29:5 | d | NamedPattern |
| expressions.swift:29:1:29:19 | var ... = ... | PatternBindingDecl | expressions.swift:29:9:29:19 | [...] | DictionaryExpr |
| expressions.swift:29:1:29:19 | { ... } | BraceStmt | expressions.swift:29:1:29:19 | var ... = ... | PatternBindingDecl |
@@ -465,10 +457,9 @@
| expressions.swift:41:10:43:1 | { ... } | ClosureExpr | expressions.swift:41:10:43:1 | { ... } | BraceStmt |
| expressions.swift:41:10:43:1 | { ... } | ClosureExpr | expressions.swift:41:13:41:16 | x | ParamDecl |
| expressions.swift:41:10:43:1 | { ... } | ClosureExpr | expressions.swift:41:21:41:24 | y | ParamDecl |
| expressions.swift:42:5:42:16 | return ... | ReturnStmt | expressions.swift:42:12:42:16 | ... call to +(_:_:) ... | BinaryExpr |
| expressions.swift:42:12:42:16 | ... call to +(_:_:) ... | BinaryExpr | expressions.swift:42:14:42:14 | call to +(_:_:) | DotSyntaxCallExpr |
| expressions.swift:42:5:42:16 | return ... | ReturnStmt | expressions.swift:42:12:42:16 | ... .+(_:_:) ... | BinaryExpr |
| expressions.swift:42:12:42:16 | ... .+(_:_:) ... | BinaryExpr | expressions.swift:42:14:42:14 | .+(_:_:) | MethodRefExpr |
| expressions.swift:42:14:42:14 | Int.Type | TypeExpr | expressions.swift:42:14:42:14 | Int | TypeRepr |
| expressions.swift:42:14:42:14 | call to +(_:_:) | DotSyntaxCallExpr | expressions.swift:42:14:42:14 | +(_:_:) | DeclRefExpr |
| expressions.swift:44:1:46:1 | call to closured(closure:) | CallExpr | expressions.swift:44:1:44:1 | closured(closure:) | DeclRefExpr |
| expressions.swift:44:1:46:1 | { ... } | BraceStmt | expressions.swift:44:1:46:1 | call to closured(closure:) | CallExpr |
| expressions.swift:44:1:46:1 | { ... } | TopLevelCodeDecl | expressions.swift:44:1:46:1 | { ... } | BraceStmt |
@@ -476,10 +467,9 @@
| expressions.swift:44:10:46:1 | { ... } | ClosureExpr | expressions.swift:44:10:46:1 | { ... } | BraceStmt |
| expressions.swift:44:10:46:1 | { ... } | ClosureExpr | expressions.swift:44:12:44:12 | x | ParamDecl |
| expressions.swift:44:10:46:1 | { ... } | ClosureExpr | expressions.swift:44:15:44:15 | y | ParamDecl |
| expressions.swift:45:5:45:16 | return ... | ReturnStmt | expressions.swift:45:12:45:16 | ... call to +(_:_:) ... | BinaryExpr |
| expressions.swift:45:12:45:16 | ... call to +(_:_:) ... | BinaryExpr | expressions.swift:45:14:45:14 | call to +(_:_:) | DotSyntaxCallExpr |
| expressions.swift:45:5:45:16 | return ... | ReturnStmt | expressions.swift:45:12:45:16 | ... .+(_:_:) ... | BinaryExpr |
| expressions.swift:45:12:45:16 | ... .+(_:_:) ... | BinaryExpr | expressions.swift:45:14:45:14 | .+(_:_:) | MethodRefExpr |
| expressions.swift:45:14:45:14 | Int.Type | TypeExpr | expressions.swift:45:14:45:14 | Int | TypeRepr |
| expressions.swift:45:14:45:14 | call to +(_:_:) | DotSyntaxCallExpr | expressions.swift:45:14:45:14 | +(_:_:) | DeclRefExpr |
| expressions.swift:47:1:47:27 | call to closured(closure:) | CallExpr | expressions.swift:47:1:47:1 | closured(closure:) | DeclRefExpr |
| expressions.swift:47:1:47:27 | { ... } | BraceStmt | expressions.swift:47:1:47:27 | call to closured(closure:) | CallExpr |
| expressions.swift:47:1:47:27 | { ... } | TopLevelCodeDecl | expressions.swift:47:1:47:27 | { ... } | BraceStmt |
@@ -487,10 +477,9 @@
| expressions.swift:47:10:47:27 | { ... } | ClosureExpr | expressions.swift:47:10:47:10 | $0 | ParamDecl |
| expressions.swift:47:10:47:27 | { ... } | ClosureExpr | expressions.swift:47:10:47:10 | $1 | ParamDecl |
| expressions.swift:47:10:47:27 | { ... } | ClosureExpr | expressions.swift:47:10:47:27 | { ... } | BraceStmt |
| expressions.swift:47:12:47:24 | return ... | ReturnStmt | expressions.swift:47:19:47:24 | ... call to +(_:_:) ... | BinaryExpr |
| expressions.swift:47:19:47:24 | ... call to +(_:_:) ... | BinaryExpr | expressions.swift:47:22:47:22 | call to +(_:_:) | DotSyntaxCallExpr |
| expressions.swift:47:12:47:24 | return ... | ReturnStmt | expressions.swift:47:19:47:24 | ... .+(_:_:) ... | BinaryExpr |
| expressions.swift:47:19:47:24 | ... .+(_:_:) ... | BinaryExpr | expressions.swift:47:22:47:22 | .+(_:_:) | MethodRefExpr |
| expressions.swift:47:22:47:22 | Int.Type | TypeExpr | expressions.swift:47:22:47:22 | Int | TypeRepr |
| expressions.swift:47:22:47:22 | call to +(_:_:) | DotSyntaxCallExpr | expressions.swift:47:22:47:22 | +(_:_:) | DeclRefExpr |
| expressions.swift:48:1:48:20 | call to closured(closure:) | CallExpr | expressions.swift:48:1:48:1 | closured(closure:) | DeclRefExpr |
| expressions.swift:48:1:48:20 | { ... } | BraceStmt | expressions.swift:48:1:48:20 | call to closured(closure:) | CallExpr |
| expressions.swift:48:1:48:20 | { ... } | TopLevelCodeDecl | expressions.swift:48:1:48:20 | { ... } | BraceStmt |
@@ -498,10 +487,9 @@
| expressions.swift:48:10:48:20 | { ... } | ClosureExpr | expressions.swift:48:10:48:10 | $0 | ParamDecl |
| expressions.swift:48:10:48:20 | { ... } | ClosureExpr | expressions.swift:48:10:48:10 | $1 | ParamDecl |
| expressions.swift:48:10:48:20 | { ... } | ClosureExpr | expressions.swift:48:10:48:20 | { ... } | BraceStmt |
| expressions.swift:48:12:48:17 | ... call to +(_:_:) ... | BinaryExpr | expressions.swift:48:15:48:15 | call to +(_:_:) | DotSyntaxCallExpr |
| expressions.swift:48:12:48:17 | return ... | ReturnStmt | expressions.swift:48:12:48:17 | ... call to +(_:_:) ... | BinaryExpr |
| expressions.swift:48:12:48:17 | ... .+(_:_:) ... | BinaryExpr | expressions.swift:48:15:48:15 | .+(_:_:) | MethodRefExpr |
| expressions.swift:48:12:48:17 | return ... | ReturnStmt | expressions.swift:48:12:48:17 | ... .+(_:_:) ... | BinaryExpr |
| expressions.swift:48:15:48:15 | Int.Type | TypeExpr | expressions.swift:48:15:48:15 | Int | TypeRepr |
| expressions.swift:48:15:48:15 | call to +(_:_:) | DotSyntaxCallExpr | expressions.swift:48:15:48:15 | +(_:_:) | DeclRefExpr |
| expressions.swift:50:8:50:8 | init | ConstructorDecl | expressions.swift:50:8:50:8 | x | ParamDecl |
| expressions.swift:51:3:51:10 | var ... = ... | PatternBindingDecl | expressions.swift:51:7:51:10 | ... as ... | TypedPattern |
| expressions.swift:51:7:51:7 | get | AccessorDecl | expressions.swift:51:7:51:7 | { ... } | BraceStmt |
@@ -542,9 +530,8 @@
| expressions.swift:63:17:67:3 | { ... } | BraceStmt | expressions.swift:67:3:67:3 | return | ReturnStmt |
| expressions.swift:64:5:66:5 | if ... then { ... } | IfStmt | expressions.swift:64:8:64:12 | StmtCondition | StmtCondition |
| expressions.swift:64:5:66:5 | if ... then { ... } | IfStmt | expressions.swift:64:14:66:5 | { ... } | BraceStmt |
| expressions.swift:64:8:64:12 | ... call to <(_:_:) ... | BinaryExpr | expressions.swift:64:10:64:10 | call to <(_:_:) | DotSyntaxCallExpr |
| expressions.swift:64:8:64:12 | ... .<(_:_:) ... | BinaryExpr | expressions.swift:64:10:64:10 | .<(_:_:) | MethodRefExpr |
| expressions.swift:64:10:64:10 | Int.Type | TypeExpr | expressions.swift:64:10:64:10 | Int | TypeRepr |
| expressions.swift:64:10:64:10 | call to <(_:_:) | DotSyntaxCallExpr | expressions.swift:64:10:64:10 | <(_:_:) | DeclRefExpr |
| expressions.swift:64:14:66:5 | { ... } | BraceStmt | expressions.swift:65:7:65:14 | fail | FailStmt |
| expressions.swift:70:7:70:7 | deinit | DestructorDecl | expressions.swift:70:7:70:7 | { ... } | BraceStmt |
| expressions.swift:71:3:71:11 | var ... = ... | PatternBindingDecl | expressions.swift:71:7:71:11 | ... as ... | TypedPattern |
@@ -572,12 +559,12 @@
| expressions.swift:79:5:79:21 | self = ... | RebindSelfInConstructorExpr | expressions.swift:78:3:78:3 | self | ParamDecl |
| expressions.swift:79:5:79:21 | self = ... | RebindSelfInConstructorExpr | expressions.swift:79:5:79:21 | call to ... | CallExpr |
| expressions.swift:83:1:83:23 | var ... = ... | PatternBindingDecl | expressions.swift:83:5:83:5 | derived | NamedPattern |
| expressions.swift:83:1:83:23 | var ... = ... | PatternBindingDecl | expressions.swift:83:15:83:23 | call to ... | CallExpr |
| expressions.swift:83:1:83:23 | var ... = ... | PatternBindingDecl | expressions.swift:83:15:83:23 | call to init | CallExpr |
| expressions.swift:83:1:83:23 | { ... } | BraceStmt | expressions.swift:83:1:83:23 | var ... = ... | PatternBindingDecl |
| expressions.swift:83:1:83:23 | { ... } | TopLevelCodeDecl | expressions.swift:83:1:83:23 | { ... } | BraceStmt |
| expressions.swift:83:15:83:15 | Derived.Type | TypeExpr | expressions.swift:83:15:83:15 | Derived | TypeRepr |
| expressions.swift:83:15:83:15 | call to init | ConstructorRefCallExpr | expressions.swift:83:15:83:15 | init | DeclRefExpr |
| expressions.swift:83:15:83:23 | call to ... | CallExpr | expressions.swift:83:15:83:15 | call to init | ConstructorRefCallExpr |
| expressions.swift:83:15:83:23 | call to init | CallExpr | expressions.swift:83:15:83:15 | call to init | ConstructorRefCallExpr |
| expressions.swift:84:1:84:13 | ... = ... | AssignExpr | expressions.swift:84:1:84:1 | _ | DiscardAssignmentExpr |
| expressions.swift:84:1:84:13 | ... = ... | AssignExpr | expressions.swift:84:5:84:13 | .xx | MemberRefExpr |
| expressions.swift:84:1:84:13 | { ... } | BraceStmt | expressions.swift:84:1:84:13 | ... = ... | AssignExpr |
@@ -601,21 +588,18 @@
| expressions.swift:90:7:90:7 | init | ConstructorDecl | expressions.swift:90:7:90:7 | { ... } | BraceStmt |
| expressions.swift:90:7:90:7 | { ... } | BraceStmt | expressions.swift:90:7:90:7 | return | ReturnStmt |
| expressions.swift:92:1:92:55 | var ... = ... | PatternBindingDecl | expressions.swift:92:5:92:5 | opaque | NamedPattern |
| expressions.swift:92:1:92:55 | var ... = ... | PatternBindingDecl | expressions.swift:92:14:92:55 | call to ... | CallExpr |
| expressions.swift:92:1:92:55 | var ... = ... | PatternBindingDecl | expressions.swift:92:14:92:55 | call to toOpaque() | CallExpr |
| expressions.swift:92:1:92:55 | { ... } | BraceStmt | expressions.swift:92:1:92:55 | var ... = ... | PatternBindingDecl |
| expressions.swift:92:1:92:55 | { ... } | TopLevelCodeDecl | expressions.swift:92:1:92:55 | { ... } | BraceStmt |
| expressions.swift:92:14:92:14 | Unmanaged<ToPtr>.Type | TypeExpr | expressions.swift:92:14:92:14 | Unmanaged<ToPtr> | TypeRepr |
| expressions.swift:92:14:92:24 | call to passRetained(_:) | DotSyntaxCallExpr | expressions.swift:92:24:92:24 | passRetained(_:) | DeclRefExpr |
| expressions.swift:92:14:92:44 | call to ... | CallExpr | expressions.swift:92:14:92:24 | call to passRetained(_:) | DotSyntaxCallExpr |
| expressions.swift:92:14:92:46 | call to toOpaque() | DotSyntaxCallExpr | expressions.swift:92:46:92:46 | toOpaque() | DeclRefExpr |
| expressions.swift:92:14:92:55 | call to ... | CallExpr | expressions.swift:92:14:92:46 | call to toOpaque() | DotSyntaxCallExpr |
| expressions.swift:92:14:92:44 | call to passRetained(_:) | CallExpr | expressions.swift:92:14:92:24 | .passRetained(_:) | MethodRefExpr |
| expressions.swift:92:14:92:55 | call to toOpaque() | CallExpr | expressions.swift:92:14:92:46 | .toOpaque() | MethodRefExpr |
| expressions.swift:92:37:92:37 | ToPtr.Type | TypeExpr | expressions.swift:92:37:92:37 | ToPtr | TypeRepr |
| expressions.swift:92:37:92:37 | call to init | ConstructorRefCallExpr | expressions.swift:92:37:92:37 | init | DeclRefExpr |
| expressions.swift:92:37:92:43 | call to ... | CallExpr | expressions.swift:92:37:92:37 | call to init | ConstructorRefCallExpr |
| expressions.swift:92:37:92:43 | call to init | CallExpr | expressions.swift:92:37:92:37 | call to init | ConstructorRefCallExpr |
| expressions.swift:93:1:93:16 | Unmanaged<ToPtr>.Type | TypeExpr | expressions.swift:93:1:93:16 | Unmanaged<ToPtr> | TypeRepr |
| expressions.swift:93:1:93:18 | call to fromOpaque(_:) | DotSyntaxCallExpr | expressions.swift:93:18:93:18 | fromOpaque(_:) | DeclRefExpr |
| expressions.swift:93:1:93:35 | call to ... | CallExpr | expressions.swift:93:1:93:18 | call to fromOpaque(_:) | DotSyntaxCallExpr |
| expressions.swift:93:1:93:35 | { ... } | BraceStmt | expressions.swift:93:1:93:35 | call to ... | CallExpr |
| expressions.swift:93:1:93:35 | call to fromOpaque(_:) | CallExpr | expressions.swift:93:1:93:18 | .fromOpaque(_:) | MethodRefExpr |
| expressions.swift:93:1:93:35 | { ... } | BraceStmt | expressions.swift:93:1:93:35 | call to fromOpaque(_:) | CallExpr |
| expressions.swift:93:1:93:35 | { ... } | TopLevelCodeDecl | expressions.swift:93:1:93:35 | { ... } | BraceStmt |
| expressions.swift:93:29:93:29 | (UnsafeRawPointer) ... | PointerToPointerExpr | expressions.swift:93:29:93:29 | opaque | DeclRefExpr |
| expressions.swift:95:8:95:8 | init | ConstructorDecl | expressions.swift:95:8:95:8 | normalField | ParamDecl |
@@ -894,11 +878,10 @@
| patterns.swift:21:19:21:34 | baz | EnumElementDecl | patterns.swift:21:23:21:23 | _ | ParamDecl |
| patterns.swift:21:19:21:34 | baz | EnumElementDecl | patterns.swift:21:28:21:28 | _ | ParamDecl |
| patterns.swift:24:5:24:19 | var ... = ... | PatternBindingDecl | patterns.swift:24:9:24:12 | ... as ... | TypedPattern |
| patterns.swift:24:5:24:19 | var ... = ... | PatternBindingDecl | patterns.swift:24:18:24:19 | call to ... | DotSyntaxCallExpr |
| patterns.swift:24:5:24:19 | var ... = ... | PatternBindingDecl | patterns.swift:24:18:24:19 | .bar | MethodRefExpr |
| patterns.swift:24:9:24:12 | ... as ... | TypedPattern | patterns.swift:24:9:24:9 | v | NamedPattern |
| patterns.swift:24:9:24:12 | ... as ... | TypedPattern | patterns.swift:24:12:24:12 | Foo | TypeRepr |
| patterns.swift:24:18:24:18 | Foo.Type | TypeExpr | patterns.swift:24:18:24:18 | Foo | TypeRepr |
| patterns.swift:24:18:24:19 | call to ... | DotSyntaxCallExpr | patterns.swift:24:19:24:19 | bar | DeclRefExpr |
| patterns.swift:26:5:29:5 | switch v { ... } | SwitchStmt | patterns.swift:26:12:26:12 | v | DeclRefExpr |
| patterns.swift:26:5:29:5 | switch v { ... } | SwitchStmt | patterns.swift:27:5:27:16 | case ... | CaseStmt |
| patterns.swift:26:5:29:5 | switch v { ... } | SwitchStmt | patterns.swift:28:5:28:26 | case ... | CaseStmt |
@@ -979,52 +962,46 @@
| statements.swift:1:13:32:1 | { ... } | BraceStmt | statements.swift:19:3:23:3 | do { ... } catch { ... } | DoCatchStmt |
| statements.swift:1:13:32:1 | { ... } | BraceStmt | statements.swift:25:3:31:3 | do { ... } catch { ... } | DoCatchStmt |
| statements.swift:2:3:8:3 | for ... in ... { ... } | ForEachStmt | statements.swift:2:15:2:15 | i | NamedPattern |
| statements.swift:2:3:8:3 | for ... in ... { ... } | ForEachStmt | statements.swift:2:20:2:24 | ... call to ...(_:_:) ... | BinaryExpr |
| statements.swift:2:3:8:3 | for ... in ... { ... } | ForEachStmt | statements.swift:2:20:2:24 | ... ....(_:_:) ... | BinaryExpr |
| statements.swift:2:3:8:3 | for ... in ... { ... } | ForEachStmt | statements.swift:2:26:8:3 | { ... } | BraceStmt |
| statements.swift:2:20:2:24 | ... call to ...(_:_:) ... | BinaryExpr | statements.swift:2:21:2:21 | call to ...(_:_:) | DotSyntaxCallExpr |
| statements.swift:2:20:2:24 | ... ....(_:_:) ... | BinaryExpr | statements.swift:2:21:2:21 | ....(_:_:) | MethodRefExpr |
| statements.swift:2:21:2:21 | Int.Type | TypeExpr | statements.swift:2:21:2:21 | Int | TypeRepr |
| statements.swift:2:21:2:21 | call to ...(_:_:) | DotSyntaxCallExpr | statements.swift:2:21:2:21 | ...(_:_:) | DeclRefExpr |
| statements.swift:2:26:8:3 | { ... } | BraceStmt | statements.swift:3:5:7:5 | if ... then { ... } else { ... } | IfStmt |
| statements.swift:3:5:7:5 | if ... then { ... } else { ... } | IfStmt | statements.swift:3:8:3:13 | StmtCondition | StmtCondition |
| statements.swift:3:5:7:5 | if ... then { ... } else { ... } | IfStmt | statements.swift:3:15:5:5 | { ... } | BraceStmt |
| statements.swift:3:5:7:5 | if ... then { ... } else { ... } | IfStmt | statements.swift:5:12:7:5 | { ... } | BraceStmt |
| statements.swift:3:8:3:13 | ... call to ==(_:_:) ... | BinaryExpr | statements.swift:3:10:3:10 | call to ==(_:_:) | DotSyntaxCallExpr |
| statements.swift:3:8:3:13 | ... .==(_:_:) ... | BinaryExpr | statements.swift:3:10:3:10 | .==(_:_:) | MethodRefExpr |
| statements.swift:3:10:3:10 | Int.Type | TypeExpr | statements.swift:3:10:3:10 | Int | TypeRepr |
| statements.swift:3:10:3:10 | call to ==(_:_:) | DotSyntaxCallExpr | statements.swift:3:10:3:10 | ==(_:_:) | DeclRefExpr |
| statements.swift:3:15:5:5 | { ... } | BraceStmt | statements.swift:4:9:4:9 | break | BreakStmt |
| statements.swift:5:12:7:5 | { ... } | BraceStmt | statements.swift:6:9:6:9 | continue | ContinueStmt |
| statements.swift:9:3:9:11 | var ... = ... | PatternBindingDecl | statements.swift:9:7:9:7 | i | NamedPattern |
| statements.swift:9:3:9:11 | var ... = ... | PatternBindingDecl | statements.swift:9:11:9:11 | 0 | IntegerLiteralExpr |
| statements.swift:10:3:12:3 | while ... { ... } | WhileStmt | statements.swift:10:17:10:24 | StmtCondition | StmtCondition |
| statements.swift:10:3:12:3 | while ... { ... } | WhileStmt | statements.swift:10:26:12:3 | { ... } | BraceStmt |
| statements.swift:10:17:10:24 | (...) | ParenExpr | statements.swift:10:18:10:22 | ... call to <(_:_:) ... | BinaryExpr |
| statements.swift:10:17:10:24 | (...) | ParenExpr | statements.swift:10:18:10:22 | ... .<(_:_:) ... | BinaryExpr |
| statements.swift:10:18:10:18 | (Int) ... | LoadExpr | statements.swift:10:18:10:18 | i | DeclRefExpr |
| statements.swift:10:18:10:22 | ... call to <(_:_:) ... | BinaryExpr | statements.swift:10:20:10:20 | call to <(_:_:) | DotSyntaxCallExpr |
| statements.swift:10:18:10:22 | ... .<(_:_:) ... | BinaryExpr | statements.swift:10:20:10:20 | .<(_:_:) | MethodRefExpr |
| statements.swift:10:20:10:20 | Int.Type | TypeExpr | statements.swift:10:20:10:20 | Int | TypeRepr |
| statements.swift:10:20:10:20 | call to <(_:_:) | DotSyntaxCallExpr | statements.swift:10:20:10:20 | <(_:_:) | DeclRefExpr |
| statements.swift:10:26:12:3 | { ... } | BraceStmt | statements.swift:11:5:11:13 | ... = ... | AssignExpr |
| statements.swift:11:5:11:13 | ... = ... | AssignExpr | statements.swift:11:5:11:5 | i | DeclRefExpr |
| statements.swift:11:5:11:13 | ... = ... | AssignExpr | statements.swift:11:9:11:13 | ... call to +(_:_:) ... | BinaryExpr |
| statements.swift:11:5:11:13 | ... = ... | AssignExpr | statements.swift:11:9:11:13 | ... .+(_:_:) ... | BinaryExpr |
| statements.swift:11:9:11:9 | (Int) ... | LoadExpr | statements.swift:11:9:11:9 | i | DeclRefExpr |
| statements.swift:11:9:11:13 | ... call to +(_:_:) ... | BinaryExpr | statements.swift:11:11:11:11 | call to +(_:_:) | DotSyntaxCallExpr |
| statements.swift:11:9:11:13 | ... .+(_:_:) ... | BinaryExpr | statements.swift:11:11:11:11 | .+(_:_:) | MethodRefExpr |
| statements.swift:11:11:11:11 | Int.Type | TypeExpr | statements.swift:11:11:11:11 | Int | TypeRepr |
| statements.swift:11:11:11:11 | call to +(_:_:) | DotSyntaxCallExpr | statements.swift:11:11:11:11 | +(_:_:) | DeclRefExpr |
| statements.swift:14:3:14:7 | ... = ... | AssignExpr | statements.swift:14:3:14:3 | i | DeclRefExpr |
| statements.swift:14:3:14:7 | ... = ... | AssignExpr | statements.swift:14:7:14:7 | 0 | IntegerLiteralExpr |
| statements.swift:15:3:17:18 | repeat { ... } while ... | RepeatWhileStmt | statements.swift:15:18:17:3 | { ... } | BraceStmt |
| statements.swift:15:3:17:18 | repeat { ... } while ... | RepeatWhileStmt | statements.swift:17:11:17:18 | (...) | ParenExpr |
| statements.swift:15:18:17:3 | { ... } | BraceStmt | statements.swift:16:5:16:13 | ... = ... | AssignExpr |
| statements.swift:16:5:16:13 | ... = ... | AssignExpr | statements.swift:16:5:16:5 | i | DeclRefExpr |
| statements.swift:16:5:16:13 | ... = ... | AssignExpr | statements.swift:16:9:16:13 | ... call to +(_:_:) ... | BinaryExpr |
| statements.swift:16:5:16:13 | ... = ... | AssignExpr | statements.swift:16:9:16:13 | ... .+(_:_:) ... | BinaryExpr |
| statements.swift:16:9:16:9 | (Int) ... | LoadExpr | statements.swift:16:9:16:9 | i | DeclRefExpr |
| statements.swift:16:9:16:13 | ... call to +(_:_:) ... | BinaryExpr | statements.swift:16:11:16:11 | call to +(_:_:) | DotSyntaxCallExpr |
| statements.swift:16:9:16:13 | ... .+(_:_:) ... | BinaryExpr | statements.swift:16:11:16:11 | .+(_:_:) | MethodRefExpr |
| statements.swift:16:11:16:11 | Int.Type | TypeExpr | statements.swift:16:11:16:11 | Int | TypeRepr |
| statements.swift:16:11:16:11 | call to +(_:_:) | DotSyntaxCallExpr | statements.swift:16:11:16:11 | +(_:_:) | DeclRefExpr |
| statements.swift:17:11:17:18 | (...) | ParenExpr | statements.swift:17:12:17:16 | ... call to <(_:_:) ... | BinaryExpr |
| statements.swift:17:11:17:18 | (...) | ParenExpr | statements.swift:17:12:17:16 | ... .<(_:_:) ... | BinaryExpr |
| statements.swift:17:12:17:12 | (Int) ... | LoadExpr | statements.swift:17:12:17:12 | i | DeclRefExpr |
| statements.swift:17:12:17:16 | ... call to <(_:_:) ... | BinaryExpr | statements.swift:17:14:17:14 | call to <(_:_:) | DotSyntaxCallExpr |
| statements.swift:17:12:17:16 | ... .<(_:_:) ... | BinaryExpr | statements.swift:17:14:17:14 | .<(_:_:) | MethodRefExpr |
| statements.swift:17:14:17:14 | Int.Type | TypeExpr | statements.swift:17:14:17:14 | Int | TypeRepr |
| statements.swift:17:14:17:14 | call to <(_:_:) | DotSyntaxCallExpr | statements.swift:17:14:17:14 | <(_:_:) | DeclRefExpr |
| statements.swift:19:3:23:3 | do { ... } catch { ... } | DoCatchStmt | statements.swift:19:6:21:3 | { ... } | BraceStmt |
| statements.swift:19:3:23:3 | do { ... } catch { ... } | DoCatchStmt | statements.swift:21:5:23:3 | case ... | CaseStmt |
| statements.swift:19:6:21:3 | { ... } | BraceStmt | statements.swift:20:5:20:19 | try ... | TryExpr |
@@ -1069,14 +1046,12 @@
| statements.swift:38:31:42:1 | { ... } | BraceStmt | statements.swift:39:3:41:3 | guard ... else { ... } | GuardStmt |
| statements.swift:39:3:41:3 | guard ... else { ... } | GuardStmt | statements.swift:39:9:39:14 | StmtCondition | StmtCondition |
| statements.swift:39:3:41:3 | guard ... else { ... } | GuardStmt | statements.swift:39:21:41:3 | { ... } | BraceStmt |
| statements.swift:39:9:39:14 | ... call to !=(_:_:) ... | BinaryExpr | statements.swift:39:11:39:11 | call to !=(_:_:) | DotSyntaxCallExpr |
| statements.swift:39:9:39:14 | ... .!=(_:_:) ... | BinaryExpr | statements.swift:39:11:39:11 | .!=(_:_:) | MethodRefExpr |
| statements.swift:39:11:39:11 | Int.Type | TypeExpr | statements.swift:39:11:39:11 | Int | TypeRepr |
| statements.swift:39:11:39:11 | call to !=(_:_:) | DotSyntaxCallExpr | statements.swift:39:11:39:11 | !=(_:_:) | DeclRefExpr |
| statements.swift:39:21:41:3 | { ... } | BraceStmt | statements.swift:40:5:40:19 | throw ... | ThrowStmt |
| statements.swift:40:5:40:19 | throw ... | ThrowStmt | statements.swift:40:11:40:19 | (Error) ... | ErasureExpr |
| statements.swift:40:11:40:11 | AnError.Type | TypeExpr | statements.swift:40:11:40:11 | AnError | TypeRepr |
| statements.swift:40:11:40:19 | (Error) ... | ErasureExpr | statements.swift:40:11:40:19 | call to ... | DotSyntaxCallExpr |
| statements.swift:40:11:40:19 | call to ... | DotSyntaxCallExpr | statements.swift:40:19:40:19 | failed | DeclRefExpr |
| statements.swift:40:11:40:19 | (Error) ... | ErasureExpr | statements.swift:40:11:40:19 | .failed | MethodRefExpr |
| statements.swift:44:1:46:1 | defer { ... } | DeferStmt | statements.swift:44:7:46:1 | { ... } | BraceStmt |
| statements.swift:44:1:46:1 | { ... } | BraceStmt | statements.swift:44:1:46:1 | defer { ... } | DeferStmt |
| statements.swift:44:1:46:1 | { ... } | TopLevelCodeDecl | statements.swift:44:1:46:1 | { ... } | BraceStmt |
@@ -1162,16 +1137,14 @@
| statements.swift:70:15:70:23 | [...] | ArrayExpr | statements.swift:70:22:70:22 | 3 | IntegerLiteralExpr |
| statements.swift:71:1:72:1 | for ... in ... where ... { ... } | ForEachStmt | statements.swift:71:5:71:5 | number | NamedPattern |
| statements.swift:71:1:72:1 | for ... in ... where ... { ... } | ForEachStmt | statements.swift:71:15:71:15 | numbers | DeclRefExpr |
| statements.swift:71:1:72:1 | for ... in ... where ... { ... } | ForEachStmt | statements.swift:71:29:71:43 | ... call to ==(_:_:) ... | BinaryExpr |
| statements.swift:71:1:72:1 | for ... in ... where ... { ... } | ForEachStmt | statements.swift:71:29:71:43 | ... .==(_:_:) ... | BinaryExpr |
| statements.swift:71:1:72:1 | for ... in ... where ... { ... } | ForEachStmt | statements.swift:71:45:72:1 | { ... } | BraceStmt |
| statements.swift:71:1:72:1 | { ... } | BraceStmt | statements.swift:71:1:72:1 | for ... in ... where ... { ... } | ForEachStmt |
| statements.swift:71:1:72:1 | { ... } | TopLevelCodeDecl | statements.swift:71:1:72:1 | { ... } | BraceStmt |
| statements.swift:71:29:71:38 | ... call to %(_:_:) ... | BinaryExpr | statements.swift:71:36:71:36 | call to %(_:_:) | DotSyntaxCallExpr |
| statements.swift:71:29:71:43 | ... call to ==(_:_:) ... | BinaryExpr | statements.swift:71:40:71:40 | call to ==(_:_:) | DotSyntaxCallExpr |
| statements.swift:71:29:71:38 | ... .%(_:_:) ... | BinaryExpr | statements.swift:71:36:71:36 | .%(_:_:) | MethodRefExpr |
| statements.swift:71:29:71:43 | ... .==(_:_:) ... | BinaryExpr | statements.swift:71:40:71:40 | .==(_:_:) | MethodRefExpr |
| statements.swift:71:36:71:36 | Int.Type | TypeExpr | statements.swift:71:36:71:36 | Int | TypeRepr |
| statements.swift:71:36:71:36 | call to %(_:_:) | DotSyntaxCallExpr | statements.swift:71:36:71:36 | %(_:_:) | DeclRefExpr |
| statements.swift:71:40:71:40 | Int.Type | TypeExpr | statements.swift:71:40:71:40 | Int | TypeRepr |
| statements.swift:71:40:71:40 | call to ==(_:_:) | DotSyntaxCallExpr | statements.swift:71:40:71:40 | ==(_:_:) | DeclRefExpr |
| statements.swift:74:8:74:8 | init | ConstructorDecl | statements.swift:74:8:74:8 | x | ParamDecl |
| statements.swift:75:3:75:11 | var ... = ... | PatternBindingDecl | statements.swift:75:7:75:11 | ... as ... | TypedPattern |
| statements.swift:75:7:75:7 | (unnamed function decl) | AccessorDecl | statements.swift:75:7:75:7 | { ... } | BraceStmt |

View File

@@ -4,12 +4,12 @@ edges
| UnsafeWebViewFetch.swift:94:10:94:37 | try ... : | UnsafeWebViewFetch.swift:164:21:164:35 | call to getRemoteData() : |
| UnsafeWebViewFetch.swift:94:10:94:37 | try ... : | UnsafeWebViewFetch.swift:167:25:167:39 | call to getRemoteData() |
| UnsafeWebViewFetch.swift:94:10:94:37 | try ... : | UnsafeWebViewFetch.swift:206:17:206:31 | call to getRemoteData() : |
| UnsafeWebViewFetch.swift:94:14:94:37 | call to ... : | UnsafeWebViewFetch.swift:94:10:94:37 | try ... : |
| UnsafeWebViewFetch.swift:103:30:103:84 | call to ... : | UnsafeWebViewFetch.swift:103:25:103:84 | try! ... |
| UnsafeWebViewFetch.swift:105:18:105:72 | call to ... : | UnsafeWebViewFetch.swift:106:25:106:25 | data |
| UnsafeWebViewFetch.swift:109:30:109:53 | call to ... : | UnsafeWebViewFetch.swift:109:25:109:53 | try! ... |
| UnsafeWebViewFetch.swift:94:14:94:37 | call to init : | UnsafeWebViewFetch.swift:94:10:94:37 | try ... : |
| UnsafeWebViewFetch.swift:103:30:103:84 | call to init : | UnsafeWebViewFetch.swift:103:25:103:84 | try! ... |
| UnsafeWebViewFetch.swift:105:18:105:72 | call to init : | UnsafeWebViewFetch.swift:106:25:106:25 | data |
| UnsafeWebViewFetch.swift:109:30:109:53 | call to init : | UnsafeWebViewFetch.swift:109:25:109:53 | try! ... |
| UnsafeWebViewFetch.swift:117:21:117:35 | call to getRemoteData() : | UnsafeWebViewFetch.swift:121:25:121:25 | remoteString |
| UnsafeWebViewFetch.swift:117:21:117:35 | call to getRemoteData() : | UnsafeWebViewFetch.swift:124:25:124:51 | ... call to +(_:_:) ... |
| UnsafeWebViewFetch.swift:117:21:117:35 | call to getRemoteData() : | UnsafeWebViewFetch.swift:124:25:124:51 | ... .+(_:_:) ... |
| UnsafeWebViewFetch.swift:117:21:117:35 | call to getRemoteData() : | UnsafeWebViewFetch.swift:127:25:127:25 | "..." |
| UnsafeWebViewFetch.swift:117:21:117:35 | call to getRemoteData() : | UnsafeWebViewFetch.swift:135:25:135:25 | remoteString |
| UnsafeWebViewFetch.swift:117:21:117:35 | call to getRemoteData() : | UnsafeWebViewFetch.swift:137:25:137:25 | remoteString |
@@ -22,7 +22,7 @@ edges
| UnsafeWebViewFetch.swift:117:21:117:35 | call to getRemoteData() : | UnsafeWebViewFetch.swift:153:85:153:94 | ...! |
| UnsafeWebViewFetch.swift:117:21:117:35 | call to getRemoteData() : | UnsafeWebViewFetch.swift:154:86:154:95 | ...! |
| UnsafeWebViewFetch.swift:164:21:164:35 | call to getRemoteData() : | UnsafeWebViewFetch.swift:168:25:168:25 | remoteString |
| UnsafeWebViewFetch.swift:164:21:164:35 | call to getRemoteData() : | UnsafeWebViewFetch.swift:171:25:171:51 | ... call to +(_:_:) ... |
| UnsafeWebViewFetch.swift:164:21:164:35 | call to getRemoteData() : | UnsafeWebViewFetch.swift:171:25:171:51 | ... .+(_:_:) ... |
| UnsafeWebViewFetch.swift:164:21:164:35 | call to getRemoteData() : | UnsafeWebViewFetch.swift:174:25:174:25 | "..." |
| UnsafeWebViewFetch.swift:164:21:164:35 | call to getRemoteData() : | UnsafeWebViewFetch.swift:182:25:182:25 | remoteString |
| UnsafeWebViewFetch.swift:164:21:164:35 | call to getRemoteData() : | UnsafeWebViewFetch.swift:184:25:184:25 | remoteString |
@@ -38,17 +38,17 @@ edges
| UnsafeWebViewFetch.swift:206:17:206:31 | call to getRemoteData() : | UnsafeWebViewFetch.swift:211:25:211:25 | htmlData |
nodes
| UnsafeWebViewFetch.swift:94:10:94:37 | try ... : | semmle.label | try ... : |
| UnsafeWebViewFetch.swift:94:14:94:37 | call to ... : | semmle.label | call to ... : |
| UnsafeWebViewFetch.swift:94:14:94:37 | call to init : | semmle.label | call to init : |
| UnsafeWebViewFetch.swift:103:25:103:84 | try! ... | semmle.label | try! ... |
| UnsafeWebViewFetch.swift:103:30:103:84 | call to ... : | semmle.label | call to ... : |
| UnsafeWebViewFetch.swift:105:18:105:72 | call to ... : | semmle.label | call to ... : |
| UnsafeWebViewFetch.swift:103:30:103:84 | call to init : | semmle.label | call to init : |
| UnsafeWebViewFetch.swift:105:18:105:72 | call to init : | semmle.label | call to init : |
| UnsafeWebViewFetch.swift:106:25:106:25 | data | semmle.label | data |
| UnsafeWebViewFetch.swift:109:25:109:53 | try! ... | semmle.label | try! ... |
| UnsafeWebViewFetch.swift:109:30:109:53 | call to ... : | semmle.label | call to ... : |
| UnsafeWebViewFetch.swift:109:30:109:53 | call to init : | semmle.label | call to init : |
| UnsafeWebViewFetch.swift:117:21:117:35 | call to getRemoteData() : | semmle.label | call to getRemoteData() : |
| UnsafeWebViewFetch.swift:120:25:120:39 | call to getRemoteData() | semmle.label | call to getRemoteData() |
| UnsafeWebViewFetch.swift:121:25:121:25 | remoteString | semmle.label | remoteString |
| UnsafeWebViewFetch.swift:124:25:124:51 | ... call to +(_:_:) ... | semmle.label | ... call to +(_:_:) ... |
| UnsafeWebViewFetch.swift:124:25:124:51 | ... .+(_:_:) ... | semmle.label | ... .+(_:_:) ... |
| UnsafeWebViewFetch.swift:127:25:127:25 | "..." | semmle.label | "..." |
| UnsafeWebViewFetch.swift:135:25:135:25 | remoteString | semmle.label | remoteString |
| UnsafeWebViewFetch.swift:137:25:137:25 | remoteString | semmle.label | remoteString |
@@ -63,7 +63,7 @@ nodes
| UnsafeWebViewFetch.swift:164:21:164:35 | call to getRemoteData() : | semmle.label | call to getRemoteData() : |
| UnsafeWebViewFetch.swift:167:25:167:39 | call to getRemoteData() | semmle.label | call to getRemoteData() |
| UnsafeWebViewFetch.swift:168:25:168:25 | remoteString | semmle.label | remoteString |
| UnsafeWebViewFetch.swift:171:25:171:51 | ... call to +(_:_:) ... | semmle.label | ... call to +(_:_:) ... |
| UnsafeWebViewFetch.swift:171:25:171:51 | ... .+(_:_:) ... | semmle.label | ... .+(_:_:) ... |
| UnsafeWebViewFetch.swift:174:25:174:25 | "..." | semmle.label | "..." |
| UnsafeWebViewFetch.swift:182:25:182:25 | remoteString | semmle.label | remoteString |
| UnsafeWebViewFetch.swift:184:25:184:25 | remoteString | semmle.label | remoteString |
@@ -80,19 +80,19 @@ nodes
| UnsafeWebViewFetch.swift:211:25:211:25 | htmlData | semmle.label | htmlData |
subpaths
#select
| UnsafeWebViewFetch.swift:103:25:103:84 | try! ... | UnsafeWebViewFetch.swift:103:30:103:84 | call to ... : | UnsafeWebViewFetch.swift:103:25:103:84 | try! ... | Tainted data is used in a WebView fetch without restricting the base URL. |
| UnsafeWebViewFetch.swift:106:25:106:25 | data | UnsafeWebViewFetch.swift:105:18:105:72 | call to ... : | UnsafeWebViewFetch.swift:106:25:106:25 | data | Tainted data is used in a WebView fetch without restricting the base URL. |
| UnsafeWebViewFetch.swift:109:25:109:53 | try! ... | UnsafeWebViewFetch.swift:109:30:109:53 | call to ... : | UnsafeWebViewFetch.swift:109:25:109:53 | try! ... | Tainted data is used in a WebView fetch without restricting the base URL. |
| UnsafeWebViewFetch.swift:120:25:120:39 | call to getRemoteData() | UnsafeWebViewFetch.swift:94:14:94:37 | call to ... : | UnsafeWebViewFetch.swift:120:25:120:39 | call to getRemoteData() | Tainted data is used in a WebView fetch without restricting the base URL. |
| UnsafeWebViewFetch.swift:121:25:121:25 | remoteString | UnsafeWebViewFetch.swift:94:14:94:37 | call to ... : | UnsafeWebViewFetch.swift:121:25:121:25 | remoteString | Tainted data is used in a WebView fetch without restricting the base URL. |
| UnsafeWebViewFetch.swift:124:25:124:51 | ... call to +(_:_:) ... | UnsafeWebViewFetch.swift:94:14:94:37 | call to ... : | UnsafeWebViewFetch.swift:124:25:124:51 | ... call to +(_:_:) ... | Tainted data is used in a WebView fetch without restricting the base URL. |
| UnsafeWebViewFetch.swift:127:25:127:25 | "..." | UnsafeWebViewFetch.swift:94:14:94:37 | call to ... : | UnsafeWebViewFetch.swift:127:25:127:25 | "..." | Tainted data is used in a WebView fetch without restricting the base URL. |
| UnsafeWebViewFetch.swift:139:25:139:25 | remoteString | UnsafeWebViewFetch.swift:94:14:94:37 | call to ... : | UnsafeWebViewFetch.swift:139:25:139:25 | remoteString | Tainted data is used in a WebView fetch with a tainted base URL. |
| UnsafeWebViewFetch.swift:141:25:141:25 | remoteString | UnsafeWebViewFetch.swift:94:14:94:37 | call to ... : | UnsafeWebViewFetch.swift:141:25:141:25 | remoteString | Tainted data is used in a WebView fetch with a tainted base URL. |
| UnsafeWebViewFetch.swift:167:25:167:39 | call to getRemoteData() | UnsafeWebViewFetch.swift:94:14:94:37 | call to ... : | UnsafeWebViewFetch.swift:167:25:167:39 | call to getRemoteData() | Tainted data is used in a WebView fetch without restricting the base URL. |
| UnsafeWebViewFetch.swift:168:25:168:25 | remoteString | UnsafeWebViewFetch.swift:94:14:94:37 | call to ... : | UnsafeWebViewFetch.swift:168:25:168:25 | remoteString | Tainted data is used in a WebView fetch without restricting the base URL. |
| UnsafeWebViewFetch.swift:171:25:171:51 | ... call to +(_:_:) ... | UnsafeWebViewFetch.swift:94:14:94:37 | call to ... : | UnsafeWebViewFetch.swift:171:25:171:51 | ... call to +(_:_:) ... | Tainted data is used in a WebView fetch without restricting the base URL. |
| UnsafeWebViewFetch.swift:174:25:174:25 | "..." | UnsafeWebViewFetch.swift:94:14:94:37 | call to ... : | UnsafeWebViewFetch.swift:174:25:174:25 | "..." | Tainted data is used in a WebView fetch without restricting the base URL. |
| UnsafeWebViewFetch.swift:186:25:186:25 | remoteString | UnsafeWebViewFetch.swift:94:14:94:37 | call to ... : | UnsafeWebViewFetch.swift:186:25:186:25 | remoteString | Tainted data is used in a WebView fetch with a tainted base URL. |
| UnsafeWebViewFetch.swift:188:25:188:25 | remoteString | UnsafeWebViewFetch.swift:94:14:94:37 | call to ... : | UnsafeWebViewFetch.swift:188:25:188:25 | remoteString | Tainted data is used in a WebView fetch with a tainted base URL. |
| UnsafeWebViewFetch.swift:210:25:210:25 | htmlData | UnsafeWebViewFetch.swift:94:14:94:37 | call to ... : | UnsafeWebViewFetch.swift:210:25:210:25 | htmlData | Tainted data is used in a WebView fetch without restricting the base URL. |
| UnsafeWebViewFetch.swift:103:25:103:84 | try! ... | UnsafeWebViewFetch.swift:103:30:103:84 | call to init : | UnsafeWebViewFetch.swift:103:25:103:84 | try! ... | Tainted data is used in a WebView fetch without restricting the base URL. |
| UnsafeWebViewFetch.swift:106:25:106:25 | data | UnsafeWebViewFetch.swift:105:18:105:72 | call to init : | UnsafeWebViewFetch.swift:106:25:106:25 | data | Tainted data is used in a WebView fetch without restricting the base URL. |
| UnsafeWebViewFetch.swift:109:25:109:53 | try! ... | UnsafeWebViewFetch.swift:109:30:109:53 | call to init : | UnsafeWebViewFetch.swift:109:25:109:53 | try! ... | Tainted data is used in a WebView fetch without restricting the base URL. |
| UnsafeWebViewFetch.swift:120:25:120:39 | call to getRemoteData() | UnsafeWebViewFetch.swift:94:14:94:37 | call to init : | UnsafeWebViewFetch.swift:120:25:120:39 | call to getRemoteData() | Tainted data is used in a WebView fetch without restricting the base URL. |
| UnsafeWebViewFetch.swift:121:25:121:25 | remoteString | UnsafeWebViewFetch.swift:94:14:94:37 | call to init : | UnsafeWebViewFetch.swift:121:25:121:25 | remoteString | Tainted data is used in a WebView fetch without restricting the base URL. |
| UnsafeWebViewFetch.swift:124:25:124:51 | ... .+(_:_:) ... | UnsafeWebViewFetch.swift:94:14:94:37 | call to init : | UnsafeWebViewFetch.swift:124:25:124:51 | ... .+(_:_:) ... | Tainted data is used in a WebView fetch without restricting the base URL. |
| UnsafeWebViewFetch.swift:127:25:127:25 | "..." | UnsafeWebViewFetch.swift:94:14:94:37 | call to init : | UnsafeWebViewFetch.swift:127:25:127:25 | "..." | Tainted data is used in a WebView fetch without restricting the base URL. |
| UnsafeWebViewFetch.swift:139:25:139:25 | remoteString | UnsafeWebViewFetch.swift:94:14:94:37 | call to init : | UnsafeWebViewFetch.swift:139:25:139:25 | remoteString | Tainted data is used in a WebView fetch with a tainted base URL. |
| UnsafeWebViewFetch.swift:141:25:141:25 | remoteString | UnsafeWebViewFetch.swift:94:14:94:37 | call to init : | UnsafeWebViewFetch.swift:141:25:141:25 | remoteString | Tainted data is used in a WebView fetch with a tainted base URL. |
| UnsafeWebViewFetch.swift:167:25:167:39 | call to getRemoteData() | UnsafeWebViewFetch.swift:94:14:94:37 | call to init : | UnsafeWebViewFetch.swift:167:25:167:39 | call to getRemoteData() | Tainted data is used in a WebView fetch without restricting the base URL. |
| UnsafeWebViewFetch.swift:168:25:168:25 | remoteString | UnsafeWebViewFetch.swift:94:14:94:37 | call to init : | UnsafeWebViewFetch.swift:168:25:168:25 | remoteString | Tainted data is used in a WebView fetch without restricting the base URL. |
| UnsafeWebViewFetch.swift:171:25:171:51 | ... .+(_:_:) ... | UnsafeWebViewFetch.swift:94:14:94:37 | call to init : | UnsafeWebViewFetch.swift:171:25:171:51 | ... .+(_:_:) ... | Tainted data is used in a WebView fetch without restricting the base URL. |
| UnsafeWebViewFetch.swift:174:25:174:25 | "..." | UnsafeWebViewFetch.swift:94:14:94:37 | call to init : | UnsafeWebViewFetch.swift:174:25:174:25 | "..." | Tainted data is used in a WebView fetch without restricting the base URL. |
| UnsafeWebViewFetch.swift:186:25:186:25 | remoteString | UnsafeWebViewFetch.swift:94:14:94:37 | call to init : | UnsafeWebViewFetch.swift:186:25:186:25 | remoteString | Tainted data is used in a WebView fetch with a tainted base URL. |
| UnsafeWebViewFetch.swift:188:25:188:25 | remoteString | UnsafeWebViewFetch.swift:94:14:94:37 | call to init : | UnsafeWebViewFetch.swift:188:25:188:25 | remoteString | Tainted data is used in a WebView fetch with a tainted base URL. |
| UnsafeWebViewFetch.swift:210:25:210:25 | htmlData | UnsafeWebViewFetch.swift:94:14:94:37 | call to init : | UnsafeWebViewFetch.swift:210:25:210:25 | htmlData | Tainted data is used in a WebView fetch without restricting the base URL. |

View File

@@ -1,84 +1,84 @@
edges
| StringLengthConflation2.swift:37:34:37:36 | .count : | StringLengthConflation2.swift:37:34:37:44 | ... call to -(_:_:) ... |
| StringLengthConflation.swift:60:47:60:50 | .length : | StringLengthConflation.swift:60:47:60:59 | ... call to /(_:_:) ... |
| StringLengthConflation.swift:66:33:66:36 | .length : | StringLengthConflation.swift:66:33:66:45 | ... call to /(_:_:) ... |
| StringLengthConflation.swift:96:28:96:31 | .length : | StringLengthConflation.swift:96:28:96:40 | ... call to -(_:_:) ... |
| StringLengthConflation.swift:100:27:100:30 | .length : | StringLengthConflation.swift:100:27:100:39 | ... call to -(_:_:) ... |
| StringLengthConflation.swift:104:25:104:28 | .length : | StringLengthConflation.swift:104:25:104:37 | ... call to -(_:_:) ... |
| StringLengthConflation.swift:108:25:108:28 | .length : | StringLengthConflation.swift:108:25:108:37 | ... call to -(_:_:) ... |
| StringLengthConflation.swift:114:23:114:26 | .length : | StringLengthConflation.swift:114:23:114:35 | ... call to -(_:_:) ... |
| StringLengthConflation.swift:120:22:120:25 | .length : | StringLengthConflation.swift:120:22:120:34 | ... call to -(_:_:) ... |
| StringLengthConflation.swift:125:34:125:36 | .count : | StringLengthConflation.swift:125:34:125:44 | ... call to -(_:_:) ... |
| StringLengthConflation.swift:126:36:126:38 | .count : | StringLengthConflation.swift:126:36:126:46 | ... call to -(_:_:) ... |
| StringLengthConflation.swift:131:36:131:38 | .count : | StringLengthConflation.swift:131:36:131:46 | ... call to -(_:_:) ... |
| StringLengthConflation.swift:132:38:132:40 | .count : | StringLengthConflation.swift:132:38:132:48 | ... call to -(_:_:) ... |
| StringLengthConflation.swift:137:34:137:36 | .count : | StringLengthConflation.swift:137:34:137:44 | ... call to -(_:_:) ... |
| StringLengthConflation.swift:138:36:138:38 | .count : | StringLengthConflation.swift:138:36:138:46 | ... call to -(_:_:) ... |
| StringLengthConflation.swift:144:28:144:30 | .count : | StringLengthConflation.swift:144:28:144:38 | ... call to -(_:_:) ... |
| StringLengthConflation2.swift:37:34:37:36 | .count : | StringLengthConflation2.swift:37:34:37:44 | ... .-(_:_:) ... |
| StringLengthConflation.swift:60:47:60:50 | .length : | StringLengthConflation.swift:60:47:60:59 | ... ./(_:_:) ... |
| StringLengthConflation.swift:66:33:66:36 | .length : | StringLengthConflation.swift:66:33:66:45 | ... ./(_:_:) ... |
| StringLengthConflation.swift:96:28:96:31 | .length : | StringLengthConflation.swift:96:28:96:40 | ... .-(_:_:) ... |
| StringLengthConflation.swift:100:27:100:30 | .length : | StringLengthConflation.swift:100:27:100:39 | ... .-(_:_:) ... |
| StringLengthConflation.swift:104:25:104:28 | .length : | StringLengthConflation.swift:104:25:104:37 | ... .-(_:_:) ... |
| StringLengthConflation.swift:108:25:108:28 | .length : | StringLengthConflation.swift:108:25:108:37 | ... .-(_:_:) ... |
| StringLengthConflation.swift:114:23:114:26 | .length : | StringLengthConflation.swift:114:23:114:35 | ... .-(_:_:) ... |
| StringLengthConflation.swift:120:22:120:25 | .length : | StringLengthConflation.swift:120:22:120:34 | ... .-(_:_:) ... |
| StringLengthConflation.swift:125:34:125:36 | .count : | StringLengthConflation.swift:125:34:125:44 | ... .-(_:_:) ... |
| StringLengthConflation.swift:126:36:126:38 | .count : | StringLengthConflation.swift:126:36:126:46 | ... .-(_:_:) ... |
| StringLengthConflation.swift:131:36:131:38 | .count : | StringLengthConflation.swift:131:36:131:46 | ... .-(_:_:) ... |
| StringLengthConflation.swift:132:38:132:40 | .count : | StringLengthConflation.swift:132:38:132:48 | ... .-(_:_:) ... |
| StringLengthConflation.swift:137:34:137:36 | .count : | StringLengthConflation.swift:137:34:137:44 | ... .-(_:_:) ... |
| StringLengthConflation.swift:138:36:138:38 | .count : | StringLengthConflation.swift:138:36:138:46 | ... .-(_:_:) ... |
| StringLengthConflation.swift:144:28:144:30 | .count : | StringLengthConflation.swift:144:28:144:38 | ... .-(_:_:) ... |
nodes
| StringLengthConflation2.swift:37:34:37:36 | .count : | semmle.label | .count : |
| StringLengthConflation2.swift:37:34:37:44 | ... call to -(_:_:) ... | semmle.label | ... call to -(_:_:) ... |
| StringLengthConflation2.swift:37:34:37:44 | ... .-(_:_:) ... | semmle.label | ... .-(_:_:) ... |
| StringLengthConflation.swift:53:43:53:46 | .length | semmle.label | .length |
| StringLengthConflation.swift:54:43:54:50 | .count | semmle.label | .count |
| StringLengthConflation.swift:55:43:55:51 | .count | semmle.label | .count |
| StringLengthConflation.swift:56:43:56:60 | .count | semmle.label | .count |
| StringLengthConflation.swift:60:47:60:50 | .length : | semmle.label | .length : |
| StringLengthConflation.swift:60:47:60:59 | ... call to /(_:_:) ... | semmle.label | ... call to /(_:_:) ... |
| StringLengthConflation.swift:60:47:60:59 | ... ./(_:_:) ... | semmle.label | ... ./(_:_:) ... |
| StringLengthConflation.swift:66:33:66:36 | .length : | semmle.label | .length : |
| StringLengthConflation.swift:66:33:66:45 | ... call to /(_:_:) ... | semmle.label | ... call to /(_:_:) ... |
| StringLengthConflation.swift:66:33:66:45 | ... ./(_:_:) ... | semmle.label | ... ./(_:_:) ... |
| StringLengthConflation.swift:72:33:72:35 | .count | semmle.label | .count |
| StringLengthConflation.swift:78:47:78:49 | .count | semmle.label | .count |
| StringLengthConflation.swift:79:47:79:54 | .count | semmle.label | .count |
| StringLengthConflation.swift:81:47:81:64 | .count | semmle.label | .count |
| StringLengthConflation.swift:96:28:96:31 | .length : | semmle.label | .length : |
| StringLengthConflation.swift:96:28:96:40 | ... call to -(_:_:) ... | semmle.label | ... call to -(_:_:) ... |
| StringLengthConflation.swift:96:28:96:40 | ... .-(_:_:) ... | semmle.label | ... .-(_:_:) ... |
| StringLengthConflation.swift:100:27:100:30 | .length : | semmle.label | .length : |
| StringLengthConflation.swift:100:27:100:39 | ... call to -(_:_:) ... | semmle.label | ... call to -(_:_:) ... |
| StringLengthConflation.swift:100:27:100:39 | ... .-(_:_:) ... | semmle.label | ... .-(_:_:) ... |
| StringLengthConflation.swift:104:25:104:28 | .length : | semmle.label | .length : |
| StringLengthConflation.swift:104:25:104:37 | ... call to -(_:_:) ... | semmle.label | ... call to -(_:_:) ... |
| StringLengthConflation.swift:104:25:104:37 | ... .-(_:_:) ... | semmle.label | ... .-(_:_:) ... |
| StringLengthConflation.swift:108:25:108:28 | .length : | semmle.label | .length : |
| StringLengthConflation.swift:108:25:108:37 | ... call to -(_:_:) ... | semmle.label | ... call to -(_:_:) ... |
| StringLengthConflation.swift:108:25:108:37 | ... .-(_:_:) ... | semmle.label | ... .-(_:_:) ... |
| StringLengthConflation.swift:114:23:114:26 | .length : | semmle.label | .length : |
| StringLengthConflation.swift:114:23:114:35 | ... call to -(_:_:) ... | semmle.label | ... call to -(_:_:) ... |
| StringLengthConflation.swift:114:23:114:35 | ... .-(_:_:) ... | semmle.label | ... .-(_:_:) ... |
| StringLengthConflation.swift:120:22:120:25 | .length : | semmle.label | .length : |
| StringLengthConflation.swift:120:22:120:34 | ... call to -(_:_:) ... | semmle.label | ... call to -(_:_:) ... |
| StringLengthConflation.swift:120:22:120:34 | ... .-(_:_:) ... | semmle.label | ... .-(_:_:) ... |
| StringLengthConflation.swift:125:34:125:36 | .count : | semmle.label | .count : |
| StringLengthConflation.swift:125:34:125:44 | ... call to -(_:_:) ... | semmle.label | ... call to -(_:_:) ... |
| StringLengthConflation.swift:125:34:125:44 | ... .-(_:_:) ... | semmle.label | ... .-(_:_:) ... |
| StringLengthConflation.swift:126:36:126:38 | .count : | semmle.label | .count : |
| StringLengthConflation.swift:126:36:126:46 | ... call to -(_:_:) ... | semmle.label | ... call to -(_:_:) ... |
| StringLengthConflation.swift:126:36:126:46 | ... .-(_:_:) ... | semmle.label | ... .-(_:_:) ... |
| StringLengthConflation.swift:131:36:131:38 | .count : | semmle.label | .count : |
| StringLengthConflation.swift:131:36:131:46 | ... call to -(_:_:) ... | semmle.label | ... call to -(_:_:) ... |
| StringLengthConflation.swift:131:36:131:46 | ... .-(_:_:) ... | semmle.label | ... .-(_:_:) ... |
| StringLengthConflation.swift:132:38:132:40 | .count : | semmle.label | .count : |
| StringLengthConflation.swift:132:38:132:48 | ... call to -(_:_:) ... | semmle.label | ... call to -(_:_:) ... |
| StringLengthConflation.swift:132:38:132:48 | ... .-(_:_:) ... | semmle.label | ... .-(_:_:) ... |
| StringLengthConflation.swift:137:34:137:36 | .count : | semmle.label | .count : |
| StringLengthConflation.swift:137:34:137:44 | ... call to -(_:_:) ... | semmle.label | ... call to -(_:_:) ... |
| StringLengthConflation.swift:137:34:137:44 | ... .-(_:_:) ... | semmle.label | ... .-(_:_:) ... |
| StringLengthConflation.swift:138:36:138:38 | .count : | semmle.label | .count : |
| StringLengthConflation.swift:138:36:138:46 | ... call to -(_:_:) ... | semmle.label | ... call to -(_:_:) ... |
| StringLengthConflation.swift:138:36:138:46 | ... .-(_:_:) ... | semmle.label | ... .-(_:_:) ... |
| StringLengthConflation.swift:144:28:144:30 | .count : | semmle.label | .count : |
| StringLengthConflation.swift:144:28:144:38 | ... call to -(_:_:) ... | semmle.label | ... call to -(_:_:) ... |
| StringLengthConflation.swift:144:28:144:38 | ... .-(_:_:) ... | semmle.label | ... .-(_:_:) ... |
subpaths
#select
| StringLengthConflation2.swift:37:34:37:44 | ... call to -(_:_:) ... | StringLengthConflation2.swift:37:34:37:36 | .count : | StringLengthConflation2.swift:37:34:37:44 | ... call to -(_:_:) ... | This String length is used in an NSString, but it may not be equivalent. |
| StringLengthConflation2.swift:37:34:37:44 | ... .-(_:_:) ... | StringLengthConflation2.swift:37:34:37:36 | .count : | StringLengthConflation2.swift:37:34:37:44 | ... .-(_:_:) ... | This String length is used in an NSString, but it may not be equivalent. |
| StringLengthConflation.swift:53:43:53:46 | .length | StringLengthConflation.swift:53:43:53:46 | .length | StringLengthConflation.swift:53:43:53:46 | .length | This NSString length is used in a String, but it may not be equivalent. |
| StringLengthConflation.swift:54:43:54:50 | .count | StringLengthConflation.swift:54:43:54:50 | .count | StringLengthConflation.swift:54:43:54:50 | .count | This String.utf8 length is used in a String, but it may not be equivalent. |
| StringLengthConflation.swift:55:43:55:51 | .count | StringLengthConflation.swift:55:43:55:51 | .count | StringLengthConflation.swift:55:43:55:51 | .count | This String.utf16 length is used in a String, but it may not be equivalent. |
| StringLengthConflation.swift:56:43:56:60 | .count | StringLengthConflation.swift:56:43:56:60 | .count | StringLengthConflation.swift:56:43:56:60 | .count | This String.unicodeScalars length is used in a String, but it may not be equivalent. |
| StringLengthConflation.swift:60:47:60:59 | ... call to /(_:_:) ... | StringLengthConflation.swift:60:47:60:50 | .length : | StringLengthConflation.swift:60:47:60:59 | ... call to /(_:_:) ... | This NSString length is used in a String, but it may not be equivalent. |
| StringLengthConflation.swift:66:33:66:45 | ... call to /(_:_:) ... | StringLengthConflation.swift:66:33:66:36 | .length : | StringLengthConflation.swift:66:33:66:45 | ... call to /(_:_:) ... | This NSString length is used in a String, but it may not be equivalent. |
| StringLengthConflation.swift:60:47:60:59 | ... ./(_:_:) ... | StringLengthConflation.swift:60:47:60:50 | .length : | StringLengthConflation.swift:60:47:60:59 | ... ./(_:_:) ... | This NSString length is used in a String, but it may not be equivalent. |
| StringLengthConflation.swift:66:33:66:45 | ... ./(_:_:) ... | StringLengthConflation.swift:66:33:66:36 | .length : | StringLengthConflation.swift:66:33:66:45 | ... ./(_:_:) ... | This NSString length is used in a String, but it may not be equivalent. |
| StringLengthConflation.swift:72:33:72:35 | .count | StringLengthConflation.swift:72:33:72:35 | .count | StringLengthConflation.swift:72:33:72:35 | .count | This String length is used in an NSString, but it may not be equivalent. |
| StringLengthConflation.swift:78:47:78:49 | .count | StringLengthConflation.swift:78:47:78:49 | .count | StringLengthConflation.swift:78:47:78:49 | .count | This String length is used in an NSString, but it may not be equivalent. |
| StringLengthConflation.swift:79:47:79:54 | .count | StringLengthConflation.swift:79:47:79:54 | .count | StringLengthConflation.swift:79:47:79:54 | .count | This String.utf8 length is used in an NSString, but it may not be equivalent. |
| StringLengthConflation.swift:81:47:81:64 | .count | StringLengthConflation.swift:81:47:81:64 | .count | StringLengthConflation.swift:81:47:81:64 | .count | This String.unicodeScalars length is used in an NSString, but it may not be equivalent. |
| StringLengthConflation.swift:96:28:96:40 | ... call to -(_:_:) ... | StringLengthConflation.swift:96:28:96:31 | .length : | StringLengthConflation.swift:96:28:96:40 | ... call to -(_:_:) ... | This NSString length is used in a String, but it may not be equivalent. |
| StringLengthConflation.swift:100:27:100:39 | ... call to -(_:_:) ... | StringLengthConflation.swift:100:27:100:30 | .length : | StringLengthConflation.swift:100:27:100:39 | ... call to -(_:_:) ... | This NSString length is used in a String, but it may not be equivalent. |
| StringLengthConflation.swift:104:25:104:37 | ... call to -(_:_:) ... | StringLengthConflation.swift:104:25:104:28 | .length : | StringLengthConflation.swift:104:25:104:37 | ... call to -(_:_:) ... | This NSString length is used in a String, but it may not be equivalent. |
| StringLengthConflation.swift:108:25:108:37 | ... call to -(_:_:) ... | StringLengthConflation.swift:108:25:108:28 | .length : | StringLengthConflation.swift:108:25:108:37 | ... call to -(_:_:) ... | This NSString length is used in a String, but it may not be equivalent. |
| StringLengthConflation.swift:114:23:114:35 | ... call to -(_:_:) ... | StringLengthConflation.swift:114:23:114:26 | .length : | StringLengthConflation.swift:114:23:114:35 | ... call to -(_:_:) ... | This NSString length is used in a String, but it may not be equivalent. |
| StringLengthConflation.swift:120:22:120:34 | ... call to -(_:_:) ... | StringLengthConflation.swift:120:22:120:25 | .length : | StringLengthConflation.swift:120:22:120:34 | ... call to -(_:_:) ... | This NSString length is used in a String, but it may not be equivalent. |
| StringLengthConflation.swift:125:34:125:44 | ... call to -(_:_:) ... | StringLengthConflation.swift:125:34:125:36 | .count : | StringLengthConflation.swift:125:34:125:44 | ... call to -(_:_:) ... | This String length is used in an NSString, but it may not be equivalent. |
| StringLengthConflation.swift:126:36:126:46 | ... call to -(_:_:) ... | StringLengthConflation.swift:126:36:126:38 | .count : | StringLengthConflation.swift:126:36:126:46 | ... call to -(_:_:) ... | This String length is used in an NSString, but it may not be equivalent. |
| StringLengthConflation.swift:131:36:131:46 | ... call to -(_:_:) ... | StringLengthConflation.swift:131:36:131:38 | .count : | StringLengthConflation.swift:131:36:131:46 | ... call to -(_:_:) ... | This String length is used in an NSString, but it may not be equivalent. |
| StringLengthConflation.swift:132:38:132:48 | ... call to -(_:_:) ... | StringLengthConflation.swift:132:38:132:40 | .count : | StringLengthConflation.swift:132:38:132:48 | ... call to -(_:_:) ... | This String length is used in an NSString, but it may not be equivalent. |
| StringLengthConflation.swift:137:34:137:44 | ... call to -(_:_:) ... | StringLengthConflation.swift:137:34:137:36 | .count : | StringLengthConflation.swift:137:34:137:44 | ... call to -(_:_:) ... | This String length is used in an NSString, but it may not be equivalent. |
| StringLengthConflation.swift:138:36:138:46 | ... call to -(_:_:) ... | StringLengthConflation.swift:138:36:138:38 | .count : | StringLengthConflation.swift:138:36:138:46 | ... call to -(_:_:) ... | This String length is used in an NSString, but it may not be equivalent. |
| StringLengthConflation.swift:144:28:144:38 | ... call to -(_:_:) ... | StringLengthConflation.swift:144:28:144:30 | .count : | StringLengthConflation.swift:144:28:144:38 | ... call to -(_:_:) ... | This String length is used in an NSString, but it may not be equivalent. |
| StringLengthConflation.swift:96:28:96:40 | ... .-(_:_:) ... | StringLengthConflation.swift:96:28:96:31 | .length : | StringLengthConflation.swift:96:28:96:40 | ... .-(_:_:) ... | This NSString length is used in a String, but it may not be equivalent. |
| StringLengthConflation.swift:100:27:100:39 | ... .-(_:_:) ... | StringLengthConflation.swift:100:27:100:30 | .length : | StringLengthConflation.swift:100:27:100:39 | ... .-(_:_:) ... | This NSString length is used in a String, but it may not be equivalent. |
| StringLengthConflation.swift:104:25:104:37 | ... .-(_:_:) ... | StringLengthConflation.swift:104:25:104:28 | .length : | StringLengthConflation.swift:104:25:104:37 | ... .-(_:_:) ... | This NSString length is used in a String, but it may not be equivalent. |
| StringLengthConflation.swift:108:25:108:37 | ... .-(_:_:) ... | StringLengthConflation.swift:108:25:108:28 | .length : | StringLengthConflation.swift:108:25:108:37 | ... .-(_:_:) ... | This NSString length is used in a String, but it may not be equivalent. |
| StringLengthConflation.swift:114:23:114:35 | ... .-(_:_:) ... | StringLengthConflation.swift:114:23:114:26 | .length : | StringLengthConflation.swift:114:23:114:35 | ... .-(_:_:) ... | This NSString length is used in a String, but it may not be equivalent. |
| StringLengthConflation.swift:120:22:120:34 | ... .-(_:_:) ... | StringLengthConflation.swift:120:22:120:25 | .length : | StringLengthConflation.swift:120:22:120:34 | ... .-(_:_:) ... | This NSString length is used in a String, but it may not be equivalent. |
| StringLengthConflation.swift:125:34:125:44 | ... .-(_:_:) ... | StringLengthConflation.swift:125:34:125:36 | .count : | StringLengthConflation.swift:125:34:125:44 | ... .-(_:_:) ... | This String length is used in an NSString, but it may not be equivalent. |
| StringLengthConflation.swift:126:36:126:46 | ... .-(_:_:) ... | StringLengthConflation.swift:126:36:126:38 | .count : | StringLengthConflation.swift:126:36:126:46 | ... .-(_:_:) ... | This String length is used in an NSString, but it may not be equivalent. |
| StringLengthConflation.swift:131:36:131:46 | ... .-(_:_:) ... | StringLengthConflation.swift:131:36:131:38 | .count : | StringLengthConflation.swift:131:36:131:46 | ... .-(_:_:) ... | This String length is used in an NSString, but it may not be equivalent. |
| StringLengthConflation.swift:132:38:132:48 | ... .-(_:_:) ... | StringLengthConflation.swift:132:38:132:40 | .count : | StringLengthConflation.swift:132:38:132:48 | ... .-(_:_:) ... | This String length is used in an NSString, but it may not be equivalent. |
| StringLengthConflation.swift:137:34:137:44 | ... .-(_:_:) ... | StringLengthConflation.swift:137:34:137:36 | .count : | StringLengthConflation.swift:137:34:137:44 | ... .-(_:_:) ... | This String length is used in an NSString, but it may not be equivalent. |
| StringLengthConflation.swift:138:36:138:46 | ... .-(_:_:) ... | StringLengthConflation.swift:138:36:138:38 | .count : | StringLengthConflation.swift:138:36:138:46 | ... .-(_:_:) ... | This String length is used in an NSString, but it may not be equivalent. |
| StringLengthConflation.swift:144:28:144:38 | ... .-(_:_:) ... | StringLengthConflation.swift:144:28:144:30 | .count : | StringLengthConflation.swift:144:28:144:38 | ... .-(_:_:) ... | This String length is used in an NSString, but it may not be equivalent. |