ExtVariant::ExtVariant(_R<ASObject> other) : strValue(""), intValue(0), doubleValue(0), booleanValue(false) { switch(other->getObjectType()) { case T_STRING: strValue = other->toString().raw_buf(); type = EV_STRING; break; case T_INTEGER: intValue = other->toInt(); type = EV_INT32; break; case T_NUMBER: doubleValue = other->toNumber(); type = EV_DOUBLE; break; case T_BOOLEAN: booleanValue = Boolean_concrete(other.getPtr()); type = EV_BOOLEAN; break; case T_ARRAY: objectValue.setType(ExtObject::EO_ARRAY); case T_OBJECT: type = EV_OBJECT; { unsigned int index = 0; while((index=other->nextNameIndex(index))!=0) { _R<ASObject> nextName=other->nextName(index); _R<ASObject> nextValue=other->nextValue(index); if(nextName->getObjectType() == T_INTEGER) objectValue.setProperty(nextName->toInt(), nextValue); else objectValue.setProperty(nextName->toString().raw_buf(), nextValue); } } break; case T_NULL: type = EV_NULL; break; case T_UNDEFINED: default: type = EV_VOID; break; } }