src/script/bridge/qscriptdeclarativeclass.cpp
changeset 33 3e2da88830cd
parent 30 5dc02b23752f
equal deleted inserted replaced
30:5dc02b23752f 33:3e2da88830cd
    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