aboutsummaryrefslogtreecommitdiffstats
path: root/prog/analysis.go
diff options
context:
space:
mode:
Diffstat (limited to 'prog/analysis.go')
-rw-r--r--prog/analysis.go29
1 files changed, 17 insertions, 12 deletions
diff --git a/prog/analysis.go b/prog/analysis.go
index 6643941ff..697e1eab5 100644
--- a/prog/analysis.go
+++ b/prog/analysis.go
@@ -160,29 +160,34 @@ func foreachArgImpl(arg Arg, ctx *ArgCtx, f func(Arg, *ArgCtx)) {
}
}
-func RequiredFeatures(p *Prog) (bitmasks, csums bool) {
+type RequiredFeatures struct {
+ Bitmasks bool
+ Csums bool
+ FaultInjection bool
+ Async bool
+}
+
+func (p *Prog) RequiredFeatures() RequiredFeatures {
+ features := RequiredFeatures{}
for _, c := range p.Calls {
ForeachArg(c, func(arg Arg, _ *ArgCtx) {
if a, ok := arg.(*ConstArg); ok {
if a.Type().BitfieldOffset() != 0 || a.Type().BitfieldLength() != 0 {
- bitmasks = true
+ features.Bitmasks = true
}
}
if _, ok := arg.Type().(*CsumType); ok {
- csums = true
+ features.Csums = true
}
})
- }
- return
-}
-
-func (p *Prog) HasFaultInjection() bool {
- for _, call := range p.Calls {
- if call.Props.FailNth > 0 {
- return true
+ if c.Props.FailNth > 0 {
+ features.FaultInjection = true
+ }
+ if c.Props.Async {
+ features.Async = true
}
}
- return false
+ return features
}
type CallFlags int