aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2024-08-17 15:17:41 -0400
committerBruce Hill <bruce@bruce-hill.com>2024-08-17 15:17:41 -0400
commit20b779396394bd6bd46e3b2d4053ea120892c3c7 (patch)
tree7af5e102e88b1f28e13df1c17d0d9c0edd0a6bcb
parent2383d73645d0a72ea535e49899d9e35ac39a296d (diff)
Make small integer constants actually constant
-rw-r--r--builtins/integers.h1
-rw-r--r--compile.c2
2 files changed, 2 insertions, 1 deletions
diff --git a/builtins/integers.h b/builtins/integers.h
index e6b5b1fb..edfd07dd 100644
--- a/builtins/integers.h
+++ b/builtins/integers.h
@@ -101,6 +101,7 @@ Int_t Int$sqrt(Int_t i);
} while (0)
#define I(i) ((int64_t)(i) == (int32_t)(i) ? ((Int_t){.small=((uint64_t)(i)<<2)|1}) : Int64_to_Int(i))
+#define I_small(i) ((Int_t){.small=((uint64_t)(i)<<2)|1})
Int_t Int$slow_plus(Int_t x, Int_t y);
Int_t Int$slow_minus(Int_t x, Int_t y);
diff --git a/compile.c b/compile.c
index e8ed8c79..d792c278 100644
--- a/compile.c
+++ b/compile.c
@@ -1404,7 +1404,7 @@ CORD compile(env_t *env, ast_t *ast)
switch (Match(ast, Int)->bits) {
case 0:
if (mpz_cmpabs_ui(i, BIGGEST_SMALL_INT) <= 0) {
- return CORD_asprintf("I(%s)", str);
+ return CORD_asprintf("I_small(%s)", str);
} else if (mpz_cmp_si(i, INT64_MAX) <= 0 && mpz_cmp_si(i, INT64_MIN) >= 0) {
return CORD_asprintf("Int64_to_Int(%s)", str);
} else {