src/script/bridge/qscriptdeclarativeobject.cpp
changeset 37 758a864f9613
parent 30 5dc02b23752f
equal deleted inserted replaced
36:ef0373b55136 37:758a864f9613
    86 void DeclarativeObjectDelegate::put(QScriptObject* object, JSC::ExecState *exec,
    86 void DeclarativeObjectDelegate::put(QScriptObject* object, JSC::ExecState *exec,
    87                                     const JSC::Identifier &propertyName,
    87                                     const JSC::Identifier &propertyName,
    88                                     JSC::JSValue value, JSC::PutPropertySlot &slot)
    88                                     JSC::JSValue value, JSC::PutPropertySlot &slot)
    89 {
    89 {
    90     QScriptEnginePrivate *engine = scriptEngineFromExec(exec);
    90     QScriptEnginePrivate *engine = scriptEngineFromExec(exec);
       
    91     QScript::SaveFrameHelper saveFrame(engine, exec);
    91     QScriptDeclarativeClass::Identifier identifier = (void *)propertyName.ustring().rep();
    92     QScriptDeclarativeClass::Identifier identifier = (void *)propertyName.ustring().rep();
    92 
    93 
    93     QScriptDeclarativeClassPrivate *p = QScriptDeclarativeClassPrivate::get(m_class);
    94     QScriptDeclarativeClassPrivate *p = QScriptDeclarativeClassPrivate::get(m_class);
    94     p->context = reinterpret_cast<QScriptContext *>(exec);
    95     p->context = reinterpret_cast<QScriptContext *>(exec);
    95     QScriptClass::QueryFlags flags = 
    96     QScriptClass::QueryFlags flags = 
   142         return JSC::throwError(exec, JSC::TypeError, "callee is not a DeclarativeObject object");
   143         return JSC::throwError(exec, JSC::TypeError, "callee is not a DeclarativeObject object");
   143 
   144 
   144     QScriptDeclarativeClass *scriptClass = static_cast<DeclarativeObjectDelegate*>(delegate)->m_class;
   145     QScriptDeclarativeClass *scriptClass = static_cast<DeclarativeObjectDelegate*>(delegate)->m_class;
   145     QScriptEnginePrivate *eng_p = scriptEngineFromExec(exec);
   146     QScriptEnginePrivate *eng_p = scriptEngineFromExec(exec);
   146 
   147 
   147     JSC::ExecState *oldFrame = eng_p->currentFrame;
   148     QScript::SaveFrameHelper saveFrame(eng_p, exec);
   148     eng_p->pushContext(exec, thisValue, args, callee);
   149     eng_p->pushContext(exec, thisValue, args, callee);
   149     QScriptContext *ctxt = eng_p->contextForFrame(eng_p->currentFrame);
   150     QScriptContext *ctxt = eng_p->contextForFrame(eng_p->currentFrame);
   150 
   151 
   151     QScriptValue scriptObject = eng_p->scriptValueFromJSCValue(obj);
   152     QScriptValue scriptObject = eng_p->scriptValueFromJSCValue(obj);
   152     QScriptDeclarativeClass::Value result = 
   153     QScriptDeclarativeClass::Value result = 
   153         scriptClass->call(static_cast<DeclarativeObjectDelegate*>(delegate)->m_object, ctxt);
   154         scriptClass->call(static_cast<DeclarativeObjectDelegate*>(delegate)->m_object, ctxt);
   154 
   155 
   155     eng_p->popContext();
   156     eng_p->popContext();
   156     eng_p->currentFrame = oldFrame;
       
   157     return (JSC::JSValue &)(result);
   157     return (JSC::JSValue &)(result);
   158 }
   158 }
   159 
   159 
   160 JSC::ConstructType DeclarativeObjectDelegate::getConstructData(QScriptObject* object, JSC::ConstructData &constructData)
   160 JSC::ConstructType DeclarativeObjectDelegate::getConstructData(QScriptObject* object, JSC::ConstructData &constructData)
   161 {
   161 {