22 ****************************************************************************/ |
22 ****************************************************************************/ |
23 |
23 |
24 #include "qscriptdeclarativeclass_p.h" |
24 #include "qscriptdeclarativeclass_p.h" |
25 #include "qscriptdeclarativeobject_p.h" |
25 #include "qscriptdeclarativeobject_p.h" |
26 #include "qscriptobject_p.h" |
26 #include "qscriptobject_p.h" |
|
27 #include "qscriptstaticscopeobject_p.h" |
27 #include <QtScript/qscriptstring.h> |
28 #include <QtScript/qscriptstring.h> |
28 #include <QtScript/qscriptengine.h> |
29 #include <QtScript/qscriptengine.h> |
29 #include <QtScript/qscriptengineagent.h> |
30 #include <QtScript/qscriptengineagent.h> |
30 #include <private/qscriptengine_p.h> |
31 #include <private/qscriptengine_p.h> |
31 #include <private/qscriptvalue_p.h> |
32 #include <private/qscriptvalue_p.h> |
547 QScriptContext *QScriptDeclarativeClass::context() const |
548 QScriptContext *QScriptDeclarativeClass::context() const |
548 { |
549 { |
549 return d_ptr->context; |
550 return d_ptr->context; |
550 } |
551 } |
551 |
552 |
|
553 /*! |
|
554 Creates a scope object with a fixed set of undeletable properties. |
|
555 */ |
|
556 QScriptValue QScriptDeclarativeClass::newStaticScopeObject( |
|
557 QScriptEngine *engine, int propertyCount, const QString *names, |
|
558 const QScriptValue *values, const QScriptValue::PropertyFlags *flags) |
|
559 { |
|
560 QScriptEnginePrivate *eng_p = QScriptEnginePrivate::get(engine); |
|
561 QScript::APIShim shim(eng_p); |
|
562 JSC::ExecState *exec = eng_p->currentFrame; |
|
563 QScriptStaticScopeObject::PropertyInfo *props = new QScriptStaticScopeObject::PropertyInfo[propertyCount]; |
|
564 for (int i = 0; i < propertyCount; ++i) { |
|
565 unsigned attribs = QScriptEnginePrivate::propertyFlagsToJSCAttributes(flags[i]); |
|
566 Q_ASSERT_X(attribs & JSC::DontDelete, Q_FUNC_INFO, "All properties must be undeletable"); |
|
567 JSC::Identifier id = JSC::Identifier(exec, names[i]); |
|
568 JSC::JSValue jsval = eng_p->scriptValueToJSCValue(values[i]); |
|
569 props[i] = QScriptStaticScopeObject::PropertyInfo(id, jsval, attribs); |
|
570 } |
|
571 QScriptValue result = eng_p->scriptValueFromJSCValue(new (exec)QScriptStaticScopeObject(eng_p->staticScopeObjectStructure, |
|
572 propertyCount, props)); |
|
573 delete[] props; |
|
574 return result; |
|
575 } |
|
576 |
|
577 /*! |
|
578 Creates a static scope object that's initially empty, but to which new |
|
579 properties can be added. |
|
580 */ |
|
581 QScriptValue QScriptDeclarativeClass::newStaticScopeObject(QScriptEngine *engine) |
|
582 { |
|
583 QScriptEnginePrivate *eng_p = QScriptEnginePrivate::get(engine); |
|
584 QScript::APIShim shim(eng_p); |
|
585 return eng_p->scriptValueFromJSCValue(new (eng_p->currentFrame)QScriptStaticScopeObject(eng_p->staticScopeObjectStructure)); |
|
586 } |
|
587 |
552 QT_END_NAMESPACE |
588 QT_END_NAMESPACE |