diff --git a/src/mem/slicc/ast/AssignStatementAST.py b/src/mem/slicc/ast/AssignStatementAST.py index 47d91a3413..707ee79ae4 100644 --- a/src/mem/slicc/ast/AssignStatementAST.py +++ b/src/mem/slicc/ast/AssignStatementAST.py @@ -41,8 +41,8 @@ class AssignStatementAST(StatementAST): lcode = self.slicc.codeFormatter() rcode = self.slicc.codeFormatter() - ltype = self.lvalue.generate(lcode) - rtype = self.rvalue.generate(rcode) + ltype = self.lvalue.generate(lcode, is_assign=True) + rtype = self.rvalue.generate(rcode, is_assign=True) code("$lcode = $rcode;") diff --git a/src/mem/slicc/ast/LocalVariableAST.py b/src/mem/slicc/ast/LocalVariableAST.py index 43ab110a67..35b60b347b 100644 --- a/src/mem/slicc/ast/LocalVariableAST.py +++ b/src/mem/slicc/ast/LocalVariableAST.py @@ -73,7 +73,7 @@ class LocalVariableAST(StatementAST): ) ): code += f"{type.c_ident}* {ident}" - elif "implicit_ctor" in type: + elif "implicit_ctor" in type and not "is_assign" in kwargs: code += f"{type.c_ident} {ident}({type['implicit_ctor']})" else: code += f"{type.c_ident} {ident}" diff --git a/src/mem/slicc/ast/MemberExprAST.py b/src/mem/slicc/ast/MemberExprAST.py index d45a6ac9a4..a7778bb361 100644 --- a/src/mem/slicc/ast/MemberExprAST.py +++ b/src/mem/slicc/ast/MemberExprAST.py @@ -38,7 +38,7 @@ class MemberExprAST(ExprAST): def __repr__(self): return f"[MemberExprAST: {self.expr_ast!r}.{self.field!r}]" - def generate(self, code): + def generate(self, code, **kwargs): return_type, gcode = self.expr_ast.inline(True) fix = code.nofix()