[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdelibs
From:       Sebastian Sauer <mail () dipe ! org>
Date:       2008-06-14 1:06:48
Message-ID: 1213405608.509437.30177.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 820381 by sebsauer:

made bytearray, longlong and ulonglong working in kjsembed


 M  +15 -2     kjsembed/kjsembed/qobject_binding.cpp  
 M  +38 -75    kjsembed/kjsembed/variant_binding.cpp  
 M  +6 -10     kross/test/unittest.js  


--- trunk/KDE/kdelibs/kjsembed/kjsembed/qobject_binding.cpp #820380:820381
@@ -3,6 +3,7 @@
     Copyright (C) 2005, 2006 Matt Broadstone <mbroadst@gmail.com>
     Copyright (C) 2005, 2006 Richard J. Moore <rich@kde.org>
     Copyright (C) 2005, 2006 Erik L. Bunce <kde@bunce.us>
+    Copyright (C) 2007, 2008 Sebastian Sauer <mail@dipe.org>
 
     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Library General Public
@@ -423,6 +424,14 @@
             if( args[idx]->type() == KJS::NumberType )
                 return new Value<uint>( uint( args[idx]->toInteger(exec) ) );
             break;
+        case QVariant::LongLong:
+            if( args[idx]->type() == KJS::NumberType )
+                return new Value<qlonglong>( qlonglong( args[idx]->toInteger(exec) ) \
); +            break;
+        case QVariant::ULongLong:
+            if( args[idx]->type() == KJS::NumberType )
+                return new Value<qulonglong>( qulonglong( args[idx]->toInteger(exec) \
) ); +            break;
         case QVariant::Double:
             if( args[idx]->type() == KJS::NumberType )
                 return new Value<double>( args[idx]->toNumber(exec) );
@@ -433,9 +442,13 @@
             if( args[idx]->type() == KJS::BooleanType )
                 return new Value<bool>( args[idx]->toBoolean(exec) );
             break;
+        case QVariant::ByteArray:
+            if( args[idx]->type() == KJS::StringType )
+                return new Value<QByteArray>( \
toQString(args[idx]->toString(exec)).toUtf8() ); +            break;
         case QVariant::String:
             if( args[idx]->type() == KJS::StringType )
-                return new Value<QString>( toQString(args[idx]->toString(exec) ));
+                return new Value<QString>( toQString(args[idx]->toString(exec)) );
             break;
         case QVariant::StringList:
             if( args[idx]->type() == KJS::ObjectType )
@@ -449,7 +462,7 @@
             if( args[idx]->type() == KJS::ObjectType )
                 return new Value<QVariantMap>( convertArrayToMap(exec, args[idx]) );
             break;
-        case QVariant::UserType:
+        case QVariant::UserType: // fall through
         default:
             if ( args[idx]->type() == KJS::StringType )
             {
--- trunk/KDE/kdelibs/kjsembed/kjsembed/variant_binding.cpp #820380:820381
@@ -3,6 +3,7 @@
     Copyright (C) 2005, 2006 Matt Broadstone <mbroadst@gmail.com>
     Copyright (C) 2005, 2006 Richard J. Moore <rich@kde.org>
     Copyright (C) 2005, 2006 Erik L. Bunce <kde@bunce.us>
+    Copyright (C) 2007, 2008 Sebastian Sauer <mail@dipe.org>
 
     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Library General Public
@@ -77,21 +78,14 @@
     const void *p = m_value.constData();
     //qDebug("Ptr %0x", p );
     //qDebug() << p;
-
     return QGenericArgument( type, p );
 }
 
 KJS::JSValue *callName( KJS::ExecState *exec, KJS::JSObject *self, const KJS::List \
&args )  {
     Q_UNUSED( args );
-
-    KJSEmbed::VariantBinding *imp = \
                KJSEmbed::extractBindingImp<KJSEmbed::VariantBinding>(exec,  self );
-    if( imp )
-    {
-        QVariant val = imp->variant();
-        return KJS::jsString( val.typeName() );
-    }
-    return KJS::jsNull();
+    KJSEmbed::VariantBinding *imp = \
KJSEmbed::extractBindingImp<KJSEmbed::VariantBinding>(exec,  self); +    return imp ? \
KJS::jsString( imp->variant().typeName() ) : KJS::jsNull();  }
 
 KJS::JSValue *callCast( KJS::ExecState *exec, KJS::JSObject *self, const KJS::List \
&args ) @@ -111,11 +105,10 @@
 KJS::JSValue *callToString( KJS::ExecState *exec, KJS::JSObject *self, const \
KJS::List &args )  {
     Q_UNUSED( args );
-
     KJSEmbed::VariantBinding *imp = \
KJSEmbed::extractBindingImp<KJSEmbed::VariantBinding>(exec,  self );  if( imp )
     {
-//        qDebug("Call value to string");
+        //qDebug("Call value to string");
         QVariant val = imp->variant();
         QString stringVal = val.toString();
         if( !stringVal.isEmpty() )
@@ -139,17 +132,15 @@
     KJS::JSObject *obj = val->toObject( exec );
     if ( toQString(obj->className()) == "Array" )
     {
-        if( !obj->hasProperty(exec, KJS::Identifier("length")) ) {
+        if( !obj->hasProperty(exec, KJS::Identifier("length")) )
             return Map;
-        }
         KJS::JSValue *jslen = obj->get(exec, KJS::Identifier("length"));
         const int len = jslen->toNumber(exec);
         if ( len > 0 ) {
             QByteArray buff;
             buff.setNum(len-1);
-            if( !obj->hasProperty(exec, KJS::Identifier( buff.data() ) ) ) {
+            if( !obj->hasProperty(exec, KJS::Identifier( buff.data() ) ) )
                 return Map;
-            }
         }
         return List;
     }
@@ -238,22 +229,14 @@
     KJS::List args;
     QDateTime returnDateTime;
     KJS::JSObject *obj = value->toObject( exec );
-
     if ( toQString(obj->className()) == "Date" )
     {
-        int seconds = int( obj->get( exec, KJS::Identifier( "getSeconds" ) )
-              ->toObject( exec )->call( exec, obj, args )->toInteger( exec ) );
-        int minutes = int( obj->get( exec, KJS::Identifier( "getMinutes" ) )
-              ->toObject( exec )->call( exec, obj, args )->toInteger( exec ) );
-        int hours = int( obj->get( exec, KJS::Identifier( "getHours" ) )
-              ->toObject( exec )->call( exec, obj, args )->toInteger( exec ) );
-        int month = int( obj->get( exec, KJS::Identifier( "getMonth" ) )
-              ->toObject( exec )->call( exec, obj, args )->toInteger( exec ) );
-        int day = int( obj->get( exec, KJS::Identifier( "getDate" ) )
-              ->toObject( exec )->call( exec, obj, args )->toInteger( exec ) );
-        int year = int( obj->get( exec, KJS::Identifier( "getFullYear" ) )
-              ->toObject( exec )->call( exec, obj, args )->toInteger( exec ) );
-
+        int seconds = int( obj->get( exec, KJS::Identifier( "getSeconds" ) \
)->toObject( exec )->call( exec, obj, args )->toInteger( exec ) ); +        int \
minutes = int( obj->get( exec, KJS::Identifier( "getMinutes" ) )->toObject( exec \
)->call( exec, obj, args )->toInteger( exec ) ); +        int hours = int( obj->get( \
exec, KJS::Identifier( "getHours" ) )->toObject( exec )->call( exec, obj, args \
)->toInteger( exec ) ); +        int month = int( obj->get( exec, KJS::Identifier( \
"getMonth" ) )->toObject( exec )->call( exec, obj, args )->toInteger( exec ) ); +     \
int day = int( obj->get( exec, KJS::Identifier( "getDate" ) )->toObject( exec \
)->call( exec, obj, args )->toInteger( exec ) ); +        int year = int( obj->get( \
exec, KJS::Identifier( "getFullYear" ) )->toObject( exec )->call( exec, obj, args \
)->toInteger( exec ) );  returnDateTime.setDate( QDate( year, month + 1, day ) );
         returnDateTime.setTime( QTime( hours, minutes, seconds ) );
     }
@@ -274,54 +257,36 @@
         case KJS::UndefinedType:
         case KJS::NullType:
             break;
-
         case KJS::StringType:
             returnValue = toQString(value->toString(exec));
             break;
-
         case KJS::NumberType:
             returnValue = value->toNumber(exec);
             break;
-
         case KJS::BooleanType:
             returnValue = value->toBoolean(exec);
             break;
-
         case KJS::ObjectType:
         {
             KJS::JSObject *obj = value->toObject(exec);
             //qDebug() << "Object type: " << toQString(obj->className());
-            if ( toQString(obj->className()) == "Array" )
-            {
-                if ( checkArray( exec, value ) == List ) {
-                    returnValue = convertArrayToList( exec, value );
-                }
-                else {
+            if ( toQString(obj->className()) == "Array" ) {
+                if (checkArray(exec, value) == List)
+                    returnValue = convertArrayToList(exec, value);
+                else
                     returnValue = convertArrayToMap(exec, value);
-                }
             }
             else if ( toQString(obj->className()) == "Date" )
-            {
                 returnValue = convertDateToDateTime( exec, value );
-            }
             else
-            {
                 returnValue = extractVariant(exec,value);
-            }
-            if( returnValue.isNull() )
-            {
-                returnValue = toQString(value->toString(exec));
-            }
+            //if( returnValue.isNull() ) returnValue = \
toQString(value->toString(exec));  } break;
         default:
             returnValue = extractVariant(exec,value);
-            if( returnValue.isNull() )
-            {
-                returnValue = toQString(value->toString(exec));
-            }
+            //if( returnValue.isNull() ) returnValue = \
toQString(value->toString(exec));  break;
     }
-
     return returnValue;
 }
 
@@ -334,33 +299,37 @@
         case QVariant::Invalid:
             returnValue = KJS::jsNull();
             break;
-        case QVariant::Bool:
-            returnValue = KJS::jsBoolean( value.value<bool>() );
-            break;
         case QVariant::Int:
             returnValue = KJS::jsNumber( value.value<int>() );
             break;
+        case QVariant::UInt:
+            returnValue = KJS::jsNumber( value.value<unsigned int>() );
+            break;
+        case QVariant::LongLong:
+            returnValue = KJS::jsNumber( value.value<qlonglong>() );
+            break;
+        case QVariant::ULongLong:
+            returnValue = KJS::jsNumber( value.value<qulonglong>() );
+            break;
         case QVariant::Double:
             returnValue = KJS::jsNumber( value.value<double>() );
             break;
-        case QVariant::UInt:
-            returnValue = KJS::jsNumber( value.value<unsigned int>() );
+        case QVariant::Bool:
+            returnValue = KJS::jsBoolean( value.value<bool>() );
             break;
-        case QVariant::String:
         case QVariant::ByteArray:
-        {
+            returnValue = KJS::jsString( QString(value.value<QByteArray>()) );
+            break;
+        case QVariant::String:
             returnValue = KJS::jsString( value.value<QString>() );
             break;
-        }
         case QVariant::StringList:
         {
             KJS::List items;
             QStringList lst = value.value<QStringList>();
             QStringList::Iterator idx = lst.begin();
             for ( ; idx != lst.end(); ++idx )
-            {
                 items.append( KJS::jsString( ( *idx ) ) );
-            }
             returnValue = exec->lexicalInterpreter()->builtinArray()->construct( \
exec, items );  break;
         }
@@ -369,9 +338,7 @@
             KJS::List items;
             QList<QVariant> lst = value.toList();
             foreach( const QVariant &item, lst)
-            {
                 items.append( convertToValue( exec, item ) );
-            }
             returnValue = exec->lexicalInterpreter()->builtinArray()->construct( \
exec, items );  break;
         }
@@ -381,14 +348,12 @@
             QMap<QString,QVariant>::Iterator idx = map.begin();
             KJS::JSObject *obj = \
exec->lexicalInterpreter()->builtinObject()->construct( exec, KJS::List() );  for ( ; \
                idx != map.end(); ++idx )
-            {
                 obj->put(exec, KJS::Identifier( toUString(idx.key()) ), \
                convertToValue( exec,  idx.value() ) );
-            }
             returnValue =  obj;
             break;
         }
