diff --git a/lib/ffi_generator/clang/cursor.rb b/lib/ffi_generator/clang/cursor.rb index 2d79ac0..df52a5b 100644 --- a/lib/ffi_generator/clang/cursor.rb +++ b/lib/ffi_generator/clang/cursor.rb @@ -1,3 +1,5 @@ +require 'zlib' + module FFIGenerate module Clang @@ -84,7 +86,15 @@ def result_type end def spelling - String.from_c(C.get_cursor_spelling(@c)).to_s + spelling = String.from_c(C.get_cursor_spelling(@c)).to_s + # Fix names for unnamed items + if [:struct_decl, :union_decl, :enum_decl].include?(kind) && spelling.match?(/(struct|union|enum) \(unnamed at/) + usr = String.from_c(C.get_cursor_usr(@c)).to_s + prefix = usr.split('@')[2] + prefix = 'unnamed' unless prefix + spelling = prefix + Zlib::crc32(usr).to_s + end + spelling end def ==(other)