From 7bdd8b7ce2396a5bb9616cb50fd2c23fa83b8b2f Mon Sep 17 00:00:00 2001
From: Jakob Rath <git@jakobrath.eu>
Date: Fri, 15 Nov 2013 14:26:00 +0100
Subject: [PATCH] Free parse result.

---
 src/bindings/ruby/lib/hammer/internal.rb | 2 +-
 src/bindings/ruby/lib/hammer/parser.rb   | 4 +++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/bindings/ruby/lib/hammer/internal.rb b/src/bindings/ruby/lib/hammer/internal.rb
index 0083ebd9..4fadb500 100644
--- a/src/bindings/ruby/lib/hammer/internal.rb
+++ b/src/bindings/ruby/lib/hammer/internal.rb
@@ -53,7 +53,7 @@ module Hammer
     # h_bind_indirect
 
     # free the parse result
-    # h_parse_result_free
+    attach_function :h_parse_result_free, [:pointer], :void
 
     # TODO: Does the HParser* need to be freed?
   end
diff --git a/src/bindings/ruby/lib/hammer/parser.rb b/src/bindings/ruby/lib/hammer/parser.rb
index 5d1e8e57..79e03705 100644
--- a/src/bindings/ruby/lib/hammer/parser.rb
+++ b/src/bindings/ruby/lib/hammer/parser.rb
@@ -9,8 +9,10 @@ module Hammer
     def parse(data)
       raise RuntimeError, '@h_parser is nil' if @h_parser.nil?
       raise ArgumentError, 'expecting a String' unless data.is_a? String # TODO: Not needed, FFI checks that.
-      result = Hammer::Internal.h_parse(@h_parser, data, data.length);
+      result = Hammer::Internal.h_parse(@h_parser, data, data.length)
       # TODO: Do something with the data
+      #       (wrap in garbage-collected object, call h_parse_result_free when destroyed by GC)
+      Hammer::Internal.h_parse_result_free(result)
       !result.null?
     end
 
-- 
GitLab