From 76b64667f70ef3b548bb1548d5f681e7bd60ab58 Mon Sep 17 00:00:00 2001 From: Jaeyoung Date: Fri, 26 Sep 2025 13:57:43 +0900 Subject: [PATCH 1/2] =?UTF-8?q?capnpc-go:=20struct=20func=EC=97=90=20Struc?= =?UTF-8?q?tInfo/NewP=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- capnpc-go/capnpc-go.go | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/capnpc-go/capnpc-go.go b/capnpc-go/capnpc-go.go index 1554edc..56a3d83 100644 --- a/capnpc-go/capnpc-go.go +++ b/capnpc-go/capnpc-go.go @@ -966,14 +966,25 @@ func (t Type) json(w io.Writer) { func (n *node) defineNewStructFunc(w io.Writer) { assert(n.Which() == NODE_STRUCT, "invalid struct node") + var ( + datasz = n.Struct().DataWordCount() * 8 + ptrs = n.Struct().PointerCount() + ) fprintf(w, "func New%s(s *C.Segment) %s { return %s(s.NewStruct(%d, %d)) }\n", - n.name, n.name, n.name, n.Struct().DataWordCount()*8, n.Struct().PointerCount()) + n.name, n.name, n.name, datasz, ptrs) fprintf(w, "func NewRoot%s(s *C.Segment) %s { return %s(s.NewRootStruct(%d, %d)) }\n", - n.name, n.name, n.name, n.Struct().DataWordCount()*8, n.Struct().PointerCount()) + n.name, n.name, n.name, datasz, ptrs) fprintf(w, "func AutoNew%s(s *C.Segment) %s { return %s(s.NewStructAR(%d, %d)) }\n", - n.name, n.name, n.name, n.Struct().DataWordCount()*8, n.Struct().PointerCount()) + n.name, n.name, n.name, datasz, ptrs) fprintf(w, "func ReadRoot%s(s *C.Segment) %s { return %s(s.Root(0).ToStruct()) }\n", n.name, n.name, n.name) + + if enabledStructInfo { + fprintf(w, "func (s *%s) StructInfo() (int, int) { return %d, %d }\n", + n.name, datasz, ptrs) + fprintf(w, "func (s *%s) NewP(p C.Struct) *%s {\nv := %s(p)\nreturn &v\n}\n", + n.name, n.name, n.name) + } } func (n *node) defineStructList(w io.Writer) { @@ -1015,6 +1026,7 @@ var ( disabledCaplitUnarshal = false disabledUtil = false disabledBase = false + enabledStructInfo = false ignorePrivateInfoField = false privateInfoField = map[string]bool{ "fbName": true, @@ -1041,6 +1053,9 @@ func init() { if disable, err := strconv.ParseBool(os.Getenv("GO_CAPNP_BASE_DISABLE")); err == nil { disabledBase = disable } + if enable, err := strconv.ParseBool(os.Getenv("GO_CAPNP_STRUCT_INFO_ENABLE")); err == nil { + enabledStructInfo = enable + } if disable, err := strconv.ParseBool(os.Getenv("IGNORE_PRIVATE_INFO_FIELD")); err == nil { ignorePrivateInfoField = disable } From 05941fb157c36dfb3ed14830e3b37f9a5d1d4265 Mon Sep 17 00:00:00 2001 From: Jaeyoung Date: Wed, 29 Oct 2025 10:27:18 +0900 Subject: [PATCH 2/2] =?UTF-8?q?capnpc-go:=20struct=20func=EC=97=90=20gener?= =?UTF-8?q?ate=EB=A5=BC=20optional=ED=95=98=EA=B2=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- capnpc-go/capnpc-go.go | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/capnpc-go/capnpc-go.go b/capnpc-go/capnpc-go.go index 56a3d83..ea58de0 100644 --- a/capnpc-go/capnpc-go.go +++ b/capnpc-go/capnpc-go.go @@ -970,14 +970,16 @@ func (n *node) defineNewStructFunc(w io.Writer) { datasz = n.Struct().DataWordCount() * 8 ptrs = n.Struct().PointerCount() ) - fprintf(w, "func New%s(s *C.Segment) %s { return %s(s.NewStruct(%d, %d)) }\n", - n.name, n.name, n.name, datasz, ptrs) - fprintf(w, "func NewRoot%s(s *C.Segment) %s { return %s(s.NewRootStruct(%d, %d)) }\n", - n.name, n.name, n.name, datasz, ptrs) - fprintf(w, "func AutoNew%s(s *C.Segment) %s { return %s(s.NewStructAR(%d, %d)) }\n", - n.name, n.name, n.name, datasz, ptrs) - fprintf(w, "func ReadRoot%s(s *C.Segment) %s { return %s(s.Root(0).ToStruct()) }\n", - n.name, n.name, n.name) + if !disabledStructFunc { + fprintf(w, "func New%s(s *C.Segment) %s { return %s(s.NewStruct(%d, %d)) }\n", + n.name, n.name, n.name, datasz, ptrs) + fprintf(w, "func NewRoot%s(s *C.Segment) %s { return %s(s.NewRootStruct(%d, %d)) }\n", + n.name, n.name, n.name, datasz, ptrs) + fprintf(w, "func AutoNew%s(s *C.Segment) %s { return %s(s.NewStructAR(%d, %d)) }\n", + n.name, n.name, n.name, datasz, ptrs) + fprintf(w, "func ReadRoot%s(s *C.Segment) %s { return %s(s.Root(0).ToStruct()) }\n", + n.name, n.name, n.name) + } if enabledStructInfo { fprintf(w, "func (s *%s) StructInfo() (int, int) { return %d, %d }\n", @@ -1027,6 +1029,7 @@ var ( disabledUtil = false disabledBase = false enabledStructInfo = false + disabledStructFunc = false ignorePrivateInfoField = false privateInfoField = map[string]bool{ "fbName": true, @@ -1056,6 +1059,9 @@ func init() { if enable, err := strconv.ParseBool(os.Getenv("GO_CAPNP_STRUCT_INFO_ENABLE")); err == nil { enabledStructInfo = enable } + if disable, err := strconv.ParseBool(os.Getenv("GO_CAPNP_STRUCT_FUNC_DISABLE")); err == nil { + disabledStructFunc = disable + } if disable, err := strconv.ParseBool(os.Getenv("IGNORE_PRIVATE_INFO_FIELD")); err == nil { ignorePrivateInfoField = disable }