@@ -61,7 +61,7 @@ module Ssa {
61
61
* to the underlying variable.
62
62
*/
63
63
cached
64
- predicate assigns ( ExprCfgNode value ) {
64
+ predicate assigns ( CfgNode value ) {
65
65
exists (
66
66
AssignExpr a , BasicBlock bb , int i // TODO: use CFG node for assignment expr
67
67
|
@@ -70,15 +70,21 @@ module Ssa {
70
70
value .getNode ( ) .asAstNode ( ) = a .getSource ( )
71
71
)
72
72
or
73
- exists ( VarDecl var , BasicBlock bb , int blockIndex , PatternBindingDecl pbd |
73
+ exists ( VarDecl var , BasicBlock bb , int blockIndex , PatternBindingDecl pbd , Expr init |
74
74
this .definesAt ( var , bb , blockIndex ) and
75
75
pbd .getAPattern ( ) = bb .getNode ( blockIndex ) .getNode ( ) .asAstNode ( ) and
76
- value .getNode ( ) .asAstNode ( ) = var .getParentInitializer ( )
76
+ init = var .getParentInitializer ( )
77
+ |
78
+ value .getNode ( ) .asAstNode ( ) = init
79
+ or
80
+ // TODO: We should probably enumerate more cfg nodes here.
81
+ value .( PropertyGetterCfgNode ) .getRef ( ) = init
77
82
)
78
83
}
79
84
80
85
cached
81
86
predicate isInoutDef ( ExprCfgNode argument ) {
87
+ // TODO: This should probably not be only `ExprCfgNode`s.
82
88
exists (
83
89
ApplyExpr c , BasicBlock bb , int blockIndex , int argIndex , VarDecl v , InOutExpr argExpr // TODO: use CFG node for assignment expr
84
90
|
0 commit comments