44 lines
1.3 KiB
C
44 lines
1.3 KiB
C
/**
|
|
* payloads/integer.c
|
|
*
|
|
* An integer. Doctrine here is that we are not implementing bignum arithmetic in
|
|
* the bootstrap layer; an integer is, for now, just a 64 bit integer.
|
|
*
|
|
* (c) 2026 Simon Brooke <simon@journeyman.cc>
|
|
* Licensed under GPL version 2.0, or, at your option, any later version.
|
|
*/
|
|
|
|
#include <stdint.h>
|
|
|
|
#include "memory/node.h"
|
|
#include "memory/pointer.h"
|
|
#include "memory/pso.h"
|
|
#include "memory/pso2.h"
|
|
#include "memory/pso4.h"
|
|
#include "memory/tags.h"
|
|
|
|
#include "debug.h"
|
|
|
|
/**
|
|
* Allocate an integer cell representing this `value` and return a pso_pointer to it.
|
|
* @param value an integer value;
|
|
*/
|
|
struct pso_pointer make_integer( struct pso_pointer frame_pointer,
|
|
int64_t value ) {
|
|
struct pso_pointer result = nil;
|
|
debug_print( L"Entering make_integer\n", DEBUG_ALLOC, 0 );
|
|
|
|
result = allocate( frame_pointer, INTEGERTAG, 2 );
|
|
struct pso2 *cell = pointer_to_object( result );
|
|
cell->payload.integer.value = value;
|
|
|
|
debug_printf( DEBUG_ALLOC, 0, L"\nmake_integer returning %ld\n",
|
|
cell->payload.integer.value );
|
|
|
|
return result;
|
|
}
|
|
|
|
struct pso_pointer acquire_integer( struct pso_pointer frame_pointer,
|
|
int64_t value ) {
|
|
return make_integer( frame_pointer, value );
|
|
}
|