[Kde-bindings] [Bug 229798] New: qtruby can't discern overloaded function which have QList parameter.

ruby.twiddler at gmail.com ruby.twiddler at gmail.com
Sun Mar 7 11:11:35 UTC 2010


https://bugs.kde.org/show_bug.cgi?id=229798

           Summary: qtruby can't discern overloaded function which have
                    QList parameter.
           Product: bindings
           Version: unspecified
          Platform: Compiled Sources
        OS/Version: Linux
            Status: UNCONFIRMED
          Severity: normal
          Priority: NOR
         Component: general
        AssignedTo: kde-bindings at kde.org
        ReportedBy: ruby.twiddler at gmail.com


Version:           Rev: 1097205 Last Changed Date: 2010-03-01: ruby-1.8.7
(using KDE 4.4.0)
OS:                Linux
Installed from:    Compiled From Sources

qtruby can't discern overloaded function which have QList parameter.

KCoreConfigSkeleton::ItemEnum have two overloaded functions.
   ItemEnum (const QString &_group, const QString &_key, qint32 &reference,
const QList< Choice2 > &choices, qint32 defaultValue=0)

    ItemEnum (const QString &_group, const QString &_key, qint32 &reference,
const QList< Choice > &choices, qint32 defaultValue=0)

QList< Choise2 > and QList< Choise > are different.
but qtruby end with error.
/usr/lib/ruby/site_ruby/1.8/Qt/qtruby4.rb:2611:in `initialize': unresolved
constructor call KDE::ConfigSkeleton::ItemEnum (ArgumentError)


I want ruby to deal with it.
here is my patch to treat the problem.

------ patch file from here ----- 
diff -x .svn -uNrb kdebindings-latest/ruby/qtruby/src/lib/Qt/qtruby4.rb
kdebindings-fix/ruby/qtruby/src/lib/Qt/qtruby4.rb
--- kdebindings-latest/ruby/qtruby/src/lib/Qt/qtruby4.rb    2010-03-05
11:10:02.000000000 +0900
+++ kdebindings-fix/ruby/qtruby/src/lib/Qt/qtruby4.rb    2010-03-06
16:08:35.000000000 +0900
@@ -2503,7 +2503,8 @@
             Qt.debug_level
         end

-        def Internal.checkarg(argtype, typename)
+        def Internal.checkarg(arg, typename)
+            argtype = get_value_type(arg)
             puts "      #{typename} (#{argtype})" if debug_level >=
DebugLevel::High
             const_point = typename =~ /^const\s+/ ? -1 : 0
             if argtype == 'i'
@@ -2579,6 +2580,9 @@
             elsif argtype == 'U'
                 if typename =~ /QStringList/
                     return 4 + const_point
+                elsif typename =~ /QList<(.+)>/ && arg.kind_of?(Array) &&
!arg.empty? &&
+                        get_value_type(arg[0]) == $1
+                    return 3
                 else
                     return 2 + const_point
                 end
@@ -2701,7 +2705,7 @@
                     current_match = 0
                     (0...args.length).each do
                         |i|
-                        current_match += checkarg(get_value_type(args[i]),
get_arg_type_name(id, i))
+                        current_match += checkarg(args[i],
get_arg_type_name(id, i))
                     end

                     # Note that if current_match > best_match, then chosen
must be nil


------ end of patch file -----


--- sample test code ---
#!/usr/bin/ruby
APP_NAME = "test"
APP_VERSION = "0.1"

require 'korundum4'

about = KDE::AboutData.new(APP_NAME, nil, KDE::ki18n(APP_NAME), APP_VERSION)
KDE::CmdLineArgs.init(ARGV, about)

$app = KDE::Application.new
args = KDE::CmdLineArgs.parsedArgs()

class SettingsTest < KDE::ConfigSkeleton
    def test(list)
        choices = []
        list.each do |i|
            c = ItemEnum::Choice.new
            c.name = i
            choices << c
        end
        item = ItemEnum.new(currentGroup, "foods", 0, choices, 0)
    end
end

s = SettingsTest.new
p s.test( %q{ takoyaki dorayaki } )
--- end of sample test code ---

-- 
Configure bugmail: https://bugs.kde.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.



More information about the Kde-bindings mailing list