summaryrefslogtreecommitdiff
path: root/src/md/compiler/filtermanager.h
blob: 5279db6d0fded47300aaed4ea62b8accb012e7c7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
//
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
//
//*****************************************************************************
// FilterManager.h
// 

//
// Contains utility code for MD directory
//
//*****************************************************************************
#ifndef __FilterManager__h__
#define __FilterManager__h__




//*********************************************************************
// FilterManager Class 
//*********************************************************************
class FilterManager
{
public:
        FilterManager(CMiniMdRW *pMiniMd) {m_pMiniMd = pMiniMd; hasModuleBeenMarked = false; hasAssemblyBeenMarked = false;}
        ~FilterManager() {};

        HRESULT Mark(mdToken tk);

    // Unmark helper
    HRESULT UnmarkTypeDef(mdTypeDef td);
    HRESULT MarkNewUserString(mdString str);


private:
        HRESULT MarkCustomAttribute(mdCustomAttribute cv);
        HRESULT MarkDeclSecurity(mdPermission pe);
        HRESULT MarkStandAloneSig(mdSignature sig);
        HRESULT MarkTypeSpec(mdTypeSpec ts);
        HRESULT MarkTypeRef(mdTypeRef tr);
        HRESULT MarkMemberRef(mdMemberRef mr);
        HRESULT MarkModuleRef(mdModuleRef mr);
        HRESULT MarkAssemblyRef(mdAssemblyRef ar);
        HRESULT MarkModule(mdModule mo);
    HRESULT MarkAssembly(mdAssembly as);
        HRESULT MarkInterfaceImpls(mdTypeDef    td);
    HRESULT MarkUserString(mdString str);

    HRESULT MarkMethodSpec(mdMethodSpec ms);

        HRESULT MarkCustomAttributesWithParentToken(mdToken tkParent);
        HRESULT MarkDeclSecuritiesWithParentToken(mdToken tkParent);
        HRESULT MarkMemberRefsWithParentToken(mdToken tk);

        HRESULT MarkParam(mdParamDef pd);
        HRESULT MarkMethod(mdMethodDef md);
        HRESULT MarkField(mdFieldDef fd);
        HRESULT MarkEvent(mdEvent ev);
        HRESULT MarkProperty(mdProperty pr);

        HRESULT MarkParamsWithParentToken(mdMethodDef md);
        HRESULT MarkMethodsWithParentToken(mdTypeDef td);
    HRESULT MarkMethodImplsWithParentToken(mdTypeDef td);
        HRESULT MarkFieldsWithParentToken(mdTypeDef td);
        HRESULT MarkEventsWithParentToken(mdTypeDef td);
        HRESULT MarkPropertiesWithParentToken(mdTypeDef td);

    HRESULT MarkGenericParamWithParentToken(mdToken tk);


        HRESULT MarkTypeDef(mdTypeDef td);


        // <TODO>We don't want to keep track the debug info with bits because these are going away...</TODO>
        HRESULT MarkMethodDebugInfo(mdMethodDef md);

        // walk the signature and mark all of the embedded TypeDef or TypeRef
        HRESULT MarkSignature(PCCOR_SIGNATURE pbSig, ULONG cbSig, ULONG *pcbUsed);
        HRESULT MarkFieldSignature(PCCOR_SIGNATURE pbSig, ULONG cbSig, ULONG *pcbUsed);


private:
        CMiniMdRW       *m_pMiniMd;
    bool        hasModuleBeenMarked;
    bool        hasAssemblyBeenMarked;
};

#endif // __FilterManager__h__