aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/compile/comparisons.c1
-rw-r--r--src/compile/functions.c1
-rw-r--r--src/environment.c16
-rw-r--r--src/stdlib/bigint.c4
-rw-r--r--src/stdlib/bytes.c2
-rw-r--r--src/stdlib/intX.c.h2
-rw-r--r--src/stdlib/numX.c.h2
7 files changed, 16 insertions, 12 deletions
diff --git a/src/compile/comparisons.c b/src/compile/comparisons.c
index 62196cdf..c2d376ef 100644
--- a/src/compile/comparisons.c
+++ b/src/compile/comparisons.c
@@ -41,6 +41,7 @@ Text_t compile_comparison(env_t *env, ast_t *ast) {
} else {
code_err(ast, "I can't do comparisons between ", type_to_text(lhs_t), " and ", type_to_text(rhs_t));
}
+ assert(operand_t);
Text_t lhs, rhs;
lhs = compile_to_type(env, binop.lhs, operand_t);
diff --git a/src/compile/functions.c b/src/compile/functions.c
index 01377a89..f62e00f8 100644
--- a/src/compile/functions.c
+++ b/src/compile/functions.c
@@ -633,6 +633,7 @@ static void check_unused_vars(env_t *env, arg_ast_t *args, ast_t *body) {
// Global/file scoped vars are okay to mutate without reading
if (get_binding(env, entry->name) != NULL) continue;
ast_t *var = Table$str_get(assigned_vars, entry->name);
+ assert(var);
code_err(var, "This variable was assigned to, but never read from.");
}
}
diff --git a/src/environment.c b/src/environment.c
index b3009a5e..0cbeb0fc 100644
--- a/src/environment.c
+++ b/src/environment.c
@@ -101,7 +101,7 @@ env_t *global_env(bool source_mapping) {
"Byte", Type(ByteType), Text("Byte_t"), Text("Byte$info"),
{"get_bit", "Byte$get_bit", "func(x:Byte, bit_index:Int -> Bool)"}, //
{"hex", "Byte$hex", "func(byte:Byte, uppercase=yes, prefix=no -> Text)"}, //
- {"is_between", "Byte$is_between", "func(x:Byte, low:Byte, high:Byte -> Bool)"}, //
+ {"is_between", "Byte$is_between", "func(x:Byte, a:Byte, b:Byte -> Bool)"}, //
{"max", "Byte$max", "Byte"}, //
{"min", "Byte$min", "Byte"}, //
{"parse", "Byte$parse", "func(text:Text, base:Int?=none, remainder:&Text?=none -> Byte?)"}, //
@@ -118,7 +118,7 @@ env_t *global_env(bool source_mapping) {
{"gcd", "Int$gcd", "func(x,y:Int -> Int)"}, //
{"get_bit", "Int$get_bit", "func(x,bit_index:Int -> Bool)"}, //
{"hex", "Int$hex", "func(i:Int, digits=0, uppercase=yes, prefix=yes -> Text)"}, //
- {"is_between", "Int$is_between", "func(x:Int,low:Int,high:Int -> Bool)"}, //
+ {"is_between", "Int$is_between", "func(x:Int, a:Int, b:Int -> Bool)"}, //
{"is_prime", "Int$is_prime", "func(x:Int,reps=50 -> Bool)"}, //
{"left_shifted", "Int$left_shifted", "func(x,y:Int -> Int)"}, //
{"minus", "Int$minus", "func(x,y:Int -> Int)"}, //
@@ -151,7 +151,7 @@ env_t *global_env(bool source_mapping) {
{"parse", "Int64$parse", "func(text:Text, base:Int?=none, remainder:&Text?=none -> Int64?)"}, //
{"get_bit", "Int64$get_bit", "func(x:Int64, bit_index:Int -> Bool)"}, //
{"hex", "Int64$hex", "func(i:Int64, digits=0, uppercase=yes, prefix=yes -> Text)"}, //
- {"is_between", "Int64$is_between", "func(x:Int64,low:Int64,high:Int64 -> Bool)"}, //
+ {"is_between", "Int64$is_between", "func(x:Int64, a:Int64, b:Int64 -> Bool)"}, //
{"max", "Int64$max", "Int64"}, //
{"min", "Int64$min", "Int64"}, //
{"modulo", "Int64$modulo", "func(x,y:Int64 -> Int64)"}, //
@@ -173,7 +173,7 @@ env_t *global_env(bool source_mapping) {
{"parse", "Int32$parse", "func(text:Text, base:Int?=none, remainder:&Text?=none -> Int32?)"}, //
{"get_bit", "Int32$get_bit", "func(x:Int32, bit_index:Int -> Bool)"}, //
{"hex", "Int32$hex", "func(i:Int32, digits=0, uppercase=yes, prefix=yes -> Text)"}, //
- {"is_between", "Int32$is_between", "func(x:Int32,low:Int32,high:Int32 -> Bool)"}, //
+ {"is_between", "Int32$is_between", "func(x:Int32, a:Int32, b:Int32 -> Bool)"}, //
{"max", "Int32$max", "Int32"}, //
{"min", "Int32$min", "Int32"}, //
{"modulo", "Int32$modulo", "func(x,y:Int32 -> Int32)"}, //
@@ -195,7 +195,7 @@ env_t *global_env(bool source_mapping) {
{"parse", "Int16$parse", "func(text:Text, base:Int?=none, remainder:&Text?=none -> Int16?)"}, //
{"get_bit", "Int16$get_bit", "func(x:Int16, bit_index:Int -> Bool)"}, //
{"hex", "Int16$hex", "func(i:Int16, digits=0, uppercase=yes, prefix=yes -> Text)"}, //
- {"is_between", "Int16$is_between", "func(x:Int16,low:Int16,high:Int16 -> Bool)"}, //
+ {"is_between", "Int16$is_between", "func(x:Int16, a:Int16, b:Int16 -> Bool)"}, //
{"max", "Int16$max", "Int16"}, //
{"min", "Int16$min", "Int16"}, //
{"modulo", "Int16$modulo", "func(x,y:Int16 -> Int16)"}, //
@@ -217,7 +217,7 @@ env_t *global_env(bool source_mapping) {
{"parse", "Int8$parse", "func(text:Text, base:Int?=none, remainder:&Text?=none -> Int8?)"}, //
{"get_bit", "Int8$get_bit", "func(x:Int8, bit_index:Int -> Bool)"}, //
{"hex", "Int8$hex", "func(i:Int8, digits=0, uppercase=yes, prefix=yes -> Text)"}, //
- {"is_between", "Int8$is_between", "func(x:Int8,low:Int8,high:Int8 -> Bool)"}, //
+ {"is_between", "Int8$is_between", "func(x:Int8, a:Int8, b:Int8 -> Bool)"}, //
{"max", "Int8$max", "Int8"}, //
{"min", "Int8$min", "Int8"}, //
{"modulo", "Int8$modulo", "func(x,y:Int8 -> Int8)"}, //
@@ -239,7 +239,7 @@ env_t *global_env(bool source_mapping) {
{"clamped", "Num$clamped", "func(x,low,high:Num -> Num)"}, //
{"percent", "Num$percent", "func(n:Num,precision=0.01 -> Text)"}, //
{"with_precision", "Num$with_precision", "func(n:Num,precision:Num -> Num)"}, //
- {"is_between", "Num$is_between", "func(x:Num,low:Num,high:Num -> Bool)"}, //
+ {"is_between", "Num$is_between", "func(x:Num, a:Num, b:Num -> Bool)"}, //
{"isinf", "Num$isinf", "func(n:Num -> Bool)"}, //
{"isfinite", "Num$isfinite", "func(n:Num -> Bool)"}, //
{"modulo", "Num$mod", "func(x,y:Num -> Num)"}, //
@@ -269,7 +269,7 @@ env_t *global_env(bool source_mapping) {
{"clamped", "Num32$clamped", "func(x,low,high:Num32 -> Num32)"}, //
{"percent", "Num32$percent", "func(n:Num32,precision=Num32(.01) -> Text)"}, //
{"with_precision", "Num32$with_precision", "func(n:Num32,precision:Num32 -> Num32)"}, //
- {"is_between", "Num32$is_between", "func(x:Num32,low:Num32,high:Num32 -> Bool)"}, //
+ {"is_between", "Num32$is_between", "func(x:Num32, a:Num32, b:Num32 -> Bool)"}, //
{"isinf", "Num32$isinf", "func(n:Num32 -> Bool)"}, //
{"isfinite", "Num32$isfinite", "func(n:Num32 -> Bool)"}, //
C(2_SQRTPI), C(E), C(PI_2), C(2_PI), C(1_PI), C(LN10), C(LN2), C(LOG2E), C(PI), C(PI_4), C(SQRT2),
diff --git a/src/stdlib/bigint.c b/src/stdlib/bigint.c
index c9bfb68e..e2935332 100644
--- a/src/stdlib/bigint.c
+++ b/src/stdlib/bigint.c
@@ -102,7 +102,9 @@ CONSTFUNC Int_t Int$clamped(Int_t x, Int_t low, Int_t high) {
public
CONSTFUNC bool Int$is_between(const Int_t x, const Int_t low, const Int_t high) {
- return Int$compare_value(low, x) <= 0 && Int$compare_value(x, high) <= 0;
+ int32_t low_cmp = Int$compare_value(x, low);
+ int32_t high_cmp = Int$compare_value(x, high);
+ return (low_cmp >= 0 && high_cmp <= 0) || (low_cmp <= 0 && high_cmp >= 0);
}
public
diff --git a/src/stdlib/bytes.c b/src/stdlib/bytes.c
index 2b8dab4d..9874f222 100644
--- a/src/stdlib/bytes.c
+++ b/src/stdlib/bytes.c
@@ -31,7 +31,7 @@ PUREFUNC public Text_t Byte$as_text(const void *b, bool colorize, const TypeInfo
public
CONSTFUNC bool Byte$is_between(const Byte_t x, const Byte_t low, const Byte_t high) {
- return low <= x && x <= high;
+ return (low <= x && x <= high) || (high <= x && x <= low);
}
public
diff --git a/src/stdlib/intX.c.h b/src/stdlib/intX.c.h
index 3e6648f7..04c8ef3b 100644
--- a/src/stdlib/intX.c.h
+++ b/src/stdlib/intX.c.h
@@ -116,7 +116,7 @@ PUREFUNC bool NAMESPACED(equal)(const void *x, const void *y, const TypeInfo_t *
}
public
CONSTFUNC bool NAMESPACED(is_between)(const INT_T x, const INT_T low, const INT_T high) {
- return low <= x && x <= high;
+ return (low <= x && x <= high) || (high <= x && x <= low);
}
public
CONSTFUNC INT_T NAMESPACED(clamped)(INT_T x, INT_T min, INT_T max) {
diff --git a/src/stdlib/numX.c.h b/src/stdlib/numX.c.h
index ed91fbf5..22db3ca3 100644
--- a/src/stdlib/numX.c.h
+++ b/src/stdlib/numX.c.h
@@ -155,7 +155,7 @@ CONSTFUNC NUM_T NAMESPACED(mix)(NUM_T amount, NUM_T x, NUM_T y) {
public
CONSTFUNC bool NAMESPACED(is_between)(const NUM_T x, const NUM_T low, const NUM_T high) {
- return low <= x && x <= high;
+ return (low <= x && x <= high) || (high <= x && x <= low);
}
public
CONSTFUNC NUM_T NAMESPACED(clamped)(NUM_T x, NUM_T low, NUM_T high) {