aboutsummaryrefslogtreecommitdiff
path: root/src/compile
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2026-01-16 18:22:00 -0500
committerBruce Hill <bruce@bruce-hill.com>2026-01-16 18:22:00 -0500
commitc64fa0d256ffdba8052580001a34da13157672fd (patch)
treeb7d145d81957d2b30ec37f94ed67d0d5c1d6621f /src/compile
parentde7c686bd5ae30fe229d1a4e200cbd7b56e3a91c (diff)
Fix everything up real good
Diffstat (limited to 'src/compile')
-rw-r--r--src/compile/expressions.c18
1 files changed, 6 insertions, 12 deletions
diff --git a/src/compile/expressions.c b/src/compile/expressions.c
index f86786be..05ea938f 100644
--- a/src/compile/expressions.c
+++ b/src/compile/expressions.c
@@ -119,10 +119,8 @@ Text_t compile_real(ast_t *ast, Real_t num) {
// Check if denominator is 1 (integer)
if (mpz_cmp_ui(mpq_denref(&r->value), 1) == 0) {
- Int_t b = Int$from_mpz(mpq_numref(&r->value));
- Real_t b_real;
- b_real.bigint = &b;
- b_real.bits |= REAL_TAG_BIGINT;
+ Int_t *b = heap(Int$from_mpz(mpq_numref(&r->value)));
+ Real_t b_real = {.bits = (uint64_t)b | REAL_TAG_BIGINT};
return compile_real(ast, b_real);
}
@@ -138,15 +136,11 @@ Text_t compile_real(ast_t *ast, Real_t num) {
char *den_str = mpz_get_str(NULL, 10, mpq_denref(&r->value));
return Texts("Real$from_rational(", num_str, ", ", den_str, ")");
} else {
- Int_t numerator = Int$from_mpz(mpq_numref(&r->value));
- Real_t num_real;
- num_real.bigint = &numerator;
- num_real.bits |= REAL_TAG_BIGINT;
+ Int_t *numerator = heap(Int$from_mpz(mpq_numref(&r->value)));
+ Real_t num_real = {.bits = (uint64_t)numerator | REAL_TAG_BIGINT};
- Int_t denominator = Int$from_mpz(mpq_denref(&r->value));
- Real_t den_real;
- den_real.bigint = &denominator;
- den_real.bits |= REAL_TAG_BIGINT;
+ Int_t *denominator = heap(Int$from_mpz(mpq_denref(&r->value)));
+ Real_t den_real = {.bits = (uint64_t)denominator | REAL_TAG_BIGINT};
return Texts("Real$divided_by(", compile_real(ast, num_real), ", ", compile_real(ast, den_real), ")");
}