~kubuntu-members/kross-interpreters/4.11

« back to all changes in this revision

Viewing changes to ruby/rubyfunction.h

  • Committer: Jonathan Riddell
  • Date: 2013-06-21 12:31:29 UTC
  • Revision ID: git-v1:db5091119e4f0db43eea9947826002cef0e52a69
Tags: v4.10.90, v4.10.95
BUG:243565
Fix "kross ruby doesn't compile with ruby 1.9"
Patch from SuSE and Johannes Huber

Show diffs side-by-side

added added

removed removed

Lines of Context:
56
56
                    m_debuginfo = QString("sender=%1 signature=%2 method=%3")
57
57
                        .arg( sender ? QString("%1 (%2)").arg(sender->objectName()).arg(sender->metaObject()->className()) : "NULL" )
58
58
                        .arg( signal.data() )
59
 
                        .arg( STR2CSTR(rb_inspect(method)) );
 
59
                        .arg( StringValuePtr(rb_inspect(method)) );
60
60
                    krossdebug( QString("RubyFunction Ctor %1").arg(m_debuginfo) );
61
61
                #endif
62
62
                rb_gc_register_address(&m_method);
80
80
            static VALUE callFunctionException(VALUE args, VALUE error)
81
81
            {
82
82
                //#ifdef KROSS_RUBY_FUNCTION_DEBUG
 
83
                    VALUE v_args = rb_inspect(args);
 
84
                    VALUE v_error = rb_inspect(error);
83
85
                    krossdebug( QString("RubyFunction callFunctionException args=%1 error=%2")
84
 
                                .arg( STR2CSTR(rb_inspect(args)) ).arg( STR2CSTR(rb_inspect(error)) ) );
 
86
                                .arg( StringValuePtr(v_args) ).arg( StringValuePtr(v_error) ) );
85
87
                //#else
86
88
                //    Q_UNUSED(args);
87
89
                //    Q_UNUSED(error);
88
90
                //#endif
89
91
                VALUE info = rb_gv_get("$!");
90
92
                VALUE bt = rb_funcall(info, rb_intern("backtrace"), 0);
91
 
                VALUE message = RARRAY(bt)->ptr[0];
92
 
                fprintf(stderr,"%s: %s (%s)\n", STR2CSTR(message), STR2CSTR(rb_obj_as_string(info)), rb_class2name(CLASS_OF(info)));
93
 
                for(int i = 1; i < RARRAY(bt)->len; ++i)
94
 
                    if( TYPE(RARRAY(bt)->ptr[i]) == T_STRING )
95
 
                        fprintf(stderr,"\tfrom %s\n", STR2CSTR(RARRAY(bt)->ptr[i]));
 
93
                VALUE message = RARRAY_PTR(bt)[0];
 
94
                VALUE v_info = rb_obj_as_string(info);
 
95
                fprintf(stderr,"%s: %s (%s)\n", StringValuePtr(message), StringValuePtr(v_info), rb_class2name(CLASS_OF(info)));
 
96
                for(int i = 1; i < RARRAY_LEN(bt); ++i)
 
97
                    if( TYPE(RARRAY_PTR(bt)[i]) == T_STRING )
 
98
                        fprintf(stderr,"\tfrom %s\n", StringValuePtr(RARRAY_PTR(bt)[i]));
96
99
                //ruby_nerrs++;
97
100
                return Qnil;
98
101
            }
105
108
            static VALUE callFunction(VALUE args)
106
109
            {
107
110
                #ifdef KROSS_RUBY_FUNCTION_DEBUG
108
 
                    krossdebug( QString("RubyFunction callFunction args=%1").arg(STR2CSTR(rb_inspect(args))) );
 
111
                    krossdebug( QString("RubyFunction callFunction args=%1").arg(StringValuePtr(rb_inspect(args))) );
109
112
                #endif
110
113
                Q_ASSERT( TYPE(args) == T_ARRAY );
111
114
                VALUE self = rb_ary_entry(args, 0);
116
119
                {
117
120
                    argumentsP[idx] = rb_ary_entry(arguments, idx+1);
118
121
                }
119
 
                //krossdebug(QString("RubyScript::callExecute script=%1").arg(STR2CSTR( rb_inspect(script) )));
120
 
                //krossdebug(QString("RubyScript::callExecute fileName=%1").arg(STR2CSTR( rb_inspect(fileName) )));
121
 
                //krossdebug(QString("RubyScript::callExecute src=%1").arg(STR2CSTR( rb_inspect(src) )));
 
122
                //krossdebug(QString("RubyScript::callExecute script=%1").arg(StringValuePtr( rb_inspect(script) )));
 
123
                //krossdebug(QString("RubyScript::callExecute fileName=%1").arg(StringValuePtr( rb_inspect(fileName) )));
 
124
                //krossdebug(QString("RubyScript::callExecute src=%1").arg(StringValuePtr( rb_inspect(src) )));
122
125
                VALUE result = rb_funcall2(self, rb_intern("call"), argsize, argumentsP);
123
126
                delete[] argumentsP;
124
127
                return result;
198
201
                            //VALUE result = rb_funcall2(m_method, rb_intern("call"), argsize, args);
199
202
 
200
203
                            //TODO optimize
201
 
                            ruby_in_eval++;
 
204
                            //ruby_in_eval++
202
205
                            VALUE argarray = rb_ary_new2(3);
203
206
                            rb_ary_store(argarray, 0, m_method); //self
204
207
                            rb_ary_store(argarray, 1, INT2FIX(argsize));
205
208
                            rb_ary_store(argarray, 2, args);
206
209
                            VALUE result = rb_rescue2((VALUE(*)(...))callFunction, argarray, (VALUE(*)(...))callFunctionException, Qnil, rb_eException, 0);
207
 
                            ruby_in_eval--;
 
210
                            //ruby_in_eval--;
208
211
 
209
212
                            // finally set the returnvalue
210
213
                            m_tmpResult = RubyType<QVariant>::toVariant(result);
211
214
                            #ifdef KROSS_RUBY_FUNCTION_DEBUG
212
215
                                QObject* sender = QObject::sender();
213
 
                                krossdebug( QString("RubyFunction::qt_metacall sender.objectName=%1 sender.className=%2 result=%3 variantresult=%4").arg(sender->objectName()).arg(sender->metaObject()->className()).arg(STR2CSTR(rb_inspect(result))).arg(m_tmpResult.toString()) );
 
216
                                krossdebug( QString("RubyFunction::qt_metacall sender.objectName=%1 sender.className=%2 result=%3 variantresult=%4").arg(sender->objectName()).arg(sender->metaObject()->className()).arg(StringValuePtr(rb_inspect(result))).arg(m_tmpResult.toString()) );
214
217
                            #endif
215
218
                            //_a[0] = Kross::MetaTypeVariant<QVariant>(d->tmpResult).toVoidStar();
216
219
                            _a[0] = &(m_tmpResult);