Merge commit '76982404' into attribute

This commit is contained in:
Pavel Avgustinov 2019-08-21 12:44:07 +01:00
Родитель 7176b438c4 7698240484
Коммит cb3551b4d6
46 изменённых файлов: 653 добавлений и 1575 удалений

Просмотреть файл

@ -802,6 +802,8 @@ class ClassDerivation extends Locatable, @derivation {
Class getBaseClass() {
result = getBaseType().getUnderlyingType()
}
override string getCanonicalQLClass() { result = "ClassDerivation" }
/**
* Gets the type from which we are deriving, without resolving any

Просмотреть файл

@ -187,6 +187,8 @@ class Folder extends Container, @folder {
result.hasLocationInfo(_, 0, 0, 0, 0)
}
override string getCanonicalQLClass() { result = "Folder" }
/**
* DEPRECATED: Use `getLocation` instead.
* Gets the URL of this folder.
@ -259,6 +261,8 @@ class File extends Container, @file {
result = Container.super.toString()
}
override string getCanonicalQLClass() { result = "File" }
override Location getLocation() {
result.getContainer() = this and
result.hasLocationInfo(_, 0, 0, 0, 0)
@ -458,6 +462,8 @@ class HeaderFile extends File {
exists(Include i | i.getIncludedFile() = this)
}
override string getCanonicalQLClass() { result = "HeaderFile" }
/**
* Holds if this header file does not contain any declaration entries or top level
* declarations. For example it might be:
@ -488,6 +494,7 @@ class CFile extends File {
)
}
override string getCanonicalQLClass() { result = "CFile" }
}
/**
@ -507,6 +514,7 @@ class CppFile extends File {
)
}
override string getCanonicalQLClass() { result = "CppFile" }
}
/**

Просмотреть файл

@ -21,6 +21,8 @@ class FriendDecl extends Declaration, @frienddecl {
* use `getFriend`.
*/
override Location getADeclarationLocation() { result = this.getLocation() }
override string getCanonicalQLClass() { result = "FriendDecl" }
/**
* Implements the abstract method `Declaration.getDefinitionLocation`. A

Просмотреть файл

@ -82,6 +82,8 @@ class MacroAccess extends Locatable, @macroinvocation {
result = this.getOutermostMacroAccess().getActualLocation()
}
override string getCanonicalQLClass() { result = "MacroAccess" }
/**
* Gets the location of this macro access. For a nested access, where
* `exists(this.getParentInvocation())`, this yields a location either inside
@ -158,6 +160,8 @@ class MacroInvocation extends MacroAccess {
macroinvocations(underlyingElement(this),_,_,1)
}
override string getCanonicalQLClass() { result = "MacroInvocation" }
/**
* Gets an element that occurs in this macro invocation or a nested macro
* invocation.

Просмотреть файл

@ -132,6 +132,8 @@ class NamespaceDeclarationEntry extends Locatable, @namespace_decl {
* example: the "{ ... }" in "namespace N { ... }".
*/
Location getBodyLocation() { namespace_decls(underlyingElement(this),_,_,result) }
override string getCanonicalQLClass() { result = "NamespaceDeclarationEntry" }
}
/**

Просмотреть файл

@ -158,6 +158,8 @@ class PreprocessorIf extends PreprocessorBranch, @ppd_if {
*/
class PreprocessorIfdef extends PreprocessorBranch, @ppd_ifdef {
override string toString() { result = "#ifdef " + this.getHead() }
override string getCanonicalQLClass() { result = "PreprocessorIfdef" }
}
/**

Просмотреть файл

@ -13,6 +13,8 @@ class Specifier extends Element, @specifier {
result instanceof UnknownDefaultLocation
}
override string getCanonicalQLClass() { result = "Specifier" }
/** Gets the name of this specifier. */
string getName() { specifiers(underlyingElement(this),result) }
@ -31,6 +33,7 @@ class FunctionSpecifier extends Specifier {
this.hasName("virtual") or
this.hasName("explicit")
}
override string getCanonicalQLClass() { result = "FunctionSpecifier)" }
}
/**
@ -45,6 +48,7 @@ class StorageClassSpecifier extends Specifier {
this.hasName("extern") or
this.hasName("mutable")
}
override string getCanonicalQLClass() { result = "StorageClassSpecifier" }
}
/**
@ -96,6 +100,7 @@ class AccessSpecifier extends Specifier {
baseAccess.getName() >= this.getName() and result = this
)
}
override string getCanonicalQLClass() { result = "AccessSpecifier" }
}
/**
@ -237,6 +242,7 @@ class FormatAttribute extends GnuAttribute {
not val = 0 // indicates a `vprintf` style format function with arguments not directly available.
)
}
override string getCanonicalQLClass() { result = "FormatAttribute" }
}
/**

Просмотреть файл

@ -798,6 +798,8 @@ class Decltype extends Type, @decltype {
decltypes(underlyingElement(this), _, unresolveElement(result), _)
}
override string getCanonicalQLClass() { result = "Decltype" }
/**
* Whether an extra pair of parentheses around the expression would change the semantics of this decltype.
*
@ -1064,6 +1066,8 @@ class GNUVectorType extends DerivedType {
*/
int getNumElements() { arraysizes(underlyingElement(this),result,_,_) }
override string getCanonicalQLClass() { result = "GNUVectorType" }
/**
* Gets the size, in bytes, of this vector type.
*

Просмотреть файл

@ -14,8 +14,6 @@ abstract class NullValue extends Expr
class Zero extends NullValue
{
Zero() { this.(Literal).getValue() = "0" }
override string getCanonicalQLClass() { result = "Zero" }
}
/**

Просмотреть файл

@ -215,12 +215,14 @@ private module ImplCommon {
/*
* Calculation of `predicate store(Node node1, Content f, Node node2)`:
* There are three cases:
* There are four cases:
* - The base case: A direct local assignment given by `storeStep`.
* - A call to a method or constructor with two arguments, `arg1` and `arg2`,
* such the call has the side-effect `arg2.f = arg1`.
* such that the call has the side-effect `arg2.f = arg1`.
* - A call to a method that returns an object in which an argument has been
* stored.
* - A reverse step through a read when the result of the read has been
* stored into. This handles cases like `x.f1.f2 = y`.
* `storeViaSideEffect` covers the first two cases, and `storeReturn` covers
* the third case.
*/
@ -232,7 +234,8 @@ private module ImplCommon {
cached
predicate store(Node node1, Content f, Node node2) {
storeViaSideEffect(node1, f, node2) or
storeReturn(node1, f, node2)
storeReturn(node1, f, node2) or
read(node2.(PostUpdateNode).getPreUpdateNode(), f, node1.(PostUpdateNode).getPreUpdateNode())
}
private predicate storeViaSideEffect(Node node1, Content f, PostUpdateNode node2) {

Просмотреть файл

@ -186,6 +186,12 @@ predicate storeStep(Node node1, Content f, PostUpdateNode node2) {
node2.getPreUpdateNode().asExpr() = fa.getQualifier() and
f.(FieldContent).getField() = fa.getTarget()
)
or
exists(ConstructorFieldInit cfi |
node2.getPreUpdateNode().(PreConstructorInitThis).getConstructorFieldInit() = cfi and
f.(FieldContent).getField() = cfi.getTarget() and
node1.asExpr() = cfi.getExpr()
)
}
/**

Просмотреть файл

@ -17,6 +17,8 @@ private newtype TNode =
} or
TExplicitParameterNode(Parameter p) { exists(p.getFunction().getBlock()) } or
TInstanceParameterNode(MemberFunction f) { exists(f.getBlock()) and not f.isStatic() } or
TPreConstructorInitThis(ConstructorFieldInit cfi) or
TPostConstructorInitThis(ConstructorFieldInit cfi) or
TUninitializedNode(LocalVariable v) { not v.hasInitializer() }
/**
@ -300,6 +302,44 @@ class PreObjectInitializerNode extends Node, TPreObjectInitializerNode {
override string toString() { result = getExpr().toString() + " [pre init]" }
}
/**
* A synthetic data-flow node that plays the role of the post-update `this`
* pointer in a `ConstructorFieldInit`. For example, the `x(1)` in
* `C() : x(1) { }` is roughly equivalent to `this.x = 1`, and this node is
* equivalent to the `this` _after_ the field has been assigned.
*/
private class PostConstructorInitThis extends PostUpdateNode, TPostConstructorInitThis {
override PreConstructorInitThis getPreUpdateNode() {
this = TPostConstructorInitThis(result.getConstructorFieldInit())
}
override string toString() {
result = getPreUpdateNode().getConstructorFieldInit().toString() + " [post-this]"
}
}
/**
* INTERNAL: do not use.
*
* A synthetic data-flow node that plays the role of the pre-update `this`
* pointer in a `ConstructorFieldInit`. For example, the `x(1)` in
* `C() : x(1) { }` is roughly equivalent to `this.x = 1`, and this node is
* equivalent to the `this` _before_ the field has been assigned.
*/
class PreConstructorInitThis extends Node, TPreConstructorInitThis {
ConstructorFieldInit getConstructorFieldInit() { this = TPreConstructorInitThis(result) }
override Constructor getFunction() { result = getConstructorFieldInit().getEnclosingFunction() }
override PointerType getType() {
result.getBaseType() = getConstructorFieldInit().getEnclosingFunction().getDeclaringType()
}
override Location getLocation() { result = getConstructorFieldInit().getLocation() }
override string toString() { result = getConstructorFieldInit().toString() + " [pre-this]" }
}
/**
* Gets the `Node` corresponding to `e`.
*/
@ -325,17 +365,34 @@ DefinitionByReferenceNode definitionByReferenceNodeFromArgument(Expr argument) {
UninitializedNode uninitializedNode(LocalVariable v) { result.getLocalVariable() = v }
private module ThisFlow {
private Node thisAccessNode(ControlFlowNode cfn) {
result.(ImplicitParameterNode).getFunction().getBlock() = cfn or
result.asExpr().(ThisExpr) = cfn
}
/**
* Gets the 0-based index of `thisNode` in `b`, where `thisNode` is an access
* to `this` that may or may not have an associated `PostUpdateNode`. To make
* room for synthetic nodes that access `this`, the index may not correspond
* to an actual `ControlFlowNode`.
*/
private int basicBlockThisIndex(BasicBlock b, Node thisNode) {
thisNode = thisAccessNode(b.getNode(result))
// The implicit `this` parameter node is given a very negative offset to
// make space for any `ConstructorFieldInit`s there may be between it and
// the block contents.
thisNode.(ImplicitParameterNode).getFunction().getBlock() = b and
result = -2147483648
or
// Place the synthetic `this` node for a `ConstructorFieldInit` at a
// negative offset in the first basic block, between the
// `ImplicitParameterNode` and the first statement.
exists(Constructor constructor, int i |
thisNode.(PreConstructorInitThis).getConstructorFieldInit() =
constructor.getInitializer(i) and
result = -2147483648 + 1 + i and
b = thisNode.getFunction().getBlock()
)
or
b.getNode(result) = thisNode.asExpr().(ThisExpr)
}
private int thisRank(BasicBlock b, Node thisNode) {
thisNode = rank[result](thisAccessNode(_) as node order by basicBlockThisIndex(b, node))
thisNode = rank[result](Node n, int i | i = basicBlockThisIndex(b, n) | n order by i)
}
private int lastThisRank(BasicBlock b) { result = max(thisRank(b, _)) }

Просмотреть файл

@ -249,6 +249,9 @@ module FlowVar_internal {
result = descendentDef.getAUse(v)
)
)
or
parameterUsedInConstructorFieldInit(v, result) and
def.definedByParameter(v)
}
override predicate definedByExpr(Expr e, ControlFlowNode node) {
@ -314,6 +317,9 @@ module FlowVar_internal {
override VariableAccess getAnAccess() {
variableAccessInSBB(v, getAReachedBlockVarSBB(this), result) and
result != sbb
or
parameterUsedInConstructorFieldInit(v, result) and
sbb = v.(Parameter).getFunction().getEntryPoint()
}
override predicate definedByInitialValue(LocalScopeVariable lsv) {
@ -692,6 +698,21 @@ module FlowVar_internal {
assignedExpr = init.getExpr()
}
/**
* Holds if `p` is a parameter to a constructor that is used in a
* `ConstructorFieldInit` at `va`. This ignores the corner case that `p`
* might have been overwritten to have a different value before this happens.
*/
predicate parameterUsedInConstructorFieldInit(Parameter p, VariableAccess va) {
exists(Constructor constructor |
constructor.getInitializer(_).(ConstructorFieldInit).getExpr().getAChild*() = va and
va = p.getAnAccess()
// We don't require that `constructor` has `p` as a parameter because
// that follows from the two other conditions and would likely just
// confuse the join orderer.
)
}
/**
* A point in a basic block where a non-SSA variable may have a different value
* than it did elsewhere in the same basic block. Extending this class

Просмотреть файл

@ -150,6 +150,7 @@ class FieldAccess extends VariableAccess {
* so this is equivalent to `(*obj).field`.
*/
class PointerFieldAccess extends FieldAccess {
override string getCanonicalQLClass() { result = "PointerFieldAccess" }
PointerFieldAccess() {
exists (PointerType t
| t = getQualifier().getFullyConverted().getUnspecifiedType() and
@ -164,6 +165,7 @@ class PointerFieldAccess extends FieldAccess {
* distinguish whether or not the type of `obj` is a reference type.
*/
class DotFieldAccess extends FieldAccess {
override string getCanonicalQLClass() { result = "DotFieldAccess" }
DotFieldAccess() {
exists (Class c
| c = getQualifier().getFullyConverted().getUnspecifiedType())
@ -175,6 +177,7 @@ class DotFieldAccess extends FieldAccess {
* reference to a class/struct/union.
*/
class ReferenceFieldAccess extends DotFieldAccess {
override string getCanonicalQLClass() { result = "ReferenceFieldAccess" }
ReferenceFieldAccess() {
exprHasReferenceConversion(this.getQualifier())
}
@ -185,6 +188,7 @@ class ReferenceFieldAccess extends DotFieldAccess {
* class/struct/union (and not a reference).
*/
class ValueFieldAccess extends DotFieldAccess {
override string getCanonicalQLClass() { result = "ValueFieldAccess" }
ValueFieldAccess() {
not exprHasReferenceConversion(this.getQualifier())
}
@ -226,6 +230,7 @@ private predicate exprHasReferenceConversion(Expr e) {
* `ImplicitThisFieldAccess`.
*/
class ImplicitThisFieldAccess extends FieldAccess {
override string getCanonicalQLClass() { result = "ImplicitThisFieldAccess" }
ImplicitThisFieldAccess() {
not exists (this.getQualifier())
}
@ -277,6 +282,7 @@ class ParamAccessForType extends Expr, @param_ref {
* works on types directly rather than variables, expressions etc.
*/
class TypeName extends Expr, @type_operand {
override string getCanonicalQLClass() { result = "TypeName" }
override string toString() {
result = this.getType().getName()
}

Просмотреть файл

@ -74,6 +74,8 @@ class BuiltInIntAddr extends BuiltInOperation, @intaddrexpr {
*/
class BuiltInOperationHasAssign extends BuiltInOperation, @hasassignexpr {
override string toString() { result = "__has_assign" }
override string getCanonicalQLClass() { result = "BuiltInOperationHasAssign" }
}
/**
@ -81,6 +83,8 @@ class BuiltInOperationHasAssign extends BuiltInOperation, @hasassignexpr {
*/
class BuiltInOperationHasCopy extends BuiltInOperation, @hascopyexpr {
override string toString() { result = "__has_copy" }
override string getCanonicalQLClass() { result = "BuiltInOperationHasCopy" }
}
/**
@ -88,6 +92,8 @@ class BuiltInOperationHasCopy extends BuiltInOperation, @hascopyexpr {
*/
class BuiltInOperationHasNoThrowAssign extends BuiltInOperation, @hasnothrowassign {
override string toString() { result = "__has_nothrow_assign" }
override string getCanonicalQLClass() { result = "BuiltInOperationHasNoThrowAssign" }
}
/**
@ -95,6 +101,8 @@ class BuiltInOperationHasNoThrowAssign extends BuiltInOperation, @hasnothrowassi
*/
class BuiltInOperationHasNoThrowConstructor extends BuiltInOperation, @hasnothrowconstr {
override string toString() { result = "__has_nothrow_constructor" }
override string getCanonicalQLClass() { result = "BuiltInOperationHasNoThrowConstructor" }
}
/**
@ -102,6 +110,8 @@ class BuiltInOperationHasNoThrowConstructor extends BuiltInOperation, @hasnothro
*/
class BuiltInOperationHasNoThrowCopy extends BuiltInOperation, @hasnothrowcopy {
override string toString() { result = "__has_nothrow_copy" }
override string getCanonicalQLClass() { result = "BuiltInOperationHasNoThrowCopy" }
}
/**
@ -109,6 +119,8 @@ class BuiltInOperationHasNoThrowCopy extends BuiltInOperation, @hasnothrowcopy {
*/
class BuiltInOperationHasTrivialAssign extends BuiltInOperation, @hastrivialassign {
override string toString() { result = "__has_trivial_assign" }
override string getCanonicalQLClass() { result = "BuiltInOperationHasTrivialAssign" }
}
/**
@ -116,6 +128,8 @@ class BuiltInOperationHasTrivialAssign extends BuiltInOperation, @hastrivialassi
*/
class BuiltInOperationHasTrivialConstructor extends BuiltInOperation, @hastrivialconstr {
override string toString() { result = "__has_trivial_constructor" }
override string getCanonicalQLClass() { result = "BuiltInOperationHasTrivialConstructor" }
}
/**
@ -123,6 +137,8 @@ class BuiltInOperationHasTrivialConstructor extends BuiltInOperation, @hastrivia
*/
class BuiltInOperationHasTrivialCopy extends BuiltInOperation, @hastrivialcopy {
override string toString() { result = "__has_trivial_copy" }
override string getCanonicalQLClass() { result = "BuiltInOperationHasTrivialCopy" }
}
/**
@ -130,6 +146,8 @@ class BuiltInOperationHasTrivialCopy extends BuiltInOperation, @hastrivialcopy {
*/
class BuiltInOperationHasTrivialDestructor extends BuiltInOperation, @hastrivialdestructor {
override string toString() { result = "__has_trivial_destructor" }
override string getCanonicalQLClass() { result = "BuiltInOperationHasTrivialDestructor" }
}
/**
@ -137,6 +155,8 @@ class BuiltInOperationHasTrivialDestructor extends BuiltInOperation, @hastrivial
*/
class BuiltInOperationHasUserDestructor extends BuiltInOperation, @hasuserdestr {
override string toString() { result = "__has_user_destructor" }
override string getCanonicalQLClass() { result = "BuiltInOperationHasUserDestructor" }
}
/**
@ -144,6 +164,8 @@ class BuiltInOperationHasUserDestructor extends BuiltInOperation, @hasuserdestr
*/
class BuiltInOperationHasVirtualDestructor extends BuiltInOperation, @hasvirtualdestr {
override string toString() { result = "__has_virtual_destructor" }
override string getCanonicalQLClass() { result = "BuiltInOperationHasVirtualDestructor" }
}
/**
@ -151,6 +173,8 @@ class BuiltInOperationHasVirtualDestructor extends BuiltInOperation, @hasvirtual
*/
class BuiltInOperationIsAbstract extends BuiltInOperation, @isabstractexpr {
override string toString() { result = "__is_abstract" }
override string getCanonicalQLClass() { result = "BuiltInOperationIsAbstract" }
}
/**
@ -158,6 +182,8 @@ class BuiltInOperationIsAbstract extends BuiltInOperation, @isabstractexpr {
*/
class BuiltInOperationIsBaseOf extends BuiltInOperation, @isbaseofexpr {
override string toString() { result = "__is_base_of" }
override string getCanonicalQLClass() { result = "BuiltInOperationIsBaseOf" }
}
/**
@ -165,6 +191,8 @@ class BuiltInOperationIsBaseOf extends BuiltInOperation, @isbaseofexpr {
*/
class BuiltInOperationIsClass extends BuiltInOperation, @isclassexpr {
override string toString() { result = "__is_class" }
override string getCanonicalQLClass() { result = "BuiltInOperationIsClass" }
}
/**
@ -172,6 +200,8 @@ class BuiltInOperationIsClass extends BuiltInOperation, @isclassexpr {
*/
class BuiltInOperationIsConvertibleTo extends BuiltInOperation, @isconvtoexpr {
override string toString() { result = "__is_convertible_to" }
override string getCanonicalQLClass() { result = "BuiltInOperationIsConvertibleTo" }
}
/**
@ -179,6 +209,8 @@ class BuiltInOperationIsConvertibleTo extends BuiltInOperation, @isconvtoexpr {
*/
class BuiltInOperationIsEmpty extends BuiltInOperation, @isemptyexpr {
override string toString() { result = "__is_empty" }
override string getCanonicalQLClass() { result = "BuiltInOperationIsEmpty" }
}
/**
@ -186,6 +218,8 @@ class BuiltInOperationIsEmpty extends BuiltInOperation, @isemptyexpr {
*/
class BuiltInOperationIsEnum extends BuiltInOperation, @isenumexpr {
override string toString() { result = "__is_enum" }
override string getCanonicalQLClass() { result = "BuiltInOperationIsEnum" }
}
/**
@ -193,6 +227,8 @@ class BuiltInOperationIsEnum extends BuiltInOperation, @isenumexpr {
*/
class BuiltInOperationIsPod extends BuiltInOperation, @ispodexpr {
override string toString() { result = "__is_pod" }
override string getCanonicalQLClass() { result = "BuiltInOperationIsPod" }
}
/**
@ -200,6 +236,8 @@ class BuiltInOperationIsPod extends BuiltInOperation, @ispodexpr {
*/
class BuiltInOperationIsPolymorphic extends BuiltInOperation, @ispolyexpr {
override string toString() { result = "__is_polymorphic" }
override string getCanonicalQLClass() { result = "BuiltInOperationIsPolymorphic" }
}
/**
@ -207,6 +245,8 @@ class BuiltInOperationIsPolymorphic extends BuiltInOperation, @ispolyexpr {
*/
class BuiltInOperationIsUnion extends BuiltInOperation, @isunionexpr {
override string toString() { result = "__is_union" }
override string getCanonicalQLClass() { result = "BuiltInOperationIsUnion" }
}
/**
@ -226,6 +266,8 @@ class BuiltInOperationBuiltInTypesCompatibleP extends BuiltInOperation, @typesco
*/
class BuiltInOperationBuiltInShuffleVector extends BuiltInOperation, @builtinshufflevector {
override string toString() { result = "__builtin_shufflevector" }
override string getCanonicalQLClass() { result = "BuiltInOperationBuiltInShuffleVector" }
}
/**
@ -233,6 +275,8 @@ class BuiltInOperationBuiltInShuffleVector extends BuiltInOperation, @builtinshu
*/
class BuiltInOperationBuiltInConvertVector extends BuiltInOperation, @builtinconvertvector {
override string toString() { result = "__builtin_convertvector" }
override string getCanonicalQLClass() { result = "BuiltInOperationBuiltInConvertVector" }
}
/**
@ -256,6 +300,8 @@ class BuiltInOperationBuiltInAddressOf extends UnaryOperation, BuiltInOperation,
*/
class BuiltInOperationIsTriviallyConstructible extends BuiltInOperation, @istriviallyconstructibleexpr {
override string toString() { result = "__is_trivially_constructible" }
override string getCanonicalQLClass() { result = "BuiltInOperationIsTriviallyConstructible" }
}
/**
@ -263,6 +309,8 @@ class BuiltInOperationIsTriviallyConstructible extends BuiltInOperation, @istriv
*/
class BuiltInOperationIsDestructible extends BuiltInOperation, @isdestructibleexpr {
override string toString() { result = "__is_destructible" }
override string getCanonicalQLClass() { result = "BuiltInOperationIsDestructible" }
}
/**
@ -270,6 +318,8 @@ class BuiltInOperationIsDestructible extends BuiltInOperation, @isdestructibleex
*/
class BuiltInOperationIsNothrowDestructible extends BuiltInOperation, @isnothrowdestructibleexpr {
override string toString() { result = "__is_nothrow_destructible" }
override string getCanonicalQLClass() { result = "BuiltInOperationIsNothrowDestructible" }
}
/**
@ -277,6 +327,8 @@ class BuiltInOperationIsNothrowDestructible extends BuiltInOperation, @isnothrow
*/
class BuiltInOperationIsTriviallyDestructible extends BuiltInOperation, @istriviallydestructibleexpr {
override string toString() { result = "__is_trivially_destructible" }
override string getCanonicalQLClass() { result = "BuiltInOperationIsTriviallyDestructible" }
}
/**
@ -284,6 +336,8 @@ class BuiltInOperationIsTriviallyDestructible extends BuiltInOperation, @istrivi
*/
class BuiltInOperationIsTriviallyAssignable extends BuiltInOperation, @istriviallyassignableexpr {
override string toString() { result = "__is_trivially_assignable" }
override string getCanonicalQLClass() { result = "BuiltInOperationIsTriviallyAssignable" }
}
/**
@ -291,6 +345,8 @@ class BuiltInOperationIsTriviallyAssignable extends BuiltInOperation, @istrivial
*/
class BuiltInOperationIsNothrowAssignable extends BuiltInOperation, @isnothrowassignableexpr {
override string toString() { result = "__is_nothrow_assignable" }
override string getCanonicalQLClass() { result = "BuiltInOperationIsNothrowAssignable" }
}
/**
@ -298,6 +354,8 @@ class BuiltInOperationIsNothrowAssignable extends BuiltInOperation, @isnothrowas
*/
class BuiltInOperationIsStandardLayout extends BuiltInOperation, @isstandardlayoutexpr {
override string toString() { result = "__is_standard_layout" }
override string getCanonicalQLClass() { result = "BuiltInOperationIsStandardLayout" }
}
/**
@ -305,6 +363,8 @@ class BuiltInOperationIsStandardLayout extends BuiltInOperation, @isstandardlayo
*/
class BuiltInOperationIsTriviallyCopyable extends BuiltInOperation, @istriviallycopyableexpr {
override string toString() { result = "__is_trivially_copyable" }
override string getCanonicalQLClass() { result = "BuiltInOperationIsTriviallyCopyable" }
}
/**
@ -312,6 +372,8 @@ class BuiltInOperationIsTriviallyCopyable extends BuiltInOperation, @istrivially
*/
class BuiltInOperationIsLiteralType extends BuiltInOperation, @isliteraltypeexpr {
override string toString() { result = "__is_literal_type" }
override string getCanonicalQLClass() { result = "BuiltInOperationIsLiteralType" }
}
/**
@ -319,6 +381,8 @@ class BuiltInOperationIsLiteralType extends BuiltInOperation, @isliteraltypeexpr
*/
class BuiltInOperationHasTrivialMoveConstructor extends BuiltInOperation, @hastrivialmoveconstructorexpr {
override string toString() { result = "__has_trivial_move_constructor" }
override string getCanonicalQLClass() { result = "BuiltInOperationHasTrivialMoveConstructor" }
}
/**
@ -326,6 +390,8 @@ class BuiltInOperationHasTrivialMoveConstructor extends BuiltInOperation, @hastr
*/
class BuiltInOperationHasTrivialMoveAssign extends BuiltInOperation, @hastrivialmoveassignexpr {
override string toString() { result = "__has_trivial_move_assign" }
override string getCanonicalQLClass() { result = "BuiltInOperationHasTrivialMoveAssign" }
}
/**
@ -333,6 +399,8 @@ class BuiltInOperationHasTrivialMoveAssign extends BuiltInOperation, @hastrivial
*/
class BuiltInOperationHasNothrowMoveAssign extends BuiltInOperation, @hasnothrowmoveassignexpr {
override string toString() { result = "__has_nothrow_move_assign" }
override string getCanonicalQLClass() { result = "BuiltInOperationHasNothrowMoveAssign" }
}
/**
@ -340,6 +408,8 @@ class BuiltInOperationHasNothrowMoveAssign extends BuiltInOperation, @hasnothrow
*/
class BuiltInOperationIsConstructible extends BuiltInOperation, @isconstructibleexpr {
override string toString() { result = "__is_constructible" }
override string getCanonicalQLClass() { result = "BuiltInOperationIsConstructible" }
}
/**
@ -347,6 +417,8 @@ class BuiltInOperationIsConstructible extends BuiltInOperation, @isconstructible
*/
class BuiltInOperationIsNothrowConstructible extends BuiltInOperation, @isnothrowconstructibleexpr {
override string toString() { result = "__is_nothrow_constructible" }
override string getCanonicalQLClass() { result = "BuiltInOperationIsNothrowConstructible" }
}
/**
@ -354,6 +426,8 @@ class BuiltInOperationIsNothrowConstructible extends BuiltInOperation, @isnothro
*/
class BuiltInOperationHasFinalizer extends BuiltInOperation, @hasfinalizerexpr {
override string toString() { result = "__has_finalizer" }
override string getCanonicalQLClass() { result = "BuiltInOperationHasFinalizer" }
}
/**
@ -361,6 +435,8 @@ class BuiltInOperationHasFinalizer extends BuiltInOperation, @hasfinalizerexpr {
*/
class BuiltInOperationIsDelegate extends BuiltInOperation, @isdelegateexpr {
override string toString() { result = "__is_delegate" }
override string getCanonicalQLClass() { result = "BuiltInOperationIsDelegate" }
}
/**
@ -368,6 +444,8 @@ class BuiltInOperationIsDelegate extends BuiltInOperation, @isdelegateexpr {
*/
class BuiltInOperationIsInterfaceClass extends BuiltInOperation, @isinterfaceclassexpr {
override string toString() { result = "__is_interface_class" }
override string getCanonicalQLClass() { result = "BuiltInOperationIsInterfaceClass" }
}
/**
@ -375,6 +453,8 @@ class BuiltInOperationIsInterfaceClass extends BuiltInOperation, @isinterfacecla
*/
class BuiltInOperationIsRefArray extends BuiltInOperation, @isrefarrayexpr {
override string toString() { result = "__is_ref_array" }
override string getCanonicalQLClass() { result = "BuiltInOperationIsRefArray" }
}
/**
@ -382,6 +462,8 @@ class BuiltInOperationIsRefArray extends BuiltInOperation, @isrefarrayexpr {
*/
class BuiltInOperationIsRefClass extends BuiltInOperation, @isrefclassexpr {
override string toString() { result = "__is_ref_class" }
override string getCanonicalQLClass() { result = "BuiltInOperationIsRefClass" }
}
/**
@ -389,6 +471,8 @@ class BuiltInOperationIsRefClass extends BuiltInOperation, @isrefclassexpr {
*/
class BuiltInOperationIsSealed extends BuiltInOperation, @issealedexpr {
override string toString() { result = "__is_sealed" }
override string getCanonicalQLClass() { result = "BuiltInOperationIsSealed" }
}
/**
@ -396,6 +480,8 @@ class BuiltInOperationIsSealed extends BuiltInOperation, @issealedexpr {
*/
class BuiltInOperationIsSimpleValueClass extends BuiltInOperation, @issimplevalueclassexpr {
override string toString() { result = "__is_simple_value_class" }
override string getCanonicalQLClass() { result = "BuiltInOperationIsSimpleValueClass" }
}
/**
@ -403,6 +489,8 @@ class BuiltInOperationIsSimpleValueClass extends BuiltInOperation, @issimplevalu
*/
class BuiltInOperationIsValueClass extends BuiltInOperation, @isvalueclassexpr {
override string toString() { result = "__is_value_class" }
override string getCanonicalQLClass() { result = "BuiltInOperationIsValueClass" }
}
/**
@ -410,6 +498,8 @@ class BuiltInOperationIsValueClass extends BuiltInOperation, @isvalueclassexpr {
*/
class BuiltInOperationIsFinal extends BuiltInOperation, @isfinalexpr {
override string toString() { result = "__is_final" }
override string getCanonicalQLClass() { result = "BuiltInOperationIsFinal" }
}
/**

Просмотреть файл

@ -456,6 +456,7 @@ class VacuousDestructorCall extends Expr, @vacuous_destructor_call {
* of a constructor's explicit initializer list or implicit actions.
*/
class ConstructorInit extends Expr, @ctorinit {
override string getCanonicalQLClass() { result = "ConstructorInit" }
}
/**
@ -463,6 +464,7 @@ class ConstructorInit extends Expr, @ctorinit {
* initializer list or compiler-generated actions.
*/
class ConstructorBaseInit extends ConstructorInit, ConstructorCall {
override string getCanonicalQLClass() { result = "ConstructorBaseInit" }
}
/**
@ -470,6 +472,7 @@ class ConstructorBaseInit extends ConstructorInit, ConstructorCall {
* constructor's initializer list or compiler-generated actions.
*/
class ConstructorDirectInit extends ConstructorBaseInit, @ctordirectinit {
override string getCanonicalQLClass() { result = "ConstructorDirectInit" }
}
/**
@ -480,6 +483,7 @@ class ConstructorDirectInit extends ConstructorBaseInit, @ctordirectinit {
* call won't be performed.
*/
class ConstructorVirtualInit extends ConstructorBaseInit, @ctorvirtualinit {
override string getCanonicalQLClass() { result = "ConstructorVirtualInit" }
}
/**
@ -487,6 +491,7 @@ class ConstructorVirtualInit extends ConstructorBaseInit, @ctorvirtualinit {
* initializer list, which delegates object construction (C++11 only).
*/
class ConstructorDelegationInit extends ConstructorBaseInit, @ctordelegatinginit {
override string getCanonicalQLClass() { result = "ConstructorDelegationInit" }
}
/**
@ -524,6 +529,7 @@ class ConstructorFieldInit extends ConstructorInit, @ctorfieldinit {
* compiler-generated actions.
*/
class DestructorDestruction extends Expr, @dtordestruct {
override string getCanonicalQLClass() { result = "DestructorDestruction" }
}
/**
@ -531,6 +537,7 @@ class DestructorDestruction extends Expr, @dtordestruct {
* compiler-generated actions.
*/
class DestructorBaseDestruction extends DestructorCall, DestructorDestruction {
override string getCanonicalQLClass() { result = "DestructorBaseDestruction" }
}
/**
@ -538,6 +545,7 @@ class DestructorBaseDestruction extends DestructorCall, DestructorDestruction {
* destructor's compiler-generated actions.
*/
class DestructorDirectDestruction extends DestructorBaseDestruction, @dtordirectdestruct {
override string getCanonicalQLClass() { result = "DestructorDirectDestruction" }
}
/**
@ -548,6 +556,7 @@ class DestructorDirectDestruction extends DestructorBaseDestruction, @dtordirect
* in the corresponding constructor, then this call won't be performed.
*/
class DestructorVirtualDestruction extends DestructorBaseDestruction, @dtorvirtualdestruct {
override string getCanonicalQLClass() { result = "DestructorVirtualDestruction" }
}
/**

Просмотреть файл

@ -14,7 +14,7 @@ class Literal extends Expr, @literal {
}
override string getCanonicalQLClass() { result = "Literal" }
override predicate mayBeImpure() {
none()
}
@ -41,6 +41,8 @@ class LabelLiteral extends Literal {
jumpinfo(underlyingElement(this),_,_)
}
override string getCanonicalQLClass() { result = "LabelLiteral" }
/** Gets the corresponding label statement. */
LabelStmt getLabel() {
jumpinfo(underlyingElement(this),_,unresolveElement(result))
@ -123,7 +125,7 @@ class StringLiteral extends TextLiteral
}
override string getCanonicalQLClass() { result = "StringLiteral" }
}
/**
@ -133,7 +135,7 @@ class OctalLiteral extends Literal {
OctalLiteral() {
super.getValueText().regexpMatch("\\s*0[0-7]+[uUlL]*\\s*")
}
override string getCanonicalQLClass() { result = "OctalLiteral" }
}
@ -144,7 +146,7 @@ class HexLiteral extends Literal {
HexLiteral() {
super.getValueText().regexpMatch("\\s*0[xX][0-9a-fA-F]+[uUlL]*\\s*")
}
override string getCanonicalQLClass() { result = "HexLiteral" }
}
@ -154,6 +156,8 @@ class HexLiteral extends Literal {
class AggregateLiteral extends Expr, @aggregateliteral {
// if this is turned into a Literal we need to change mayBeImpure
override string getCanonicalQLClass() { result = "AggregateLiteral" }
/**
* DEPRECATED: Use ClassAggregateLiteral.getFieldExpr() instead.
*

Просмотреть файл

@ -215,12 +215,14 @@ private module ImplCommon {
/*
* Calculation of `predicate store(Node node1, Content f, Node node2)`:
* There are three cases:
* There are four cases:
* - The base case: A direct local assignment given by `storeStep`.
* - A call to a method or constructor with two arguments, `arg1` and `arg2`,
* such the call has the side-effect `arg2.f = arg1`.
* such that the call has the side-effect `arg2.f = arg1`.
* - A call to a method that returns an object in which an argument has been
* stored.
* - A reverse step through a read when the result of the read has been
* stored into. This handles cases like `x.f1.f2 = y`.
* `storeViaSideEffect` covers the first two cases, and `storeReturn` covers
* the third case.
*/
@ -232,7 +234,8 @@ private module ImplCommon {
cached
predicate store(Node node1, Content f, Node node2) {
storeViaSideEffect(node1, f, node2) or
storeReturn(node1, f, node2)
storeReturn(node1, f, node2) or
read(node2.(PostUpdateNode).getPreUpdateNode(), f, node1.(PostUpdateNode).getPreUpdateNode())
}
private predicate storeViaSideEffect(Node node1, Content f, PostUpdateNode node2) {

Просмотреть файл

@ -602,7 +602,7 @@ class BreakStmt extends JumpStmt, @stmt_break {
override predicate mayBeImpure() { none() }
override predicate mayBeGloballyImpure() { none() }
/**
* Gets the loop or switch statement that this break statement will exit.
*/
@ -1149,11 +1149,11 @@ class SwitchCase extends Stmt, @stmt_switch_case {
/**
* DEPRECATED: use `SwitchCase.getAStmt` or `ControlFlowNode.getASuccessor`
* rather than this predicate.
* rather than this predicate.
*
* Gets the `Block` statement immediately following this 'switch case'
* statement, if any.
*
*
* For example, for
* ```
* switch (i) {
@ -1845,6 +1845,8 @@ class MicrosoftTryExceptStmt extends MicrosoftTryStmt {
/** Gets the `__except` statement (usually a `Block`). */
Stmt getExcept() { result = getChild(2) }
override string getCanonicalQLClass() { result = "MicrosoftTryExceptStmt" }
}
/**
@ -1860,6 +1862,8 @@ class MicrosoftTryFinallyStmt extends MicrosoftTryStmt {
/** Gets the `__finally` statement (usually a `Block`). */
Stmt getFinally() { result = getChild(1) }
override string getCanonicalQLClass() { result = "MicrosoftTryFinallyStmt" }
}
/**

Просмотреть файл

@ -50,7 +50,7 @@ ArrayToPointer.c:
# 9| 0: [AssignExpr] ... = ...
# 9| Type = [CharPointerType] char *
# 9| ValueCategory = prvalue
# 9| 0: [FieldAccess] name
# 9| 0: [ValueFieldAccess] name
# 9| Type = [CharPointerType] char *
# 9| ValueCategory = lvalue
# 9| -1: [VariableAccess] s
@ -94,9 +94,9 @@ ConditionDecl.cpp:
# 2| 0: [VariableDeclarationEntry] definition of j
# 2| Type = [IntType] int
# 2| init: [Initializer] initializer for j
# 2| expr: [Literal,Zero] 0
# 2| expr: [Literal] 0
# 2| Type = [IntType] int
# 2| Value = [Literal,Zero] 0
# 2| Value = [Literal] 0
# 2| ValueCategory = prvalue
# 3| 1: [WhileStmt] while (...) ...
# 3| 0: [ConditionDeclExpr] (condition decl)
@ -213,9 +213,9 @@ ConstructorCall.cpp:
# 20| 1: [NewExpr] new
# 20| Type = [PointerType] E *
# 20| ValueCategory = prvalue
# 20| 1: [Literal,Zero] 0
# 20| 1: [Literal] 0
# 20| Type = [Class] E
# 20| Value = [Literal,Zero] 0
# 20| Value = [Literal] 0
# 20| ValueCategory = prvalue
# 21| 3: [ReturnStmt] return ...
Conversion1.c:
@ -788,9 +788,9 @@ Throw.cpp:
# 9| 0: [ThrowExpr] throw ...
# 9| Type = [Class] E
# 9| ValueCategory = prvalue
# 9| 0: [Literal,Zero] 0
# 9| 0: [Literal] 0
# 9| Type = [Class] E
# 9| Value = [Literal,Zero] 0
# 9| Value = [Literal] 0
# 9| ValueCategory = prvalue
# 11| 2: [ExprStmt] ExprStmt
# 11| 0: [ThrowExpr] throw ...
@ -957,7 +957,7 @@ macro_etc.c:
# 9| 0: [AssignExpr] ... = ...
# 9| Type = [IntType] int
# 9| ValueCategory = prvalue
# 9| 0: [FieldAccess] b
# 9| 0: [ValueFieldAccess] b
# 9| Type = [IntType] int
# 9| ValueCategory = lvalue
# 9| -1: [VariableAccess] uu
@ -969,7 +969,7 @@ macro_etc.c:
# 9| 0: [VariableAccess] i
# 9| Type = [IntType] int
# 9| ValueCategory = prvalue(load)
# 9| 1: [FieldAccess] a
# 9| 1: [ValueFieldAccess] a
# 9| Type = [IntType] int
# 9| ValueCategory = prvalue(load)
# 9| -1: [VariableAccess] uu
@ -982,7 +982,7 @@ macro_etc.c:
# 10| 0: [AddExpr] ... + ...
# 10| Type = [IntType] int
# 10| ValueCategory = prvalue
# 10| 0: [FieldAccess] b
# 10| 0: [ValueFieldAccess] b
# 10| Type = [IntType] int
# 10| ValueCategory = prvalue(load)
# 10| -1: [VariableAccess] uu
@ -1035,9 +1035,9 @@ macro_etc.c:
# 27| Type = [PlainCharType] char
# 27| Value = [CStyleCast] 0
# 27| ValueCategory = prvalue
# 27| expr: [Literal,Zero] 0
# 27| expr: [Literal] 0
# 27| Type = [IntType] int
# 27| Value = [Literal,Zero] 0
# 27| Value = [Literal] 0
# 27| ValueCategory = prvalue
# 27| 1: [LTExpr] ... < ...
# 27| Type = [IntType] int
@ -1087,9 +1087,9 @@ macro_etc.c:
# 28| Type = [PlainCharType] char
# 28| Value = [CStyleCast] 0
# 28| ValueCategory = prvalue
# 28| expr: [Literal,Zero] 0
# 28| expr: [Literal] 0
# 28| Type = [IntType] int
# 28| Value = [Literal,Zero] 0
# 28| Value = [Literal] 0
# 28| ValueCategory = prvalue
# 28| 1: [LTExpr] ... < ...
# 28| Type = [IntType] int
@ -1153,9 +1153,9 @@ macro_etc.c:
# 30| expr: [VariableAccess] arr
# 30| Type = [ArrayType] char[]
# 30| ValueCategory = lvalue
# 30| 1: [Literal,Zero] 0
# 30| 1: [Literal] 0
# 30| Type = [IntType] int
# 30| Value = [Literal,Zero] 0
# 30| Value = [Literal] 0
# 30| ValueCategory = prvalue
# 30| 1: [CStyleCast] (char)...
# 30| Conversion = [IntegralConversion] integral conversion
@ -1245,7 +1245,7 @@ union_etc.cpp:
# 6| 0: [AssignExpr] ... = ...
# 6| Type = [IntType] int
# 6| ValueCategory = lvalue
# 6| 0: [FieldAccess] x
# 6| 0: [PointerFieldAccess] x
# 6| Type = [IntType] int
# 6| ValueCategory = lvalue
#-----| -1: [ThisExpr] this
@ -1323,10 +1323,10 @@ union_etc.cpp:
# 26| 0: [AssignExpr] ... = ...
# 26| Type = [IntType] int
# 26| ValueCategory = lvalue
# 26| 0: [FieldAccess] a
# 26| 0: [ValueFieldAccess] a
# 26| Type = [IntType] int
# 26| ValueCategory = lvalue
# 26| -1: [FieldAccess] u
# 26| -1: [ValueFieldAccess] u
# 26| Type = [NestedUnion] U
# 26| ValueCategory = lvalue
# 26| -1: [VariableAccess] s
@ -1335,10 +1335,10 @@ union_etc.cpp:
# 26| 1: [AssignExpr] ... = ...
# 26| Type = [IntType] int
# 26| ValueCategory = prvalue
# 26| 0: [FieldAccess] e
# 26| 0: [ValueFieldAccess] e
# 26| Type = [IntType] int
# 26| ValueCategory = lvalue
# 26| -1: [FieldAccess] s
# 26| -1: [ValueFieldAccess] s
# 26| Type = [NestedStruct] S
# 26| ValueCategory = lvalue
# 26| -1: [VariableAccess] c
@ -1347,10 +1347,10 @@ union_etc.cpp:
# 26| 1: [AssignExpr] ... = ...
# 26| Type = [IntType] int
# 26| ValueCategory = prvalue
# 26| 0: [FieldAccess] i
# 26| 0: [ValueFieldAccess] i
# 26| Type = [IntType] int
# 26| ValueCategory = lvalue
# 26| -1: [FieldAccess] c
# 26| -1: [ValueFieldAccess] c
# 26| Type = [NestedClass] C
# 26| ValueCategory = lvalue
# 26| -1: [VariableAccess] u
@ -1364,10 +1364,10 @@ union_etc.cpp:
# 27| 0: [AssignAddExpr] ... += ...
# 27| Type = [IntType] int
# 27| ValueCategory = lvalue
# 27| 0: [FieldAccess] b
# 27| 0: [ValueFieldAccess] b
# 27| Type = [IntType] int
# 27| ValueCategory = lvalue
# 27| -1: [FieldAccess] u
# 27| -1: [ValueFieldAccess] u
# 27| Type = [NestedUnion] U
# 27| ValueCategory = lvalue
# 27| -1: [VariableAccess] s
@ -1379,23 +1379,23 @@ union_etc.cpp:
# 27| expr: [AddExpr] ... + ...
# 27| Type = [IntType] int
# 27| ValueCategory = prvalue
# 27| 0: [FieldAccess] i
# 27| 0: [ValueFieldAccess] i
# 27| Type = [IntType] int
# 27| ValueCategory = prvalue(load)
# 27| -1: [FieldAccess] c
# 27| -1: [ValueFieldAccess] c
# 27| Type = [NestedClass] C
# 27| ValueCategory = lvalue
# 27| -1: [VariableAccess] u
# 27| Type = [Union] U
# 27| ValueCategory = lvalue
# 27| 1: [FieldAccess] j
# 27| 1: [ValueFieldAccess] j
# 27| Type = [IntType] int
# 27| ValueCategory = prvalue(load)
# 27| -1: [VariableAccess] u
# 27| Type = [Union] U
# 27| ValueCategory = lvalue
# 28| 5: [ReturnStmt] return ...
# 28| 0: [FieldAccess] g
# 28| 0: [ValueFieldAccess] g
# 28| Type = [IntType] int
# 28| ValueCategory = prvalue(load)
# 28| -1: [VariableAccess] c
@ -1428,7 +1428,7 @@ union_etc.cpp:
# 33| 0: [AssignExpr] ... = ...
# 33| Type = [IntType] int
# 33| ValueCategory = lvalue
# 33| 0: [FieldAccess] q
# 33| 0: [PointerFieldAccess] q
# 33| Type = [IntType] int
# 33| ValueCategory = lvalue
#-----| -1: [ThisExpr] this
@ -1503,10 +1503,10 @@ union_etc.cpp:
# 41| Type = [Class] C
# 41| ValueCategory = lvalue
# 42| 5: [ReturnStmt] return ...
# 42| 0: [FieldAccess] b
# 42| 0: [ValueFieldAccess] b
# 42| Type = [IntType] int
# 42| ValueCategory = prvalue(load)
# 42| -1: [FieldAccess] c
# 42| -1: [PointerFieldAccess] c
# 42| Type = [NestedClass] C
# 42| ValueCategory = lvalue
# 42| -1: [CStyleCast] (S *)...

Просмотреть файл

@ -26,7 +26,7 @@ public:
void func()
{
sink(s1); // flow [NOT DETECTED] (in either place)
sink(s1); // flow
sink(s2); // flow [NOT DETECTED]
sink(s3); // flow
sink(s4); // flow [NOT DETECTED]

Просмотреть файл

@ -25,8 +25,8 @@ public:
void bar(Foo &f)
{
sink(f.a()); // flow (through `f` and `h`) [NOT DETECTED]
sink(f.b()); // flow (through `g` and `h`) [NOT DETECTED]
sink(f.a()); // flow (through `f` and `h`)
sink(f.b()); // flow (through `g` and `h`)
}
void foo()

Просмотреть файл

@ -75,12 +75,34 @@ edges
| B.cpp:18:14:18:17 | box1 [elem1, ... (1)] | B.cpp:18:20:18:24 | elem1 |
| B.cpp:19:10:19:11 | b2 [box1, ... (2)] | B.cpp:19:14:19:17 | box1 [elem2, ... (1)] |
| B.cpp:19:14:19:17 | box1 [elem2, ... (1)] | B.cpp:19:20:19:24 | elem2 |
| C.cpp:18:12:18:18 | call to C [s1, ... (1)] | C.cpp:19:5:19:5 | c [s1, ... (1)] |
| C.cpp:18:12:18:18 | call to C [s3, ... (1)] | C.cpp:19:5:19:5 | c [s3, ... (1)] |
| C.cpp:19:5:19:5 | c [s1, ... (1)] | C.cpp:27:8:27:11 | `this` parameter in func [s1, ... (1)] |
| C.cpp:19:5:19:5 | c [s3, ... (1)] | C.cpp:27:8:27:11 | `this` parameter in func [s3, ... (1)] |
| C.cpp:22:9:22:22 | constructor init of field s1 [post-this] [s1, ... (1)] | C.cpp:18:12:18:18 | call to C [s1, ... (1)] |
| C.cpp:22:12:22:21 | new [void] | C.cpp:22:9:22:22 | constructor init of field s1 [post-this] [s1, ... (1)] |
| C.cpp:24:5:24:8 | this [post update] [s3, ... (1)] | C.cpp:18:12:18:18 | call to C [s3, ... (1)] |
| C.cpp:24:5:24:25 | ... = ... [void] | C.cpp:24:5:24:8 | this [post update] [s3, ... (1)] |
| C.cpp:24:16:24:25 | new [void] | C.cpp:24:5:24:25 | ... = ... [void] |
| C.cpp:27:8:27:11 | `this` parameter in func [s1, ... (1)] | file://:0:0:0:0 | this [s1, ... (1)] |
| C.cpp:27:8:27:11 | `this` parameter in func [s3, ... (1)] | file://:0:0:0:0 | this [s3, ... (1)] |
| constructors.cpp:26:15:26:15 | f [a_, ... (1)] | constructors.cpp:28:10:28:10 | f [a_, ... (1)] |
| constructors.cpp:26:15:26:15 | f [b_, ... (1)] | constructors.cpp:29:10:29:10 | f [b_, ... (1)] |
| constructors.cpp:28:10:28:10 | f [a_, ... (1)] | constructors.cpp:28:12:28:12 | call to a |
| constructors.cpp:29:10:29:10 | f [b_, ... (1)] | constructors.cpp:29:12:29:12 | call to b |
| constructors.cpp:34:11:34:20 | call to user_input [void] | constructors.cpp:34:11:34:26 | call to Foo [a_, ... (1)] |
| constructors.cpp:34:11:34:26 | call to Foo [a_, ... (1)] | constructors.cpp:40:9:40:9 | f [a_, ... (1)] |
| constructors.cpp:35:11:35:26 | call to Foo [b_, ... (1)] | constructors.cpp:43:9:43:9 | g [b_, ... (1)] |
| constructors.cpp:35:14:35:23 | call to user_input [void] | constructors.cpp:35:11:35:26 | call to Foo [b_, ... (1)] |
| constructors.cpp:36:11:36:20 | call to user_input [void] | constructors.cpp:36:11:36:37 | call to Foo [a_, ... (1)] |
| constructors.cpp:36:11:36:37 | call to Foo [a_, ... (1)] | constructors.cpp:46:9:46:9 | h [a_, ... (1)] |
| constructors.cpp:36:11:36:37 | call to Foo [b_, ... (1)] | constructors.cpp:46:9:46:9 | h [b_, ... (1)] |
| constructors.cpp:36:25:36:34 | call to user_input [void] | constructors.cpp:36:11:36:37 | call to Foo [b_, ... (1)] |
| constructors.cpp:40:9:40:9 | f [a_, ... (1)] | constructors.cpp:26:15:26:15 | f [a_, ... (1)] |
| constructors.cpp:43:9:43:9 | g [b_, ... (1)] | constructors.cpp:26:15:26:15 | f [b_, ... (1)] |
| constructors.cpp:46:9:46:9 | h [a_, ... (1)] | constructors.cpp:26:15:26:15 | f [a_, ... (1)] |
| constructors.cpp:46:9:46:9 | h [b_, ... (1)] | constructors.cpp:26:15:26:15 | f [b_, ... (1)] |
| file://:0:0:0:0 | this [s1, ... (1)] | C.cpp:29:10:29:11 | s1 |
| file://:0:0:0:0 | this [s3, ... (1)] | C.cpp:31:10:31:11 | s3 |
| simple.cpp:26:15:26:15 | f [a_, ... (1)] | simple.cpp:28:10:28:10 | f [a_, ... (1)] |
| simple.cpp:26:15:26:15 | f [b_, ... (1)] | simple.cpp:29:10:29:10 | f [b_, ... (1)] |
@ -124,7 +146,12 @@ edges
| B.cpp:10:20:10:24 | elem2 | B.cpp:6:15:6:24 | new [void] | B.cpp:10:20:10:24 | elem2 | elem2 flows from $@ | B.cpp:6:15:6:24 | new [void] | new [void] |
| B.cpp:18:20:18:24 | elem1 | B.cpp:15:15:15:27 | new [void] | B.cpp:18:20:18:24 | elem1 | elem1 flows from $@ | B.cpp:15:15:15:27 | new [void] | new [void] |
| B.cpp:19:20:19:24 | elem2 | B.cpp:15:15:15:27 | new [void] | B.cpp:19:20:19:24 | elem2 | elem2 flows from $@ | B.cpp:15:15:15:27 | new [void] | new [void] |
| C.cpp:29:10:29:11 | s1 | C.cpp:22:12:22:21 | new [void] | C.cpp:29:10:29:11 | s1 | s1 flows from $@ | C.cpp:22:12:22:21 | new [void] | new [void] |
| C.cpp:31:10:31:11 | s3 | C.cpp:24:16:24:25 | new [void] | C.cpp:31:10:31:11 | s3 | s3 flows from $@ | C.cpp:24:16:24:25 | new [void] | new [void] |
| constructors.cpp:28:12:28:12 | call to a | constructors.cpp:34:11:34:20 | call to user_input [void] | constructors.cpp:28:12:28:12 | call to a | call to a flows from $@ | constructors.cpp:34:11:34:20 | call to user_input [void] | call to user_input [void] |
| constructors.cpp:28:12:28:12 | call to a | constructors.cpp:36:11:36:20 | call to user_input [void] | constructors.cpp:28:12:28:12 | call to a | call to a flows from $@ | constructors.cpp:36:11:36:20 | call to user_input [void] | call to user_input [void] |
| constructors.cpp:29:12:29:12 | call to b | constructors.cpp:35:14:35:23 | call to user_input [void] | constructors.cpp:29:12:29:12 | call to b | call to b flows from $@ | constructors.cpp:35:14:35:23 | call to user_input [void] | call to user_input [void] |
| constructors.cpp:29:12:29:12 | call to b | constructors.cpp:36:25:36:34 | call to user_input [void] | constructors.cpp:29:12:29:12 | call to b | call to b flows from $@ | constructors.cpp:36:25:36:34 | call to user_input [void] | call to user_input [void] |
| simple.cpp:28:12:28:12 | call to a | simple.cpp:39:12:39:21 | call to user_input [void] | simple.cpp:28:12:28:12 | call to a | call to a flows from $@ | simple.cpp:39:12:39:21 | call to user_input [void] | call to user_input [void] |
| simple.cpp:28:12:28:12 | call to a | simple.cpp:41:12:41:21 | call to user_input [void] | simple.cpp:28:12:28:12 | call to a | call to a flows from $@ | simple.cpp:41:12:41:21 | call to user_input [void] | call to user_input [void] |
| simple.cpp:29:12:29:12 | call to b | simple.cpp:40:12:40:21 | call to user_input [void] | simple.cpp:29:12:29:12 | call to b | call to b flows from $@ | simple.cpp:40:12:40:21 | call to user_input [void] | call to user_input [void] |

Просмотреть файл

@ -62,8 +62,12 @@
| taint.cpp:37:12:37:20 | call to increment | taint.cpp:43:7:43:13 | global9 | |
| taint.cpp:38:13:38:16 | call to zero | taint.cpp:38:2:38:26 | ... = ... | |
| taint.cpp:38:13:38:16 | call to zero | taint.cpp:44:7:44:14 | global10 | |
| taint.cpp:71:2:71:8 | `this` parameter in MyClass | file://:0:0:0:0 | this | |
| taint.cpp:71:2:71:8 | `this` parameter in MyClass | taint.cpp:71:14:71:17 | constructor init of field a [pre-this] | |
| taint.cpp:71:14:71:17 | 0 | taint.cpp:71:14:71:17 | constructor init of field a | TAINT |
| taint.cpp:71:14:71:17 | constructor init of field a [post-this] | taint.cpp:71:20:71:30 | constructor init of field b [pre-this] | |
| taint.cpp:71:14:71:17 | constructor init of field a [pre-this] | taint.cpp:71:20:71:30 | constructor init of field b [pre-this] | |
| taint.cpp:71:20:71:30 | constructor init of field b [post-this] | file://:0:0:0:0 | this | |
| taint.cpp:71:20:71:30 | constructor init of field b [pre-this] | file://:0:0:0:0 | this | |
| taint.cpp:71:22:71:27 | call to source | taint.cpp:71:20:71:30 | constructor init of field b | TAINT |
| taint.cpp:72:3:72:3 | this [post update] | file://:0:0:0:0 | this | |
| taint.cpp:72:7:72:12 | call to source | taint.cpp:72:3:72:14 | ... = ... | |
@ -212,6 +216,8 @@
| taint.cpp:226:9:226:10 | 0 | taint.cpp:261:7:261:7 | w | |
| taint.cpp:228:11:228:11 | Unknown literal | taint.cpp:228:11:228:11 | constructor init of field t | TAINT |
| taint.cpp:228:11:228:11 | Unknown literal | taint.cpp:228:11:228:11 | constructor init of field u | TAINT |
| taint.cpp:228:11:228:11 | `this` parameter in (constructor) | taint.cpp:228:11:228:11 | constructor init of field t [pre-this] | |
| taint.cpp:228:11:228:11 | `this` parameter in (constructor) | taint.cpp:243:11:243:11 | constructor init of field t [pre-this] | |
| taint.cpp:228:11:232:2 | [...](...){...} | taint.cpp:233:7:233:7 | a | |
| taint.cpp:228:11:232:2 | {...} | taint.cpp:228:11:232:2 | [...](...){...} | |
| taint.cpp:228:12:228:12 | t | taint.cpp:228:11:232:2 | {...} | TAINT |
@ -221,12 +227,19 @@
| taint.cpp:235:11:235:11 | Unknown literal | taint.cpp:235:11:235:11 | constructor init of field t | TAINT |
| taint.cpp:235:11:235:11 | Unknown literal | taint.cpp:235:11:235:11 | constructor init of field u | TAINT |
| taint.cpp:235:11:235:11 | Unknown literal | taint.cpp:235:11:235:11 | constructor init of field v | TAINT |
| taint.cpp:235:11:235:11 | `this` parameter in (constructor) | taint.cpp:235:11:235:11 | constructor init of field t [pre-this] | |
| taint.cpp:235:11:235:11 | constructor init of field t [post-this] | taint.cpp:235:11:235:11 | constructor init of field u [pre-this] | |
| taint.cpp:235:11:235:11 | constructor init of field t [pre-this] | taint.cpp:235:11:235:11 | constructor init of field u [pre-this] | |
| taint.cpp:235:11:235:11 | constructor init of field u [post-this] | taint.cpp:235:11:235:11 | constructor init of field v [pre-this] | |
| taint.cpp:235:11:235:11 | constructor init of field u [pre-this] | taint.cpp:235:11:235:11 | constructor init of field v [pre-this] | |
| taint.cpp:235:11:239:2 | [...](...){...} | taint.cpp:240:2:240:2 | b | |
| taint.cpp:235:11:239:2 | {...} | taint.cpp:235:11:239:2 | [...](...){...} | |
| taint.cpp:235:15:235:15 | `this` parameter in operator() | file://:0:0:0:0 | this | |
| taint.cpp:238:7:238:12 | call to source | taint.cpp:238:3:238:14 | ... = ... | |
| taint.cpp:243:11:243:11 | Unknown literal | taint.cpp:243:11:243:11 | constructor init of field t | TAINT |
| taint.cpp:243:11:243:11 | Unknown literal | taint.cpp:243:11:243:11 | constructor init of field u | TAINT |
| taint.cpp:243:11:243:11 | `this` parameter in (constructor) | taint.cpp:228:11:228:11 | constructor init of field t [pre-this] | |
| taint.cpp:243:11:243:11 | `this` parameter in (constructor) | taint.cpp:243:11:243:11 | constructor init of field t [pre-this] | |
| taint.cpp:243:11:246:2 | [...](...){...} | taint.cpp:247:2:247:2 | c | |
| taint.cpp:243:11:246:2 | {...} | taint.cpp:243:11:246:2 | [...](...){...} | |
| taint.cpp:243:15:243:15 | `this` parameter in operator() | file://:0:0:0:0 | this | |

Просмотреть файл

@ -86,11 +86,11 @@ void class_field_test() {
mc1.myMethod();
sink(mc1.a);
sink(mc1.b); // tainted [NOT DETECTED]
sink(mc1.b); // tainted [NOT DETECTED with IR]
sink(mc1.c); // tainted [NOT DETECTED with IR]
sink(mc1.d); // tainted [NOT DETECTED with IR]
sink(mc2.a);
sink(mc2.b); // tainted [NOT DETECTED]
sink(mc2.b); // tainted [NOT DETECTED with IR]
sink(mc2.c); // tainted [NOT DETECTED with IR]
sink(mc2.d);
}

Просмотреть файл

@ -10,8 +10,10 @@
| taint.cpp:41:7:41:13 | global7 | taint.cpp:35:12:35:17 | call to source |
| taint.cpp:42:7:42:13 | global8 | taint.cpp:35:12:35:17 | call to source |
| taint.cpp:43:7:43:13 | global9 | taint.cpp:37:22:37:27 | call to source |
| taint.cpp:89:11:89:11 | b | taint.cpp:71:22:71:27 | call to source |
| taint.cpp:90:11:90:11 | c | taint.cpp:72:7:72:12 | call to source |
| taint.cpp:91:11:91:11 | d | taint.cpp:77:7:77:12 | call to source |
| taint.cpp:93:11:93:11 | b | taint.cpp:71:22:71:27 | call to source |
| taint.cpp:94:11:94:11 | c | taint.cpp:72:7:72:12 | call to source |
| taint.cpp:129:7:129:9 | * ... | taint.cpp:120:11:120:16 | call to source |
| taint.cpp:134:7:134:9 | * ... | taint.cpp:120:11:120:16 | call to source |

Просмотреть файл

@ -2,8 +2,10 @@
| taint.cpp:41:7:41:13 | taint.cpp:35:12:35:17 | AST only |
| taint.cpp:42:7:42:13 | taint.cpp:35:12:35:17 | AST only |
| taint.cpp:43:7:43:13 | taint.cpp:37:22:37:27 | AST only |
| taint.cpp:89:11:89:11 | taint.cpp:71:22:71:27 | AST only |
| taint.cpp:90:11:90:11 | taint.cpp:72:7:72:12 | AST only |
| taint.cpp:91:11:91:11 | taint.cpp:77:7:77:12 | AST only |
| taint.cpp:93:11:93:11 | taint.cpp:71:22:71:27 | AST only |
| taint.cpp:94:11:94:11 | taint.cpp:72:7:72:12 | AST only |
| taint.cpp:130:7:130:9 | taint.cpp:127:8:127:13 | IR only |
| taint.cpp:137:7:137:9 | taint.cpp:120:11:120:16 | AST only |

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -215,12 +215,14 @@ private module ImplCommon {
/*
* Calculation of `predicate store(Node node1, Content f, Node node2)`:
* There are three cases:
* There are four cases:
* - The base case: A direct local assignment given by `storeStep`.
* - A call to a method or constructor with two arguments, `arg1` and `arg2`,
* such the call has the side-effect `arg2.f = arg1`.
* such that the call has the side-effect `arg2.f = arg1`.
* - A call to a method that returns an object in which an argument has been
* stored.
* - A reverse step through a read when the result of the read has been
* stored into. This handles cases like `x.f1.f2 = y`.
* `storeViaSideEffect` covers the first two cases, and `storeReturn` covers
* the third case.
*/
@ -232,7 +234,8 @@ private module ImplCommon {
cached
predicate store(Node node1, Content f, Node node2) {
storeViaSideEffect(node1, f, node2) or
storeReturn(node1, f, node2)
storeReturn(node1, f, node2) or
read(node2.(PostUpdateNode).getPreUpdateNode(), f, node1.(PostUpdateNode).getPreUpdateNode())
}
private predicate storeViaSideEffect(Node node1, Content f, PostUpdateNode node2) {

Просмотреть файл

@ -215,12 +215,14 @@ private module ImplCommon {
/*
* Calculation of `predicate store(Node node1, Content f, Node node2)`:
* There are three cases:
* There are four cases:
* - The base case: A direct local assignment given by `storeStep`.
* - A call to a method or constructor with two arguments, `arg1` and `arg2`,
* such the call has the side-effect `arg2.f = arg1`.
* such that the call has the side-effect `arg2.f = arg1`.
* - A call to a method that returns an object in which an argument has been
* stored.
* - A reverse step through a read when the result of the read has been
* stored into. This handles cases like `x.f1.f2 = y`.
* `storeViaSideEffect` covers the first two cases, and `storeReturn` covers
* the third case.
*/
@ -232,7 +234,8 @@ private module ImplCommon {
cached
predicate store(Node node1, Content f, Node node2) {
storeViaSideEffect(node1, f, node2) or
storeReturn(node1, f, node2)
storeReturn(node1, f, node2) or
read(node2.(PostUpdateNode).getPreUpdateNode(), f, node1.(PostUpdateNode).getPreUpdateNode())
}
private predicate storeViaSideEffect(Node node1, Content f, PostUpdateNode node2) {

Просмотреть файл

@ -20,13 +20,19 @@ private newtype TNode =
TInstanceParameterNode(Callable c) { exists(c.getBody()) and not c.isStatic() } or
TImplicitInstanceAccess(InstanceAccessExt ia) { not ia.isExplicit(_) } or
TMallocNode(ClassInstanceExpr cie) or
TExplicitArgPostCall(Expr e) { explicitInstanceArgument(_, e) or e instanceof Argument } or
TImplicitArgPostCall(InstanceAccessExt ia) { implicitInstanceArgument(_, ia) } or
TExplicitStoreTarget(Expr e) {
exists(FieldAccess fa | instanceFieldAssign(_, fa) and e = fa.getQualifier())
TExplicitExprPostUpdate(Expr e) {
explicitInstanceArgument(_, e)
or
e instanceof Argument
or
exists(FieldAccess fa | fa.getField() instanceof InstanceField and e = fa.getQualifier())
} or
TImplicitStoreTarget(InstanceAccessExt ia) {
exists(FieldAccess fa | instanceFieldAssign(_, fa) and ia.isImplicitFieldQualifier(fa))
TImplicitExprPostUpdate(InstanceAccessExt ia) {
implicitInstanceArgument(_, ia)
or
exists(FieldAccess fa |
fa.getField() instanceof InstanceField and ia.isImplicitFieldQualifier(fa)
)
}
/**
@ -257,23 +263,13 @@ abstract private class ImplicitPostUpdateNode extends PostUpdateNode {
override string toString() { result = getPreUpdateNode().toString() + " [post update]" }
}
private class ExplicitArgPostCall extends ImplicitPostUpdateNode, TExplicitArgPostCall {
override Node getPreUpdateNode() { this = TExplicitArgPostCall(result.asExpr()) }
private class ExplicitExprPostUpdate extends ImplicitPostUpdateNode, TExplicitExprPostUpdate {
override Node getPreUpdateNode() { this = TExplicitExprPostUpdate(result.asExpr()) }
}
private class ImplicitArgPostCall extends ImplicitPostUpdateNode, TImplicitArgPostCall {
private class ImplicitExprPostUpdate extends ImplicitPostUpdateNode, TImplicitExprPostUpdate {
override Node getPreUpdateNode() {
this = TImplicitArgPostCall(result.(ImplicitInstanceAccess).getInstanceAccess())
}
}
private class ExplicitStoreTarget extends ImplicitPostUpdateNode, TExplicitStoreTarget {
override Node getPreUpdateNode() { this = TExplicitStoreTarget(result.asExpr()) }
}
private class ImplicitStoreTarget extends ImplicitPostUpdateNode, TImplicitStoreTarget {
override Node getPreUpdateNode() {
this = TImplicitStoreTarget(result.(ImplicitInstanceAccess).getInstanceAccess())
this = TImplicitExprPostUpdate(result.(ImplicitInstanceAccess).getInstanceAccess())
}
}

Просмотреть файл

@ -0,0 +1,64 @@
public class D {
Box2 boxfield;
public void f1() {
Elem e = new Elem();
Box2 b = new Box2(new Box1(null));
b.box.elem = e;
sinkWrap(b);
}
public void f2() {
Elem e = new Elem();
Box2 b = new Box2(new Box1(null));
b.box.setElem(e);
sinkWrap(b);
}
public void f3() {
Elem e = new Elem();
Box2 b = new Box2(new Box1(null));
b.getBox1().elem = e;
sinkWrap(b);
}
public void f4() {
Elem e = new Elem();
Box2 b = new Box2(new Box1(null));
b.getBox1().setElem(e);
sinkWrap(b);
}
public static void sinkWrap(Box2 b2) {
sink(b2.getBox1().getElem());
}
public void f5a() {
Elem e = new Elem();
boxfield = new Box2(new Box1(null));
boxfield.box.elem = e;
f5b();
}
private void f5b() {
sink(boxfield.box.elem);
}
public static void sink(Object o) { }
public static class Elem { }
public static class Box1 {
public Elem elem;
public Box1(Elem e) { elem = e; }
public Elem getElem() { return elem; }
public void setElem(Elem e) { elem = e; }
}
public static class Box2 {
public Box1 box;
public Box2(Box1 b) { box = b; }
public Box1 getBox1() { return box; }
public void setBox1(Box1 b) { box = b; }
}
}

Просмотреть файл

@ -19,3 +19,8 @@
| C.java:4:27:4:36 | new Elem(...) | C.java:19:10:19:11 | s2 |
| C.java:6:28:6:37 | new Elem(...) | C.java:21:10:21:11 | s4 |
| C.java:14:15:14:24 | new Elem(...) | C.java:20:10:20:11 | s3 |
| D.java:5:14:5:23 | new Elem(...) | D.java:33:10:33:31 | getElem(...) |
| D.java:12:14:12:23 | new Elem(...) | D.java:33:10:33:31 | getElem(...) |
| D.java:19:14:19:23 | new Elem(...) | D.java:33:10:33:31 | getElem(...) |
| D.java:26:14:26:23 | new Elem(...) | D.java:33:10:33:31 | getElem(...) |
| D.java:37:14:37:23 | new Elem(...) | D.java:44:10:44:26 | boxfield.box.elem |

Просмотреть файл

@ -2220,7 +2220,7 @@ public class TypeScriptASTConverter {
* ObjectExpression} with {@link ObjectPattern} and {@link SpreadElement} with {@link
* RestElement}.
*/
private Expression convertLValue(Expression e) {
private Expression convertLValue(Expression e) throws ParseError {
if (e == null) return null;
SourceLocation loc = e.getLoc();
@ -2249,8 +2249,14 @@ public class TypeScriptASTConverter {
if (e instanceof ParenthesizedExpression)
return new ParenthesizedExpression(
loc, convertLValue(((ParenthesizedExpression) e).getExpression()));
if (e instanceof SpreadElement)
return new RestElement(e.getLoc(), convertLValue(((SpreadElement) e).getArgument()));
if (e instanceof SpreadElement) {
Expression argument = convertLValue(((SpreadElement) e).getArgument());
if (argument instanceof AssignmentPattern) {
throw new ParseError(
"Rest patterns cannot have a default value", argument.getLoc().getStart());
}
return new RestElement(e.getLoc(), argument);
}
return e;
}

Просмотреть файл

@ -0,0 +1,3 @@
var a: number[];
var x: number[];
[...x = a] = a; // Error, rest element cannot have initializer

Просмотреть файл

@ -0,0 +1,42 @@
#10000=@"/restPatternWithDefault.ts;sourcefile"
files(#10000,"/restPatternWithDefault.ts","restPatternWithDefault","ts",0)
#10001=@"/;folder"
folders(#10001,"/","")
containerparent(#10001,#10000)
#10002=@"loc,{#10000},0,0,0,0"
locations_default(#10002,#10000,0,0,0,0)
hasLocation(#10000,#10002)
#20000=@"global_scope"
scopes(#20000,0)
#20001=@"script;{#10000},1,1"
toplevels(#20001,0)
#20002=@"loc,{#10000},1,1,1,1"
locations_default(#20002,#10000,1,1,1,1)
hasLocation(#20001,#20002)
#20003=*
jsParseErrors(#20003,#20001,"Error: Rest patterns cannot have a default value","[...x = a] = a; // Error, rest element cannot have initializer
")
#20004=@"loc,{#10000},3,5,3,5"
locations_default(#20004,#10000,3,5,3,5)
hasLocation(#20003,#20004)
#20005=*
lines(#20005,#20001,"var a: number[];","
")
#20006=@"loc,{#10000},1,1,1,16"
locations_default(#20006,#10000,1,1,1,16)
hasLocation(#20005,#20006)
#20007=*
lines(#20007,#20001,"var x: number[];","
")
#20008=@"loc,{#10000},2,1,2,16"
locations_default(#20008,#10000,2,1,2,16)
hasLocation(#20007,#20008)
#20009=*
lines(#20009,#20001,"[...x = a] = a; // Error, rest element cannot have initializer","
")
#20010=@"loc,{#10000},3,1,3,63"
locations_default(#20010,#10000,3,1,3,63)
hasLocation(#20009,#20010)
numlines(#20001,3,0,0)
numlines(#10000,3,0,0)
filetype(#10000,"typescript")

Просмотреть файл

@ -1,181 +0,0 @@
| 3 | split1 | test.py:3:8:3:11 | ControlFlowNode for cond | 2 |
| 5 | split1 | test.py:5:8:5:11 | ControlFlowNode for cond | 1 |
| 5 | split1 | test.py:5:8:5:11 | ControlFlowNode for cond | 1 |
| 9 | dont_split1 | test.py:9:8:9:11 | ControlFlowNode for cond | 2 |
| 12 | dont_split1 | test.py:12:8:12:11 | ControlFlowNode for cond | 2 |
| 16 | dont_split2 | test.py:16:8:16:11 | ControlFlowNode for cond | 2 |
| 19 | dont_split2 | test.py:19:8:19:11 | ControlFlowNode for cond | 2 |
| 29 | split2 | test.py:29:8:29:8 | ControlFlowNode for x | 1 |
| 29 | split2 | test.py:29:8:29:8 | ControlFlowNode for x | 1 |
| 38 | unclear_split3 | test.py:38:8:38:11 | ControlFlowNode for cond | 2 |
| 40 | unclear_split3 | test.py:40:8:40:8 | ControlFlowNode for x | 1 |
| 40 | unclear_split3 | test.py:40:8:40:8 | ControlFlowNode for x | 2 |
| 44 | split4 | test.py:44:8:44:16 | ControlFlowNode for Compare | 2 |
| 46 | split4 | test.py:46:10:46:10 | ControlFlowNode for b | 2 |
| 50 | split_carefully_5 | test.py:50:8:50:16 | ControlFlowNode for Compare | 2 |
| 52 | split_carefully_5 | test.py:52:8:52:8 | ControlFlowNode for x | 2 |
| 58 | dont_split_globals | test.py:58:8:58:11 | ControlFlowNode for cond | 2 |
| 61 | dont_split_globals | test.py:61:8:61:11 | ControlFlowNode for cond | 2 |
| 61 | dont_split_globals | test.py:61:8:61:11 | ControlFlowNode for cond | 2 |
| 65 | limit_splitting1 | test.py:65:8:65:16 | ControlFlowNode for Compare | 2 |
| 66 | limit_splitting1 | test.py:66:8:66:16 | ControlFlowNode for Compare | 2 |
| 67 | limit_splitting1 | test.py:67:8:67:16 | ControlFlowNode for Compare | 2 |
| 68 | limit_splitting1 | test.py:68:8:68:16 | ControlFlowNode for Compare | 2 |
| 78 | limit_splitting2 | test.py:78:8:78:8 | ControlFlowNode for a | 2 |
| 80 | limit_splitting2 | test.py:80:8:80:8 | ControlFlowNode for b | 2 |
| 80 | limit_splitting2 | test.py:80:8:80:8 | ControlFlowNode for b | 2 |
| 82 | limit_splitting2 | test.py:82:8:82:8 | ControlFlowNode for c | 2 |
| 82 | limit_splitting2 | test.py:82:8:82:8 | ControlFlowNode for c | 2 |
| 82 | limit_splitting2 | test.py:82:8:82:8 | ControlFlowNode for c | 2 |
| 82 | limit_splitting2 | test.py:82:8:82:8 | ControlFlowNode for c | 2 |
| 84 | limit_splitting2 | test.py:84:8:84:8 | ControlFlowNode for d | 2 |
| 84 | limit_splitting2 | test.py:84:8:84:8 | ControlFlowNode for d | 2 |
| 84 | limit_splitting2 | test.py:84:8:84:8 | ControlFlowNode for d | 2 |
| 84 | limit_splitting2 | test.py:84:8:84:8 | ControlFlowNode for d | 2 |
| 87 | limit_splitting2 | test.py:87:8:87:8 | ControlFlowNode for a | 1 |
| 87 | limit_splitting2 | test.py:87:8:87:8 | ControlFlowNode for a | 1 |
| 87 | limit_splitting2 | test.py:87:8:87:8 | ControlFlowNode for a | 1 |
| 87 | limit_splitting2 | test.py:87:8:87:8 | ControlFlowNode for a | 1 |
| 89 | limit_splitting2 | test.py:89:8:89:8 | ControlFlowNode for b | 1 |
| 89 | limit_splitting2 | test.py:89:8:89:8 | ControlFlowNode for b | 1 |
| 89 | limit_splitting2 | test.py:89:8:89:8 | ControlFlowNode for b | 1 |
| 89 | limit_splitting2 | test.py:89:8:89:8 | ControlFlowNode for b | 1 |
| 92 | limit_splitting2 | test.py:92:8:92:8 | ControlFlowNode for c | 2 |
| 92 | limit_splitting2 | test.py:92:8:92:8 | ControlFlowNode for c | 2 |
| 92 | limit_splitting2 | test.py:92:8:92:8 | ControlFlowNode for c | 2 |
| 92 | limit_splitting2 | test.py:92:8:92:8 | ControlFlowNode for c | 2 |
| 94 | limit_splitting2 | test.py:94:8:94:8 | ControlFlowNode for d | 2 |
| 94 | limit_splitting2 | test.py:94:8:94:8 | ControlFlowNode for d | 2 |
| 94 | limit_splitting2 | test.py:94:8:94:8 | ControlFlowNode for d | 2 |
| 94 | limit_splitting2 | test.py:94:8:94:8 | ControlFlowNode for d | 2 |
| 103 | split_on_numbers | test.py:103:8:103:8 | ControlFlowNode for x | 1 |
| 103 | split_on_numbers | test.py:103:8:103:8 | ControlFlowNode for x | 1 |
| 113 | split_try_except_else | test.py:113:8:113:8 | ControlFlowNode for x | 1 |
| 113 | split_try_except_else | test.py:113:8:113:8 | ControlFlowNode for x | 1 |
| 126 | logging | test.py:126:8:126:14 | ControlFlowNode for module1 | 1 |
| 126 | logging | test.py:126:8:126:14 | ControlFlowNode for module1 | 1 |
| 136 | split5 | test.py:136:8:136:12 | ControlFlowNode for UnaryExpr | 1 |
| 136 | split5 | test.py:136:8:136:12 | ControlFlowNode for UnaryExpr | 1 |
| 145 | split6 | test.py:145:8:145:16 | ControlFlowNode for UnaryExpr | 1 |
| 145 | split6 | test.py:145:8:145:16 | ControlFlowNode for UnaryExpr | 1 |
| 154 | split7 | test.py:154:8:154:8 | ControlFlowNode for x | 1 |
| 154 | split7 | test.py:154:8:154:8 | ControlFlowNode for x | 1 |
| 158 | split8 | test.py:158:8:158:11 | ControlFlowNode for cond | 2 |
| 162 | split8 | test.py:162:8:162:15 | ControlFlowNode for UnaryExpr | 1 |
| 162 | split8 | test.py:162:8:162:15 | ControlFlowNode for UnaryExpr | 1 |
| 163 | split8 | test.py:163:12:163:12 | ControlFlowNode for t | 1 |
| 168 | split9 | test.py:168:8:168:18 | ControlFlowNode for Compare | 2 |
| 172 | split9 | test.py:172:8:172:22 | ControlFlowNode for Compare | 1 |
| 172 | split9 | test.py:172:8:172:22 | ControlFlowNode for Compare | 1 |
| 178 | split10 | test.py:178:8:178:10 | ControlFlowNode for var | 2 |
| 182 | split10 | test.py:182:8:182:22 | ControlFlowNode for Compare | 1 |
| 182 | split10 | test.py:182:8:182:22 | ControlFlowNode for Compare | 2 |
| 188 | split11 | test.py:188:8:188:18 | ControlFlowNode for Compare | 2 |
| 192 | split11 | test.py:192:8:192:10 | ControlFlowNode for var | 1 |
| 192 | split11 | test.py:192:8:192:10 | ControlFlowNode for var | 2 |
| 198 | dont_split_on_unrelated_variables | test.py:198:8:198:19 | ControlFlowNode for Compare | 2 |
| 202 | dont_split_on_unrelated_variables | test.py:202:8:202:23 | ControlFlowNode for Compare | 2 |
| 213 | split12 | test.py:213:8:213:8 | ControlFlowNode for x | 1 |
| 213 | split12 | test.py:213:8:213:8 | ControlFlowNode for x | 1 |
| 218 | split13 | test.py:218:8:218:10 | ControlFlowNode for var | 2 |
| 225 | split13 | test.py:225:12:225:14 | ControlFlowNode for var | 1 |
| 225 | split13 | test.py:225:12:225:14 | ControlFlowNode for var | 1 |
| 225 | split13 | test.py:225:12:225:14 | ControlFlowNode for var | 1 |
| 236 | split14 | test.py:236:8:236:15 | ControlFlowNode for UnaryExpr | 1 |
| 236 | split14 | test.py:236:8:236:15 | ControlFlowNode for UnaryExpr | 1 |
| 241 | split15 | test.py:241:8:241:10 | ControlFlowNode for var | 2 |
| 243 | split15 | test.py:243:8:243:14 | ControlFlowNode for UnaryExpr | 1 |
| 243 | split15 | test.py:243:8:243:14 | ControlFlowNode for UnaryExpr | 1 |
| 243 | split15 | test.py:243:19:243:28 | ControlFlowNode for Attribute | 2 |
| 248 | split16 | test.py:248:8:248:11 | ControlFlowNode for cond | 2 |
| 250 | split16 | test.py:250:8:250:8 | ControlFlowNode for x | 1 |
| 250 | split16 | test.py:250:8:250:8 | ControlFlowNode for x | 1 |
| 254 | dont_split_on_different_ssa | test.py:254:8:254:10 | ControlFlowNode for var | 2 |
| 259 | dont_split_on_different_ssa | test.py:259:8:259:22 | ControlFlowNode for Compare | 2 |
| 266 | split17 | test.py:266:8:266:10 | ControlFlowNode for var | 2 |
| 270 | split17 | test.py:270:8:270:14 | ControlFlowNode for UnaryExpr | 1 |
| 270 | split17 | test.py:270:8:270:14 | ControlFlowNode for UnaryExpr | 1 |
| 274 | split17 | test.py:274:8:274:10 | ControlFlowNode for var | 1 |
| 274 | split17 | test.py:274:8:274:10 | ControlFlowNode for var | 1 |
| 278 | split17 | test.py:278:8:278:10 | ControlFlowNode for var | 1 |
| 278 | split17 | test.py:278:8:278:10 | ControlFlowNode for var | 1 |
| 282 | split17 | test.py:282:8:282:10 | ControlFlowNode for var | 1 |
| 282 | split17 | test.py:282:8:282:10 | ControlFlowNode for var | 1 |
| 289 | split18 | test.py:289:8:289:10 | ControlFlowNode for var | 2 |
| 293 | split18 | test.py:293:8:293:22 | ControlFlowNode for Compare | 1 |
| 293 | split18 | test.py:293:8:293:22 | ControlFlowNode for Compare | 2 |
| 297 | split18 | test.py:297:8:297:18 | ControlFlowNode for Compare | 1 |
| 297 | split18 | test.py:297:8:297:18 | ControlFlowNode for Compare | 1 |
| 297 | split18 | test.py:297:8:297:18 | ControlFlowNode for Compare | 1 |
| 301 | split18 | test.py:301:8:301:10 | ControlFlowNode for var | 1 |
| 301 | split18 | test.py:301:8:301:10 | ControlFlowNode for var | 1 |
| 301 | split18 | test.py:301:8:301:10 | ControlFlowNode for var | 1 |
| 305 | split18 | test.py:305:8:305:10 | ControlFlowNode for var | 1 |
| 305 | split18 | test.py:305:8:305:10 | ControlFlowNode for var | 1 |
| 305 | split18 | test.py:305:8:305:10 | ControlFlowNode for var | 1 |
| 311 | split_on_boolean_only | test.py:311:8:311:8 | ControlFlowNode for x | 2 |
| 315 | split_on_boolean_only | test.py:315:8:315:20 | ControlFlowNode for Compare | 1 |
| 315 | split_on_boolean_only | test.py:315:8:315:20 | ControlFlowNode for Compare | 2 |
| 319 | split_on_boolean_only | test.py:319:8:319:8 | ControlFlowNode for x | 1 |
| 319 | split_on_boolean_only | test.py:319:8:319:8 | ControlFlowNode for x | 1 |
| 319 | split_on_boolean_only | test.py:319:8:319:8 | ControlFlowNode for x | 1 |
| 325 | split_on_none_aswell | test.py:325:8:325:8 | ControlFlowNode for x | 2 |
| 329 | split_on_none_aswell | test.py:329:8:329:20 | ControlFlowNode for Compare | 1 |
| 329 | split_on_none_aswell | test.py:329:8:329:20 | ControlFlowNode for Compare | 2 |
| 333 | split_on_none_aswell | test.py:333:8:333:16 | ControlFlowNode for Compare | 1 |
| 333 | split_on_none_aswell | test.py:333:8:333:16 | ControlFlowNode for Compare | 1 |
| 333 | split_on_none_aswell | test.py:333:8:333:16 | ControlFlowNode for Compare | 1 |
| 339 | split_on_or_defn | test.py:339:8:339:10 | ControlFlowNode for var | 2 |
| 341 | split_on_or_defn | test.py:341:8:341:14 | ControlFlowNode for UnaryExpr | 1 |
| 341 | split_on_or_defn | test.py:341:8:341:14 | ControlFlowNode for UnaryExpr | 1 |
| 341 | split_on_or_defn | test.py:341:19:341:26 | ControlFlowNode for Attribute | 2 |
| 350 | split_on_exception | test.py:350:8:350:15 | ControlFlowNode for UnaryExpr | 1 |
| 350 | split_on_exception | test.py:350:8:350:15 | ControlFlowNode for UnaryExpr | 1 |
| 354 | partially_useful_split | test.py:354:8:354:11 | ControlFlowNode for cond | 2 |
| 359 | partially_useful_split | test.py:359:8:359:8 | ControlFlowNode for x | 1 |
| 359 | partially_useful_split | test.py:359:8:359:8 | ControlFlowNode for x | 2 |
| 365 | dont_split_not_useful | test.py:365:8:365:11 | ControlFlowNode for cond | 2 |
| 370 | dont_split_not_useful | test.py:370:8:370:8 | ControlFlowNode for y | 2 |
| 377 | f | test.py:377:8:377:8 | ControlFlowNode for x | 2 |
| 377 | f | test.py:377:14:377:14 | ControlFlowNode for y | 2 |
| 379 | f | test.py:379:8:379:19 | ControlFlowNode for UnaryExpr | 1 |
| 379 | f | test.py:379:8:379:19 | ControlFlowNode for UnaryExpr | 1 |
| 379 | f | test.py:379:8:379:19 | ControlFlowNode for UnaryExpr | 1 |
| 379 | f | test.py:379:13:379:13 | ControlFlowNode for x | 1 |
| 379 | f | test.py:379:13:379:13 | ControlFlowNode for x | 1 |
| 379 | f | test.py:379:18:379:18 | ControlFlowNode for y | 2 |
| 384 | g | test.py:384:8:384:8 | ControlFlowNode for x | 2 |
| 384 | g | test.py:384:14:384:14 | ControlFlowNode for y | 2 |
| 386 | g | test.py:386:8:386:8 | ControlFlowNode for x | 1 |
| 386 | g | test.py:386:8:386:8 | ControlFlowNode for x | 1 |
| 386 | g | test.py:386:13:386:13 | ControlFlowNode for y | 2 |
| 393 | h | test.py:393:10:393:10 | ControlFlowNode for x | 2 |
| 394 | h | test.py:394:10:394:14 | ControlFlowNode for UnaryExpr | 2 |
| 395 | h | test.py:395:10:395:10 | ControlFlowNode for x | 1 |
| 395 | h | test.py:395:10:395:10 | ControlFlowNode for x | 1 |
| 396 | h | test.py:396:10:396:17 | ControlFlowNode for Attribute() | 2 |
| 401 | j | test.py:401:8:401:8 | ControlFlowNode for a | 2 |
| 401 | j | test.py:401:13:401:13 | ControlFlowNode for b | 2 |
| 402 | j | test.py:402:12:402:12 | ControlFlowNode for a | 1 |
| 402 | j | test.py:402:12:402:12 | ControlFlowNode for a | 1 |
| 414 | split_on_strings | test.py:414:8:414:16 | ControlFlowNode for Compare | 2 |
| 414 | split_on_strings | test.py:414:8:414:16 | ControlFlowNode for Compare | 2 |
| 420 | scipy_stylee | test.py:420:12:420:31 | ControlFlowNode for Compare | 2 |
| 421 | scipy_stylee | test.py:421:8:421:15 | ControlFlowNode for Compare | 2 |
| 423 | scipy_stylee | test.py:423:10:423:17 | ControlFlowNode for Compare | 2 |
| 425 | scipy_stylee | test.py:425:10:425:17 | ControlFlowNode for Compare | 2 |
| 433 | odasa_6674 | test.py:433:8:433:29 | ControlFlowNode for dont_understand_this() | 2 |
| 439 | odasa_6674 | test.py:439:12:439:20 | ControlFlowNode for UnaryExpr | 1 |
| 439 | odasa_6674 | test.py:439:12:439:20 | ControlFlowNode for UnaryExpr | 1 |
| 447 | odasa_6625 | test.py:447:8:447:25 | ControlFlowNode for Attribute() | 2 |
| 447 | odasa_6625 | test.py:447:30:447:47 | ControlFlowNode for Attribute() | 2 |
| 449 | odasa_6625 | test.py:449:8:449:18 | ControlFlowNode for Compare | 2 |
| 454 | avoid_redundant_split | test.py:454:8:454:8 | ControlFlowNode for a | 2 |
| 458 | avoid_redundant_split | test.py:458:8:458:8 | ControlFlowNode for x | 1 |
| 458 | avoid_redundant_split | test.py:458:8:458:8 | ControlFlowNode for x | 2 |
| 460 | avoid_redundant_split | test.py:460:8:460:8 | ControlFlowNode for x | 1 |
| 460 | avoid_redundant_split | test.py:460:8:460:8 | ControlFlowNode for x | 2 |
| 468 | avoid_redundant_split | test.py:468:8:468:10 | ControlFlowNode for var | 1 |
| 468 | avoid_redundant_split | test.py:468:8:468:10 | ControlFlowNode for var | 1 |
| 468 | avoid_redundant_split | test.py:468:8:468:10 | ControlFlowNode for var | 1 |
| 468 | avoid_redundant_split | test.py:468:8:468:10 | ControlFlowNode for var | 1 |

Просмотреть файл

@ -1,9 +0,0 @@
import python
from ControlFlowNode p, Scope s
where
p.getScope() = s and
(exists (p.getATrueSuccessor()) or exists(p.getAFalseSuccessor())) and
s instanceof Function
select
p.getLocation().getStartLine(), s.getName(), p, strictcount(p.getASuccessor())

Просмотреть файл

@ -1,25 +0,0 @@
| compare.py | 3 | compare.py:3:5:3:23 | ControlFlowNode for Assert | Entry node for Function contains1 |
| compare.py | 7 | compare.py:7:5:7:27 | ControlFlowNode for Assert | Entry node for Function contains2 |
| true_false_test.py | 14 | true_false_test.py:14:12:14:16 | ControlFlowNode for cond4 | ControlFlowNode for Pass |
| true_false_test.py | 15 | true_false_test.py:15:13:15:17 | ControlFlowNode for true4 | ControlFlowNode for Pass |
| true_false_test.py | 15 | true_false_test.py:15:13:15:19 | ControlFlowNode for true4() | ControlFlowNode for Pass |
| true_false_test.py | 17 | true_false_test.py:17:13:17:18 | ControlFlowNode for false4 | ControlFlowNode for Pass |
| true_false_test.py | 17 | true_false_test.py:17:13:17:20 | ControlFlowNode for false4() | ControlFlowNode for Pass |
| true_false_test.py | 19 | true_false_test.py:19:9:19:12 | ControlFlowNode for Pass | Entry node for Function func |
| true_false_test.py | 22 | true_false_test.py:22:13:22:17 | ControlFlowNode for true5 | ControlFlowNode for ExceptStmt |
| true_false_test.py | 22 | true_false_test.py:22:13:22:19 | ControlFlowNode for true5() | ControlFlowNode for ExceptStmt |
| true_false_test.py | 35 | true_false_test.py:35:18:35:26 | ControlFlowNode for range() | Entry node for Function func |
| true_false_test.py | 48 | true_false_test.py:48:17:48:24 | ControlFlowNode for true12() | ControlFlowNode for ExceptStmt |
| true_false_test.py | 48 | true_false_test.py:48:17:48:24 | ControlFlowNode for true12() | Entry node for Function func |
| true_succ.py | 8 | true_succ.py:8:21:8:39 | ControlFlowNode for open() | ControlFlowNode for ExceptStmt |
| true_succ.py | 8 | true_succ.py:8:21:8:39 | ControlFlowNode for open() | ControlFlowNode for f |
| true_succ.py | 9 | true_succ.py:9:17:9:23 | ControlFlowNode for Attribute | ControlFlowNode for ExceptStmt |
| true_succ.py | 9 | true_succ.py:9:17:9:23 | ControlFlowNode for Attribute | ControlFlowNode for f |
| true_succ.py | 9 | true_succ.py:9:17:9:32 | ControlFlowNode for Attribute() | ControlFlowNode for ExceptStmt |
| true_succ.py | 9 | true_succ.py:9:17:9:32 | ControlFlowNode for Attribute() | ControlFlowNode for f |
| true_succ.py | 11 | true_succ.py:11:17:11:19 | ControlFlowNode for sys | ControlFlowNode for f |
| true_succ.py | 11 | true_succ.py:11:17:11:24 | ControlFlowNode for Attribute | ControlFlowNode for f |
| true_succ.py | 11 | true_succ.py:11:17:11:27 | ControlFlowNode for Attribute() | ControlFlowNode for f |
| true_succ.py | 13 | true_succ.py:13:16:13:28 | ControlFlowNode for Compare | Entry node for Function example |
| true_succ.py | 13 | true_succ.py:13:31:13:39 | ControlFlowNode for Attribute() | Entry node for Function example |
| true_succ.py | 13 | true_succ.py:13:31:13:39 | ControlFlowNode for Attribute() | Entry node for Function example |

Просмотреть файл

@ -1,16 +0,0 @@
/**
* @name TrueFalseSuccessors Test
* @description Tests true/false successors
* @kind table
* @problem.severity warning
*/
import python
from ControlFlowNode p, ControlFlowNode s
where
s = p.getAnExceptionalSuccessor()
or
// Add fake edges for node that raise out of scope
p.isExceptionalExit(_) and s = p.getScope().getEntryNode()
select p.getLocation().getFile().getShortName(), p.getLocation().getStartLine(), p, s.toString()

Просмотреть файл

@ -1,90 +0,0 @@
| boolops.py | 2 | boolops.py:2:9:6:25 | ControlFlowNode for UnaryExpr | ControlFlowNode for p | False |
| boolops.py | 2 | boolops.py:2:9:6:25 | ControlFlowNode for UnaryExpr | ControlFlowNode for p | True |
| boolops.py | 3 | boolops.py:3:13:3:13 | ControlFlowNode for x | ControlFlowNode for BoolExpr | True |
| boolops.py | 3 | boolops.py:3:13:3:13 | ControlFlowNode for x | ControlFlowNode for UnaryExpr | False |
| boolops.py | 4 | boolops.py:4:17:6:24 | ControlFlowNode for UnaryExpr | ControlFlowNode for UnaryExpr | False |
| boolops.py | 4 | boolops.py:4:17:6:24 | ControlFlowNode for UnaryExpr | ControlFlowNode for UnaryExpr | True |
| boolops.py | 5 | boolops.py:5:22:5:23 | ControlFlowNode for y1 | ControlFlowNode for UnaryExpr | True |
| boolops.py | 5 | boolops.py:5:22:5:23 | ControlFlowNode for y1 | ControlFlowNode for z1 | False |
| boolops.py | 6 | boolops.py:6:22:6:23 | ControlFlowNode for z1 | ControlFlowNode for UnaryExpr | False |
| boolops.py | 6 | boolops.py:6:22:6:23 | ControlFlowNode for z1 | ControlFlowNode for UnaryExpr | True |
| boolops.py | 7 | boolops.py:7:8:11:23 | ControlFlowNode for UnaryExpr | ControlFlowNode for Str | False |
| boolops.py | 7 | boolops.py:7:8:11:23 | ControlFlowNode for UnaryExpr | ControlFlowNode for Str | True |
| boolops.py | 8 | boolops.py:8:12:8:12 | ControlFlowNode for x | ControlFlowNode for BoolExpr | False |
| boolops.py | 8 | boolops.py:8:12:8:12 | ControlFlowNode for x | ControlFlowNode for UnaryExpr | True |
| boolops.py | 9 | boolops.py:9:15:11:22 | ControlFlowNode for UnaryExpr | ControlFlowNode for UnaryExpr | False |
| boolops.py | 9 | boolops.py:9:15:11:22 | ControlFlowNode for UnaryExpr | ControlFlowNode for UnaryExpr | True |
| boolops.py | 10 | boolops.py:10:20:10:21 | ControlFlowNode for y2 | ControlFlowNode for UnaryExpr | False |
| boolops.py | 10 | boolops.py:10:20:10:21 | ControlFlowNode for y2 | ControlFlowNode for z2 | True |
| boolops.py | 11 | boolops.py:11:20:11:21 | ControlFlowNode for z2 | ControlFlowNode for UnaryExpr | False |
| boolops.py | 11 | boolops.py:11:20:11:21 | ControlFlowNode for z2 | ControlFlowNode for UnaryExpr | True |
| compare.py | 3 | compare.py:3:12:3:23 | ControlFlowNode for Compare | ControlFlowNode for Assert | False |
| compare.py | 3 | compare.py:3:12:3:23 | ControlFlowNode for Compare | ControlFlowNode for Assert | True |
| compare.py | 7 | compare.py:7:12:7:27 | ControlFlowNode for Compare | ControlFlowNode for Assert | False |
| compare.py | 7 | compare.py:7:12:7:27 | ControlFlowNode for Compare | ControlFlowNode for Assert | True |
| compare.py | 11 | compare.py:11:8:11:19 | ControlFlowNode for Compare | ControlFlowNode for FloatLiteral | False |
| compare.py | 11 | compare.py:11:8:11:19 | ControlFlowNode for Compare | ControlFlowNode for IntegerLiteral | True |
| compare.py | 17 | compare.py:17:8:17:23 | ControlFlowNode for Compare | ControlFlowNode for FloatLiteral | False |
| compare.py | 17 | compare.py:17:8:17:23 | ControlFlowNode for Compare | ControlFlowNode for IntegerLiteral | True |
| true_false_test.py | 3 | true_false_test.py:3:8:3:12 | ControlFlowNode for cond1 | ControlFlowNode for cond2 | False |
| true_false_test.py | 3 | true_false_test.py:3:8:3:12 | ControlFlowNode for cond1 | ControlFlowNode for true1 | True |
| true_false_test.py | 5 | true_false_test.py:5:8:5:12 | ControlFlowNode for cond2 | ControlFlowNode for Pass | True |
| true_false_test.py | 5 | true_false_test.py:5:8:5:12 | ControlFlowNode for cond2 | ControlFlowNode for false2 | False |
| true_false_test.py | 9 | true_false_test.py:9:8:9:12 | ControlFlowNode for cond3 | ControlFlowNode for false3 | False |
| true_false_test.py | 9 | true_false_test.py:9:8:9:12 | ControlFlowNode for cond3 | ControlFlowNode for true3 | True |
| true_false_test.py | 14 | true_false_test.py:14:12:14:16 | ControlFlowNode for cond4 | ControlFlowNode for false4 | False |
| true_false_test.py | 14 | true_false_test.py:14:12:14:16 | ControlFlowNode for cond4 | ControlFlowNode for true4 | True |
| true_false_test.py | 20 | true_false_test.py:20:8:20:12 | ControlFlowNode for cond5 | ControlFlowNode for Try | True |
| true_false_test.py | 20 | true_false_test.py:20:8:20:12 | ControlFlowNode for cond5 | ControlFlowNode for false5 | False |
| true_false_test.py | 27 | true_false_test.py:27:8:27:12 | ControlFlowNode for cond6 | ControlFlowNode for cond7 | True |
| true_false_test.py | 27 | true_false_test.py:27:8:27:12 | ControlFlowNode for cond6 | ControlFlowNode for false6 | False |
| true_false_test.py | 28 | true_false_test.py:28:12:28:16 | ControlFlowNode for cond7 | ControlFlowNode for false7 | False |
| true_false_test.py | 28 | true_false_test.py:28:12:28:16 | ControlFlowNode for cond7 | ControlFlowNode for true7 | True |
| true_false_test.py | 34 | true_false_test.py:34:8:34:12 | ControlFlowNode for cond8 | ControlFlowNode for false8 | False |
| true_false_test.py | 34 | true_false_test.py:34:8:34:12 | ControlFlowNode for cond8 | ControlFlowNode for range | True |
| true_false_test.py | 39 | true_false_test.py:39:8:39:12 | ControlFlowNode for cond9 | ControlFlowNode for While | True |
| true_false_test.py | 39 | true_false_test.py:39:8:39:12 | ControlFlowNode for cond9 | ControlFlowNode for false9 | False |
| true_false_test.py | 40 | true_false_test.py:40:15:40:20 | ControlFlowNode for cond10 | ControlFlowNode for false10 | False |
| true_false_test.py | 40 | true_false_test.py:40:15:40:20 | ControlFlowNode for cond10 | ControlFlowNode for true10 | True |
| true_false_test.py | 45 | true_false_test.py:45:11:45:11 | ControlFlowNode for IntegerLiteral | ControlFlowNode for cond12 | True |
| true_false_test.py | 46 | true_false_test.py:46:12:46:17 | ControlFlowNode for cond12 | ControlFlowNode for Try | True |
| true_false_test.py | 46 | true_false_test.py:46:12:46:17 | ControlFlowNode for cond12 | ControlFlowNode for While | False |
| true_false_test.py | 55 | true_false_test.py:55:11:55:16 | ControlFlowNode for condw1 | ControlFlowNode for truew2 | True |
| true_false_test.py | 55 | true_false_test.py:55:11:55:16 | ControlFlowNode for condw1 | Exit node for Function func2 | False |
| true_false_test.py | 59 | true_false_test.py:59:8:59:13 | ControlFlowNode for condi1 | ControlFlowNode for truei1 | True |
| true_false_test.py | 59 | true_false_test.py:59:8:59:13 | ControlFlowNode for condi1 | Exit node for Function func3 | False |
| true_false_test.py | 63 | true_false_test.py:63:11:63:14 | ControlFlowNode for True | ControlFlowNode for no_branch | True |
| true_false_test.py | 69 | true_false_test.py:69:11:69:14 | ControlFlowNode for True | ControlFlowNode for Break | True |
| true_false_test.py | 71 | true_false_test.py:71:8:71:13 | ControlFlowNode for cond11 | ControlFlowNode for true11 | True |
| true_false_test.py | 71 | true_false_test.py:71:8:71:13 | ControlFlowNode for cond11 | Exit node for Function func5 | False |
| true_false_test.py | 75 | true_false_test.py:75:8:75:13 | ControlFlowNode for cond13 | ControlFlowNode for cond13a | False |
| true_false_test.py | 75 | true_false_test.py:75:8:75:13 | ControlFlowNode for cond13 | ControlFlowNode for true13 | True |
| true_false_test.py | 75 | true_false_test.py:75:18:75:24 | ControlFlowNode for cond13a | ControlFlowNode for BoolExpr | False |
| true_false_test.py | 75 | true_false_test.py:75:18:75:24 | ControlFlowNode for cond13a | ControlFlowNode for true13 | True |
| true_false_test.py | 77 | true_false_test.py:77:8:77:13 | ControlFlowNode for cond14 | ControlFlowNode for cond14a | True |
| true_false_test.py | 77 | true_false_test.py:77:8:77:13 | ControlFlowNode for cond14 | ControlFlowNode for cond15 | False |
| true_false_test.py | 77 | true_false_test.py:77:19:77:25 | ControlFlowNode for cond14a | ControlFlowNode for cond15 | False |
| true_false_test.py | 77 | true_false_test.py:77:19:77:25 | ControlFlowNode for cond14a | ControlFlowNode for true14 | True |
| true_false_test.py | 79 | true_false_test.py:79:15:79:20 | ControlFlowNode for cond15 | ControlFlowNode for false15 | False |
| true_false_test.py | 79 | true_false_test.py:79:15:79:20 | ControlFlowNode for cond15 | ControlFlowNode for true15 | True |
| true_false_test.py | 80 | true_false_test.py:80:15:80:20 | ControlFlowNode for cond16 | ControlFlowNode for cond17 | False |
| true_false_test.py | 80 | true_false_test.py:80:15:80:20 | ControlFlowNode for cond16 | ControlFlowNode for true16 | True |
| true_false_test.py | 80 | true_false_test.py:80:25:80:30 | ControlFlowNode for cond17 | ControlFlowNode for false16 | False |
| true_false_test.py | 80 | true_false_test.py:80:25:80:30 | ControlFlowNode for cond17 | ControlFlowNode for true16 | True |
| true_false_test.py | 81 | true_false_test.py:81:15:81:20 | ControlFlowNode for cond18 | ControlFlowNode for cond19 | True |
| true_false_test.py | 81 | true_false_test.py:81:15:81:20 | ControlFlowNode for cond18 | ControlFlowNode for false18 | False |
| true_false_test.py | 81 | true_false_test.py:81:26:81:31 | ControlFlowNode for cond19 | ControlFlowNode for false18 | False |
| true_false_test.py | 81 | true_false_test.py:81:26:81:31 | ControlFlowNode for cond19 | ControlFlowNode for true18 | True |
| true_false_test.py | 84 | true_false_test.py:84:11:84:16 | ControlFlowNode for cond20 | ControlFlowNode for Yield | True |
| true_false_test.py | 84 | true_false_test.py:84:11:84:16 | ControlFlowNode for cond20 | ControlFlowNode for cond21 | False |
| true_false_test.py | 84 | true_false_test.py:84:21:84:26 | ControlFlowNode for cond21 | ControlFlowNode for Yield | True |
| true_false_test.py | 84 | true_false_test.py:84:21:84:26 | ControlFlowNode for cond21 | ControlFlowNode for cond22 | False |
| true_false_test.py | 85 | true_false_test.py:85:11:85:16 | ControlFlowNode for cond23 | ControlFlowNode for Yield | False |
| true_false_test.py | 85 | true_false_test.py:85:11:85:16 | ControlFlowNode for cond23 | ControlFlowNode for cond24 | True |
| true_false_test.py | 85 | true_false_test.py:85:22:85:27 | ControlFlowNode for cond24 | ControlFlowNode for Yield | False |
| true_false_test.py | 85 | true_false_test.py:85:22:85:27 | ControlFlowNode for cond24 | ControlFlowNode for cond25 | True |
| true_succ.py | 4 | true_succ.py:4:8:4:15 | ControlFlowNode for filename | ControlFlowNode for Str | False |
| true_succ.py | 4 | true_succ.py:4:8:4:15 | ControlFlowNode for filename | ControlFlowNode for Try | True |
| true_succ.py | 13 | true_succ.py:13:16:13:28 | ControlFlowNode for Compare | ControlFlowNode for Str | False |
| true_succ.py | 13 | true_succ.py:13:16:13:28 | ControlFlowNode for Compare | ControlFlowNode for f | True |
| true_succ.py | 13 | true_succ.py:13:16:13:28 | ControlFlowNode for Compare | ControlFlowNode for f | True |

Просмотреть файл

@ -1,15 +0,0 @@
/**
* @name TrueFalseSuccessors Test
* @description Tests true/false successors
* @kind table
* @problem.severity warning
*/
import python
from ControlFlowNode p, ControlFlowNode s, string which
where
s = p.getAFalseSuccessor() and which = "False"
or
s = p.getATrueSuccessor() and which = "True"
select p.getLocation().getFile().getShortName(), p.getLocation().getStartLine(), p, s.toString(), which

Просмотреть файл

@ -1,840 +0,0 @@
| __init__.py:0 | __name___0 = ScopeEntryDefinition |
| __init__.py:0 | __package___0 = ScopeEntryDefinition |
| __init__.py:0 | module2_0 = ImplicitSubModuleDefinition |
| __init__.py:0 | moduleX_0 = ImplicitSubModuleDefinition |
| __init__.py:0 | sys_0 = ScopeEntryDefinition |
| __init__.py:1 | __name___1 = ImportStarRefinement(__name___0) |
| __init__.py:1 | __package___1 = ImportStarRefinement(__package___0) |
| __init__.py:1 | sys_1 = ImportStarRefinement(sys_0) |
| __init__.py:2 | __name___2 = ImportStarRefinement(__name___1) |
| __init__.py:2 | __package___2 = ImportStarRefinement(__package___1) |
| __init__.py:2 | module_0 = ImportMember |
| __init__.py:3 | sys_2 = ImportExpr |
| __init__.py:4 | module3_0 = ImportMember |
| __init__.py:5 | module2_1 = IntegerLiteral |
| __init__.py:6 | module4_0 = ImportMember |
| __init__.py:7 | module5_0 = ImportMember |
| __init__.py:8 | moduleX_1 = ImportMember |
| a_simple.py:0 | __name___0 = ScopeEntryDefinition |
| a_simple.py:0 | __package___0 = ScopeEntryDefinition |
| a_simple.py:2 | f1_0 = FloatLiteral |
| a_simple.py:5 | i1_0 = IntegerLiteral |
| a_simple.py:6 | s_0 = Tuple |
| a_simple.py:8 | func_0 = FunctionExpr |
| a_simple.py:11 | C_0 = ClassExpr |
| a_simple.py:14 | d_0 = ParameterDefinition |
| a_simple.py:14 | t_0 = ParameterDefinition |
| a_simple.py:14 | vararg_kwarg_0 = FunctionExpr |
| a_simple.py:18 | multi_loop_0 = FunctionExpr |
| a_simple.py:18 | seq_0 = ParameterDefinition |
| a_simple.py:18 | y_0 = ScopeEntryDefinition |
| a_simple.py:19 | x_0 = None |
| a_simple.py:20 | x_1 = phi(x_0, x_2) |
| a_simple.py:20 | x_2 = For[0] |
| a_simple.py:20 | y_1 = phi(y_0, y_2) |
| a_simple.py:20 | y_2 = For[1] |
| a_simple.py:23 | with_definition_0 = FunctionExpr |
| a_simple.py:23 | x_0 = ParameterDefinition |
| a_simple.py:24 | y_0 = with |
| a_simple.py:27 | multi_loop_in_try_0 = FunctionExpr |
| a_simple.py:27 | p_0 = ScopeEntryDefinition |
| a_simple.py:27 | q_0 = ScopeEntryDefinition |
| a_simple.py:27 | x_0 = ParameterDefinition |
| a_simple.py:29 | p_1 = phi(p_0, p_2) |
| a_simple.py:29 | p_2 = For[0] |
| a_simple.py:29 | q_1 = phi(q_0, q_2) |
| a_simple.py:29 | q_2 = For[1] |
| a_simple.py:34 | args_0 = ParameterDefinition |
| a_simple.py:34 | f_0 = FunctionExpr |
| a_simple.py:34 | kwargs_0 = ParameterDefinition |
| a_simple.py:38 | a_0 = ParameterDefinition |
| a_simple.py:38 | b_0 = ParameterDefinition |
| a_simple.py:38 | c_0 = ParameterDefinition |
| a_simple.py:38 | multi_assign_and_packing_0 = FunctionExpr |
| a_simple.py:39 | t_0 = Tuple |
| a_simple.py:40 | w_0 = Tuple |
| a_simple.py:41 | p_0 = t[0] |
| a_simple.py:41 | q_0 = t[1] |
| a_simple.py:41 | r_0 = t[2] |
| a_simple.py:42 | x_0 = w[0] |
| a_simple.py:42 | y_0 = w[1] |
| a_simple.py:42 | z_0 = w[2] |
| a_simple.py:49 | g_0 = a |
| a_simple.py:49 | h_0 = b |
| a_simple.py:49 | i_0 = c |
| b_condition.py:0 | __name___0 = ScopeEntryDefinition |
| b_condition.py:0 | __package___0 = ScopeEntryDefinition |
| b_condition.py:0 | double_attr_check_0 = ScopeEntryDefinition |
| b_condition.py:0 | g_0 = ScopeEntryDefinition |
| b_condition.py:0 | h_0 = ScopeEntryDefinition |
| b_condition.py:0 | k_0 = ScopeEntryDefinition |
| b_condition.py:0 | loop_0 = ScopeEntryDefinition |
| b_condition.py:0 | method_check_0 = ScopeEntryDefinition |
| b_condition.py:0 | not_or_not_0 = ScopeEntryDefinition |
| b_condition.py:0 | odasa6261_0 = ScopeEntryDefinition |
| b_condition.py:0 | split_bool1_0 = ScopeEntryDefinition |
| b_condition.py:0 | v2_0 = ScopeEntryDefinition |
| b_condition.py:4 | f_0 = FunctionExpr |
| b_condition.py:4 | y_0 = ParameterDefinition |
| b_condition.py:5 | x_0 = IfExp |
| b_condition.py:8 | x_1 = IntegerLiteral |
| b_condition.py:9 | x_2 = Pi(x_0) [false] |
| b_condition.py:9 | x_3 = phi(x_1, x_2) |
| b_condition.py:11 | x_4 = IfExp |
| b_condition.py:14 | x_5 = IntegerLiteral |
| b_condition.py:15 | x_6 = Pi(x_4) [false] |
| b_condition.py:15 | x_7 = phi(x_5, x_6) |
| b_condition.py:17 | x_8 = IfExp |
| b_condition.py:20 | x_9 = None |
| b_condition.py:21 | x_10 = Pi(x_8) [false] |
| b_condition.py:21 | x_11 = phi(x_9, x_10) |
| b_condition.py:23 | x_12 = IfExp |
| b_condition.py:25 | x_13 = Pi(x_12) [true] |
| b_condition.py:25 | x_14 = IfExp |
| b_condition.py:26 | x_15 = ArgumentRefinement(x_14) |
| b_condition.py:28 | x_16 = IntegerLiteral |
| b_condition.py:29 | x_17 = phi(x_15, x_16) |
| b_condition.py:31 | x_18 = IfExp |
| b_condition.py:33 | x_19 = IntegerLiteral |
| b_condition.py:34 | x_20 = Pi(x_18) [false] |
| b_condition.py:34 | x_21 = phi(x_19, x_20) |
| b_condition.py:34 | x_22 = ArgumentRefinement(x_21) |
| b_condition.py:36 | x_23 = Pi(x_22) [true] |
| b_condition.py:37 | x_24 = ArgumentRefinement(x_23) |
| b_condition.py:39 | v2_1 = thing() |
| b_condition.py:41 | v2_2 = AttributeAssignment 'x'(v2_1) |
| b_condition.py:43 | v2_3 = Pi(v2_2) [true] |
| b_condition.py:47 | v2_4 = Pi(v2_2) [false] |
| b_condition.py:47 | v2_5 = phi(v2_3, v2_4) |
| b_condition.py:50 | g_1 = FunctionExpr |
| b_condition.py:50 | x_0 = ParameterDefinition |
| b_condition.py:50 | x_2 = Pi(x_0) [false] |
| b_condition.py:50 | x_3 = phi(x_1, x_2) |
| b_condition.py:52 | x_1 = Pi(x_0) [true] |
| b_condition.py:55 | loop_1 = FunctionExpr |
| b_condition.py:55 | seq_0 = ParameterDefinition |
| b_condition.py:55 | v_0 = ScopeEntryDefinition |
| b_condition.py:56 | v_1 = Pi(v_3) [false] |
| b_condition.py:56 | v_2 = phi(v_0, v_1, v_5) |
| b_condition.py:56 | v_3 = For |
| b_condition.py:58 | v_4 = Pi(v_3) [true] |
| b_condition.py:58 | v_5 = ArgumentRefinement(v_4) |
| b_condition.py:61 | double_attr_check_1 = FunctionExpr |
| b_condition.py:61 | x_0 = ParameterDefinition |
| b_condition.py:61 | x_5 = Pi(x_2) [false] |
| b_condition.py:61 | x_5 = Pi(x_3) [false] |
| b_condition.py:61 | x_7 = phi(x_1, x_4) |
| b_condition.py:61 | x_7 = phi(x_2, x_5) |
| b_condition.py:61 | y_0 = ParameterDefinition |
| b_condition.py:61 | y_2 = Pi(y_0) [false] |
| b_condition.py:61 | y_3 = phi(y_0, y_1) |
| b_condition.py:61 | y_3 = phi(y_1, y_2) |
| b_condition.py:63 | x_1 = Pi(x_0) [true] |
| b_condition.py:64 | x_2 = Pi(x_0) [false] |
| b_condition.py:65 | y_1 = Pi(y_0) [true] |
| b_condition.py:66 | x_3 = Pi(x_2) [true] |
| b_condition.py:67 | x_4 = Pi(x_3) [true] |
| b_condition.py:69 | h_1 = FunctionExpr |
| b_condition.py:70 | b_0 = IfExp |
| b_condition.py:72 | b_1 = IntegerLiteral |
| b_condition.py:73 | b_2 = Pi(b_0) [false] |
| b_condition.py:73 | b_3 = phi(b_1, b_2) |
| b_condition.py:75 | k_1 = FunctionExpr |
| b_condition.py:76 | t_0 = type |
| b_condition.py:78 | t_1 = object |
| b_condition.py:79 | t_2 = Pi(t_0) [false] |
| b_condition.py:79 | t_3 = phi(t_1, t_2) |
| b_condition.py:79 | t_4 = ArgumentRefinement(t_3) |
| b_condition.py:81 | bar_0 = ScopeEntryDefinition |
| b_condition.py:81 | bar_2 = phi(bar_0, bar_1) |
| b_condition.py:81 | foo_0 = ParameterDefinition |
| b_condition.py:81 | foo_3 = Pi(foo_0) [false] |
| b_condition.py:81 | foo_4 = phi(foo_1, foo_3) |
| b_condition.py:81 | odasa6261_1 = FunctionExpr |
| b_condition.py:83 | bar_1 = FunctionExpr |
| b_condition.py:83 | foo_1 = Pi(foo_0) [true] |
| b_condition.py:83 | foo_2 = ScopeEntryDefinition |
| b_condition.py:87 | split_bool1_1 = FunctionExpr |
| b_condition.py:87 | x_0 = ParameterDefinition |
| b_condition.py:87 | y_0 = ParameterDefinition |
| b_condition.py:88 | x_1 = Pi(x_0) [true] |
| b_condition.py:90 | x_4 = Pi(x_0) [false] |
| b_condition.py:90 | x_5 = SingleSuccessorGuard(x_4) [false] |
| b_condition.py:90 | x_6 = SingleSuccessorGuard(x_1) [false] |
| b_condition.py:90 | y_1 = Pi(y_0) [true] |
| b_condition.py:90 | y_4 = Pi(y_0) [false] |
| b_condition.py:92 | x_2 = SingleSuccessorGuard(x_5) [false] |
| b_condition.py:92 | x_7 = SingleSuccessorGuard(x_6) [true] |
| b_condition.py:93 | y_5 = ArgumentRefinement(y_4) |
| b_condition.py:95 | y_2 = ArgumentRefinement(y_1) |
| b_condition.py:96 | y_3 = SingleSuccessorGuard(y_2) [true] |
| b_condition.py:96 | y_6 = SingleSuccessorGuard(y_5) [false] |
| b_condition.py:97 | x_3 = ArgumentRefinement(x_2) |
| b_condition.py:99 | x_8 = ArgumentRefinement(x_7) |
| b_condition.py:101 | a_0 = ParameterDefinition |
| b_condition.py:101 | not_or_not_1 = FunctionExpr |
| b_condition.py:104 | a_1 = Pi(a_0) [false] |
| b_condition.py:105 | a_2 = Pi(a_1) [false] |
| b_condition.py:107 | a_3 = Pi(a_2) [false] |
| b_condition.py:109 | method_check_1 = FunctionExpr |
| b_condition.py:109 | x_0 = ParameterDefinition |
| b_condition.py:109 | x_5 = phi(x_2, x_4) |
| b_condition.py:111 | x_1 = Pi(x_0) [true] |
| b_condition.py:111 | x_2 = ArgumentRefinement(x_1) |
| b_condition.py:113 | x_3 = Pi(x_0) [false] |
| b_condition.py:113 | x_4 = ArgumentRefinement(x_3) |
| d_globals.py:0 | D_0 = ScopeEntryDefinition |
| d_globals.py:0 | Ugly_0 = ScopeEntryDefinition |
| d_globals.py:0 | X_0 = ScopeEntryDefinition |
| d_globals.py:0 | __name___0 = ScopeEntryDefinition |
| d_globals.py:0 | __package___0 = ScopeEntryDefinition |
| d_globals.py:0 | dict_0 = ScopeEntryDefinition |
| d_globals.py:0 | g3_0 = ScopeEntryDefinition |
| d_globals.py:0 | g4_0 = ScopeEntryDefinition |
| d_globals.py:0 | get_g4_0 = ScopeEntryDefinition |
| d_globals.py:0 | glob_0 = ScopeEntryDefinition |
| d_globals.py:0 | k_0 = ScopeEntryDefinition |
| d_globals.py:0 | modinit_0 = ScopeEntryDefinition |
| d_globals.py:0 | outer_0 = ScopeEntryDefinition |
| d_globals.py:0 | redefine_0 = ScopeEntryDefinition |
| d_globals.py:0 | set_g4_0 = ScopeEntryDefinition |
| d_globals.py:0 | set_g4_indirect_0 = ScopeEntryDefinition |
| d_globals.py:0 | tuple_0 = ScopeEntryDefinition |
| d_globals.py:0 | use_list_attribute_0 = ScopeEntryDefinition |
| d_globals.py:0 | x_0 = ScopeEntryDefinition |
| d_globals.py:0 | y_0 = ScopeEntryDefinition |
| d_globals.py:0 | z_0 = ScopeEntryDefinition |
| d_globals.py:2 | dict_2 = ScopeEntryDefinition |
| d_globals.py:2 | g1_2 = ScopeEntryDefinition |
| d_globals.py:2 | g2_2 = ScopeEntryDefinition |
| d_globals.py:2 | g3_2 = ScopeEntryDefinition |
| d_globals.py:2 | g4_1 = ScopeEntryDefinition |
| d_globals.py:2 | glob_2 = ScopeEntryDefinition |
| d_globals.py:2 | j_0 = FunctionExpr |
| d_globals.py:2 | tuple_2 = ScopeEntryDefinition |
| d_globals.py:2 | z_2 = ScopeEntryDefinition |
| d_globals.py:5 | dict_1 = IntegerLiteral |
| d_globals.py:7 | tuple_1 = tuple |
| d_globals.py:14 | g1_0 = None |
| d_globals.py:16 | assign_global_0 = FunctionExpr |
| d_globals.py:16 | g2_3 = ScopeEntryDefinition |
| d_globals.py:16 | g3_3 = ScopeEntryDefinition |
| d_globals.py:16 | g4_2 = ScopeEntryDefinition |
| d_globals.py:16 | glob_3 = ScopeEntryDefinition |
| d_globals.py:16 | z_3 = ScopeEntryDefinition |
| d_globals.py:18 | g1_3 = IntegerLiteral |
| d_globals.py:23 | g2_0 = None |
| d_globals.py:25 | g1_4 = ScopeEntryDefinition |
| d_globals.py:25 | g3_4 = ScopeEntryDefinition |
| d_globals.py:25 | g4_3 = ScopeEntryDefinition |
| d_globals.py:25 | glob_4 = ScopeEntryDefinition |
| d_globals.py:25 | init_0 = FunctionExpr |
| d_globals.py:25 | z_4 = ScopeEntryDefinition |
| d_globals.py:27 | g2_4 = IntegerLiteral |
| d_globals.py:29 | g1_1 = CallsiteRefinement(g1_0) |
| d_globals.py:29 | g2_1 = CallsiteRefinement(g2_0) |
| d_globals.py:29 | glob_1 = CallsiteRefinement(glob_0) |
| d_globals.py:29 | z_1 = CallsiteRefinement(z_0) |
| d_globals.py:33 | g3_1 = None |
| d_globals.py:35 | Ugly_1 = ClassExpr |
| d_globals.py:37 | __init___0 = FunctionExpr |
| d_globals.py:37 | g1_5 = ScopeEntryDefinition |
| d_globals.py:37 | g2_5 = ScopeEntryDefinition |
| d_globals.py:37 | g4_4 = ScopeEntryDefinition |
| d_globals.py:37 | glob_5 = ScopeEntryDefinition |
| d_globals.py:37 | self_0 = ParameterDefinition |
| d_globals.py:37 | z_5 = ScopeEntryDefinition |
| d_globals.py:39 | g3_5 = IntegerLiteral |
| d_globals.py:41 | g1_6 = ScopeEntryDefinition |
| d_globals.py:41 | g2_6 = ScopeEntryDefinition |
| d_globals.py:41 | g3_6 = ScopeEntryDefinition |
| d_globals.py:41 | g4_5 = ScopeEntryDefinition |
| d_globals.py:41 | glob_6 = ScopeEntryDefinition |
| d_globals.py:41 | meth_0 = FunctionExpr |
| d_globals.py:41 | self_0 = ParameterDefinition |
| d_globals.py:41 | z_6 = ScopeEntryDefinition |
| d_globals.py:46 | x_1 = IntegerLiteral |
| d_globals.py:49 | x_2 = IntegerLiteral |
| d_globals.py:51 | x_3 = phi(x_1, x_2) |
| d_globals.py:52 | y_1 = IntegerLiteral |
| d_globals.py:54 | y_2 = IntegerLiteral |
| d_globals.py:59 | y_3 = phi(y_1, y_2) |
| d_globals.py:62 | X_1 = ClassExpr |
| d_globals.py:62 | X_2 = ScopeEntryDefinition |
| d_globals.py:62 | g3_7 = ScopeEntryDefinition |
| d_globals.py:62 | y_0 = ScopeEntryDefinition |
| d_globals.py:62 | y_4 = ScopeEntryDefinition |
| d_globals.py:63 | y_1 = y |
| d_globals.py:64 | v4_0 = v3 |
| d_globals.py:70 | arg_0 = ParameterDefinition |
| d_globals.py:70 | g1_7 = ScopeEntryDefinition |
| d_globals.py:70 | g2_7 = ScopeEntryDefinition |
| d_globals.py:70 | g3_8 = ScopeEntryDefinition |
| d_globals.py:70 | g4_7 = ScopeEntryDefinition |
| d_globals.py:70 | glob_7 = ScopeEntryDefinition |
| d_globals.py:70 | k_1 = FunctionExpr |
| d_globals.py:70 | z_7 = ScopeEntryDefinition |
| d_globals.py:73 | g4_6 = None |
| d_globals.py:75 | g1_8 = ScopeEntryDefinition |
| d_globals.py:75 | g2_8 = ScopeEntryDefinition |
| d_globals.py:75 | g3_9 = ScopeEntryDefinition |
| d_globals.py:75 | g4_8 = ScopeEntryDefinition |
| d_globals.py:75 | get_g4_1 = FunctionExpr |
| d_globals.py:75 | glob_8 = ScopeEntryDefinition |
| d_globals.py:75 | set_g4_2 = ScopeEntryDefinition |
| d_globals.py:75 | z_8 = ScopeEntryDefinition |
| d_globals.py:77 | g1_9 = CallsiteRefinement(g1_8) |
| d_globals.py:77 | g2_9 = CallsiteRefinement(g2_8) |
| d_globals.py:77 | g3_10 = CallsiteRefinement(g3_9) |
| d_globals.py:77 | g4_9 = Pi(g4_8) [true] |
| d_globals.py:77 | g4_10 = CallsiteRefinement(g4_9) |
| d_globals.py:77 | glob_9 = CallsiteRefinement(glob_8) |
| d_globals.py:77 | z_9 = CallsiteRefinement(z_8) |
| d_globals.py:78 | g1_10 = phi(g1_8, g1_9) |
| d_globals.py:78 | g2_10 = phi(g2_8, g2_9) |
| d_globals.py:78 | g3_11 = phi(g3_9, g3_10) |
| d_globals.py:78 | g4_11 = Pi(g4_8) [false] |
| d_globals.py:78 | g4_12 = phi(g4_10, g4_11) |
| d_globals.py:78 | glob_10 = phi(glob_8, glob_9) |
| d_globals.py:78 | z_10 = phi(z_8, z_9) |
| d_globals.py:80 | g1_11 = ScopeEntryDefinition |
| d_globals.py:80 | g2_11 = ScopeEntryDefinition |
| d_globals.py:80 | g3_12 = ScopeEntryDefinition |
| d_globals.py:80 | g4_13 = ScopeEntryDefinition |
| d_globals.py:80 | glob_11 = ScopeEntryDefinition |
| d_globals.py:80 | set_g4_1 = FunctionExpr |
| d_globals.py:80 | set_g4_indirect_2 = ScopeEntryDefinition |
| d_globals.py:80 | z_11 = ScopeEntryDefinition |
| d_globals.py:81 | g1_12 = CallsiteRefinement(g1_11) |
| d_globals.py:81 | g2_12 = CallsiteRefinement(g2_11) |
| d_globals.py:81 | g3_13 = CallsiteRefinement(g3_12) |
| d_globals.py:81 | g4_14 = CallsiteRefinement(g4_13) |
| d_globals.py:81 | glob_12 = CallsiteRefinement(glob_11) |
| d_globals.py:81 | z_12 = CallsiteRefinement(z_11) |
| d_globals.py:83 | g1_13 = ScopeEntryDefinition |
| d_globals.py:83 | g2_13 = ScopeEntryDefinition |
| d_globals.py:83 | g3_14 = ScopeEntryDefinition |
| d_globals.py:83 | glob_13 = ScopeEntryDefinition |
| d_globals.py:83 | set_g4_indirect_1 = FunctionExpr |
| d_globals.py:83 | z_13 = ScopeEntryDefinition |
| d_globals.py:85 | g4_15 = False |
| d_globals.py:87 | modinit_1 = ClassExpr |
| d_globals.py:92 | modinit_2 = DeletionDefinition |
| d_globals.py:95 | g1_14 = ScopeEntryDefinition |
| d_globals.py:95 | g2_14 = ScopeEntryDefinition |
| d_globals.py:95 | g3_15 = ScopeEntryDefinition |
| d_globals.py:95 | g4_16 = ScopeEntryDefinition |
| d_globals.py:95 | glob_14 = ScopeEntryDefinition |
| d_globals.py:95 | outer_1 = FunctionExpr |
| d_globals.py:95 | z_14 = ScopeEntryDefinition |
| d_globals.py:96 | g1_16 = ScopeEntryDefinition |
| d_globals.py:96 | g2_16 = ScopeEntryDefinition |
| d_globals.py:96 | g3_17 = ScopeEntryDefinition |
| d_globals.py:96 | g4_18 = ScopeEntryDefinition |
| d_globals.py:96 | inner_0 = FunctionExpr |
| d_globals.py:96 | z_16 = ScopeEntryDefinition |
| d_globals.py:98 | glob_16 = IntegerLiteral |
| d_globals.py:101 | g1_17 = ScopeEntryDefinition |
| d_globals.py:101 | g2_17 = ScopeEntryDefinition |
| d_globals.py:101 | g3_18 = ScopeEntryDefinition |
| d_globals.py:101 | g4_19 = ScopeEntryDefinition |
| d_globals.py:101 | glob_17 = ScopeEntryDefinition |
| d_globals.py:101 | otherInner_0 = FunctionExpr |
| d_globals.py:101 | z_17 = ScopeEntryDefinition |
| d_globals.py:104 | g1_15 = CallsiteRefinement(g1_14) |
| d_globals.py:104 | g2_15 = CallsiteRefinement(g2_14) |
| d_globals.py:104 | g3_16 = CallsiteRefinement(g3_15) |
| d_globals.py:104 | g4_17 = CallsiteRefinement(g4_16) |
| d_globals.py:104 | glob_15 = CallsiteRefinement(glob_14) |
| d_globals.py:104 | z_15 = CallsiteRefinement(z_14) |
| d_globals.py:107 | g1_18 = ScopeEntryDefinition |
| d_globals.py:107 | g2_18 = ScopeEntryDefinition |
| d_globals.py:107 | g3_19 = ScopeEntryDefinition |
| d_globals.py:107 | g4_20 = ScopeEntryDefinition |
| d_globals.py:107 | glob_18 = ScopeEntryDefinition |
| d_globals.py:107 | redefine_1 = FunctionExpr |
| d_globals.py:107 | z_18 = ScopeEntryDefinition |
| d_globals.py:110 | z_19 = IntegerLiteral |
| d_globals.py:113 | glob_19 = IntegerLiteral |
| d_globals.py:118 | D_1 = ClassExpr |
| d_globals.py:120 | __init___0 = FunctionExpr |
| d_globals.py:120 | g1_19 = ScopeEntryDefinition |
| d_globals.py:120 | g2_19 = ScopeEntryDefinition |
| d_globals.py:120 | g3_20 = ScopeEntryDefinition |
| d_globals.py:120 | g4_21 = ScopeEntryDefinition |
| d_globals.py:120 | glob_20 = ScopeEntryDefinition |
| d_globals.py:120 | self_0 = ParameterDefinition |
| d_globals.py:120 | z_20 = ScopeEntryDefinition |
| d_globals.py:123 | dict_3 = ScopeEntryDefinition |
| d_globals.py:123 | foo_0 = FunctionExpr |
| d_globals.py:123 | g1_20 = ScopeEntryDefinition |
| d_globals.py:123 | g2_20 = ScopeEntryDefinition |
| d_globals.py:123 | g3_21 = ScopeEntryDefinition |
| d_globals.py:123 | g4_22 = ScopeEntryDefinition |
| d_globals.py:123 | glob_21 = ScopeEntryDefinition |
| d_globals.py:123 | self_0 = ParameterDefinition |
| d_globals.py:123 | z_21 = ScopeEntryDefinition |
| d_globals.py:126 | g1_21 = ScopeEntryDefinition |
| d_globals.py:126 | g2_21 = ScopeEntryDefinition |
| d_globals.py:126 | g3_22 = ScopeEntryDefinition |
| d_globals.py:126 | g4_23 = ScopeEntryDefinition |
| d_globals.py:126 | glob_22 = ScopeEntryDefinition |
| d_globals.py:126 | use_list_attribute_1 = FunctionExpr |
| d_globals.py:126 | z_22 = ScopeEntryDefinition |
| d_globals.py:127 | l_0 = List |
| d_globals.py:128 | g1_22 = CallsiteRefinement(g1_21) |
| d_globals.py:128 | g2_22 = CallsiteRefinement(g2_21) |
| d_globals.py:128 | g3_23 = CallsiteRefinement(g3_22) |
| d_globals.py:128 | g4_24 = CallsiteRefinement(g4_23) |
| d_globals.py:128 | glob_23 = CallsiteRefinement(glob_22) |
| d_globals.py:128 | l_1 = ArgumentRefinement(l_0) |
| d_globals.py:128 | z_23 = CallsiteRefinement(z_22) |
| e_temporal.py:0 | __name___0 = ScopeEntryDefinition |
| e_temporal.py:0 | __package___0 = ScopeEntryDefinition |
| e_temporal.py:0 | x_0 = ScopeEntryDefinition |
| e_temporal.py:2 | sys_0 = ImportExpr |
| e_temporal.py:4 | f_0 = FunctionExpr |
| e_temporal.py:4 | sys_1 = ScopeEntryDefinition |
| e_temporal.py:9 | arg_0 = ParameterDefinition |
| e_temporal.py:9 | g_0 = FunctionExpr |
| e_temporal.py:12 | x_1 = g() |
| f_finally.py:0 | __name___0 = ScopeEntryDefinition |
| f_finally.py:0 | __package___0 = ScopeEntryDefinition |
| f_finally.py:1 | Queue_0 = ClassExpr |
| f_finally.py:3 | close_0 = FunctionExpr |
| f_finally.py:3 | close_4 = Pi(close_0) [false] |
| f_finally.py:3 | close_5 = phi(close_3, close_4) |
| f_finally.py:3 | self_0 = ParameterDefinition |
| f_finally.py:3 | self_3 = phi(self_1, self_2) |
| f_finally.py:4 | self_1 = AttributeAssignment '_closed'(self_0) |
| f_finally.py:8 | close_0 = Attribute |
| f_finally.py:8 | close_1 = Attribute |
| f_finally.py:9 | close_2 = SingleSuccessorGuard(close_1) [true] |
| f_finally.py:10 | close_3 = Pi(close_0) [true] |
| f_finally.py:10 | self_2 = AttributeAssignment '_close'(self_1) |
| g_class_init.py:0 | __name___0 = ScopeEntryDefinition |
| g_class_init.py:0 | __package___0 = ScopeEntryDefinition |
| g_class_init.py:3 | C_0 = ClassExpr |
| g_class_init.py:5 | __init___0 = FunctionExpr |
| g_class_init.py:5 | self_0 = ParameterDefinition |
| g_class_init.py:6 | self_1 = SelfCallsiteRefinement(self_0) |
| g_class_init.py:7 | self_2 = AttributeAssignment 'x'(self_1) |
| g_class_init.py:9 | _init_0 = FunctionExpr |
| g_class_init.py:9 | self_0 = ParameterDefinition |
| g_class_init.py:10 | self_1 = AttributeAssignment 'y'(self_0) |
| g_class_init.py:11 | self_2 = SelfCallsiteRefinement(self_1) |
| g_class_init.py:13 | _init2_0 = FunctionExpr |
| g_class_init.py:13 | self_0 = ParameterDefinition |
| g_class_init.py:14 | self_1 = AttributeAssignment 'z'(self_0) |
| g_class_init.py:16 | method_0 = FunctionExpr |
| g_class_init.py:16 | self_0 = ParameterDefinition |
| g_class_init.py:19 | self_1 = Pi(self_0) [true] |
| g_class_init.py:20 | self_2 = Pi(self_0) [false] |
| g_class_init.py:20 | self_3 = phi(self_1, self_2) |
| g_class_init.py:24 | Oddities_0 = ClassExpr |
| g_class_init.py:24 | float_0 = ScopeEntryDefinition |
| g_class_init.py:24 | int_0 = ScopeEntryDefinition |
| g_class_init.py:26 | int_1 = int |
| g_class_init.py:27 | float_1 = float |
| g_class_init.py:28 | l_0 = len |
| g_class_init.py:29 | h_0 = hash |
| g_class_init.py:32 | D_0 = ClassExpr |
| g_class_init.py:34 | D_1 = ScopeEntryDefinition |
| g_class_init.py:34 | __init___0 = FunctionExpr |
| g_class_init.py:34 | self_0 = ParameterDefinition |
| g_class_init.py:35 | D_2 = ArgumentRefinement(D_1) |
| g_class_init.py:42 | V2_0 = Str |
| g_class_init.py:43 | V3_0 = Str |
| g_class_init.py:45 | E_0 = ClassExpr |
| g_class_init.py:46 | V2_1 = ScopeEntryDefinition |
| g_class_init.py:46 | V3_1 = ScopeEntryDefinition |
| g_class_init.py:46 | __init___0 = FunctionExpr |
| g_class_init.py:46 | c_0 = ParameterDefinition |
| g_class_init.py:46 | c_3 = phi(c_1, c_2) |
| g_class_init.py:46 | self_0 = ParameterDefinition |
| g_class_init.py:46 | self_3 = phi(self_1, self_2) |
| g_class_init.py:48 | c_1 = Pi(c_0) [true] |
| g_class_init.py:48 | self_1 = AttributeAssignment 'version'(self_0) |
| g_class_init.py:50 | c_2 = Pi(c_0) [false] |
| g_class_init.py:50 | self_2 = AttributeAssignment 'version'(self_0) |
| g_class_init.py:52 | V2_2 = ScopeEntryDefinition |
| g_class_init.py:52 | meth_0 = FunctionExpr |
| g_class_init.py:52 | self_0 = ParameterDefinition |
| g_class_init.py:52 | self_2 = Pi(self_0) [false] |
| g_class_init.py:52 | self_3 = phi(self_1, self_2) |
| g_class_init.py:54 | self_1 = Pi(self_0) [true] |
| h_classes.py:0 | Base_0 = ScopeEntryDefinition |
| h_classes.py:0 | D_0 = ScopeEntryDefinition |
| h_classes.py:0 | Derived1_0 = ScopeEntryDefinition |
| h_classes.py:0 | Derived2_0 = ScopeEntryDefinition |
| h_classes.py:0 | Derived3_0 = ScopeEntryDefinition |
| h_classes.py:0 | __name___0 = ScopeEntryDefinition |
| h_classes.py:0 | __package___0 = ScopeEntryDefinition |
| h_classes.py:0 | f_0 = ScopeEntryDefinition |
| h_classes.py:0 | k_0 = ScopeEntryDefinition |
| h_classes.py:0 | thing_0 = ScopeEntryDefinition |
| h_classes.py:1 | sys_0 = ImportExpr |
| h_classes.py:3 | C_0 = ClassExpr |
| h_classes.py:5 | x_0 = Str |
| h_classes.py:7 | __init___0 = FunctionExpr |
| h_classes.py:7 | self_0 = ParameterDefinition |
| h_classes.py:8 | self_1 = AttributeAssignment 'y'(self_0) |
| h_classes.py:11 | sys_1 = ArgumentRefinement(sys_0) |
| h_classes.py:14 | C_1 = ScopeEntryDefinition |
| h_classes.py:14 | arg_0 = ParameterDefinition |
| h_classes.py:14 | k_1 = FunctionExpr |
| h_classes.py:14 | sys_2 = ScopeEntryDefinition |
| h_classes.py:17 | arg_1 = ArgumentRefinement(arg_0) |
| h_classes.py:23 | Base_1 = ClassExpr |
| h_classes.py:25 | Derived1_2 = ScopeEntryDefinition |
| h_classes.py:25 | Derived2_2 = ScopeEntryDefinition |
| h_classes.py:25 | Derived3_2 = ScopeEntryDefinition |
| h_classes.py:25 | __init___0 = FunctionExpr |
| h_classes.py:25 | choice_0 = ParameterDefinition |
| h_classes.py:25 | choice_5 = phi(choice_1, choice_3, choice_4) |
| h_classes.py:25 | self_0 = ParameterDefinition |
| h_classes.py:25 | self_4 = phi(self_1, self_2, self_3) |
| h_classes.py:27 | choice_1 = Pi(choice_0) [true] |
| h_classes.py:27 | self_1 = AttributeAssignment '__class__'(self_0) |
| h_classes.py:28 | choice_2 = Pi(choice_0) [false] |
| h_classes.py:29 | choice_3 = Pi(choice_2) [true] |
| h_classes.py:29 | self_2 = AttributeAssignment '__class__'(self_0) |
| h_classes.py:31 | choice_4 = Pi(choice_2) [false] |
| h_classes.py:31 | self_3 = AttributeAssignment '__class__'(self_0) |
| h_classes.py:33 | Derived1_1 = ClassExpr |
| h_classes.py:36 | Derived2_1 = ClassExpr |
| h_classes.py:39 | Derived3_1 = ClassExpr |
| h_classes.py:42 | thing_1 = Base() |
| h_classes.py:45 | arg0_0 = ParameterDefinition |
| h_classes.py:45 | arg1_0 = ParameterDefinition |
| h_classes.py:45 | arg2_0 = ParameterDefinition |
| h_classes.py:45 | f_1 = FunctionExpr |
| h_classes.py:48 | D_1 = ClassExpr |
| h_classes.py:48 | f_2 = ScopeEntryDefinition |
| h_classes.py:50 | m_0 = f |
| h_classes.py:52 | arg1_0 = ParameterDefinition |
| h_classes.py:52 | n_0 = FunctionExpr |
| h_classes.py:52 | self_0 = ParameterDefinition |
| i_imports.py:0 | BytesIO_0 = ScopeEntryDefinition |
| i_imports.py:0 | StringIO_0 = ScopeEntryDefinition |
| i_imports.py:0 | __name___0 = ScopeEntryDefinition |
| i_imports.py:0 | __package___0 = ScopeEntryDefinition |
| i_imports.py:0 | _io_0 = ScopeEntryDefinition |
| i_imports.py:0 | argv_0 = ScopeEntryDefinition |
| i_imports.py:0 | code_0 = ScopeEntryDefinition |
| i_imports.py:0 | io_0 = ScopeEntryDefinition |
| i_imports.py:0 | sys_0 = ScopeEntryDefinition |
| i_imports.py:0 | xyz_0 = ScopeEntryDefinition |
| i_imports.py:0 | z_0 = ScopeEntryDefinition |
| i_imports.py:3 | a_0 = IntegerLiteral |
| i_imports.py:4 | b_0 = IntegerLiteral |
| i_imports.py:5 | c_0 = IntegerLiteral |
| i_imports.py:7 | BytesIO_1 = ImportStarRefinement(BytesIO_0) |
| i_imports.py:7 | StringIO_1 = ImportStarRefinement(StringIO_0) |
| i_imports.py:7 | __name___1 = ImportStarRefinement(__name___0) |
| i_imports.py:7 | __package___1 = ImportStarRefinement(__package___0) |
| i_imports.py:7 | _io_1 = ImportStarRefinement(_io_0) |
| i_imports.py:7 | a_1 = ImportStarRefinement(a_0) |
| i_imports.py:7 | b_1 = ImportStarRefinement(b_0) |
| i_imports.py:7 | c_1 = ImportStarRefinement(c_0) |
| i_imports.py:7 | io_1 = ImportStarRefinement(io_0) |
| i_imports.py:7 | z_1 = ImportStarRefinement(z_0) |
| i_imports.py:8 | xyz_1 = ImportMember |
| i_imports.py:13 | argv_1 = ImportMember |
| i_imports.py:17 | sys_1 = ImportExpr |
| i_imports.py:23 | code_1 = ImportExpr |
| i_imports.py:27 | __name___2 = ImportStarRefinement(__name___1) |
| i_imports.py:27 | __package___2 = ImportStarRefinement(__package___1) |
| i_imports.py:27 | a_2 = ImportStarRefinement(a_1) |
| i_imports.py:27 | argv_2 = ImportStarRefinement(argv_1) |
| i_imports.py:27 | b_2 = ImportStarRefinement(b_1) |
| i_imports.py:27 | c_2 = ImportStarRefinement(c_1) |
| i_imports.py:27 | sys_2 = ImportStarRefinement(sys_1) |
| i_imports.py:27 | xyz_2 = ImportStarRefinement(xyz_1) |
| i_imports.py:27 | z_2 = ImportStarRefinement(z_1) |
| i_imports.py:29 | _io_2 = ImportExpr |
| i_imports.py:33 | io_2 = ImportExpr |
| i_imports.py:34 | StringIO_2 = Attribute |
| i_imports.py:35 | BytesIO_2 = Attribute |
| i_imports.py:37 | code_2 = ImportExpr |
| j_convoluted_imports.py:0 | __name___0 = ScopeEntryDefinition |
| j_convoluted_imports.py:0 | __package___0 = ScopeEntryDefinition |
| j_convoluted_imports.py:0 | object_0 = ScopeEntryDefinition |
| j_convoluted_imports.py:0 | p_0 = ScopeEntryDefinition |
| j_convoluted_imports.py:0 | q_0 = ScopeEntryDefinition |
| j_convoluted_imports.py:0 | r_0 = ScopeEntryDefinition |
| j_convoluted_imports.py:0 | unknown_0 = ScopeEntryDefinition |
| j_convoluted_imports.py:3 | module_0 = ImportMember |
| j_convoluted_imports.py:6 | x_0 = ImportMember |
| j_convoluted_imports.py:9 | C_0 = ClassExpr |
| j_convoluted_imports.py:11 | module2_0 = ImportMember |
| j_convoluted_imports.py:13 | f_0 = FunctionExpr |
| j_convoluted_imports.py:13 | self_0 = ParameterDefinition |
| j_convoluted_imports.py:14 | x_0 = ImportMember |
| j_convoluted_imports.py:16 | moduleX_0 = ImportMember |
| j_convoluted_imports.py:20 | C_1 = ImportStarRefinement(C_0) |
| j_convoluted_imports.py:20 | __name___1 = ImportStarRefinement(__name___0) |
| j_convoluted_imports.py:20 | __package___1 = ImportStarRefinement(__package___0) |
| j_convoluted_imports.py:20 | moduleX_1 = ImportStarRefinement(moduleX_0) |
| j_convoluted_imports.py:20 | module_1 = ImportStarRefinement(module_0) |
| j_convoluted_imports.py:20 | object_1 = ImportStarRefinement(object_0) |
| j_convoluted_imports.py:20 | p_1 = ImportStarRefinement(p_0) |
| j_convoluted_imports.py:20 | q_1 = ImportStarRefinement(q_0) |
| j_convoluted_imports.py:20 | r_1 = ImportStarRefinement(r_0) |
| j_convoluted_imports.py:20 | unknown_1 = ImportStarRefinement(unknown_0) |
| j_convoluted_imports.py:20 | x_1 = ImportStarRefinement(x_0) |
| j_convoluted_imports.py:22 | C_2 = ImportStarRefinement(C_0) |
| j_convoluted_imports.py:22 | __name___2 = ImportStarRefinement(__name___0) |
| j_convoluted_imports.py:22 | __package___2 = ImportStarRefinement(__package___0) |
| j_convoluted_imports.py:22 | moduleX_2 = ImportStarRefinement(moduleX_0) |
| j_convoluted_imports.py:22 | module_2 = ImportStarRefinement(module_0) |
| j_convoluted_imports.py:22 | object_2 = ImportStarRefinement(object_0) |
| j_convoluted_imports.py:22 | p_2 = ImportStarRefinement(p_0) |
| j_convoluted_imports.py:22 | q_2 = ImportStarRefinement(q_0) |
| j_convoluted_imports.py:22 | r_2 = ImportStarRefinement(r_0) |
| j_convoluted_imports.py:22 | unknown_2 = ImportStarRefinement(unknown_0) |
| j_convoluted_imports.py:22 | x_2 = ImportStarRefinement(x_0) |
| j_convoluted_imports.py:23 | C_3 = phi(C_1, C_2) |
| j_convoluted_imports.py:23 | __name___3 = phi(__name___1, __name___2) |
| j_convoluted_imports.py:23 | __package___3 = phi(__package___1, __package___2) |
| j_convoluted_imports.py:23 | moduleX_3 = phi(moduleX_1, moduleX_2) |
| j_convoluted_imports.py:23 | module_3 = phi(module_1, module_2) |
| j_convoluted_imports.py:23 | object_3 = phi(object_1, object_2) |
| j_convoluted_imports.py:23 | p_3 = phi(p_1, p_2) |
| j_convoluted_imports.py:23 | q_3 = phi(q_1, q_2) |
| j_convoluted_imports.py:23 | r_3 = phi(r_1, r_2) |
| j_convoluted_imports.py:23 | unknown_3 = phi(unknown_1, unknown_2) |
| j_convoluted_imports.py:23 | x_3 = phi(x_1, x_2) |
| k_getsetattr.py:0 | __name___0 = ScopeEntryDefinition |
| k_getsetattr.py:0 | __package___0 = ScopeEntryDefinition |
| k_getsetattr.py:4 | C_0 = ClassExpr |
| k_getsetattr.py:6 | meth1_0 = FunctionExpr |
| k_getsetattr.py:6 | self_0 = ParameterDefinition |
| k_getsetattr.py:7 | self_1 = ArgumentRefinement(self_0) |
| k_getsetattr.py:8 | self_2 = ArgumentRefinement(self_1) |
| k_getsetattr.py:9 | self_3 = ArgumentRefinement(self_2) |
| k_getsetattr.py:10 | self_4 = ArgumentRefinement(self_3) |
| k_getsetattr.py:12 | meth2_0 = FunctionExpr |
| k_getsetattr.py:12 | self_0 = ParameterDefinition |
| k_getsetattr.py:13 | self_1 = ArgumentRefinement(self_0) |
| k_getsetattr.py:14 | self_2 = ArgumentRefinement(self_1) |
| k_getsetattr.py:15 | self_3 = SelfCallsiteRefinement(self_2) |
| k_getsetattr.py:16 | self_4 = ArgumentRefinement(self_3) |
| k_getsetattr.py:17 | self_5 = ArgumentRefinement(self_4) |
| k_getsetattr.py:18 | self_6 = ArgumentRefinement(self_5) |
| k_getsetattr.py:21 | C_1 = ScopeEntryDefinition |
| k_getsetattr.py:21 | cond_0 = ParameterDefinition |
| k_getsetattr.py:21 | k_0 = FunctionExpr |
| k_getsetattr.py:22 | c1_0 = C() |
| k_getsetattr.py:23 | c2_0 = C() |
| k_getsetattr.py:24 | c3_0 = C() |
| k_getsetattr.py:25 | c1_1 = AttributeAssignment 'a'(c1_0) |
| k_getsetattr.py:27 | c2_1 = AttributeAssignment 'a'(c2_0) |
| k_getsetattr.py:27 | cond_1 = Pi(cond_0) [true] |
| k_getsetattr.py:28 | c2_2 = phi(c2_0, c2_1) |
| k_getsetattr.py:28 | cond_2 = Pi(cond_0) [false] |
| k_getsetattr.py:28 | cond_3 = phi(cond_1, cond_2) |
| k_getsetattr.py:31 | c3_1 = AttributeAssignment 'a'(c3_0) |
| n_nesting.py:0 | D_0 = ScopeEntryDefinition |
| n_nesting.py:0 | __name___0 = ScopeEntryDefinition |
| n_nesting.py:0 | __package___0 = ScopeEntryDefinition |
| n_nesting.py:8 | C_0 = ScopeEntryDefinition |
| n_nesting.py:8 | compile_ops_0 = ParameterDefinition |
| n_nesting.py:8 | foo_0 = FunctionExpr |
| n_nesting.py:9 | C_1 = CallsiteRefinement(C_0) |
| n_nesting.py:10 | C_5 = ScopeEntryDefinition |
| n_nesting.py:10 | compile_ops_1 = Pi(compile_ops_0) [true] |
| n_nesting.py:10 | compile_ops_2 = ScopeEntryDefinition |
| n_nesting.py:10 | inner_0 = FunctionExpr |
| n_nesting.py:10 | node_def_0 = ParameterDefinition |
| n_nesting.py:11 | C_6 = CallsiteRefinement(C_5) |
| n_nesting.py:11 | node_def_1 = ArgumentRefinement(node_def_0) |
| n_nesting.py:13 | C_7 = ScopeEntryDefinition |
| n_nesting.py:13 | compile_ops_3 = Pi(compile_ops_0) [false] |
| n_nesting.py:13 | compile_ops_4 = ScopeEntryDefinition |
| n_nesting.py:13 | inner_1 = FunctionExpr |
| n_nesting.py:13 | node_def_0 = ParameterDefinition |
| n_nesting.py:14 | C_8 = CallsiteRefinement(C_7) |
| n_nesting.py:14 | node_def_1 = ArgumentRefinement(node_def_0) |
| n_nesting.py:15 | attrs_0 = Dict |
| n_nesting.py:16 | compile_ops_5 = phi(compile_ops_1, compile_ops_3) |
| n_nesting.py:16 | inner_2 = phi(inner_0, inner_1) |
| n_nesting.py:22 | C_9 = ScopeEntryDefinition |
| n_nesting.py:22 | f1_0 = FunctionExpr |
| n_nesting.py:23 | C_10 = AttributeAssignment 'flag'(C_9) |
| n_nesting.py:24 | C_11 = ScopeEntryDefinition |
| n_nesting.py:24 | f1_1 = ScopeEntryDefinition |
| n_nesting.py:24 | f2_0 = FunctionExpr |
| n_nesting.py:25 | C_12 = CallsiteRefinement(C_11) |
| n_nesting.py:26 | C_13 = ScopeEntryDefinition |
| n_nesting.py:26 | f2_1 = ScopeEntryDefinition |
| n_nesting.py:26 | f3_0 = FunctionExpr |
| n_nesting.py:27 | C_14 = CallsiteRefinement(C_13) |
| n_nesting.py:28 | C_15 = ScopeEntryDefinition |
| n_nesting.py:28 | f3_1 = ScopeEntryDefinition |
| n_nesting.py:28 | f4_0 = FunctionExpr |
| n_nesting.py:29 | C_16 = CallsiteRefinement(C_15) |
| n_nesting.py:30 | C_2 = ClassExpr |
| n_nesting.py:31 | C_3 = CallsiteRefinement(C_2) |
| n_nesting.py:32 | D_1 = ClassExpr |
| n_nesting.py:34 | C_4 = IntegerLiteral |
| r_regressions.py:0 | TestFirst_0 = ScopeEntryDefinition |
| r_regressions.py:0 | __name___0 = ScopeEntryDefinition |
| r_regressions.py:0 | __package___0 = ScopeEntryDefinition |
| r_regressions.py:0 | _names_0 = ScopeEntryDefinition |
| r_regressions.py:0 | gv_0 = ScopeEntryDefinition |
| r_regressions.py:0 | mod_gv_0 = ScopeEntryDefinition |
| r_regressions.py:0 | sys_0 = ScopeEntryDefinition |
| r_regressions.py:0 | t_0 = ScopeEntryDefinition |
| r_regressions.py:5 | Queue_0 = ClassExpr |
| r_regressions.py:7 | __init___0 = FunctionExpr |
| r_regressions.py:7 | gv_5 = ScopeEntryDefinition |
| r_regressions.py:7 | self_0 = ParameterDefinition |
| r_regressions.py:9 | gv_6 = CallsiteRefinement(gv_5) |
| r_regressions.py:9 | self_1 = SelfCallsiteRefinement(self_0) |
| r_regressions.py:11 | _after_fork_0 = FunctionExpr |
| r_regressions.py:11 | gv_7 = ScopeEntryDefinition |
| r_regressions.py:11 | self_0 = ParameterDefinition |
| r_regressions.py:12 | self_1 = AttributeAssignment '_closed'(self_0) |
| r_regressions.py:13 | self_2 = AttributeAssignment '_close'(self_1) |
| r_regressions.py:15 | close_0 = FunctionExpr |
| r_regressions.py:15 | close_4 = Pi(close_0) [false] |
| r_regressions.py:15 | close_5 = phi(close_3, close_4) |
| r_regressions.py:15 | gv_8 = ScopeEntryDefinition |
| r_regressions.py:15 | gv_33 = phi(gv_9, gv_11) |
| r_regressions.py:15 | self_0 = ParameterDefinition |
| r_regressions.py:15 | self_3 = phi(self_1, self_2) |
| r_regressions.py:16 | self_1 = AttributeAssignment '_closed'(self_0) |
| r_regressions.py:18 | gv_9 = CallsiteRefinement(gv_8) |
| r_regressions.py:20 | close_0 = Attribute |
| r_regressions.py:20 | close_1 = Attribute |
| r_regressions.py:20 | gv_10 = phi(gv_8, gv_9) |
| r_regressions.py:21 | close_2 = SingleSuccessorGuard(close_1) [true] |
| r_regressions.py:22 | close_3 = Pi(close_0) [true] |
| r_regressions.py:22 | self_2 = AttributeAssignment '_close'(self_1) |
| r_regressions.py:23 | gv_11 = CallsiteRefinement(gv_9) |
| r_regressions.py:27 | f_0 = FunctionExpr |
| r_regressions.py:27 | gv_12 = ScopeEntryDefinition |
| r_regressions.py:27 | gv_33 = phi(gv_12, gv_13) |
| r_regressions.py:27 | x_0 = ParameterDefinition |
| r_regressions.py:27 | x_5 = phi(x_3, x_4) |
| r_regressions.py:27 | y_0 = ParameterDefinition |
| r_regressions.py:27 | y_7 = Pi(y_2) [false] |
| r_regressions.py:27 | y_8 = phi(y_3, y_6, y_7) |
| r_regressions.py:27 | z_0 = ParameterDefinition |
| r_regressions.py:27 | z_3 = Pi(z_0) [false] |
| r_regressions.py:27 | z_4 = phi(z_0, z_2, z_3) |
| r_regressions.py:31 | x_1 = Pi(x_0) [true] |
| r_regressions.py:33 | x_2 = Pi(x_0) [false] |
| r_regressions.py:33 | x_3 = phi(x_1, x_2) |
| r_regressions.py:33 | y_1 = Pi(y_0) [false] |
| r_regressions.py:33 | y_2 = phi(y_0, y_1) |
| r_regressions.py:36 | y_3 = Pi(y_2) [true] |
| r_regressions.py:39 | gv_13 = CallsiteRefinement(gv_12) |
| r_regressions.py:39 | x_4 = phi(x_1, x_3) |
| r_regressions.py:39 | y_4 = Pi(y_0) [true] |
| r_regressions.py:39 | y_5 = phi(y_3, y_4) |
| r_regressions.py:39 | y_6 = ArgumentRefinement(y_5) |
| r_regressions.py:39 | z_1 = Pi(z_0) [true] |
| r_regressions.py:39 | z_2 = phi(z_0, z_1) |
| r_regressions.py:42 | find_library_0 = FunctionExpr |
| r_regressions.py:42 | gv_14 = ScopeEntryDefinition |
| r_regressions.py:42 | name_0 = ParameterDefinition |
| r_regressions.py:43 | __0 = x()[1] |
| r_regressions.py:43 | data_0 = x()[0] |
| r_regressions.py:43 | gv_15 = CallsiteRefinement(gv_14) |
| r_regressions.py:46 | fail_0 = FunctionExpr |
| r_regressions.py:46 | gv_16 = ScopeEntryDefinition |
| r_regressions.py:46 | msg_0 = ParameterDefinition |
| r_regressions.py:49 | C_0 = ClassExpr |
| r_regressions.py:51 | fail_0 = FunctionExpr |
| r_regressions.py:51 | fail_1 = ScopeEntryDefinition |
| r_regressions.py:51 | gv_17 = ScopeEntryDefinition |
| r_regressions.py:51 | msg_0 = ParameterDefinition |
| r_regressions.py:51 | self_0 = ParameterDefinition |
| r_regressions.py:52 | gv_18 = CallsiteRefinement(gv_17) |
| r_regressions.py:52 | msg_1 = ArgumentRefinement(msg_0) |
| r_regressions.py:58 | decorator_0 = ParameterDefinition |
| r_regressions.py:58 | gv_19 = ScopeEntryDefinition |
| r_regressions.py:58 | method_decorator_0 = FunctionExpr |
| r_regressions.py:58 | name_0 = ParameterDefinition |
| r_regressions.py:61 | _dec_0 = FunctionExpr |
| r_regressions.py:61 | func_0 = ScopeEntryDefinition |
| r_regressions.py:61 | gv_20 = ScopeEntryDefinition |
| r_regressions.py:61 | gv_33 = phi(gv_23, gv_25) |
| r_regressions.py:61 | is_class_6 = phi(is_class_4, is_class_5) |
| r_regressions.py:61 | name_1 = ScopeEntryDefinition |
| r_regressions.py:61 | obj_0 = ParameterDefinition |
| r_regressions.py:61 | obj_3 = phi(obj_1, obj_2) |
| r_regressions.py:62 | gv_21 = CallsiteRefinement(gv_20) |
| r_regressions.py:62 | is_class_0 = isinstance() |
| r_regressions.py:62 | obj_1 = ArgumentRefinement(obj_0) |
| r_regressions.py:64 | gv_22 = CallsiteRefinement(gv_21) |
| r_regressions.py:64 | is_class_1 = Pi(is_class_0) [true] |
| r_regressions.py:66 | func_1 = obj |
| r_regressions.py:66 | is_class_2 = Pi(is_class_0) [false] |
| r_regressions.py:68 | _wrapper_0 = FunctionExpr |
| r_regressions.py:68 | args_0 = ParameterDefinition |
| r_regressions.py:68 | func_2 = phi(func_0, func_1) |
| r_regressions.py:68 | gv_23 = phi(gv_21, gv_22) |
| r_regressions.py:68 | gv_24 = ScopeEntryDefinition |
| r_regressions.py:68 | is_class_3 = phi(is_class_1, is_class_2) |
| r_regressions.py:68 | kwargs_0 = ParameterDefinition |
| r_regressions.py:68 | self_0 = ParameterDefinition |
| r_regressions.py:73 | gv_25 = CallsiteRefinement(gv_23) |
| r_regressions.py:73 | is_class_4 = Pi(is_class_3) [true] |
| r_regressions.py:73 | obj_2 = ArgumentRefinement(obj_1) |
| r_regressions.py:76 | is_class_5 = Pi(is_class_3) [false] |
| r_regressions.py:80 | deco_0 = FunctionExpr |
| r_regressions.py:80 | func_0 = ParameterDefinition |
| r_regressions.py:80 | gv_26 = ScopeEntryDefinition |
| r_regressions.py:81 | _wrapper_0 = FunctionExpr |
| r_regressions.py:81 | args_0 = ParameterDefinition |
| r_regressions.py:81 | gv_27 = ScopeEntryDefinition |
| r_regressions.py:81 | kwargs_0 = ParameterDefinition |
| r_regressions.py:85 | deco_1 = ArgumentRefinement(deco_0) |
| r_regressions.py:85 | gv_1 = CallsiteRefinement(gv_0) |
| r_regressions.py:85 | gv_2 = CallsiteRefinement(gv_1) |
| r_regressions.py:86 | TestFirst_1 = method_decorator()() |
| r_regressions.py:87 | gv_28 = ScopeEntryDefinition |
| r_regressions.py:87 | method_0 = FunctionExpr |
| r_regressions.py:87 | self_0 = ParameterDefinition |
| r_regressions.py:90 | gv_3 = CallsiteRefinement(gv_2) |
| r_regressions.py:90 | gv_4 = CallsiteRefinement(gv_3) |
| r_regressions.py:93 | sys_1 = ImportExpr |
| r_regressions.py:95 | _names_1 = Attribute |
| r_regressions.py:98 | _names_2 = Pi(_names_1) [true] |
| r_regressions.py:98 | t_1 = ImportExpr |
| r_regressions.py:100 | _names_3 = Pi(_names_1) [false] |
| r_regressions.py:100 | _names_4 = phi(_names_2, _names_3) |
| r_regressions.py:100 | gv_29 = C() |
| r_regressions.py:100 | t_2 = phi(t_0, t_1) |
| r_regressions.py:102 | gv_30 = CallsiteRefinement(gv_29) |
| r_regressions.py:106 | gv_31 = ScopeEntryDefinition |
| r_regressions.py:106 | mod_gv_1 = FunctionExpr |
| r_regressions.py:106 | x_0 = ParameterDefinition |
| r_regressions.py:107 | gv_32 = AttributeAssignment 'attr'(gv_31) |
| s_scopes.py:0 | __name___0 = ScopeEntryDefinition |
| s_scopes.py:0 | __package___0 = ScopeEntryDefinition |
| s_scopes.py:0 | float_0 = ScopeEntryDefinition |
| s_scopes.py:0 | x_0 = ScopeEntryDefinition |
| s_scopes.py:4 | float_1 = True |
| s_scopes.py:5 | float_2 = phi(float_0, float_1) |
| s_scopes.py:7 | C2_0 = ClassExpr |
| s_scopes.py:7 | float_0 = ScopeEntryDefinition |
| s_scopes.py:7 | float_3 = ScopeEntryDefinition |
| s_scopes.py:7 | int_0 = ScopeEntryDefinition |
| s_scopes.py:7 | str_0 = ScopeEntryDefinition |
| s_scopes.py:9 | i1_0 = int |
| s_scopes.py:10 | f1_0 = float |
| s_scopes.py:12 | int_1 = IntegerLiteral |
| s_scopes.py:15 | str_1 = FloatLiteral |
| s_scopes.py:17 | float_1 = None |
| s_scopes.py:18 | float_2 = phi(float_0, float_1) |
| s_scopes.py:18 | i2_0 = int |
| s_scopes.py:18 | str_2 = phi(str_0, str_1) |
| s_scopes.py:19 | s_0 = str |
| s_scopes.py:20 | f2_0 = float |
| s_scopes.py:22 | x_1 = x |
| s_scopes.py:23 | i_0 = int |
| s_scopes.py:24 | f_0 = float |

Просмотреть файл

@ -1,8 +0,0 @@
import python
import Util
from EssaVariable v, EssaDefinition def
where def = v.getDefinition() and not v.getSourceVariable() instanceof SpecialSsaSourceVariable
select locate(def.getLocation(), "abdefghijknrs_"), v.getRepresentation() + " = " + def.getRepresentation()

Просмотреть файл

@ -1,119 +0,0 @@
| f1_0 = open() | open | |
| f1_1 = MethodCallsiteRefinement(f1_0) | open | |
| f1_2 = MethodCallsiteRefinement(f1_1) | closed | exit |
| f2_0 = open() | open | exit |
| f3_0 = open() | open | |
| f3_1 = MethodCallsiteRefinement(f3_0) | closed | exit |
| f4_0 = with | closed | |
| f4_1 = MethodCallsiteRefinement(f4_0) | closed | exit |
| f5_0 = open() | open | |
| f5_1 = MethodCallsiteRefinement(f5_0) | open | |
| f5_2 = MethodCallsiteRefinement(f5_1) | closed | exit |
| f5_3 = phi(f5_0, f5_1) | open | |
| f6_0 = None | closed | |
| f6_1 = open() | open | |
| f6_2 = MethodCallsiteRefinement(f6_1) | open | |
| f6_3 = phi(f6_0, f6_1, f6_2) | open | |
| f6_4 = SingleSuccessorGuard(f6_3) [true] | open | |
| f6_5 = Pi(f6_2) [true] | open | |
| f6_6 = MethodCallsiteRefinement(f6_5) | closed | |
| f6_7 = Pi(f6_2) [false] | closed | |
| f6_8 = phi(f6_6, f6_7) | closed | exit |
| f7_0 = None | closed | |
| f7_1 = open() | open | |
| f7_2 = MethodCallsiteRefinement(f7_1) | open | |
| f7_3 = phi(f7_0, f7_1, f7_2) | open | |
| f7_4 = SingleSuccessorGuard(f7_3) [true] | open | |
| f7_5 = Pi(f7_2) [true] | open | |
| f7_6 = MethodCallsiteRefinement(f7_5) | closed | |
| f7_7 = Pi(f7_2) [false] | closed | |
| f7_8 = phi(f7_6, f7_7) | closed | exit |
| f8_0 = None | closed | |
| f8_1 = open() | open | |
| f8_2 = MethodCallsiteRefinement(f8_1) | open | |
| f8_3 = phi(f8_0, f8_1, f8_2) | open | |
| f8_4 = SingleSuccessorGuard(f8_3) [true] | open | |
| f8_5 = Pi(f8_2) [true] | closed | |
| f8_6 = MethodCallsiteRefinement(f8_5) | closed | |
| f8_7 = Pi(f8_2) [false] | open | |
| f8_8 = phi(f8_6, f8_7) | open | exit |
| f9_0 = None | closed | |
| f9_1 = open() | open | |
| f9_2 = MethodCallsiteRefinement(f9_1) | open | |
| f9_3 = phi(f9_0, f9_1, f9_2) | open | |
| f9_4 = SingleSuccessorGuard(f9_3) [true] | open | |
| f9_5 = Pi(f9_2) [true] | closed | |
| f9_6 = MethodCallsiteRefinement(f9_5) | closed | |
| f9_7 = Pi(f9_2) [false] | open | |
| f9_8 = phi(f9_6, f9_7) | open | exit |
| f10_0 = open() | open | |
| f10_1 = MethodCallsiteRefinement(f10_0) | open | |
| f10_2 = MethodCallsiteRefinement(f10_1) | open | |
| f10_3 = MethodCallsiteRefinement(f10_2) | closed | |
| f10_4 = phi(f10_0, f10_1, f10_2, f10_3) | open | |
| f10_5 = MethodCallsiteRefinement(f10_4) | closed | |
| f10_6 = phi(f10_3, f10_5) | closed | exit |
| f11_0 = open() | open | |
| f11_1 = MethodCallsiteRefinement(f11_0) | open | |
| f11_2 = MethodCallsiteRefinement(f11_1) | open | |
| f11_3 = MethodCallsiteRefinement(f11_2) | closed | |
| f11_4 = phi(f11_0, f11_1, f11_2, f11_3) | open | |
| f11_5 = MethodCallsiteRefinement(f11_4) | closed | |
| f11_6 = phi(f11_3, f11_5) | closed | exit |
| f12_0 = open() | open | |
| f12_1 = MethodCallsiteRefinement(f12_0) | open | |
| f12_2 = MethodCallsiteRefinement(f12_1) | open | |
| f12_3 = MethodCallsiteRefinement(f12_2) | closed | |
| f12_4 = phi(f12_0, f12_1, f12_2, f12_3) | open | |
| f12_5 = MethodCallsiteRefinement(f12_4) | closed | |
| f12_6 = phi(f12_3, f12_5) | closed | exit |
| f13_0 = open() | open | |
| f13_1 = MethodCallsiteRefinement(f13_0) | open | exit |
| f14_0 = opener_func2() | open | |
| f14_1 = MethodCallsiteRefinement(f14_0) | open | |
| f14_2 = MethodCallsiteRefinement(f14_1) | closed | exit |
| f15_0 = opener_func2() | open | |
| f15_1 = ArgumentRefinement(f15_0) | closed | exit |
| f16_0 = ScopeEntryDefinition | closed | |
| f16_1 = open() | open | |
| f16_2 = MethodCallsiteRefinement(f16_1) | open | |
| f16_3 = MethodCallsiteRefinement(f16_2) | closed | |
| f16_4 = phi(f16_0, f16_1, f16_2, f16_3) | open | |
| f16_5 = phi(f16_3, f16_4) | open | exit |
| f17_0 = open() | open | |
| f17_1 = MethodCallsiteRefinement(f17_0) | open | |
| f17_2 = MethodCallsiteRefinement(f17_1) | open | |
| f17_3 = MethodCallsiteRefinement(f17_2) | closed | |
| f17_4 = phi(f17_0, f17_1, f17_2, f17_3) | open | |
| f17_5 = MethodCallsiteRefinement(f17_4) | closed | |
| f17_6 = phi(f17_3, f17_5) | closed | exit |
| f18_0 = open() | closed | |
| f18_1 = MethodCallsiteRefinement(f18_0) | closed | exit |
| f20_0 = open() | open | |
| f20_1 = ArgumentRefinement(f20_0) | closed | exit |
| f21_0 = open() | open | |
| f21_1 = MethodCallsiteRefinement(f21_0) | open | |
| f21_2 = MethodCallsiteRefinement(f21_1) | closed | |
| f21_3 = phi(f21_1, f21_2) | open | |
| f21_4 = phi(f21_0, f21_1, f21_2) | open | |
| f21_5 = SingleSuccessorGuard(f21_4) [true] | open | |
| f21_6 = Pi(f21_3) [true] | open | |
| f21_7 = MethodCallsiteRefinement(f21_6) | closed | |
| f21_8 = Pi(f21_3) [false] | closed | |
| f21_9 = phi(f21_7, f21_8) | closed | exit |
| f22_0 = open() | open | |
| f22_1 = MethodCallsiteRefinement(f22_0) | open | |
| f22_2 = MethodCallsiteRefinement(f22_1) | closed | |
| f22_3 = phi(f22_1, f22_2) | open | |
| f22_4 = phi(f22_0, f22_1, f22_2) | open | |
| f22_5 = SingleSuccessorGuard(f22_4) [true] | open | |
| f22_6 = Pi(f22_3) [true] | closed | |
| f22_7 = MethodCallsiteRefinement(f22_6) | closed | |
| f22_8 = Pi(f22_3) [false] | open | |
| f22_9 = phi(f22_7, f22_8) | open | exit |
| f_0 = FunctionExpr | closed | exit |
| file_0 = open() | open | |
| file_1 = open() | open | |
| file_2 = None | closed | |
| file_3 = phi(file_0, file_1, file_2) | open | exit |
| fp_0 = ParameterDefinition | closed | exit |

Просмотреть файл

@ -1,16 +0,0 @@
import python
import Resources.FileOpen
from EssaVariable v, EssaDefinition def, string open, string exit
where def = v.getDefinition() and v.getSourceVariable().getName().charAt(0) = "f" and
(
var_is_open(v, _) and open = "open"
or
not var_is_open(v, _) and open = "closed"
)
and
if BaseFlow::reaches_exit(v) then exit = "exit" else exit = ""
select v.getRepresentation() + " = " + v.getDefinition().getRepresentation(), open, exit