Clean up stack shuffling in libc
parent
9a69ee2f0a
commit
abd4a82f9f
|
@ -52,13 +52,13 @@ M: realloc-error summary
|
||||||
|
|
||||||
<PRIVATE
|
<PRIVATE
|
||||||
|
|
||||||
: add-malloc ( alien -- )
|
: add-malloc ( alien -- alien )
|
||||||
mallocs conjoin ;
|
dup mallocs conjoin ;
|
||||||
|
|
||||||
: delete-malloc ( alien -- )
|
: delete-malloc ( alien -- )
|
||||||
[
|
[
|
||||||
mallocs delete-at*
|
mallocs delete-at*
|
||||||
[ double-free ] unless drop
|
[ drop ] [ double-free ] if
|
||||||
] when* ;
|
] when* ;
|
||||||
|
|
||||||
: malloc-exists? ( alien -- ? )
|
: malloc-exists? ( alien -- ? )
|
||||||
|
@ -67,22 +67,18 @@ M: realloc-error summary
|
||||||
PRIVATE>
|
PRIVATE>
|
||||||
|
|
||||||
: malloc ( size -- alien )
|
: malloc ( size -- alien )
|
||||||
(malloc) check-ptr
|
(malloc) check-ptr add-malloc ;
|
||||||
dup add-malloc ;
|
|
||||||
|
|
||||||
: calloc ( count size -- alien )
|
: calloc ( count size -- alien )
|
||||||
(calloc) check-ptr
|
(calloc) check-ptr add-malloc ;
|
||||||
dup add-malloc ;
|
|
||||||
|
|
||||||
: realloc ( alien size -- newalien )
|
: realloc ( alien size -- newalien )
|
||||||
over malloc-exists? [ realloc-error ] unless
|
over malloc-exists? [ realloc-error ] unless
|
||||||
dupd (realloc) check-ptr
|
[ drop ] [ (realloc) check-ptr ] 2bi
|
||||||
swap delete-malloc
|
[ delete-malloc ] [ add-malloc ] bi* ;
|
||||||
dup add-malloc ;
|
|
||||||
|
|
||||||
: free ( alien -- )
|
: free ( alien -- )
|
||||||
dup delete-malloc
|
[ delete-malloc ] [ (free) ] bi ;
|
||||||
(free) ;
|
|
||||||
|
|
||||||
: memcpy ( dst src size -- )
|
: memcpy ( dst src size -- )
|
||||||
"void" "libc" "memcpy" { "void*" "void*" "ulong" } alien-invoke ;
|
"void" "libc" "memcpy" { "void*" "void*" "ulong" } alien-invoke ;
|
||||||
|
|
Loading…
Reference in New Issue