Skip to content

Commit aea8a35

Browse files
committed
feat(core): add a mem module for memory management
Rename `Box` to `Boxedptr` and add more useful functions to it, in addition to renaming some existing functions.
1 parent ddf92b9 commit aea8a35

File tree

27 files changed

+331
-253
lines changed

27 files changed

+331
-253
lines changed

lib/core/src/Box.ri

Lines changed: 0 additions & 36 deletions
This file was deleted.

lib/core/src/DynArray.ri

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
// source code is governed by an MIT license that can be found in the LICENSE
33
// file.
44

5+
import ./mem;
6+
57
#[boxed]
68
struct DynArray {
79
mut ptr: rawptr;
@@ -11,19 +13,19 @@ struct DynArray {
1113

1214
#[unsafe; inline]
1315
func new(elem_size: uint, cap: uint) -> Self {
14-
return Self(mem_zeroed(cap * elem_size), elem_size, 0, cap);
16+
return Self(mem.raw_zeroed(cap * elem_size), elem_size, 0, cap);
1517
}
1618

1719
#[unsafe; inline]
1820
func new_with_len(elem_size: uint, len: uint, cap: uint) -> Self {
1921
cap_ := if cap < len { len } else { cap };
20-
return Self(mem_zeroed(cap_ * elem_size), elem_size, len, cap);
22+
return Self(mem.raw_zeroed(cap_ * elem_size), elem_size, len, cap);
2123
}
2224

2325
#[unsafe; inline]
2426
func new_with_init(init: rawptr, elem_size: uint, len: uint, cap: uint) -> Self {
2527
cap_ := if cap < len { len } else { cap };
26-
dyn_array := Self(mem_alloc(cap_ * elem_size), elem_size, len, cap);
28+
dyn_array := Self(mem.raw_alloc(cap_ * elem_size), elem_size, len, cap);
2729
mut i: uint := 0;
2830
while i < len : i += 1 {
2931
unsafe {
@@ -35,8 +37,8 @@ struct DynArray {
3537

3638
#[unsafe]
3739
func from_array(arr: rawptr, elem_size: uint, len: uint) -> Self {
38-
dyn_array := Self(mem_alloc(len * elem_size), elem_size, len, len);
39-
mem_copy(dyn_array.ptr, arr, len * elem_size);
40+
dyn_array := Self(mem.raw_alloc(len * elem_size), elem_size, len, len);
41+
mem.copy(dyn_array.ptr, arr, len * elem_size);
4042
return dyn_array;
4143
}
4244

@@ -60,7 +62,7 @@ struct DynArray {
6062
#[unsafe; inline]
6163
func raw_set(self, idx: uint, val: rawptr) {
6264
unsafe {
63-
mem_copy(
65+
mem.copy(
6466
@ptr_add(@as([&]mut uint8, self.ptr), self.elem_size * idx),
6567
val, self.elem_size
6668
);
@@ -72,7 +74,7 @@ struct DynArray {
7274
runtime_error("dynamic array index out of range (index: {}, len: {})", idx, self.len);
7375
}
7476
unsafe {
75-
mem_copy(
77+
mem.copy(
7678
@ptr_add(@as([&]mut uint8, self.ptr), self.elem_size * idx),
7779
val, self.elem_size
7880
);
@@ -84,7 +86,7 @@ struct DynArray {
8486
self.reserve(self.len + 1);
8587
}
8688
unsafe {
87-
mem_copy(@ptr_add(self.ptr, self.elem_size * self.len), val, self.elem_size);
89+
mem.copy(@ptr_add(self.ptr, self.elem_size * self.len), val, self.elem_size);
8890
}
8991
self.len += 1;
9092
}
@@ -117,16 +119,16 @@ struct DynArray {
117119
old_ptr := self.ptr;
118120
new_size := self.len - size;
119121
new_cap: uint := if new_size == 0 { 1 } else { new_size };
120-
self.ptr = mem_zeroed(new_cap * self.elem_size);
121-
mem_copy(self.ptr, old_ptr, i * self.elem_size);
122+
self.ptr = mem.raw_zeroed(new_cap * self.elem_size);
123+
mem.copy(self.ptr, old_ptr, i * self.elem_size);
122124
unsafe {
123-
mem_copy(
125+
mem.copy(
124126
@ptr_add(self.ptr, i * self.elem_size),
125127
@ptr_add(old_ptr, (i + size) * self.elem_size),
126128
(self.len - i - size) * self.elem_size
127129
);
128130
if no_slices {
129-
mem_dealloc(old_ptr);
131+
mem.raw_dealloc(old_ptr);
130132
}
131133
}
132134
self.len = new_size;
@@ -154,7 +156,7 @@ struct DynArray {
154156
if self.len != rhs.len {
155157
return false;
156158
}
157-
return mem_cmp(self.ptr, rhs.ptr, self.len) == 0;
159+
return mem.cmp(self.ptr, rhs.ptr, self.len) == 0;
158160
}
159161

160162
#[inline]
@@ -171,8 +173,8 @@ struct DynArray {
171173
cap *= 2;
172174
}
173175
new_size := cap * self.elem_size;
174-
new_ptr := mem_alloc(new_size);
175-
mem_copy(new_ptr, self.ptr, self.len * self.elem_size);
176+
new_ptr := mem.raw_alloc(new_size);
177+
mem.copy(new_ptr, self.ptr, self.len * self.elem_size);
176178
self.ptr = new_ptr;
177179
self.cap = cap;
178180
}
@@ -204,14 +206,14 @@ struct DynArray {
204206
if size == 0 {
205207
size = 1;
206208
}
207-
dyn_array := Self(mem_zeroed(size), self.elem_size, self.len, self.cap);
208-
mem_copy(dyn_array.ptr, self.ptr, size);
209+
dyn_array := Self(mem.raw_zeroed(size), self.elem_size, self.len, self.cap);
210+
mem.copy(dyn_array.ptr, self.ptr, size);
209211
return dyn_array;
210212
}
211213

212214
func __destroy__(self) {
213215
unsafe {
214-
mem_dealloc(self.ptr);
216+
mem.raw_dealloc(self.ptr);
215217
}
216218
}
217219
}

lib/core/src/Slice.ri

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
// source code is governed by an MIT license that can be found in the LICENSE
33
// file.
44

5+
import ./mem;
6+
57
struct Slice {
68
ptr: rawptr;
79
elem_size: uint;
@@ -29,7 +31,7 @@ struct Slice {
2931
runtime_error("slice index out of range (index: {}, len: {})", idx, self.len);
3032
}
3133
unsafe {
32-
mem_copy(
34+
mem.copy(
3335
@ptr_add(@as([&]mut uint8, self.ptr), self.elem_size * idx),
3436
val, self.elem_size
3537
);
@@ -71,7 +73,7 @@ struct Slice {
7173
if self.len != rhs.len {
7274
return false;
7375
}
74-
return mem_cmp(self.ptr, rhs.ptr, self.len) == 0;
76+
return mem.cmp(self.ptr, rhs.ptr, self.len) == 0;
7577
}
7678

7779
#[inline]

lib/core/src/StringBuilder.c.ri

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// file.
44

55
import c/libc;
6+
import ./mem;
67

78
#[boxed]
89
pub struct StringBuilder < Stringable {
@@ -42,7 +43,7 @@ pub struct StringBuilder < Stringable {
4243
#[unsafe]
4344
pub func write_raw_with_len(mut self, s: [&]uint8, len: uint) {
4445
self.inner.reserve(self.inner.len + len);
45-
mem_copy(
46+
mem.copy(
4647
unsafe { @ptr_add(self.inner.ptr, self.inner.elem_size * self.inner.len) },
4748
s, len
4849
);

lib/core/src/array.c.ri

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@
33
// file.
44

55
import c/libc;
6+
import ./mem;
67

78
func array_init_set(arr: rawptr, elem_size: uint, len: uint, value: rawptr) {
89
mut i: uint := 0;
910
while i < len : i += 1 {
1011
unsafe {
11-
mem_copy(@ptr_add(@as([&]mut uint8, arr), elem_size * i), value, elem_size);
12+
mem.copy(@ptr_add(@as([&]mut uint8, arr), elem_size * i), value, elem_size);
1213
}
1314
}
1415
}

lib/core/src/backtrace.c.ri

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ $if !_RELEASE_ { // skip backtrace in release mode
66
#![compile_c_source("../thirdparty/libbacktrace/backtrace.c")]
77

88
import c;
9+
import ./mem;
910

1011
struct BacktraceState;
1112

@@ -40,7 +41,7 @@ $if !_RELEASE_ { // skip backtrace in release mode
4041
) -> int32 {
4142
unsafe {
4243
if safe_fn_ptr := fn_ptr {
43-
if mem_cmp(safe_fn_ptr, c"_R4core4mainF", 13) == 0 {
44+
if mem.cmp(safe_fn_ptr, c"_R4core4mainF", 13) == 0 {
4445
return -1; // stop backtracing
4546
}
4647
}

lib/core/src/int.ri

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
// source code is governed by an MIT license that can be found in the LICENSE
33
// file.
44

5+
import ./mem;
6+
57
var digit_pairs := "0010203040506070809001112131415161718191021222324252627"
68
"28292031323334353637383930414243444546474849405152535455565758595061626364656667"
79
"68696071727374757677787970818283848586878889809192939495969798999";
@@ -54,7 +56,7 @@ extend int32 < Stringable {
5456
}
5557
unsafe {
5658
mut index := @as(uint, max);
57-
buf := @as([&]mut uint8, mem_alloc(index + 1));
59+
buf := @as([&]mut uint8, mem.raw_alloc(index + 1));
5860
buf[index] = 0;
5961
index -= 1;
6062

@@ -82,7 +84,7 @@ extend int32 < Stringable {
8284
}
8385

8486
diff := @as(uint, max) - index;
85-
mem_move(buf, @ptr_add(buf, index), diff + 1);
87+
mem.move(buf, @ptr_add(buf, index), diff + 1);
8688
return string.from_raw_with_len(buf, diff);
8789
}
8890
}
@@ -114,7 +116,7 @@ extend int64 < Stringable {
114116
unsafe {
115117
max := 20;
116118
mut index := @as(uint, max);
117-
buf := @as([&]mut uint8, mem_alloc(index + 1));
119+
buf := @as([&]mut uint8, mem.raw_alloc(index + 1));
118120
buf[index] = 0;
119121
index -= 1;
120122

@@ -142,7 +144,7 @@ extend int64 < Stringable {
142144
}
143145

144146
diff := @as(uint, max) - index;
145-
mem_move(buf, @ptr_add(buf, index), diff + 1);
147+
mem.move(buf, @ptr_add(buf, index), diff + 1);
146148
return string.from_raw_with_len(buf, diff);
147149
}
148150
}

0 commit comments

Comments
 (0)