Commit ac159338 authored by Chuck Lever's avatar Chuck Lever
Browse files

xdrgen: emit maxsize macros



Add "definitions" subcommand logic to emit maxsize macros in
generated code.

Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
parent e9e1e7e7
Loading
Loading
Loading
Loading
+21 −3
Original line number Diff line number Diff line
@@ -28,9 +28,7 @@ from xdr_parse import xdr_parser, set_xdr_annotate
logger.setLevel(logging.INFO)


def emit_header_definitions(
    root: Specification, language: str, peer: str
) -> None:
def emit_header_definitions(root: Specification, language: str, peer: str) -> None:
    """Emit header definitions"""
    for definition in root.definitions:
        if isinstance(definition.value, _XdrConstant):
@@ -52,6 +50,25 @@ def emit_header_definitions(
        gen.emit_definition(definition.value)


def emit_header_maxsize(root: Specification, language: str, peer: str) -> None:
    """Emit header maxsize macros"""
    print("")
    for definition in root.definitions:
        if isinstance(definition.value, _XdrEnum):
            gen = XdrEnumGenerator(language, peer)
        elif isinstance(definition.value, _XdrPointer):
            gen = XdrPointerGenerator(language, peer)
        elif isinstance(definition.value, _XdrTypedef):
            gen = XdrTypedefGenerator(language, peer)
        elif isinstance(definition.value, _XdrStruct):
            gen = XdrStructGenerator(language, peer)
        elif isinstance(definition.value, _XdrUnion):
            gen = XdrUnionGenerator(language, peer)
        else:
            continue
        gen.emit_maxsize(definition.value)


def handle_parse_error(e: UnexpectedInput) -> bool:
    """Simple parse error reporting, no recovery attempted"""
    print(e)
@@ -71,6 +88,7 @@ def subcmd(args: Namespace) -> int:
        gen.emit_definition(args.filename, ast)

        emit_header_definitions(ast, args.language, args.peer)
        emit_header_maxsize(ast, args.language, args.peer)

        gen = XdrHeaderBottomGenerator(args.language, args.peer)
        gen.emit_definition(args.filename, ast)
+1 −2
Original line number Diff line number Diff line
@@ -83,8 +83,7 @@ def generate_client_source(filename: str, root: Specification, language: str) ->
    gen = XdrSourceTopGenerator(language, "client")
    gen.emit_source(filename, root)

    # cel: todo: client needs XDR size macros

    print("")
    for definition in root.definitions:
        emit_source_encoder(definition.value, language, "client")
    for definition in root.definitions: