SafeClassMembers

 (Available in 01 TS COM - TS_COM_IDispatch)

Source

METHOD SafeClassMembers( ) CLASS TS_IDispatch
LOCAL symSelfClassName AS SYMBOL
LOCAL aClassMemberData AS ARRAY
LOCAL aClassMemberRepo AS ARRAY
LOCAL oCOMGlobalData AS _TS_COMGlobalData
LOCAL lRetVal AS LOGIC
LOCAL X AS DWORD
   TSTrace Enter
   oCOMGlobalData:=_TS_ModuleGetCOMGlobalData( )
   aClassMemberRepo:=oCOMGlobalData:_ClassMemberRepo
   DO CASE
   CASE SELF:_ClassMembersLoaded
      TSTrace Warning "SELF:_ClassMembersLoaded"
      lRetVal:=FALSE
   CASE aClassMemberRepo==NULL_ARRAY
      TSTrace Warning "aClassMemberRepo==NULL_ARRAY"
      lRetVal:=FALSE
   OTHERWISE
      symSelfClassName:=ClassName( SELF )
      X:=AScan( aClassMemberRepo, { | _a | _a[ _TS_DISP_CM_NAMESYM ]==symSelfClassName  ; ...
     ... } )
      IF LOGIC( _CAST, X )
         TSTrace Warning "LOGIC(_CAST,X:=AScan(aClassMemberRepo,{|_a|_a[_TS_DISP_CM_NAMESYM]==symSelfClassName}))"
         lRetVal:=FALSE
      ELSE
         aClassMemberData:=ArrayCreate( _TS_DISP_CM_ALEN )
         aClassMemberData[ _TS_DISP_CM_NAMESYM ]:=symSelfClassName
         aClassMemberData[ _TS_DISP_CM_ACCESSP ]:=SELF:_ClassMemberAccess
         aClassMemberData[ _TS_DISP_CM_ASSIGNP ]:=SELF:_ClassMemberAssign
         aClassMemberData[ _TS_DISP_CM_METHODP ]:=SELF:_ClassMemberMethod
         aClassMemberData[ _TS_DISP_CM_REFCOUNT ]:=1L
         AAdd( aClassMemberRepo, aClassMemberData )
         oCOMGlobalData:_ClassMemberRepo:=aClassMemberRepo
         SELF:_ClassMembersLoaded:=TRUE
      END
   END
   TSTrace Leave
RETURN TRUE