diff options
Diffstat (limited to 'src/mem/slicc/ast')
-rw-r--r-- | src/mem/slicc/ast/OperatorExprAST.py (renamed from src/mem/slicc/ast/InfixOperatorExprAST.py) | 21 | ||||
-rw-r--r-- | src/mem/slicc/ast/__init__.py | 2 |
2 files changed, 22 insertions, 1 deletions
diff --git a/src/mem/slicc/ast/InfixOperatorExprAST.py b/src/mem/slicc/ast/OperatorExprAST.py index 31bf9bd1a..df074b9f0 100644 --- a/src/mem/slicc/ast/InfixOperatorExprAST.py +++ b/src/mem/slicc/ast/OperatorExprAST.py @@ -68,6 +68,7 @@ class InfixOperatorExprAST(ExprAST): expected_types = [("int", "int", "int"), ("Cycles", "Cycles", "Cycles"), ("Cycles", "int", "Cycles"), + ("Scalar", "int", "Scalar"), ("int", "Cycles", "Cycles")] else: self.error("No operator matched with {0}!" .format(self.op)) @@ -89,3 +90,23 @@ class InfixOperatorExprAST(ExprAST): code("($lcode ${{self.op}} $rcode)") code.fix(fix) return self.symtab.find(output, Type) + +class PrefixOperatorExprAST(ExprAST): + def __init__(self, slicc, op, operand): + super(PrefixOperatorExprAST, self).__init__(slicc) + + self.op = op + self.operand = operand + + def __repr__(self): + return "[PrefixExpr: %s %r]" % (self.op, self.operand) + + def generate(self, code): + opcode = self.slicc.codeFormatter() + optype = self.operand.generate(opcode) + + fix = code.nofix() + code("(${{self.op}} $opcode)") + code.fix(fix) + + return self.symtab.find("void", Type) diff --git a/src/mem/slicc/ast/__init__.py b/src/mem/slicc/ast/__init__.py index c2baea8df..bd9de52d0 100644 --- a/src/mem/slicc/ast/__init__.py +++ b/src/mem/slicc/ast/__init__.py @@ -43,7 +43,6 @@ from slicc.ast.FuncCallExprAST import * from slicc.ast.FuncDeclAST import * from slicc.ast.IfStatementAST import * from slicc.ast.InPortDeclAST import * -from slicc.ast.InfixOperatorExprAST import * from slicc.ast.IsValidPtrExprAST import * from slicc.ast.LiteralExprAST import * from slicc.ast.LocalVariableAST import * @@ -53,6 +52,7 @@ from slicc.ast.MethodCallExprAST import * from slicc.ast.NewExprAST import * from slicc.ast.OodAST import * from slicc.ast.ObjDeclAST import * +from slicc.ast.OperatorExprAST import * from slicc.ast.OutPortDeclAST import * from slicc.ast.PairAST import * from slicc.ast.PairListAST import * |