-        case QVariant::Date:
-        case QVariant::DateTime:
+        case QVariant::Date: // fall through
+        case QVariant::DateTime: // fall through
         case QVariant::Time:
         {
             QDateTime dt = QDateTime::currentDateTime();
@@ -414,13 +379,11 @@
         {
             if( qVariantCanConvert< QWidget* >(value) ) {
                 QWidget* widget = qvariant_cast< QWidget* >(value);
-                Q_ASSERT(widget);
-                returnValue = createQObject(exec, widget, \
KJSEmbed::ObjectBinding::CPPOwned); +                returnValue = widget ? \
createQObject(exec, widget, KJSEmbed::ObjectBinding::CPPOwned) : KJS::jsNull();  }
             else if( qVariantCanConvert< QObject* >(value) ) {
                 QObject* object = qvariant_cast< QObject* >(value);
-                Q_ASSERT(object);
-                returnValue = createQObject(exec, object, \
KJSEmbed::ObjectBinding::CPPOwned); +                returnValue = object ? \
createQObject(exec, object, KJSEmbed::ObjectBinding::CPPOwned) : KJS::jsNull();  }
             else {
                 returnValue = createVariant(exec, value.typeName(), value );
@@ -450,13 +413,13 @@
     if ( obj ) {
         if(QObjectBinding *objImp = \
KJSEmbed::extractBindingImp<QObjectBinding>(exec, value)) {  QVariant v;
-            v.setValue( (QObject*) objImp->qobject<QObject>() );
+            if( QObject* qobj = objImp->qobject<QObject>() )
+                v.setValue(qobj);
             return v;
         }
         if( toQString(obj->className()) == "Array" )
             return convertArrayToList( exec, value );
     }
-
     return QVariant();
 }
 
--- trunk/KDE/kdelibs/kross/test/unittest.js #820380:820381
@@ -236,24 +236,20 @@
 
 // longlong
 {
-    //TODO Failure to cast to qlonglong value from Type jsNumber
-    //tester.assert(testobj1.func_qlonglong_qlonglong(0), 0);
-    //tester.assert(testobj1.func_qlonglong_qlonglong(7379), 7379);
-    //tester.assert(testobj1.func_qlonglong_qlonglong(-6384673), -6384673);
-    //tester.assert(testobj1.func_qlonglong_qlonglong(678324787843223472165), \
678324787843223472165); +    tester.assert(testobj1.func_qlonglong_qlonglong(0), 0);
+    tester.assert(testobj1.func_qlonglong_qlonglong(7379), 7379);
+    tester.assert(testobj1.func_qlonglong_qlonglong(-6384673), -6384673);
 }
 
 // ulonglong
 {
-    //TODO Failure to cast to qulonglong value from Type jsNumber
-    //tester.assert(testobj1.func_qulonglong_qulonglong(0), 0);
-    //tester.assert(testobj1.func_qulonglong_qulonglong(378972), 378972);
+    tester.assert(testobj1.func_qulonglong_qulonglong(0), 0);
+    tester.assert(testobj1.func_qulonglong_qulonglong(378972), 378972);
 }
 
 // bytearray
 {
-    //TODO Failure to cast to QByteArray value from Type jsString
-    //tester.assert(testobj1.func_qbytearray_qbytearray("  Some String as ByteArray  \
"), "  Some String as ByteArray  "); +    \
tester.assert(testobj1.func_qbytearray_qbytearray("  Some String as ByteArray  "), "  \
                Some String as ByteArray  ");
     //tester.assert(testobj1.func_qbytearray_qbytearray(" \0\n\r\t\s\0 test "), " \
\0\n\r\t\s\0 test ");  }
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic