void typeLVALUE(LVALUE* l) { if(l == NULL) return; if(l->id2 == NULL) /* identifier */ { l->type = getRealType(l->id1->symbol->type); } else /* identifier.identifier */ { l->type = getRealType(l->id2->symbol->type); } }
//---------------------------------------------------------------------- bool AnyAide::isDouble(const CORBA::Any& any) { //basically just delegate the call to another helper function //and include a check against the type. return (getRealType(any)==CORBA::tk_double); }
//---------------------------------------------------------------------- std::string AnyAide::getId(const CORBA::Any& any) { CORBA::TCKind kind = getRealType(any); //great - the identifier is already provided if ((kind==CORBA::tk_objref) || (kind==CORBA::tk_struct) || (kind==CORBA::tk_union) || (kind==CORBA::tk_enum) || (kind==CORBA::tk_except)) { //have to create an _var type because this is actually a CORBA object CORBA::TypeCode_var tc; //get the type from the any tc = any.type(); return std::string(tc->id()); } else if(kind==CORBA::tk_null) { return nullType_m; } else if(kind==CORBA::tk_string) { return stringType_m; } else if(kind==CORBA::tk_double) { return doubleType_m; } else if(kind==CORBA::tk_long) { return longType_m; } else if(kind==CORBA::tk_ulong) { return uLongType_m; } else if(kind==CORBA::tk_longlong) { return longLongType_m; } else if(kind==CORBA::tk_ulonglong) { return uLongLongType_m; } else if(kind==CORBA::tk_float) { return floatType_m; } //aliases can be ... else if(kind==CORBA::tk_alias) { //first get a hold of the IFR id CORBA::TypeCode_var tc; //get the type from the any tc = any.type(); return std::string(tc->id()); } // after TAO 1.5.2 we have to handel seqence separatly else if (kind==CORBA::tk_sequence) { //!!! here we play dirty !!! // this solution does not work with seq of seq // we can change it but first we have to change it on the places where seqences are used !! CORBA::TypeCode_var tc; //get the type from the any tc = any.type(); //create another any with type of content type (long/double ..) CORBA::Any a; a._tao_set_typecode(tc->content_type()); // get recursivly the ID of contained type std::string c = getId(a); return std::string("IDL:alma/ACS/" + c + "Seq:1.0"); // very dirty but should be OK } //bad case else { UnsupportedType except; except.type = unknownType_m; throw except; } }