summaryrefslogtreecommitdiff
path: root/lib9p/idl
diff options
context:
space:
mode:
authorLuke T. Shumaker <lukeshu@lukeshu.com>2025-01-23 12:21:17 -0700
committerLuke T. Shumaker <lukeshu@lukeshu.com>2025-01-23 18:43:02 -0700
commit990dcf244fc4bc09d1395f2a0415a22517db72b7 (patch)
treee19cf1b6eaa406f695084aca1fd513d0082e28ad /lib9p/idl
parent6e60a6d4cc69b0f03c31b9cf4cd042422e49e2f6 (diff)
lib9p: idl.gen: Validate that member types exist
Diffstat (limited to 'lib9p/idl')
-rw-r--r--lib9p/idl/2010-9P2000.L.9p2
-rw-r--r--lib9p/idl/__init__.py7
2 files changed, 8 insertions, 1 deletions
diff --git a/lib9p/idl/2010-9P2000.L.9p b/lib9p/idl/2010-9P2000.L.9p
index bc36f01..3886265 100644
--- a/lib9p/idl/2010-9P2000.L.9p
+++ b/lib9p/idl/2010-9P2000.L.9p
@@ -7,7 +7,7 @@
# https://github.com/chaos/diod/blob/master/protocol.md
version "9P2000.L"
-from ./2002-9P2000.9p import tag, fid, s, qt, qid
+from ./2002-9P2000.9p import tag, fid, s, d, qt, qid
from ./2002-9P2000.9p import Rerror
from ./2002-9P2000.9p import Tversion, Rversion, Tflush, Rflush, Twalk, Rwalk, Tread, Rread, Twrite, Rwrite, Tclunk, RClunk, Tremove, Rremove
from ./2005-9P2000.u.9p import nuid, Tauth, Rauth, Tattach, Rattach
diff --git a/lib9p/idl/__init__.py b/lib9p/idl/__init__.py
index 8fd7e25..fec6c41 100644
--- a/lib9p/idl/__init__.py
+++ b/lib9p/idl/__init__.py
@@ -550,6 +550,13 @@ def parse_file(
for typ in [typ for typ in typs if isinstance(typ, Struct)]:
valid_syms = ["end", "s32_max", "s64_max", *["&" + m.name for m in typ.members]]
for member in typ.members:
+ if (
+ not isinstance(member.typ, Primitive)
+ and member.typ.in_versions < member.in_versions
+ ):
+ raise ValueError(
+ f"{typ.name}.{member.name}: type {member.typ.name} does not exist in {member.in_versions.difference(member.typ.in_versions)}"
+ )
for tok in [*member.max.tokens, *member.val.tokens]:
if isinstance(tok, ExprSym) and tok.name not in valid_syms:
raise ValueError(