summaryrefslogtreecommitdiff
path: root/vendor/github.com/mmcloughlin/avo/pass/textflag.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/mmcloughlin/avo/pass/textflag.go')
-rw-r--r--vendor/github.com/mmcloughlin/avo/pass/textflag.go42
1 files changed, 42 insertions, 0 deletions
diff --git a/vendor/github.com/mmcloughlin/avo/pass/textflag.go b/vendor/github.com/mmcloughlin/avo/pass/textflag.go
new file mode 100644
index 0000000..35a848b
--- /dev/null
+++ b/vendor/github.com/mmcloughlin/avo/pass/textflag.go
@@ -0,0 +1,42 @@
+package pass
+
+import (
+ "github.com/mmcloughlin/avo/attr"
+ "github.com/mmcloughlin/avo/ir"
+)
+
+// IncludeTextFlagHeader includes textflag.h if necessary.
+func IncludeTextFlagHeader(f *ir.File) error {
+ const textflagheader = "textflag.h"
+
+ // Check if we already have it.
+ for _, path := range f.Includes {
+ if path == textflagheader {
+ return nil
+ }
+ }
+
+ // Add it if necessary.
+ if requirestextflags(f) {
+ f.Includes = append(f.Includes, textflagheader)
+ }
+
+ return nil
+}
+
+// requirestextflags returns whether the file uses flags in the textflags.h header.
+func requirestextflags(f *ir.File) bool {
+ for _, s := range f.Sections {
+ var a attr.Attribute
+ switch s := s.(type) {
+ case *ir.Function:
+ a = s.Attributes
+ case *ir.Global:
+ a = s.Attributes
+ }
+ if a.ContainsTextFlags() {
+ return true
+ }
+ }
+ return false
+}