Ignore:
Timestamp:
Aug 2, 2010, 9:27:30 PM (15 years ago)
Author:
Dmitry A. Kuminov
Message:

trunk: Merged in qt 4.6.3 sources from branches/vendor/nokia/qt.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/src/script/api/qscriptvalue.cpp

    r651 r769  
    793793        return;
    794794    }
     795    JSC::JSObject *thisObject = JSC::asObject(d->jscValue);
    795796    JSC::JSValue other = d->engine->scriptValueToJSCValue(prototype);
    796797
     
    799800    while (nextPrototypeValue && nextPrototypeValue.isObject()) {
    800801        JSC::JSObject *nextPrototype = JSC::asObject(nextPrototypeValue);
    801         if (nextPrototype == JSC::asObject(d->jscValue)) {
     802        if (nextPrototype == thisObject) {
    802803            qWarning("QScriptValue::setPrototype() failed: cyclic prototype value");
    803804            return;
     
    805806        nextPrototypeValue = nextPrototype->prototype();
    806807    }
    807     JSC::asObject(d->jscValue)->setPrototype(other);
     808
     809    thisObject->setPrototype(other);
     810
     811    // Sync the internal Global Object prototype if appropriate.
     812    if (((thisObject == d->engine->originalGlobalObjectProxy)
     813         && !d->engine->customGlobalObject())
     814        || (thisObject == d->engine->customGlobalObject())) {
     815        d->engine->originalGlobalObject()->setPrototype(other);
     816    }
    808817}
    809818
     
    11491158
    11501159    if (d->type != other.d_ptr->type) {
    1151         if (d->type == QScriptValuePrivate::JavaScriptCore)
    1152             return JSC::JSValue::strictEqual(d->jscValue, d->engine->scriptValueToJSCValue(other));
    1153         else if (other.d_ptr->type == QScriptValuePrivate::JavaScriptCore)
    1154             return JSC::JSValue::strictEqual(other.d_ptr->engine->scriptValueToJSCValue(*this), other.d_ptr->jscValue);
     1160        if (d->type == QScriptValuePrivate::JavaScriptCore) {
     1161            QScriptEnginePrivate *eng_p = d->engine ? d->engine : other.d_ptr->engine;
     1162            if (eng_p)
     1163                return JSC::JSValue::strictEqual(d->jscValue, eng_p->scriptValueToJSCValue(other));
     1164        } else if (other.d_ptr->type == QScriptValuePrivate::JavaScriptCore) {
     1165            QScriptEnginePrivate *eng_p = other.d_ptr->engine ? other.d_ptr->engine : d->engine;
     1166            if (eng_p)
     1167                return JSC::JSValue::strictEqual(eng_p->scriptValueToJSCValue(*this), other.d_ptr->jscValue);
     1168        }
    11551169
    11561170        return false;
     
    19421956    if (!array.isUndefinedOrNull()) {
    19431957        if (!array.isObject()) {
    1944             return d->engine->scriptValueFromJSCValue(JSC::throwError(exec, JSC::TypeError));
     1958            return d->engine->scriptValueFromJSCValue(JSC::throwError(exec, JSC::TypeError, "Arguments must be an array"));
    19451959        }
    19461960        if (JSC::asObject(array)->classInfo() == &JSC::Arguments::info)
     
    19531967                applyArgs.append(JSC::asArray(array)->get(exec, i));
    19541968        } else {
    1955             Q_ASSERT_X(false, Q_FUNC_INFO, "implement me");
    1956 //            return JSC::throwError(exec, JSC::TypeError);
     1969            return d->engine->scriptValueFromJSCValue(JSC::throwError(exec, JSC::TypeError, "Arguments must be an array"));
    19571970        }
    19581971    }
Note: See TracChangeset for help on using the changeset viewer.