def _call_eager(self, expr: E.Apply, arguments: List[V.Base]) -> V.Base: ans_type = self.infer_type(expr) try: ans = self.op(arguments[0].coerce(ans_type).value, arguments[1].coerce(ans_type).value) except ZeroDivisionError: # TODO: different runtime error? raise Error.IncompatibleOperand(expr.arguments[1], "Division by zero") from None if ans_type == T.Int(): assert isinstance(ans, int) return V.Int(ans) assert isinstance(ans, float) return V.Float(ans)
def eval(self, env: Env.Values) -> V.Float: "" return V.Float(self.value)