From 3e81f2302830e037f24d57082d42fb9abe990024 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Mon, 4 Jan 2021 13:02:24 -0700 Subject: [PATCH] fix % and ^ on floats --- kiss/src/kiss/Macros.hx | 14 ++++++++++++-- kiss/src/kiss/Prelude.hx | 8 ++++---- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/kiss/src/kiss/Macros.hx b/kiss/src/kiss/Macros.hx index 3d35dc56..b5d42aad 100644 --- a/kiss/src/kiss/Macros.hx +++ b/kiss/src/kiss/Macros.hx @@ -21,12 +21,22 @@ class Macros { macros["%"] = (wholeExp:ReaderExp, exps:Array, k) -> { wholeExp.checkNumArgs(2, 2, '(% [divisor] [dividend])'); - CallExp(Symbol("Prelude.mod").withPosOf(wholeExp), [exps[1], exps[0]]).withPosOf(wholeExp); + CallExp(Symbol("kiss.Operand.toDynamic").withPosOf(wholeExp), [ + CallExp(Symbol("Prelude.mod").withPosOf(wholeExp), [ + CallExp(Symbol("kiss.Operand.fromDynamic").withPosOf(wholeExp), [exps[1]]).withPosOf(wholeExp), + CallExp(Symbol("kiss.Operand.fromDynamic").withPosOf(wholeExp), [exps[0]]).withPosOf(wholeExp) + ]).withPosOf(wholeExp) + ]).withPosOf(wholeExp); }; macros["^"] = (wholeExp:ReaderExp, exps:Array, k) -> { wholeExp.checkNumArgs(2, 2, '(^ [base] [exponent])'); - CallExp(Symbol("Prelude.pow").withPosOf(wholeExp), [exps[1], exps[0]]).withPosOf(wholeExp); + CallExp(Symbol("kiss.Operand.toDynamic").withPosOf(wholeExp), [ + CallExp(Symbol("Prelude.pow").withPosOf(wholeExp), [ + CallExp(Symbol("kiss.Operand.fromDynamic").withPosOf(wholeExp), [exps[1]]).withPosOf(wholeExp), + CallExp(Symbol("kiss.Operand.fromDynamic").withPosOf(wholeExp), [exps[0]]).withPosOf(wholeExp) + ]).withPosOf(wholeExp) + ]).withPosOf(wholeExp); }; macros["+"] = variadicMacro("Prelude.add"); diff --git a/kiss/src/kiss/Prelude.hx b/kiss/src/kiss/Prelude.hx index 519bb758..8f5a4a82 100644 --- a/kiss/src/kiss/Prelude.hx +++ b/kiss/src/kiss/Prelude.hx @@ -80,12 +80,12 @@ class Prelude { public static var divide = variadic(_divide); - public static function mod(bottom:Float, top:Float):Float { - return top % bottom; + public static function mod(bottom:Operand, top:Operand):Operand { + return Right(top.toFloat() % bottom.toFloat()); } - public static function pow(exponent:Float, base:Float):Float { - return Math.pow(base, exponent); + public static function pow(exponent:Operand, base:Operand):Operand { + return Right(Math.pow(base.toFloat(), exponent.toFloat())); } static function _min(a:Operand, b:Operand):Operand {