@@ -25,7 +25,7 @@ export class HEADER {
25
25
/** Magic value used to validate common runtime headers. */
26
26
@inline export const HEADER_MAGIC : u32 = 0xA55E4B17 ;
27
27
28
- /** Aligns an allocation to actual block size. */
28
+ /** Aligns an allocation to actual block size. Primarily targets TLSF. */
29
29
export function ALIGN ( payloadSize : usize ) : usize {
30
30
// round up to power of 2, e.g. with HEADER_SIZE=8:
31
31
// 0 -> 2^3 = 8
@@ -36,14 +36,6 @@ export function ALIGN(payloadSize: usize): usize {
36
36
return < usize > 1 << < usize > ( < u32 > 32 - clz < u32 > ( payloadSize + HEADER_SIZE - 1 ) ) ;
37
37
}
38
38
39
- /** Gets to the common runtime header of the specified reference. */
40
- export function UNREF ( ref : usize ) : HEADER {
41
- assert ( ref >= HEAP_BASE + HEADER_SIZE ) ; // must be a heap object
42
- var header = changetype < HEADER > ( ref - HEADER_SIZE ) ;
43
- assert ( header . classId == HEADER_MAGIC ) ; // must be unregistered
44
- return header ;
45
- }
46
-
47
39
/** Allocates a new object and returns a pointer to its payload. */
48
40
export function ALLOC ( payloadSize : u32 ) : usize {
49
41
var header = changetype < HEADER > ( memory . allocate ( ALIGN ( payloadSize ) ) ) ;
@@ -60,7 +52,7 @@ export function ALLOC(payloadSize: u32): usize {
60
52
61
53
/** Reallocates an object if necessary. Returns a pointer to its (moved) payload. */
62
54
export function REALLOC ( ref : usize , newPayloadSize : u32 ) : usize {
63
- var header = UNREF ( ref ) ;
55
+ var header = changetype < HEADER > ( ref - HEADER_SIZE ) ;
64
56
var payloadSize = header . payloadSize ;
65
57
if ( payloadSize < newPayloadSize ) {
66
58
let newAlignedSize = ALIGN ( newPayloadSize ) ;
@@ -93,13 +85,17 @@ export function REALLOC(ref: usize, newPayloadSize: u32): usize {
93
85
94
86
/** Frees an object. Must not have been registered with GC yet. */
95
87
export function FREE ( ref : usize ) : void {
96
- var header = UNREF ( ref ) ;
88
+ assert ( ref >= HEAP_BASE + HEADER_SIZE ) ; // must be a heap object
89
+ var header = changetype < HEADER > ( ref - HEADER_SIZE ) ;
90
+ assert ( header . classId == HEADER_MAGIC ) ; // must be unregistered
97
91
memory . free ( changetype < usize > ( header ) ) ;
98
92
}
99
93
100
94
/** Registers a managed object with GC. Cannot be changed anymore afterwards. */
101
95
export function REGISTER < T > ( ref : usize , parentRef : usize ) : void {
102
- var header = UNREF ( ref ) ;
96
+ assert ( ref >= HEAP_BASE + HEADER_SIZE ) ; // must be a heap object
97
+ var header = changetype < HEADER > ( ref - HEADER_SIZE ) ;
98
+ assert ( header . classId == HEADER_MAGIC ) ; // must be unregistered
103
99
header . classId = __rt_classid < T > ( ) ;
104
100
if ( GC ) __REGISTER_IMPL ( ref , parentRef ) ; // tslint:disable-line
105
101
}
0 commit comments