summaryrefslogtreecommitdiff
path: root/src/mem/slicc/ast
diff options
context:
space:
mode:
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__.py2
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 *