@@ -336,25 +336,28 @@ class Pointer:
336336
337337 const : bool = False
338338 volatile : bool = False
339+ restrict : bool = False
339340
340341 def format (self ) -> str :
341342 c = " const" if self .const else ""
342343 v = " volatile" if self .volatile else ""
344+ r = " __restrict__" if self .restrict else ""
343345 ptr_to = self .ptr_to
344346 if isinstance (ptr_to , (Array , FunctionType )):
345- return ptr_to .format_decl (f"(*{ c } { v } )" )
347+ return ptr_to .format_decl (f"(*{ r } { c } { v } )" )
346348 else :
347- return f"{ ptr_to .format ()} *{ c } { v } "
349+ return f"{ ptr_to .format ()} *{ r } { c } { v } "
348350
349351 def format_decl (self , name : str ):
350352 """Format as a named declaration"""
351353 c = " const" if self .const else ""
352354 v = " volatile" if self .volatile else ""
355+ r = " __restrict__" if self .restrict else ""
353356 ptr_to = self .ptr_to
354357 if isinstance (ptr_to , (Array , FunctionType )):
355- return ptr_to .format_decl (f"(*{ c } { v } { name } )" )
358+ return ptr_to .format_decl (f"(*{ r } { c } { v } { name } )" )
356359 else :
357- return f"{ ptr_to .format ()} *{ c } { v } { name } "
360+ return f"{ ptr_to .format ()} *{ r } { c } { v } { name } "
358361
359362
360363@dataclass
@@ -364,13 +367,16 @@ class Reference:
364367 """
365368
366369 ref_to : typing .Union [Array , FunctionType , Pointer , Type ]
370+ restrict : bool = False
367371
368372 def format (self ) -> str :
369373 ref_to = self .ref_to
374+
370375 if isinstance (ref_to , Array ):
371376 return ref_to .format_decl ("(&)" )
372377 else :
373- return f"{ ref_to .format ()} &"
378+ r = " __restrict__" if self .restrict else ""
379+ return f"{ ref_to .format ()} &{ r } "
374380
375381 def format_decl (self , name : str ):
376382 """Format as a named declaration"""
@@ -379,7 +385,8 @@ def format_decl(self, name: str):
379385 if isinstance (ref_to , Array ):
380386 return ref_to .format_decl (f"(& { name } )" )
381387 else :
382- return f"{ ref_to .format ()} & { name } "
388+ r = " __restrict__" if self .restrict else ""
389+ return f"{ ref_to .format ()} &{ r } { name } "
383390
384391
385392@dataclass
0 commit comments