An identifier reference points to a variable like a in b <- a. Without any surrounding code, a will produce the identifier reference a. Similarly, b will create a reference (although it will be an identifier definition which adds even more information).

In general, references are merely pointers (with meta-information) to a vertex in the DataflowGraph|dataflow graph. In the context of the extractor, for example, they indicate the references that are currently (during the analysis at this given node) DataflowInformation#in|read (in), DataflowInformation#out|written (out), or DataflowInformation#unknownReferences|unknown (unknownReferences).

interface IdentifierReference {
    controlDependencies: undefined | ControlDependency[];
    name: undefined | Identifier;
    nodeId: NodeId;
    type: ReferenceType;
}

Hierarchy (view full)

Hierarchy-Diagram

UML class diagram of IdentifierReference

Properties

controlDependencies: undefined | ControlDependency[]

If the reference is only effective, if, for example, an if-then-else condition is true, this references the root of the if. As a hacky intermediate solution (until we have pointer-analysis), an empty array may indicate a maybe which is due to pointer access (e.g., in a[x] <- 3).

name: undefined | Identifier

Name the reference is identified by (e.g., the name of the variable), undefined if the reference is "artificial" (e.g., anonymous)

nodeId: NodeId

The id of the node which represents the reference in the NormalizedAst|normalized AST and the DataflowGraph|dataflow graph.

Type of the reference to be resolved