diff options
author | Luke T. Shumaker <lukeshu@lukeshu.com> | 2024-12-21 22:40:21 -0700 |
---|---|---|
committer | Luke T. Shumaker <lukeshu@lukeshu.com> | 2024-12-26 18:18:10 -0700 |
commit | 93337489aaf8bc337ef70d72c059901867f415ea (patch) | |
tree | ca1811684402849881edc32ef9b1de7d701925fe /lib9p/idl.gen | |
parent | 39818a59fdc6cd1249867b7954838222b397f4cd (diff) |
lib9p: Reorganize 9p.generated.h
Diffstat (limited to 'lib9p/idl.gen')
-rwxr-xr-x | lib9p/idl.gen | 59 |
1 files changed, 22 insertions, 37 deletions
diff --git a/lib9p/idl.gen b/lib9p/idl.gen index 31bada3..66161e2 100755 --- a/lib9p/idl.gen +++ b/lib9p/idl.gen @@ -159,7 +159,7 @@ def gen_h(versions: set[str], typs: list[idl.Type]) -> str: ret += "#endif\n" ret += f""" -/* versions *******************************************************************/ +/* enum version ***************************************************************/ enum {idprefix}version {{ """ @@ -177,9 +177,21 @@ enum {idprefix}version {{ ret += f"const char *{idprefix}version_str(enum {idprefix}version);\n" ret += """ -/* non-message types **********************************************************/ +/* enum msg_type **************************************************************/ + """ - for typ in [typ for typ in typs if not isinstance(typ, idl.Message)]: + ret += f"enum {idprefix}msg_type {{ /* uint8_t */\n" + namewidth = max(len(msg.name) for msg in typs if isinstance(msg, idl.Message)) + for msg in [msg for msg in typs if isinstance(msg, idl.Message)]: + ret += ifdef_push(1, c_ver_ifdef(msg.in_versions)) + ret += f"\t{idprefix.upper()}TYP_{msg.name.ljust(namewidth)} = {msg.msgid},\n" + ret += ifdef_pop(0) + ret += "};\n" + + ret += """ +/* payload types **************************************************************/ +""" + for typ in typs: ret += "\n" ret += ifdef_push(1, c_ver_ifdef(typ.in_versions)) match typ: @@ -223,10 +235,15 @@ enum {idprefix}version {{ sp3 = " " * (2 + namewidth - len(name)) ret += f"#{sp1}define{sp2}{c_name}{sp3}(({c_typename(typ)})({typ.names[name].val}))\n" ret += ifdef_pop(1) - case idl.Struct(): + case idl.Struct(): # and idl.Message(): + ret += c_typename(typ) + " {" + if not typ.members: + ret += "};\n" + continue + ret += "\n" + typewidth = max(len(c_typename(m.typ)) for m in typ.members) - ret += c_typename(typ) + " {\n" for member in typ.members: if member.val: continue @@ -239,38 +256,6 @@ enum {idprefix}version {{ ret += "};\n" ret += ifdef_pop(0) - ret += """ -/* messages *******************************************************************/ - -""" - ret += f"enum {idprefix}msg_type {{ /* uint8_t */\n" - namewidth = max(len(msg.name) for msg in typs if isinstance(msg, idl.Message)) - for msg in [msg for msg in typs if isinstance(msg, idl.Message)]: - ret += ifdef_push(1, c_ver_ifdef(msg.in_versions)) - ret += f"\t{idprefix.upper()}TYP_{msg.name.ljust(namewidth)} = {msg.msgid},\n" - ret += ifdef_pop(0) - ret += "};\n" - - for msg in [msg for msg in typs if isinstance(msg, idl.Message)]: - ret += "\n" - ret += ifdef_push(1, c_ver_ifdef(msg.in_versions)) - ret += c_typename(msg) + " {" - if not msg.members: - ret += "};\n" - continue - ret += "\n" - - typewidth = max(len(c_typename(m.typ)) for m in msg.members) - - for member in msg.members: - if member.val: - continue - ret += ifdef_push(2, c_ver_ifdef(member.in_versions)) - ret += f"\t{c_typename(member.typ).ljust(typewidth)} {'*' if member.cnt else ' '}{member.name};\n" - ret += ifdef_pop(1) - ret += "};\n" - ret += ifdef_pop(0) - return ret |