rlp/rlpgen: remove build tag (#28106)

* rlp/rlpgen: remove build tag

This tag was supposed to prevent unstable output when types reference each other. Imagine
there are two struct types A and B, where a reference to type B is in A. If I run rlpgen
on type B first, and then on type A, the generator will see the B.EncodeRLP method and
call it. However, if I run rlpgen on type A first, it will inline the encoding of B.

The solution I chose for the initial release of rlpgen was to just ignore methods
generated by rlpgen using a build tag. But there is a problem with this: if any code in
the package calls EncodeRLP explicitly, the package can't be loaded without errors anymore
in rlpgen, because the loader ignores it. Would be nice if there was a way to just make it
ignore invalid functions during type checking (they're not necessary for rlpgen), but
golang.org/x/tools/go/packages does not provide a way of ignoring them.

Luckily, the types we use rlpgen with do not reference each other right now, so we can
just remove the build tags for now.
This commit is contained in:
Felix Lange 2023-09-14 12:28:40 +02:00 committed by GitHub
parent ee654626ad
commit 909dd4a109
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 2 additions and 17 deletions

View File

@ -1,8 +1,5 @@
// Code generated by rlpgen. DO NOT EDIT. // Code generated by rlpgen. DO NOT EDIT.
//go:build !norlpgen
// +build !norlpgen
package types package types
import "github.com/ethereum/go-ethereum/rlp" import "github.com/ethereum/go-ethereum/rlp"

View File

@ -1,8 +1,5 @@
// Code generated by rlpgen. DO NOT EDIT. // Code generated by rlpgen. DO NOT EDIT.
//go:build !norlpgen
// +build !norlpgen
package types package types
import "github.com/ethereum/go-ethereum/rlp" import "github.com/ethereum/go-ethereum/rlp"

View File

@ -1,8 +1,5 @@
// Code generated by rlpgen. DO NOT EDIT. // Code generated by rlpgen. DO NOT EDIT.
//go:build !norlpgen
// +build !norlpgen
package types package types
import "github.com/ethereum/go-ethereum/rlp" import "github.com/ethereum/go-ethereum/rlp"

View File

@ -1,8 +1,5 @@
// Code generated by rlpgen. DO NOT EDIT. // Code generated by rlpgen. DO NOT EDIT.
//go:build !norlpgen
// +build !norlpgen
package types package types
import "github.com/ethereum/go-ethereum/rlp" import "github.com/ethereum/go-ethereum/rlp"

View File

@ -73,9 +73,8 @@ type Config struct {
func (cfg *Config) process() (code []byte, err error) { func (cfg *Config) process() (code []byte, err error) {
// Load packages. // Load packages.
pcfg := &packages.Config{ pcfg := &packages.Config{
Mode: packages.NeedName | packages.NeedTypes | packages.NeedImports | packages.NeedDeps, Mode: packages.NeedName | packages.NeedTypes,
Dir: cfg.Dir, Dir: cfg.Dir,
BuildFlags: []string{"-tags", "norlpgen"},
} }
ps, err := packages.Load(pcfg, pathOfPackageRLP, ".") ps, err := packages.Load(pcfg, pathOfPackageRLP, ".")
if err != nil { if err != nil {
@ -117,8 +116,6 @@ func (cfg *Config) process() (code []byte, err error) {
// This is done here to avoid processing these lines with gofmt. // This is done here to avoid processing these lines with gofmt.
var header bytes.Buffer var header bytes.Buffer
fmt.Fprint(&header, "// Code generated by rlpgen. DO NOT EDIT.\n\n") fmt.Fprint(&header, "// Code generated by rlpgen. DO NOT EDIT.\n\n")
fmt.Fprint(&header, "//go:build !norlpgen\n")
fmt.Fprint(&header, "// +build !norlpgen\n\n")
return append(header.Bytes(), code...), nil return append(header.Bytes(), code...), nil
} }