fix % and ^ on floats
This commit is contained in:
@@ -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");
|
||||
|
@@ -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 {
|
||||
|
Reference in New Issue
Block a user