lib/dub/function.rb in dub-0.5.1 vs lib/dub/function.rb in dub-0.6.0

- old
+ new

@@ -9,17 +9,18 @@ def initialize(parent, name, xml, prefix = '', overloaded_index = nil) @parent, @name = parent, name @xml, @prefix, @overloaded_index = xml, prefix, overloaded_index parse_xml + parse_template_params end - + def set_as_constructor @return_value = Argument.new(self, (Hpricot::XML("<type>#{name} *</type>")/'')) @is_constructor = true end - + def bind(generator) @gen = generator.function_generator end def to_s @@ -40,19 +41,31 @@ def constructor? @is_constructor end + def static? + @is_static + end + alias gen generator def name=(n) @name = n if constructor? @return_value.type = n end end + def call_name + if klass + static? ? "#{klass.name}::#{name}" : name + else + name + end + end + def source loc = (@xml/'location').first.attributes "#{loc['file'].split('/')[-3..-1].join('/')}:#{loc['line']}" end @@ -68,14 +81,37 @@ def has_array_arguments? return @has_array_arguments if defined?(@has_array_arguments) @has_array_arguments = !@arguments.detect {|a| a.array_suffix }.nil? end + def has_class_pointer_arguments? + return @has_class_pointer_arguments if defined?(@has_class_pointer_arguments) + @has_class_pointer_arguments = !@arguments.detect {|a| !a.is_native? && a.is_pointer? }.nil? + end + + def has_complex_arguments? + return @has_complex_arguments if defined?(@has_complex_arguments) + @has_complex_arguments = !(@arguments + [@return_value]).compact.detect {|a| a.complex? }.nil? + end + def vararg? @arguments.last && @arguments.last.vararg? end + def arg_is_list(list_position, count_position) + @arguments[list_position ].is_list = true + @arguments[count_position].is_list_count = true + end + + def template? + !@template_params.nil? + end + + def template_params + @template_params + end + def inspect "#<Function #{@prefix}_#{@name}(#{@arguments.inspect[1..-2]})>" end def <=>(other) @@ -98,14 +134,26 @@ (@xml/'param').each_with_index do |arg, i| @arguments << Argument.new(self, arg, i + 1) end raw_type = (@xml/'/type').innerHTML + if raw_type.strip == '' # no return type else arg = Argument.new(self, (@xml/'/type')) @return_value = arg unless arg.create_type =~ /void\s*$/ + end + + @is_static = @xml[:static] == 'yes' + end + + def parse_template_params + template_params = (@xml/'/templateparamlist/param') + if !template_params.empty? + @template_params = template_params.map do |param| + (param/'/type').innerHTML.gsub(/^\s*(typename|class)\s+/,'') + end end end end end # Namespace