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