Ejemplo n.º 1
0
void QSRegExpClass::write(QSObject *objPtr, const QSMember &mem,
			  const QSObject &val ) const
{
    if (mem.type() != QSMember::Custom) {
	QSWritableClass::write(objPtr, mem, val);
	return;
    }

    Q_ASSERT(objPtr->objectType() == objPtr->objectType()->env()->regexpClass());

    switch (mem.index()) {
    case Source:
	((QSRegExpShared*)objPtr->shVal())->source = val.toString();
	break;
    case Global:
	((QSRegExpShared*)objPtr->shVal())->global = val.toBoolean();
	break;
    case IgnoreCase:
	{
	    bool ic = val.toBoolean();
	    ((QSRegExpShared*)objPtr->shVal())->ignoreCase = ic;
	    ((QSRegExpShared*)objPtr->shVal())->reg.setCaseSensitive(!ic);
	}
	break;
    default:
	QSWritableClass::write(objPtr, mem, val);
    }
}
Ejemplo n.º 2
0
void QSRectClass::write(QSObject *o, const QSMember &mem,
                        const QSObject &val) const
{
  if (mem.type() == QSMember::Custom) {
    int i = val.toInteger();
    switch (mem.idx) {
      case 0:
      case 1:
        rect(o)->setX(i);
        break;
      case 2:
      case 3:
        rect(o)->setY(i);
        break;
      case 4:
        rect(o)->setWidth(i);
        break;
      case 5:
        rect(o)->setHeight(i);
        break;
      case 6:
        rect(o)->setRight(i);
        break;
      case 7:
        rect(o)->setBottom(i);
        break;
      case 8:
        break;
      default:
        qFatal("QSRectClass::write: unhandled case");
    }
  } else {
    QSClass::write(o, mem, val);
  }
}
Ejemplo n.º 3
0
QSObject QSRegExpClass::fetchValue( const QSObject *objPtr,
				    const QSMember &mem ) const
{
    if ( mem.type() != QSMember::Custom )
	return QSWritableClass::fetchValue( objPtr, mem );

    QRegExp *re = regExp( objPtr );
    switch ( mem.index() ) {
    case Valid:
	return createBoolean( re->isValid() );
    case Empty:
	return createBoolean( re->isEmpty() );
    case MLength:
	return createNumber( re->matchedLength() );
    case Source:
	return createString( source(objPtr) );
    case Global:
	return createBoolean( isGlobal(objPtr) );
    case IgnoreCase:
	return createBoolean( isIgnoreCase(objPtr) );
    case CTexts: {
 	QSArray array( env() );
 	QStringList ct = re->capturedTexts();
 	QStringList::ConstIterator it = ct.begin();
 	int i = 0;
 	for ( ; it != ct.end(); ++it, ++i )
 	    array.put( QString::number( i ), createString( *it ) );
	array.put( QString::fromLatin1("length"), createNumber( i ) );
 	return array;
    }
    default:
	return createUndefined();
    }
}
Ejemplo n.º 4
0
QSObject QSRectClass::fetchValue(const QSObject *o,
                                 const QSMember &mem) const
{
  if (mem.type() == QSMember::Custom) {
    switch (mem.idx) {
      case 0:
      case 1:
        return createNumber(rect(o)->x());
      case 2:
      case 3:
        return createNumber(rect(o)->y());
      case 4:
        return createNumber(rect(o)->width());
      case 5:
        return createNumber(rect(o)->height());
      case 6:
        return createNumber(rect(o)->right());
      case 7:
        return createNumber(rect(o)->bottom());
      case 8:
        return pointClass()->construct(rect(o)->center());
      default:
        qFatal("QSRectClass::fetchValue: unhandled case");
        return createUndefined();
    }
  }
  return QSClass::fetchValue(o, mem);
}
Ejemplo n.º 5
0
// ECMA 8.6.2.5
bool QSObject::deleteProperty(const QString &p)
{
  QSMember mem;
  if (!objectType()->member(this, p, &mem) ||
      mem.type() == QSMember::Identifier)
    return TRUE;
  return objectType()->deleteProperty(this, mem);
}
Ejemplo n.º 6
0
static bool hasMember(QSEnv *env, const QString &function, QSMember::Type type)
{
    QSObject o = env->globalObject();
    QSMember member;
    QStringList names = function.split(QString::fromLatin1("."));
    int nameCount = names.count();
    for (QStringList::ConstIterator it = names.begin(); it != names.end(); ++it, --nameCount) {
	if (nameCount==1) {
	    if (o.objectType() == env->typeClass())
		return QSTypeClass::classValue(&o)->member(0, *it, &member)
		    && member.type() == type;
	    else if (o.objectType()->member(&o, *it, &member))
		return o.objectType()->member(0, *it, &member) && member.type() == type;
	} else {
	    o = o.get(*it);
	    if (!o.isValid())
		return false;
	}
    }
    return false;
}
Ejemplo n.º 7
0
QSObject QSStringClass::fetchValue( const QSObject *objPtr,
				    const QSMember &mem ) const
{
    if ( mem.type() == QSMember::Custom )
	if ( mem.idx == 0 ) {
	    return createNumber( objPtr->sVal().length() );
	} else {
	    qFatal( "QSStringClass::fetchValue: unhandled member" );
	    return createUndefined();
	}
    else
	return QSClass::fetchValue( objPtr, mem );
}
Ejemplo n.º 8
0
QSObject QSPointClass::fetchValue(const QSObject *obj,
                                  const QSMember &mem) const
{
  if (mem.type() == QSMember::Custom) {
    switch (mem.idx) {
      case 0:
        return createNumber(point(obj)->x());
      case 1:
        return createNumber(point(obj)->y());
      default:
        qFatal("QSPointClass::fetchValue: unhandled case");
        return createUndefined();
    }
  }
  return QSClass::fetchValue(obj, mem);
}
Ejemplo n.º 9
0
QSObject QSSizeClass::fetchValue(const QSObject *objPtr,
                                 const QSMember &mem) const
{
  if (mem.type() == QSMember::Custom) {
    switch (mem.idx) {
      case 0:
        return createNumber(size(objPtr)->width());
      case 1:
        return createNumber(size(objPtr)->height());
      default:
        qFatal("QSSizeClass::fetchValue, unhandled case");
        return createUndefined();
    }
  }
  return QSClass::fetchValue(objPtr, mem);
}
Ejemplo n.º 10
0
void QSPointClass::write(QSObject *objPtr, const QSMember &mem,
                         const QSObject &val) const
{
  if (mem.type() == QSMember::Custom) {
    switch (mem.idx) {
      case 0:
        point(objPtr)->setX(val.toInteger());
        break;
      case 1:
        point(objPtr)->setY(val.toInteger());
        break;
      default:
        qDebug("QSPointClass::write() Unhandled case");
    }
  } else {
    QSClass::write(objPtr, mem, val);
  }
}
Ejemplo n.º 11
0
QSObject QSEnv::resolveValue(const QString &ident) const
{
    Q_ASSERT(!ident.isEmpty());
    ScopeChain::const_iterator it = scopeChain->begin();
    QSMember mem;
    int offset;
    while (it != scopeChain->end() && (*it).isValid()) {
        offset = 0;
        const QSClass *cl = (*it).resolveMember(ident, &mem, (*it).objectType(), &offset);
        if (cl && mem.type() != QSMember::Identifier) {
            while (offset--)
                it++;
            return cl->fetchValue(&(*it), mem);
        }
        it++;
    }

    return QSObject();
}
Ejemplo n.º 12
0
void QSSizeClass::write(QSObject *objPtr, const QSMember &mem,
                        const QSObject &val) const
{
  if (mem.type() == QSMember::Custom) {
    switch (mem.idx) {
      case 0:
        size(objPtr)->setWidth(val.toInteger());
        break;
      case 1:
        size(objPtr)->setHeight(val.toInteger());
        break;
      default:
        qFatal("QSSizeClass::write, unhandled case");
        break;
    }
  } else {
    QSClass::write(objPtr, mem, val);
  }
}
Ejemplo n.º 13
0
void QSResolveNode::check( QSCheckData *c )
{
    if ( !c->directLookupEnabled() )
	return;
    QSClass * cl = c->currentScope();
    QSClass *cont = cl;
    int uplvl = 0;
    int blocks = 0;
    QSMember member;
    while ( cont ) {
	QSMember mem;
	if ( cont->member( 0, ident, &mem ) ) {
	    if ( mem.type()==QSMember::Variable && !mem.isStatic() ) {
		member = mem;
		break;
	    }
	}
	uplvl++;
	cont = cont->enclosingClass();
    }
    if( member.isDefined() ) {

	/* If the containing class has an undefined base, the indexes will be moved
	   when the we call QSAbstractBaseClass::replace() and the lookup info
	   will be crap. Therefore, we don't create it. */
	QSClass *tmp = cont->base();
	while (tmp) {
	    if (tmp->name() == QString::fromLatin1("AbstractBase"))
		return;
	    tmp = tmp->base();
	}

	// Due to special handling of block scopes in the global object...
	if( cont==c->env()->globalClass() )
 	    uplvl+=blocks;
   	info = new QSLookupInfo( uplvl, member );
    }
}
Ejemplo n.º 14
0
QSObject QSPixmapClass::fetchValue( const QSObject *obj,
				    const QSMember &mem ) const
{
    if ( mem.type() == QSMember::Custom ) {
	switch ( mem.index() ) {
	case Width:
	    return createNumber( pixmap( obj )->width() );
	case Height:
	    return createNumber( pixmap( obj )->height() );
	case Rect:
	    return rectClass()->construct( pixmap( obj )->rect() );
	case Size:
	    return sizeClass()->construct( pixmap( obj )->size() );
	case Depth:
	    return createNumber( pixmap( obj )->depth() );
	default:
	    qWarning( "QSPixmapClass::fetchValue: unhandled case" );
	    return createUndefined();
	}
    } else {
	return QSClass::fetchValue( obj, mem );
    }
}