diff options
author | Luke T. Shumaker <lukeshu@lukeshu.com> | 2025-01-13 18:57:16 -0700 |
---|---|---|
committer | Luke T. Shumaker <lukeshu@lukeshu.com> | 2025-01-14 01:10:39 -0700 |
commit | e0fa36e9427424a1e68d4c196dd5249b1cef7e2c (patch) | |
tree | ac9186aaa617357e62a536a2bf0c180bc99b3dee /lib9p/idl.gen | |
parent | a02f59f255006a2d6cb236fe2448b69c9c223adb (diff) |
wip container typeslukeshu/9p-containers
Diffstat (limited to 'lib9p/idl.gen')
-rwxr-xr-x | lib9p/idl.gen | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/lib9p/idl.gen b/lib9p/idl.gen index e796855..3271bb4 100755 --- a/lib9p/idl.gen +++ b/lib9p/idl.gen @@ -266,6 +266,35 @@ enum {idprefix}version {{ ret += "};\n" ret += ifdef_pop(0) + ret += """ +/* container types ************************************************************/ +""" + ret += "\n" + ret += f"struct {idprefix}Tmsg {{\n" + ret += f"\tenum {idprefix}msg_type typ;\n" + ret += "\tunion {\n" + msgs = [msg for msg in typs if isinstance(msg, idl.Message) and msg.msgid % 2 == 0] + typewidth = max(len(c_typename(msg)) for msg in msgs) + for msg in msgs: + ret += ifdef_push(1, c_ver_ifdef(msg.in_versions)) + ret += f"\t\t{c_typename(msg).ljust(typewidth)} {msg.name};\n" + ret += ifdef_pop(0) + ret += "\t} body;\n" + ret += "};\n" + + ret += "\n" + ret += f"struct {idprefix}Rmsg {{\n" + ret += f"\tenum {idprefix}msg_type typ;\n" + ret += "\tunion {\n" + msgs = [msg for msg in typs if isinstance(msg, idl.Message) and msg.msgid % 2 == 1] + typewidth = max(len(c_typename(msg)) for msg in msgs) + for msg in msgs: + ret += ifdef_push(1, c_ver_ifdef(msg.in_versions)) + ret += f"\t\t{c_typename(msg).ljust(typewidth)} {msg.name};\n" + ret += ifdef_pop(0) + ret += "\t} body;\n" + ret += "};\n" + return ret |