]> gitweb.factorcode.org Git - factor.git/commitdiff
Remove with-malloc, use destructors instead
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Wed, 3 Dec 2008 03:51:21 +0000 (21:51 -0600)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Wed, 3 Dec 2008 03:51:21 +0000 (21:51 -0600)
basis/alien/c-types/c-types-docs.factor
basis/libc/libc-docs.factor
basis/libc/libc.factor
basis/windows/com/com.factor
extra/opengl/shaders/shaders.factor

index 102d7b9612af0cc7963779c34d2a924613cbf1d8..1ec9a82169c00bc5ff7dc0472b9bdad975e423a9 100644 (file)
@@ -220,9 +220,7 @@ $nl
 "You can copy a range of bytes from memory into a byte array:"
 { $subsection memory>byte-array }
 "You can copy a byte array to memory unsafely:"
-{ $subsection byte-array>memory }
-"A wrapper for temporarily allocating a block of memory:"
-{ $subsection with-malloc } ;
+{ $subsection byte-array>memory } ;
 
 ARTICLE: "c-data" "Passing data between Factor and C"
 "Two defining characteristics of Factor are dynamic typing and automatic memory management, which are somewhat incompatible with the machine-level data model exposed by C. Factor's C library interface defines its own set of C data types, distinct from Factor language types, together with automatic conversion between Factor values and C types. For example, C integer types must be declared and are fixed-width, whereas Factor supports arbitrary-precision integers."
index 37a3b7068fd20a5262aabe83b3892171ba5fe4d7..b89f4174bfa3776a4a8e7c8fbcee053f062c04db 100644 (file)
@@ -32,10 +32,6 @@ HELP: free
 { $values { "alien" c-ptr } }
 { $description "Deallocates a block of memory allocated by " { $link malloc } ", " { $link calloc } " or " { $link realloc } "." } ;
 
-HELP: with-malloc
-{ $values { "size" "a positive integer" } { "quot" { $quotation "( c-ptr -- )" } } }
-{ $description "Allocates a zeroed block of " { $snippet "n" } " bytes and passes it to the quotation. When the quotation returns, the block is freed." } ;
-
 HELP: &free
 { $values { "alien" c-ptr } }
 { $description "Marks the block of memory for unconditional deallocation at the end of the current " { $link with-destructors } " scope." } ;
index cf4e2fb72299a4861b3f4d2240cfa3bf5f8eec77..c4d351e6a0fea9436c29bb0d7c4bd0a454b47774 100644 (file)
@@ -87,9 +87,6 @@ PRIVATE>
 : memcpy ( dst src size -- )
     "void" "libc" "memcpy" { "void*" "void*" "ulong" } alien-invoke ;
 
-: with-malloc ( size quot -- )
-    swap 1 calloc [ swap keep ] [ free ] [ ] cleanup ; inline
-
 : strlen ( alien -- len )
     "size_t" "libc" "strlen" { "char*" } alien-invoke ;
 
index 9649de6402f214a1c2572430152bd0165a9852e8..0e1a907ca76d0da1038738f74435ddbef1f57f37 100644 (file)
@@ -28,9 +28,10 @@ COM-INTERFACE: IDropTarget IUnknown {00000122-0000-0000-C000-000000000046}
     HRESULT Drop ( IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect ) ;\r
 \r
 : com-query-interface ( interface iid -- interface' )\r
-    "void*" heap-size [\r
+    [\r
+        "void*" malloc-object &free\r
         [ IUnknown::QueryInterface ole32-error ] keep *void*\r
-    ] with-malloc ;\r
+    ] with-destructors ;\r
 \r
 : com-add-ref ( interface -- interface )\r
      [ IUnknown::AddRef drop ] keep ; inline\r
index 93ca6b32cc8dca9bbad3815449eef4875c786dda..a88ea6de4dae48315c3b275f2d8c7b54c51166fd 100755 (executable)
@@ -44,9 +44,10 @@ IN: opengl.shaders
 
 : gl-shader-info-log ( shader -- log )
     dup gl-shader-info-log-length dup [
+        1 calloc &free
         [ 0 <int> swap glGetShaderInfoLog ] keep
         ascii alien>string
-    ] with-malloc ;
+    ] with-destructors ;
 
 : check-gl-shader ( shader -- shader )
     dup gl-shader-ok? [ dup gl-shader-info-log throw ] unless ;
@@ -79,9 +80,10 @@ PREDICATE: fragment-shader < gl-shader (fragment-shader?) ;
 
 : gl-program-info-log ( program -- log )
     dup gl-program-info-log-length dup [
+        1 calloc &free
         [ 0 <int> swap glGetProgramInfoLog ] keep
         ascii alien>string
-    ] with-malloc ;
+    ] with-destructors ;
 
 : check-gl-program ( program -- program )
     dup gl-program-ok? [ dup gl-program-info-log throw ] unless ;