diff options
| author | Chuck Lever <cel@kernel.org> | 2026-09-08 09:42:28 -0400 |
|---|---|---|
| committer | Chuck Lever <cel@kernel.org> | 2026-10-04 21:15:29 -0400 |
| commit | d61e221c6141afec94a56bb57b3d880bf58ec1b7 (patch) | |
| tree | e4ba339458505fc8f0f8085df866405788b0b5de /tools/net | |
| parent | e679ac4bb80574b03b804c98a825bf851d92fc8d (diff) | |
xdrgen: Pass the containing struct name to member codec emitters
A per-member code generation directive keyed on the (struct, member)
pair needs the name of the containing struct, but
emit_struct_member_encoder() and emit_struct_member_decoder()
receive only the member declaration.
Pass the containing struct's name to emit_struct_member_encoder() and
emit_struct_member_decoder(), and to the matching emitters in
pointer.py, as a required argument. A struct whose last field refers
to its own type is an _XdrPointer rather than an _XdrStruct, so
pointer.py takes the same argument. No emitter renders the new value
yet, so generated output is byte-identical. A subsequent patch keys
the "pragma pages" encoder on it.
Acked-by: Jeff Layton <jlayton@kernel.org>
Link: https://patch.msgid.link/20260908134234.512312-5-cel@kernel.org
Signed-off-by: Chuck Lever <cel@kernel.org>
Diffstat (limited to 'tools/net')
| -rw-r--r-- | tools/net/sunrpc/xdrgen/generators/pointer.py | 12 | ||||
| -rw-r--r-- | tools/net/sunrpc/xdrgen/generators/struct.py | 12 |
2 files changed, 16 insertions, 8 deletions
diff --git a/tools/net/sunrpc/xdrgen/generators/pointer.py b/tools/net/sunrpc/xdrgen/generators/pointer.py index 6dbda60ad2db..9a540e125786 100644 --- a/tools/net/sunrpc/xdrgen/generators/pointer.py +++ b/tools/net/sunrpc/xdrgen/generators/pointer.py @@ -91,7 +91,9 @@ def emit_pointer_definition(environment: Environment, node: _XdrPointer) -> None def emit_pointer_member_decoder( - environment: Environment, field: _XdrDeclaration + environment: Environment, + field: _XdrDeclaration, + struct_name: str, ) -> None: """Emit a decoder for one field in an XDR pointer""" if isinstance(field, _XdrBasic): @@ -164,14 +166,16 @@ def emit_pointer_decoder(environment: Environment, node: _XdrPointer) -> None: print(template.render(name=node.name)) for field in node.fields[0:-1]: - emit_pointer_member_decoder(environment, field) + emit_pointer_member_decoder(environment, field, node.name) template = get_jinja2_template(environment, "decoder", "close") print(template.render()) def emit_pointer_member_encoder( - environment: Environment, field: _XdrDeclaration + environment: Environment, + field: _XdrDeclaration, + struct_name: str, ) -> None: """Emit an encoder for one field in a XDR pointer""" if isinstance(field, _XdrBasic): @@ -241,7 +245,7 @@ def emit_pointer_encoder(environment: Environment, node: _XdrPointer) -> None: print(template.render(name=node.name)) for field in node.fields[0:-1]: - emit_pointer_member_encoder(environment, field) + emit_pointer_member_encoder(environment, field, node.name) template = get_jinja2_template(environment, "encoder", "close") print(template.render()) diff --git a/tools/net/sunrpc/xdrgen/generators/struct.py b/tools/net/sunrpc/xdrgen/generators/struct.py index 64911de46f62..91da3863c166 100644 --- a/tools/net/sunrpc/xdrgen/generators/struct.py +++ b/tools/net/sunrpc/xdrgen/generators/struct.py @@ -91,7 +91,9 @@ def emit_struct_definition(environment: Environment, node: _XdrStruct) -> None: def emit_struct_member_decoder( - environment: Environment, field: _XdrDeclaration + environment: Environment, + field: _XdrDeclaration, + struct_name: str, ) -> None: """Emit a decoder for one field in an XDR struct""" if isinstance(field, _XdrBasic): @@ -164,14 +166,16 @@ def emit_struct_decoder(environment: Environment, node: _XdrStruct) -> None: print(template.render(name=node.name)) for field in node.fields: - emit_struct_member_decoder(environment, field) + emit_struct_member_decoder(environment, field, node.name) template = get_jinja2_template(environment, "decoder", "close") print(template.render()) def emit_struct_member_encoder( - environment: Environment, field: _XdrDeclaration + environment: Environment, + field: _XdrDeclaration, + struct_name: str, ) -> None: """Emit an encoder for one field in an XDR struct""" if isinstance(field, _XdrBasic): @@ -241,7 +245,7 @@ def emit_struct_encoder(environment: Environment, node: _XdrStruct) -> None: print(template.render(name=node.name)) for field in node.fields: - emit_struct_member_encoder(environment, field) + emit_struct_member_encoder(environment, field, node.name) template = get_jinja2_template(environment, "encoder", "close") print(template.render()) |
