summaryrefslogtreecommitdiff
path: root/src/ilasm/grammar_before.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ilasm/grammar_before.cpp')
-rw-r--r--src/ilasm/grammar_before.cpp150
1 files changed, 150 insertions, 0 deletions
diff --git a/src/ilasm/grammar_before.cpp b/src/ilasm/grammar_before.cpp
new file mode 100644
index 0000000000..42d2927fa5
--- /dev/null
+++ b/src/ilasm/grammar_before.cpp
@@ -0,0 +1,150 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+#include <asmparse.h>
+#include <assembler.h>
+
+// Disable the "initialization of static local vars is no thread safe" error
+#ifdef _MSC_VER
+#pragma warning(disable : 4640)
+#endif
+
+#define YYMAXDEPTH 0x80000
+#define YYLOCAL int
+//#define YYRECURSIVE
+
+//#define DEBUG_PARSING
+#ifdef DEBUG_PARSING
+bool parseDBFlag = true;
+#define dbprintf(x) if (parseDBFlag) printf x
+#define YYDEBUG 1
+#else
+#define dbprintf(x)
+#endif
+
+#define FAIL_UNLESS(cond, msg) if (!(cond)) { parser->success = false; parser->error msg; }
+
+static AsmParse* parser = 0;
+#define PASM (parser->assem)
+#define PASMM (parser->assem->m_pManifest)
+#define PENV (parser->penv)
+
+#if (0)
+
+#define nextchar parser->penv->pfn_nextchar
+#define Sym parser->penv->pfn_Sym
+#define NewStrFromToken parser->penv->pfn_NewStrFromToken
+#define NewStaticStrFromToken parser->penv->pfn_NewStaticStrFromToken
+#define GetDouble parser->penv->pfn_GetDouble
+
+void SetFunctionPtrs() {;}
+
+#else
+
+
+PFN_NEXTCHAR nextchar;
+PFN_SYM Sym;
+PFN_NEWSTRFROMTOKEN NewStrFromToken;
+PFN_NEWSTATICSTRFROMTOKEN NewStaticStrFromToken;
+PFN_GETDOUBLE GetDouble;
+
+void SetFunctionPtrs()
+{
+ nextchar = PENV->pfn_nextchar;
+ Sym = PENV->pfn_Sym;
+ NewStrFromToken = PENV->pfn_NewStrFromToken;
+ NewStaticStrFromToken = PENV->pfn_NewStaticStrFromToken;
+ GetDouble = PENV->pfn_GetDouble;
+}
+
+#endif
+
+static char* newStringWDel(__in __nullterminated char* str1, char delimiter, __in __nullterminated char* str3 = 0);
+static char* newString(__in __nullterminated const char* str1);
+static void corEmitInt(BinStr* buff, unsigned data);
+static void AppendStringWithLength(BinStr* pbs, __in __nullterminated char* sz);
+bool bParsingByteArray = FALSE;
+int iOpcodeLen = 0;
+int iCallConv = 0;
+unsigned IfEndif = 0;
+unsigned IfEndifSkip = 0;
+unsigned nCustomBlobNVPairs = 0;
+unsigned nSecAttrBlobs = 0;
+unsigned nCurrPC = 0;
+BOOL SkipToken = FALSE;
+BOOL neg = FALSE;
+BOOL newclass = FALSE;
+
+extern unsigned int g_uConsoleCP;
+
+struct VarName
+{
+ char* name;
+ BinStr* pbody;
+ VarName(__in_opt __nullterminated char* sz, BinStr* pbs) { name = sz; pbody = pbs; };
+ ~VarName() { delete [] name; delete pbody; };
+ int ComparedTo(VarName* pN) { return strcmp(name,pN->name); };
+};
+SORTEDARRAY<VarName> VarNameList;
+void DefineVar(__in __nullterminated char* sz, BinStr* pbs) { VarNameList.PUSH(new VarName(sz,pbs)); };
+void UndefVar(__in __nullterminated char* sz)
+{
+ CHECK_LOCAL_STATIC_VAR(static VarName VN(NULL,NULL));
+
+ VN.name = sz;
+ VarNameList.DEL(&VN);
+ VN.name = NULL;
+ delete [] sz;
+}
+VarName* FindVarDef(__in __nullterminated char* sz)
+{
+ CHECK_LOCAL_STATIC_VAR(static VarName VN(NULL,NULL));
+
+ VarName* Ret = NULL;
+ VN.name = sz;
+ Ret = VarNameList.FIND(&VN);
+ VN.name = NULL;
+ delete [] sz;
+ return Ret;
+}
+BOOL IsVarDefined(__in __nullterminated char* sz)
+{
+ return (FindVarDef(sz) != NULL);
+}
+
+int nTemp=0;
+
+unsigned int uMethodBeginLine,uMethodBeginColumn;
+
+#define ELEMENT_TYPE_VARFIXUP ELEMENT_TYPE_MAX+2
+#define ELEMENT_TYPE_MVARFIXUP ELEMENT_TYPE_MAX+3
+
+FIFO<char> TyParFixupList;
+void FixupTyPars(PCOR_SIGNATURE pSig, ULONG cSig);
+void FixupTyPars(BinStr* pbstype);
+void FixupConstraints()
+{
+ if((TyParFixupList.COUNT()) && (PASM->m_TyParList))
+ {
+ TyParList* pTPL;
+ for(pTPL = PASM->m_TyParList; pTPL; pTPL=pTPL->Next())
+ {
+ mdToken* ptk;
+ for(ptk = (mdToken*)(pTPL->Bound()->ptr()); *ptk; ptk++)
+ {
+ if(TypeFromToken(*ptk)==mdtTypeSpec)
+ {
+ PCOR_SIGNATURE pSig;
+ ULONG cSig;
+ PASM->m_pImporter->GetTypeSpecFromToken(*ptk,(PCCOR_SIGNATURE*)&pSig,&cSig);
+ if((pSig)&&(cSig))
+ {
+ FixupTyPars(pSig,cSig);
+ } // end if((pSig)&&(cSig))
+ } // end if(TypeFromToken(*ptk)==mdtTypeSpec)
+ } //end for(ptk
+ } // end for(pTPL
+ } //end if((TyParFixupList.COUNT())
+}
+
+#define SET_PA(x,y,z) {x = (CorAssemblyFlags)(((y) & ~afPA_FullMask)|(z)|afPA_Specified);}