diff --git a/src/kiss/Macros.hx b/src/kiss/Macros.hx index 3d35dc5..b5d42aa 100644 --- a/src/kiss/Macros.hx +++ b/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/src/kiss/Prelude.hx b/src/kiss/Prelude.hx index 519bb75..8f5a4a8 100644 --- a/src/kiss/Prelude.hx +++ b/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 {