1 // Licensed to the .NET Foundation under one or more agreements.
2 // The .NET Foundation licenses this file to you under the MIT license.
3 // See the LICENSE file in the project root for more information.
7 // Disable the "initialization of static local vars is no thread safe" error
9 #pragma warning(disable : 4640)
12 #define YYMAXDEPTH 0x80000
16 //#define DEBUG_PARSING
18 bool parseDBFlag = true;
19 #define dbprintf(x) if (parseDBFlag) printf x
25 #define FAIL_UNLESS(cond, msg) if (!(cond)) { parser->success = false; parser->error msg; }
27 static AsmParse* parser = 0;
28 #define PASM (parser->assem)
29 #define PASMM (parser->assem->m_pManifest)
30 #define PENV (parser->penv)
34 PFN_NEXTCHAR nextchar;
36 PFN_NEWSTRFROMTOKEN NewStrFromToken;
37 PFN_NEWSTATICSTRFROMTOKEN NewStaticStrFromToken;
38 PFN_GETDOUBLE GetDouble;
40 void SetFunctionPtrs()
42 nextchar = PENV->pfn_nextchar;
44 NewStrFromToken = PENV->pfn_NewStrFromToken;
45 NewStaticStrFromToken = PENV->pfn_NewStaticStrFromToken;
46 GetDouble = PENV->pfn_GetDouble;
50 static char* newStringWDel(__in __nullterminated char* str1, char delimiter, __in __nullterminated char* str3 = 0);
51 static char* newString(__in __nullterminated const char* str1);
52 static void corEmitInt(BinStr* buff, unsigned data);
53 static void AppendStringWithLength(BinStr* pbs, __in __nullterminated char* sz);
54 bool bParsingByteArray = FALSE;
58 unsigned IfEndifSkip = 0;
59 unsigned nCustomBlobNVPairs = 0;
60 unsigned nSecAttrBlobs = 0;
62 BOOL SkipToken = FALSE;
64 BOOL newclass = FALSE;
66 extern unsigned int g_uConsoleCP;
72 VarName(__in_opt __nullterminated char* sz, BinStr* pbs) { name = sz; pbody = pbs; };
73 ~VarName() { delete [] name; delete pbody; };
74 int ComparedTo(VarName* pN) { return strcmp(name,pN->name); };
76 SORTEDARRAY<VarName> VarNameList;
77 void DefineVar(__in __nullterminated char* sz, BinStr* pbs) { VarNameList.PUSH(new VarName(sz,pbs)); };
78 void UndefVar(__in __nullterminated char* sz)
80 CHECK_LOCAL_STATIC_VAR(static VarName VN(NULL,NULL));
87 VarName* FindVarDef(__in __nullterminated char* sz)
89 CHECK_LOCAL_STATIC_VAR(static VarName VN(NULL,NULL));
93 Ret = VarNameList.FIND(&VN);
98 BOOL IsVarDefined(__in __nullterminated char* sz)
100 return (FindVarDef(sz) != NULL);
105 unsigned int uMethodBeginLine,uMethodBeginColumn;
107 #define ELEMENT_TYPE_VARFIXUP ELEMENT_TYPE_MAX+2
108 #define ELEMENT_TYPE_MVARFIXUP ELEMENT_TYPE_MAX+3
110 FIFO<char> TyParFixupList;
111 void FixupTyPars(PCOR_SIGNATURE pSig, ULONG cSig);
112 void FixupTyPars(BinStr* pbstype);
113 void FixupConstraints()
115 if((TyParFixupList.COUNT()) && (PASM->m_TyParList))
118 for(pTPL = PASM->m_TyParList; pTPL; pTPL=pTPL->Next())
121 for(ptk = (mdToken*)(pTPL->Bound()->ptr()); *ptk; ptk++)
123 if(TypeFromToken(*ptk)==mdtTypeSpec)
127 PASM->m_pImporter->GetTypeSpecFromToken(*ptk,(PCCOR_SIGNATURE*)&pSig,&cSig);
130 FixupTyPars(pSig,cSig);
131 } // end if((pSig)&&(cSig))
132 } // end if(TypeFromToken(*ptk)==mdtTypeSpec)
135 } //end if((TyParFixupList.COUNT())
138 #define SET_PA(x,y,z) {x = (CorAssemblyFlags)(((y) & ~afPA_FullMask)|(z)|afPA_Specified);}