The Context.Label method and LABEL global function did not agree. Also breaks the convention I'd like to set that capitalized functions must agree with existing Go assembly syntax. To help avoid a conflict with `avo.Label`, attributes were moved to their own package. Fixes #35
43 lines
837 B
Go
43 lines
837 B
Go
package pass
|
|
|
|
import (
|
|
"github.com/mmcloughlin/avo"
|
|
"github.com/mmcloughlin/avo/attr"
|
|
)
|
|
|
|
// IncludeTextFlagHeader includes textflag.h if necessary.
|
|
func IncludeTextFlagHeader(f *avo.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 *avo.File) bool {
|
|
for _, s := range f.Sections {
|
|
var a attr.Attribute
|
|
switch s := s.(type) {
|
|
case *avo.Function:
|
|
a = s.Attributes
|
|
case *avo.Global:
|
|
a = s.Attributes
|
|
}
|
|
if a.ContainsTextFlags() {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|