diff options
author | Alon Zakai <azakai@mozilla.com> | 2010-11-20 11:45:36 -0800 |
---|---|---|
committer | Alon Zakai <azakai@mozilla.com> | 2010-11-20 11:45:36 -0800 |
commit | 4a4472588be087687985695f29a2ca2e02f9648e (patch) | |
tree | d4b490147adee21ea5f2ecf027f4c256c44b910c /src | |
parent | 6b4d1efe357c8f983b9ec1d0975bb809e37636bc (diff) |
simple realloc implementation
Diffstat (limited to 'src')
-rw-r--r-- | src/library.js | 15 | ||||
-rw-r--r-- | src/preamble.js | 7 |
2 files changed, 16 insertions, 6 deletions
diff --git a/src/library.js b/src/library.js index 6567ebab..b7c9c157 100644 --- a/src/library.js +++ b/src/library.js @@ -39,6 +39,21 @@ var Library = { throw 'ABORT: ' + code + ', at ' + (new Error().stack); }, + realloc: function(ptr, size) { + // Very simple, inefficient implementation - if you use a real malloc, best to use + // a real realloc with it + if (!size) { + if (ptr) _free(ptr); + return 0; + } + var ret = _malloc(size); + if (ptr) { + _memcpy(ret, ptr, size); // might be some invalid reads + _free(ptr); + } + return ret; + }, + // string.h strspn: function(pstr, pset) { diff --git a/src/preamble.js b/src/preamble.js index 133e2669..47278f83 100644 --- a/src/preamble.js +++ b/src/preamble.js @@ -301,7 +301,6 @@ function _atoi(s) { } function _llvm_memcpy_i32(dest, src, num, idunno) { -// XXX hardcoded ptr impl for (var i = 0; i < num; i++) { #if SAFE_HEAP SAFE_HEAP_STORE(dest + i, HEAP[src + i]); @@ -314,12 +313,8 @@ function _llvm_memcpy_i32(dest, src, num, idunno) { #endif #endif } -// dest = Pointer_niceify(dest); -// src = Pointer_niceify(src); -// dest.slab = src.slab.slice(src.pos); } -_llvm_memcpy_i64 = _llvm_memcpy_i32; -_llvm_memcpy_p0i8_p0i8_i32 = _llvm_memcpy_i32; +_memcpy = _llvm_memcpy_i64 = _llvm_memcpy_p0i8_p0i8_i32 = _llvm_memcpy_i32; function llvm_memset_i32(ptr, value, num) { for (var i = 0; i < num; i++) { |