DString MsgPrefix() { DStructGDL* errorState = Error_State(); static unsigned msgTag = errorState->Desc()->TagIndex( "MSG_PREFIX"); return (*static_cast<DStringGDL*>( errorState->GetTag( msgTag, 0)))[0]; }
DLongGDL* GetPMulti() { DStructGDL* pStruct = SysVar::P(); //MUST NOT BE STATIC, due to .reset static int tag = pStruct->Desc()->TagIndex( "MULTI"); return static_cast<DLongGDL*>( pStruct->GetTag( tag, 0)); }
DLong GetPFont() { DStructGDL* pStruct = SysVar::P(); //MUST NOT BE STATIC, due to .reset static int tag = pStruct->Desc()->TagIndex( "FONT"); return (*static_cast<DLongGDL*>( pStruct->GetTag( tag)))[0]; }
void GDLInterpreter::SetRootR( ProgNodeP tt, DotAccessDescT* aD, BaseGDL* r, ArrayIndexListT* aL) { // check here for object and get struct if( r->Type() == GDL_STRUCT) { if( r->IsAssoc()) { ArrayIndexListGuard guard( aL); throw GDLException( tt, "File expression not allowed in this context: "+ Name(r),true,false); } DStructGDL* structR=static_cast<DStructGDL*>(r); aD->ADRoot( structR, aL); } else { ArrayIndexListGuard guard( aL); if( r->Type() != GDL_OBJ) { throw GDLException( tt, "Expression must be a" " STRUCT in this context: "+Name(r), true,false); } DStructGDL* oStruct = ObjectStruct( static_cast<DObjGDL*>(r), tt); DStructDesc* desc = oStruct->Desc(); bool isObj = callStack.back()->IsObject(); if( desc->IsParent( GDL_OBJECT_NAME)) { SizeT sss = 0; SizeT ooo = 0; if( isObj) { static_cast<DObjGDL*>(r)->Scalar( ooo); // checked in ObjectStruct BaseGDL* self = callStack.back()->GetKW(callStack.back()->GetPro()->NKey()); // SELF assert( dynamic_cast<DObjGDL*>(self) != NULL); if( !static_cast<DObjGDL*>(self)->Scalar( sss)) throw GDLException( tt, "Internal error: SELF Object reference" " must be scalar in this context: "+Name(self)); assert( sss != 0); } if( !isObj || (sss != ooo)) { // call GetProperty throw GDLException( tt, "Calling GetProperty not yet implemented: "+Name(r)); //aD->ADRootGetProperty( oStruct, guard.release()); return; } } if( isObj) { if( !desc->IsParent( callStack.back()->GetPro()->Object())) { throw GDLException( tt, "Object of type "+desc->Name()+ " is not accessible within "+ callStack.back()->GetProName() + ": "+Name(r)); } // DStructGDL* oStruct = // ObjectStructCheckAccess( static_cast<DObjGDL*>(r), tt); if( aD->IsOwner()) delete r; aD->SetOwner( false); // object struct, not owned aD->ADRoot( oStruct, guard.release()); } else { throw GDLException( tt, "Expression must be a" " STRUCT in this context: "+Name(r),true,false); } } }