hoshi-lang dev
Yet another programming language
Loading...
Searching...
No Matches
memory.h
Go to the documentation of this file.
1//
2// Created by XIaokang00010 on 2025/7/29.
3//
4
5#ifndef HOSHI_LANG_MEMORY_H
6#define HOSHI_LANG_MEMORY_H
7
8#include <cstdint>
9#include <cstdlib>
11#include <runtime/rtti/rtti.h>
12
13struct YoiObject {
14 unsigned long long gc_refcount;
15 unsigned long long type_id;
16};
17
19 unsigned long long gc_refcount;
20 unsigned long long type_id;
21 unsigned long long length;
22 void *data;
23};
24
26 unsigned long long gc_refcount;
27 unsigned long long type_id;
28 long long value;
29};
30
32 unsigned long long gc_refcount;
33 unsigned long long type_id;
34 unsigned long long value;
35};
36
38 unsigned long long gc_refcount;
39 unsigned long long type_id;
40 char *value;
41};
42
44 unsigned long long gc_refcount;
45 unsigned long long type_id;
46 bool value;
47};
48
50 unsigned long long gc_refcount;
51 unsigned long long type_id;
52 double value;
53};
54
56 unsigned long long gc_refcount;
57 unsigned long long type_id;
58 wchar_t value;
59};
60
62 unsigned long long gc_refcount;
63 unsigned long long type_id;
64 int16_t value;
65};
66
73
74#ifdef ELYSIA_RUNTIME_BUILD_TYPE_DEBUG
75extern "C" AllocatedMemoryList *allocated_memory_list;
76
77extern "C" void runtime_debug_print_current_allocated_memory();
78#endif
79
80#if defined(ELYSIA_RUNTIME_ENABLE_BUILTIN_MEMORY_LEAK_DETECTOR)
81extern "C" int64_t runtime_object_allocated;
82#endif
83
84extern "C" void *runtime_object_alloc_report(size_t size, void *object);
85
86extern "C" void runtime_finalize_object_report(YoiObject *object);
87
88extern "C" void runtime_finalize_object(YoiObject *object);
89
90extern "C" void *runtime_object_alloc(unsigned long size);
91
93
94#ifndef ELYSIA_DISABLE_MEMORY_EXECUTABLE_MAPPING_FEATURE
95
96extern "C" void *runtime_exec_permit_alloc(unsigned long size);
97
98extern "C" void runtime_exec_permit_free(void *ptr);
99
100#endif
101
102
103
104#define GC_WRAPPER_IMPL(X, U) extern "C" void basic_##X##_gc_refcount_increase(U* obj) { \
105 obj->gc_refcount++; \
106} \
107 \
108extern "C" void basic_##X##_gc_refcount_decrease(U* obj) { \
109 obj->gc_refcount--; \
110 if (obj->gc_refcount <= 0) { \
111 runtime_finalize_object((YoiObject*)obj); \
112 } \
113}
114
115
116#define GC_WRAPPER_INLINE(X, U) static inline void basic_##X##_gc_refcount_increase(U* obj) { \
117 if (!obj) return; \
118 obj->gc_refcount++; \
119} \
120 \
121static inline void basic_##X##_gc_refcount_decrease(U* obj) { \
122 if (!obj) return; \
123 obj->gc_refcount--; \
124 if (obj->gc_refcount <= 0) { \
125 runtime_finalize_object((YoiObject*)obj); \
126 } \
127}
128
130
132
134
136
138
140
142
143#endif //HOSHI_LANG_MEMORY_H
YoiIntegerObject * runtime_get_string_array_data_pointer(YoiObjectArray *array)
Definition memory.cpp:102
void * runtime_object_alloc(unsigned long size)
Definition memory.cpp:96
void runtime_finalize_object_report(YoiObject *object)
Definition memory.cpp:65
void runtime_exec_permit_free(void *ptr)
Definition memory.cpp:154
void runtime_finalize_object(YoiObject *object)
Definition memory.cpp:90
void * runtime_exec_permit_alloc(unsigned long size)
Definition memory.cpp:123
void * runtime_object_alloc_report(size_t size, void *object)
Definition memory.cpp:37
#define GC_WRAPPER_INLINE(X, U)
Definition memory.h:116
unsigned long size
Definition memory.h:71
AllocatedMemoryList * prev
Definition memory.h:68
AllocatedMemoryList * next
Definition memory.h:69
unsigned long long gc_refcount
Definition memory.h:44
unsigned long long type_id
Definition memory.h:45
unsigned long long gc_refcount
Definition memory.h:56
unsigned long long type_id
Definition memory.h:57
wchar_t value
Definition memory.h:58
unsigned long long gc_refcount
Definition memory.h:50
unsigned long long type_id
Definition memory.h:51
double value
Definition memory.h:52
unsigned long long gc_refcount
Definition memory.h:26
unsigned long long type_id
Definition memory.h:27
long long value
Definition memory.h:28
unsigned long long gc_refcount
Definition memory.h:19
unsigned long long type_id
Definition memory.h:20
void * data
Definition memory.h:22
unsigned long long length
Definition memory.h:21
unsigned long long gc_refcount
Definition memory.h:14
unsigned long long type_id
Definition memory.h:15
unsigned long long gc_refcount
Definition memory.h:62
unsigned long long type_id
Definition memory.h:63
int16_t value
Definition memory.h:64
unsigned long long gc_refcount
Definition memory.h:38
unsigned long long type_id
Definition memory.h:39
char * value
Definition memory.h:40
unsigned long long gc_refcount
Definition memory.h:32
unsigned long long type_id
Definition memory.h:33
unsigned long long value
Definition memory.h:34