XCSG:Operator
Operators are used to represent relatively simple, highly information-preserving operations, such as mathematical operators, string concatenation, and type casts.
Data is considered to flow through an Operator, even though an Operator may modify both the data and its type. For example, multiplying two float
s in Java produces a double
, which is considered to carry enough information about both operands for it to be preferable to not disconnect the flow by default.
If any particular analysis finds data flow through certain Operators undesirable, those flows can be disconnected simply by excluding the undesired Operators from the graph used by the analysis.
A number of operators that perform no transformation of data are not considered Operators in an XCSG graph, including Assignments, and the dot operator (represented by IdentityPassSites for Method calls, and simply by InterproceduralDataFlow edges for field accesses).
Specification
Metaclass | Operator |
---|---|
Extends | DataFlow (Node) |
Description | Represents the result of an operator in DataFlow, such as the result of a negation, addition, or type cast. |
Direct Subkinds | Java:ArrayLengthOperator, BinaryOperator, InstanceOf, UnaryOperator |
---|
All Superkinds | DataFlow (Node), Node, ModelElement |
---|
Specified In Edges
| ||||
---|---|---|---|---|
Inherited From | In Edge | Predecessor | Multiplicity | Description |
DataFlow (Node) | DataFlow (Edge) | DataFlow (Node) | ✱ | Connects DataFlow nodes to one another and to Variables, linking the origin of data to locations that it is modified or consumed. |
Variable | ✱ |
Specified Out Edges
| ||||
---|---|---|---|---|
Inherited From | Out Edge | Successor | Multiplicity | Description |
DataFlow (Node) | ArrayIdentityFor | ArrayAccess | 1 | Connects a DataFlow (Node) containing an array reference or pointer to the ArrayAccess representing the associated ArrayRead or ArrayWrite.
|
ArrayIndexFor | ArrayAccess | 1 | Connects a DataFlow (Node) containing a value used as an array index to the ArrayAccess representing the associated ArrayRead or ArrayWrite. | |
Java:ArrayLengthPassedTo | ArrayInstantiation | 1 | Connects a DataFlow (Node) representing the integer length expression to an ArrayInstantiation. | |
DataFlow (Edge) | DataFlow (Node) | ✱ | Connects DataFlow nodes to one another and to Variables, linking the origin of data to locations that it is modified or consumed.
| |
Variable | ✱ | |||
DefinedAs | TypeAlias | 0..1 | Connects a Variable or DataFlow node which received its Type via a TypeAlias (such as a C/C++ typedef) to that TypeAlias. | |
InstanceVariableWritten | InstanceVariableAssignment | ✱ | Connects a value (DataFlow (Node) or Variable) representing an object instance to an InstanceVariableAssignment representing a write to a field of that object. | |
TypeOf | Type | 1 | Links a Variable or DataFlow node to its Type |
Known Possible In Edges
| ||||
---|---|---|---|---|
Inherited From | In Edge | Predecessor | Multiplicity | Description |
DataFlow (Node) | InterproceduralDataFlow | Variable | ✱ | Represents data flows between Functions, or involving Variables visible to multiple Functions.
|
LocalDataFlow | Parameter | ✱ | Within the scope of a particular Function, connects Parameters to DataFlow nodes, and DataFlow nodes to one another, indicating flow of information within that Function.
| |
DataFlow (Node) | ✱ | |||
ProgramVariable | ✱ | |||
Node | Contains | Node | 1 | Indicates that the predecessor contains the successor in a sense specified by the specific type of Contains edge. |
Known Possible Out Edges
| ||||
---|---|---|---|---|
Inherited From | Out Edge | Successor | Multiplicity | Description |
DataFlow (Node) | LocalDataFlow | DataFlow (Node) | ✱ | Within the scope of a particular Function, connects Parameters to DataFlow nodes, and DataFlow nodes to one another, indicating flow of information within that Function. |
Node | Contains | Node | ✱ | Indicates that the predecessor contains the successor in a sense specified by the specific type of Contains edge. |