diff options
Diffstat (limited to 'tools/net/sunrpc/xdrgen/generators/struct.py')
| -rw-r--r-- | tools/net/sunrpc/xdrgen/generators/struct.py | 26 | 
1 files changed, 21 insertions, 5 deletions
diff --git a/tools/net/sunrpc/xdrgen/generators/struct.py b/tools/net/sunrpc/xdrgen/generators/struct.py index b694cd470829..64911de46f62 100644 --- a/tools/net/sunrpc/xdrgen/generators/struct.py +++ b/tools/net/sunrpc/xdrgen/generators/struct.py @@ -8,11 +8,11 @@ from jinja2 import Environment  from generators import SourceGenerator, kernel_c_type  from generators import create_jinja2_environment, get_jinja2_template -from xdr_ast import _XdrBasic, _XdrVariableLengthString +from xdr_ast import _XdrBasic, _XdrString  from xdr_ast import _XdrFixedLengthOpaque, _XdrVariableLengthOpaque  from xdr_ast import _XdrFixedLengthArray, _XdrVariableLengthArray  from xdr_ast import _XdrOptionalData, _XdrStruct, _XdrDeclaration -from xdr_ast import public_apis +from xdr_ast import public_apis, get_header_name  def emit_struct_declaration(environment: Environment, node: _XdrStruct) -> None: @@ -46,7 +46,7 @@ def emit_struct_member_definition(      elif isinstance(field, _XdrVariableLengthOpaque):          template = get_jinja2_template(environment, "definition", field.template)          print(template.render(name=field.name)) -    elif isinstance(field, _XdrVariableLengthString): +    elif isinstance(field, _XdrString):          template = get_jinja2_template(environment, "definition", field.template)          print(template.render(name=field.name))      elif isinstance(field, _XdrFixedLengthArray): @@ -119,7 +119,7 @@ def emit_struct_member_decoder(                  maxsize=field.maxsize,              )          ) -    elif isinstance(field, _XdrVariableLengthString): +    elif isinstance(field, _XdrString):          template = get_jinja2_template(environment, "decoder", field.template)          print(              template.render( @@ -198,7 +198,7 @@ def emit_struct_member_encoder(                  maxsize=field.maxsize,              )          ) -    elif isinstance(field, _XdrVariableLengthString): +    elif isinstance(field, _XdrString):          template = get_jinja2_template(environment, "encoder", field.template)          print(              template.render( @@ -247,6 +247,18 @@ def emit_struct_encoder(environment: Environment, node: _XdrStruct) -> None:      print(template.render()) +def emit_struct_maxsize(environment: Environment, node: _XdrStruct) -> None: +    """Emit one maxsize macro for an XDR struct type""" +    macro_name = get_header_name().upper() + "_" + node.name + "_sz" +    template = get_jinja2_template(environment, "maxsize", "struct") +    print( +        template.render( +            macro=macro_name, +            width=" + ".join(node.symbolic_width()), +        ) +    ) + +  class XdrStructGenerator(SourceGenerator):      """Generate source code for XDR structs""" @@ -270,3 +282,7 @@ class XdrStructGenerator(SourceGenerator):      def emit_encoder(self, node: _XdrStruct) -> None:          """Emit one encoder function for an XDR struct type"""          emit_struct_encoder(self.environment, node) + +    def emit_maxsize(self, node: _XdrStruct) -> None: +        """Emit one maxsize macro for an XDR struct type""" +        emit_struct_maxsize(self.environment, node)  | 
