Polyfill move_memory and set_memory and remove Heap

This commit is contained in:
dcodeIO
2018-01-14 02:30:20 +01:00
parent 2c009c67d3
commit ad469ca445
33 changed files with 8529 additions and 5057 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
var arr = changetype<i32[]>(Heap.allocate(sizeof<usize>() + 2 * sizeof<i32>()));
var arr = changetype<i32[]>(allocate_memory(sizeof<usize>() + 2 * sizeof<i32>()));
assert(arr.length == 0);
assert(arr.__capacity == 0);
@ -36,7 +36,7 @@ assert(arr[0] == 43);
assert(arr[1] == 44);
assert(arr[2] == 45);
arr.unshift(42); // see FIXME in std:array
arr.unshift(42);
assert(arr.length == 4);
assert(arr.__capacity == 4);

File diff suppressed because it is too large Load Diff

View File

@ -8,6 +8,13 @@
(export "memory" (memory $0))
(start $start)
(func $std:array/CArray#__get (; 0 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(if
(i32.lt_s
(get_local $1)
(i32.const 0)
)
(unreachable)
)
(i32.load
(i32.add
(get_local $0)
@ -19,6 +26,13 @@
)
)
(func $std:array/CArray#__set (; 1 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32)
(if
(i32.lt_s
(get_local $1)
(i32.const 0)
)
(unreachable)
)
(i32.store
(i32.add
(get_local $0)

View File

@ -8,6 +8,13 @@
(export "memory" (memory $0))
(start $start)
(func $std:array/CArray#__get (; 0 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(if
(i32.lt_s
(get_local $1)
(i32.const 0)
)
(unreachable)
)
(return
(i32.load
(i32.add
@ -21,6 +28,13 @@
)
)
(func $std:array/CArray#__set (; 1 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32)
(if
(i32.lt_s
(get_local $1)
(i32.const 0)
)
(unreachable)
)
(i32.store
(i32.add
(get_local $0)
@ -247,16 +261,17 @@
GLOBAL: std:heap/ALIGN_SIZE
GLOBAL: std:heap/ALIGN_MASK
GLOBAL: std:heap/HEAP_OFFSET
CLASS_PROTOTYPE: std:heap/Heap
CLASS_PROTOTYPE: Heap
PROPERTY: std:heap/Heap.used
PROPERTY: std:heap/Heap.free
PROPERTY: std:heap/Heap.size
FUNCTION_PROTOTYPE: std:heap/Heap.allocate
FUNCTION_PROTOTYPE: std:heap/Heap.dispose
FUNCTION_PROTOTYPE: std:heap/Heap.copy
FUNCTION_PROTOTYPE: std:heap/Heap.fill
FUNCTION_PROTOTYPE: std:heap/Heap.compare
FUNCTION_PROTOTYPE: std:heap/allocate_memory
FUNCTION_PROTOTYPE: allocate_memory
FUNCTION_PROTOTYPE: std:heap/free_memory
FUNCTION_PROTOTYPE: free_memory
FUNCTION_PROTOTYPE: std:heap/copy_memory
FUNCTION_PROTOTYPE: std:heap/move_memory
FUNCTION_PROTOTYPE: move_memory
FUNCTION_PROTOTYPE: std:heap/set_memory
FUNCTION_PROTOTYPE: set_memory
FUNCTION_PROTOTYPE: std:heap/compare_memory
FUNCTION_PROTOTYPE: compare_memory
CLASS_PROTOTYPE: std:map/Map
CLASS_PROTOTYPE: Map
CLASS_PROTOTYPE: std:regexp/RegExp
@ -277,7 +292,11 @@
CLASS_PROTOTYPE: std:array/CArray
CLASS_PROTOTYPE: std:error/Error
CLASS_PROTOTYPE: std:error/RangeError
CLASS_PROTOTYPE: std:heap/Heap
FUNCTION_PROTOTYPE: std:heap/allocate_memory
FUNCTION_PROTOTYPE: std:heap/free_memory
FUNCTION_PROTOTYPE: std:heap/move_memory
FUNCTION_PROTOTYPE: std:heap/set_memory
FUNCTION_PROTOTYPE: std:heap/compare_memory
CLASS_PROTOTYPE: std:map/Map
CLASS_PROTOTYPE: std:regexp/RegExp
CLASS_PROTOTYPE: std:set/Set

File diff suppressed because it is too large Load Diff

View File

@ -1,21 +1,21 @@
const size: usize = 42;
let ptr1: usize = Heap.allocate(size);
let ptr2: usize = Heap.allocate(size);
let ptr1: usize = allocate_memory(size);
let ptr2: usize = allocate_memory(size);
assert(ptr1 != ptr2);
Heap.fill(ptr1, 0x12, size);
set_memory(ptr1, 0x12, size);
let i: usize;
for (i = 0; i < size; ++i)
assert(load<u8>(ptr1 + i) == 0x12);
Heap.copy(ptr2, ptr1, size);
move_memory(ptr2, ptr1, size);
for (i = 0; i < size; ++i)
assert(load<u8>(ptr2 + i) == 0x12);
assert(Heap.compare(ptr1, ptr2, size) == 0);
assert(compare_memory(ptr1, ptr2, size) == 0);
Heap.dispose(ptr1);
Heap.dispose(ptr2);
free_memory(ptr1);
free_memory(ptr2);

File diff suppressed because it is too large Load Diff