44# ------------------------------------------------------------------------------
55# The MIT License (MIT)
66#
7- # Copyright (c) 2022-2024 Aarno Labs LLC
7+ # Copyright (c) 2022-2025 Aarno Labs LLC
88#
99# Permission is hereby granted, free of charge, to any person obtaining a copy
1010# of this software and associated documentation files (the "Software"), to deal
@@ -463,7 +463,7 @@ def visit_asm_instr(self, instr: AST.ASTAsm) -> None:
463463 def visit_lval (self , lval : AST .ASTLval ) -> None :
464464 if lval .lhost .is_memref :
465465 memexp = cast (AST .ASTMemRef , lval .lhost ).memexp
466- if lval .offset .is_field_offset :
466+ if lval .offset .is_field_offset and not memexp . is_ast_addressof :
467467 fieldname = cast (AST .ASTFieldOffset , lval .offset ).fieldname
468468 suboffset = cast (AST .ASTFieldOffset , lval .offset ).offset
469469 memexp .accept (self )
@@ -488,9 +488,13 @@ def visit_variable(self, var: AST.ASTVariable) -> None:
488488 self .ccode .write (var .vname )
489489
490490 def visit_memref (self , memref : AST .ASTMemRef ) -> None :
491- self .ccode .write ("(*(" )
492- memref .memexp .accept (self )
493- self .ccode .write ("))" )
491+ if memref .memexp .is_ast_addressof :
492+ memexp = cast (AST .ASTAddressOf , memref .memexp )
493+ memexp .lval .accept (self )
494+ else :
495+ self .ccode .write ("(*(" )
496+ memref .memexp .accept (self )
497+ self .ccode .write ("))" )
494498
495499 def visit_no_offset (self , offset : AST .ASTNoOffset ) -> None :
496500 pass
0 commit comments