@@ -552,87 +552,153 @@ def tname(self) -> str:
552552 return self .tags [1 ]
553553
554554 @property
555- def typedef (self ) -> "BCTypeInfo" :
556- return self .bcd .typeinfo_by_name (self .tname )
555+ def typedef (self ) -> Optional ["BCTypeInfo" ]:
556+ if self .bcd .has_typeinfo_by_name (self .tname ):
557+ return self .bcd .typeinfo_by_name (self .tname )
558+ else :
559+ return None
557560
558561 @property
559562 def is_typedef (self ) -> bool :
560563 return True
561564
562565 @property
563566 def is_scalar (self ) -> bool :
564- return self .typedef .ttype .is_scalar
567+ if self .typedef is not None :
568+ return self .typedef .ttype .is_scalar
569+ else :
570+ return False
565571
566572 @property
567573 def is_integer (self ) -> bool :
568- return self .typedef .ttype .is_integer
574+ if self .typedef is not None :
575+ return self .typedef .ttype .is_integer
576+ else :
577+ return False
569578
570579 @property
571580 def is_float (self ) -> bool :
572- return self .typedef .ttype .is_float
581+ if self .typedef is not None :
582+ return self .typedef .ttype .is_float
583+ else :
584+ return False
573585
574586 @property
575587 def is_pointer (self ) -> bool :
576- return self .typedef .ttype .is_pointer
588+ if self .typedef is not None :
589+ return self .typedef .ttype .is_pointer
590+ else :
591+ return False
577592
578593 @property
579594 def is_array (self ) -> bool :
580- return self .typedef .ttype .is_array
595+ if self .typedef is not None :
596+ return self .typedef .ttype .is_array
597+ else :
598+ return False
599+
600+ @property
601+ def is_struct (self ) -> bool :
602+ if self .typedef is not None :
603+ return self .typedef .ttype .is_struct
604+ else :
605+ return False
581606
582607 def has_constant_size (self ) -> bool :
583- return self .typedef .ttype .has_constant_size ()
608+ if self .typedef is not None :
609+ return self .typedef .ttype .has_constant_size ()
610+ else :
611+ return False
584612
585613 @property
586614 def is_function (self ) -> bool :
587- return self .typedef .ttype .is_function
615+ if self .typedef is not None :
616+ return self .typedef .ttype .is_function
617+ else :
618+ return False
588619
589620 @property
590621 def is_vararg (self ) -> bool :
591- return self .typedef .ttype .is_vararg
622+ if self .typedef is not None :
623+ return self .typedef .ttype .is_vararg
624+ else :
625+ return False
592626
593627 @property
594628 def ikind (self ) -> str :
595- return self .typedef .ttype .ikind
629+ if self .typedef is not None :
630+ return self .typedef .ttype .ikind
631+ else :
632+ raise UF .CHBError ("No type definition for " + self .tname )
596633
597634 @property
598635 def fkind (self ) -> str :
599- return self .typedef .ttype .fkind
636+ if self .typedef is not None :
637+ return self .typedef .ttype .fkind
638+ else :
639+ raise UF .CHBError ("No type definition for " + self .tname )
600640
601641 @property
602642 def tgttyp (self ) -> "BCTyp" :
603- return self .typedef .ttype .tgttyp
643+ if self .typedef is not None :
644+ return self .typedef .ttype .tgttyp
645+ else :
646+ raise UF .CHBError ("No type definition for " + self .tname )
604647
605648 @property
606649 def size_expr (self ) -> Optional ["BCExp" ]:
607- return self .typedef .ttype .size_expr
650+ if self .typedef is not None :
651+ return self .typedef .ttype .size_expr
652+ else :
653+ return None
608654
609655 @property
610656 def sizevalue (self ) -> int :
611- return self .typedef .ttype .sizevalue
657+ if self .typedef is not None :
658+ return self .typedef .ttype .sizevalue
659+ else :
660+ raise UF .CHBError ("No type definition for " + self .tname )
612661
613662 @property
614663 def returntype (self ) -> "BCTyp" :
615- return self .typedef .ttype .returntype
664+ if self .typedef is not None :
665+ return self .typedef .ttype .returntype
666+ else :
667+ raise UF .CHBError ("No type definition for " + self .tname )
616668
617669 @property
618670 def argtypes (self ) -> Optional ["BCFunArgs" ]:
619- return self .typedef .ttype .argtypes
671+ if self .typedef is not None :
672+ return self .typedef .ttype .argtypes
673+ else :
674+ return None
620675
621676 def is_leq (self , other : "BCTyp" ) -> bool :
622- return self .typedef .ttype .is_leq (other )
677+ if self .typedef is not None :
678+ return self .typedef .ttype .is_leq (other )
679+ else :
680+ raise UF .CHBError ("No type definition for " + self .tname )
623681
624682 def byte_size (self ) -> int :
625- return self .typedef .ttype .byte_size ()
683+ if self .typedef is not None :
684+ return self .typedef .ttype .byte_size ()
685+ else :
686+ raise UF .CHBError ("No type definition for " + self .tname )
626687
627688 def alignment (self ) -> int :
628- return self .typedef .ttype .alignment ()
689+ if self .typedef is not None :
690+ return self .typedef .ttype .alignment ()
691+ else :
692+ raise UF .CHBError ("No type definition for " + self .tname )
629693
630694 def convert (self , converter : "BCConverter" ) -> AST .ASTTyp :
631695 return converter .convert_named_typ (self )
632696
633697 def __str__ (self ) -> str :
634- return str (self .typedef .ttype )
635- # return self.tname + " (" + str(self.typedef.ttype) + ")"
698+ if self .typedef is not None :
699+ return str (self .typedef .ttype )
700+ else :
701+ return self .tname + " (no typedefinition available)"
636702
637703
638704@bcregistry .register_tag ("tcomp" , BCTyp )
0 commit comments