aboutsummaryrefslogtreecommitdiff
path: root/tag.h
diff options
context:
space:
mode:
Diffstat (limited to 'tag.h')
-rw-r--r--tag.h90
1 files changed, 0 insertions, 90 deletions
diff --git a/tag.h b/tag.h
deleted file mode 100644
index dab1fa0..0000000
--- a/tag.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/* Copyright (C) 2025 Aryadev Chavali
-
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License Version 2 for
- * details.
-
- * You may distribute and modify this code under the terms of the GNU General
- * Public License Version 2, which you should have received a copy of along with
- * this program. If not, please go to <https://www.gnu.org/licenses/>.
-
- * Created: 2025-04-06
- * Description:
- */
-
-#ifndef TAG_H
-#define TAG_H
-
-#include "./base.h"
-
-#include <stdbool.h>
-#include <stdlib.h>
-
-// Opaque structure to make tagged pointers a separate type from general
-// pointers
-typedef struct Obj lisp_t;
-
-enum Tag
-{
- TAG_NIL = 0b00000000, // Atomic types
- TAG_INT = 0b00000001, // special so we can encode 63 bit integers
- TAG_SYM = 0b00000100,
- TAG_SSYM = 0b00001000,
- TAG_CHAR = 0b00001100,
- TAG_BOOL = 0b00010000,
- // TAG_FLOAT = 0b00010100,
- TAG_CONS = 0b00000010, // Container types
- TAG_VEC = 0b00000110,
- TAG_STR = 0b00001010,
-
- NUM_TAGS = 9,
-};
-
-enum Shift
-{
- SHIFT_INT = 1,
- SHIFT_SSYM = 5,
- SHIFT_CHAR = 8,
- SHIFT_SYM = 8,
- SHIFT_BOOL = 8,
- SHIFT_FLOAT = 8,
-
- SHIFT_CONS = 8,
- SHIFT_VEC = 8,
- SHIFT_STR = 8,
-};
-
-enum Mask
-{
- MASK_INT = 0b00000001,
- MASK_SSYM = 0b00011111,
- MASK_SYM = 0b11111111,
- MASK_CHAR = 0b11111111,
- MASK_BOOL = 0b11111111,
- MASK_FLOAT = 0b11111111,
-
- MASK_CONS = 0b11111111,
- MASK_VEC = 0b11111111,
- MASK_STR = 0b11111111,
-};
-
-#define TAG(PTR, TYPE) ((lisp_t *)(((PTR) << SHIFT_##TYPE) | TAG_##TYPE))
-#define IS_TAG(PTR, TYPE) (((u64)(PTR) & MASK_##TYPE) == TAG_##TYPE)
-#define UNTAG(PTR, TYPE) (((u64)PTR) >> SHIFT_##TYPE)
-
-enum Tag tag_get(lisp_t *ptr);
-
-lisp_t *tag_int(i64 i);
-lisp_t *tag_char(u32 codepoint);
-lisp_t *tag_sym(void *ptr);
-lisp_t *tag_ssym(const char *data, size_t size);
-lisp_t *tag_bool(bool b);
-lisp_t *tag_vec(void *ptr);
-lisp_t *tag_str(void *ptr);
-lisp_t *tag_cons(void *ptr);
-
-#define INT_MAX ((1L << 62) - 1)
-#define INT_MIN (-(1L << 62))
-
-#endif