Stateify: register types with full package names
This is to avoid conflicts with types that share the same [short] package and type names, e.g. proc.smapsData exist in pkg/sentry/fs/proc and pkg/sentry/fsimpl/proc. Updates #1663 PiperOrigin-RevId: 294485146
This commit is contained in:
parent
115898e368
commit
9be46e55c2
|
@ -110,6 +110,8 @@ def go_library(name, srcs, deps = [], imports = [], stateify = True, marshal = F
|
|||
"""
|
||||
all_srcs = srcs
|
||||
all_deps = deps
|
||||
dirname, _, _ = native.package_name().rpartition("/")
|
||||
full_pkg = dirname + "/" + name
|
||||
if stateify:
|
||||
# Only do stateification for non-state packages without manual autogen.
|
||||
# First, we need to segregate the input files via the special suffixes,
|
||||
|
@ -120,7 +122,7 @@ def go_library(name, srcs, deps = [], imports = [], stateify = True, marshal = F
|
|||
name = name + suffix + "_state_autogen_with_imports",
|
||||
srcs = srcs,
|
||||
imports = imports,
|
||||
package = name,
|
||||
package = full_pkg,
|
||||
out = name + suffix + "_state_autogen_with_imports.go",
|
||||
)
|
||||
go_imports(
|
||||
|
|
|
@ -6,7 +6,7 @@ def _go_stateify_impl(ctx):
|
|||
|
||||
# Run the stateify command.
|
||||
args = ["-output=%s" % output.path]
|
||||
args.append("-pkg=%s" % ctx.attr.package)
|
||||
args.append("-fullpkg=%s" % ctx.attr.package)
|
||||
if ctx.attr._statepkg:
|
||||
args.append("-statepkg=%s" % ctx.attr._statepkg)
|
||||
if ctx.attr.imports:
|
||||
|
@ -43,7 +43,7 @@ for statified types.
|
|||
mandatory = False,
|
||||
),
|
||||
"package": attr.string(
|
||||
doc = "The package name for the input sources.",
|
||||
doc = "The fully qualified package name for the input sources.",
|
||||
mandatory = True,
|
||||
),
|
||||
"out": attr.output(
|
||||
|
|
|
@ -23,6 +23,7 @@ import (
|
|||
"go/parser"
|
||||
"go/token"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"reflect"
|
||||
"strings"
|
||||
"sync"
|
||||
|
@ -31,7 +32,7 @@ import (
|
|||
)
|
||||
|
||||
var (
|
||||
pkg = flag.String("pkg", "", "output package")
|
||||
fullPkg = flag.String("fullpkg", "", "fully qualified output package")
|
||||
imports = flag.String("imports", "", "extra imports for the output file")
|
||||
output = flag.String("output", "", "output file")
|
||||
statePkg = flag.String("statepkg", "", "state import package; defaults to empty")
|
||||
|
@ -170,7 +171,7 @@ func main() {
|
|||
flag.Usage()
|
||||
os.Exit(1)
|
||||
}
|
||||
if *pkg == "" {
|
||||
if *fullPkg == "" {
|
||||
fmt.Fprintf(os.Stderr, "Error: package required.")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
@ -202,7 +203,7 @@ func main() {
|
|||
|
||||
// Declare our emission closures.
|
||||
emitRegister := func(name string) {
|
||||
initCalls = append(initCalls, fmt.Sprintf("%sRegister(\"%s.%s\", (*%s)(nil), state.Fns{Save: (*%s).save, Load: (*%s).load})", statePrefix, *pkg, name, name, name, name))
|
||||
initCalls = append(initCalls, fmt.Sprintf("%sRegister(\"%s.%s\", (*%s)(nil), state.Fns{Save: (*%s).save, Load: (*%s).load})", statePrefix, *fullPkg, name, name, name, name))
|
||||
}
|
||||
emitZeroCheck := func(name string) {
|
||||
fmt.Fprintf(outputFile, " if !%sIsZeroValue(x.%s) { m.Failf(\"%s is %%v, expected zero\", x.%s) }\n", statePrefix, name, name, name)
|
||||
|
@ -233,7 +234,8 @@ func main() {
|
|||
}
|
||||
|
||||
// Emit the package name.
|
||||
fmt.Fprintf(outputFile, "package %s\n\n", *pkg)
|
||||
_, pkg := filepath.Split(*fullPkg)
|
||||
fmt.Fprintf(outputFile, "package %s\n\n", pkg)
|
||||
|
||||
// Emit the imports lazily.
|
||||
var once sync.Once
|
||||
|
|
Loading…
Reference in New Issue