lib/ffi/clang/index.rb in ffi-clang-0.1.0 vs lib/ffi/clang/index.rb in ffi-clang-0.1.1
- old
+ new
@@ -30,14 +30,15 @@
def self.release(pointer)
Lib.dispose_index_debug(pointer)
end
- def parse_translation_unit(source_file, command_line_args = nil, opts = {})
+ def parse_translation_unit(source_file, command_line_args = nil, unsaved = [], opts = {})
command_line_args = Array(command_line_args)
+ unsaved_files = unsaved_pointer_from(unsaved)
- translation_unit_pointer = Lib.parse_translation_unit(self, source_file, args_pointer_from(command_line_args), command_line_args.size, nil, 0, options_bitmask_from(opts))
+ translation_unit_pointer = Lib.parse_translation_unit(self, source_file, args_pointer_from(command_line_args), command_line_args.size, unsaved_files, unsaved.length, options_bitmask_from(opts))
raise Error, "error parsing #{source_file.inspect}" unless translation_unit_pointer
TranslationUnit.new translation_unit_pointer
end
@@ -57,8 +58,22 @@
def options_bitmask_from(opts)
Lib.bitmask_from Lib::TranslationUnitFlags, opts
end
+ def unsaved_pointer_from(unsaved)
+ return nil if unsaved.length == 0
+
+ vec = MemoryPointer.new(Lib::CXUnsavedFile, unsaved.length)
+
+ unsaved.each_with_index do |file, i|
+ uf = Lib::CXUnsavedFile.new(vec + i * Lib::CXUnsavedFile.size)
+ uf[:filename] = MemoryPointer.from_string(file.filename)
+ uf[:contents] = MemoryPointer.from_string(file.contents)
+ uf[:length] = file.contents.length
+ end
+
+ vec
+ end
end
end
end