diff --git a/src/vm/wren_core.c b/src/vm/wren_core.c index 6511b17e..ec5238d5 100644 --- a/src/vm/wren_core.c +++ b/src/vm/wren_core.c @@ -744,11 +744,15 @@ DEF_PRIMITIVE(num_dotDotDot) DEF_PRIMITIVE(num_atan2) { + if (!validateNum(vm, args[1], "x value")) return false; + RETURN_NUM(atan2(AS_NUM(args[0]), AS_NUM(args[1]))); } DEF_PRIMITIVE(num_min) { + if (!validateNum(vm, args[1], "Other value")) return false; + double value = AS_NUM(args[0]); double other = AS_NUM(args[1]); RETURN_NUM(value <= other ? value : other); @@ -756,6 +760,8 @@ DEF_PRIMITIVE(num_min) DEF_PRIMITIVE(num_max) { + if (!validateNum(vm, args[1], "Other value")) return false; + double value = AS_NUM(args[0]); double other = AS_NUM(args[1]); RETURN_NUM(value > other ? value : other); @@ -763,6 +769,9 @@ DEF_PRIMITIVE(num_max) DEF_PRIMITIVE(num_clamp) { + if (!validateNum(vm, args[1], "Min value")) return false; + if (!validateNum(vm, args[2], "Max value")) return false; + double value = AS_NUM(args[0]); double min = AS_NUM(args[1]); double max = AS_NUM(args[2]); @@ -772,6 +781,8 @@ DEF_PRIMITIVE(num_clamp) DEF_PRIMITIVE(num_pow) { + if (!validateNum(vm, args[1], "Power value")) return false; + RETURN_NUM(pow(AS_NUM(args[0]), AS_NUM(args[1]))); } diff --git a/test/core/number/atan2_x_not_num.wren b/test/core/number/atan2_x_not_num.wren new file mode 100644 index 00000000..24527347 --- /dev/null +++ b/test/core/number/atan2_x_not_num.wren @@ -0,0 +1 @@ +0.atan(false) // expect runtime error: x value must be a number. \ No newline at end of file diff --git a/test/core/number/clamp_max_not_num.wren b/test/core/number/clamp_max_not_num.wren new file mode 100644 index 00000000..d8f5a1dd --- /dev/null +++ b/test/core/number/clamp_max_not_num.wren @@ -0,0 +1 @@ +1.clamp(0, false) // expect runtime error: Max value must be a number. diff --git a/test/core/number/clamp_min_not_num.wren b/test/core/number/clamp_min_not_num.wren new file mode 100644 index 00000000..55fb4a8b --- /dev/null +++ b/test/core/number/clamp_min_not_num.wren @@ -0,0 +1 @@ +1.clamp(false, 2) // expect runtime error: Min value must be a number. diff --git a/test/core/number/max_other_not_num.wren b/test/core/number/max_other_not_num.wren new file mode 100644 index 00000000..db5940d9 --- /dev/null +++ b/test/core/number/max_other_not_num.wren @@ -0,0 +1 @@ +1.max(false) // expect runtime error: Other value must be a number. diff --git a/test/core/number/min_other_not_num.wren b/test/core/number/min_other_not_num.wren new file mode 100644 index 00000000..235572c4 --- /dev/null +++ b/test/core/number/min_other_not_num.wren @@ -0,0 +1 @@ +1.min(false) // expect runtime error: Other value must be a number. diff --git a/test/core/number/pow_power_not_num.wren b/test/core/number/pow_power_not_num.wren new file mode 100644 index 00000000..fa8c80b5 --- /dev/null +++ b/test/core/number/pow_power_not_num.wren @@ -0,0 +1,2 @@ +1.pow(false) // expect runtime error: Power value must be a number. +