Changeset 26972 in webkit for trunk/JavaScriptCore/bindings
- Timestamp:
- Oct 24, 2007, 5:32:36 AM (18 years ago)
- Location:
- trunk/JavaScriptCore/bindings/qt
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/bindings/qt/qt_instance.cpp
r26168 r26972 80 80 } 81 81 82 QVariant convertValueToQVariant(ExecState* exec, JSValue* value );82 QVariant convertValueToQVariant(ExecState* exec, JSValue* value, QVariant::Type hint); 83 83 JSValue* convertQVariantToValue(ExecState* exec, const QVariant& variant); 84 84 … … 114 114 115 115 for (int i = 0; i < args.size(); ++i) { 116 vargs[i+1] = convertValueToQVariant(exec, args[i]);117 116 QVariant::Type type = (QVariant::Type) QMetaType::type(argTypes.at(i)); 118 117 if (!type) { … … 120 119 return jsUndefined(); 121 120 } 122 if (!vargs[i+1].convert(type)) 121 vargs[i+1] = convertValueToQVariant(exec, args[i], type); 122 if (vargs[i+1].type() == QVariant::Invalid) 123 123 return jsUndefined(); 124 124 -
trunk/JavaScriptCore/bindings/qt/qt_runtime.cpp
r26168 r26972 21 21 #include "qt_runtime.h" 22 22 #include "qt_instance.h" 23 #include "object.h" 24 #include "array_instance.h" 23 25 24 26 #include "qmetaobject.h" 25 27 #include "qobject.h" 28 #include "qstringlist.h" 26 29 #include "qdebug.h" 27 30 … … 30 33 31 34 // Variant value must be released with NPReleaseVariantValue() 32 QVariant convertValueToQVariant(ExecState* exec, JSValue* value )35 QVariant convertValueToQVariant(ExecState* exec, JSValue* value, QVariant::Type hint) 33 36 { 34 37 // check magic pointer values before dereferencing value … … 38 41 JSLock lock; 39 42 JSType type = value->type(); 43 if (hint == QVariant::Invalid) { 44 switch(type) { 45 case NullType: 46 case UndefinedType: 47 case UnspecifiedType: 48 case StringType: 49 case GetterSetterType: 50 hint = QVariant::String; 51 break; 52 case NumberType: 53 hint = QVariant::Double; 54 break; 55 case BooleanType: 56 hint = QVariant::Bool; 57 break; 58 case ObjectType: { 59 JSObject *object = value->toObject(exec); 60 if (object->inherits(&ArrayInstance::info)) 61 hint = QVariant::List; 62 else 63 hint = QVariant::String; 64 } 65 } 66 } 40 67 41 if (type == StringType) { 68 switch (hint) { 69 case QVariant::Bool: 70 return value->toBoolean(exec); 71 case QVariant::Int: 72 case QVariant::UInt: 73 case QVariant::LongLong: 74 case QVariant::ULongLong: 75 case QVariant::Double: { 76 QVariant v(value->toNumber(exec)); 77 v.convert(hint); 78 return v; 79 } 80 case QVariant::Char: 81 if (type == NumberType || type == BooleanType) { 82 return QChar((ushort)value->toNumber(exec)); 83 } else { 84 UString str = value->toString(exec); 85 return QChar(str.size() ? *(const ushort*)str.rep()->data() : 0); 86 } 87 88 // case QVariant::Map: 89 // case QVariant::List: 90 case QVariant::String: { 42 91 UString ustring = value->toString(exec); 43 92 return QString::fromUtf16((const ushort*)ustring.rep()->data(),ustring.size()); 44 } else if (type == NumberType) { 45 return value->toNumber(exec); 46 } else if (type == BooleanType) { 47 return value->toBoolean(exec); 48 } else if (type == UnspecifiedType) { 49 return QVariant(); 50 } else if (type == NullType) { 51 return QVariant(); 52 } else if (type == ObjectType) { 53 return QVariant(); // ##### 93 } 94 case QVariant::StringList: { 95 if (type != ObjectType) 96 return QVariant(); 97 JSObject *object = value->toObject(exec); 98 if (!object->inherits(&ArrayInstance::info)) 99 return QVariant(); 100 ArrayInstance *array = static_cast<ArrayInstance *>(object); 101 102 QStringList result; 103 int len = array->getLength(); 104 for (int i = 0; i < len; ++i) { 105 JSValue *val = array->getItem(i); 106 UString ustring = val->toString(exec); 107 QString qstring = QString::fromUtf16((const ushort*)ustring.rep()->data(),ustring.size()); 108 109 result.append(qstring); 110 } 111 return result; 112 } 113 case QVariant::ByteArray: { 114 UString ustring = value->toString(exec); 115 return QString::fromUtf16((const ushort*)ustring.rep()->data(),ustring.size()).toLatin1(); 116 } 117 default: 118 break; 54 119 } 55 120 return QVariant(); … … 102 167 QObject* obj = instance->getObject(); 103 168 104 QVariant val = convertValueToQVariant(exec, aValue );169 QVariant val = convertValueToQVariant(exec, aValue, QVariant::Invalid); 105 170 property.write(obj, val); 106 171 }
Note:
See TracChangeset
for help on using the changeset viewer.