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