aboutsummaryrefslogtreecommitdiffstats
path: root/serve
diff options
context:
space:
mode:
authoreunhhu <[email protected]>2026-09-30 15:51:32 +0100
committereunhhu <[email protected]>2026-09-30 15:51:32 +0100
commite02bfc916743a0327d76144b32b6ec6381e5907f (patch)
treefaf17d43c373e322c5b55ae8adc680d09bd49b4c /serve
parentee21aec10726863d8e812643e1419e4b7d0f2b51 (diff)
downloadpure-e02bfc916743a0327d76144b32b6ec6381e5907f.tar.gz
pure-e02bfc916743a0327d76144b32b6ec6381e5907f.zip
Let a value's 8 bytes hold a number or an integer
Before i64 (016 stage 2): a state's value, a record field's default, a list cell's number, the interpreter's stack slot and an instruction's constant become unions of a double and an int64_t (PureValue, anonymous unions in PureCell, Slot and PureOp). LOAD and STORE, and a list cell made from the stack, copy the bits; everything else reads .num as before. No behaviour changes: every check passes as it did.
Diffstat (limited to 'serve')
-rw-r--r--serve/message-json.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/serve/message-json.c b/serve/message-json.c
index 0ace68f..afbd541 100644
--- a/serve/message-json.c
+++ b/serve/message-json.c
@@ -349,7 +349,7 @@ static const char *rows_of(PureJsonMessage *b, unsigned char *json, size_t size,
for (unsigned k = 0; k < record->count; ++k) {
uint32_t at_field = record->first + k;
if (m->record_field_text[at_field]) {
- uint32_t constant = (uint32_t)m->record_field_default[at_field];
+ uint32_t constant = (uint32_t)m->record_field_default[at_field].num;
PureSpan text = given[k] ? texts[k]
: (PureSpan){m->constant_data + m->constant_offset[constant], m->constant_length[constant]};
if (!rows_room(b, 4 + text.size)) return "memory";
@@ -357,7 +357,7 @@ static const char *rows_of(PureJsonMessage *b, unsigned char *json, size_t size,
if (text.size) memcpy(b->rows + b->rows_size + 4, text.data, text.size);
b->rows_size += 4 + text.size;
} else {
- double value = given[k] ? numbers[k] : m->record_field_default[at_field];
+ double value = given[k] ? numbers[k] : m->record_field_default[at_field].num;
uint64_t bits;
memcpy(&bits, &value, 8);
if (!rows_room(b, 8)) return "memory";