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 { |