diff --git a/src/bindings/ruby/lib/hammer/internal.rb b/src/bindings/ruby/lib/hammer/internal.rb index 0083ebd916a6012125286b3221369665589abea8..4fadb500a930bee0e36a9f4bd68f3723b4dbfb75 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 5d1e8e57c1a0c6704608b4a9336fb1e624d6b48f..79e03705528d0d20a4fb35df4281f6dbb6220b81 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