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 void acquire();
31
32 void release();
33};
34
36 unsigned long long gc_refcount;
37 unsigned long long type_id;
38 unsigned long long value;
39
40 void acquire();
41
42 void release();
43};
44
46 unsigned long long gc_refcount;
47 unsigned long long type_id;
48 char *value;
49
50 void acquire();
51 void release();
52};
53
55 unsigned long long gc_refcount;
56 unsigned long long type_id;
57 bool value;
58
59 void acquire();
60
61 void release();
62};
63
65 unsigned long long gc_refcount;
66 unsigned long long type_id;
67 double value;
68
69 void acquire();
70
71 void release();
72};
73
75 unsigned long long gc_refcount;
76 unsigned long long type_id;
77 wchar_t value;
78
79 void acquire();
80 void release();
81};
82
84 unsigned long long gc_refcount;
85 unsigned long long type_id;
86 int16_t value;
87
88 void acquire();
89 void release();
90};
91
98
99#ifdef ELYSIA_RUNTIME_BUILD_TYPE_DEBUG
100extern "C" AllocatedMemoryList *allocated_memory_list;
101
102extern "C" void runtime_debug_print_current_allocated_memory();
103#endif
104
105#if defined(ELYSIA_RUNTIME_ENABLE_BUILTIN_MEMORY_LEAK_DETECTOR)
106extern "C" int64_t runtime_object_allocated;
107#endif
108
109extern "C" void *runtime_object_alloc_report(size_t size, void *object);
110
111extern "C" void runtime_finalize_object_report(YoiObject *object);
112
113extern "C" void runtime_finalize_object(YoiObject *object);
114
115extern "C" void *runtime_object_alloc(unsigned long size);
116
118
119#ifndef ELYSIA_DISABLE_MEMORY_EXECUTABLE_MAPPING_FEATURE
120
121extern "C" void *runtime_exec_permit_alloc(unsigned long size);
122
123extern "C" void runtime_exec_permit_free(void *ptr);
124
125#endif
126
127
128
129#define GC_WRAPPER_IMPL(X, U) extern "C" void basic_##X##_gc_refcount_increase(U* obj) { \
130 obj->gc_refcount++; \
131} \
132 \
133extern "C" void basic_##X##_gc_refcount_decrease(U* obj) { \
134 obj->gc_refcount--; \
135 if (obj->gc_refcount <= 0) { \
136 runtime_finalize_object((YoiObject*)obj); \
137 } \
138}
139
140
141#define GC_WRAPPER_INLINE(X, U) static inline void basic_##X##_gc_refcount_increase(U* obj) { \
142 if (!obj) return; \
143 obj->gc_refcount++; \
144} \
145 \
146static inline void basic_##X##_gc_refcount_decrease(U* obj) { \
147 if (!obj) return; \
148 obj->gc_refcount--; \
149 if (obj->gc_refcount <= 0) { \
150 runtime_finalize_object((YoiObject*)obj); \
151 } \
152}
153
155
157
159
161
163
165
167
168#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:141
unsigned long size
Definition memory.h:96
AllocatedMemoryList * prev
Definition memory.h:93
AllocatedMemoryList * next
Definition memory.h:94
unsigned long long gc_refcount
Definition memory.h:55
unsigned long long type_id
Definition memory.h:56
unsigned long long gc_refcount
Definition memory.h:75
unsigned long long type_id
Definition memory.h:76
void release()
Definition memory.cpp:192
wchar_t value
Definition memory.h:77
void acquire()
Definition memory.cpp:199
unsigned long long gc_refcount
Definition memory.h:65
unsigned long long type_id
Definition memory.h:66
double value
Definition memory.h:67
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:84
unsigned long long type_id
Definition memory.h:85
void release()
Definition memory.cpp:181
int16_t value
Definition memory.h:86
void acquire()
Definition memory.cpp:188
unsigned long long gc_refcount
Definition memory.h:46
unsigned long long type_id
Definition memory.h:47
char * value
Definition memory.h:48
unsigned long long gc_refcount
Definition memory.h:36
unsigned long long type_id
Definition memory.h:37
unsigned long long value
Definition memory.h:38