diff options
author | max99x <max99x@gmail.com> | 2011-08-18 09:15:08 +0300 |
---|---|---|
committer | max99x <max99x@gmail.com> | 2011-08-18 09:15:08 +0300 |
commit | 89df6e92fa856eb5dce5a4becac9506f03327167 (patch) | |
tree | 3eb7620d2b55e6138ab4e7d7d6717a37cee855aa | |
parent | 25630c272ddd8d260f4bd8d60db5f2b01b6a00e8 (diff) |
Optimized strdup(), which is a CPython bottleneck.
-rw-r--r-- | src/library.js | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/library.js b/src/library.js index c9a6ce38..1d3be1ee 100644 --- a/src/library.js +++ b/src/library.js @@ -3668,7 +3668,14 @@ LibraryManager.library = { }, strdup: function(ptr) { - return allocate(String_copy(ptr, true), 'i8', ALLOC_NORMAL); + var len = String_len(ptr); + var end = ptr + len; + var newStr = _malloc(len + 1); + for (var src = ptr, dst = newStr; src < end; src++, dst++) { + {{{ makeSetValue('dst', 0, 'src', 'i8') }}} + } + {{{ makeSetValue('dst', 0, 0, 'i8') }}} + return newStr; }, strpbrk: function(ptr1, ptr2) { |