Skip to content

Commit 4474a90

Browse files
author
Eric Holk
committed
---
yaml --- r: 3706 b: refs/heads/master c: 5d9a5b7 h: refs/heads/master v: v3
1 parent 80205fc commit 4474a90

File tree

4 files changed

+35
-12
lines changed

4 files changed

+35
-12
lines changed

[refs]

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 8acadb17c2d679291aa94e94af8cc96513cab830
2+
refs/heads/master: 5d9a5b7d556f6573508c83242a0e7b7795d2c2dd

trunk/src/rt/memory.h

+20-11
Original file line numberDiff line numberDiff line change
@@ -2,33 +2,42 @@
22
#ifndef MEMORY_H
33
#define MEMORY_H
44

5-
inline void *operator new(size_t size, void *mem) {
6-
return mem;
5+
#if 0
6+
inline void operator delete(void *mem, rust_task *task) {
7+
task->free(mem);
8+
return;
79
}
10+
#endif
811

9-
inline void *operator new(size_t size, rust_kernel *kernel) {
10-
return kernel->malloc(size);
12+
// FIXME: It would be really nice to be able to get rid of this.
13+
inline void *operator new[](size_t size, rust_task *task) {
14+
return task->malloc(size);
1115
}
1216

13-
inline void *operator new(size_t size, rust_task *task) {
17+
template <typename T>
18+
inline void *task_owned<T>::operator new(size_t size, rust_task *task) {
1419
return task->malloc(size);
1520
}
1621

17-
inline void *operator new[](size_t size, rust_task *task) {
22+
template <typename T>
23+
inline void *task_owned<T>::operator new[](size_t size, rust_task *task) {
1824
return task->malloc(size);
1925
}
2026

21-
inline void *operator new(size_t size, rust_task &task) {
27+
template <typename T>
28+
inline void *task_owned<T>::operator new(size_t size, rust_task &task) {
2229
return task.malloc(size);
2330
}
2431

25-
inline void *operator new[](size_t size, rust_task &task) {
32+
template <typename T>
33+
inline void *task_owned<T>::operator new[](size_t size, rust_task &task) {
2634
return task.malloc(size);
2735
}
2836

29-
inline void operator delete(void *mem, rust_task *task) {
30-
task->free(mem);
31-
return;
37+
template <typename T>
38+
inline void *kernel_owned<T>::operator new(size_t size, rust_kernel *kernel) {
39+
return kernel->malloc(size);
3240
}
3341

42+
3443
#endif /* MEMORY_H */

trunk/src/rt/rust_internal.h

+10
Original file line numberDiff line numberDiff line change
@@ -115,12 +115,22 @@ template <typename T> struct rc_base {
115115
};
116116

117117
template <typename T> struct task_owned {
118+
inline void *operator new(size_t size, rust_task *task);
119+
120+
inline void *operator new[](size_t size, rust_task *task);
121+
122+
inline void *operator new(size_t size, rust_task &task);
123+
124+
inline void *operator new[](size_t size, rust_task &task);
125+
118126
void operator delete(void *ptr) {
119127
((T *)ptr)->task->free(ptr);
120128
}
121129
};
122130

123131
template <typename T> struct kernel_owned {
132+
inline void *operator new(size_t size, rust_kernel *kernel);
133+
124134
void operator delete(void *ptr) {
125135
((T *)ptr)->kernel->free(ptr);
126136
}

trunk/src/rt/rust_util.h

+4
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,10 @@ rust_vec : public rc_base<rust_vec>
184184
memcpy(&data[0], d, fill);
185185
}
186186
~rust_vec() {}
187+
188+
inline void *operator new(size_t size, void *mem) {
189+
return mem;
190+
}
187191
};
188192

189193
// Rust types vec and str look identical from our perspective.

0 commit comments

Comments
 (0)