From 57331ba9756df043b5c665aa4952a0a7b38799e5 Mon Sep 17 00:00:00 2001 From: Nathan Ringo Date: Sat, 16 Nov 2024 12:38:37 -0600 Subject: Initial commit --- src/value.h | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/value.h (limited to 'src/value.h') diff --git a/src/value.h b/src/value.h new file mode 100644 index 0000000..a932514 --- /dev/null +++ b/src/value.h @@ -0,0 +1,38 @@ +#ifndef IMB3_VALUE_H +#define IMB3_VALUE_H + +#include + +struct value { + uintptr_t bits; +}; + +enum value_tag { + /** + * A big integer or the nil constant. + */ + TAG_BIGINT_OR_NIL = 0b000, + + /** + * Fixnums, i.e. integers that are stored directly in the value rather than + * being pointed to. This is a two-bit tag rather than a three-bit tag... + */ + VALUE_FIXNUM = 0b01, + + /** + * A builtin-object. + */ + TAG_BUILTIN_OBJECT = 0b010, + + /** + * A simple-array, i.e. an array of values without a fill-pointer. + */ + TAG_SIMPLE_ARRAY = 0b100, + + /** + * A standard-object, effectively a pair of a class and a slot array. + */ + TAG_STANDARD_OBJECT = 0b110, +}; + +#endif // IMB3_VALUE_H -- cgit v1.2.3