QSSizeClass::QSSizeClass(QSClass *b, QuickInterpreter *i) : QSSharedClass(b), QuickEnvClass(i) { addMember(QString::fromLatin1("width"), QSMember(QSMember::Custom, 0, AttributePublic)); addMember(QString::fromLatin1("height"), QSMember(QSMember::Custom, 1, AttributePublic)); addMember(QString::fromLatin1("transpose"), QSMember(&transpose)); }
QSMember QSFuncRefClass::refMember( const QSObject &ref ) { if( ref.isFunction() ) { return ( (QSReferenceData*) ref.shVal() )->member; } qWarning( "QSFuncRefClass::refMember() - not a reference" ); return QSMember(); }
QSPixmapClass::QSPixmapClass( QSClass *b, QuickInterpreter *i ) : QSSharedClass( b ), QuickEnvClass( i ) { addMember( QString::fromLatin1("width"), QSMember( QSMember::Custom, Width, AttributeNonWritable ) ); addMember( QString::fromLatin1("height"), QSMember( QSMember::Custom, Height, AttributeNonWritable ) ); addMember( QString::fromLatin1("rect"), QSMember( QSMember::Custom, Rect, AttributeNonWritable ) ); addMember( QString::fromLatin1("size"), QSMember( QSMember::Custom, Size, AttributeNonWritable ) ); addMember( QString::fromLatin1("depth"), QSMember( QSMember::Custom, Depth, AttributeNonWritable ) ); addMember( QString::fromLatin1("isNull"), QSMember( &isNull ) ); addMember( QString::fromLatin1("fill"), QSMember( &fill ) ); addMember( QString::fromLatin1("resize"), QSMember( &resize ) ); addMember( QString::fromLatin1("load"), QSMember( &load ) ); addMember( QString::fromLatin1("save"), QSMember( &save ) ); }
bool QSEngineImp::call( QSObject *scope, const QString &func, const QSList &args ) { init(); QSObject t; if ( !scope || !scope->isValid() ) { t = env()->globalObject(); scope = &t; } QSObject v = scope->getQualified(func); Q_ASSERT(v.isValid()); if ( !v.isDefined() ) { if (func != QString::fromLatin1("main")) { errType = ReferenceError; errMsgs.append( QString::fromLatin1("Unknown function: ") + func ); errLines.append( 0 ); } return false; } if ( !v.isFunction() ) { errType = TypeError; errMsgs.append( func + QString::fromLatin1(" is not a function. Call failed.") ); errLines.append( 0 ); return false; } QSObject res = v.invoke( QSMember(), args ); if ( env()->isExceptionMode() ) { QSObject err = env()->exception(); errType = 99; /* TODO */ errLines.append(QSErrorClass::errorLine(&err)); errMsgs.append(QSErrorClass::errorName(&err) + QString::fromLatin1(". ") + QSErrorClass::errorMessage(&err)); #ifdef QSDEBUGGER if (dbg) dbg->setSourceId(QSErrorClass::errorSourceId(&err)); #endif env()->clearException(); return false; } else { errType = 0; errLines.clear(); errMsgs.clear(); // return value retVal = res; return true; } }
void QSVarBindingNode::check( QSCheckData *c ) { var->check( c ); if ( assign ) assign->check( c ); if (!c->directLookupEnabled()) { c->addError( this, QString::fromLatin1( "QSA does not support declaring variables inside " "a 'with' block" )); return; } int attrs = c->lastAttributes(); QSClass * cl = c->currentScope(); QSMember m; if ( cl->member( 0, var->identifier(), &m ) ) { if( cl->asClass() ) { c->addError( this, QString::fromLatin1( "Variable '%1' has already been " "declared in class '%2'" ) .arg( var->identifier() ) .arg( cl->identifier() ) ); return; } m = QSMember( QSMember::Variable, 0, attrs ); cl->replaceMember( var->identifier(), &m ); idx = m.index(); } else { idx = cl->addVariableMember( var->identifier(), attrs ); } // store pointer to init node if this is a class member QSClassClass *clcl = cl->asClass(); if ( clcl ) { if( attrs & AttributeStatic ) clcl->addStaticInitializer( assign ); else clcl->addMemberInitializer( assign ); idx = -1; // Disable the variable binding node. } }
QSRegExpClass::QSRegExpClass( QSClass *b ) : QSWritableClass( b ) { int a = AttributeNonWritable; addMember( QString::fromLatin1("valid"), QSMember( QSMember::Custom, Valid, a ) ); addMember( QString::fromLatin1("empty"), QSMember( QSMember::Custom, Empty, a ) ); addMember( QString::fromLatin1("matchedLength"), QSMember( QSMember::Custom, MLength, a ) ); addMember( QString::fromLatin1("capturedTexts"), QSMember( QSMember::Custom, CTexts, a ) ); addMember( QString::fromLatin1("source"), QSMember( QSMember::Custom, Source, a ) ); addMember( QString::fromLatin1("global"), QSMember( QSMember::Custom, Global, AttributePublic ) ); addMember( QString::fromLatin1("ignoreCase"), QSMember( QSMember::Custom, IgnoreCase, AttributePublic ) ); addMember( QString::fromLatin1("toString"), QSMember( &QSRegExpClass::toStringScript ) ); addMember( QString::fromLatin1("search"), QSMember( &search ) ); addMember( QString::fromLatin1("searchRev"), QSMember( &searchRev ) ); addMember( QString::fromLatin1("exactMatch"), QSMember( &exactMatch ) ); addMember( QString::fromLatin1("pos"), QSMember( &pos ) ); addMember( QString::fromLatin1("cap"), QSMember( &cap ) ); }
void QSObjectClass::init() { addMember( QString::fromLatin1("toString"), QSMember( &QSObjectClass::toStringScript ) ); addMember( QString::fromLatin1("valueOf"), QSMember( &QSObjectClass::valueOf ) ); }
void QuickInterpreter::init() { m_dynamic_slots = new QSMetaObject(this); qsa_setup_meta_objects(); debuggerEngine()->clear(); staticGlobals.clear(); staticGlobals << QString::fromLatin1("NaN") << QString::fromLatin1("undefined") << QString::fromLatin1("Infinity") << QString::fromLatin1("Application"); // add some common objects to the Global object QSObject global(env()->globalObject()); QSClass *objClass = env()->objectClass(); wrpClass = new QSWrapperClass(objClass); ptrClass = new QSPointerClass(objClass); varClass = new QSVariantClass(objClass); appClass = new QSApplicationClass(objClass); global.put(QString::fromLatin1("Application"), appClass->createWritable()); pntClass = new QSPointClass(objClass, this); registerType(pntClass); sizClass = new QSSizeClass(objClass, this); registerType(sizClass); rctClass = new QSRectClass(objClass, this); registerType(rctClass); baClass = new QSByteArrayClass(objClass); registerType(baClass); #ifndef QSA_NO_GUI colClass = new QSColorClass(objClass); registerType(colClass); fntClass = new QSFontClass(objClass); registerType(fntClass); pixClass = new QSPixmapClass(objClass, this); registerType(pixClass); palClass = new QSPaletteClass(objClass); registerType(palClass); colGrpClass = new QSColorGroupClass(objClass); registerType(colGrpClass); #endif enableDebug(); // adds "debug" function which uses qDebug() // // env()->globalClass()->addMember(QString::fromLatin1("connect"), QSMember(qsa_connect)); env()->globalClass()->addMember(QString::fromLatin1("disconnect"), QSMember(qsa_disconnect)); env()->globalClass()->addMember(QString::fromLatin1("startTimer"), QSMember(qsStartTimer)); env()->globalClass()->addMember(QString::fromLatin1("killTimer"), QSMember(qsKillTimer)); env()->globalClass()->addMember(QString::fromLatin1("killTimers"), QSMember(qsKillTimers)); QMap<QString,QObject*> statDescr = factory->staticDescriptors(); QMap<QString,QString> instDescr = factory->instanceDescriptors(); QList<QString> features = instDescr.keys(); for (QList<QString>::ConstIterator it = features.begin(); it != features.end(); ++it) { if (env()->globalClass()->definedMembers()->contains(*it)) { qWarning("QSObjectFactory: Trying to register existing class: '%s'", (*it).toLatin1().constData()); continue; } QSObject staticInst; if(statDescr.contains(*it)) { // has static? QObject *sinst = statDescr[ *it ]; Q_ASSERT(sinst); staticInst = wrap(sinst); statDescr.remove(*it); } QSObjectConstructor *constr = new QSObjectConstructor(objClass, *it); QSFactoryObjectProxy *ptype = new QSFactoryObjectProxy(env()->typeClass(), staticInst, constr); constr->setFactoryObjectProxy(ptype); QSObject proxy(ptype, env()->typeClass()->createTypeShared(constr)); env()->globalClass()->addStaticVariableMember(constr->identifier(), proxy, AttributeExecutable); } for(QMap<QString,QObject*>::ConstIterator sit = statDescr.begin(); sit != statDescr.end(); ++sit) { if (env()->globalClass()->definedMembers()->contains(sit.key())) { qWarning("QSObjectFactory: Trying to register existing class: '%s'", sit.key().toLatin1().constData()); continue; } QSObject staticInst; QObject *sinst = statDescr[ sit.key() ]; Q_ASSERT(sinst); staticInst = wrap(sinst); env()->globalClass()->addStaticVariableMember(sit.key(), staticInst, AttributeNone); } }
QSPointClass::QSPointClass(QSClass *b, QuickInterpreter *i) : QSSharedClass(b), QuickEnvClass(i) { addMember(QString::fromLatin1("x"), QSMember(QSMember::Custom, 0, AttributePublic)); addMember(QString::fromLatin1("y"), QSMember(QSMember::Custom, 1, AttributePublic)); }
QSRectClass::QSRectClass(QSClass *b, QuickInterpreter *i) : QSSharedClass(b), QuickEnvClass(i) { addMember(QString::fromLatin1("x"), QSMember(QSMember::Custom, 0, AttributePublic)); addMember(QString::fromLatin1("left"), QSMember(QSMember::Custom, 1, AttributePublic)); addMember(QString::fromLatin1("y"), QSMember(QSMember::Custom, 2, AttributePublic)); addMember(QString::fromLatin1("top"), QSMember(QSMember::Custom, 3, AttributePublic)); addMember(QString::fromLatin1("width"), QSMember(QSMember::Custom, 4, AttributePublic)); addMember(QString::fromLatin1("height"), QSMember(QSMember::Custom, 5, AttributePublic)); addMember(QString::fromLatin1("right"), QSMember(QSMember::Custom, 6, AttributePublic)); addMember(QString::fromLatin1("bottom"), QSMember(QSMember::Custom, 7, AttributePublic)); addMember(QString::fromLatin1("center"), QSMember(QSMember::Custom, 8, AttributePublic)); addMember(QString::fromLatin1("isNull"), QSMember(&isNull)); addMember(QString::fromLatin1("isEmpty"), QSMember(&isEmpty)); addMember(QString::fromLatin1("contains"), QSMember(&contains)); addMember(QString::fromLatin1("intersection"), QSMember(&intersection)); addMember(QString::fromLatin1("union"), QSMember(&union_)); addMember(QString::fromLatin1("intersects"), QSMember(&intersects)); addMember(QString::fromLatin1("normalize"), QSMember(&normalize)); addMember(QString::fromLatin1("moveLeft"), QSMember(&moveLeft)); addMember(QString::fromLatin1("moveRight"), QSMember(&moveRight)); addMember(QString::fromLatin1("moveTop"), QSMember(&moveTop)); addMember(QString::fromLatin1("moveBottom"), QSMember(&moveBottom)); addMember(QString::fromLatin1("moveBy"), QSMember(&moveBy)); }