src/script/bridge/qscriptdeclarativeclass.cpp
changeset 30 5dc02b23752f
parent 18 2f34d5167611
child 33 3e2da88830cd
equal deleted inserted replaced
29:b72c6db6890b 30:5dc02b23752f
    33 #include <private/qscriptactivationobject_p.h>
    33 #include <private/qscriptactivationobject_p.h>
    34 #include <QtCore/qstringlist.h>
    34 #include <QtCore/qstringlist.h>
    35 
    35 
    36 QT_BEGIN_NAMESPACE
    36 QT_BEGIN_NAMESPACE
    37 
    37 
       
    38 /*!
       
    39 \class QScriptDeclarativeClass::Value
       
    40 \internal
       
    41 \brief The QScriptDeclarativeClass::Value class acts as a container for JavaScript data types.
       
    42 
       
    43 QScriptDeclarativeClass::Value class is similar to QScriptValue, but it is slightly faster.  
       
    44 Unlike QScriptValue, however, Value instances cannot be stored as they may not survive garbage 
       
    45 collection.  If you need to store a Value, convert it to a QScriptValue and store that.
       
    46 */
       
    47 
       
    48 QScriptDeclarativeClass::Value::Value()
       
    49 {
       
    50     new (this) JSC::JSValue(JSC::jsUndefined());
       
    51 }
       
    52 
       
    53 QScriptDeclarativeClass::Value::Value(const Value &other)
       
    54 {
       
    55     new (this) JSC::JSValue((JSC::JSValue &)other);
       
    56 }
       
    57 
       
    58 static QScriptDeclarativeClass::Value jscToValue(const JSC::JSValue &val)
       
    59 {
       
    60     return QScriptDeclarativeClass::Value((QScriptDeclarativeClass::Value &)val);
       
    61 }
       
    62 
       
    63 QScriptDeclarativeClass::Value::Value(QScriptContext *ctxt, int value)
       
    64 {
       
    65     new (this) JSC::JSValue(QScriptEnginePrivate::frameForContext(ctxt), value);
       
    66 }
       
    67 
       
    68 QScriptDeclarativeClass::Value::Value(QScriptContext *ctxt, uint value)
       
    69 {
       
    70     new (this) JSC::JSValue(QScriptEnginePrivate::frameForContext(ctxt), value);
       
    71 }
       
    72 
       
    73 QScriptDeclarativeClass::Value::Value(QScriptContext *, bool value)
       
    74 {
       
    75     if (value)
       
    76         new (this) JSC::JSValue(JSC::JSValue::JSTrue);
       
    77     else
       
    78         new (this) JSC::JSValue(JSC::JSValue::JSFalse);
       
    79 }
       
    80 
       
    81 QScriptDeclarativeClass::Value::Value(QScriptContext *ctxt, double value)
       
    82 {
       
    83     new (this) JSC::JSValue(QScriptEnginePrivate::frameForContext(ctxt), value);
       
    84 }
       
    85 
       
    86 QScriptDeclarativeClass::Value::Value(QScriptContext *ctxt, float value)
       
    87 {
       
    88     new (this) JSC::JSValue(QScriptEnginePrivate::frameForContext(ctxt), value);
       
    89 }
       
    90 
       
    91 QScriptDeclarativeClass::Value::Value(QScriptContext *ctxt, const QString &value)
       
    92 {
       
    93     new (this) JSC::JSValue(JSC::jsString(QScriptEnginePrivate::frameForContext(ctxt), value));
       
    94 }
       
    95 
       
    96 QScriptDeclarativeClass::Value::Value(QScriptContext *ctxt, const QScriptValue &value)
       
    97 {
       
    98     new (this) JSC::JSValue(QScriptEnginePrivate::get(ctxt->engine())->scriptValueToJSCValue(value));
       
    99 }
       
   100 
       
   101 QScriptDeclarativeClass::Value::Value(QScriptEngine *eng, int value)
       
   102 {
       
   103     new (this) JSC::JSValue(QScriptEnginePrivate::get(eng)->currentFrame, value);
       
   104 }
       
   105 
       
   106 QScriptDeclarativeClass::Value::Value(QScriptEngine *eng, uint value)
       
   107 {
       
   108     new (this) JSC::JSValue(QScriptEnginePrivate::get(eng)->currentFrame, value);
       
   109 }
       
   110 
       
   111 QScriptDeclarativeClass::Value::Value(QScriptEngine *eng, bool value)
       
   112 {
       
   113     if (value)
       
   114         new (this) JSC::JSValue(JSC::JSValue::JSTrue);
       
   115     else
       
   116         new (this) JSC::JSValue(JSC::JSValue::JSFalse);
       
   117 }
       
   118 
       
   119 QScriptDeclarativeClass::Value::Value(QScriptEngine *eng, double value)
       
   120 {
       
   121     new (this) JSC::JSValue(QScriptEnginePrivate::get(eng)->currentFrame, value);
       
   122 }
       
   123 
       
   124 QScriptDeclarativeClass::Value::Value(QScriptEngine *eng, float value)
       
   125 {
       
   126     new (this) JSC::JSValue(QScriptEnginePrivate::get(eng)->currentFrame, value);
       
   127 }
       
   128 
       
   129 QScriptDeclarativeClass::Value::Value(QScriptEngine *eng, const QString &value)
       
   130 {
       
   131     new (this) JSC::JSValue(JSC::jsString(QScriptEnginePrivate::get(eng)->currentFrame, value));
       
   132 }
       
   133 
       
   134 QScriptDeclarativeClass::Value::Value(QScriptEngine *eng, const QScriptValue &value)
       
   135 {
       
   136         new (this) JSC::JSValue(QScriptEnginePrivate::get(eng)->scriptValueToJSCValue(value));
       
   137 }
       
   138 
       
   139 QScriptDeclarativeClass::Value::~Value()
       
   140 {
       
   141     ((JSC::JSValue *)(this))->~JSValue();
       
   142 }
       
   143 
       
   144 QScriptValue QScriptDeclarativeClass::Value::toScriptValue(QScriptEngine *engine) const
       
   145 {
       
   146     return QScriptEnginePrivate::get(engine)->scriptValueFromJSCValue((JSC::JSValue &)*this);
       
   147 }
       
   148 
    38 QScriptDeclarativeClass::PersistentIdentifier::PersistentIdentifier()
   149 QScriptDeclarativeClass::PersistentIdentifier::PersistentIdentifier()
       
   150     : identifier(0), engine(0)
    39 {
   151 {
    40     new (&d) JSC::Identifier();
   152     new (&d) JSC::Identifier();
    41 }
   153 }
    42 
   154 
    43 QScriptDeclarativeClass::PersistentIdentifier::~PersistentIdentifier()
   155 QScriptDeclarativeClass::PersistentIdentifier::~PersistentIdentifier()
    44 {
   156 {
    45     ((JSC::Identifier &)d).JSC::Identifier::~Identifier();
   157     if (engine) {
       
   158         QScript::APIShim shim(engine);
       
   159         ((JSC::Identifier &)d).JSC::Identifier::~Identifier();
       
   160     } else {
       
   161         ((JSC::Identifier &)d).JSC::Identifier::~Identifier();
       
   162     }
    46 }
   163 }
    47 
   164 
    48 QScriptDeclarativeClass::PersistentIdentifier::PersistentIdentifier(const PersistentIdentifier &other)
   165 QScriptDeclarativeClass::PersistentIdentifier::PersistentIdentifier(const PersistentIdentifier &other)
    49 {
   166 {
    50     identifier = other.identifier;
   167     identifier = other.identifier;
       
   168     engine = other.engine;
    51     new (&d) JSC::Identifier((JSC::Identifier &)(other.d));
   169     new (&d) JSC::Identifier((JSC::Identifier &)(other.d));
    52 }
   170 }
    53 
   171 
    54 QScriptDeclarativeClass::PersistentIdentifier &
   172 QScriptDeclarativeClass::PersistentIdentifier &
    55 QScriptDeclarativeClass::PersistentIdentifier::operator=(const PersistentIdentifier &other)
   173 QScriptDeclarativeClass::PersistentIdentifier::operator=(const PersistentIdentifier &other)
    56 {
   174 {
    57     identifier = other.identifier;
   175     identifier = other.identifier;
       
   176     engine = other.engine;
    58     ((JSC::Identifier &)d) = (JSC::Identifier &)(other.d);
   177     ((JSC::Identifier &)d) = (JSC::Identifier &)(other.d);
    59     return *this;
   178     return *this;
    60 }
   179 }
    61 
   180 
    62 QScriptDeclarativeClass::QScriptDeclarativeClass(QScriptEngine *engine)
   181 QScriptDeclarativeClass::QScriptDeclarativeClass(QScriptEngine *engine)
    72                                                 Object *object)
   191                                                 Object *object)
    73 {
   192 {
    74     Q_ASSERT(engine);
   193     Q_ASSERT(engine);
    75     Q_ASSERT(scriptClass);
   194     Q_ASSERT(scriptClass);
    76 
   195 
    77     QScriptEnginePrivate *p = static_cast<QScriptEnginePrivate *>(QObjectPrivate::get(engine)); 
   196     QScriptEnginePrivate *p = static_cast<QScriptEnginePrivate *>(QObjectPrivate::get(engine));
       
   197     QScript::APIShim shim(p);
    78 
   198 
    79     JSC::ExecState* exec = p->currentFrame;
   199     JSC::ExecState* exec = p->currentFrame;
    80     QScriptObject *result = new (exec) QScriptObject(p->scriptObjectStructure);
   200     QScriptObject *result = new (exec) QScriptObject(p->scriptObjectStructure);
    81     result->setDelegate(new QScript::DeclarativeObjectDelegate(scriptClass, object));
   201     result->setDelegate(new QScript::DeclarativeObjectDelegate(scriptClass, object));
    82     return p->scriptValueFromJSCValue(result);
   202     return p->scriptValueFromJSCValue(result);
    83 }
   203 }
    84 
   204 
       
   205 QScriptDeclarativeClass::Value 
       
   206 QScriptDeclarativeClass::newObjectValue(QScriptEngine *engine, 
       
   207                                         QScriptDeclarativeClass *scriptClass, 
       
   208                                         Object *object)
       
   209 {
       
   210     Q_ASSERT(engine);
       
   211     Q_ASSERT(scriptClass);
       
   212 
       
   213     QScriptEnginePrivate *p = static_cast<QScriptEnginePrivate *>(QObjectPrivate::get(engine)); 
       
   214     QScript::APIShim shim(p);
       
   215 
       
   216     JSC::ExecState* exec = p->currentFrame;
       
   217     QScriptObject *result = new (exec) QScriptObject(p->scriptObjectStructure);
       
   218     result->setDelegate(new QScript::DeclarativeObjectDelegate(scriptClass, object));
       
   219     return jscToValue(JSC::JSValue(result));
       
   220 }
       
   221 
    85 QScriptDeclarativeClass *QScriptDeclarativeClass::scriptClass(const QScriptValue &v)
   222 QScriptDeclarativeClass *QScriptDeclarativeClass::scriptClass(const QScriptValue &v)
    86 {
   223 {
    87     QScriptValuePrivate *d = QScriptValuePrivate::get(v);
   224     QScriptValuePrivate *d = QScriptValuePrivate::get(v);
    88     if (!d || !d->isJSC() || !d->jscValue.inherits(&QScriptObject::info))
   225     if (!d || !d->isJSC())
    89         return 0;
   226         return 0;
    90     QScriptObject *scriptObject = static_cast<QScriptObject*>(JSC::asObject(d->jscValue));
   227     return QScriptEnginePrivate::declarativeClass(d->jscValue);
    91     QScriptObjectDelegate *delegate = scriptObject->delegate();
   228 }
    92     if (!delegate || (delegate->type() != QScriptObjectDelegate::DeclarativeClassObject))
   229 
       
   230 QScriptDeclarativeClass::Object *QScriptDeclarativeClass::object(const QScriptValue &v)
       
   231 {
       
   232     QScriptValuePrivate *d = QScriptValuePrivate::get(v);
       
   233     if (!d || !d->isJSC())
    93         return 0;
   234         return 0;
    94     return static_cast<QScript::DeclarativeObjectDelegate*>(delegate)->scriptClass();
   235     return QScriptEnginePrivate::declarativeObject(d->jscValue);
    95 }
       
    96 
       
    97 QScriptDeclarativeClass::Object *QScriptDeclarativeClass::object(const QScriptValue &v)
       
    98 {
       
    99     QScriptValuePrivate *d = QScriptValuePrivate::get(v);
       
   100     if (!d || !d->isJSC() || !d->jscValue.inherits(&QScriptObject::info))
       
   101         return 0;
       
   102     QScriptObject *scriptObject = static_cast<QScriptObject*>(JSC::asObject(d->jscValue));
       
   103     QScriptObjectDelegate *delegate = scriptObject->delegate();
       
   104     if (!delegate || (delegate->type() != QScriptObjectDelegate::DeclarativeClassObject))
       
   105         return 0;
       
   106     return static_cast<QScript::DeclarativeObjectDelegate*>(delegate)->object();
       
   107 }
   236 }
   108 
   237 
   109 QScriptValue QScriptDeclarativeClass::function(const QScriptValue &v, const Identifier &name)
   238 QScriptValue QScriptDeclarativeClass::function(const QScriptValue &v, const Identifier &name)
   110 {
   239 {
   111     QScriptValuePrivate *d = QScriptValuePrivate::get(v);
   240     QScriptValuePrivate *d = QScriptValuePrivate::get(v);
   112 
   241 
   113     if (!d->isObject())
   242     if (!d->isObject())
   114         return QScriptValue();
   243         return QScriptValue();
   115 
   244 
       
   245     QScript::APIShim shim(d->engine);
   116     JSC::ExecState *exec = d->engine->currentFrame;
   246     JSC::ExecState *exec = d->engine->currentFrame;
   117     JSC::JSObject *object = d->jscValue.getObject();
   247     JSC::JSObject *object = d->jscValue.getObject();
   118     JSC::PropertySlot slot(const_cast<JSC::JSObject*>(object));
   248     JSC::PropertySlot slot(const_cast<JSC::JSObject*>(object));
   119     JSC::JSValue result;
   249     JSC::JSValue result;
   120 
   250 
   134     QScriptValuePrivate *d = QScriptValuePrivate::get(v);
   264     QScriptValuePrivate *d = QScriptValuePrivate::get(v);
   135 
   265 
   136     if (!d->isObject())
   266     if (!d->isObject())
   137         return QScriptValue();
   267         return QScriptValue();
   138 
   268 
       
   269     QScript::APIShim shim(d->engine);
   139     JSC::ExecState *exec = d->engine->currentFrame;
   270     JSC::ExecState *exec = d->engine->currentFrame;
   140     JSC::JSObject *object = d->jscValue.getObject();
   271     JSC::JSObject *object = d->jscValue.getObject();
   141     JSC::PropertySlot slot(const_cast<JSC::JSObject*>(object));
   272     JSC::PropertySlot slot(const_cast<JSC::JSObject*>(object));
   142     JSC::JSValue result;
   273     JSC::JSValue result;
   143 
   274 
   147         result = slot.getValue(exec, id);
   278         result = slot.getValue(exec, id);
   148         return d->engine->scriptValueFromJSCValue(result);
   279         return d->engine->scriptValueFromJSCValue(result);
   149     }
   280     }
   150 
   281 
   151     return QScriptValue();
   282     return QScriptValue();
       
   283 }
       
   284 
       
   285 QScriptDeclarativeClass::Value
       
   286 QScriptDeclarativeClass::functionValue(const QScriptValue &v, const Identifier &name)
       
   287 {
       
   288     QScriptValuePrivate *d = QScriptValuePrivate::get(v);
       
   289 
       
   290     if (!d->isObject())
       
   291         return Value();
       
   292 
       
   293     QScript::APIShim shim(d->engine);
       
   294     JSC::ExecState *exec = d->engine->currentFrame;
       
   295     JSC::JSObject *object = d->jscValue.getObject();
       
   296     JSC::PropertySlot slot(const_cast<JSC::JSObject*>(object));
       
   297     JSC::JSValue result;
       
   298 
       
   299     JSC::Identifier id(exec, (JSC::UString::Rep *)name);
       
   300 
       
   301     if (const_cast<JSC::JSObject*>(object)->getOwnPropertySlot(exec, id, slot)) {
       
   302         result = slot.getValue(exec, id);
       
   303         if (QScript::isFunction(result))
       
   304             return jscToValue(result);
       
   305     }
       
   306 
       
   307     return Value();
       
   308 }
       
   309 
       
   310 QScriptDeclarativeClass::Value
       
   311 QScriptDeclarativeClass::propertyValue(const QScriptValue &v, const Identifier &name)
       
   312 {
       
   313     QScriptValuePrivate *d = QScriptValuePrivate::get(v);
       
   314 
       
   315     if (!d->isObject())
       
   316         return Value();
       
   317 
       
   318     QScript::APIShim shim(d->engine);
       
   319     JSC::ExecState *exec = d->engine->currentFrame;
       
   320     JSC::JSObject *object = d->jscValue.getObject();
       
   321     JSC::PropertySlot slot(const_cast<JSC::JSObject*>(object));
       
   322     JSC::JSValue result;
       
   323 
       
   324     JSC::Identifier id(exec, (JSC::UString::Rep *)name);
       
   325 
       
   326     if (const_cast<JSC::JSObject*>(object)->getOwnPropertySlot(exec, id, slot)) {
       
   327         result = slot.getValue(exec, id);
       
   328         return jscToValue(result);
       
   329     }
       
   330 
       
   331     return Value();
   152 }
   332 }
   153 
   333 
   154 /*
   334 /*
   155 Returns the scope chain entry at \a index.  If index is less than 0, returns
   335 Returns the scope chain entry at \a index.  If index is less than 0, returns
   156 entries starting at the end.  For example, scopeChainValue(context, -1) will return
   336 entries starting at the end.  For example, scopeChainValue(context, -1) will return
   159 QScriptValue QScriptDeclarativeClass::scopeChainValue(QScriptContext *context, int index)
   339 QScriptValue QScriptDeclarativeClass::scopeChainValue(QScriptContext *context, int index)
   160 {
   340 {
   161     context->activationObject(); //ensure the creation of the normal scope for native context
   341     context->activationObject(); //ensure the creation of the normal scope for native context
   162     const JSC::CallFrame *frame = QScriptEnginePrivate::frameForContext(context);
   342     const JSC::CallFrame *frame = QScriptEnginePrivate::frameForContext(context);
   163     QScriptEnginePrivate *engine = QScript::scriptEngineFromExec(frame);
   343     QScriptEnginePrivate *engine = QScript::scriptEngineFromExec(frame);
       
   344     QScript::APIShim shim(engine);
   164 
   345 
   165     JSC::ScopeChainNode *node = frame->scopeChain();
   346     JSC::ScopeChainNode *node = frame->scopeChain();
   166     JSC::ScopeChainIterator it(node);
   347     JSC::ScopeChainIterator it(node);
   167 
   348 
   168     if (index < 0) {
   349     if (index < 0) {
   219 {
   400 {
   220     if (!engine)
   401     if (!engine)
   221         return 0;
   402         return 0;
   222 
   403 
   223     QScriptEnginePrivate *d = QScriptEnginePrivate::get(engine);
   404     QScriptEnginePrivate *d = QScriptEnginePrivate::get(engine);
       
   405     QScript::APIShim shim(d);
   224 
   406 
   225     JSC::CallFrame* newFrame = d->pushContext(d->currentFrame, 
   407     JSC::CallFrame* newFrame = d->pushContext(d->currentFrame, 
   226                                               d->currentFrame->globalData().dynamicGlobalObject,
   408                                               d->currentFrame->globalData().dynamicGlobalObject,
   227                                               JSC::ArgList(), /*callee = */0, false, true);
   409                                               JSC::ArgList(), /*callee = */0, false, true);
   228 
   410 
   239 QScriptEngine *QScriptDeclarativeClass::engine() const
   421 QScriptEngine *QScriptDeclarativeClass::engine() const
   240 {
   422 {
   241     return d_ptr->engine;
   423     return d_ptr->engine;
   242 }
   424 }
   243 
   425 
       
   426 bool QScriptDeclarativeClass::supportsCall() const
       
   427 {
       
   428     return d_ptr->supportsCall;
       
   429 }
       
   430 
       
   431 void QScriptDeclarativeClass::setSupportsCall(bool c)
       
   432 {
       
   433     d_ptr->supportsCall = c;
       
   434 }
       
   435 
   244 QScriptDeclarativeClass::PersistentIdentifier 
   436 QScriptDeclarativeClass::PersistentIdentifier 
   245 QScriptDeclarativeClass::createPersistentIdentifier(const QString &str)
   437 QScriptDeclarativeClass::createPersistentIdentifier(const QString &str)
   246 {
   438 {
   247     QScriptEnginePrivate *p = 
   439     QScriptEnginePrivate *p = 
   248         static_cast<QScriptEnginePrivate *>(QObjectPrivate::get(d_ptr->engine)); 
   440         static_cast<QScriptEnginePrivate *>(QObjectPrivate::get(d_ptr->engine)); 
       
   441     QScript::APIShim shim(p);
   249     JSC::ExecState* exec = p->currentFrame;
   442     JSC::ExecState* exec = p->currentFrame;
   250 
   443 
   251     PersistentIdentifier rv(true);
   444     PersistentIdentifier rv(p);
   252     new (&rv.d) JSC::Identifier(exec, (UChar *)str.constData(), str.size());
   445     new (&rv.d) JSC::Identifier(exec, (UChar *)str.constData(), str.size());
   253     rv.identifier = (void *)((JSC::Identifier &)rv.d).ustring().rep();
   446     rv.identifier = (void *)((JSC::Identifier &)rv.d).ustring().rep();
   254     return rv;
   447     return rv;
   255 }
   448 }
   256 
   449 
   257 QScriptDeclarativeClass::PersistentIdentifier 
   450 QScriptDeclarativeClass::PersistentIdentifier 
   258 QScriptDeclarativeClass::createPersistentIdentifier(const Identifier &id)
   451 QScriptDeclarativeClass::createPersistentIdentifier(const Identifier &id)
   259 {
   452 {
   260     QScriptEnginePrivate *p = 
   453     QScriptEnginePrivate *p = 
   261         static_cast<QScriptEnginePrivate *>(QObjectPrivate::get(d_ptr->engine)); 
   454         static_cast<QScriptEnginePrivate *>(QObjectPrivate::get(d_ptr->engine)); 
       
   455     QScript::APIShim shim(p);
   262     JSC::ExecState* exec = p->currentFrame;
   456     JSC::ExecState* exec = p->currentFrame;
   263 
   457 
   264     PersistentIdentifier rv(true);
   458     PersistentIdentifier rv(p);
   265     new (&rv.d) JSC::Identifier(exec, (JSC::UString::Rep *)id);
   459     new (&rv.d) JSC::Identifier(exec, (JSC::UString::Rep *)id);
   266     rv.identifier = (void *)((JSC::Identifier &)rv.d).ustring().rep();
   460     rv.identifier = (void *)((JSC::Identifier &)rv.d).ustring().rep();
   267     return rv;
   461     return rv;
   268 }
   462 }
   269 
   463 
   288     Q_UNUSED(name);
   482     Q_UNUSED(name);
   289     Q_UNUSED(flags);
   483     Q_UNUSED(flags);
   290     return 0;
   484     return 0;
   291 }
   485 }
   292 
   486 
   293 QScriptValue QScriptDeclarativeClass::property(Object *object, const Identifier &name)
   487 QScriptDeclarativeClass::Value
       
   488 QScriptDeclarativeClass::property(Object *object, const Identifier &name)
   294 {
   489 {
   295     Q_UNUSED(object);
   490     Q_UNUSED(object);
   296     Q_UNUSED(name);
   491     Q_UNUSED(name);
   297     return QScriptValue();
   492     return Value();
   298 }
   493 }
   299 
   494 
   300 void QScriptDeclarativeClass::setProperty(Object *object, const Identifier &name, 
   495 void QScriptDeclarativeClass::setProperty(Object *object, const Identifier &name, 
   301                                           const QScriptValue &value)
   496                                           const QScriptValue &value)
   302 {
   497 {
   311     Q_UNUSED(object);
   506     Q_UNUSED(object);
   312     Q_UNUSED(name);
   507     Q_UNUSED(name);
   313     return 0;
   508     return 0;
   314 }
   509 }
   315 
   510 
       
   511 QScriptDeclarativeClass::Value QScriptDeclarativeClass::call(Object *object, 
       
   512                                                              QScriptContext *ctxt)
       
   513 {
       
   514     Q_UNUSED(object);
       
   515     Q_UNUSED(ctxt);
       
   516     return Value();
       
   517 }
       
   518 
       
   519 bool QScriptDeclarativeClass::compare(Object *o, Object *o2)
       
   520 {
       
   521     return o == o2;
       
   522 }
       
   523 
   316 QStringList QScriptDeclarativeClass::propertyNames(Object *object)
   524 QStringList QScriptDeclarativeClass::propertyNames(Object *object)
   317 {
   525 {
   318     Q_UNUSED(object);
   526     Q_UNUSED(object);
   319     return QStringList();
   527     return QStringList();
   320 }
   528 }