# Node ID 5d9dcfdd26b92c5de82f53a6e5cfbece469907e6 # Parent fe156adc64ab5154e171ed0687d1a4411c3b0083 diff --git a/src/mem/slicc/ast/OperatorExprAST.py b/src/mem/slicc/ast/OperatorExprAST.py --- a/src/mem/slicc/ast/OperatorExprAST.py +++ b/src/mem/slicc/ast/OperatorExprAST.py @@ -107,8 +107,22 @@ opcode = self.slicc.codeFormatter() optype = self.operand.generate(opcode) + # Figure out what the input and output types should be + opmap = {"!": "bool", "-": "int", "++": "Scalar"} + if self.op in opmap: + output = opmap[self.op] + type_in_symtab = self.symtab.find(opmap[self.op], Type) + if (optype != type_in_symtab): + self.error("Type mismatch: right operand of " + + "unary operator '%s' must be of type '%s'. ", + self.op, type_in_symtab) + else: + self.error("Invalid prefix operator '%s'", + self.op) + + # All is well fix = code.nofix() code("(${{self.op}} $opcode)") code.fix(fix) - return self.symtab.find("void", Type) + return self.symtab.find(output, Type)