fix % and ^ on floats

This commit is contained in:
2021-01-04 13:02:24 -07:00
parent ef496a5128
commit 7308c33dca
2 changed files with 16 additions and 6 deletions

View File

@@ -21,12 +21,22 @@ class Macros {
macros["%"] = (wholeExp:ReaderExp, exps:Array<ReaderExp>, 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<ReaderExp>, 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");

View File

@@ -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 {