Data flow: Sync files

This commit is contained in:
Tom Hvitved
2020-02-17 15:08:26 +01:00
parent c7aa31d90a
commit 0e7838aca5
21 changed files with 96 additions and 27 deletions

View File

@@ -615,7 +615,9 @@ private newtype TNodeExt =
exists(Configuration config |
nodeCand1(node1, config) and
argumentValueFlowsThrough(call, node1, TContentSome(f1), TContentSome(f2), node2) and
nodeCand1(node2, unbind(config))
nodeCand1(node2, unbind(config)) and
readStoreCand1(f1, unbind(config)) and
readStoreCand1(f2, unbind(config))
)
}

View File

@@ -615,7 +615,9 @@ private newtype TNodeExt =
exists(Configuration config |
nodeCand1(node1, config) and
argumentValueFlowsThrough(call, node1, TContentSome(f1), TContentSome(f2), node2) and
nodeCand1(node2, unbind(config))
nodeCand1(node2, unbind(config)) and
readStoreCand1(f1, unbind(config)) and
readStoreCand1(f2, unbind(config))
)
}

View File

@@ -615,7 +615,9 @@ private newtype TNodeExt =
exists(Configuration config |
nodeCand1(node1, config) and
argumentValueFlowsThrough(call, node1, TContentSome(f1), TContentSome(f2), node2) and
nodeCand1(node2, unbind(config))
nodeCand1(node2, unbind(config)) and
readStoreCand1(f1, unbind(config)) and
readStoreCand1(f2, unbind(config))
)
}

View File

@@ -615,7 +615,9 @@ private newtype TNodeExt =
exists(Configuration config |
nodeCand1(node1, config) and
argumentValueFlowsThrough(call, node1, TContentSome(f1), TContentSome(f2), node2) and
nodeCand1(node2, unbind(config))
nodeCand1(node2, unbind(config)) and
readStoreCand1(f1, unbind(config)) and
readStoreCand1(f2, unbind(config))
)
}

View File

@@ -615,7 +615,9 @@ private newtype TNodeExt =
exists(Configuration config |
nodeCand1(node1, config) and
argumentValueFlowsThrough(call, node1, TContentSome(f1), TContentSome(f2), node2) and
nodeCand1(node2, unbind(config))
nodeCand1(node2, unbind(config)) and
readStoreCand1(f1, unbind(config)) and
readStoreCand1(f2, unbind(config))
)
}

View File

@@ -383,17 +383,28 @@ private module Cached {
contentOut = TContentNone() and
compatibleTypes(getErasedNodeTypeBound(arg), getErasedNodeTypeBound(out))
or
// getter(+setter)
// getter
exists(Content fIn |
contentIn.getContent() = fIn and
compatibleTypes(getErasedNodeTypeBound(arg), fIn.getContainerType())
contentOut = TContentNone() and
compatibleTypes(getErasedNodeTypeBound(arg), fIn.getContainerType()) and
compatibleTypes(fIn.getType(), getErasedNodeTypeBound(out))
)
or
// setter
exists(Content fOut |
contentIn = TContentNone() and
contentOut.getContent() = fOut and
compatibleTypes(getErasedNodeTypeBound(arg), fOut.getType())
compatibleTypes(getErasedNodeTypeBound(arg), fOut.getType()) and
compatibleTypes(fOut.getContainerType(), getErasedNodeTypeBound(out))
)
or
// getter+setter
exists(Content fIn, Content fOut |
contentIn.getContent() = fIn and
contentOut.getContent() = fOut and
compatibleTypes(getErasedNodeTypeBound(arg), fIn.getContainerType()) and
compatibleTypes(fOut.getContainerType(), getErasedNodeTypeBound(out))
)
)
}