ASFUNCTIONBODY(ExternalInterface,_getObjectID) { if(getSys()->extScriptObject == NULL) return Class<ASString>::getInstanceS(""); ExtVariant* object = getSys()->extScriptObject->getProperty("name"); if(object == NULL) return Class<ASString>::getInstanceS(""); std::string result = object->getString(); delete object; return Class<ASString>::getInstanceS(result); }
ExtVariant::ExtVariant(const ExtVariant& other) { type = other.getType(); strValue = other.getString(); intValue = other.getInt(); doubleValue = other.getDouble(); booleanValue = other.getBoolean(); objectValue = *other.getObject(); }
void NPVariantObject::ExtVariantToNPVariant(std::map<const ExtObject*, NPObject*>& objectsMap, NPP _instance, const ExtVariant& value, NPVariant& variant) { switch(value.getType()) { case EV_STRING: { const std::string& strValue = value.getString(); NPUTF8* newValue = static_cast<NPUTF8*>(NPN_MemAlloc(strValue.size())); memcpy(newValue, strValue.c_str(), strValue.size()); STRINGN_TO_NPVARIANT(newValue, strValue.size(), variant); break; } case EV_INT32: INT32_TO_NPVARIANT(value.getInt(), variant); break; case EV_DOUBLE: DOUBLE_TO_NPVARIANT(value.getDouble(), variant); break; case EV_BOOLEAN: BOOLEAN_TO_NPVARIANT(value.getBoolean(), variant); break; case EV_OBJECT: { lightspark::ExtObject* obj = value.getObject(); OBJECT_TO_NPVARIANT(NPObjectObject::getNPObject(objectsMap, _instance, obj), variant); break; } case EV_NULL: NULL_TO_NPVARIANT(variant); break; case EV_VOID: default: VOID_TO_NPVARIANT(variant); break; } }
// Conversion to ASObject ASObject* ExtVariant::getASObject() const { ASObject* asobj; switch(getType()) { case EV_STRING: asobj = Class<ASString>::getInstanceS(getString().c_str()); break; case EV_INT32: asobj = abstract_i(getInt()); break; case EV_DOUBLE: asobj = abstract_d(getDouble()); break; case EV_BOOLEAN: asobj = abstract_b(getBoolean()); break; case EV_OBJECT: { ExtObject* objValue = getObject(); ExtVariant* property; uint32_t count; // We are converting an array, so lets set indexes if(objValue->getType() == ExtObject::EO_ARRAY) { asobj = Class<Array>::getInstanceS(); count = objValue->getLength(); static_cast<Array*>(asobj)->resize(count); for(uint32_t i = 0; i < count; i++) { property = objValue->getProperty(i); static_cast<Array*>(asobj)->set(i, property->getASObject()); delete property; } } // We are converting an object, so lets set variables else { asobj = Class<ASObject>::getInstanceS(); ExtIdentifier** ids; uint32_t count; std::stringstream conv; if(objValue != NULL && objValue->enumerate(&ids, &count)) { for(uint32_t i = 0; i < count; i++) { property = objValue->getProperty(*ids[i]); if(ids[i]->getType() == ExtIdentifier::EI_STRING) { asobj->setVariableByQName(ids[i]->getString(), "", property->getASObject(), DYNAMIC_TRAIT); } else { conv << ids[i]->getInt(); asobj->setVariableByQName(conv.str().c_str(), "", property->getASObject(), DYNAMIC_TRAIT); } delete property; delete ids[i]; } } delete ids; } if(objValue != NULL) delete objValue; } break; case EV_NULL: asobj = new Null; break; case EV_VOID: default: asobj = new Undefined; break; } return asobj; }