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.
pull/28119/head
Felix Lange 1 year ago committed by GitHub
parent ee654626ad
commit 909dd4a109
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 3
      core/types/gen_account_rlp.go
  2. 3
      core/types/gen_header_rlp.go
  3. 3
      core/types/gen_log_rlp.go
  4. 3
      core/types/gen_withdrawal_rlp.go
  5. 5
      rlp/rlpgen/main.go

@ -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"

@ -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"

@ -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"

@ -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"

@ -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
} }

Loading…
Cancel
Save