From: Duncan C. <dun...@us...> - 2005-12-08 17:31:05
|
Update of /cvsroot/gtk2hs/gtk2hs/sourceview/Graphics/UI/Gtk/SourceView In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3778/sourceview/Graphics/UI/Gtk/SourceView Modified Files: SourceTag.chs Log Message: Tidy up some low level marshaling stuff, eliminating the use of Foreign.free. FFI.hs.pp: We should almost certainly not be using the standard free function anywhere in the glib or gtk bindings, so we do not re-export it from this module. It is not gueranteed by the Haskell FFI spec that free calls the C free() function. It is also not guaranteed that g_free() simply calls the stanard C free() function. UTFString.hs: call g_free() rather than Haskell free for freeing glib strings (which of course were allocated with g_new()). Pixbuf.chs.pp: use withUTFStringArray and withUTFStringArray0 rather than ad-hoc implementations. StockItems.hsc: use readUTFString rather than peekUTFString + g_free(). GList.chs: add withGSList function. SourceTag.chs: use withGSList and withUTFStrings rather than the more complex exising solution. Index: SourceTag.chs =================================================================== RCS file: /cvsroot/gtk2hs/gtk2hs/sourceview/Graphics/UI/Gtk/SourceView/SourceTag.chs,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- SourceTag.chs 26 Nov 2005 16:00:22 -0000 1.4 +++ SourceTag.chs 8 Dec 2005 17:30:55 -0000 1.5 @@ -42,7 +42,7 @@ import System.Glib.FFI import System.Glib.UTFString -import System.Glib.GList (toGSList, fromGSList) +import System.Glib.GList (withGSList) import System.Glib.GObject (constructNewGObject) {#import Graphics.UI.Gtk.Types#} {#import Graphics.UI.Gtk.SourceView.Types#} @@ -83,22 +83,18 @@ matchEmptyStringAtBeginning matchEmptyStringAtEnd beginningRegex - endRegex = do - keywordPtrs <- mapM newUTFString keywords - keywordList <- toGSList keywordPtrs - obj <- constructNewGObject mkSourceTag $ liftM castPtr $ - withCString id $ \strPtr1 -> - withCString name $ \strPtr2 -> - withCString beginningRegex $ \strPtr3 -> - withCString endRegex $ \strPtr4 -> {#call unsafe keyword_list_tag_new#} - strPtr1 strPtr2 keywordList (fromBool caseSensitive) - (fromBool matchEmptyStringAtBeginning) (fromBool matchEmptyStringAtEnd) - strPtr3 strPtr4 - -- destory the list - fromGSList keywordList - -- destory the elements - mapM_ free keywordPtrs - return obj + endRegex = + withUTFStrings keywords $ \keywordPtrs -> + withGSList keywordPtrs $ \keywordList -> + constructNewGObject mkSourceTag $ liftM castPtr $ + withCString id $ \idPtr -> + withCString name $ \namePtr -> + withCString beginningRegex $ \beginPtr -> + withCString endRegex $ \endPtr -> + {# call unsafe keyword_list_tag_new #} + idPtr namePtr keywordList (fromBool caseSensitive) + (fromBool matchEmptyStringAtBeginning) (fromBool matchEmptyStringAtEnd) + beginPtr endPtr -- | Create a new 'SourceTag' -- |