@@ -136,6 +136,9 @@ func (r *runner) run(pass *analysis.Pass) {
136
136
}
137
137
138
138
if entryType := r .checkIsEntry (f ); entryType == EntryNormal {
139
+ if _ , ok := r .getValue (key , f ); ok {
140
+ continue
141
+ }
139
142
// record the result of nomal function
140
143
checkingMap := make (map [string ]bool )
141
144
checkingMap [key ] = true
@@ -587,7 +590,10 @@ func (r *runner) checkFuncWithoutCtx(f *ssa.Function, checkingMap map[string]boo
587
590
checkingMap [key ] = true
588
591
589
592
valid := r .checkFuncWithoutCtx (ff , checkingMap )
590
- r .setFact (orgKey , valid , ff .Name ())
593
+ r .setFact (key , valid , ff .Name ())
594
+ if res , ok := r .getValue (key , ff ); ok {
595
+ r .setFact (orgKey , valid , res .Funcs ... )
596
+ }
591
597
if ! valid {
592
598
ret = false
593
599
}
@@ -732,9 +738,13 @@ func (r *runner) getValue(key string, f *ssa.Function) (res resInfo, ok bool) {
732
738
}
733
739
734
740
func (r * runner ) setFact (key string , valid bool , funcs ... string ) {
741
+ var names []string
742
+ if ! valid {
743
+ names = append (r .currentFact [key ].Funcs , funcs ... )
744
+ }
735
745
r .currentFact [key ] = resInfo {
736
746
Valid : valid ,
737
- Funcs : append ( r . currentFact [ key ]. Funcs , funcs ... ) ,
747
+ Funcs : names ,
738
748
}
739
749
}
740
750
0 commit comments