fix % and ^ on floats

This commit is contained in:
2021-01-04 13:02:24 -07:00
parent 538d6cc206
commit 3e81f23028
2 changed files with 16 additions and 6 deletions

View File

@@ -21,12 +21,22 @@ class Macros {
macros["%"] = (wholeExp:ReaderExp, exps:Array<ReaderExp>, k) -> { macros["%"] = (wholeExp:ReaderExp, exps:Array<ReaderExp>, k) -> {
wholeExp.checkNumArgs(2, 2, '(% [divisor] [dividend])'); 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<ReaderExp>, k) -> { macros["^"] = (wholeExp:ReaderExp, exps:Array<ReaderExp>, k) -> {
wholeExp.checkNumArgs(2, 2, '(^ [base] [exponent])'); 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"); macros["+"] = variadicMacro("Prelude.add");

View File

@@ -80,12 +80,12 @@ class Prelude {
public static var divide = variadic(_divide); public static var divide = variadic(_divide);
public static function mod(bottom:Float, top:Float):Float { public static function mod(bottom:Operand, top:Operand):Operand {
return top % bottom; return Right(top.toFloat() % bottom.toFloat());
} }
public static function pow(exponent:Float, base:Float):Float { public static function pow(exponent:Operand, base:Operand):Operand {
return Math.pow(base, exponent); return Right(Math.pow(base.toFloat(), exponent.toFloat()));
} }
static function _min(a:Operand, b:Operand):Operand { static function _min(a:Operand, b:Operand):Operand {