diff -r 2619fc780f83 ruby/qtruby/src/Qt.cpp --- a/ruby/qtruby/src/Qt.cpp Mon Jul 14 23:05:23 2008 +0200 +++ b/ruby/qtruby/src/Qt.cpp Tue Jul 29 17:27:36 2008 +0200 @@ -148,7 +148,7 @@ bool application_terminated = false; } #define logger logger_backend -void rb_str_catf(VALUE self, const char *format, ...) __attribute__ ((format (printf, 2, 3))); +VALUE rb_str_catf(VALUE self, const char *format, ...) __attribute__ ((format (printf, 2, 3))); static VALUE (*_new_kde)(int, VALUE *, VALUE) = 0; @@ -519,7 +519,7 @@ InvokeNativeSlot::cleanup() return true; } -void rb_str_catf(VALUE self, const char *format, ...) +VALUE rb_str_catf(VALUE self, const char *format, ...) { #define CAT_BUFFER_SIZE 2048 static char p[CAT_BUFFER_SIZE]; @@ -529,6 +529,7 @@ static char p[CAT_BUFFER_SIZE]; p[CAT_BUFFER_SIZE - 1] = '\0'; rb_str_cat2(self, p); va_end(ap); + return Qnil; } extern "C" { @@ -693,7 +694,7 @@ VALUE VALUE qvariant_value(VALUE /*self*/, VALUE variant_value_klass, VALUE variant_value) { - char * classname = rb_class2name(variant_value_klass); + const char * classname = rb_class2name(variant_value_klass); smokeruby_object *o = value_obj_info(variant_value); if (o == 0 || o->ptr == 0) { return Qnil; @@ -809,7 +810,7 @@ qvariant_from_value(int argc, VALUE * ar } } - char * classname = rb_obj_classname(argv[0]); + const char * classname = rb_obj_classname(argv[0]); smokeruby_object *o = value_obj_info(argv[0]); if (o == 0 || o->ptr == 0) { // Assume the Qt::Variant can be created with a @@ -872,7 +873,7 @@ const char * const char * get_VALUEtype(VALUE ruby_value) { - char * classname = rb_obj_classname(ruby_value); + const char * classname = rb_obj_classname(ruby_value); const char *r = ""; if (ruby_value == Qnil) r = "u"; @@ -1093,7 +1094,7 @@ inspect_qobject(VALUE self) // Start with # from the original inspect() call // Drop the closing '>' VALUE inspect_str = rb_call_super(0, 0); - rb_str_resize(inspect_str, RSTRING(inspect_str)->len - 1); + rb_str_resize(inspect_str, RSTRING_LEN(inspect_str) - 1); smokeruby_object * o = 0; Data_Get_Struct(self, smokeruby_object, o); @@ -1136,7 +1137,7 @@ pretty_print_qobject(VALUE self, VALUE p // Start with # // Drop the closing '>' VALUE inspect_str = rb_funcall(self, rb_intern("to_s"), 0, 0); - rb_str_resize(inspect_str, RSTRING(inspect_str)->len - 1); + rb_str_resize(inspect_str, RSTRING_LEN(inspect_str) - 1); rb_funcall(pp, rb_intern("text"), 1, inspect_str); rb_funcall(pp, rb_intern("breakable"), 0); @@ -1151,7 +1152,7 @@ pretty_print_qobject(VALUE self, VALUE p VALUE obj = getPointerObject(qobject->parent()); if (obj != Qnil) { VALUE parent_inspect_str = rb_funcall(obj, rb_intern("to_s"), 0, 0); - rb_str_resize(parent_inspect_str, RSTRING(parent_inspect_str)->len - 1); + rb_str_resize(parent_inspect_str, RSTRING_LEN(parent_inspect_str) - 1); parentInspectString = StringValuePtr(parent_inspect_str); } else { parentInspectString.sprintf("#<%s:0x0", qobject->parent()->metaObject()->className()); @@ -1214,14 +1215,14 @@ static VALUE static VALUE q_register_resource_data(VALUE /*self*/, VALUE version, VALUE tree_value, VALUE name_value, VALUE data_value) { - const unsigned char * tree = (const unsigned char *) malloc(RSTRING(tree_value)->len); - memcpy((void *) tree, (const void *) RSTRING(tree_value)->ptr, RSTRING(tree_value)->len); + const unsigned char * tree = (const unsigned char *) malloc(RSTRING_LEN(tree_value)); + memcpy((void *) tree, (const void *) RSTRING_PTR(tree_value), RSTRING_LEN(tree_value)); - const unsigned char * name = (const unsigned char *) malloc(RSTRING(name_value)->len); - memcpy((void *) name, (const void *) RSTRING(name_value)->ptr, RSTRING(name_value)->len); + const unsigned char * name = (const unsigned char *) malloc(RSTRING_LEN(name_value)); + memcpy((void *) name, (const void *) RSTRING_PTR(name_value), RSTRING_LEN(name_value)); - const unsigned char * data = (const unsigned char *) malloc(RSTRING(data_value)->len); - memcpy((void *) data, (const void *) RSTRING(data_value)->ptr, RSTRING(data_value)->len); + const unsigned char * data = (const unsigned char *) malloc(RSTRING_LEN(data_value)); + memcpy((void *) data, (const void *) RSTRING_PTR(data_value), RSTRING_LEN(data_value)); return qRegisterResourceData(NUM2INT(version), tree, name, data) ? Qtrue : Qfalse; } @@ -1229,14 +1230,14 @@ static VALUE static VALUE q_unregister_resource_data(VALUE /*self*/, VALUE version, VALUE tree_value, VALUE name_value, VALUE data_value) { - const unsigned char * tree = (const unsigned char *) malloc(RSTRING(tree_value)->len); - memcpy((void *) tree, (const void *) RSTRING(tree_value)->ptr, RSTRING(tree_value)->len); + const unsigned char * tree = (const unsigned char *) malloc(RSTRING_LEN(tree_value)); + memcpy((void *) tree, (const void *) RSTRING_PTR(tree_value), RSTRING_LEN(tree_value)); - const unsigned char * name = (const unsigned char *) malloc(RSTRING(name_value)->len); - memcpy((void *) name, (const void *) RSTRING(name_value)->ptr, RSTRING(name_value)->len); + const unsigned char * name = (const unsigned char *) malloc(RSTRING_LEN(name_value)); + memcpy((void *) name, (const void *) RSTRING_PTR(name_value), RSTRING_LEN(name_value)); - const unsigned char * data = (const unsigned char *) malloc(RSTRING(data_value)->len); - memcpy((void *) data, (const void *) RSTRING(data_value)->ptr, RSTRING(data_value)->len); + const unsigned char * data = (const unsigned char *) malloc(RSTRING_LEN(data_value)); + memcpy((void *) data, (const void *) RSTRING_PTR(data_value), RSTRING_LEN(data_value)); return qUnregisterResourceData(NUM2INT(version), tree, name, data) ? Qtrue : Qfalse; } @@ -1797,7 +1798,7 @@ static VALUE static VALUE method_missing(int argc, VALUE * argv, VALUE self) { - char * methodName = rb_id2name(SYM2ID(argv[0])); + const char * methodName = rb_id2name(SYM2ID(argv[0])); VALUE klass = rb_funcall(self, rb_intern("class"), 0); // Look for 'thing?' methods, and try to match isThing() or hasThing() in the Smoke runtime @@ -1840,14 +1841,14 @@ static QByteArray * pred = 0; } { - QByteArray * mcid = find_cached_selector(argc+3, temp_stack, klass, methodName); + QByteArray * mcid = find_cached_selector(argc+3, temp_stack, klass, (char *) methodName); if (_current_method == -1) { // Find the C++ method to call. Do that from Ruby for now VALUE retval = rb_funcall2(qt_internal_module, rb_intern("do_method_missing"), argc+3, temp_stack); if (_current_method == -1) { - char * op = rb_id2name(SYM2ID(argv[0])); + const char * op = rb_id2name(SYM2ID(argv[0])); if ( qstrcmp(op, "-") == 0 || qstrcmp(op, "+") == 0 || qstrcmp(op, "/") == 0 @@ -1954,7 +1955,7 @@ class_method_missing(int argc, VALUE * a class_method_missing(int argc, VALUE * argv, VALUE klass) { VALUE result = Qnil; - char * methodName = rb_id2name(SYM2ID(argv[0])); + const char * methodName = rb_id2name(SYM2ID(argv[0])); VALUE * temp_stack = ALLOCA_N(VALUE, argc+3); temp_stack[0] = rb_str_new2("Qt"); temp_stack[1] = rb_str_new2(methodName); @@ -1965,7 +1966,7 @@ class_method_missing(int argc, VALUE * a } { - QByteArray * mcid = find_cached_selector(argc+3, temp_stack, klass, methodName); + QByteArray * mcid = find_cached_selector(argc+3, temp_stack, klass, (char *) methodName); if (_current_method == -1) { VALUE retval = rb_funcall2(qt_internal_module, rb_intern("do_method_missing"), argc+3, temp_stack); @@ -2068,7 +2069,7 @@ initialize_qt(int argc, VALUE * argv, VA } { - QByteArray * mcid = find_cached_selector(argc+4, temp_stack, klass, rb_class2name(klass)); + QByteArray * mcid = find_cached_selector(argc+4, temp_stack, klass, (char *) rb_class2name(klass)); if (_current_method == -1) { retval = rb_funcall2(qt_internal_module, rb_intern("do_method_missing"), argc+4, temp_stack); @@ -2172,7 +2173,7 @@ qt_signal(int argc, VALUE * argv, VALUE return Qfalse; } - QLatin1String signalname(rb_id2name(rb_frame_last_func())); + QLatin1String signalname(rb_id2name(rb_frame_callee())); VALUE metaObject_value = rb_funcall(qt_internal_module, rb_intern("getMetaObject"), 2, Qnil, self); smokeruby_object *ometa = value_obj_info(metaObject_value); @@ -2660,12 +2661,12 @@ make_metaObject(VALUE /*self*/, VALUE ob superdata = (QMetaObject *) p->ptr; } - char *stringdata = new char[RSTRING(stringdata_value)->len]; + char *stringdata = new char[RSTRING_LEN(stringdata_value)]; int count = RARRAY(data_value)->len; uint * data = new uint[count]; - memcpy( (void *) stringdata, RSTRING(stringdata_value)->ptr, RSTRING(stringdata_value)->len ); + memcpy( (void *) stringdata, RSTRING_PTR(stringdata_value), RSTRING_LEN(stringdata_value) ); for (long i = 0; i < count; i++) { VALUE rv = rb_ary_entry(data_value, i); diff -r 2619fc780f83 ruby/qtruby/src/handlers.cpp --- a/ruby/qtruby/src/handlers.cpp Mon Jul 14 23:05:23 2008 +0200 +++ b/ruby/qtruby/src/handlers.cpp Tue Jul 29 17:27:36 2008 +0200 @@ -839,54 +839,31 @@ static void marshall_doubleR(Marshall *m } } -static const char * KCODE = 0; static QTextCodec *codec = 0; - -static void -init_codec() { - VALUE temp = rb_gv_get("$KCODE"); - KCODE = StringValuePtr(temp); - if (qstrcmp(KCODE, "EUC") == 0) { - codec = QTextCodec::codecForName("eucJP"); - } else if (qstrcmp(KCODE, "SJIS") == 0) { - codec = QTextCodec::codecForName("Shift-JIS"); - } -} QString* qstringFromRString(VALUE rstring) { - if (KCODE == 0) { - init_codec(); - } - - if (qstrcmp(KCODE, "UTF8") == 0) - return new QString(QString::fromUtf8(StringValuePtr(rstring), RSTRING(rstring)->len)); - else if (qstrcmp(KCODE, "EUC") == 0) + VALUE encoding = rb_funcall(rstring, rb_intern("encoding"), 0); + encoding = rb_funcall(encoding, rb_intern("to_s"), 0); + const char * enc_s = RSTRING_PTR(encoding); + + if (qstrcmp(enc_s, "UTF8") == 0) + return new QString(QString::fromUtf8(StringValuePtr(rstring), RSTRING_LEN(rstring))); + else if (qstrcmp(enc_s, "EUC-JP") == 0) { + codec = QTextCodec::codecForName("eucJP"); return new QString(codec->toUnicode(StringValuePtr(rstring))); - else if (qstrcmp(KCODE, "SJIS") == 0) + } else if (qstrcmp(enc_s, "Shift-JIS") == 0) { + codec = QTextCodec::codecForName("Shift-JIS"); return new QString(codec->toUnicode(StringValuePtr(rstring))); - else if(qstrcmp(KCODE, "NONE") == 0) + } else if(qstrcmp(enc_s, "ISO-8859-1") == 0 || qstrcmp(enc_s, "US-ASCII") == 0) return new QString(QString::fromLatin1(StringValuePtr(rstring))); - return new QString(QString::fromLocal8Bit(StringValuePtr(rstring), RSTRING(rstring)->len)); + return new QString(QString::fromLocal8Bit(StringValuePtr(rstring), RSTRING_LEN(rstring))); } VALUE rstringFromQString(QString * s) { - if (KCODE == 0) { - init_codec(); - } - - if (qstrcmp(KCODE, "UTF8") == 0) - return rb_str_new2(s->toUtf8()); - else if (qstrcmp(KCODE, "EUC") == 0) - return rb_str_new2(codec->fromUnicode(*s)); - else if (qstrcmp(KCODE, "SJIS") == 0) - return rb_str_new2(codec->fromUnicode(*s)); - else if (qstrcmp(KCODE, "NONE") == 0) - return rb_str_new2(s->toLatin1()); - else - return rb_str_new2(s->toLocal8Bit()); + return rb_str_new2(s->toUtf8()); } static void marshall_QString(Marshall *m) { @@ -1137,7 +1114,7 @@ void marshall_QByteArrayList(Marshall *m stringlist->append(QByteArray()); continue; } - stringlist->append(QByteArray(StringValuePtr(item), RSTRING(item)->len)); + stringlist->append(QByteArray(StringValuePtr(item), RSTRING_LEN(item))); } m->item().s_voidp = stringlist; diff -r 2619fc780f83 ruby/qtruby/src/lib/Qt/qtruby4.rb --- a/ruby/qtruby/src/lib/Qt/qtruby4.rb Mon Jul 14 23:05:23 2008 +0200 +++ b/ruby/qtruby/src/lib/Qt/qtruby4.rb Tue Jul 29 17:27:36 2008 +0200 @@ -2394,7 +2394,7 @@ module Qt # wrapped in a new ruby variable of type T_DATA def Internal.try_initialize(instance, *args) initializer = instance.method(:initialize) - catch "newqt" do + catch :newqt do initializer.call(*args) end end diff -r 2619fc780f83 ruby/qtruby/src/marshall_primitives.h --- a/ruby/qtruby/src/marshall_primitives.h Mon Jul 14 23:05:23 2008 +0200 +++ b/ruby/qtruby/src/marshall_primitives.h Tue Jul 29 17:27:36 2008 +0200 @@ -232,7 +232,7 @@ unsigned char* ruby_to_primitivelen; + int len = RSTRING_LEN(rv); char* mem = (char*) malloc(len+1); memcpy(mem, StringValuePtr(rv), len); mem[len] ='\0';