Lines Matching refs:self

32     def __init__(self, slicc, left, op, right):
33 super(InfixOperatorExprAST, self).__init__(slicc)
35 self.left = left
36 self.op = op
37 self.right = right
39 def __repr__(self):
40 return "[InfixExpr: %r %s %r]" % (self.left, self.op, self.right)
42 def generate(self, code):
43 lcode = self.slicc.codeFormatter()
44 rcode = self.slicc.codeFormatter()
46 ltype = self.left.generate(lcode)
47 rtype = self.right.generate(rcode)
50 if self.op in ("==", "!=", ">=", "<=", ">", "<"):
53 self.error("Type mismatch: left and right operands of " +
56 self.op, ltype, rtype)
61 if self.op in ("&&", "||"):
64 elif self.op in ("<<", ">>"):
67 elif self.op in ("+", "-", "*", "/"):
77 self.error("No operator matched with {0}!" .format(self.op))
80 left_input_type = self.symtab.find(expected_type[0], Type)
81 right_input_type = self.symtab.find(expected_type[1], Type)
87 self.error("Type mismatch: operands ({0}, {1}) for operator " \
89 format(ltype, rtype, self.op))
93 code("($lcode ${{self.op}} $rcode)")
95 return self.symtab.find(output, Type)
98 def __init__(self, slicc, op, operand):
99 super(PrefixOperatorExprAST, self).__init__(slicc)
101 self.op = op
102 self.operand = operand
104 def __repr__(self):
105 return "[PrefixExpr: %s %r]" % (self.op, self.operand)
107 def generate(self, code):
108 opcode = self.slicc.codeFormatter()
109 optype = self.operand.generate(opcode)
113 if self.op in opmap:
114 output = opmap[self.op]
115 type_in_symtab = self.symtab.find(opmap[self.op], Type)
117 self.error("Type mismatch: right operand of " +
119 self.op, type_in_symtab)
121 self.error("Invalid prefix operator '%s'",
122 self.op)
126 code("(${{self.op}} $opcode)")
129 return self.symtab.find(output, Type)