Class: FFI::Clang::TranslationUnit

Inherits:
AutoPointer
  • Object
show all
Defined in:
lib/ffi/clang/translation_unit.rb

Defined Under Namespace

Classes: ResourceUsage

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(pointer, index) ⇒ TranslationUnit

Returns a new instance of TranslationUnit.



22
23
24
25
# File 'lib/ffi/clang/translation_unit.rb', line 22

def initialize(pointer, index)
	super pointer
	@index = index
end

Class Method Details

.default_editing_translation_unit_optionsObject



31
32
33
34
# File 'lib/ffi/clang/translation_unit.rb', line 31

def self.default_editing_translation_unit_options
	bitmask = Lib.default_editing_translation_unit_options
	Lib.opts_from Lib::TranslationUnitFlags, bitmask
end

.release(pointer) ⇒ Object



27
28
29
# File 'lib/ffi/clang/translation_unit.rb', line 27

def self.release(pointer)
	Lib.dispose_translation_unit(pointer)
end

Instance Method Details

#code_complete(source_file, line, column, unsaved = [], opts = nil) ⇒ Object



107
108
109
110
111
112
113
# File 'lib/ffi/clang/translation_unit.rb', line 107

def code_complete(source_file, line, column, unsaved = [], opts = nil)
	opts = CodeCompletion.default_code_completion_options if opts.nil?
	unsaved_files = UnsavedFile.unsaved_pointer_from(unsaved)
	option_bitmask = Lib.bitmask_from(Lib::CodeCompleteFlags, opts)
	ptr = Lib.code_complete_at(self, source_file, line, column, unsaved_files, unsaved.length, option_bitmask)
	CodeCompletion::Results.new ptr, self
end

#cursor(location = nil) ⇒ Object



68
69
70
71
72
73
74
# File 'lib/ffi/clang/translation_unit.rb', line 68

def cursor(location = nil)
	if location.nil?
		Cursor.new Lib.get_translation_unit_cursor(self), self
	else
		Cursor.new Lib.get_cursor(self, location.location), self
	end
end

#default_reparse_optionsObject



48
49
50
51
# File 'lib/ffi/clang/translation_unit.rb', line 48

def default_reparse_options
	bitmask = Lib.default_save_options(self)
	Lib.opts_from Lib::ReparseFlags, bitmask
end

#default_save_optionsObject



36
37
38
39
# File 'lib/ffi/clang/translation_unit.rb', line 36

def default_save_options
	bitmask = Lib.default_save_options(self)
	Lib.opts_from Lib::SaveTranslationUnitFlags, bitmask
end

#diagnosticsObject



60
61
62
63
64
65
66
# File 'lib/ffi/clang/translation_unit.rb', line 60

def diagnostics
	n = Lib.get_num_diagnostics(self)

	n.times.map do |i|
		Diagnostic.new(self, Lib.get_diagnostic(self, i))
	end
end

#file(file_name = nil) ⇒ Object



84
85
86
87
88
89
90
# File 'lib/ffi/clang/translation_unit.rb', line 84

def file(file_name = nil)
	if file_name.nil?
		File.new(Lib.get_file(self, spelling), self)
	else
		File.new(Lib.get_file(self, file_name), self)
	end
end

#inclusions(&block) ⇒ Object



115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/ffi/clang/translation_unit.rb', line 115

def inclusions(&block)
	adapter = Proc.new do |included_file, inclusion_stack, include_len, unused|
		file = Lib.extract_string Lib.get_file_name(included_file)
		cur_ptr = inclusion_stack
		inclusions = []
		include_len.times {
			inclusions << SourceLocation.new(Lib::CXSourceLocation.new(cur_ptr))
			cur_ptr += Lib::CXSourceLocation.size
		}
		block.call file, inclusions
	end
	
	Lib.get_inclusions(self, adapter, nil)
end

#location(file, line, column) ⇒ Object



76
77
78
# File 'lib/ffi/clang/translation_unit.rb', line 76

def location(file, line, column)
	ExpansionLocation.new Lib.get_location(self, file, line, column)
end

#location_offset(file, offset) ⇒ Object



80
81
82
# File 'lib/ffi/clang/translation_unit.rb', line 80

def location_offset(file, offset)
	ExpansionLocation.new Lib.get_location_offset(self, file, offset)
end

#reparse(unsaved = [], opts = {}) ⇒ Object



53
54
55
56
57
58
# File 'lib/ffi/clang/translation_unit.rb', line 53

def reparse(unsaved = [], opts = {})
	unsaved_files = UnsavedFile.unsaved_pointer_from(unsaved)
	if Lib.reparse_translation_unit(self, unsaved.size, unsaved_files, 0) != 0
		raise Error, "reparse error"
	end
end

#resource_usageObject



96
97
98
# File 'lib/ffi/clang/translation_unit.rb', line 96

def resource_usage
	FFI::Clang::TranslationUnit::ResourceUsage.new Lib.resource_usage(self)
end

#save(filename, opts = {}) ⇒ Object

Raises:



41
42
43
44
45
46
# File 'lib/ffi/clang/translation_unit.rb', line 41

def save(filename, opts = {})
	ret = Lib.save_translation_unit(self, filename, 0)
	sym = Lib::SaveError[ret]
	raise Error, "unknown return values: #{ret} #{sym.inspect}" unless sym
	raise Error, "save error: #{sym.inspect}, filename: #{filename}" if sym != :none
end

#spellingObject



92
93
94
# File 'lib/ffi/clang/translation_unit.rb', line 92

def spelling
	Lib.extract_string Lib.get_translation_unit_spelling(self)
end

#tokenize(range) ⇒ Object



100
101
102
103
104
105
# File 'lib/ffi/clang/translation_unit.rb', line 100

def tokenize(range)
	token_ptr = MemoryPointer.new :pointer
	uint_ptr = MemoryPointer.new :uint
	Lib.tokenize(self, range.range, token_ptr, uint_ptr)
	Tokens.new(token_ptr.get_pointer(0), uint_ptr.get_uint(0), self)
end