@@ -598,14 +598,32 @@ def struct(self, meta, items):
598598 name = items [0 ]
599599 self ._check_keyword (self ._sp (meta ), name )
600600 members = {}
601- for d in items [1 :]:
602- assert not d .expr
603- if d .name in members :
604- raise Error .MultipleDefinitions (
605- self ._sp (meta ), f"duplicate struct member '{ d .name } '"
606- )
607- members [d .name ] = d .type
608- return Tree .StructTypeDef (self ._sp (meta ), name , members )
601+ parameter_meta = None
602+ meta_section = None
603+ for item in items [1 :]:
604+ if isinstance (item , dict ):
605+ if "meta" in item :
606+ if meta_section is not None :
607+ raise Error .MultipleDefinitions (
608+ self ._sp (meta ), "redundant struct meta sections"
609+ )
610+ meta_section = item ["meta" ]
611+ elif "parameter_meta" in item :
612+ if parameter_meta is not None :
613+ raise Error .MultipleDefinitions (
614+ self ._sp (meta ), "redundant struct parameter_meta sections"
615+ )
616+ parameter_meta = item ["parameter_meta" ]
617+ else :
618+ assert False
619+ elif isinstance (item , Tree .Decl ):
620+ assert not item .expr
621+ if item .name in members :
622+ raise Error .MultipleDefinitions (
623+ self ._sp (meta ), f"duplicate struct member '{ item .name } '"
624+ )
625+ members [item .name ] = item .type
626+ return Tree .StructTypeDef (self ._sp (meta ), name , members , parameter_meta , meta_section )
609627
610628 def import_alias (self , meta , items ):
611629 assert len (items ) == 2
0 commit comments