Enable ILASM for Windows
authorKyungwoo Lee <kyulee@microsoft.com>
Tue, 8 Dec 2015 22:26:54 +0000 (14:26 -0800)
committerKyungwoo Lee <kyulee@microsoft.com>
Thu, 10 Dec 2015 01:43:10 +0000 (17:43 -0800)
This enables ILASM/mscorpe on CoreCLR for Windows.
1.  Fusion/StrongName(Full Sign) dependencies are removed since these are not CoreCLR features.
2.  mscorpe is statically built/linked to ilasm.
3.  asmparse.c is auto-generated by an internal version of yacc so I added it under prebuilt directory for now. Will create an issue so that we can build it using a standard tool like bison.

14 files changed:
src/CMakeLists.txt
src/dlls/CMakeLists.txt
src/dlls/mscorpe/CMakeLists.txt [new file with mode: 0644]
src/dlls/mscorpe/ceefilegenwriter.cpp
src/dlls/mscorpe/ceefilegenwritertokens.cpp
src/ilasm/Assembler.h
src/ilasm/CMakeLists.txt [new file with mode: 0644]
src/ilasm/asmman.cpp
src/ilasm/asmman.hpp
src/ilasm/assem.cpp
src/ilasm/main.cpp
src/ilasm/prebuilt/asmparse.c [new file with mode: 0644]
src/ilasm/writer.cpp
src/inc/iceefilegen.h

index 7949679..64d7d63 100644 (file)
@@ -88,6 +88,7 @@ add_subdirectory(unwinder)
 add_subdirectory(ildasm)
 
 if(WIN32)
+  add_subdirectory(ilasm)
   add_subdirectory(ipcman)
 endif(WIN32)
 
index 7dcb01f..e0bdd37 100644 (file)
@@ -1,5 +1,6 @@
 if(WIN32)
     add_subdirectory(clretwrc)
+    add_subdirectory(mscorpe)
 endif(WIN32)
 add_subdirectory(dbgshim)
 add_subdirectory(mscordbi)
diff --git a/src/dlls/mscorpe/CMakeLists.txt b/src/dlls/mscorpe/CMakeLists.txt
new file mode 100644 (file)
index 0000000..b41848f
--- /dev/null
@@ -0,0 +1,21 @@
+project(mscorpe)
+
+add_definitions(-DFEATURE_CORECLR)
+
+set(MSCORPE_SOURCES
+  ICeeFileGen.cpp
+  CeeFileGenWriter.cpp
+  PEWriter.cpp
+  CeeFileGenWriterTokens.cpp
+  utilcodeinit.cpp
+)
+
+if(WIN32)
+  list(APPEND MSCORPE_SOURCES
+    Native.rc
+  )
+endif(WIN32)
+
+add_library(mscorpe STATIC
+  ${MSCORPE_SOURCES}
+)
index 867512d..555dde2 100644 (file)
@@ -1178,84 +1178,100 @@ HRESULT CeeFileGenWriter::emitResourceSection()
     HANDLE hFile = INVALID_HANDLE_VALUE;
     HANDLE hMap = NULL;
     IMAGE_FILE_HEADER *hMod = NULL;
-    SIZE_T cbFileSize;
-    const BYTE *pbStartOfMappedMem;
-    IMAGE_SECTION_HEADER *rsrc[2] = { NULL, NULL };
-
-    S_SIZE_T cbTotalSizeOfRawData;
 
     hr = S_OK;
 
-    WIN_PAL_TRY
+    struct Param
+    {
+        HANDLE hFile;
+        HANDLE hMap;
+        IMAGE_FILE_HEADER *hMod;
+        const WCHAR* szResFileName;
+        CeeFileGenWriter *genWriter;
+        HRESULT hr;
+    } param;
+
+    param.hFile = hFile;
+    param.hMap = hMap;
+    param.hMod = hMod;
+    param.szResFileName = szResFileName;
+    param.genWriter = this;
+    param.hr = S_OK;
+
+    PAL_TRY(Param *, pParam, &param)
     {
+        SIZE_T cbFileSize;
+        const BYTE *pbStartOfMappedMem;
+        IMAGE_SECTION_HEADER *rsrc[2] = { NULL, NULL };
+        S_SIZE_T cbTotalSizeOfRawData;
         // create a mapped view of the .res file
-        hFile = WszCreateFile(szResFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
-        if (hFile == INVALID_HANDLE_VALUE)
+        pParam->hFile = WszCreateFile(pParam->szResFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+        if (pParam->hFile == INVALID_HANDLE_VALUE)
         {
             //dbprintf("Resource file %S not found\n", szResFileName);
-            hr = HRESULT_FROM_WIN32(ERROR_RESOURCE_DATA_NOT_FOUND);
+            pParam->hr = HRESULT_FROM_WIN32(ERROR_RESOURCE_DATA_NOT_FOUND);
             goto lDone;
         }
 
         // Grab the file size for verification checks.
         {
             DWORD dwFileSizeHigh;
-            DWORD dwFileSize = SafeGetFileSize(hFile, &dwFileSizeHigh);
+            DWORD dwFileSize = SafeGetFileSize(pParam->hFile, &dwFileSizeHigh);
             if (dwFileSize == (DWORD)(-1))
             {
-                hr = HRESULT_FROM_GetLastError();
+                pParam->hr = HRESULT_FROM_GetLastError();
                 goto lDone;
             }
 
             // Since we intend to memory map this file, the size of the file can not need 64 bits to represent!
             if (dwFileSizeHigh != 0)
             {
-                hr = HRESULT_FROM_WIN32(ERROR_RESOURCE_DATA_NOT_FOUND);
+                pParam->hr = HRESULT_FROM_WIN32(ERROR_RESOURCE_DATA_NOT_FOUND);
                 goto lDone;
             }
 
             cbFileSize = static_cast<SIZE_T>(dwFileSize);
         }
 
-        hMap = WszCreateFileMapping(hFile, 0, PAGE_READONLY, 0, 0, NULL);
+        pParam->hMap = WszCreateFileMapping(pParam->hFile, 0, PAGE_READONLY, 0, 0, NULL);
 
-        if (hMap == NULL)
+        if (pParam->hMap == NULL)
         {
             //dbprintf("Invalid .res file: %S\n", szResFileName);
-            hr = HRESULT_FROM_GetLastError();
+            pParam->hr = HRESULT_FROM_GetLastError();
             goto lDone;
         }
 
-        pbStartOfMappedMem = reinterpret_cast<const BYTE *>(MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0));
+        pbStartOfMappedMem = reinterpret_cast<const BYTE *>(MapViewOfFile(pParam->hMap, FILE_MAP_READ, 0, 0, 0));
 
         // test failure conditions
         if (pbStartOfMappedMem == NULL)
         {
             //dbprintf("Invalid .res file: %S:Can't get header\n", szResFileName);
-            hr = HRESULT_FROM_GetLastError();
+            pParam->hr = HRESULT_FROM_GetLastError();
             goto lDone;
         }
 
         // Check that the file contains an IMAGE_FILE_HEADER structure.
         if (IMAGE_SIZEOF_FILE_HEADER > cbFileSize)
         {
-            hr = HRESULT_FROM_WIN32(ERROR_RESOURCE_DATA_NOT_FOUND);
+            pParam->hr = HRESULT_FROM_WIN32(ERROR_RESOURCE_DATA_NOT_FOUND);
             goto lDone;
         }
 
-        hMod = (IMAGE_FILE_HEADER*) pbStartOfMappedMem;
+        pParam->hMod = (IMAGE_FILE_HEADER*)pbStartOfMappedMem;
 
-        if (VAL16(hMod->SizeOfOptionalHeader) != 0)
+        if (VAL16(pParam->hMod->SizeOfOptionalHeader) != 0)
         {
             //dbprintf("Invalid .res file: %S:Illegal optional header\n", szResFileName);
-            hr = HRESULT_FROM_WIN32(ERROR_RESOURCE_DATA_NOT_FOUND); // GetLastError() = 0 since API worked.
+            pParam->hr = HRESULT_FROM_WIN32(ERROR_RESOURCE_DATA_NOT_FOUND); // GetLastError() = 0 since API worked.
             goto lDone;
         }
 
         // Scan all section headers and grab .rsrc$01 and .rsrc$02
         {
             // First section is directly after header
-            SIZE_T cSections = static_cast<SIZE_T>(VAL16(hMod->NumberOfSections));
+            SIZE_T cSections = static_cast<SIZE_T>(VAL16(pParam->hMod->NumberOfSections));
             SIZE_T cbStartOfSections = IMAGE_SIZEOF_FILE_HEADER;
             S_SIZE_T cbEndOfSections(S_SIZE_T(cbStartOfSections) +
                                      (S_SIZE_T(cSections) * S_SIZE_T(IMAGE_SIZEOF_SECTION_HEADER)));
@@ -1264,7 +1280,7 @@ HRESULT CeeFileGenWriter::emitResourceSection()
             if (cbEndOfSections.IsOverflow() ||
                 cbEndOfSections.Value() > cbFileSize)
             {
-                hr = HRESULT_FROM_WIN32(ERROR_RESOURCE_DATA_NOT_FOUND);
+                pParam->hr = HRESULT_FROM_WIN32(ERROR_RESOURCE_DATA_NOT_FOUND);
                 goto lDone;
             }
 
@@ -1291,7 +1307,7 @@ HRESULT CeeFileGenWriter::emitResourceSection()
         if (!rsrc[0] || !rsrc[1])
         {
             //dbprintf("Invalid .res file: %S: Missing sections .rsrc$01 or .rsrc$02\n", szResFileName);
-            hr = HRESULT_FROM_WIN32(ERROR_RESOURCE_DATA_NOT_FOUND);
+            pParam->hr = HRESULT_FROM_WIN32(ERROR_RESOURCE_DATA_NOT_FOUND);
             goto lDone;
         }
 
@@ -1308,7 +1324,7 @@ HRESULT CeeFileGenWriter::emitResourceSection()
                 if (cbEndOfResourceData.IsOverflow() ||
                     cbEndOfResourceData.Value() > cbFileSize)
                 {
-                    hr = HRESULT_FROM_WIN32(ERROR_RESOURCE_DATA_NOT_FOUND);
+                    pParam->hr = HRESULT_FROM_WIN32(ERROR_RESOURCE_DATA_NOT_FOUND);
                     goto lDone;
                 }
 
@@ -1319,25 +1335,25 @@ HRESULT CeeFileGenWriter::emitResourceSection()
             if (cbTotalSizeOfRawData.IsOverflow() ||
                 cbTotalSizeOfRawData.Value() > cbFileSize)
             {
-                hr = HRESULT_FROM_WIN32(ERROR_RESOURCE_DATA_NOT_FOUND);
+                pParam->hr = HRESULT_FROM_WIN32(ERROR_RESOURCE_DATA_NOT_FOUND);
                 goto lDone;
             }
         }
 
         PESection *rsrcSection;
-        hr = getPEWriter().getSectionCreate(".rsrc", sdReadOnly, &rsrcSection);
-        if (FAILED(hr)) goto lDone;
+        pParam->hr = pParam->genWriter->getPEWriter().getSectionCreate(".rsrc", sdReadOnly, &rsrcSection);
+        if (FAILED(pParam->hr)) goto lDone;
 
         rsrcSection->directoryEntry(IMAGE_DIRECTORY_ENTRY_RESOURCE);
         char *data = rsrcSection->getBlock(static_cast<unsigned>(cbTotalSizeOfRawData.Value()), 8);
         if(data == NULL)
         {
-            hr = E_OUTOFMEMORY;
+            pParam->hr = E_OUTOFMEMORY;
             goto lDone;
         }
 
         // Copy resource header
-        memcpy(data, (char *)hMod + VAL32(rsrc[0]->PointerToRawData), VAL32(rsrc[0]->SizeOfRawData));
+        memcpy(data, (char *)pParam->hMod + VAL32(rsrc[0]->PointerToRawData), VAL32(rsrc[0]->SizeOfRawData));
 
         // Map all the relocs in .rsrc$01 using the reloc and symbol tables in the COFF object.,
         SIZE_T            cReloc        = 0;         // Total number of relocs
@@ -1355,8 +1371,8 @@ HRESULT CeeFileGenWriter::emitResourceSection()
 
 
             // Verify the number of symbols fit into the resource.
-            cSymbol = static_cast<SIZE_T>(VAL32(hMod->NumberOfSymbols));
-            SIZE_T cbStartOfSymbolTable = static_cast<SIZE_T>(VAL32(hMod->PointerToSymbolTable));
+            cSymbol = static_cast<SIZE_T>(VAL32(pParam->hMod->NumberOfSymbols));
+            SIZE_T cbStartOfSymbolTable = static_cast<SIZE_T>(VAL32(pParam->hMod->PointerToSymbolTable));
             S_SIZE_T cbEndOfSymbolTable(S_SIZE_T(cbStartOfSymbolTable) +
                                         (S_SIZE_T(cSymbol) * S_SIZE_T(IMAGE_SIZEOF_SYMBOL)));
 
@@ -1365,7 +1381,7 @@ HRESULT CeeFileGenWriter::emitResourceSection()
                 cbEndOfSymbolTable.IsOverflow() ||
                 cbEndOfSymbolTable.Value() > cbFileSize)
             {
-                hr = HRESULT_FROM_WIN32(ERROR_RESOURCE_DATA_NOT_FOUND);
+                pParam->hr = HRESULT_FROM_WIN32(ERROR_RESOURCE_DATA_NOT_FOUND);
                 goto lDone;
             }
 
@@ -1383,7 +1399,7 @@ HRESULT CeeFileGenWriter::emitResourceSection()
                 if (cbRelocEnd.IsOverflow() || 
                     cbRelocEnd.Value() > static_cast<SIZE_T>(VAL32(rsrc[0]->SizeOfRawData)))
                 {
-                    hr = HRESULT_FROM_WIN32(ERROR_RESOURCE_DATA_NOT_FOUND);
+                    pParam->hr = HRESULT_FROM_WIN32(ERROR_RESOURCE_DATA_NOT_FOUND);
                     goto lDone;
                 }
             }
@@ -1394,7 +1410,7 @@ HRESULT CeeFileGenWriter::emitResourceSection()
             // Make sure the index is in range
             if (iSymbol >= cSymbol)
             {
-                hr = HRESULT_FROM_WIN32(ERROR_RESOURCE_DATA_NOT_FOUND);
+                pParam->hr = HRESULT_FROM_WIN32(ERROR_RESOURCE_DATA_NOT_FOUND);
                 goto lDone;
             }
 
@@ -1406,7 +1422,7 @@ HRESULT CeeFileGenWriter::emitResourceSection()
                 (VAL16(pSymbolEntry->SectionNumber) != 3)) // 3rd section is .rsrc$02
             {
                 //dbprintf("Invalid .res file: %S:Illegal symbol entry\n", szResFileName);
-                hr = HRESULT_FROM_WIN32(ERROR_RESOURCE_DATA_NOT_FOUND);
+                pParam->hr = HRESULT_FROM_WIN32(ERROR_RESOURCE_DATA_NOT_FOUND);
                 goto lDone;
             }
 
@@ -1414,7 +1430,7 @@ HRESULT CeeFileGenWriter::emitResourceSection()
             if (VAL32(pSymbolEntry->Value) >= VAL32(rsrc[1]->SizeOfRawData))
             {
                 //dbprintf("Invalid .res file: %S:Illegal rva into .rsrc$02\n", szResFileName);
-                hr = HRESULT_FROM_WIN32(ERROR_RESOURCE_DATA_NOT_FOUND);
+                pParam->hr = HRESULT_FROM_WIN32(ERROR_RESOURCE_DATA_NOT_FOUND);
                 goto lDone;
             }
 
@@ -1426,18 +1442,23 @@ HRESULT CeeFileGenWriter::emitResourceSection()
         }
 
         // Copy $02 (resource raw) data
-        memcpy(data+VAL32(rsrc[0]->SizeOfRawData), 
-            (char *)hMod + VAL32(rsrc[1]->PointerToRawData), 
+        memcpy(data+VAL32(rsrc[0]->SizeOfRawData),
+            (char *)pParam->hMod + VAL32(rsrc[1]->PointerToRawData),
             VAL32(rsrc[1]->SizeOfRawData));
 
 lDone: ;
     }
-    WIN_PAL_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+    PAL_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
         //dbprintf("Exception occured manipulating .res file %S\n", szResFileName);
-        hr = HRESULT_FROM_WIN32(ERROR_RESOURCE_DATA_NOT_FOUND);
+        param.hr = HRESULT_FROM_WIN32(ERROR_RESOURCE_DATA_NOT_FOUND);
     }
-    WIN_PAL_ENDTRY
+    PAL_ENDTRY
+
+    hMod = param.hMod;
+    hFile = param.hFile;
+    szResFileName = param.szResFileName;
+    hr = param.hr;
 
     if (hMod != NULL)
         UnmapViewOfFile(hMod);
index b8d5ac0..65d83af 100644 (file)
@@ -11,7 +11,9 @@
 //*****************************************************************************
 #include "stdafx.h"
 #include "ceegen.h"
+#ifndef FEATURE_CORECLR
 #define DECLARE_DATA
+#endif
 #include "../../ildasm/dasmenum.hpp"
 #define MAX_CLASSNAME_LENGTH    1024
 
index f3e4914..8b9b414 100644 (file)
@@ -23,7 +23,9 @@
 #pragma warning(disable : 4640)
 #endif
 
-
+#ifdef ResetEvent
+#undef ResetEvent
+#endif
 
 #define OUTPUT_BUFFER_SIZE          8192      // initial size of asm code for a single method
 #define OUTPUT_BUFFER_INCREMENT     1024      // size of code buffer increment when it's full
@@ -1035,9 +1037,10 @@ public:
     void EmitSecurityInfo(mdToken           token,
                           PermissionDecl*   pPermissions,
                           PermissionSetDecl*pPermissionSets);
-    
+#ifndef FEATURE_CORECLR
     HRESULT AllocateStrongNameSignature();
     HRESULT StrongNameSign();
+#endif
     BinStr* EncodeSecAttr(__in __nullterminated char* szReflName, BinStr* pbsSecAttrBlob, unsigned nProps);
 
     // Custom values paraphernalia:
@@ -1174,7 +1177,9 @@ public:
     unsigned NumTypeDefs() {return m_TypeDefDList.COUNT();};
 private:
     HRESULT GetCAName(mdToken tkCA, __out LPWSTR *ppszName);
+#ifndef FEATURE_CORECLR
     HRESULT GetSignatureKey();
+#endif
 };
 
 #endif  // Assember_h
diff --git a/src/ilasm/CMakeLists.txt b/src/ilasm/CMakeLists.txt
new file mode 100644 (file)
index 0000000..3481eb4
--- /dev/null
@@ -0,0 +1,52 @@
+project(ilasm)
+
+add_definitions(-DUNICODE)
+add_definitions(-D_UNICODE)
+add_definitions(-D_FEATURE_NO_HOST)
+add_definitions(-D__ILASM__)
+
+add_definitions(-DFEATURE_CORECLR)
+
+include_directories(.)
+
+set(ILASM_SOURCES
+  assem.cpp
+  writer.cpp
+  writer_enc.cpp
+  method.cpp
+  asmman.cpp
+  main.cpp
+  assembler.cpp
+  prebuilt/asmparse.c
+)
+if(WIN32)
+  set_source_files_properties(prebuilt/asmparse.c PROPERTIES COMPILE_FLAGS "/TP")
+endif(WIN32)
+
+add_executable(ilasm
+  ${ILASM_SOURCES}
+)
+
+set(ILASM_LINK_LIBRARIES
+  mscorpe
+  utilcodestaticnohost
+  mdhotdata_full
+  corguids
+)
+
+if(CLR_CMAKE_PLATFORM_UNIX)
+  #TODO
+else()
+  target_link_libraries(ilasm
+      ${ILASM_LINK_LIBRARIES}
+      coreclr
+      msvcrt
+      ole32
+      oleaut32
+      shell32
+  )
+
+  install (FILES ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/ilasm.pdb DESTINATION PDB)
+endif(CLR_CMAKE_PLATFORM_UNIX)
+
+install (TARGETS ilasm DESTINATION .)
index c4aa0e5..4933cf1 100644 (file)
@@ -11,7 +11,9 @@
 
 #include "assembler.h"
 #include "strongname.h"
+#ifndef FEATURE_CORECLR
 #include "LegacyActivationShim.h"
+#endif
 #include <limits.h>
 #include <fusion.h>
 
@@ -445,6 +447,7 @@ void    AsmMan::EndAssembly()
                 m_pCurAsmRef = NULL;
                 return;
             }
+#ifndef FEATURE_CORECLR
             if(m_pCurAsmRef->isAutodetect)
             {
                 IAssemblyName* pIAsmName;
@@ -582,6 +585,7 @@ void    AsmMan::EndAssembly()
                 else
                     report->error("Failed to create assembly name object for %S, hr=0x%08X\n",wzUniBuf,hr);
             } // end if isAutodetect
+#endif // !FEATURE_CORECLR
             m_AsmRefLst.PUSH(m_pCurAsmRef);
             m_pCurAsmRef->tkTok = TokenFromRid(m_AsmRefLst.COUNT(),mdtAssemblyRef);
         }
@@ -589,6 +593,7 @@ void    AsmMan::EndAssembly()
         {
             HRESULT                 hr = S_OK;
             m_pCurAsmRef->tkTok = TokenFromRid(1,mdtAssembly);
+
             // Determine the strong name public key. This may have been set
             // via a directive in the source or from the command line (which
             // overrides the directive). From the command line we may have
@@ -601,6 +606,11 @@ void    AsmMan::EndAssembly()
                 // character of the source ('@' for container).
                 if (*(((Assembler*)m_pAssembler)->m_wzKeySourceName) == L'@')
                 {
+#ifdef FEATURE_CORECLR
+                    report->error("Error: ilasm on CoreCLR does not support getting public key from container.\n");
+                    m_pCurAsmRef = NULL;
+                    return;
+#else
                     // Extract public key from container (works whether
                     // container has just a public key or an entire key
                     // pair).
@@ -618,6 +628,7 @@ void    AsmMan::EndAssembly()
                     }
                     m_sStrongName.m_fFullSign = TRUE;
                     m_sStrongName.m_dwPublicKeyAllocated = AsmManStrongName::AllocatedBySNApi;
+#endif // FEATURE_CORECLR
                 }
                 else
                 {
@@ -683,6 +694,11 @@ void    AsmMan::EndAssembly()
                     // from a consistent place.
                     if (m_sStrongName.m_fFullSign)
                     {
+#ifdef FEATURE_CORECLR
+                        report->error("Error: ilasm on CoreCLR does not support full sign.\n");
+                        m_pCurAsmRef = NULL;
+                        return;
+#else
                         m_sStrongName.m_pbPrivateKey = m_sStrongName.m_pbPublicKey;
                         m_sStrongName.m_cbPrivateKey = m_sStrongName.m_cbPublicKey;
 
@@ -704,6 +720,7 @@ void    AsmMan::EndAssembly()
                         }
     
                         m_sStrongName.m_dwPublicKeyAllocated = AsmManStrongName::AllocatedBySNApi;
+#endif // FEATURE_CORECLR
                     }
                 }
             }
index 3db7ae2..bf1a3fe 100644 (file)
@@ -10,7 +10,9 @@
 #define ASMMAN_HPP
 
 #include "strongname.h"
+#ifndef FEATURE_CORECLR
 #include "LegacyActivationShim.h"
+#endif
 #include "specstrings.h"
 
 struct AsmManFile
@@ -172,13 +174,16 @@ struct AsmManStrongName
     AsmManStrongName() { ZeroMemory(this, sizeof(*this)); }
     ~AsmManStrongName()
     {
+#ifndef FEATURE_CORECLR
         if (m_dwPublicKeyAllocated == AllocatedBySNApi)
         {
             LegacyActivationShim::StrongNameFreeBuffer(m_pbPublicKey);
         }
-        else if (m_dwPublicKeyAllocated == AllocatedByNew)
+        else
+#endif
+        if (m_dwPublicKeyAllocated == AllocatedByNew)
             delete [] m_pbPublicKey;
-    
+
         if (m_pbPrivateKey)
             delete [] m_pbPrivateKey;
 
index 8f30613..938cbaa 100644 (file)
@@ -16,7 +16,9 @@
 #define DECLARE_DATA
 
 #include "assembler.h"
+#ifndef FEATURE_CORECLR
 #include "MscorpeSxS.h"
+#endif
 
 void indexKeywords(Indx* indx); // defined in asmparse.y
 
@@ -190,7 +192,11 @@ Assembler::~Assembler()
     if (m_pCeeFileGen != NULL) {
         if (m_pCeeFile)
             m_pCeeFileGen->DestroyCeeFile(&m_pCeeFile);
+#ifdef FEATURE_CORECLR
+        DestroyICeeFileGen(&m_pCeeFileGen);
+#else
         MscorpeSxS::DestroyICeeFileGen(&m_pCeeFileGen);
+#endif
         m_pCeeFileGen = NULL;
     }
 
@@ -243,10 +249,18 @@ BOOL Assembler::Init()
     if (m_pCeeFileGen != NULL) {
         if (m_pCeeFile)
             m_pCeeFileGen->DestroyCeeFile(&m_pCeeFile);
+#ifdef FEATURE_CORECLR
+        DestroyICeeFileGen(&m_pCeeFileGen);
+#else
         MscorpeSxS::DestroyICeeFileGen(&m_pCeeFileGen);
+#endif
         m_pCeeFileGen = NULL;
     }
+#ifdef FEATURE_CORECLR
+    if (FAILED(CreateICeeFileGen(&m_pCeeFileGen))) return FALSE;
+#else
     if (FAILED(MscorpeSxS::CreateICeeFileGen(&m_pCeeFileGen))) return FALSE;
+#endif
     if (FAILED(m_pCeeFileGen->CreateCeeFileEx(&m_pCeeFile,(ULONG)m_dwCeeFileFlags))) return FALSE;
 
     if (FAILED(m_pCeeFileGen->GetSectionCreate(m_pCeeFile, ".il", sdReadOnly, &m_pILSection))) return FALSE;
index 2bb0661..978f827 100644 (file)
@@ -722,6 +722,7 @@ extern "C" int _cdecl wmain(int argc, __in WCHAR **argv)
                                     exitval = 1;
                                     pParser->msg("Failed to write output file, error code=0x%08X\n",hr);
                                 }
+#ifndef FEATURE_CORECLR
                                 else if (pAsm->m_pManifest->m_sStrongName.m_fFullSign)
                                 {
                                     // Strong name sign the resultant assembly.
@@ -732,6 +733,7 @@ extern "C" int _cdecl wmain(int argc, __in WCHAR **argv)
                                         pParser->msg("Failed to strong name sign output file, error code=0x%08X\n",hr);
                                     }
                                 }
+#endif
                                 if(bClock) cw.cEnd = GetTickCount();
 #define ENC_ENABLED
 #ifdef ENC_ENABLED
diff --git a/src/ilasm/prebuilt/asmparse.c b/src/ilasm/prebuilt/asmparse.c
new file mode 100644 (file)
index 0000000..be0a26e
--- /dev/null
@@ -0,0 +1,4908 @@
+/*
+ * Created by Microsoft VCBU Internal YACC from "asmparse.y"
+ */
+
+#line 2 "asmparse.y"
+
+//
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information. 
+//
+//
+// File asmparse.y
+//
+#include "ilasmpch.h"
+
+#include "grammar_before.cpp"
+
+
+#line 16 "asmparse.y"
+
+#define UNION 1
+typedef union  {
+        CorRegTypeAttr classAttr;
+        CorMethodAttr methAttr;
+        CorFieldAttr fieldAttr;
+        CorMethodImpl implAttr;
+        CorEventAttr  eventAttr;
+        CorPropertyAttr propAttr;
+        CorPinvokeMap pinvAttr;
+        CorDeclSecurity secAct;
+        CorFileFlags fileAttr;
+        CorAssemblyFlags asmAttr;
+        CorAssemblyFlags asmRefAttr;
+        CorTypeAttr exptAttr;
+        CorManifestResourceFlags manresAttr;
+        double*  float64;
+        __int64* int64;
+        __int32  int32;
+        char*    string;
+        BinStr*  binstr;
+        Labels*  labels;
+        Instr*   instr;         // instruction opcode
+        NVPair*  pair;
+        pTyParList typarlist;
+        mdToken token;
+        TypeDefDescr* tdd;
+        CustomDescr*  cad;
+        unsigned short opcode;
+} YYSTYPE;
+# define ERROR_ 257 
+# define BAD_COMMENT_ 258 
+# define BAD_LITERAL_ 259 
+# define ID 260 
+# define DOTTEDNAME 261 
+# define QSTRING 262 
+# define SQSTRING 263 
+# define INT32 264 
+# define INT64 265 
+# define FLOAT64 266 
+# define HEXBYTE 267 
+# define TYPEDEF_T 268 
+# define TYPEDEF_M 269 
+# define TYPEDEF_F 270 
+# define TYPEDEF_TS 271 
+# define TYPEDEF_MR 272 
+# define TYPEDEF_CA 273 
+# define DCOLON 274 
+# define ELIPSIS 275 
+# define VOID_ 276 
+# define BOOL_ 277 
+# define CHAR_ 278 
+# define UNSIGNED_ 279 
+# define INT_ 280 
+# define INT8_ 281 
+# define INT16_ 282 
+# define INT32_ 283 
+# define INT64_ 284 
+# define FLOAT_ 285 
+# define FLOAT32_ 286 
+# define FLOAT64_ 287 
+# define BYTEARRAY_ 288 
+# define UINT_ 289 
+# define UINT8_ 290 
+# define UINT16_ 291 
+# define UINT32_ 292 
+# define UINT64_ 293 
+# define FLAGS_ 294 
+# define CALLCONV_ 295 
+# define MDTOKEN_ 296 
+# define OBJECT_ 297 
+# define STRING_ 298 
+# define NULLREF_ 299 
+# define DEFAULT_ 300 
+# define CDECL_ 301 
+# define VARARG_ 302 
+# define STDCALL_ 303 
+# define THISCALL_ 304 
+# define FASTCALL_ 305 
+# define CLASS_ 306 
+# define TYPEDREF_ 307 
+# define UNMANAGED_ 308 
+# define FINALLY_ 309 
+# define HANDLER_ 310 
+# define CATCH_ 311 
+# define FILTER_ 312 
+# define FAULT_ 313 
+# define EXTENDS_ 314 
+# define IMPLEMENTS_ 315 
+# define TO_ 316 
+# define AT_ 317 
+# define TLS_ 318 
+# define TRUE_ 319 
+# define FALSE_ 320 
+# define _INTERFACEIMPL 321 
+# define VALUE_ 322 
+# define VALUETYPE_ 323 
+# define NATIVE_ 324 
+# define INSTANCE_ 325 
+# define SPECIALNAME_ 326 
+# define FORWARDER_ 327 
+# define STATIC_ 328 
+# define PUBLIC_ 329 
+# define PRIVATE_ 330 
+# define FAMILY_ 331 
+# define FINAL_ 332 
+# define SYNCHRONIZED_ 333 
+# define INTERFACE_ 334 
+# define SEALED_ 335 
+# define NESTED_ 336 
+# define ABSTRACT_ 337 
+# define AUTO_ 338 
+# define SEQUENTIAL_ 339 
+# define EXPLICIT_ 340 
+# define ANSI_ 341 
+# define UNICODE_ 342 
+# define AUTOCHAR_ 343 
+# define IMPORT_ 344 
+# define ENUM_ 345 
+# define VIRTUAL_ 346 
+# define NOINLINING_ 347 
+# define AGGRESSIVEINLINING_ 348 
+# define NOOPTIMIZATION_ 349 
+# define UNMANAGEDEXP_ 350 
+# define BEFOREFIELDINIT_ 351 
+# define STRICT_ 352 
+# define RETARGETABLE_ 353 
+# define WINDOWSRUNTIME_ 354 
+# define NOPLATFORM_ 355 
+# define METHOD_ 356 
+# define FIELD_ 357 
+# define PINNED_ 358 
+# define MODREQ_ 359 
+# define MODOPT_ 360 
+# define SERIALIZABLE_ 361 
+# define PROPERTY_ 362 
+# define TYPE_ 363 
+# define ASSEMBLY_ 364 
+# define FAMANDASSEM_ 365 
+# define FAMORASSEM_ 366 
+# define PRIVATESCOPE_ 367 
+# define HIDEBYSIG_ 368 
+# define NEWSLOT_ 369 
+# define RTSPECIALNAME_ 370 
+# define PINVOKEIMPL_ 371 
+# define _CTOR 372 
+# define _CCTOR 373 
+# define LITERAL_ 374 
+# define NOTSERIALIZED_ 375 
+# define INITONLY_ 376 
+# define REQSECOBJ_ 377 
+# define CIL_ 378 
+# define OPTIL_ 379 
+# define MANAGED_ 380 
+# define FORWARDREF_ 381 
+# define PRESERVESIG_ 382 
+# define RUNTIME_ 383 
+# define INTERNALCALL_ 384 
+# define _IMPORT 385 
+# define NOMANGLE_ 386 
+# define LASTERR_ 387 
+# define WINAPI_ 388 
+# define AS_ 389 
+# define BESTFIT_ 390 
+# define ON_ 391 
+# define OFF_ 392 
+# define CHARMAPERROR_ 393 
+# define INSTR_NONE 394 
+# define INSTR_VAR 395 
+# define INSTR_I 396 
+# define INSTR_I8 397 
+# define INSTR_R 398 
+# define INSTR_BRTARGET 399 
+# define INSTR_METHOD 400 
+# define INSTR_FIELD 401 
+# define INSTR_TYPE 402 
+# define INSTR_STRING 403 
+# define INSTR_SIG 404 
+# define INSTR_TOK 405 
+# define INSTR_SWITCH 406 
+# define _CLASS 407 
+# define _NAMESPACE 408 
+# define _METHOD 409 
+# define _FIELD 410 
+# define _DATA 411 
+# define _THIS 412 
+# define _BASE 413 
+# define _NESTER 414 
+# define _EMITBYTE 415 
+# define _TRY 416 
+# define _MAXSTACK 417 
+# define _LOCALS 418 
+# define _ENTRYPOINT 419 
+# define _ZEROINIT 420 
+# define _EVENT 421 
+# define _ADDON 422 
+# define _REMOVEON 423 
+# define _FIRE 424 
+# define _OTHER 425 
+# define _PROPERTY 426 
+# define _SET 427 
+# define _GET 428 
+# define _PERMISSION 429 
+# define _PERMISSIONSET 430 
+# define REQUEST_ 431 
+# define DEMAND_ 432 
+# define ASSERT_ 433 
+# define DENY_ 434 
+# define PERMITONLY_ 435 
+# define LINKCHECK_ 436 
+# define INHERITCHECK_ 437 
+# define REQMIN_ 438 
+# define REQOPT_ 439 
+# define REQREFUSE_ 440 
+# define PREJITGRANT_ 441 
+# define PREJITDENY_ 442 
+# define NONCASDEMAND_ 443 
+# define NONCASLINKDEMAND_ 444 
+# define NONCASINHERITANCE_ 445 
+# define _LINE 446 
+# define P_LINE 447 
+# define _LANGUAGE 448 
+# define _CUSTOM 449 
+# define INIT_ 450 
+# define _SIZE 451 
+# define _PACK 452 
+# define _VTABLE 453 
+# define _VTFIXUP 454 
+# define FROMUNMANAGED_ 455 
+# define CALLMOSTDERIVED_ 456 
+# define _VTENTRY 457 
+# define RETAINAPPDOMAIN_ 458 
+# define _FILE 459 
+# define NOMETADATA_ 460 
+# define _HASH 461 
+# define _ASSEMBLY 462 
+# define _PUBLICKEY 463 
+# define _PUBLICKEYTOKEN 464 
+# define ALGORITHM_ 465 
+# define _VER 466 
+# define _LOCALE 467 
+# define EXTERN_ 468 
+# define _MRESOURCE 469 
+# define _MODULE 470 
+# define _EXPORT 471 
+# define LEGACY_ 472 
+# define LIBRARY_ 473 
+# define X86_ 474 
+# define IA64_ 475 
+# define AMD64_ 476 
+# define ARM_ 477 
+# define MARSHAL_ 478 
+# define CUSTOM_ 479 
+# define SYSSTRING_ 480 
+# define FIXED_ 481 
+# define VARIANT_ 482 
+# define CURRENCY_ 483 
+# define SYSCHAR_ 484 
+# define DECIMAL_ 485 
+# define DATE_ 486 
+# define BSTR_ 487 
+# define TBSTR_ 488 
+# define LPSTR_ 489 
+# define LPWSTR_ 490 
+# define LPTSTR_ 491 
+# define OBJECTREF_ 492 
+# define IUNKNOWN_ 493 
+# define IDISPATCH_ 494 
+# define STRUCT_ 495 
+# define SAFEARRAY_ 496 
+# define BYVALSTR_ 497 
+# define LPVOID_ 498 
+# define ANY_ 499 
+# define ARRAY_ 500 
+# define LPSTRUCT_ 501 
+# define IIDPARAM_ 502 
+# define IN_ 503 
+# define OUT_ 504 
+# define OPT_ 505 
+# define PARAM_ 506 
+# define _OVERRIDE 507 
+# define WITH_ 508 
+# define NULL_ 509 
+# define HRESULT_ 510 
+# define CARRAY_ 511 
+# define USERDEFINED_ 512 
+# define RECORD_ 513 
+# define FILETIME_ 514 
+# define BLOB_ 515 
+# define STREAM_ 516 
+# define STORAGE_ 517 
+# define STREAMED_OBJECT_ 518 
+# define STORED_OBJECT_ 519 
+# define BLOB_OBJECT_ 520 
+# define CF_ 521 
+# define CLSID_ 522 
+# define VECTOR_ 523 
+# define _SUBSYSTEM 524 
+# define _CORFLAGS 525 
+# define ALIGNMENT_ 526 
+# define _IMAGEBASE 527 
+# define _STACKRESERVE 528 
+# define _TYPEDEF 529 
+# define _TEMPLATE 530 
+# define _TYPELIST 531 
+# define _MSCORLIB 532 
+# define P_DEFINE 533 
+# define P_UNDEF 534 
+# define P_IFDEF 535 
+# define P_IFNDEF 536 
+# define P_ELSE 537 
+# define P_ENDIF 538 
+# define P_INCLUDE 539 
+#define yyclearin yychar = -1
+#define yyerrok yyerrflag = 0
+#ifndef YYMAXDEPTH
+#define YYMAXDEPTH 150
+#endif
+YYSTYPE yylval, yyval;
+#ifndef YYFARDATA
+#define        YYFARDATA       /*nothing*/
+#endif
+#if ! defined YYSTATIC
+#define        YYSTATIC        /*nothing*/
+#endif
+#if ! defined YYCONST
+#define        YYCONST /*nothing*/
+#endif
+#ifndef        YYACT
+#define        YYACT   yyact
+#endif
+#ifndef        YYPACT
+#define        YYPACT  yypact
+#endif
+#ifndef        YYPGO
+#define        YYPGO   yypgo
+#endif
+#ifndef        YYR1
+#define        YYR1    yyr1
+#endif
+#ifndef        YYR2
+#define        YYR2    yyr2
+#endif
+#ifndef        YYCHK
+#define        YYCHK   yychk
+#endif
+#ifndef        YYDEF
+#define        YYDEF   yydef
+#endif
+#ifndef        YYV
+#define        YYV     yyv
+#endif
+#ifndef        YYS
+#define        YYS     yys
+#endif
+#ifndef        YYLOCAL
+#define        YYLOCAL
+#endif
+#ifndef YYR_T
+#define        YYR_T   int
+#endif
+typedef        YYR_T   yyr_t;
+#ifndef YYEXIND_T
+#define        YYEXIND_T       unsigned int
+#endif
+typedef        YYEXIND_T       yyexind_t;
+#ifndef YYOPTTIME
+#define        YYOPTTIME       0
+#endif
+# define YYERRCODE 256
+
+#line 2051 "asmparse.y"
+
+
+#include "grammar_after.cpp"
+YYSTATIC YYCONST short yyexca[] = {
+#if !(YYOPTTIME)
+-1, 1,
+#endif
+       0, -1,
+       -2, 0,
+#if !(YYOPTTIME)
+-1, 452,
+#endif
+       41, 532,
+       -2, 308,
+#if !(YYOPTTIME)
+-1, 621,
+#endif
+       274, 549,
+       47, 549,
+       -2, 227,
+#if !(YYOPTTIME)
+-1, 642,
+#endif
+       40, 307,
+       60, 307,
+       -2, 549,
+#if !(YYOPTTIME)
+-1, 663,
+#endif
+       41, 532,
+       -2, 308,
+#if !(YYOPTTIME)
+-1, 686,
+#endif
+       274, 549,
+       47, 549,
+       -2, 510,
+#if !(YYOPTTIME)
+-1, 803,
+#endif
+       123, 232,
+       -2, 549,
+#if !(YYOPTTIME)
+-1, 828,
+#endif
+       41, 532,
+       -2, 308,
+#if !(YYOPTTIME)
+-1, 953,
+#endif
+       41, 532,
+       -2, 308,
+#if !(YYOPTTIME)
+-1, 986,
+#endif
+       41, 532,
+       -2, 308,
+#if !(YYOPTTIME)
+-1, 987,
+#endif
+       41, 532,
+       -2, 308,
+#if !(YYOPTTIME)
+-1, 1308,
+#endif
+       41, 532,
+       -2, 308,
+#if !(YYOPTTIME)
+-1, 1309,
+#endif
+       41, 532,
+       -2, 308,
+#if !(YYOPTTIME)
+-1, 1315,
+#endif
+       41, 532,
+       -2, 308,
+#if !(YYOPTTIME)
+-1, 1322,
+#endif
+       41, 532,
+       -2, 308,
+#if !(YYOPTTIME)
+-1, 1447,
+#endif
+       41, 532,
+       -2, 308,
+#if !(YYOPTTIME)
+-1, 1479,
+#endif
+       41, 532,
+       -2, 308,
+#if !(YYOPTTIME)
+-1, 1545,
+#endif
+       41, 532,
+       -2, 308,
+#if !(YYOPTTIME)
+-1, 1562,
+#endif
+       41, 532,
+       -2, 308,
+
+};
+
+# define YYNPROD 838
+#if YYOPTTIME
+YYSTATIC YYCONST yyexind_t yyexcaind[] = {
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    4,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    8,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,   14,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   20,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,   24,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   30,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,   34,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   38,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,   42,   46,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,   50,   54,
+    0,    0,    0,    0,    0,   58,    0,    0,    0,    0,
+    0,    0,   62,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,   66,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,   70,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,   74,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,   78
+};
+#endif
+# define YYLAST 3904
+
+YYSTATIC YYCONST short YYFARDATA YYACT[] = {
+  699, 1398, 1121, 1466,  658, 1467,  639, 1024, 1465,  878,
+ 1464,  963,  784,  753,  964,  221,  775,   26,  698,  725,
+   73,   75,  275,  414,  624,  877,  966, 1399,  535,  191,
+  477, 1503,  150,  788,  751,  756, 1134,  110, 1065,  107,
+  690,  852,  273,  153,  219,  660,   24,   44,  776,  218,
+  307,   10,  190,  176,   78,   81,    6,   86,    5,  598,
+  673,  262,  204,  515,    3,  188,  217,  983,   17,  301,
+  603,  136,   76, 1550, 1194, 1242,  214,  264,    7, 1238,
+ 1057, 1239, 1113, 1111,   85, 1112,  580,   74,  715,   88,
+   87,  137,   89,  300,  115,   56,  139,  712,  672,  113,
+ 1058,   98,  112,  178,  179,  180,  181,   74,  272,  696,
+  322,  519, 1015,  461,  220,   56,   18,  452,  536,  338,
+  278,   88,   87, 1021,   89,  268,  216,  269, 1240,  225,
+   56,  265,  277,  277, 1228, 1229,  106, 1226, 1227,  590,
+  277,  343,  361,  360,  359,  358,  654,  368,  345,  653,
+   68,  310,  312,  314,  316,  318,  185, 1554,  460, 1126,
+ 1127, 1414,   98,  931,  932,  327,  277,  348,  339, 1027,
+  342,  778, 1026,  779,  373,  366,  154,  277,  695,  133,
+  694,  991,  379,  271,  362,   84,  258,  364,  363,  376,
+  614,  192,  387,  105, 1519,  662,  513,  930,  365, 1059,
+  369,  202,  203,  371,  370, 1487,  374, 1264,  596,  450,
+  661,  451,  763,  372,  416,  469,  186,  467,  471,  470,
+  442,   26,   74,  376,  456,  417,  418,  346,  376, 1559,
+  352,  472,  474,  599,  353,  305,  483,  388,   88,   87,
+  596,   89,  410, 1263, 1478,  500,  492, 1314,  457,  441,
+   24, 1200,  357,  491,  435,   10,  825,  797,  787,   56,
+  486,  432,  490,  428,  475,  478,  479,  773,  476,  429,
+  494,  434,   17,  192,  108,  666,  511,  511,  528,  534,
+  375,  433,    7,  351,  267,  321,  480,  481,  473,  485,
+  152,  710,   74,  484, 1234,  540, 1345,  116, 1496, 1391,
+   56, 1540,  499,   80,   79,  498,  543,  493, 1417,  571,
+  959,  268, 1351, 1544,  574,  348,  575,  154,  576,  436,
+   18,  266,  548, 1335, 1116,  578,  579,  504,  541,   46,
+  420,  544,  421,  422,  423,  933,  934,  570,  935,   88,
+  572,  947,   89,  573,   46,  594,  854,  855,  856, 1128,
+  640,  641,  600,  135,  198,   88,   87,  962,   89,  199,
+ 1541,  200,  568, 1510,  192,  487, 1341,  201,  612,  154,
+  755,  482,  277,  674, 1543,  510,  510,  527,  533,   74,
+  605,  744,  745,  746,  195,  808,  182,  623,  943,  611,
+  599,  581,  582, 1141,  497, 1233,  700, 1252, 1142,  196,
+  565,  367,  375,  620,  595,  258,  610,   88,   87,  518,
+   89,   74,  606,  607,  608,  609,  747,  748,  749, 1542,
+  643,  613,  599,  537,  340,  341,  634, 1489,  348,  807,
+  459,  618,  619,  621,  780, 1130,  321,  876,  648,  649,
+  638,   88,   87,  177,   89, 1231,   88,   87,  847,   89,
+  152,  781,  702,  754,  347,  650,  664, 1502,  413,   88,
+   87,  670,  946, 1488,  651,   88,   87,  155,   89,  681,
+  642, 1518, 1126, 1127,  545,  743, 1118,  177,  993,  994,
+  995,  996,  177,  587,  505,  859,  352, 1513,  667,  988,
+  353,  678,   80,   79,  479,  177,  647,  692,  646, 1512,
+  782, 1511,   61,   62,   47,   63,  536, 1508,  357,  645,
+  685,  198,  741,  669,  480,  481,  199,  689,  200,   82,
+   63,   74,  701,  479,  201,  711,  680,  453,   72,  679,
+   88,   87,  519,   89,  512,  520,   74,  507,  508,  351,
+  686,  195,   88,  480,  481,   89,   74,  723,   71,   70,
+  354,  355,  356,  538,  691,  216,  196, 1141,  225, 1506,
+ 1241,  724, 1142,  675,  676,  677,  720,  657,  721,   49,
+   50,   51,   52,   53,   54,   55,  671,  709,   74,  644,
+  479,  730, 1504,   80,   79,  714,   80,   79,  348,   49,
+   50,   51,   52,   53,   54,   55,  719,   74, 1141,  716,
+  480,  481,  726, 1142,   49,   50,   51,   52,   53,   54,
+   55,  156,  157,  158,   69,  758,   74,  542,   74,   88,
+   87,  592,   89,  600,   67,  764,  765,  155,   88,   87,
+  688,   89,   74,  783,   98,  638,  729, 1320, 1319, 1318,
+ 1317,  750,   74,  697,  325,   74,  703, 1172, 1171, 1170,
+ 1169,  542,  705,  348,  706,  177,  377, 1499,  324,  769,
+  770,  771, 1337, 1338, 1339,  642,  815,  789,  813,  819,
+  853,   88,   87,  816,   89,  822,  541, 1180,  801,  802,
+   80,   79,  798,  823,   88,  812,  806,   89,   74,   66,
+  818,  626,  627,  628,   74, 1117,  833,  834,  762, 1450,
+  495,  826,  216,  786,  591,  225, 1439,  800,  793,  803,
+   74,  809,  796,  636,  846,  824,  382,  383,  384,  385,
+  817,  152,   74,  857,   74,   56,  629,  630,  631,  922,
+   74,  740,  821,   49,   50,   51,   52,   53,   54,   55,
+ 1437,  850,  936,  937,  860, 1490,  516,  761,   88,   87,
+  375,   89,  832, 1327,  844, 1247, 1243, 1244, 1245, 1246,
+ 1179, 1435,  769,  600,  949,  192,  845,  942, 1433,  848,
+  276,  156,  157,  158,   49,   50,   51,   52,   53,   54,
+   55,   97,   74,  924,  111,  925,  926,  927,  928,  929,
+  952, 1001, 1416, 1407,  985,  152,  635,  938, 1406,  277,
+ 1013,  965,  362, 1326, 1011,   74,  354,  355,  356,  442,
+ 1000, 1009,  528,  605, 1404,  585,  954,  584,  583,  145,
+ 1390, 1012,  948, 1388,  586,  799,  960,  955,  277, 1017,
+  958,  692,  692, 1032, 1378, 1376, 1237,  350,  441,  999,
+ 1008,  817, 1022,  435,  997, 1007,  851, 1374, 1037, 1014,
+  432,  817,  428,  849, 1019, 1035, 1016, 1018,  429, 1039,
+  434,  989,  326,  323,   88,   87,   94,   89,   74, 1372,
+  433, 1033, 1034, 1045,  352,  772,  828,  277,  353, 1030,
+   80,   79,  479, 1050,  277,   56, 1370, 1368,  691,  691,
+   88,   87,  348,   89,   74,  954,  357,  337,  155,  348,
+ 1366, 1364,  480,  481,  668, 1362,  817, 1359,  436,  998,
+ 1006,  527, 1356, 1123, 1354, 1350,   56, 1334, 1312, 1055,
+  152, 1196,   88,   87,  718,   89,  177,  351, 1044, 1053,
+  193,  615, 1043,  194, 1051,  348, 1042,  352, 1041,   46,
+  352,  353, 1122, 1023,  768,  820, 1067,  814, 1068, 1126,
+ 1127,  501,  733,  617,  616, 1124,  198,  177, 1132,  357,
+  145,  199,  357,  200,   88,   87,  577,   89,  758,  201,
+  564, 1300,  155, 1236,  308, 1119,  455,  109, 1054, 1140,
+ 1129,   92,  529, 1138, 1125, 1394,  195, 1298, 1115, 1185,
+  351, 1183, 1184,  351,   88,   87, 1186,   89, 1178,  277,
+  177,  196, 1296, 1491, 1064, 1060, 1061, 1062, 1063, 1025,
+ 1492, 1133,  145, 1182, 1415,  328,  329,  330, 1294, 1181,
+  956,   96, 1301,  590,  104,  103,  102,  101, 1219,   99,
+  100,  105,   56,    1, 1175, 1332, 1195, 1173, 1299, 1203,
+  332,  941,  156,  157,  158, 1167, 1187, 1188, 1189, 1190,
+ 1230,  766, 1202, 1297, 1165, 1232, 1191, 1192, 1193,   80,
+   79,  479,  588, 1131, 1223, 1225, 1224, 1222,  984, 1295,
+ 1235, 1197, 1400,   88,   87, 1163,   89, 1198, 1161, 1199,
+  945,  480,  481,  589, 1218, 1176,  189,  708, 1174,   88,
+   87, 1005,   89, 1003, 1004, 1159, 1168,  155, 1010,   46,
+  707,  205,  152, 1157,  704, 1166,  633, 1412,  412,  187,
+  625,  790,   61,   62,   47,   63,  156,  157,  158, 1248,
+ 1177,  192,  192,  192,  192,  177, 1164,  277, 1268, 1162,
+   46,  192,  192,  192,  331, 1266,  333,  334,  335,  336,
+ 1155,  625, 1251,  192, 1411, 1265, 1160, 1269, 1410, 1271,
+ 1273, 1274, 1255, 1277, 1158, 1279, 1280, 1281, 1282, 1283,
+ 1284, 1285, 1270, 1287, 1288, 1289, 1290, 1291, 1292, 1293,
+ 1254, 1401, 1259,   56, 1302, 1303, 1153, 1305, 1304, 1151,
+ 1272, 1149, 1275, 1276, 1147, 1278, 1221, 1048, 1267, 1047,
+  836, 1156, 1307, 1286,  354,  355,  356, 1145, 1143,   49,
+   50,   51,   52,   53,   54,   55,  742, 1316,  118,  119,
+  120,  121,  122,  123,  124,  125,  126,  127,  128,  129,
+  130,  131,  132,  665, 1313,  352,  317, 1154,  454,  353,
+ 1152,  315, 1150,  313, 1328, 1148,  378, 1330, 1331,  521,
+ 1321,  156,  157,  158,  311,   45,   46,  357, 1146, 1144,
+ 1336, 1340,  309, 1333,  817,   41,   43,  354,  355,  356,
+  354,  355,  356, 1135, 1342,  277,  277, 1140, 1552,  526,
+  590,   88,   87,  306,   89,   63,  415,  308,  351,  155,
+ 1315, 1343,  308, 1257,  308,   56,  277,  503, 1452,  512,
+  590, 1451,  507,  508,  140,  308, 1380, 1381, 1382, 1383,
+ 1384, 1385, 1386,  308,  944, 1347,   63,  177,  590, 1539,
+  590, 1329, 1344, 1392, 1393,  193,  531, 1346,  194,  532,
+ 1397, 1396,  940,  831,  308,  138, 1379, 1402, 1403, 1031,
+ 1524,  590,  923, 1408,  590,  590, 1395,  830,  811,  767,
+  760,  198,  177, 1405,  717,  566,  199,  349,  200,  258,
+  303,  792, 1564,  117,  201,   97, 1555, 1553, 1140,   49,
+   50,   51,   52,   53,   54,   55, 1546, 1523,  817, 1486,
+ 1485,  195, 1484, 1454, 1449, 1446, 1443, 1442, 1438,   56,
+  524, 1436, 1434, 1432, 1419, 1413,  196,   46, 1409, 1389,
+   49,   50,   51,   52,   53,   54,   55,  134, 1445, 1387,
+ 1377, 1375, 1373, 1371, 1369, 1367, 1365, 1363, 1361, 1360,
+  526, 1455, 1456, 1457, 1358, 1357, 1355, 1453, 1353, 1444,
+ 1448, 1352,   63,  156,  157,  158, 1349, 1324, 1348, 1325,
+ 1458, 1323,  523, 1311, 1470,  525, 1310, 1471, 1469, 1468,
+ 1306, 1256, 1253,  258, 1476,  693, 1220,   88,   87, 1114,
+   89, 1052, 1481, 1038, 1480, 1036, 1029, 1028, 1020,  961,
+  951,  950,   56, 1498,  939, 1483, 1505, 1507, 1509,  858,
+ 1505, 1507, 1509,  530,  841,  840, 1495, 1507, 1516,  838,
+ 1520, 1517, 1515, 1514, 1522, 1521,   88,  835,  829,   89,
+  827,   56,  810, 1497, 1500, 1501,  791,  774,  738,   46,
+  737, 1538,  736, 1493,  735,  734,   49,   50,   51,   52,
+   53,   54,   55,  732,  731, 1529, 1505, 1507, 1509,  684,
+  637,  524,  569,  425,  424,  344,  258,  320,  206, 1562,
+ 1547, 1525,  817, 1545, 1479, 1475, 1474, 1473, 1472, 1447,
+ 1534, 1441, 1440, 1431, 1430,  354,  355,  356, 1551, 1429,
+ 1549, 1428, 1427, 1548, 1535, 1536, 1537,  449, 1426, 1425,
+ 1424, 1423, 1561,   63, 1422, 1421, 1560, 1563, 1420, 1418,
+ 1300, 1298, 1296,  523, 1294, 1322,  525, 1175, 1173, 1557,
+   88, 1558, 1167,   89, 1556, 1526, 1527, 1528, 1530, 1531,
+ 1532, 1533, 1165,   46, 1163,   96, 1161, 1159,  104,  103,
+  102,  101,   56,   99,  100,  105, 1157, 1155, 1153, 1151,
+ 1149, 1309, 1308,  817, 1250, 1249, 1066, 1056, 1049, 1040,
+  245,  246,  247,  248,  249,  250,  251,  252,  253,  254,
+  255,  256,  257,  987,  986,  953,  843,   59,  842,  839,
+  837,  208,  259,  210,  228,  212,  213,   49,   50,   51,
+   52,   53,   54,   55,  728,   41,   43,  727,  713,  687,
+  683,  682,  663,   88,  632,  602,   89,  601,  593,  567,
+  547,  546,   61,   62,   47,   63,   46,  496,  419,  411,
+  874,  386,  319,  223,  304,  522,  514,  868,  517,  869,
+  870,  871,  509,  506,   56,  502,  302,  222,   36,  184,
+   93,   33,  468,  466,  465,   46,  464,  463,  244,  462,
+  227,  243,  215,  209,  245,  246,  247,  248,  249,  250,
+  251,  252,  253,  254,  255,  256,  257,  863,  864,  865,
+   95,   59,  226,  224,  207,  208,  259,  210,  228,  212,
+  213,  211,  879,   31,   56, 1002,  992,  439,  795,   41,
+   43,  431,  794,  430,  427,  539, 1046,  270,   83,   49,
+   50,   51,   52,   53,   54,   55,   61,   62,   47,   63,
+   29,   57,  862,  866,  867,   34,  872,  223,   25,  873,
+   16,  263,   15,   14,  261,   13,  260,   12,   11,    9,
+    8,  222, 1086,    4,    2,  234,  242,  245,  246,  247,
+  248,  249,  250,  251,  252,  253,  254,  255,  256,  257,
+  990,  241,  240,  239,   59,  238,   46,  237,  208,  259,
+  210,  228,  212,  213,  236,  235,  226,  224,  233,  232,
+  231,  230,   41,   43,  229,  114,   77,   42,   56,   38,
+   30,   58,   32,   59,  752,  656,  655, 1482,  299,   61,
+   62,   47,   63,   49,   50,   51,   52,   53,   54,   55,
+  223,   41,   43,   90,  183,  861, 1139,  757,  785, 1258,
+  957, 1137, 1136,  604,  222, 1461, 1460, 1459,   61,   62,
+   47,   63, 1477, 1463, 1462,   60,   35, 1201, 1120,  597,
+  659,   21,  777,   91,   37, 1069,  739,   65,   64,  197,
+  875,   39,   40,    0,  426,    0,    0,    0,    0,  226,
+  224,    0,  982,  981,  980,    0,  975,  974,  973,  972,
+    0,  970,  971,  105,    0,  979,  978,  977,  976,    0,
+    0,    0,  969,  967,    0,    0,   49,   50,   51,   52,
+   53,   54,   55,    0,    0,    0,    0,    0,    0,    0,
+   38,   30,   58,   32,   59,    0,   19,   20,   46,   22,
+   23,   48,    0,   27,   28,   49,   50,   51,   52,   53,
+   54,   55,   41,   43,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,   61,
+   62,   47,   63,    0,    0,    0,   60,   35,  968,    0,
+    0,    0,   21,    0,    0,   37,  444, 1097,    0,  874,
+    0,    0,   39,   40,    0,    0,  868,    0,  869,  870,
+  871,    0,    0,    0,    0,    0, 1073, 1074,    0, 1081,
+ 1095, 1075, 1076, 1077, 1078,    0, 1079, 1080,    0, 1096,
+ 1082, 1083, 1084, 1085,    0,    0,    0,    0,    0,    0,
+    0,    0,   46,    0,    0,    0,  863,  864,  865,    0,
+    0,    0,    0,    0,    0,    0,    0,   19,   20,    0,
+   22,   23,   48,    0,   27,   28,   49,   50,   51,   52,
+   53,   54,   55,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  448,    0,   58,   32,   59,    0,    0,    0,
+  444,  862,  866,  867,    0,  872,  445,    0,  873,    0,
+    0,  446,    0,    0,   41,   43,    0,  146,  874,    0,
+    0,    0,    0,    0,    0,  868,    0,  869,  870,  871,
+    0,   61,   62,   47,   63,    0,  437,  438,    0,  921,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  447,    0,    0,    0,
+    0,    0,    0,    0,    0,  863,  864,  865,   49,   50,
+   51,   52,   53,   54,   55,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  448,    0,   58,   32,
+   59,  443,  440,    0,    0,    0,    0,    0,    0,    0,
+  445,    0,    0,    0,    0,  446,    0,    0,   41,   43,
+  862,  866,  867,    0,  872,    0,    0,  873,   49,   50,
+   51,   52,   53,   54,   55,   61,   62,   47,   63, 1494,
+  437,  438, 1071, 1072,    0, 1087, 1088, 1089,    0, 1090,
+ 1091,    0,    0, 1092, 1093,    0, 1094,    0,    0,    0,
+  447,    0,    0,    0,    0,    0,    0,    0,    0, 1070,
+ 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107,
+ 1108, 1109, 1110,  893,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  443,  440,  920,    0,    0,
+    0,    0,  885,  886,    0,  894,  911,  887,  888,  889,
+  890,    0,  891,  892,    0,  912,  895,  896,  897,  898,
+  893,    0,   49,   50,   51,   52,   53,   54,   55,    0,
+    0,    0,    0,    0,  920,  146,    0,    0,    0,  885,
+  886,    0,  894,  911,  887,  888,  889,  890,    0,  891,
+  892,    0,  912,  895,  896,  897,  898,    0,    0,    0,
+  909,    0,  913,    0,    0,  175,    0,  915,    0,  151,
+  148,  163,  161,  170,    0,  164,  165,  166,  167,    0,
+  168,  169,  917,    0,  171,  172,  173,  174,  563,    0,
+    0,  142,  162,  152,    0,    0,    0,  909,    0,  913,
+  141,  147,    0,    0,  915,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  918,  143,  144,  149,  917,
+  555,    0,  549,  550,  551,  552,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  146,    0,    0,    0,    0,
+  352,    0,    0,    0,  768,    0,    0,    0,    0,    0,
+  160,    0,  918,    0,    0,    0,    0,    0,  557,  558,
+  559,  560,  357,    0,  554,    0,    0,    0,  561,  562,
+  553,    0,    0,    0,    0,  982,  981,  980,    0,  975,
+  974,  973,  972,    0,  970,  971,  105,    0,  979,  978,
+  977,  976,    0,  622,    0,  969,  967,    0,    0,    0,
+    0,    0,    0,    0,    0,  880,    0,  881,  882,  883,
+  884,  899,  900,  901,  916,  902,  903,  904,  905,  906,
+  907,  908,  910,  914,    0,    0,    0,  919,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  880,    0,  881,  882,  883,  884,  899,  900,
+  901,  916,  902,  903,  904,  905,  906,  907,  908,  910,
+  914,  968,   88,   87,  919,   89,    0,    0,    0,    0,
+  155,    0,  556,  175,    0,    0,    0,  151,  148,  163,
+  161,  170,    0,  164,  165,  166,  167,    0,  168,  169,
+    0,    0,  171,  172,  173,  174,  146,    0,  177,  142,
+  162,  352,    0,    0,    0,  353,    0,    0,  141,  147,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  357,  143,  144,  149,    0,    0,  175,
+    0,    0,    0,    0,    0,  163,  161,  170,    0,  164,
+  165,  166,  167,    0,  168,  169,    0,    0,  171,  172,
+  173,  174,    0,    0,  622, 1261,  162,    0,  160,  159,
+    0,    0,   88,   87,    0,   89,    0,    0,    0,    0,
+  155,    0,    0,  175,    0,    0,    0,  151,  148,  163,
+  161,  170,    0,  164,  165,  166,  167,    0,  168,  169,
+    0,    0,  171,  172,  173,  174,    0,    0,  177,  142,
+  162,    0,    0, 1262,    0,    0,    0,    0,  141,  147,
+    0,    0,    0,    0,  156,  157,  158,    0,    0,    0,
+    0, 1260,    0,    0,  143,  144,  149,    0,    0,    0,
+    0,    0,    0,    0,  297,  198,  146,    0,    0,    0,
+  199,  352,  200,    0,    0,  353,    0,    0,  201,    0,
+    0,   63,    0,    0,    0,    0,    0,    0,  160,    0,
+  354,  355,  356,  357,    0,  195,  284,    0,  279,  280,
+  281,  282,  283,    0,  640,  641,    0,  287,    0,    0,
+  196,    0,    0,    0,    0,    0,  285,    0,    0,    0,
+  295,    0,  286,    0,  622,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  288,  289,  290,  291,  292,  293,
+  294,  298,    0,    0,  156,  157,  158,  296,    0,    0,
+    0,    0,    0,   88,   87,    0,   89,    0,    0,    0,
+  146,  155,    0,    0,  175,    0,    0,    0,  151,  148,
+  163,  161,  170,    0,  164,  165,  166,  167,    0,  168,
+  169,    0,    0,  171,  172,  173,  174,    0,    0,  177,
+  142,  162,    0,    0,    0,    0,    0,    0,    0,  141,
+  147,    0,    0,    0,  348,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  143,  144,  149,  274, 1217,
+ 1216, 1211,    0, 1210, 1209, 1208, 1207,  146, 1205, 1206,
+  105,    0, 1215, 1214, 1213, 1212,    0,    0,    0,    0,
+    0, 1204,    0,    0,    0,    0,    0,    0,    0,  160,
+    0,  354,  355,  356,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  640,  641,  982,  981,  980,
+    0,  975,  974,  973,  972,    0,  970,  971,  105,    0,
+  979,  978,  977,  976,    0,  274,    0,  969,  967,    0,
+    0,    0,    0,   88,   87,    0,   89,    0,    0,    0,
+    0,  155,    0,    0,  175,  156,  157,  158,  151,  148,
+  163,  161,  170,    0,  164,  165,  166,  167,    0,  168,
+  169,    0,    0,  171,  172,  173,  174,  146,    0,  177,
+  142,  162,    0,    0,    0,    0,    0,    0,    0,  141,
+  147,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  968,    0,  143,  144,  149,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  274,    0,   88,   87,  160,
+   89,  354,  355,  356,  146,  155,    0,    0,  175,    0,
+    0,    0,  151,  148,  163,  161,  170,    0,  164,  165,
+  166,  167,    0,  168,  169,    0,    0,  171,  172,  173,
+  174,    0,    0,  177,  142,  162,    0,    0,    0,    0,
+    0,    0,    0,  141,  147,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  156,  157,  158,    0,  143,
+  144,  149,  274,  805,   88,   87,    0,   89,    0,    0,
+    0,    0,  155,    0,    0,  175,    0,    0,    0,  151,
+  148,  163,  161,  170,    0,  164,  165,  166,  167,    0,
+  168,  169,    0,  160,  171,  172,  173,  174,  146,    0,
+  177,  142,  162,    0,    0,    0,    0,  804,    0,    0,
+  141,  147,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  143,  144,  149,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  156,
+  157,  158,    0,    0,    0,    0,  274,    0,    0,    0,
+  160,  159,    0,    0,   88,   87,  146,   89,    0,    0,
+    0,    0,  155,    0,    0,  175,    0,    0,    0,  151,
+  148,  163,  161,  170,    0,  164,  165,  166,  167,    0,
+  168,  169,    0,    0,  171,  172,  173,  174,    0,    0,
+  177,  142,  162,    0,    0,    0,    0,    0,    0,    0,
+  141,  147,    0,    0,    0,    0,  156,  157,  158,    0,
+    0,    0,    0,    0,  274,    0,  143,  144,  149,    0,
+    0,   88,   87,    0,   89,    0,    0,    0,    0,  155,
+    0,    0,  175,    0,    0,    0,  151,  148,  163,  161,
+  170,    0,  164,  165,  166,  167,    0,  168,  169,    0,
+  160,  171,  172,  173,  174,    0,    0,  177,  142,  162,
+    0,    0,    0,    0,    0,    0,    0,  759,  147,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  143,  144,  149,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  146,    0,    0,    0,    0,  156,  157,  158,    0,
+    0,    0,    0,    0,    0,   88,   87,  160,   89,    0,
+    0,    0,    0,  155,    0,    0,  175,    0,    0,    0,
+  151,  148,  163,  161,  170,    0,  164,  165,  166,  167,
+    0,  168,  169,    0,    0,  171,  172,  173,  174,    0,
+    0,  177,  142,  162,    0,    0,  146,    0,    0,    0,
+    0,  141,  147,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  156,  157,  158,    0,  143,  144,  149,
+    0,    0,    0,   88,   87,    0,   89,    0,    0,    0,
+    0,  155,    0,    0,  175,    0,    0,    0,  151,  148,
+  163,  161,  170,    0,  164,  165,  166,  167,    0,  168,
+  169,  652,  146,  171,  172,  173,  174,    0,    0,  177,
+  142,  162,   88,   87,    0,   89,    0,    0,    0,  141,
+  147,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  143,  144,  149,    0,    0,
+    0,    0,    0,    0,    0,    0,  409,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  146,  156,  157,  158,
+  988,    0,    0,    0,    0,    0,    0,    0,    0,  458,
+    0,    0,    0,    0,  391,    0,    0,    0,  407,    0,
+    0,  389,  390,    0,    0,    0,  393,  394,  405,  395,
+  396,  397,  398,  399,  400,  401,  402,  392,    0,    0,
+    0,    0,    0,  406,    0,    0,  404,    0,    0,    0,
+  146,    0,    0,  403,  722,    0,    0,    0,    0,    0,
+    0,    0,  408,    0,    0,  156,  157,  158,  488,  175,
+  489,    0,    0,  151,  148,  163,  161,  170,    0,  164,
+  165,  166,  167,    0,  168,  169,    0,    0,  171,  172,
+  173,  174,    0,    0,  177,  142,  162,    0,    0,    0,
+    0,    0,    0,    0,  141,  147,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  143,  144,  149,  380,  175,  381,    0,    0,  151,  148,
+  163,  161,  170,    0,  164,  165,  166,  167,    0,  168,
+  169,    0,    0,  171,  172,  173,  174,    0,    0,    0,
+  142,  162,    0,    0,  160,    0,    0,    0,    0,  141,
+  147,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  143,  144,  149,    0,    0,
+  175,    0,    0,    0,  151,  148,  163,  161,  170,    0,
+  164,  165,  166,  167,    0,  168,  169,    0,    0,  171,
+  172,  173,  174,    0,    0,    0,  142,  162,    0,  160,
+    0,    0,    0,    0,    0,  141,  147,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  143,  144,  149,  175,    0,    0,    0,  151,  148,
+  163,  161,  170,    0,  164,  165,  166,  167,    0,  168,
+  169,    0,    0,  171,  172,  173,  174,    0,    0,    0,
+  142,  162,    0,    0,    0,  160,    0,    0,    0,  141,
+  147,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  143,  144,  149,  175,    0,
+    0,    0,  151,  148,  163,  161,  170,    0,  164,  165,
+  166,  167,    0,  168,  169,    0,    0,  171,  172,  173,
+  174,    0,    0,    0,  142,  162,    0,    0,    0,  160,
+    0,    0,    0,  141,  147,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  143,
+  144,  149,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  160
+};
+
+YYSTATIC YYCONST short YYFARDATA YYPACT[] = {
+-1000, 1543,-1000,  566,  501,-1000,-1000,-1000,-1000,-1000,
+-1000,-1000,  491,  426,  425,  405,-1000,-1000,-1000,   28,
+   28, -454,   39,   39,-1000,-1000,-1000,  396,-1000, -129,
+  411,-1000,  890,  743,    7,  886,   28, -366, -369,-1000,
+ -171,  777,    7,  777,-1000,-1000,-1000,   90, 2292,  411,
+  411,  411,  411,-1000,-1000,  124,-1000,-1000,-1000, -162,
+ 1048,-1000,-1000, 1046,    7,    7,-1000,-1000, 1403,-1000,
+-1000,-1000,-1000,-1000,-1000,-1000,   28, -139,-1000,-1000,
+-1000,-1000,  359, -132, 2954, 1220,-1000,-1000,-1000,-1000,
+ 2430,-1000,   28,-1000, 1317,-1000, 1308, 1644,    7, 1233,
+ 1212, 1204, 1193, 1191, 1186, 1642, 1486,   18,-1000,   28,
+  600,  662,-1000,-1000,   95, 1220,  411, 2954,-1000,-1000,
+-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
+-1000,-1000,-1000, 1484,  166, 1303,  448, -244, -245, -246,
+ -247,  359,-1000, -118,  359,  661,  368,-1000,-1000,  -76,
+-1000, 3547,  186, 1189,-1000,-1000,-1000,-1000,-1000, 3383,
+-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
+  435,-1000,-1000,-1000,-1000,-1000, 1220, 1641,  326, 1220,
+ 1220, 1220,-1000, 3222,   79,-1000,-1000, 1639, 1047, 2854,
+-1000, 3547,-1000,-1000,-1000,  216,  216,-1000, 1638,-1000,
+-1000,   29, 1483, 1482, 1779, 1432,-1000,-1000,   28,-1000,
+   28,   77,-1000,-1000,-1000,-1000, 1170,-1000,-1000,-1000,
+-1000,-1000,  885,   28, 3183,-1000,   67,  -94,-1000,-1000,
+  424,   28,   39,  228,    7,  424,  661, 3328, 2954,  -95,
+  216, 2854, 1637,-1000,  282,-1000,-1000,-1000,-1000,-1000,
+-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
+  826,   71, 1114,  857,-1000,   87,-1000,  298,  359,-1000,
+-1000, 2954,-1000,-1000,  181,  899,  216,  411,-1000,-1000,
+-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
+-1000,-1000,-1000,-1000,-1000,-1000,-1000, 1631, 1630, 2084,
+  877,  275, 1301, 1629,   79, 1481,    0,-1000,   28,    0,
+-1000,   39,-1000,   28,-1000,   28,-1000,   28,-1000,-1000,
+-1000,-1000,  873,-1000,   28,   28,-1000, 1220,-1000,-1000,
+-1000, -387,-1000,-1000,-1000,-1000,-1000,  662,  488,   94,
+-1000,-1000, 1220, 1022,-1000, 1292,  581, 1628,-1000,   82,
+  411,  115,-1000,-1000,-1000, 1627, 1625, 3547,  411,  411,
+  411,  411,-1000,  359,-1000,-1000, 3547,  604,-1000, 1220,
+-1000,  -90,-1000,  899,  838,  861,  860,  411,  411, 2693,
+-1000,-1000,-1000,-1000,-1000,-1000,   28, 1292, 1081,-1000,
+-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
+-1000,-1000,-1000,-1000,-1000,  362,-1000,-1000,-1000, 1624,
+ 1045,-1000,  673, 1479,-1000,-1000, 2553,-1000,-1000,   28,
+-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,  386,
+  375,  373,-1000,-1000,-1000,-1000,-1000,   28,   28,  332,
+ 3115,-1000,-1000, -214, -217,-1000,-1000,-1000,-1000,-1000,
+-1000,-1000,  -65, 1622,-1000,   28, 1165,    1,  216,  813,
+   28,-1000,  -94,   63,   63,   63,   63, 2954,  282,-1000,
+-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
+ 1621, 1620, 1478,-1000,-1000,-1000, 2693,-1000,-1000,-1000,
+-1000, 1292, 1619,    7, 3547,-1000,  424, 1320,-1000, -136,
+ -138,-1000,-1000, -356,-1000,-1000,    7,  354,  391,    7,
+-1000,-1000, 1043,-1000,-1000,    7,-1000,    7,-1000, 1039,
+ 1026,-1000,-1000,  411, -177, -371, 1618,-1000,-1000,-1000,
+-1000,  411, -380,-1000,-1000, -350,-1000,-1000,-1000, 1300,
+-1000,  831,  411, 3547, 1220, 3493,   28,   53, 1187,-1000,
+-1000,-1000,-1000,-1000,-1000,-1000, 1617,-1000,-1000,-1000,
+-1000,-1000,-1000, 1614,-1000,-1000, 1317,   53, 1473,-1000,
+ 1472,  859, 1464, 1463, 1461, 1459, 1457,-1000,  468, 1148,
+-1000,   86, 1220,-1000,-1000,-1000,   52,  411,   53,  330,
+  108, 3021,-1000,-1000, 1296, 1220,-1000,  654,-1000,-1000,
+  -63, 2954, 2954,  989, 1295,  899, 1220, 1220, 1220, 1220,
+-1000, 2392,-1000, 1220,-1000,  411,  411,  411,  782, 1220,
+   -7, 1220,  147, 1456,-1000,  128,-1000,-1000,-1000,-1000,
+-1000,-1000,   28,-1000, 1292,-1000,-1000,  661,  -16, 1051,
+-1000,-1000, 1220, 1455, 1226,-1000,-1000,-1000,-1000,-1000,
+-1000,  -17,  216,  734, 2954, 2787,   59,  488, 1451, 1294,
+-1000,-1000, 3493,  -65,  854,   28,  -22, 3547,   28, 1220,
+  852,-1000,-1000,-1000,  424,-1000,-1000,-1000,-1000,-1000,
+-1000,-1000,   28,   39,-1000,  -18, 1220,   53, 1449,  836,
+ 1447, 1293, 1279,-1000,   79,   28,   28, 1446, 1132,-1000,
+-1000, 1292, 1600, 1438, 1599, 1434, 1433, 1598, 1596, 1220,
+  411,-1000,  411,   28,  131,  411,    7, 2954,  411,  753,
+  902,  192, -157, 1428,   96, 1824,  120, 2016,   28,-1000,
+ 1291,-1000,  883,-1000,  883,  883,  883,  883,  883, -120,
+-1000,   28,   28,  411,-1000,-1000,-1000,-1000,-1000,-1000,
+ 1220, 1423, 1278,  980,-1000,-1000,  263, 1260, 1019,  199,
+   78,-1000,  -42,   28, 1420, 1419,-1000, 3547, 1595, 1189,
+ 1189, 1189,  411,  411,-1000,  958,  270,  128,-1000,-1000,
+-1000,-1000,-1000, 1418,  232, 1635, 1007,  -22, 1594, 1593,
+ 3439,-1000,-1000, 1685,   56,  666,  973,  -22, 3547,   28,
+ 1220, -337,  411, 1220,-1000,-1000, 3547,-1000,-1000, 1220,
+-1000,  -65,  192, 1417, -266,-1000,-1000, 1220, 2693,  850,
+  948, -144, -147, 1416, 1415,  411, 1288,-1000,  -65,-1000,
+  424,  424,-1000,-1000,-1000,-1000,  354,-1000,-1000,-1000,
+-1000,-1000,-1000,-1000, 1189, 1220, 1414,   28, 1220, 1412,
+-1000,  411,  -22, 1579,  845,  843,  839,  835,-1000,   53,
+ 1715,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
+-1000,-1000, 1131, 1129, 1578,  948,   79, 1410,  887,    7,
+ 1577, -400,  -78,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
+-1000,-1000,-1000,-1000,  724,-1000,-1000,-1000,-1000,-1000,
+-1000,-1000,-1000,-1000,-1000,-1000, 1576, 1576,-1000, 1576,
+ 1750,-1000,-1000, -412,-1000, -402,-1000,-1000, -417,-1000,
+-1000,-1000, 1408,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
+   79,-1000,-1000,-1000,-1000,-1000,   61,  432, 1220,-1000,
+   53,  630,  224,-1000, 3021,  312, 1002,-1000,-1000,-1000,
+-1000,-1000,  899,  -65, 1189, 1220,-1000,  411, 1219, 2954,
+-1000,-1000,-1000,  200,-1000,-1000,-1000, 1158, 1157, 1144,
+ 1141, 1139, 1136, 1100, 1063, 1055, 1038, 1035, 1014, 1005,
+  366,  997,  994,    7,  637, 1051,  -65,  -65,   28,  934,
+-1000,-1000,-1000,  661,  661,  661,  661,-1000,-1000,-1000,
+-1000,-1000,-1000,  661,  661,  661,-1000,-1000,-1000,-1000,
+-1000, -434, 2693,  828,-1000,  661, 1220, 1187,-1000,   79,
+-1000,   79,  -23,-1000,-1000, 2602,   79,   28,-1000,-1000,
+ 1220,-1000, 1405,-1000,-1000, 1128,-1000,-1000, -301, 1050,
+ 2016,-1000,-1000,-1000,-1000, 1292,-1000, -254, -257,   28,
+-1000,-1000,-1000,-1000,  352,  169,   53,  882,  745,-1000,
+-1000,-1000,-1000,-1000,-1000,-1000, -423,-1000,-1000,   37,
+-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
+-1000,  475,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
+-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
+-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
+-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,   28,-1000,
+-1000,-1000,-1000, 1575, 1292, 1574,-1000,-1000,-1000,-1000,
+-1000,  274, 1401, 1219,-1000,  128, 1400, 1239,-1000, 2348,
+-1000,-1000,-1000,  -56,   28,  829,   28, 2650,   28,  314,
+   28,  795,   28,   39,   28,   28,   28,   28,   28,   28,
+   28,   39,   28,   28,   28,   28,   28,   28,   28,  978,
+  962,  947,  931,   28,   28, -160,   28, 1399, 1292,-1000,
+-1000, 1572, 1571, 1395, 1392,  825,-1000,-1000,-1000,-1000,
+-1000,-1000,-1000,-1000,  216,  -27,-1000, 1240,-1000,-1000,
+  -22,-1000,-1000, 1292,-1000, 1570, 1569, 1568, 1567, 1566,
+ 1557,  356, 1556, 1554, 1552, 1542, 1538, 1537,-1000,-1000,
+-1000,  354,-1000, 1535, 1390, 1386,-1000,-1000,-1000,-1000,
+ 1388,-1000,  710,   28,-1000, 1267,   28,   28,  974,   53,
+  824,-1000,-1000,-1000,-1000,-1000,-1000,-1000,   60,   28,
+  381,  241,-1000,-1000,-1000,-1000,-1000, 2954,  205,-1000,
+-1000,-1000, 1011, 1387, 1385,  822,   49, 1380, 1377,  821,
+ 1375,  819, 1374, 1373,  814, 1368, 1367,  812, 1366,  808,
+ 1365,  807, 1364,  794, 1363,  793, 1362,  776, 1361,  754,
+ 1360,  742, 1359,  741,   39,   28,   28,   28,   28,   28,
+   28,   28, 1358,  730, 1348,  727,-1000,  174,  -65,  -65,
+-1000,-1000,  923, 3547,  -22,  -65, 1012, 1534, 1532, 1531,
+ 1530, 1113,  -65,-1000,-1000,-1000,-1000,   28,  721,   53,
+  705,  700,   28, 1292,-1000,-1000, 1347, 1090, 1086, 1049,
+ 1344,-1000,   36,-1000,  953,  699,   45,-1000,-1000,-1000,
+ 1529, 1343,-1000,-1000, 1528,-1000, 1525,-1000,-1000, 1524,
+-1000,-1000, 1521,-1000, 1520,-1000, 1519,-1000, 1518,-1000,
+ 1512,-1000, 1511,-1000, 1509,-1000, 1504,-1000, 1503, 1342,
+  675, 1341,  668, 1340,  647, 1337,  613,-1000, 1502,-1000,
+ 1501,-1000, 1336, 1335,-1000, 2693, 1012, 1334, 1499,-1000,
+  398,  354, 1333,  606,-1000, 1247,-1000, 2053, 1332,-1000,
+   28,   28,   28,-1000,-1000, 2650,-1000,-1000,-1000,-1000,
+-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
+-1000,-1000,-1000, 1498,-1000, 1497,-1000, 1496,-1000, 1495,
+-1000,-1000,-1000,-1000,  -30, 1494,  948,  -65,-1000,-1000,
+-1000,   53,-1000,  887,-1000, 1331, 1329, 1328,-1000,  164,
+  704, 2188,  257,  616,  416,  541,  518,  466,  322,  460,
+  458,  446,-1000,-1000,-1000,-1000,  430,  153,  -22,  -65,
+-1000, 1326, 1207, 1265,-1000,-1000,-1000,-1000,-1000,-1000,
+-1000,-1000,   38,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
+-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
+-1000,-1000,-1000,-1000,  319,  378,  333,  272,-1000,-1000,
+-1000, 1493, 1325,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
+-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, 1490,   53,
+-1000,-1000,-1000,-1000,-1000,  -65, -435,   28, 1227, 1316,
+ -199, 1315,-1000,-1000,  216,-1000, 3547, 2693,  -45,  -22,
+ 1012, 1489,  -65, 1311,-1000
+};
+
+YYSTATIC YYCONST short YYFARDATA YYPGO[] = {
+    0,   53,   57,    6, 1900,   43,   40,   29, 1899,    0,
+ 1898, 1897, 1896,  195,   50, 1895, 1893,    2, 1892,   48,
+   38,    1,   27,   30,   31,    4, 1890,   45,   22,   59,
+ 1889,  136,   39,    9,   25,    7,   13, 1888,   41, 1887,
+   14,   26, 1884, 1883,    5,    3,    8,   10, 1882, 1877,
+ 1876, 1875,   32,   33,   70, 1873, 1872, 1871, 1870,   12,
+ 1869, 1868,   11, 1867,   35, 1866,   18,   36,   16,   24,
+   42,   23,  458,   65, 1276,   52,  127, 1864, 1863, 1848,
+ 1847, 1846, 1845,   19,   34, 1844, 1353, 1837, 1836,   28,
+  784,  119, 1835,   47, 1245, 1834, 1831, 1830, 1829, 1828,
+ 1825, 1824, 1817, 1815, 1813, 1812, 1811, 1796, 1795, 1033,
+ 1794,   64,   62, 1793,   58,  150,   56,   76, 1790, 1789,
+   49, 1788, 1787, 1786, 1785, 1784, 1783,   61, 1782, 1781,
+ 1780,   66,  114,   44, 1778,   15,  284, 1775, 1771, 1770,
+ 1758, 1757, 1755, 1754, 1753, 1752, 1751, 1748, 1747,  770,
+ 1746, 1745, 1743, 1742, 1741, 1734, 1713, 1712,   60, 1711,
+ 1710,  113, 1709, 1708, 1707,   98, 1706, 1704, 1703, 1702,
+ 1701, 1700, 1699,   69, 1696,   67, 1698,   63, 1695,  484,
+ 1693, 1692, 1688, 1686, 1685, 1473
+};
+YYSTATIC YYCONST yyr_t YYFARDATA YYR1[]={
+
+   0, 109, 109, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 136,
+ 136,  36,  36, 133, 133, 133,   2,   2,   1,   1,
+   1,   9,  24,  24,  23,  23,  23, 134, 134, 134,
+ 134, 134, 135, 135, 135, 135, 135, 135, 135, 135,
+ 135,  93,  93,  93,  93,  94,  94,  94,  94,  10,
+  11,  73,  72,  72,  59,  61,  61,  61,  62,  62,
+  62,  65,  65, 132, 132, 132,  60,  60,  60,  60,
+  60,  60, 130, 130, 130, 119,  12,  12,  12,  12,
+  12,  12, 118, 137, 113, 138, 139, 111,  77,  77,
+  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,
+  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,
+  77,  77,  77,  77,  77, 140, 140, 141, 141, 112,
+ 112, 142, 142,  56,  56,  57,  57,  69,  69,  18,
+  18,  18,  18,  18,  19,  19,  68,  68,  67,  67,
+  58,  21,  21,  22, 143, 143, 143, 143, 143, 143,
+ 143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
+ 143, 143, 143, 116,  79,  79,  79,  79,  79,  79,
+  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,
+   4,   4,  35,  35,  16,  16,  75,  75,  75,  75,
+  75,  75,  75,   7,   7,   7,   7,   8,   8,   8,
+   8,   8,   8,   8,  76,  74,  74,  74,  74,  74,
+  74, 144, 144,  81,  81,  81, 145, 145, 150, 150,
+ 150, 150, 150, 150, 150, 150, 146,  82,  82,  82,
+ 147, 147, 151, 151, 151, 151, 151, 151, 151, 152,
+  38,  38,  34,  34, 153, 114,  78,  78,  78,  78,
+  78,  78,  78,  78,  78,  78,  78,  78,  78,  78,
+  78,  78,  78,  78,  78,  78,  78,  78,  78,  83,
+  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,
+  83,  83,  83,  83,  83,   3,   3,   3,  13,  13,
+  13,  13,  13,  80,  80,  80,  80,  80,  80,  80,
+  80,  80,  80,  80,  80,  80,  80,  80, 154, 115,
+ 115, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 155, 155, 158, 159, 156, 161, 161,
+ 160, 160, 160, 163, 162, 162, 162, 162, 166, 166,
+ 166, 169, 164, 167, 168, 165, 165, 165, 117, 170,
+ 170, 172, 172, 172, 171, 171, 173, 173,  14,  14,
+ 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+ 174, 174, 174, 174, 174,  41,  41,  41,  41,  41,
+  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,
+  41,  41,  41,  41, 175,  31,  31,  32,  32,  39,
+  39,  39,  40,  40,  40,  40,  40,  40,  40,  40,
+  40,  40,  40,  40,  40,  40,  40,  40,  40,  40,
+  40,  40,  40,  40,  40,  40,  40,  40,  42,  42,
+  42,  43,  43,  43,  47,  47,  46,  46,  45,  45,
+  44,  44,  48,  48,  49,  49,  49,  50,  50,  50,
+  50,  51,  51, 149,  95,  96,  97,  98,  99, 100,
+ 101, 102, 103, 104, 105, 106, 107, 108, 157, 157,
+ 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
+ 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
+ 157,   6,   6,   6,   6,   6,  53,  53,  54,  54,
+  55,  55,  25,  25,  26,  26,  27,  27,  27,  70,
+  70,  70,  70,  70,  70,  70,  70,  70,  70,   5,
+   5,  71,  71,  71,  71,  33,  33,  33,  33,  33,
+  33,  33,  33,  33,  33,  33,  33,  33,  33,  33,
+  33,  33,  33,  33,  33,  33,  33,  33,  33,  33,
+  33,  33,  33,  33,  33,  33,  33,  33,  33,  33,
+  33,  33,  33,  33,  33,  33,  33,  33,  33,  33,
+  33,  33,  33,  33,  33,  33,  33,  33,  33,  33,
+  20,  20,  15,  15,  15,  15,  15,  15,  15,  15,
+  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,
+  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,
+  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,
+  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,
+  15,  28,  28,  28,  28,  28,  28,  28,  28,  28,
+  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,
+  28,  28,  28,  28,  28,  52,  52,  52,  52,  52,
+  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,
+  52,  52,  52,  30,  30,  29,  29,  29,  29,  29,
+ 131, 131, 131, 131, 131, 131,  64,  64,  64,  63,
+  63,  87,  87,  84,  84,  85,  17,  17,  37,  37,
+  37,  37,  37,  37,  37,  37,  86,  86,  86,  86,
+  86,  86,  86,  86,  86,  86,  86,  86,  86,  86,
+  86, 176, 176, 120, 120, 120, 120, 120, 120, 120,
+ 120, 120, 120, 120, 121, 121,  88,  88,  89,  89,
+ 177, 122,  90,  90,  90,  90,  90,  90,  90,  90,
+  90,  90, 123, 123, 178, 178, 178,  66,  66, 179,
+ 179, 179, 179, 179, 179, 180, 182, 181, 124, 124,
+ 125, 125, 183, 183, 183, 183, 126, 148,  91,  91,
+  91,  91,  91,  91,  91,  91,  91,  91, 127, 127,
+ 184, 184, 184, 184, 184, 184, 184, 128, 128,  92,
+  92,  92, 129, 129, 185, 185, 185, 185 };
+YYSTATIC YYCONST yyr_t YYFARDATA YYR2[]={
+
+   0,   0,   2,   4,   4,   3,   1,   1,   1,   1,
+   1,   1,   4,   4,   4,   4,   1,   1,   1,   2,
+   2,   3,   2,   2,   1,   1,   1,   4,   1,   0,
+   2,   1,   3,   2,   4,   6,   1,   1,   1,   1,
+   3,   1,   1,   1,   1,   4,   4,   4,   4,   4,
+   4,   4,   2,   3,   2,   2,   2,   1,   1,   2,
+   1,   2,   4,   6,   3,   5,   7,   9,   3,   4,
+   7,   1,   1,   1,   2,   0,   2,   2,   0,   6,
+   2,   1,   1,   1,   1,   1,   1,   1,   1,   3,
+   2,   3,   1,   2,   3,   7,   0,   2,   2,   2,
+   2,   2,   3,   3,   2,   1,   4,   3,   0,   2,
+   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,
+   2,   2,   2,   2,   2,   3,   3,   3,   3,   3,
+   3,   2,   2,   2,   5,   0,   2,   0,   2,   0,
+   2,   3,   1,   0,   1,   1,   3,   0,   3,   1,
+   1,   1,   1,   1,   0,   2,   4,   3,   0,   2,
+   3,   0,   1,   5,   3,   4,   4,   4,   1,   1,
+   1,   1,   1,   2,   2,   4,  13,  22,   1,   1,
+   5,   3,   4,   7,   0,   2,   2,   2,   2,   2,
+   2,   2,   5,   2,   2,   2,   2,   2,   2,   5,
+   0,   2,   0,   2,   0,   3,   9,   9,   7,   7,
+   1,   1,   1,   2,   2,   1,   4,   0,   1,   1,
+   2,   2,   2,   2,   4,   2,   5,   3,   2,   2,
+   1,   4,   3,   0,   2,   2,   0,   2,   2,   2,
+   2,   2,   1,   1,   1,   1,   9,   0,   2,   2,
+   0,   2,   2,   2,   2,   1,   1,   1,   1,   1,
+   0,   4,   1,   3,   1,  13,   0,   2,   2,   2,
+   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,
+   2,   2,   2,   2,   2,   5,   8,   6,   5,   0,
+   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,
+   4,   4,   4,   4,   5,   1,   1,   1,   0,   4,
+   4,   4,   4,   0,   2,   2,   2,   2,   2,   2,
+   2,   2,   2,   2,   2,   2,   2,   5,   1,   0,
+   2,   2,   1,   2,   4,   5,   1,   1,   1,   1,
+   2,   1,   1,   1,   1,   1,   4,   6,   4,   4,
+  11,   1,   5,   3,   5,   3,   1,   2,   2,   1,
+   2,   4,   4,   1,   2,   2,   2,   2,   2,   2,
+   2,   1,   2,   1,   1,   1,   4,   4,   2,   4,
+   2,   0,   1,   1,   3,   1,   3,   1,   0,   3,
+   5,   4,   3,   5,   5,   5,   5,   5,   5,   2,
+   2,   2,   2,   2,   2,   4,   4,   4,   4,   4,
+   4,   4,   4,   5,   5,   5,   5,   4,   4,   4,
+   4,   4,   4,   3,   2,   0,   1,   1,   2,   1,
+   1,   1,   1,   4,   4,   5,   4,   4,   4,   7,
+   7,   7,   7,   7,   7,   7,   7,   7,   7,   8,
+   8,   8,   8,   7,   7,   7,   7,   7,   0,   2,
+   2,   0,   2,   2,   0,   2,   0,   2,   0,   2,
+   0,   2,   0,   2,   0,   2,   2,   0,   2,   3,
+   2,   0,   2,   1,   1,   1,   1,   1,   1,   1,
+   1,   1,   1,   1,   1,   1,   1,   2,   1,   2,
+   2,   2,   2,   2,   2,   3,   2,   2,   2,   5,
+   3,   2,   2,   2,   2,   2,   5,   4,   6,   2,
+   4,   0,   3,   3,   1,   1,   0,   3,   0,   1,
+   1,   3,   0,   1,   1,   3,   1,   3,   4,   4,
+   4,   4,   5,   1,   1,   1,   1,   1,   1,   1,
+   3,   1,   3,   4,   1,   0,  10,   6,   5,   6,
+   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
+   1,   1,   2,   2,   2,   2,   1,   1,   1,   1,
+   2,   3,   4,   6,   5,   1,   1,   1,   1,   1,
+   1,   1,   2,   2,   1,   2,   2,   4,   1,   2,
+   1,   2,   1,   2,   1,   2,   1,   2,   1,   1,
+   0,   5,   0,   1,   1,   1,   1,   1,   1,   1,
+   1,   1,   1,   1,   2,   2,   2,   2,   1,   1,
+   1,   1,   1,   3,   2,   2,   1,   1,   1,   1,
+   1,   1,   1,   1,   1,   2,   1,   1,   1,   1,
+   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
+   1,   2,   1,   3,   2,   3,   4,   2,   2,   2,
+   5,   5,   7,   4,   3,   2,   3,   2,   1,   1,
+   2,   3,   2,   1,   2,   1,   1,   1,   1,   1,
+   1,   1,   1,   1,   2,   2,   2,   2,   1,   1,
+   1,   1,   1,   1,   3,   0,   1,   1,   3,   2,
+   6,   7,   3,   3,   3,   6,   0,   1,   3,   5,
+   6,   4,   4,   1,   3,   3,   1,   1,   1,   1,
+   4,   1,   6,   6,   6,   4,   1,   1,   1,   1,
+   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
+   1,   1,   1,   3,   2,   5,   4,   7,   6,   7,
+   6,   9,   8,   3,   8,   4,   0,   2,   0,   1,
+   3,   3,   0,   2,   2,   2,   3,   2,   2,   2,
+   2,   2,   0,   2,   3,   1,   1,   1,   1,   3,
+   8,   2,   3,   1,   1,   3,   3,   3,   4,   6,
+   0,   2,   3,   1,   3,   1,   4,   3,   0,   2,
+   2,   2,   3,   3,   3,   3,   3,   3,   0,   2,
+   2,   3,   3,   4,   2,   1,   1,   3,   5,   0,
+   2,   2,   0,   2,   4,   3,   1,   1 };
+YYSTATIC YYCONST short YYFARDATA YYCHK[]={
+
+-1000,-109,-110,-111,-113,-114,-116,-117,-118,-119,
+-120,-121,-122,-124,-126,-128,-130,-131,-132, 524,
+ 525, 459, 527, 528,-133,-134,-135, 531, 532,-139,
+ 408,-152, 410,-170,-137, 454,-176, 462, 407, 469,
+ 470, 429, -87, 430, -93, -94, 273, 448, 529, 533,
+ 534, 535, 536, 537, 538, 539,  59,-138, 409, 411,
+ 453, 446, 447, 449, -10, -11, 123, 123,-115, 123,
+ 123, 123, 123,  -9, 264,  -9, 526, -88, -24, 265,
+ 264, -24, 123,-140, 314,  -1,  -2, 261, 260, 263,
+ -78, -16,  91,-171, 123,-174, 278,  38,-175, 286,
+ 287, 284, 283, 282, 281, 288, -31, -32, 267,  91,
+  -9, -90, 468, 468, -92,  -1, 468, -86, 431, 432,
+ 433, 434, 435, 436, 437, 438, 439, 440, 441, 442,
+ 443, 444, 445, -31, -86, 263, -28, -70, -74, -93,
+ -94, 306, 297, 322, 323,-149,  33, 307, 276, 324,
+ -52, 275,  91,  -5, -76, 268, 412, 413, 414, 357,
+ 356, 278, 298, 277, 281, 282, 283, 284, 286, 287,
+ 279, 290, 291, 292, 293, 271,  -1, 296,  -1,  -1,
+  -1,  -1, 262, -77,-172, 318, 378,  61, -73,  40,
+ -75,  -7, -76, 269, 272, 325, 340,  -8, 295, 300,
+ 302, 308, -31, -31,-112,-109, 125,-155, 415,-156,
+ 417,-154, 419, 420,-117,-157,  -2,-131,-120,-133,
+-132,-135, 471, 457, 507,-158, 506,-160, 418, -95,
+ -96, -97, -98, -99,-108,-100,-101,-102,-103,-104,
+-105,-106,-107,-159,-163, 394, 395, 396, 397, 398,
+ 399, 400, 401, 402, 403, 404, 405, 406, 123, 416,
+-123,-125,-127,-129,  -9,  -1, 460,-136, -70, -76,
+-141, 315, -71, -70,  91, -28,-149,  46,  -7, 328,
+ 329, 330, 331, 332, 326, 346, 352, 337, 364, 365,
+ 366, 367, 368, 369, 370, 350, 377, 294, 371, -79,
+  -9,-173,-174,  42,  40, -31,  40, -14,  91,  40,
+ -14,  40, -14,  40, -14,  40, -14,  40, -14,  40,
+  41, 267,  -9, 263,  58,  44, 262,  -1, 353, 354,
+ 355, 472, 378, 474, 475, 476, 477, -90, -91,  -1,
+ 329, 330,  -1, -71,  41, -36,  61, 288, 262,  44,
+ 389,  91,  38,  42, 358, 359, 360,  60, 389, 389,
+ 389, 389, -70, 306, -70, -75,  -7,  33,  -9,  -1,
+ 280, 279, 289, -28,  -1, -76,  42, 470,  47, -28,
+ 270, 272, 281, 282, 283, 284,  40, -36,  -1, 329,
+ 330, 322, 345, 334, 335, 337, 338, 339, 340, 341,
+ 342, 343, 344, 361, 354, 336, 351, 326, 370, 294,
+  -2,  40,  61, -72, -71, -74, -28,  -7,  -7,  40,
+ 301, 303, 304, 305,  41,  41, 125,-143,-114,-111,
+-144,-146,-116,-117,-131,-120,-132, 451, 452,-148,
+ 507,-133,-135, 506, 321, 421, 426, 471, 407, 125,
+  -9,  -9,  40, 450,  58,  91,  -9, -71, 356, 363,
+  91,-161,-162,-164,-166,-167,-168, 311,-169, 309,
+ 313, 312,  -9,  -2,  -9, -24,  40, -23, -24, 266,
+ 286, 287, -31,  -9,  -2, -75, -28, -76, 270, 272,
+ -71, -36, 341,-175,  -7, -72,  40,-115,-158,  -2,
+  -9, 125,-178, 461,-131,-179,-180, 466, 467,-181,
+-132,-135, 463, 125,-183,-177,-179,-182, 338, 461,
+ 464, 125,-184, 459, 407, 462, 296,-132,-135, 125,
+-185, 459, 462,-132,-135, -89, 419, 125,-136,-142,
+ -71,  -1, 470,  -7,  -1, -13,  40,  40, -28, 328,
+ 329, 330, 331, 376, 370, 326, 478, 364, 365, 366,
+ 367, 374, 375, 294,  93, 125,  44,  40,  -2,  41,
+ -23,  -9, -23, -24,  -9,  -9,  -9,  93,  -9,  -9,
+ 473,  -1,  -1, 330, 329, 327, 336, 389,  40,  61,
+  43, 123,  40,  40, 263,  -1,  93, -30, -29, 275,
+  -9,  40,  40, -54, -55, -28,  -1,  -1,  -1,  -1,
+ -70, -28,  -9,  -1, 280,  93,  93,  93,  -1,  -1,
+ -71,  -1,  91,  -9, -69,  60, 329, 330, 331, 364,
+ 365, 366,  40,  61, -36, 123,  40,  41, -71,  -3,
+ 372, 373,  -1,  -9,-115, 123, 123, 123,  -9,  -9,
+ 123, -71, 356, 363, 363, -81, -82, -91, -25, -26,
+ -27, 275, -13,  40,  -9,  58, 274,  -7,  91,  -1,
+  -9,-161,-165,-158, 310,-165,-165,-165, -71,-158,
+  -2,  -9,  40,  40,  41, -71,  -1,  40, -31, -28,
+  -6,  -2,  -9, 125, 316, 316, 465, -31, -66,  -9,
+  42, -36,  61, -31,  61, -31, -31,  61,  61,  -1,
+ 468,  -9, 468,  40,  -1, 468,-177,  44,  93,  -1,
+ -28, -28,  91,  -9, -36, -83,  -1,  40,  40,-173,
+ -36,  41,  41,  93,  41,  41,  41,  41,  41, -12,
+ 263,  44,  58, 389, 329, 330, 331, 364, 365, 366,
+  -1, -84, -85, -36, 123, 262, -64, -63, -71, 306,
+  44,  93,  44, 275, -71, -71,  62,  44,  42,  -5,
+  -5,  -5,  93, 274,  41, -68, -19, -18,  43,  45,
+ 306, 323, 372,  -9, -59, -61, -73, 274, -53, -22,
+  60,  41, 125,-112,-145,-147,-127, 274,  -7,  91,
+  -1, -71, -71,  -1, 370, 326,  -7, 370, 326,  -1,
+  41,  44, -28, -25,  93,  -9,  -3,  -1, -28,  -9,
+  93,  -2,  -9,  -9, -24, 274, -36,  41,  40,  41,
+  44,  44,  -2,  -9,  -9,  41,  58,  40,  41,  40,
+  41,  41,  40,  40,  -5,  -1,  -9, 317,  -1, -31,
+ -71,  93, -38, 478, 503, 504, 505,  -9,  41, 389,
+ -83,  41, 386, 341, 342, 343, 387, 388, 301, 303,
+ 304, 305, 390, 393, 294,  -4, 317, -34, -33,-153,
+ 479, 481, 482, 483, 484, 276, 277, 281, 282, 283,
+ 284, 286, 287, 257, 279, 290, 291, 292, 293, 485,
+ 486, 487, 489, 490, 491, 492, 493, 494, 495, 334,
+ 496, 280, 289, 336, 497, 341, 488, 356, 389, 501,
+ 271, 123,  -9,  41, -14, -14, -14, -14, -14, -14,
+ 317, 283, 284, 455, 456, 458,  -9,  -9,  -1,  41,
+  44,  61, -59, 125,  44,  61, 263, 263, -29,  -9,
+  41,  41, -28,  40,  -5,  -1,  62, -58,  -1,  40,
+ -19,  41, 125, -62, -40,-135, -41, 298, 363, 297,
+ 286, 287, 284, 283, 282, 281, 293, 292, 291, 290,
+ 279, 278, 277,-175,  61,  -3,  40,  40,  91, -54,
+ 125, 125,-150, 422, 423, 424, 425,-120,-132,-133,
+-135, 125,-151, 427, 428, 425,-132,-120,-133,-135,
+ 125,  -3, -28,  -9, -93, 449,  -1, -28, -27, -38,
+  41, 389, -71,  93, -35,  61, 316, 316,  41,  41,
+  -1,  41, -25,  -6,  -6, -66,  41,  -9,  41,  -3,
+  40,  93,  93,  93,  93, -36,  41,  58,  58,  40,
+ -35,  -2,  41,  42,  91, -32,  40, 480, 500, 277,
+ 281, 282, 283, 284, 280, -20,  40, -20, -20, -15,
+ 509, 482, 483, 276, 277, 281, 282, 283, 284, 286,
+ 287, 279, 290, 291, 292, 293,  42, 485, 486, 487,
+ 489, 490, 493, 494, 496, 280, 289, 257, 510, 511,
+ 512, 513, 514, 515, 516, 517, 518, 519, 520, 521,
+ 522, 495, 487, 499,  41,  -2, 263, 263,  44, -84,
+ -37, -17,  -9, 283, -36, -70, 319, 320, 125, -64,
+ 123,  61, -25,  -1, -67,  44, -56, -57, -71, -65,
+-135, 357, 362,  40,  91,  40,  91,  40,  91,  40,
+  91,  40,  91,  40,  91,  40,  91,  40,  91,  40,
+  91,  40,  91,  40,  91,  40,  91,  40,  91, 284,
+ 283, 282, 281,  40,  91,  40,  91, -31, -36, 123,
+  40, -53, -22, -25, -25,  -9,  62, -75, -75, -75,
+ -75, -75, -75, -75, 508, -71,  93,  -1,  -2,  -2,
+ 274, -39, -41, -36, 299, 286, 287, 284, 283, 282,
+ 281, 279, 293, 292, 291, 290, 278, 277,  -2,  -9,
+  41,  58, -89, -69, -34, -83, 391, 392, 391, 392,
+  -9,  93,  -9,  43, 125, -36,  91,  91, 502,  44,
+  91, 523,  38, 281, 282, 283, 284, 280,  -9,  40,
+  40, -62, 123,  41, -67, -68,  41,  44, -60, -52,
+ 363, 297, 345, 299, 263,  -9, 306, -70, 299,  -9,
+ -40,  -9, -23,  -9,  -9, -23, -24,  -9, -24,  -9,
+  -9,  -9,  -9,  -9,  -9,  -9, -24,  -9,  -9,  -9,
+  -9,  -9,  -9,  -9,  40,  91,  40,  91,  40,  91,
+  40,  91,  -9,  -9, -17,  -9,  41, -59,  40,  40,
+  41,  41,  93,  -7, 274,  40,  -3, 284, 283, 282,
+ 281, -66,  40,  41,  41,  41,  93,  43,  -9,  44,
+  -9,  -9,  61, -36,  93, 263,  -9, 281, 282, 283,
+  -9, 125, -62, -71,  -1,  91, 306, -70,  41,  41,
+  93, 263,  41,  41,  93,  41,  93,  41,  41,  93,
+  41,  41,  93,  41,  93,  41,  93,  41,  93,  41,
+  93,  41,  93,  41,  93,  41,  93,  41,  93, -24,
+  -9,  -9,  -9,  -9,  -9,  -9,  -9,  41,  93,  41,
+  93, 125, -25, -25,  62, -28,  -3, -25, -21, -22,
+  60,  58, -25,  -9,  93, -36,  93,  93,  -9,  41,
+  58,  58,  58,  41, 125,  61,  93, 263,  40,  41,
+  40,  40,  40,  40,  40,  40,  40,  40,  40,  40,
+  40,  40,  41,  93,  41,  93,  41,  93,  41,  93,
+  40,  40,  41,  41, -71, -21,  41,  40, -66,  41,
+  93,  44,  41, -33,  41,  -9,  -9,  -9, -40, -49,
+ -50, -51, -42, -43, -47, -46, -45, -44, -47, -46,
+ -45, -44,  40,  40,  40,  40, -45, -48, 274,  40,
+ -35, -25, -80, -36,  41,  41,  41,  41, 299, 263,
+  41, 299, 306, -70,  41, -40,  41, -23,  -9,  41,
+ -23, -24,  41, -24,  41,  -9,  41,  -9,  41,  -9,
+  41,  41,  41,  41, -47, -46, -45, -44,  41,  41,
+ -17,  -3, -25,  41, 123, 324, 378, 379, 380, 308,
+ 381, 382, 383, 384, 333, 347, 348, 349, 294,  44,
+ 263,  41,  41,  41,  41,  40,  41,  40, -36, -25,
+ 508,  -9,  41,  41, 356,  41,  -7, -28, -71, 274,
+  -3, -21,  40, -25,  41 };
+YYSTATIC YYCONST short YYFARDATA YYDEF[]={
+
+   1,  -2,   2,   0,   0, 329,   6,   7,   8,   9,
+  10,  11,   0,   0,   0,   0,  16,  17,  18,   0,
+   0, 766,   0,   0,  24,  25,  26,   0,  28, 135,
+   0, 266, 204,   0, 425,   0,   0, 772, 105, 829,
+  92,   0, 425,   0,  83,  84,  85,   0,   0,   0,
+   0,   0,   0,  57,  58,   0,  60, 108, 259, 381,
+   0, 751, 752, 217, 425, 425, 139,   1,   0, 782,
+ 800, 818, 832,  19,  41,  20,   0,   0,  22,  42,
+  43,  23,  29, 137,   0, 104,  38,  39,  36,  37,
+ 217, 184,   0, 378,   0, 385,   0,   0, 425, 388,
+ 388, 388, 388, 388, 388,   0,   0, 426, 427,   0,
+ 754,   0, 772, 808,   0,  93,   0,   0, 736, 737,
+ 738, 739, 740, 741, 742, 743, 744, 745, 746, 747,
+ 748, 749, 750,   0,   0,  33,   0,   0,   0,   0,
+   0,   0, 662,   0,   0, 217,   0, 678, 679,   0,
+ 683,   0,   0, 543, 230, 545, 546, 547, 548,   0,
+ 483, 685, 686, 687, 688, 689, 690, 691, 692, 693,
+   0, 698, 699, 700, 701, 702, 549,   0,  52,  54,
+  55,  56,  59,   0, 380, 382, 383,   0,  61,   0,
+  71,   0, 210, 211, 212, 217, 217, 215,   0, 218,
+ 219,   0,   0,   0,   0,   0,   5, 330,   0, 332,
+   0,   0, 336, 337, 338, 339,   0, 341, 342, 343,
+ 344, 345,   0,   0,   0, 351,   0,   0, 328, 498,
+   0,   0,   0,   0, 425,   0, 217,   0,   0,   0,
+ 217,   0,   0, 329,   0, 484, 485, 486, 487, 488,
+ 489, 490, 491, 492, 493, 494, 495, 496, 356, 363,
+   0,   0,   0,   0,  21, 768, 767,   0,  29, 544,
+ 107,   0, 136, 551,   0, 554, 217,   0, 308, 267,
+ 268, 269, 270, 271, 272, 273, 274, 275, 276, 277,
+ 278, 279, 280, 281, 282, 283, 284,   0,   0,   0,
+   0,   0, 387,   0,   0,   0,   0, 399,   0,   0,
+ 400,   0, 401,   0, 402,   0, 403,   0, 404, 424,
+ 102, 428,   0, 753,   0,   0, 763, 771, 773, 774,
+ 775,   0, 777, 778, 779, 780, 781,   0,   0, 827,
+ 830, 831,  94, 712, 713, 714,   0,   0,  31,   0,
+   0, 705, 667, 668, 669,   0,   0, 528,   0,   0,
+   0,   0, 661,   0, 664, 225,   0,   0, 675, 677,
+ 680,   0, 682, 684,   0,   0,   0,   0,   0,   0,
+ 228, 229, 694, 695, 696, 697,   0,  53, 147, 109,
+ 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
+ 120, 121, 122, 123, 124,   0, 131, 132, 133,   0,
+   0, 103,   0,   0,  72,  73,   0, 213, 214,   0,
+ 220, 221, 222, 223,  64,  68,   3, 140, 329,   0,
+   0,   0, 168, 169, 170, 171, 172,   0,   0,   0,
+   0, 178, 179,   0,   0, 233, 247, 808, 105,   4,
+ 331, 333,  -2,   0, 340,   0,   0,   0, 217,   0,
+   0, 357, 359,   0,   0,   0,   0,   0,   0, 373,
+ 374, 371, 499, 500, 501, 502, 497, 503, 504,  44,
+   0,   0,   0, 506, 507, 508,   0, 511, 512, 513,
+ 514, 515,   0, 425,   0, 519, 521,   0, 360,   0,
+   0,  12, 783,   0, 785, 786, 425,   0,   0, 425,
+ 793, 794,   0,  13, 801, 425, 803, 425, 805,   0,
+   0,  14, 819,   0,   0,   0,   0, 825, 826,  15,
+ 833,   0,   0, 836, 837, 765, 769,  27,  30, 138,
+ 142,   0,   0,   0,  40,   0,   0, 289,   0, 185,
+ 186, 187, 188, 189, 190, 191,   0, 193, 194, 195,
+ 196, 197, 198,   0, 205, 384,   0,   0,   0, 392,
+   0,   0,   0,   0,   0,   0,   0,  96, 756,   0,
+ 776, 798, 806, 809, 810, 811,   0,   0,   0,   0,
+   0, 716, 721, 722,  34,  47, 665,   0, 703, 706,
+ 707,   0,   0,   0, 529, 530,  48,  49,  50,  51,
+ 663,   0, 674, 676, 681,   0,   0,   0,   0, 550,
+   0,  -2, 705,   0, 106, 154, 125, 126, 127, 128,
+ 129, 130,   0, 379,  62,  75,  69, 217,   0, 526,
+ 305, 306,  -2,   0,   0, 139, 236, 250, 173, 174,
+ 818,   0, 217,   0,   0,   0, 217,   0,   0, 533,
+ 534, 536,   0,  -2,   0,   0,   0,   0,   0, 353,
+   0, 358, 364, 375,   0, 365, 366, 367, 372, 368,
+ 369, 370,   0,   0, 505,   0,  -2,   0,   0,   0,
+   0, 524, 525, 355,   0,   0,   0,   0,   0, 787,
+ 788, 791,   0,   0,   0,   0,   0,   0,   0, 820,
+   0, 824,   0,   0,   0,   0, 425,   0, 552,   0,
+   0, 260,   0,   0, 289,   0, 200, 555,   0, 386,
+   0, 391, 388, 389, 388, 388, 388, 388, 388,   0,
+ 755,   0,   0,   0, 812, 813, 814, 815, 816, 817,
+ 828,   0, 723,   0,  75,  32,   0, 717,   0,   0,
+   0, 666, 705, 709,   0,   0, 673,   0, 668, 539,
+ 540, 541,   0,   0, 224,   0,   0, 154, 149, 150,
+ 151, 152, 153,   0,   0,  78,  65,   0,   0,   0,
+ 528, 216, 164,   0,   0,   0,   0,   0,   0,   0,
+ 181,   0,   0,  -2, 234, 235,   0, 248, 249, 807,
+ 334, 308, 260,   0, 346, 348, 349, 307,   0,   0,
+ 202,   0,   0,   0,   0,   0,   0, 517,  -2, 520,
+ 521, 521, 361, 362, 784, 789,   0, 797, 792, 795,
+ 802, 804, 770, 796, 821, 822,   0,   0, 835,   0,
+ 141, 553,   0,   0,   0,   0,   0,   0, 285,   0,
+   0, 288, 290, 291, 292, 293, 294, 295, 296, 297,
+ 298, 299,   0,   0,   0, 202,   0,   0, 262,   0,
+   0,   0, 560, 561, 562, 563, 564, 565, 566, 567,
+ 568, 569, 570, 571,   0, 576, 577, 578, 579, 585,
+ 586, 587, 588, 589, 590, 591, 610, 610, 594, 610,
+ 612, 598, 600,   0, 602,   0, 604, 606,   0, 608,
+ 609, 264,   0, 390, 393, 394, 395, 396, 397, 398,
+   0,  97,  98,  99, 100, 101, 758, 760, 799, 710,
+   0,   0,   0, 715, 716,   0,  37,  35, 704, 708,
+ 670, 671, 531,  -2, 542, 226, 148,   0, 158, 143,
+ 155, 134,  63,  74,  76,  77, 432,   0,   0,   0,
+   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+   0,   0,   0, 425,   0, 526,  -2,  -2,   0,   0,
+ 165, 166, 237, 217, 217, 217, 217, 242, 243, 244,
+ 245, 167, 251, 217, 217, 217, 255, 256, 257, 258,
+ 175,   0,   0,   0, 182, 217, 231,   0, 535, 537,
+ 335,   0,   0, 352, 354,   0,   0,   0,  45,  46,
+ 509, 516,   0, 522, 523,   0, 823, 834, 768, 147,
+ 555, 309, 310, 311, 312, 289, 287,   0,   0,   0,
+ 183, 201, 192, 580,   0,   0,   0,   0,   0, 605,
+ 572, 573, 574, 575, 599, 592,   0, 593, 595, 596,
+ 613, 614, 615, 616, 617, 618, 619, 620, 621, 622,
+ 623,   0, 628, 629, 630, 631, 632, 636, 637, 638,
+ 639, 640, 641, 642, 643, 644, 646, 647, 648, 649,
+ 650, 651, 652, 653, 654, 655, 656, 657, 658, 659,
+ 660, 601, 603, 607, 199,  95, 757, 759,   0, 724,
+ 725, 728, 729,   0, 731,   0, 726, 727, 711, 718,
+  78,   0,   0, 158, 157, 154,   0, 144, 145,   0,
+  80,  81,  82,   0,   0,   0,   0,   0,   0,   0,
+   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+   0,   0,   0,   0,   0,   0,   0,   0,  66,  75,
+  70,   0,   0,   0,   0,   0, 527, 238, 239, 240,
+ 241, 252, 253, 254, 217,   0, 180,   0, 538, 347,
+   0, 203, 429, 430, 431,   0,   0,   0,   0,   0,
+   0,   0,   0,   0,   0,   0,   0,   0, 376, 377,
+ 518,   0, 764,   0,   0,   0, 300, 301, 302, 303,
+   0, 581,   0,   0, 263,   0,   0,   0,   0,   0,
+   0, 634, 635, 624, 625, 626, 627, 645, 762,   0,
+   0,   0,  78, 672, 156, 159, 160,   0,   0,  86,
+  87,  88,   0,   0,   0,   0,   0,   0,   0,   0,
+   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+   0,   0,   0,   0,   0,   0, 423,   0,  -2,  -2,
+ 208, 209,   0,   0,   0,  -2, 161,   0,   0,   0,
+   0,   0,  -2, 261, 286, 304, 582,   0,   0,   0,
+   0,   0,   0, 597, 633, 761,   0,   0,   0,   0,
+   0, 719,   0, 146,   0,   0,   0,  90, 433, 434,
+   0,   0, 436, 437,   0, 438,   0, 405, 407,   0,
+ 406, 408,   0, 409,   0, 410,   0, 411,   0, 412,
+   0, 417,   0, 418,   0, 419,   0, 420,   0,   0,
+   0,   0,   0,   0,   0,   0,   0, 421,   0, 422,
+   0,  67,   0,   0, 163,   0, 161,   0,   0, 162,
+   0,   0,   0,   0, 584,   0, 558, 555,   0, 730,
+   0,   0,   0, 735, 720,   0,  91,  89, 474, 435,
+ 477, 481, 458, 461, 464, 466, 468, 470, 464, 466,
+ 468, 470, 413,   0, 414,   0, 415,   0, 416,   0,
+ 468, 472, 206, 207,   0,   0, 202,  -2, 790, 313,
+ 583,   0, 557, 559, 611,   0,   0,   0,  79,   0,
+   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+   0,   0, 464, 466, 468, 470,   0,   0,   0,  -2,
+ 246,   0,   0,   0, 732, 733, 734, 455, 475, 476,
+ 456, 478,   0, 480, 457, 482, 439, 459, 460, 440,
+ 462, 463, 441, 465, 442, 467, 443, 469, 444, 471,
+ 445, 446, 447, 448,   0,   0,   0,   0, 453, 454,
+ 473,   0,   0, 350, 265, 314, 315, 316, 317, 318,
+ 319, 320, 321, 322, 323, 324, 325, 326,   0,   0,
+ 479, 449, 450, 451, 452,  -2,   0,   0,   0,   0,
+   0,   0, 556, 176, 217, 327,   0,   0,   0,   0,
+ 161,   0,  -2,   0, 177 };
+#ifdef YYRECOVER
+YYSTATIC YYCONST short yyrecover[] = {
+-1000
+};
+#endif
+
+/* SCCSWHAT( "@(#)yypars.c     3.1 88/11/16 22:00:49   " ) */
+#line 3 "D:\\ProjectK3\\src\\tools\\devdiv\\x86\\yypars.c"
+#if ! defined(YYAPI_PACKAGE)
+/*
+**  YYAPI_TOKENNAME            : name used for return value of yylex   
+**     YYAPI_TOKENTYPE         : type of the token
+**     YYAPI_TOKENEME(t)       : the value of the token that the parser should see
+**     YYAPI_TOKENNONE         : the representation when there is no token
+**     YYAPI_VALUENAME         : the name of the value of the token
+**     YYAPI_VALUETYPE         : the type of the value of the token (if null, then the value is derivable from the token itself)
+**     YYAPI_VALUEOF(v)        : how to get the value of the token.
+*/
+#define        YYAPI_TOKENNAME         yychar
+#define        YYAPI_TOKENTYPE         int
+#define        YYAPI_TOKENEME(t)       (t)
+#define        YYAPI_TOKENNONE         -1
+#define        YYAPI_TOKENSTR(t)       (sprintf(yytokbuf, "%d", t), yytokbuf)
+#define        YYAPI_VALUENAME         yylval
+#define        YYAPI_VALUETYPE         YYSTYPE
+#define        YYAPI_VALUEOF(v)        (v)
+#endif
+#if ! defined(YYAPI_CALLAFTERYYLEX)
+#define        YYAPI_CALLAFTERYYLEX
+#endif
+
+# define YYFLAG -1000
+# define YYERROR goto yyerrlab
+# define YYACCEPT return(0)
+# define YYABORT return(1)
+
+#ifdef YYDEBUG                         /* RRR - 10/9/85 */
+char yytokbuf[20];
+# ifndef YYDBFLG
+#  define YYDBFLG (yydebug)
+# endif
+# define yyprintf(a, b, c, d) if (YYDBFLG) YYPRINT(a, b, c, d)
+#else
+# define yyprintf(a, b, c, d)
+#endif
+
+#ifndef YYPRINT
+#define        YYPRINT printf
+#endif
+
+/*     parser for yacc output  */
+
+#ifdef YYDUMP
+int yydump = 1; /* 1 for dumping */
+void yydumpinfo(void);
+#endif
+#ifdef YYDEBUG
+YYSTATIC int yydebug = 0; /* 1 for debugging */
+#endif
+YYSTATIC YYSTYPE yyv[YYMAXDEPTH];      /* where the values are stored */
+YYSTATIC short yys[YYMAXDEPTH];        /* the parse stack */
+
+#if ! defined(YYRECURSIVE)
+YYSTATIC YYAPI_TOKENTYPE       YYAPI_TOKENNAME = YYAPI_TOKENNONE;
+#if defined(YYAPI_VALUETYPE)
+// YYSTATIC YYAPI_VALUETYPE    YYAPI_VALUENAME;         FIX 
+#endif
+YYSTATIC int yynerrs = 0;                      /* number of errors */
+YYSTATIC short yyerrflag = 0;          /* error recovery flag */
+#endif
+
+#ifdef YYRECOVER
+/*
+**  yyscpy : copy f onto t and return a ptr to the null terminator at the
+**  end of t.
+*/
+YYSTATIC       char    *yyscpy(register char*t, register char*f)
+       {
+       while(*t = *f++)
+               t++;
+       return(t);      /*  ptr to the null char  */
+       }
+#endif
+
+#ifndef YYNEAR
+#define YYNEAR
+#endif
+#ifndef YYPASCAL
+#define YYPASCAL
+#endif
+#ifndef YYLOCAL
+#define YYLOCAL
+#endif
+#if ! defined YYPARSER
+#define YYPARSER yyparse
+#endif
+#if ! defined YYLEX
+#define YYLEX yylex
+#endif
+
+#if defined(YYRECURSIVE)
+
+       YYSTATIC YYAPI_TOKENTYPE        YYAPI_TOKENNAME = YYAPI_TOKENNONE;
+  #if defined(YYAPI_VALUETYPE)
+       YYSTATIC YYAPI_VALUETYPE        YYAPI_VALUENAME;  
+  #endif
+       YYSTATIC int yynerrs = 0;                       /* number of errors */
+       YYSTATIC short yyerrflag = 0;           /* error recovery flag */
+
+       YYSTATIC short  yyn;
+       YYSTATIC short  yystate = 0;
+       YYSTATIC short  *yyps= &yys[-1];
+       YYSTATIC YYSTYPE        *yypv= &yyv[-1];
+       YYSTATIC short  yyj;
+       YYSTATIC short  yym;
+
+#endif
+
+#pragma warning(disable:102)
+YYLOCAL YYNEAR YYPASCAL YYPARSER()
+{
+#if ! defined(YYRECURSIVE)
+
+       register        short   yyn;
+       short           yystate, *yyps;
+       YYSTYPE         *yypv;
+       short           yyj, yym;
+
+       YYAPI_TOKENNAME = YYAPI_TOKENNONE;
+       yystate = 0;
+       yyps= &yys[-1];
+       yypv= &yyv[-1];
+#endif
+
+#ifdef YYDUMP
+       yydumpinfo();
+#endif
+ yystack:       /* put a state and value onto the stack */
+
+#ifdef YYDEBUG
+       if(YYAPI_TOKENNAME == YYAPI_TOKENNONE) {
+               yyprintf( "state %d, token # '%d'\n", yystate, -1, 0 );
+               }
+       else {
+               yyprintf( "state %d, token # '%s'\n", yystate, YYAPI_TOKENSTR(YYAPI_TOKENNAME), 0 );
+               }
+#endif
+       if( ++yyps > &yys[YYMAXDEPTH] ) {
+               yyerror( "yacc stack overflow" );
+               return(1);
+       }
+       *yyps = yystate;
+       ++yypv;
+
+       *yypv = yyval;
+
+yynewstate:
+
+       yyn = YYPACT[yystate];
+
+       if( yyn <= YYFLAG ) {   /*  simple state, no lookahead  */
+               goto yydefault;
+       }
+       if( YYAPI_TOKENNAME == YYAPI_TOKENNONE ) {      /*  need a lookahead */
+               YYAPI_TOKENNAME = YYLEX();
+               YYAPI_CALLAFTERYYLEX(YYAPI_TOKENNAME);
+       }
+       if( ((yyn += YYAPI_TOKENEME(YYAPI_TOKENNAME)) < 0) || (yyn >= YYLAST) ) {
+               goto yydefault;
+       }
+       if( YYCHK[ yyn = YYACT[ yyn ] ] == YYAPI_TOKENEME(YYAPI_TOKENNAME) ) {          /* valid shift */
+               yyval = YYAPI_VALUEOF(YYAPI_VALUENAME);
+               yystate = yyn;
+               yyprintf( "SHIFT: saw token '%s', now in state %4d\n", YYAPI_TOKENSTR(YYAPI_TOKENNAME), yystate, 0 );
+               YYAPI_TOKENNAME = YYAPI_TOKENNONE;
+               if( yyerrflag > 0 ) {
+                       --yyerrflag;
+               }
+               goto yystack;
+       }
+
+ yydefault:
+       /* default state action */
+
+       if( (yyn = YYDEF[yystate]) == -2 ) {
+               register        YYCONST short   *yyxi;
+
+               if( YYAPI_TOKENNAME == YYAPI_TOKENNONE ) {
+                       YYAPI_TOKENNAME = YYLEX();
+                       YYAPI_CALLAFTERYYLEX(YYAPI_TOKENNAME);
+                       yyprintf("LOOKAHEAD: token '%s'\n", YYAPI_TOKENSTR(YYAPI_TOKENNAME), 0, 0);
+               }
+/*
+**  search exception table, we find a -1 followed by the current state.
+**  if we find one, we'll look through terminal,state pairs. if we find
+**  a terminal which matches the current one, we have a match.
+**  the exception table is when we have a reduce on a terminal.
+*/
+
+#if YYOPTTIME
+               yyxi = yyexca + yyexcaind[yystate];
+               while(( *yyxi != YYAPI_TOKENEME(YYAPI_TOKENNAME) ) && ( *yyxi >= 0 )){
+                       yyxi += 2;
+               }
+#else
+               for(yyxi = yyexca;
+                       (*yyxi != (-1)) || (yyxi[1] != yystate);
+                       yyxi += 2
+               ) {
+                       ; /* VOID */
+                       }
+
+               while( *(yyxi += 2) >= 0 ){
+                       if( *yyxi == YYAPI_TOKENEME(YYAPI_TOKENNAME) ) {
+                               break;
+                               }
+               }
+#endif
+               if( (yyn = yyxi[1]) < 0 ) {
+                       return(0);   /* accept */
+                       }
+               }
+
+       if( yyn == 0 ){ /* error */
+               /* error ... attempt to resume parsing */
+
+               switch( yyerrflag ){
+
+               case 0:         /* brand new error */
+#ifdef YYRECOVER
+                       {
+                       register        int             i,j;
+
+                       for(i = 0;
+                               (yyrecover[i] != -1000) && (yystate > yyrecover[i]);
+                               i += 3
+                       ) {
+                               ;
+                       }
+                       if(yystate == yyrecover[i]) {
+                               yyprintf("recovered, from state %d to state %d on token # %d\n",
+                                               yystate,yyrecover[i+2],yyrecover[i+1]
+                                               );
+                               j = yyrecover[i + 1];
+                               if(j < 0) {
+                               /*
+                               **  here we have one of the injection set, so we're not quite
+                               **  sure that the next valid thing will be a shift. so we'll
+                               **  count it as an error and continue.
+                               **  actually we're not absolutely sure that the next token
+                               **  we were supposed to get is the one when j > 0. for example,
+                               **  for(+) {;} error recovery with yyerrflag always set, stops
+                               **  after inserting one ; before the +. at the point of the +,
+                               **  we're pretty sure the guy wants a 'for' loop. without
+                               **  setting the flag, when we're almost absolutely sure, we'll
+                               **  give him one, since the only thing we can shift on this
+                               **  error is after finding an expression followed by a +
+                               */
+                                       yyerrflag++;
+                                       j = -j;
+                                       }
+                               if(yyerrflag <= 1) {    /*  only on first insertion  */
+                                       yyrecerr(YYAPI_TOKENNAME, j);   /*  what was, what should be first */
+                               }
+                               yyval = yyeval(j);
+                               yystate = yyrecover[i + 2];
+                               goto yystack;
+                               }
+                       }
+#endif
+               yyerror("syntax error");
+
+               yyerrlab:
+                       ++yynerrs;
+
+               case 1:
+               case 2: /* incompletely recovered error ... try again */
+
+                       yyerrflag = 3;
+
+                       /* find a state where "error" is a legal shift action */
+
+                       while ( yyps >= yys ) {
+                          yyn = YYPACT[*yyps] + YYERRCODE;
+                          if( yyn>= 0 && yyn < YYLAST && YYCHK[YYACT[yyn]] == YYERRCODE ){
+                             yystate = YYACT[yyn];  /* simulate a shift of "error" */
+                                 yyprintf( "SHIFT 'error': now in state %4d\n", yystate, 0, 0 );
+                             goto yystack;
+                             }
+                          yyn = YYPACT[*yyps];
+
+                          /* the current yyps has no shift onn "error", pop stack */
+
+                          yyprintf( "error recovery pops state %4d, uncovers %4d\n", *yyps, yyps[-1], 0 );
+                          --yyps;
+                          --yypv;
+                          }
+
+                       /* there is no state on the stack with an error shift ... abort */
+
+       yyabort:
+                       return(1);
+
+
+               case 3:  /* no shift yet; clobber input char */
+
+                       yyprintf( "error recovery discards token '%s'\n", YYAPI_TOKENSTR(YYAPI_TOKENNAME), 0, 0 );
+
+                       if( YYAPI_TOKENEME(YYAPI_TOKENNAME) == 0 ) goto yyabort; /* don't discard EOF, quit */
+                       YYAPI_TOKENNAME = YYAPI_TOKENNONE;
+                       goto yynewstate;   /* try again in the same state */
+                       }
+               }
+
+       /* reduction by production yyn */
+yyreduce:
+               {
+               register        YYSTYPE *yypvt;
+               yypvt = yypv;
+               yyps -= YYR2[yyn];
+               yypv -= YYR2[yyn];
+               yyval = yypv[1];
+               yyprintf("REDUCE: rule %4d, popped %2d tokens, uncovered state %4d, ",yyn, YYR2[yyn], *yyps);
+               yym = yyn;
+               yyn = YYR1[yyn];                /* consult goto table to find next state */
+               yyj = YYPGO[yyn] + *yyps + 1;
+               if( (yyj >= YYLAST) || (YYCHK[ yystate = YYACT[yyj] ] != -yyn) ) {
+                       yystate = YYACT[YYPGO[yyn]];
+                       }
+               yyprintf("goto state %4d\n", yystate, 0, 0);
+#ifdef YYDUMP
+               yydumpinfo();
+#endif
+               switch(yym){
+                       
+case 3:
+#line 189 "asmparse.y"
+{ PASM->EndClass(); } break;
+case 4:
+#line 190 "asmparse.y"
+{ PASM->EndNameSpace(); } break;
+case 5:
+#line 191 "asmparse.y"
+{ if(PASM->m_pCurMethod->m_ulLines[1] ==0)
+                                                                                  {  PASM->m_pCurMethod->m_ulLines[1] = PASM->m_ulCurLine;
+                                                                                     PASM->m_pCurMethod->m_ulColumns[1]=PASM->m_ulCurColumn;}
+                                                                                  PASM->EndMethod(); } break;
+case 12:
+#line 201 "asmparse.y"
+{ PASMM->EndAssembly(); } break;
+case 13:
+#line 202 "asmparse.y"
+{ PASMM->EndAssembly(); } break;
+case 14:
+#line 203 "asmparse.y"
+{ PASMM->EndComType(); } break;
+case 15:
+#line 204 "asmparse.y"
+{ PASMM->EndManifestRes(); } break;
+case 19:
+#line 208 "asmparse.y"
+{ 
+#ifdef _PREFAST_
+#pragma warning(push)
+#pragma warning(disable:22011) // Suppress PREFast warning about integer overflow/underflow
+#endif
+                                                                                  PASM->m_dwSubsystem = yypvt[-0].int32;
+#ifdef _PREFAST_
+#pragma warning(pop)
+#endif
+                                                                                } break;
+case 20:
+#line 218 "asmparse.y"
+{ PASM->m_dwComImageFlags = yypvt[-0].int32; } break;
+case 21:
+#line 219 "asmparse.y"
+{ PASM->m_dwFileAlignment = yypvt[-0].int32; 
+                                                                                  if((yypvt[-0].int32 & (yypvt[-0].int32 - 1))||(yypvt[-0].int32 < 0x200)||(yypvt[-0].int32 > 0x10000))
+                                                                                    PASM->report->error("Invalid file alignment, must be power of 2 from 0x200 to 0x10000\n");} break;
+case 22:
+#line 222 "asmparse.y"
+{ PASM->m_stBaseAddress = (ULONGLONG)(*(yypvt[-0].int64)); delete yypvt[-0].int64; 
+                                                                                  if(PASM->m_stBaseAddress & 0xFFFF)
+                                                                                    PASM->report->error("Invalid image base, must be 0x10000-aligned\n");} break;
+case 23:
+#line 225 "asmparse.y"
+{ PASM->m_stSizeOfStackReserve = (size_t)(*(yypvt[-0].int64)); delete yypvt[-0].int64; } break;
+case 28:
+#line 230 "asmparse.y"
+{ PASM->m_fIsMscorlib = TRUE; } break;
+case 31:
+#line 237 "asmparse.y"
+{ yyval.binstr = yypvt[-0].binstr; } break;
+case 32:
+#line 238 "asmparse.y"
+{ yyval.binstr = yypvt[-2].binstr; yyval.binstr->append(yypvt[-0].binstr); delete yypvt[-0].binstr; } break;
+case 33:
+#line 241 "asmparse.y"
+{ LPCSTRToGuid(yypvt[-0].string,&(PASM->m_guidLang)); } break;
+case 34:
+#line 242 "asmparse.y"
+{ LPCSTRToGuid(yypvt[-2].string,&(PASM->m_guidLang)); 
+                                                                                  LPCSTRToGuid(yypvt[-0].string,&(PASM->m_guidLangVendor));} break;
+case 35:
+#line 244 "asmparse.y"
+{ LPCSTRToGuid(yypvt[-4].string,&(PASM->m_guidLang)); 
+                                                                                  LPCSTRToGuid(yypvt[-2].string,&(PASM->m_guidLangVendor));
+                                                                                  LPCSTRToGuid(yypvt[-2].string,&(PASM->m_guidDoc));} break;
+case 36:
+#line 249 "asmparse.y"
+{ yyval.string = yypvt[-0].string; } break;
+case 37:
+#line 250 "asmparse.y"
+{ yyval.string = yypvt[-0].string; } break;
+case 38:
+#line 253 "asmparse.y"
+{ yyval.string = yypvt[-0].string; } break;
+case 39:
+#line 254 "asmparse.y"
+{ yyval.string = yypvt[-0].string; } break;
+case 40:
+#line 255 "asmparse.y"
+{ yyval.string = newStringWDel(yypvt[-2].string, '.', yypvt[-0].string); } break;
+case 41:
+#line 258 "asmparse.y"
+{ yyval.int32 = yypvt[-0].int32; } break;
+case 42:
+#line 261 "asmparse.y"
+{ yyval.int64 = yypvt[-0].int64; } break;
+case 43:
+#line 262 "asmparse.y"
+{ yyval.int64 = neg ? new __int64(yypvt[-0].int32) : new __int64((unsigned)yypvt[-0].int32); } break;
+case 44:
+#line 265 "asmparse.y"
+{ yyval.float64 = yypvt[-0].float64; } break;
+case 45:
+#line 266 "asmparse.y"
+{ float f; *((__int32*) (&f)) = yypvt[-1].int32; yyval.float64 = new double(f); } break;
+case 46:
+#line 267 "asmparse.y"
+{ yyval.float64 = (double*) yypvt[-1].int64; } break;
+case 47:
+#line 271 "asmparse.y"
+{ PASM->AddTypeDef(yypvt[-2].binstr,yypvt[-0].string); } break;
+case 48:
+#line 272 "asmparse.y"
+{ PASM->AddTypeDef(yypvt[-2].token,yypvt[-0].string); } break;
+case 49:
+#line 273 "asmparse.y"
+{ PASM->AddTypeDef(yypvt[-2].token,yypvt[-0].string); } break;
+case 50:
+#line 274 "asmparse.y"
+{ yypvt[-2].cad->tkOwner = 0; PASM->AddTypeDef(yypvt[-2].cad,yypvt[-0].string); } break;
+case 51:
+#line 275 "asmparse.y"
+{ PASM->AddTypeDef(yypvt[-2].cad,yypvt[-0].string); } break;
+case 52:
+#line 280 "asmparse.y"
+{ DefineVar(yypvt[-0].string, NULL); } break;
+case 53:
+#line 281 "asmparse.y"
+{ DefineVar(yypvt[-1].string, yypvt[-0].binstr); } break;
+case 54:
+#line 282 "asmparse.y"
+{ UndefVar(yypvt[-0].string); } break;
+case 55:
+#line 283 "asmparse.y"
+{ SkipToken = !IsVarDefined(yypvt[-0].string);
+                                                                                  IfEndif++;
+                                                                                } break;
+case 56:
+#line 286 "asmparse.y"
+{ SkipToken = IsVarDefined(yypvt[-0].string);
+                                                                                  IfEndif++;
+                                                                                } break;
+case 57:
+#line 289 "asmparse.y"
+{ if(IfEndif == 1) SkipToken = !SkipToken;} break;
+case 58:
+#line 290 "asmparse.y"
+{ if(IfEndif == 0)
+                                                                                    PASM->report->error("Unmatched #endif\n");
+                                                                                  else IfEndif--;
+                                                                                } break;
+case 59:
+#line 294 "asmparse.y"
+{ _ASSERTE(!"yylex should have dealt with this"); } break;
+case 60:
+#line 295 "asmparse.y"
+{ } break;
+case 61:
+#line 299 "asmparse.y"
+{ yyval.cad = new CustomDescr(PASM->m_tkCurrentCVOwner, yypvt[-0].token, NULL); } break;
+case 62:
+#line 300 "asmparse.y"
+{ yyval.cad = new CustomDescr(PASM->m_tkCurrentCVOwner, yypvt[-2].token, yypvt[-0].binstr); } break;
+case 63:
+#line 301 "asmparse.y"
+{ yyval.cad = new CustomDescr(PASM->m_tkCurrentCVOwner, yypvt[-4].token, yypvt[-1].binstr); } break;
+case 64:
+#line 302 "asmparse.y"
+{ yyval.cad = new CustomDescr(PASM->m_tkCurrentCVOwner, yypvt[-2].int32, yypvt[-1].binstr); } break;
+case 65:
+#line 305 "asmparse.y"
+{ yyval.cad = new CustomDescr(yypvt[-2].token, yypvt[-0].token, NULL); } break;
+case 66:
+#line 306 "asmparse.y"
+{ yyval.cad = new CustomDescr(yypvt[-4].token, yypvt[-2].token, yypvt[-0].binstr); } break;
+case 67:
+#line 308 "asmparse.y"
+{ yyval.cad = new CustomDescr(yypvt[-6].token, yypvt[-4].token, yypvt[-1].binstr); } break;
+case 68:
+#line 309 "asmparse.y"
+{ yyval.cad = new CustomDescr(PASM->m_tkCurrentCVOwner, yypvt[-2].int32, yypvt[-1].binstr); } break;
+case 69:
+#line 312 "asmparse.y"
+{ yyval.int32 = yypvt[-2].token; bParsingByteArray = TRUE; } break;
+case 70:
+#line 316 "asmparse.y"
+{ PASM->m_pCustomDescrList = NULL;
+                                                                                  PASM->m_tkCurrentCVOwner = yypvt[-4].token;
+                                                                                  yyval.int32 = yypvt[-2].token; bParsingByteArray = TRUE; } break;
+case 71:
+#line 321 "asmparse.y"
+{ yyval.token = yypvt[-0].token; } break;
+case 72:
+#line 324 "asmparse.y"
+{ yyval.token = yypvt[-0].token; } break;
+case 73:
+#line 325 "asmparse.y"
+{ yyval.token = yypvt[-0].token; } break;
+case 74:
+#line 329 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; 
+                                                                                  yyval.binstr->appendInt16(nCustomBlobNVPairs);
+                                                                                  yyval.binstr->append(yypvt[-0].binstr);
+                                                                                  nCustomBlobNVPairs = 0; } break;
+case 75:
+#line 335 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt16(VAL16(0x0001)); } break;
+case 76:
+#line 336 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr;
+                                                                                  yyval.binstr->appendFrom(yypvt[-0].binstr, (*(yypvt[-0].binstr->ptr()) == ELEMENT_TYPE_SZARRAY) ? 2 : 1); } break;
+case 77:
+#line 338 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; } break;
+case 78:
+#line 341 "asmparse.y"
+{ yyval.binstr = new BinStr(); } break;
+case 79:
+#line 343 "asmparse.y"
+{ yyval.binstr = yypvt[-5].binstr; yyval.binstr->appendInt8(yypvt[-4].int32);
+                                                                                  yyval.binstr->append(yypvt[-3].binstr); 
+                                                                                  AppendStringWithLength(yyval.binstr,yypvt[-2].string);
+                                                                                  yyval.binstr->appendFrom(yypvt[-0].binstr, (*(yypvt[-0].binstr->ptr()) == ELEMENT_TYPE_SZARRAY) ? 2 : 1);
+                                                                                  nCustomBlobNVPairs++; } break;
+case 80:
+#line 348 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; } break;
+case 81:
+#line 351 "asmparse.y"
+{ yyval.int32 = SERIALIZATION_TYPE_FIELD; } break;
+case 82:
+#line 352 "asmparse.y"
+{ yyval.int32 = SERIALIZATION_TYPE_PROPERTY; } break;
+case 83:
+#line 355 "asmparse.y"
+{ if(yypvt[-0].cad->tkOwner && !yypvt[-0].cad->tkInterfacePair) 
+                                                                                    PASM->DefineCV(yypvt[-0].cad);
+                                                                                  else if(PASM->m_pCustomDescrList)
+                                                                                    PASM->m_pCustomDescrList->PUSH(yypvt[-0].cad); } break;
+case 84:
+#line 359 "asmparse.y"
+{ PASM->DefineCV(yypvt[-0].cad); } break;
+case 85:
+#line 360 "asmparse.y"
+{ CustomDescr* pNew = new CustomDescr(yypvt[-0].tdd->m_pCA);
+                                                                                  if(pNew->tkOwner == 0) pNew->tkOwner = PASM->m_tkCurrentCVOwner;
+                                                                                  if(pNew->tkOwner) 
+                                                                                    PASM->DefineCV(pNew);
+                                                                                  else if(PASM->m_pCustomDescrList)
+                                                                                    PASM->m_pCustomDescrList->PUSH(pNew); } break;
+case 86:
+#line 368 "asmparse.y"
+{ yyval.binstr = yypvt[-0].binstr; } break;
+case 87:
+#line 369 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(SERIALIZATION_TYPE_TYPE); } break;
+case 88:
+#line 370 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(SERIALIZATION_TYPE_TAGGED_OBJECT); } break;
+case 89:
+#line 371 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(SERIALIZATION_TYPE_ENUM);
+                                                                AppendStringWithLength(yyval.binstr,yypvt[-0].string); } break;
+case 90:
+#line 373 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(SERIALIZATION_TYPE_ENUM);
+                                                                AppendStringWithLength(yyval.binstr,PASM->ReflectionNotation(yypvt[-0].token)); } break;
+case 91:
+#line 375 "asmparse.y"
+{ yyval.binstr = yypvt[-2].binstr; yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break;
+case 92:
+#line 380 "asmparse.y"
+{ PASMM->SetModuleName(NULL); PASM->m_tkCurrentCVOwner=1; } break;
+case 93:
+#line 381 "asmparse.y"
+{ PASMM->SetModuleName(yypvt[-0].string); PASM->m_tkCurrentCVOwner=1; } break;
+case 94:
+#line 382 "asmparse.y"
+{ BinStr* pbs = new BinStr();
+                                                                                  unsigned L = (unsigned)strlen(yypvt[-0].string);
+                                                                                  memcpy((char*)(pbs->getBuff(L)),yypvt[-0].string,L);
+                                                                                  PASM->EmitImport(pbs); delete pbs;} break;
+case 95:
+#line 389 "asmparse.y"
+{ /*PASM->SetDataSection(); PASM->EmitDataLabel($7);*/
+                                                                                  PASM->m_VTFList.PUSH(new VTFEntry((USHORT)yypvt[-4].int32, (USHORT)yypvt[-2].int32, yypvt[-0].string)); } break;
+case 96:
+#line 393 "asmparse.y"
+{ yyval.int32 = 0; } break;
+case 97:
+#line 394 "asmparse.y"
+{ yyval.int32 = yypvt[-1].int32 | COR_VTABLE_32BIT; } break;
+case 98:
+#line 395 "asmparse.y"
+{ yyval.int32 = yypvt[-1].int32 | COR_VTABLE_64BIT; } break;
+case 99:
+#line 396 "asmparse.y"
+{ yyval.int32 = yypvt[-1].int32 | COR_VTABLE_FROM_UNMANAGED; } break;
+case 100:
+#line 397 "asmparse.y"
+{ yyval.int32 = yypvt[-1].int32 | COR_VTABLE_CALL_MOST_DERIVED; } break;
+case 101:
+#line 398 "asmparse.y"
+{ yyval.int32 = yypvt[-1].int32 | COR_VTABLE_FROM_UNMANAGED_RETAIN_APPDOMAIN; } break;
+case 102:
+#line 401 "asmparse.y"
+{ PASM->m_pVTable = yypvt[-1].binstr; } break;
+case 103:
+#line 404 "asmparse.y"
+{ bParsingByteArray = TRUE; } break;
+case 104:
+#line 408 "asmparse.y"
+{ PASM->StartNameSpace(yypvt[-0].string); } break;
+case 105:
+#line 411 "asmparse.y"
+{ newclass = TRUE; } break;
+case 106:
+#line 414 "asmparse.y"
+{ if(yypvt[-0].typarlist) FixupConstraints();
+                                                                                  PASM->StartClass(yypvt[-1].string, yypvt[-2].classAttr, yypvt[-0].typarlist); 
+                                                                                  TyParFixupList.RESET(false);
+                                                                                  newclass = FALSE;
+                                                                                } break;
+case 107:
+#line 420 "asmparse.y"
+{ PASM->AddClass(); } break;
+case 108:
+#line 423 "asmparse.y"
+{ yyval.classAttr = (CorRegTypeAttr) 0; } break;
+case 109:
+#line 424 "asmparse.y"
+{ yyval.classAttr = (CorRegTypeAttr) ((yypvt[-1].classAttr & ~tdVisibilityMask) | tdPublic); } break;
+case 110:
+#line 425 "asmparse.y"
+{ yyval.classAttr = (CorRegTypeAttr) ((yypvt[-1].classAttr & ~tdVisibilityMask) | tdNotPublic); } break;
+case 111:
+#line 426 "asmparse.y"
+{ yyval.classAttr = (CorRegTypeAttr) (yypvt[-1].classAttr | 0x80000000 | tdSealed); } break;
+case 112:
+#line 427 "asmparse.y"
+{ yyval.classAttr = (CorRegTypeAttr) (yypvt[-1].classAttr | 0x40000000); } break;
+case 113:
+#line 428 "asmparse.y"
+{ yyval.classAttr = (CorRegTypeAttr) (yypvt[-1].classAttr | tdInterface | tdAbstract); } break;
+case 114:
+#line 429 "asmparse.y"
+{ yyval.classAttr = (CorRegTypeAttr) (yypvt[-1].classAttr | tdSealed); } break;
+case 115:
+#line 430 "asmparse.y"
+{ yyval.classAttr = (CorRegTypeAttr) (yypvt[-1].classAttr | tdAbstract); } break;
+case 116:
+#line 431 "asmparse.y"
+{ yyval.classAttr = (CorRegTypeAttr) ((yypvt[-1].classAttr & ~tdLayoutMask) | tdAutoLayout); } break;
+case 117:
+#line 432 "asmparse.y"
+{ yyval.classAttr = (CorRegTypeAttr) ((yypvt[-1].classAttr & ~tdLayoutMask) | tdSequentialLayout); } break;
+case 118:
+#line 433 "asmparse.y"
+{ yyval.classAttr = (CorRegTypeAttr) ((yypvt[-1].classAttr & ~tdLayoutMask) | tdExplicitLayout); } break;
+case 119:
+#line 434 "asmparse.y"
+{ yyval.classAttr = (CorRegTypeAttr) ((yypvt[-1].classAttr & ~tdStringFormatMask) | tdAnsiClass); } break;
+case 120:
+#line 435 "asmparse.y"
+{ yyval.classAttr = (CorRegTypeAttr) ((yypvt[-1].classAttr & ~tdStringFormatMask) | tdUnicodeClass); } break;
+case 121:
+#line 436 "asmparse.y"
+{ yyval.classAttr = (CorRegTypeAttr) ((yypvt[-1].classAttr & ~tdStringFormatMask) | tdAutoClass); } break;
+case 122:
+#line 437 "asmparse.y"
+{ yyval.classAttr = (CorRegTypeAttr) (yypvt[-1].classAttr | tdImport); } break;
+case 123:
+#line 438 "asmparse.y"
+{ yyval.classAttr = (CorRegTypeAttr) (yypvt[-1].classAttr | tdSerializable); } break;
+case 124:
+#line 439 "asmparse.y"
+{ yyval.classAttr = (CorRegTypeAttr) (yypvt[-1].classAttr | tdWindowsRuntime); } break;
+case 125:
+#line 440 "asmparse.y"
+{ yyval.classAttr = (CorRegTypeAttr) ((yypvt[-2].classAttr & ~tdVisibilityMask) | tdNestedPublic); } break;
+case 126:
+#line 441 "asmparse.y"
+{ yyval.classAttr = (CorRegTypeAttr) ((yypvt[-2].classAttr & ~tdVisibilityMask) | tdNestedPrivate); } break;
+case 127:
+#line 442 "asmparse.y"
+{ yyval.classAttr = (CorRegTypeAttr) ((yypvt[-2].classAttr & ~tdVisibilityMask) | tdNestedFamily); } break;
+case 128:
+#line 443 "asmparse.y"
+{ yyval.classAttr = (CorRegTypeAttr) ((yypvt[-2].classAttr & ~tdVisibilityMask) | tdNestedAssembly); } break;
+case 129:
+#line 444 "asmparse.y"
+{ yyval.classAttr = (CorRegTypeAttr) ((yypvt[-2].classAttr & ~tdVisibilityMask) | tdNestedFamANDAssem); } break;
+case 130:
+#line 445 "asmparse.y"
+{ yyval.classAttr = (CorRegTypeAttr) ((yypvt[-2].classAttr & ~tdVisibilityMask) | tdNestedFamORAssem); } break;
+case 131:
+#line 446 "asmparse.y"
+{ yyval.classAttr = (CorRegTypeAttr) (yypvt[-1].classAttr | tdBeforeFieldInit); } break;
+case 132:
+#line 447 "asmparse.y"
+{ yyval.classAttr = (CorRegTypeAttr) (yypvt[-1].classAttr | tdSpecialName); } break;
+case 133:
+#line 448 "asmparse.y"
+{ yyval.classAttr = (CorRegTypeAttr) (yypvt[-1].classAttr); } break;
+case 134:
+#line 449 "asmparse.y"
+{ yyval.classAttr = (CorRegTypeAttr) (yypvt[-1].int32); } break;
+case 136:
+#line 453 "asmparse.y"
+{ PASM->m_crExtends = yypvt[-0].token; } break;
+case 141:
+#line 464 "asmparse.y"
+{ PASM->AddToImplList(yypvt[-0].token); } break;
+case 142:
+#line 465 "asmparse.y"
+{ PASM->AddToImplList(yypvt[-0].token); } break;
+case 143:
+#line 469 "asmparse.y"
+{ yyval.binstr = new BinStr(); } break;
+case 144:
+#line 470 "asmparse.y"
+{ yyval.binstr = yypvt[-0].binstr; } break;
+case 145:
+#line 473 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt32(yypvt[-0].token); } break;
+case 146:
+#line 474 "asmparse.y"
+{ yyval.binstr = yypvt[-2].binstr; yyval.binstr->appendInt32(yypvt[-0].token); } break;
+case 147:
+#line 477 "asmparse.y"
+{ yyval.typarlist = NULL; PASM->m_TyParList = NULL;} break;
+case 148:
+#line 478 "asmparse.y"
+{ yyval.typarlist = yypvt[-1].typarlist;   PASM->m_TyParList = yypvt[-1].typarlist;} break;
+case 149:
+#line 481 "asmparse.y"
+{ yyval.int32 = gpCovariant; } break;
+case 150:
+#line 482 "asmparse.y"
+{ yyval.int32 = gpContravariant; } break;
+case 151:
+#line 483 "asmparse.y"
+{ yyval.int32 = gpReferenceTypeConstraint; } break;
+case 152:
+#line 484 "asmparse.y"
+{ yyval.int32 = gpNotNullableValueTypeConstraint; } break;
+case 153:
+#line 485 "asmparse.y"
+{ yyval.int32 = gpDefaultConstructorConstraint; } break;
+case 154:
+#line 488 "asmparse.y"
+{ yyval.int32 = 0; } break;
+case 155:
+#line 489 "asmparse.y"
+{ yyval.int32 = yypvt[-1].int32 | yypvt[-0].int32; } break;
+case 156:
+#line 492 "asmparse.y"
+{yyval.typarlist = new TyParList(yypvt[-3].int32, yypvt[-2].binstr, yypvt[-1].string, yypvt[-0].typarlist);} break;
+case 157:
+#line 493 "asmparse.y"
+{yyval.typarlist = new TyParList(yypvt[-2].int32, NULL, yypvt[-1].string, yypvt[-0].typarlist);} break;
+case 158:
+#line 496 "asmparse.y"
+{ yyval.typarlist = NULL; } break;
+case 159:
+#line 497 "asmparse.y"
+{ yyval.typarlist = yypvt[-0].typarlist; } break;
+case 160:
+#line 500 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; } break;
+case 161:
+#line 503 "asmparse.y"
+{ yyval.int32= 0; } break;
+case 162:
+#line 504 "asmparse.y"
+{ yyval.int32 = yypvt[-0].int32; } break;
+case 163:
+#line 507 "asmparse.y"
+{ yyval.int32 = yypvt[-2].int32; } break;
+case 164:
+#line 511 "asmparse.y"
+{ if(PASM->m_pCurMethod->m_ulLines[1] ==0)
+                                                              {  PASM->m_pCurMethod->m_ulLines[1] = PASM->m_ulCurLine;
+                                                                 PASM->m_pCurMethod->m_ulColumns[1]=PASM->m_ulCurColumn;}
+                                                              PASM->EndMethod(); } break;
+case 165:
+#line 515 "asmparse.y"
+{ PASM->EndClass(); } break;
+case 166:
+#line 516 "asmparse.y"
+{ PASM->EndEvent(); } break;
+case 167:
+#line 517 "asmparse.y"
+{ PASM->EndProp(); } break;
+case 173:
+#line 523 "asmparse.y"
+{ PASM->m_pCurClass->m_ulSize = yypvt[-0].int32; } break;
+case 174:
+#line 524 "asmparse.y"
+{ PASM->m_pCurClass->m_ulPack = yypvt[-0].int32; } break;
+case 175:
+#line 525 "asmparse.y"
+{ PASMM->EndComType(); } break;
+case 176:
+#line 527 "asmparse.y"
+{ BinStr *sig1 = parser->MakeSig(yypvt[-7].int32, yypvt[-6].binstr, yypvt[-1].binstr); 
+                                                                  BinStr *sig2 = new BinStr(); sig2->append(sig1); 
+                                                                  PASM->AddMethodImpl(yypvt[-11].token,yypvt[-9].string,sig1,yypvt[-5].token,yypvt[-3].string,sig2);
+                                                                  PASM->ResetArgNameList(); 
+                                                                } break;
+case 177:
+#line 533 "asmparse.y"
+{ PASM->AddMethodImpl(yypvt[-17].token,yypvt[-15].string,
+                                                                      (yypvt[-14].int32==0 ? parser->MakeSig(yypvt[-19].int32,yypvt[-18].binstr,yypvt[-12].binstr) :
+                                                                      parser->MakeSig(yypvt[-19].int32| IMAGE_CEE_CS_CALLCONV_GENERIC,yypvt[-18].binstr,yypvt[-12].binstr,yypvt[-14].int32)),
+                                                                      yypvt[-6].token,yypvt[-4].string,
+                                                                      (yypvt[-3].int32==0 ? parser->MakeSig(yypvt[-8].int32,yypvt[-7].binstr,yypvt[-1].binstr) :
+                                                                      parser->MakeSig(yypvt[-8].int32| IMAGE_CEE_CS_CALLCONV_GENERIC,yypvt[-7].binstr,yypvt[-1].binstr,yypvt[-3].int32))); 
+                                                                   PASM->ResetArgNameList();
+                                                                 } break;
+case 180:
+#line 543 "asmparse.y"
+{ if((yypvt[-1].int32 > 0) && (yypvt[-1].int32 <= (int)PASM->m_pCurClass->m_NumTyPars))
+                                                                PASM->m_pCustomDescrList = PASM->m_pCurClass->m_TyPars[yypvt[-1].int32-1].CAList();
+                                                              else
+                                                                PASM->report->error("Type parameter index out of range\n");
+                                                            } break;
+case 181:
+#line 548 "asmparse.y"
+{ int n = PASM->m_pCurClass->FindTyPar(yypvt[-0].string);
+                                                              if(n >= 0)
+                                                                PASM->m_pCustomDescrList = PASM->m_pCurClass->m_TyPars[n].CAList();
+                                                              else
+                                                                PASM->report->error("Type parameter '%s' undefined\n",yypvt[-0].string);
+                                                            } break;
+case 182:
+#line 554 "asmparse.y"
+{ yypvt[-0].cad->tkInterfacePair = yypvt[-1].token;     
+                                                                        if(PASM->m_pCustomDescrList)
+                                                                            PASM->m_pCustomDescrList->PUSH(yypvt[-0].cad);
+                                                                      } break;
+case 183:
+#line 562 "asmparse.y"
+{ yypvt[-3].binstr->insertInt8(IMAGE_CEE_CS_CALLCONV_FIELD);
+                                                              PASM->AddField(yypvt[-2].string, yypvt[-3].binstr, yypvt[-4].fieldAttr, yypvt[-1].string, yypvt[-0].binstr, yypvt[-5].int32); } break;
+case 184:
+#line 566 "asmparse.y"
+{ yyval.fieldAttr = (CorFieldAttr) 0; } break;
+case 185:
+#line 567 "asmparse.y"
+{ yyval.fieldAttr = (CorFieldAttr) (yypvt[-1].fieldAttr | fdStatic); } break;
+case 186:
+#line 568 "asmparse.y"
+{ yyval.fieldAttr = (CorFieldAttr) ((yypvt[-1].fieldAttr & ~mdMemberAccessMask) | fdPublic); } break;
+case 187:
+#line 569 "asmparse.y"
+{ yyval.fieldAttr = (CorFieldAttr) ((yypvt[-1].fieldAttr & ~mdMemberAccessMask) | fdPrivate); } break;
+case 188:
+#line 570 "asmparse.y"
+{ yyval.fieldAttr = (CorFieldAttr) ((yypvt[-1].fieldAttr & ~mdMemberAccessMask) | fdFamily); } break;
+case 189:
+#line 571 "asmparse.y"
+{ yyval.fieldAttr = (CorFieldAttr) (yypvt[-1].fieldAttr | fdInitOnly); } break;
+case 190:
+#line 572 "asmparse.y"
+{ yyval.fieldAttr = yypvt[-1].fieldAttr; } break;
+case 191:
+#line 573 "asmparse.y"
+{ yyval.fieldAttr = (CorFieldAttr) (yypvt[-1].fieldAttr | fdSpecialName); } break;
+case 192:
+#line 586 "asmparse.y"
+{ PASM->m_pMarshal = yypvt[-1].binstr; } break;
+case 193:
+#line 587 "asmparse.y"
+{ yyval.fieldAttr = (CorFieldAttr) ((yypvt[-1].fieldAttr & ~mdMemberAccessMask) | fdAssembly); } break;
+case 194:
+#line 588 "asmparse.y"
+{ yyval.fieldAttr = (CorFieldAttr) ((yypvt[-1].fieldAttr & ~mdMemberAccessMask) | fdFamANDAssem); } break;
+case 195:
+#line 589 "asmparse.y"
+{ yyval.fieldAttr = (CorFieldAttr) ((yypvt[-1].fieldAttr & ~mdMemberAccessMask) | fdFamORAssem); } break;
+case 196:
+#line 590 "asmparse.y"
+{ yyval.fieldAttr = (CorFieldAttr) ((yypvt[-1].fieldAttr & ~mdMemberAccessMask) | fdPrivateScope); } break;
+case 197:
+#line 591 "asmparse.y"
+{ yyval.fieldAttr = (CorFieldAttr) (yypvt[-1].fieldAttr | fdLiteral); } break;
+case 198:
+#line 592 "asmparse.y"
+{ yyval.fieldAttr = (CorFieldAttr) (yypvt[-1].fieldAttr | fdNotSerialized); } break;
+case 199:
+#line 593 "asmparse.y"
+{ yyval.fieldAttr = (CorFieldAttr) (yypvt[-1].int32); } break;
+case 200:
+#line 596 "asmparse.y"
+{ yyval.string = 0; } break;
+case 201:
+#line 597 "asmparse.y"
+{ yyval.string = yypvt[-0].string; } break;
+case 202:
+#line 600 "asmparse.y"
+{ yyval.binstr = NULL; } break;
+case 203:
+#line 601 "asmparse.y"
+{ yyval.binstr = yypvt[-0].binstr; } break;
+case 204:
+#line 604 "asmparse.y"
+{ yyval.int32 = 0xFFFFFFFF; } break;
+case 205:
+#line 605 "asmparse.y"
+{ yyval.int32 = yypvt[-1].int32; } break;
+case 206:
+#line 610 "asmparse.y"
+{ PASM->ResetArgNameList();
+                                                               if (yypvt[-3].binstr == NULL)
+                                                               {
+                                                                 if((iCallConv)&&((yypvt[-8].int32 & iCallConv) != iCallConv)) parser->warn("'instance' added to method's calling convention\n"); 
+                                                                 yyval.token = PASM->MakeMemberRef(yypvt[-6].token, yypvt[-4].string, parser->MakeSig(yypvt[-8].int32|iCallConv, yypvt[-7].binstr, yypvt[-1].binstr));
+                                                               }
+                                                               else
+                                                               {
+                                                                 mdToken mr;
+                                                                 if((iCallConv)&&((yypvt[-8].int32 & iCallConv) != iCallConv)) parser->warn("'instance' added to method's calling convention\n"); 
+                                                                 mr = PASM->MakeMemberRef(yypvt[-6].token, yypvt[-4].string, 
+                                                                   parser->MakeSig(yypvt[-8].int32 | IMAGE_CEE_CS_CALLCONV_GENERIC|iCallConv, yypvt[-7].binstr, yypvt[-1].binstr, corCountArgs(yypvt[-3].binstr)));
+                                                                 yyval.token = PASM->MakeMethodSpec(mr, 
+                                                                   parser->MakeSig(IMAGE_CEE_CS_CALLCONV_INSTANTIATION, 0, yypvt[-3].binstr));
+                                                               }
+                                                             } break;
+case 207:
+#line 627 "asmparse.y"
+{ PASM->ResetArgNameList();
+                                                               if((iCallConv)&&((yypvt[-8].int32 & iCallConv) != iCallConv)) parser->warn("'instance' added to method's calling convention\n"); 
+                                                               yyval.token = PASM->MakeMemberRef(yypvt[-6].token, yypvt[-4].string, 
+                                                                 parser->MakeSig(yypvt[-8].int32 | IMAGE_CEE_CS_CALLCONV_GENERIC|iCallConv, yypvt[-7].binstr, yypvt[-1].binstr, yypvt[-3].int32));
+                                                             } break;
+case 208:
+#line 633 "asmparse.y"
+{ PASM->ResetArgNameList();
+                                                               if (yypvt[-3].binstr == NULL)
+                                                               {
+                                                                 if((iCallConv)&&((yypvt[-6].int32 & iCallConv) != iCallConv)) parser->warn("'instance' added to method's calling convention\n"); 
+                                                                 yyval.token = PASM->MakeMemberRef(mdTokenNil, yypvt[-4].string, parser->MakeSig(yypvt[-6].int32|iCallConv, yypvt[-5].binstr, yypvt[-1].binstr));
+                                                               }
+                                                               else
+                                                               {
+                                                                 mdToken mr;
+                                                                 if((iCallConv)&&((yypvt[-6].int32 & iCallConv) != iCallConv)) parser->warn("'instance' added to method's calling convention\n"); 
+                                                                 mr = PASM->MakeMemberRef(mdTokenNil, yypvt[-4].string, parser->MakeSig(yypvt[-6].int32 | IMAGE_CEE_CS_CALLCONV_GENERIC|iCallConv, yypvt[-5].binstr, yypvt[-1].binstr, corCountArgs(yypvt[-3].binstr)));
+                                                                 yyval.token = PASM->MakeMethodSpec(mr, 
+                                                                   parser->MakeSig(IMAGE_CEE_CS_CALLCONV_INSTANTIATION, 0, yypvt[-3].binstr));
+                                                               }
+                                                             } break;
+case 209:
+#line 649 "asmparse.y"
+{ PASM->ResetArgNameList();
+                                                               if((iCallConv)&&((yypvt[-6].int32 & iCallConv) != iCallConv)) parser->warn("'instance' added to method's calling convention\n"); 
+                                                               yyval.token = PASM->MakeMemberRef(mdTokenNil, yypvt[-4].string, parser->MakeSig(yypvt[-6].int32 | IMAGE_CEE_CS_CALLCONV_GENERIC|iCallConv, yypvt[-5].binstr, yypvt[-1].binstr, yypvt[-3].int32));
+                                                             } break;
+case 210:
+#line 653 "asmparse.y"
+{ yyval.token = yypvt[-0].token; } break;
+case 211:
+#line 654 "asmparse.y"
+{ yyval.token = yypvt[-0].tdd->m_tkTypeSpec; } break;
+case 212:
+#line 655 "asmparse.y"
+{ yyval.token = yypvt[-0].tdd->m_tkTypeSpec; } break;
+case 213:
+#line 658 "asmparse.y"
+{ yyval.int32 = (yypvt[-0].int32 | IMAGE_CEE_CS_CALLCONV_HASTHIS); } break;
+case 214:
+#line 659 "asmparse.y"
+{ yyval.int32 = (yypvt[-0].int32 | IMAGE_CEE_CS_CALLCONV_EXPLICITTHIS); } break;
+case 215:
+#line 660 "asmparse.y"
+{ yyval.int32 = yypvt[-0].int32; } break;
+case 216:
+#line 661 "asmparse.y"
+{ yyval.int32 = yypvt[-1].int32; } break;
+case 217:
+#line 664 "asmparse.y"
+{ yyval.int32 = IMAGE_CEE_CS_CALLCONV_DEFAULT; } break;
+case 218:
+#line 665 "asmparse.y"
+{ yyval.int32 = IMAGE_CEE_CS_CALLCONV_DEFAULT; } break;
+case 219:
+#line 666 "asmparse.y"
+{ yyval.int32 = IMAGE_CEE_CS_CALLCONV_VARARG; } break;
+case 220:
+#line 667 "asmparse.y"
+{ yyval.int32 = IMAGE_CEE_CS_CALLCONV_C; } break;
+case 221:
+#line 668 "asmparse.y"
+{ yyval.int32 = IMAGE_CEE_CS_CALLCONV_STDCALL; } break;
+case 222:
+#line 669 "asmparse.y"
+{ yyval.int32 = IMAGE_CEE_CS_CALLCONV_THISCALL; } break;
+case 223:
+#line 670 "asmparse.y"
+{ yyval.int32 = IMAGE_CEE_CS_CALLCONV_FASTCALL; } break;
+case 224:
+#line 673 "asmparse.y"
+{ yyval.token = yypvt[-1].int32; } break;
+case 225:
+#line 676 "asmparse.y"
+{ yyval.token = yypvt[-0].token; 
+                                                               PASM->delArgNameList(PASM->m_firstArgName);
+                                                               PASM->m_firstArgName = parser->m_ANSFirst.POP();
+                                                               PASM->m_lastArgName = parser->m_ANSLast.POP();
+                                                               PASM->SetMemberRefFixup(yypvt[-0].token,iOpcodeLen); } break;
+case 226:
+#line 682 "asmparse.y"
+{ yypvt[-3].binstr->insertInt8(IMAGE_CEE_CS_CALLCONV_FIELD); 
+                                                               yyval.token = PASM->MakeMemberRef(yypvt[-2].token, yypvt[-0].string, yypvt[-3].binstr); 
+                                                               PASM->SetMemberRefFixup(yyval.token,iOpcodeLen); } break;
+case 227:
+#line 686 "asmparse.y"
+{ yypvt[-1].binstr->insertInt8(IMAGE_CEE_CS_CALLCONV_FIELD); 
+                                                               yyval.token = PASM->MakeMemberRef(NULL, yypvt[-0].string, yypvt[-1].binstr); 
+                                                               PASM->SetMemberRefFixup(yyval.token,iOpcodeLen); } break;
+case 228:
+#line 689 "asmparse.y"
+{ yyval.token = yypvt[-0].tdd->m_tkTypeSpec;
+                                                               PASM->SetMemberRefFixup(yyval.token,iOpcodeLen); } break;
+case 229:
+#line 691 "asmparse.y"
+{ yyval.token = yypvt[-0].tdd->m_tkTypeSpec;
+                                                               PASM->SetMemberRefFixup(yyval.token,iOpcodeLen); } break;
+case 230:
+#line 693 "asmparse.y"
+{ yyval.token = yypvt[-0].token; 
+                                                               PASM->SetMemberRefFixup(yyval.token,iOpcodeLen); } break;
+case 231:
+#line 698 "asmparse.y"
+{ PASM->ResetEvent(yypvt[-0].string, yypvt[-1].token, yypvt[-2].eventAttr); } break;
+case 232:
+#line 699 "asmparse.y"
+{ PASM->ResetEvent(yypvt[-0].string, mdTypeRefNil, yypvt[-1].eventAttr); } break;
+case 233:
+#line 703 "asmparse.y"
+{ yyval.eventAttr = (CorEventAttr) 0; } break;
+case 234:
+#line 704 "asmparse.y"
+{ yyval.eventAttr = yypvt[-1].eventAttr; } break;
+case 235:
+#line 705 "asmparse.y"
+{ yyval.eventAttr = (CorEventAttr) (yypvt[-1].eventAttr | evSpecialName); } break;
+case 238:
+#line 712 "asmparse.y"
+{ PASM->SetEventMethod(0, yypvt[-0].token); } break;
+case 239:
+#line 713 "asmparse.y"
+{ PASM->SetEventMethod(1, yypvt[-0].token); } break;
+case 240:
+#line 714 "asmparse.y"
+{ PASM->SetEventMethod(2, yypvt[-0].token); } break;
+case 241:
+#line 715 "asmparse.y"
+{ PASM->SetEventMethod(3, yypvt[-0].token); } break;
+case 246:
+#line 724 "asmparse.y"
+{ PASM->ResetProp(yypvt[-4].string, 
+                                                              parser->MakeSig((IMAGE_CEE_CS_CALLCONV_PROPERTY |
+                                                              (yypvt[-6].int32 & IMAGE_CEE_CS_CALLCONV_HASTHIS)),yypvt[-5].binstr,yypvt[-2].binstr), yypvt[-7].propAttr, yypvt[-0].binstr);} break;
+case 247:
+#line 729 "asmparse.y"
+{ yyval.propAttr = (CorPropertyAttr) 0; } break;
+case 248:
+#line 730 "asmparse.y"
+{ yyval.propAttr = yypvt[-1].propAttr; } break;
+case 249:
+#line 731 "asmparse.y"
+{ yyval.propAttr = (CorPropertyAttr) (yypvt[-1].propAttr | prSpecialName); } break;
+case 252:
+#line 739 "asmparse.y"
+{ PASM->SetPropMethod(0, yypvt[-0].token); } break;
+case 253:
+#line 740 "asmparse.y"
+{ PASM->SetPropMethod(1, yypvt[-0].token); } break;
+case 254:
+#line 741 "asmparse.y"
+{ PASM->SetPropMethod(2, yypvt[-0].token); } break;
+case 259:
+#line 749 "asmparse.y"
+{ PASM->ResetForNextMethod(); 
+                                                              uMethodBeginLine = PASM->m_ulCurLine;
+                                                              uMethodBeginColumn=PASM->m_ulCurColumn;
+                                                            } break;
+case 260:
+#line 755 "asmparse.y"
+{ yyval.binstr = NULL; } break;
+case 261:
+#line 756 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; } break;
+case 262:
+#line 759 "asmparse.y"
+{ yyval.binstr = yypvt[-0].binstr; } break;
+case 263:
+#line 760 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; } break;
+case 264:
+#line 763 "asmparse.y"
+{ bParsingByteArray = TRUE; } break;
+case 265:
+#line 767 "asmparse.y"
+{ BinStr* sig;
+                                                              if (yypvt[-5].typarlist == NULL) sig = parser->MakeSig(yypvt[-10].int32, yypvt[-8].binstr, yypvt[-3].binstr);
+                                                              else {
+                                                               FixupTyPars(yypvt[-8].binstr);
+                                                               sig = parser->MakeSig(yypvt[-10].int32 | IMAGE_CEE_CS_CALLCONV_GENERIC, yypvt[-8].binstr, yypvt[-3].binstr, yypvt[-5].typarlist->Count());
+                                                               FixupConstraints();
+                                                              }
+                                                              PASM->StartMethod(yypvt[-6].string, sig, yypvt[-11].methAttr, yypvt[-7].binstr, yypvt[-9].int32, yypvt[-5].typarlist);
+                                                              TyParFixupList.RESET(false);
+                                                              PASM->SetImplAttr((USHORT)yypvt[-1].implAttr);  
+                                                              PASM->m_pCurMethod->m_ulLines[0] = uMethodBeginLine;
+                                                              PASM->m_pCurMethod->m_ulColumns[0]=uMethodBeginColumn; 
+                                                            } break;
+case 266:
+#line 782 "asmparse.y"
+{ yyval.methAttr = (CorMethodAttr) 0; } break;
+case 267:
+#line 783 "asmparse.y"
+{ yyval.methAttr = (CorMethodAttr) (yypvt[-1].methAttr | mdStatic); } break;
+case 268:
+#line 784 "asmparse.y"
+{ yyval.methAttr = (CorMethodAttr) ((yypvt[-1].methAttr & ~mdMemberAccessMask) | mdPublic); } break;
+case 269:
+#line 785 "asmparse.y"
+{ yyval.methAttr = (CorMethodAttr) ((yypvt[-1].methAttr & ~mdMemberAccessMask) | mdPrivate); } break;
+case 270:
+#line 786 "asmparse.y"
+{ yyval.methAttr = (CorMethodAttr) ((yypvt[-1].methAttr & ~mdMemberAccessMask) | mdFamily); } break;
+case 271:
+#line 787 "asmparse.y"
+{ yyval.methAttr = (CorMethodAttr) (yypvt[-1].methAttr | mdFinal); } break;
+case 272:
+#line 788 "asmparse.y"
+{ yyval.methAttr = (CorMethodAttr) (yypvt[-1].methAttr | mdSpecialName); } break;
+case 273:
+#line 789 "asmparse.y"
+{ yyval.methAttr = (CorMethodAttr) (yypvt[-1].methAttr | mdVirtual); } break;
+case 274:
+#line 790 "asmparse.y"
+{ yyval.methAttr = (CorMethodAttr) (yypvt[-1].methAttr | mdCheckAccessOnOverride); } break;
+case 275:
+#line 791 "asmparse.y"
+{ yyval.methAttr = (CorMethodAttr) (yypvt[-1].methAttr | mdAbstract); } break;
+case 276:
+#line 792 "asmparse.y"
+{ yyval.methAttr = (CorMethodAttr) ((yypvt[-1].methAttr & ~mdMemberAccessMask) | mdAssem); } break;
+case 277:
+#line 793 "asmparse.y"
+{ yyval.methAttr = (CorMethodAttr) ((yypvt[-1].methAttr & ~mdMemberAccessMask) | mdFamANDAssem); } break;
+case 278:
+#line 794 "asmparse.y"
+{ yyval.methAttr = (CorMethodAttr) ((yypvt[-1].methAttr & ~mdMemberAccessMask) | mdFamORAssem); } break;
+case 279:
+#line 795 "asmparse.y"
+{ yyval.methAttr = (CorMethodAttr) ((yypvt[-1].methAttr & ~mdMemberAccessMask) | mdPrivateScope); } break;
+case 280:
+#line 796 "asmparse.y"
+{ yyval.methAttr = (CorMethodAttr) (yypvt[-1].methAttr | mdHideBySig); } break;
+case 281:
+#line 797 "asmparse.y"
+{ yyval.methAttr = (CorMethodAttr) (yypvt[-1].methAttr | mdNewSlot); } break;
+case 282:
+#line 798 "asmparse.y"
+{ yyval.methAttr = yypvt[-1].methAttr; } break;
+case 283:
+#line 799 "asmparse.y"
+{ yyval.methAttr = (CorMethodAttr) (yypvt[-1].methAttr | mdUnmanagedExport); } break;
+case 284:
+#line 800 "asmparse.y"
+{ yyval.methAttr = (CorMethodAttr) (yypvt[-1].methAttr | mdRequireSecObject); } break;
+case 285:
+#line 801 "asmparse.y"
+{ yyval.methAttr = (CorMethodAttr) (yypvt[-1].int32); } break;
+case 286:
+#line 803 "asmparse.y"
+{ PASM->SetPinvoke(yypvt[-4].binstr,0,yypvt[-2].binstr,yypvt[-1].pinvAttr); 
+                                                              yyval.methAttr = (CorMethodAttr) (yypvt[-7].methAttr | mdPinvokeImpl); } break;
+case 287:
+#line 806 "asmparse.y"
+{ PASM->SetPinvoke(yypvt[-2].binstr,0,NULL,yypvt[-1].pinvAttr); 
+                                                              yyval.methAttr = (CorMethodAttr) (yypvt[-5].methAttr | mdPinvokeImpl); } break;
+case 288:
+#line 809 "asmparse.y"
+{ PASM->SetPinvoke(new BinStr(),0,NULL,yypvt[-1].pinvAttr); 
+                                                              yyval.methAttr = (CorMethodAttr) (yypvt[-4].methAttr | mdPinvokeImpl); } break;
+case 289:
+#line 813 "asmparse.y"
+{ yyval.pinvAttr = (CorPinvokeMap) 0; } break;
+case 290:
+#line 814 "asmparse.y"
+{ yyval.pinvAttr = (CorPinvokeMap) (yypvt[-1].pinvAttr | pmNoMangle); } break;
+case 291:
+#line 815 "asmparse.y"
+{ yyval.pinvAttr = (CorPinvokeMap) (yypvt[-1].pinvAttr | pmCharSetAnsi); } break;
+case 292:
+#line 816 "asmparse.y"
+{ yyval.pinvAttr = (CorPinvokeMap) (yypvt[-1].pinvAttr | pmCharSetUnicode); } break;
+case 293:
+#line 817 "asmparse.y"
+{ yyval.pinvAttr = (CorPinvokeMap) (yypvt[-1].pinvAttr | pmCharSetAuto); } break;
+case 294:
+#line 818 "asmparse.y"
+{ yyval.pinvAttr = (CorPinvokeMap) (yypvt[-1].pinvAttr | pmSupportsLastError); } break;
+case 295:
+#line 819 "asmparse.y"
+{ yyval.pinvAttr = (CorPinvokeMap) (yypvt[-1].pinvAttr | pmCallConvWinapi); } break;
+case 296:
+#line 820 "asmparse.y"
+{ yyval.pinvAttr = (CorPinvokeMap) (yypvt[-1].pinvAttr | pmCallConvCdecl); } break;
+case 297:
+#line 821 "asmparse.y"
+{ yyval.pinvAttr = (CorPinvokeMap) (yypvt[-1].pinvAttr | pmCallConvStdcall); } break;
+case 298:
+#line 822 "asmparse.y"
+{ yyval.pinvAttr = (CorPinvokeMap) (yypvt[-1].pinvAttr | pmCallConvThiscall); } break;
+case 299:
+#line 823 "asmparse.y"
+{ yyval.pinvAttr = (CorPinvokeMap) (yypvt[-1].pinvAttr | pmCallConvFastcall); } break;
+case 300:
+#line 824 "asmparse.y"
+{ yyval.pinvAttr = (CorPinvokeMap) (yypvt[-3].pinvAttr | pmBestFitEnabled); } break;
+case 301:
+#line 825 "asmparse.y"
+{ yyval.pinvAttr = (CorPinvokeMap) (yypvt[-3].pinvAttr | pmBestFitDisabled); } break;
+case 302:
+#line 826 "asmparse.y"
+{ yyval.pinvAttr = (CorPinvokeMap) (yypvt[-3].pinvAttr | pmThrowOnUnmappableCharEnabled); } break;
+case 303:
+#line 827 "asmparse.y"
+{ yyval.pinvAttr = (CorPinvokeMap) (yypvt[-3].pinvAttr | pmThrowOnUnmappableCharDisabled); } break;
+case 304:
+#line 828 "asmparse.y"
+{ yyval.pinvAttr = (CorPinvokeMap) (yypvt[-1].int32); } break;
+case 305:
+#line 831 "asmparse.y"
+{ yyval.string = newString(COR_CTOR_METHOD_NAME); } break;
+case 306:
+#line 832 "asmparse.y"
+{ yyval.string = newString(COR_CCTOR_METHOD_NAME); } break;
+case 307:
+#line 833 "asmparse.y"
+{ yyval.string = yypvt[-0].string; } break;
+case 308:
+#line 836 "asmparse.y"
+{ yyval.int32 = 0; } break;
+case 309:
+#line 837 "asmparse.y"
+{ yyval.int32 = yypvt[-3].int32 | pdIn; } break;
+case 310:
+#line 838 "asmparse.y"
+{ yyval.int32 = yypvt[-3].int32 | pdOut; } break;
+case 311:
+#line 839 "asmparse.y"
+{ yyval.int32 = yypvt[-3].int32 | pdOptional; } break;
+case 312:
+#line 840 "asmparse.y"
+{ yyval.int32 = yypvt[-1].int32 + 1; } break;
+case 313:
+#line 843 "asmparse.y"
+{ yyval.implAttr = (CorMethodImpl) (miIL | miManaged); } break;
+case 314:
+#line 844 "asmparse.y"
+{ yyval.implAttr = (CorMethodImpl) ((yypvt[-1].implAttr & 0xFFF4) | miNative); } break;
+case 315:
+#line 845 "asmparse.y"
+{ yyval.implAttr = (CorMethodImpl) ((yypvt[-1].implAttr & 0xFFF4) | miIL); } break;
+case 316:
+#line 846 "asmparse.y"
+{ yyval.implAttr = (CorMethodImpl) ((yypvt[-1].implAttr & 0xFFF4) | miOPTIL); } break;
+case 317:
+#line 847 "asmparse.y"
+{ yyval.implAttr = (CorMethodImpl) ((yypvt[-1].implAttr & 0xFFFB) | miManaged); } break;
+case 318:
+#line 848 "asmparse.y"
+{ yyval.implAttr = (CorMethodImpl) ((yypvt[-1].implAttr & 0xFFFB) | miUnmanaged); } break;
+case 319:
+#line 849 "asmparse.y"
+{ yyval.implAttr = (CorMethodImpl) (yypvt[-1].implAttr | miForwardRef); } break;
+case 320:
+#line 850 "asmparse.y"
+{ yyval.implAttr = (CorMethodImpl) (yypvt[-1].implAttr | miPreserveSig); } break;
+case 321:
+#line 851 "asmparse.y"
+{ yyval.implAttr = (CorMethodImpl) (yypvt[-1].implAttr | miRuntime); } break;
+case 322:
+#line 852 "asmparse.y"
+{ yyval.implAttr = (CorMethodImpl) (yypvt[-1].implAttr | miInternalCall); } break;
+case 323:
+#line 853 "asmparse.y"
+{ yyval.implAttr = (CorMethodImpl) (yypvt[-1].implAttr | miSynchronized); } break;
+case 324:
+#line 854 "asmparse.y"
+{ yyval.implAttr = (CorMethodImpl) (yypvt[-1].implAttr | miNoInlining); } break;
+case 325:
+#line 855 "asmparse.y"
+{ yyval.implAttr = (CorMethodImpl) (yypvt[-1].implAttr | miAggressiveInlining); } break;
+case 326:
+#line 856 "asmparse.y"
+{ yyval.implAttr = (CorMethodImpl) (yypvt[-1].implAttr | miNoOptimization); } break;
+case 327:
+#line 857 "asmparse.y"
+{ yyval.implAttr = (CorMethodImpl) (yypvt[-1].int32); } break;
+case 328:
+#line 860 "asmparse.y"
+{ PASM->delArgNameList(PASM->m_firstArgName); PASM->m_firstArgName = NULL;PASM->m_lastArgName = NULL; 
+                                                            } break;
+case 331:
+#line 868 "asmparse.y"
+{ PASM->EmitByte(yypvt[-0].int32); } break;
+case 332:
+#line 869 "asmparse.y"
+{ delete PASM->m_SEHD; PASM->m_SEHD = PASM->m_SEHDstack.POP(); } break;
+case 333:
+#line 870 "asmparse.y"
+{ PASM->EmitMaxStack(yypvt[-0].int32); } break;
+case 334:
+#line 871 "asmparse.y"
+{ PASM->EmitLocals(parser->MakeSig(IMAGE_CEE_CS_CALLCONV_LOCAL_SIG, 0, yypvt[-1].binstr)); 
+                                                            } break;
+case 335:
+#line 873 "asmparse.y"
+{ PASM->EmitZeroInit(); 
+                                                              PASM->EmitLocals(parser->MakeSig(IMAGE_CEE_CS_CALLCONV_LOCAL_SIG, 0, yypvt[-1].binstr)); 
+                                                            } break;
+case 336:
+#line 876 "asmparse.y"
+{ PASM->EmitEntryPoint(); } break;
+case 337:
+#line 877 "asmparse.y"
+{ PASM->EmitZeroInit(); } break;
+case 340:
+#line 880 "asmparse.y"
+{ PASM->AddLabel(PASM->m_CurPC,yypvt[-1].string); /*PASM->EmitLabel($1);*/ } break;
+case 346:
+#line 886 "asmparse.y"
+{ if(PASM->m_pCurMethod->m_dwExportOrdinal == 0xFFFFFFFF)
+                                                              {
+                                                                PASM->m_pCurMethod->m_dwExportOrdinal = yypvt[-1].int32;
+                                                                PASM->m_pCurMethod->m_szExportAlias = NULL;
+                                                                if(PASM->m_pCurMethod->m_wVTEntry == 0) PASM->m_pCurMethod->m_wVTEntry = 1;
+                                                                if(PASM->m_pCurMethod->m_wVTSlot  == 0) PASM->m_pCurMethod->m_wVTSlot = yypvt[-1].int32 + 0x8000;
+                                                              }
+                                                              else
+                                                                PASM->report->warn("Duplicate .export directive, ignored\n");
+                                                            } break;
+case 347:
+#line 896 "asmparse.y"
+{ if(PASM->m_pCurMethod->m_dwExportOrdinal == 0xFFFFFFFF)
+                                                              {
+                                                                PASM->m_pCurMethod->m_dwExportOrdinal = yypvt[-3].int32;
+                                                                PASM->m_pCurMethod->m_szExportAlias = yypvt[-0].string;
+                                                                if(PASM->m_pCurMethod->m_wVTEntry == 0) PASM->m_pCurMethod->m_wVTEntry = 1;
+                                                                if(PASM->m_pCurMethod->m_wVTSlot  == 0) PASM->m_pCurMethod->m_wVTSlot = yypvt[-3].int32 + 0x8000;
+                                                              }
+                                                              else
+                                                                PASM->report->warn("Duplicate .export directive, ignored\n");
+                                                            } break;
+case 348:
+#line 906 "asmparse.y"
+{ PASM->m_pCurMethod->m_wVTEntry = (WORD)yypvt[-2].int32;
+                                                              PASM->m_pCurMethod->m_wVTSlot = (WORD)yypvt[-0].int32; } break;
+case 349:
+#line 909 "asmparse.y"
+{ PASM->AddMethodImpl(yypvt[-2].token,yypvt[-0].string,NULL,NULL,NULL,NULL); } break;
+case 350:
+#line 912 "asmparse.y"
+{ PASM->AddMethodImpl(yypvt[-6].token,yypvt[-4].string,
+                                                              (yypvt[-3].int32==0 ? parser->MakeSig(yypvt[-8].int32,yypvt[-7].binstr,yypvt[-1].binstr) :
+                                                              parser->MakeSig(yypvt[-8].int32| IMAGE_CEE_CS_CALLCONV_GENERIC,yypvt[-7].binstr,yypvt[-1].binstr,yypvt[-3].int32))
+                                                              ,NULL,NULL,NULL); 
+                                                              PASM->ResetArgNameList();
+                                                            } break;
+case 352:
+#line 919 "asmparse.y"
+{ if((yypvt[-1].int32 > 0) && (yypvt[-1].int32 <= (int)PASM->m_pCurMethod->m_NumTyPars))
+                                                                PASM->m_pCustomDescrList = PASM->m_pCurMethod->m_TyPars[yypvt[-1].int32-1].CAList();
+                                                              else
+                                                                PASM->report->error("Type parameter index out of range\n");
+                                                            } break;
+case 353:
+#line 924 "asmparse.y"
+{ int n = PASM->m_pCurMethod->FindTyPar(yypvt[-0].string);
+                                                              if(n >= 0)
+                                                                PASM->m_pCustomDescrList = PASM->m_pCurMethod->m_TyPars[n].CAList();
+                                                              else
+                                                                PASM->report->error("Type parameter '%s' undefined\n",yypvt[-0].string);
+                                                            } break;
+case 354:
+#line 931 "asmparse.y"
+{ if( yypvt[-2].int32 ) {
+                                                                ARG_NAME_LIST* pAN=PASM->findArg(PASM->m_pCurMethod->m_firstArgName, yypvt[-2].int32 - 1);
+                                                                if(pAN)
+                                                                {
+                                                                    PASM->m_pCustomDescrList = &(pAN->CustDList);
+                                                                    pAN->pValue = yypvt[-0].binstr;
+                                                                }
+                                                                else
+                                                                {
+                                                                    PASM->m_pCustomDescrList = NULL;
+                                                                    if(yypvt[-0].binstr) delete yypvt[-0].binstr;
+                                                                }
+                                                              } else {
+                                                                PASM->m_pCustomDescrList = &(PASM->m_pCurMethod->m_RetCustDList);
+                                                                PASM->m_pCurMethod->m_pRetValue = yypvt[-0].binstr;
+                                                              }
+                                                              PASM->m_tkCurrentCVOwner = 0;
+                                                            } break;
+case 355:
+#line 951 "asmparse.y"
+{ PASM->m_pCurMethod->CloseScope(); } break;
+case 356:
+#line 954 "asmparse.y"
+{ PASM->m_pCurMethod->OpenScope(); } break;
+case 360:
+#line 965 "asmparse.y"
+{ PASM->m_SEHD->tryTo = PASM->m_CurPC; } break;
+case 361:
+#line 966 "asmparse.y"
+{ PASM->SetTryLabels(yypvt[-2].string, yypvt[-0].string); } break;
+case 362:
+#line 967 "asmparse.y"
+{ if(PASM->m_SEHD) {PASM->m_SEHD->tryFrom = yypvt[-2].int32;
+                                                              PASM->m_SEHD->tryTo = yypvt[-0].int32;} } break;
+case 363:
+#line 971 "asmparse.y"
+{ PASM->NewSEHDescriptor();
+                                                              PASM->m_SEHD->tryFrom = PASM->m_CurPC; } break;
+case 364:
+#line 976 "asmparse.y"
+{ PASM->EmitTry(); } break;
+case 365:
+#line 977 "asmparse.y"
+{ PASM->EmitTry(); } break;
+case 366:
+#line 978 "asmparse.y"
+{ PASM->EmitTry(); } break;
+case 367:
+#line 979 "asmparse.y"
+{ PASM->EmitTry(); } break;
+case 368:
+#line 983 "asmparse.y"
+{ PASM->m_SEHD->sehHandler = PASM->m_CurPC; } break;
+case 369:
+#line 984 "asmparse.y"
+{ PASM->SetFilterLabel(yypvt[-0].string); 
+                                                               PASM->m_SEHD->sehHandler = PASM->m_CurPC; } break;
+case 370:
+#line 986 "asmparse.y"
+{ PASM->m_SEHD->sehFilter = yypvt[-0].int32; 
+                                                               PASM->m_SEHD->sehHandler = PASM->m_CurPC; } break;
+case 371:
+#line 990 "asmparse.y"
+{ PASM->m_SEHD->sehClause = COR_ILEXCEPTION_CLAUSE_FILTER;
+                                                               PASM->m_SEHD->sehFilter = PASM->m_CurPC; } break;
+case 372:
+#line 994 "asmparse.y"
+{  PASM->m_SEHD->sehClause = COR_ILEXCEPTION_CLAUSE_NONE;
+                                                               PASM->SetCatchClass(yypvt[-0].token); 
+                                                               PASM->m_SEHD->sehHandler = PASM->m_CurPC; } break;
+case 373:
+#line 999 "asmparse.y"
+{ PASM->m_SEHD->sehClause = COR_ILEXCEPTION_CLAUSE_FINALLY;
+                                                               PASM->m_SEHD->sehHandler = PASM->m_CurPC; } break;
+case 374:
+#line 1003 "asmparse.y"
+{ PASM->m_SEHD->sehClause = COR_ILEXCEPTION_CLAUSE_FAULT;
+                                                               PASM->m_SEHD->sehHandler = PASM->m_CurPC; } break;
+case 375:
+#line 1007 "asmparse.y"
+{ PASM->m_SEHD->sehHandlerTo = PASM->m_CurPC; } break;
+case 376:
+#line 1008 "asmparse.y"
+{ PASM->SetHandlerLabels(yypvt[-2].string, yypvt[-0].string); } break;
+case 377:
+#line 1009 "asmparse.y"
+{ PASM->m_SEHD->sehHandler = yypvt[-2].int32;
+                                                               PASM->m_SEHD->sehHandlerTo = yypvt[-0].int32; } break;
+case 379:
+#line 1017 "asmparse.y"
+{ PASM->EmitDataLabel(yypvt[-1].string); } break;
+case 381:
+#line 1021 "asmparse.y"
+{ PASM->SetDataSection(); } break;
+case 382:
+#line 1022 "asmparse.y"
+{ PASM->SetTLSSection(); } break;
+case 383:
+#line 1023 "asmparse.y"
+{ PASM->SetILSection(); } break;
+case 388:
+#line 1034 "asmparse.y"
+{ yyval.int32 = 1; } break;
+case 389:
+#line 1035 "asmparse.y"
+{ yyval.int32 = yypvt[-1].int32;
+                                                               if(yypvt[-1].int32 <= 0) { PASM->report->error("Illegal item count: %d\n",yypvt[-1].int32);
+                                                                  if(!PASM->OnErrGo) yyval.int32 = 1; }} break;
+case 390:
+#line 1040 "asmparse.y"
+{ PASM->EmitDataString(yypvt[-1].binstr); } break;
+case 391:
+#line 1041 "asmparse.y"
+{ PASM->EmitDD(yypvt[-1].string); } break;
+case 392:
+#line 1042 "asmparse.y"
+{ PASM->EmitData(yypvt[-1].binstr->ptr(),yypvt[-1].binstr->length()); } break;
+case 393:
+#line 1044 "asmparse.y"
+{ float f = (float) (*yypvt[-2].float64); float* p = new (nothrow) float[yypvt[-0].int32];
+                                                               if(p != NULL) {
+                                                                 for(int i=0; i < yypvt[-0].int32; i++) p[i] = f;
+                                                                 PASM->EmitData(p, sizeof(float)*yypvt[-0].int32); delete yypvt[-2].float64; delete [] p; 
+                                                               } else PASM->report->error("Out of memory emitting data block %d bytes\n",
+                                                                     sizeof(float)*yypvt[-0].int32); } break;
+case 394:
+#line 1051 "asmparse.y"
+{ double* p = new (nothrow) double[yypvt[-0].int32];
+                                                               if(p != NULL) {
+                                                                 for(int i=0; i<yypvt[-0].int32; i++) p[i] = *(yypvt[-2].float64);
+                                                                 PASM->EmitData(p, sizeof(double)*yypvt[-0].int32); delete yypvt[-2].float64; delete [] p;
+                                                               } else PASM->report->error("Out of memory emitting data block %d bytes\n",
+                                                                     sizeof(double)*yypvt[-0].int32); } break;
+case 395:
+#line 1058 "asmparse.y"
+{ __int64* p = new (nothrow) __int64[yypvt[-0].int32];
+                                                               if(p != NULL) {
+                                                                 for(int i=0; i<yypvt[-0].int32; i++) p[i] = *(yypvt[-2].int64);
+                                                                 PASM->EmitData(p, sizeof(__int64)*yypvt[-0].int32); delete yypvt[-2].int64; delete [] p;
+                                                               } else PASM->report->error("Out of memory emitting data block %d bytes\n",
+                                                                     sizeof(__int64)*yypvt[-0].int32); } break;
+case 396:
+#line 1065 "asmparse.y"
+{ __int32* p = new (nothrow) __int32[yypvt[-0].int32];
+                                                               if(p != NULL) {
+                                                                 for(int i=0; i<yypvt[-0].int32; i++) p[i] = yypvt[-2].int32;
+                                                                 PASM->EmitData(p, sizeof(__int32)*yypvt[-0].int32); delete [] p;
+                                                               } else PASM->report->error("Out of memory emitting data block %d bytes\n",
+                                                                     sizeof(__int32)*yypvt[-0].int32); } break;
+case 397:
+#line 1072 "asmparse.y"
+{ __int16 i = (__int16) yypvt[-2].int32; FAIL_UNLESS(i == yypvt[-2].int32, ("Value %d too big\n", yypvt[-2].int32));
+                                                               __int16* p = new (nothrow) __int16[yypvt[-0].int32];
+                                                               if(p != NULL) {
+                                                                 for(int j=0; j<yypvt[-0].int32; j++) p[j] = i;
+                                                                 PASM->EmitData(p, sizeof(__int16)*yypvt[-0].int32); delete [] p;
+                                                               } else PASM->report->error("Out of memory emitting data block %d bytes\n",
+                                                                     sizeof(__int16)*yypvt[-0].int32); } break;
+case 398:
+#line 1080 "asmparse.y"
+{ __int8 i = (__int8) yypvt[-2].int32; FAIL_UNLESS(i == yypvt[-2].int32, ("Value %d too big\n", yypvt[-2].int32));
+                                                               __int8* p = new (nothrow) __int8[yypvt[-0].int32];
+                                                               if(p != NULL) {
+                                                                 for(int j=0; j<yypvt[-0].int32; j++) p[j] = i;
+                                                                 PASM->EmitData(p, sizeof(__int8)*yypvt[-0].int32); delete [] p;
+                                                               } else PASM->report->error("Out of memory emitting data block %d bytes\n",
+                                                                     sizeof(__int8)*yypvt[-0].int32); } break;
+case 399:
+#line 1087 "asmparse.y"
+{ PASM->EmitData(NULL, sizeof(float)*yypvt[-0].int32); } break;
+case 400:
+#line 1088 "asmparse.y"
+{ PASM->EmitData(NULL, sizeof(double)*yypvt[-0].int32); } break;
+case 401:
+#line 1089 "asmparse.y"
+{ PASM->EmitData(NULL, sizeof(__int64)*yypvt[-0].int32); } break;
+case 402:
+#line 1090 "asmparse.y"
+{ PASM->EmitData(NULL, sizeof(__int32)*yypvt[-0].int32); } break;
+case 403:
+#line 1091 "asmparse.y"
+{ PASM->EmitData(NULL, sizeof(__int16)*yypvt[-0].int32); } break;
+case 404:
+#line 1092 "asmparse.y"
+{ PASM->EmitData(NULL, sizeof(__int8)*yypvt[-0].int32); } break;
+case 405:
+#line 1096 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_R4);
+                                                               float f = (float)(*yypvt[-1].float64);
+                                                               yyval.binstr->appendInt32(*((__int32*)&f)); delete yypvt[-1].float64; } break;
+case 406:
+#line 1099 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_R8); 
+                                                               yyval.binstr->appendInt64((__int64 *)yypvt[-1].float64); delete yypvt[-1].float64; } break;
+case 407:
+#line 1101 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_R4); 
+                                                               yyval.binstr->appendInt32(yypvt[-1].int32); } break;
+case 408:
+#line 1103 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_R8); 
+                                                               yyval.binstr->appendInt64((__int64 *)yypvt[-1].int64); delete yypvt[-1].int64; } break;
+case 409:
+#line 1105 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_I8); 
+                                                               yyval.binstr->appendInt64((__int64 *)yypvt[-1].int64); delete yypvt[-1].int64; } break;
+case 410:
+#line 1107 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_I4); 
+                                                               yyval.binstr->appendInt32(yypvt[-1].int32); } break;
+case 411:
+#line 1109 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_I2); 
+                                                               yyval.binstr->appendInt16(yypvt[-1].int32); } break;
+case 412:
+#line 1111 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_I1); 
+                                                               yyval.binstr->appendInt8(yypvt[-1].int32); } break;
+case 413:
+#line 1113 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U8); 
+                                                               yyval.binstr->appendInt64((__int64 *)yypvt[-1].int64); delete yypvt[-1].int64; } break;
+case 414:
+#line 1115 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U4); 
+                                                               yyval.binstr->appendInt32(yypvt[-1].int32); } break;
+case 415:
+#line 1117 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U2); 
+                                                               yyval.binstr->appendInt16(yypvt[-1].int32); } break;
+case 416:
+#line 1119 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U1); 
+                                                               yyval.binstr->appendInt8(yypvt[-1].int32); } break;
+case 417:
+#line 1121 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U8); 
+                                                               yyval.binstr->appendInt64((__int64 *)yypvt[-1].int64); delete yypvt[-1].int64; } break;
+case 418:
+#line 1123 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U4); 
+                                                               yyval.binstr->appendInt32(yypvt[-1].int32); } break;
+case 419:
+#line 1125 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U2); 
+                                                               yyval.binstr->appendInt16(yypvt[-1].int32); } break;
+case 420:
+#line 1127 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U1); 
+                                                               yyval.binstr->appendInt8(yypvt[-1].int32); } break;
+case 421:
+#line 1129 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_CHAR); 
+                                                               yyval.binstr->appendInt16(yypvt[-1].int32); } break;
+case 422:
+#line 1131 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_BOOLEAN); 
+                                                               yyval.binstr->appendInt8(yypvt[-1].int32);} break;
+case 423:
+#line 1133 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_STRING);
+                                                               yyval.binstr->append(yypvt[-1].binstr); delete yypvt[-1].binstr;} break;
+case 424:
+#line 1137 "asmparse.y"
+{ bParsingByteArray = TRUE; } break;
+case 425:
+#line 1140 "asmparse.y"
+{ yyval.binstr = new BinStr(); } break;
+case 426:
+#line 1141 "asmparse.y"
+{ yyval.binstr = yypvt[-0].binstr; } break;
+case 427:
+#line 1144 "asmparse.y"
+{ __int8 i = (__int8) yypvt[-0].int32; yyval.binstr = new BinStr(); yyval.binstr->appendInt8(i); } break;
+case 428:
+#line 1145 "asmparse.y"
+{ __int8 i = (__int8) yypvt[-0].int32; yyval.binstr = yypvt[-1].binstr; yyval.binstr->appendInt8(i); } break;
+case 429:
+#line 1149 "asmparse.y"
+{ yyval.binstr = yypvt[-0].binstr; } break;
+case 430:
+#line 1150 "asmparse.y"
+{ yyval.binstr = BinStrToUnicode(yypvt[-0].binstr,true); yyval.binstr->insertInt8(ELEMENT_TYPE_STRING);} break;
+case 431:
+#line 1151 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_CLASS); 
+                                                               yyval.binstr->appendInt32(0); } break;
+case 432:
+#line 1156 "asmparse.y"
+{ yyval.binstr = yypvt[-0].binstr; } break;
+case 433:
+#line 1157 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_STRING); yyval.binstr->appendInt8(0xFF); } break;
+case 434:
+#line 1158 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_STRING); 
+                                                               AppendStringWithLength(yyval.binstr,yypvt[-1].string); delete [] yypvt[-1].string;} break;
+case 435:
+#line 1160 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(SERIALIZATION_TYPE_TYPE); 
+                                                               AppendStringWithLength(yyval.binstr,yypvt[-1].string); delete [] yypvt[-1].string;} break;
+case 436:
+#line 1162 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(SERIALIZATION_TYPE_TYPE); 
+                                                               AppendStringWithLength(yyval.binstr,PASM->ReflectionNotation(yypvt[-1].token));} break;
+case 437:
+#line 1164 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(SERIALIZATION_TYPE_TYPE); yyval.binstr->appendInt8(0xFF); } break;
+case 438:
+#line 1165 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt8(SERIALIZATION_TYPE_TAGGED_OBJECT);} break;
+case 439:
+#line 1167 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_R4);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break;
+case 440:
+#line 1171 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_R8);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break;
+case 441:
+#line 1175 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_I8);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break;
+case 442:
+#line 1179 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_I4);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break;
+case 443:
+#line 1183 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_I2);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break;
+case 444:
+#line 1187 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_I1);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break;
+case 445:
+#line 1191 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_U8);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break;
+case 446:
+#line 1195 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_U4);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break;
+case 447:
+#line 1199 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_U2);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break;
+case 448:
+#line 1203 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_U1);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break;
+case 449:
+#line 1207 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_U8);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break;
+case 450:
+#line 1211 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_U4);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break;
+case 451:
+#line 1215 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_U2);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break;
+case 452:
+#line 1219 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_U1);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break;
+case 453:
+#line 1223 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_CHAR);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break;
+case 454:
+#line 1227 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_BOOLEAN);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break;
+case 455:
+#line 1231 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_STRING);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break;
+case 456:
+#line 1235 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32);
+                                                               yyval.binstr->insertInt8(SERIALIZATION_TYPE_TYPE);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break;
+case 457:
+#line 1239 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32);
+                                                               yyval.binstr->insertInt8(SERIALIZATION_TYPE_TAGGED_OBJECT);
+                                                               yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break;
+case 458:
+#line 1245 "asmparse.y"
+{ yyval.binstr = new BinStr(); } break;
+case 459:
+#line 1246 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr;
+                                                               float f = (float) (*yypvt[-0].float64); yyval.binstr->appendInt32(*((__int32*)&f)); delete yypvt[-0].float64; } break;
+case 460:
+#line 1248 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; 
+                                                               yyval.binstr->appendInt32(yypvt[-0].int32); } break;
+case 461:
+#line 1252 "asmparse.y"
+{ yyval.binstr = new BinStr(); } break;
+case 462:
+#line 1253 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; 
+                                                               yyval.binstr->appendInt64((__int64 *)yypvt[-0].float64); delete yypvt[-0].float64; } break;
+case 463:
+#line 1255 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; 
+                                                               yyval.binstr->appendInt64((__int64 *)yypvt[-0].int64); delete yypvt[-0].int64; } break;
+case 464:
+#line 1259 "asmparse.y"
+{ yyval.binstr = new BinStr(); } break;
+case 465:
+#line 1260 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; 
+                                                               yyval.binstr->appendInt64((__int64 *)yypvt[-0].int64); delete yypvt[-0].int64; } break;
+case 466:
+#line 1264 "asmparse.y"
+{ yyval.binstr = new BinStr(); } break;
+case 467:
+#line 1265 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->appendInt32(yypvt[-0].int32);} break;
+case 468:
+#line 1268 "asmparse.y"
+{ yyval.binstr = new BinStr(); } break;
+case 469:
+#line 1269 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->appendInt16(yypvt[-0].int32);} break;
+case 470:
+#line 1272 "asmparse.y"
+{ yyval.binstr = new BinStr(); } break;
+case 471:
+#line 1273 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->appendInt8(yypvt[-0].int32); } break;
+case 472:
+#line 1276 "asmparse.y"
+{ yyval.binstr = new BinStr(); } break;
+case 473:
+#line 1277 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; 
+                                                               yyval.binstr->appendInt8(yypvt[-0].int32);} break;
+case 474:
+#line 1281 "asmparse.y"
+{ yyval.binstr = new BinStr(); } break;
+case 475:
+#line 1282 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->appendInt8(0xFF); } break;
+case 476:
+#line 1283 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; 
+                                                               AppendStringWithLength(yyval.binstr,yypvt[-0].string); delete [] yypvt[-0].string;} break;
+case 477:
+#line 1287 "asmparse.y"
+{ yyval.binstr = new BinStr(); } break;
+case 478:
+#line 1288 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->appendInt8(0xFF); } break;
+case 479:
+#line 1289 "asmparse.y"
+{ yyval.binstr = yypvt[-2].binstr; 
+                                                               AppendStringWithLength(yyval.binstr,yypvt[-0].string); delete [] yypvt[-0].string;} break;
+case 480:
+#line 1291 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; 
+                                                               AppendStringWithLength(yyval.binstr,PASM->ReflectionNotation(yypvt[-0].token));} break;
+case 481:
+#line 1295 "asmparse.y"
+{ yyval.binstr = new BinStr(); } break;
+case 482:
+#line 1296 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->append(yypvt[-0].binstr); delete yypvt[-0].binstr; } break;
+case 483:
+#line 1300 "asmparse.y"
+{ parser->m_ANSFirst.PUSH(PASM->m_firstArgName);
+                                                               parser->m_ANSLast.PUSH(PASM->m_lastArgName);   
+                                                               PASM->m_firstArgName = NULL;
+                                                               PASM->m_lastArgName = NULL; } break;
+case 484:
+#line 1306 "asmparse.y"
+{ yyval.instr = SetupInstr(yypvt[-0].opcode); } break;
+case 485:
+#line 1309 "asmparse.y"
+{ yyval.instr = SetupInstr(yypvt[-0].opcode); } break;
+case 486:
+#line 1312 "asmparse.y"
+{ yyval.instr = SetupInstr(yypvt[-0].opcode); } break;
+case 487:
+#line 1315 "asmparse.y"
+{ yyval.instr = SetupInstr(yypvt[-0].opcode); } break;
+case 488:
+#line 1318 "asmparse.y"
+{ yyval.instr = SetupInstr(yypvt[-0].opcode); } break;
+case 489:
+#line 1321 "asmparse.y"
+{ yyval.instr = SetupInstr(yypvt[-0].opcode); } break;
+case 490:
+#line 1324 "asmparse.y"
+{ yyval.instr = SetupInstr(yypvt[-0].opcode); 
+                                                               if((!PASM->OnErrGo)&&
+                                                               ((yypvt[-0].opcode == CEE_NEWOBJ)||
+                                                                (yypvt[-0].opcode == CEE_CALLVIRT))) 
+                                                                  iCallConv = IMAGE_CEE_CS_CALLCONV_HASTHIS;
+                                                             } break;
+case 491:
+#line 1332 "asmparse.y"
+{ yyval.instr = SetupInstr(yypvt[-0].opcode); } break;
+case 492:
+#line 1335 "asmparse.y"
+{ yyval.instr = SetupInstr(yypvt[-0].opcode); } break;
+case 493:
+#line 1338 "asmparse.y"
+{ yyval.instr = SetupInstr(yypvt[-0].opcode); } break;
+case 494:
+#line 1341 "asmparse.y"
+{ yyval.instr = SetupInstr(yypvt[-0].opcode); } break;
+case 495:
+#line 1344 "asmparse.y"
+{ yyval.instr = SetupInstr(yypvt[-0].opcode); iOpcodeLen = PASM->OpcodeLen(yyval.instr); } break;
+case 496:
+#line 1347 "asmparse.y"
+{ yyval.instr = SetupInstr(yypvt[-0].opcode); } break;
+case 497:
+#line 1350 "asmparse.y"
+{ yyval.instr = yypvt[-1].instr; bParsingByteArray = TRUE; } break;
+case 498:
+#line 1354 "asmparse.y"
+{ PASM->EmitOpcode(yypvt[-0].instr); } break;
+case 499:
+#line 1355 "asmparse.y"
+{ PASM->EmitInstrVar(yypvt[-1].instr, yypvt[-0].int32); } break;
+case 500:
+#line 1356 "asmparse.y"
+{ PASM->EmitInstrVarByName(yypvt[-1].instr, yypvt[-0].string); } break;
+case 501:
+#line 1357 "asmparse.y"
+{ PASM->EmitInstrI(yypvt[-1].instr, yypvt[-0].int32); } break;
+case 502:
+#line 1358 "asmparse.y"
+{ PASM->EmitInstrI8(yypvt[-1].instr, yypvt[-0].int64); } break;
+case 503:
+#line 1359 "asmparse.y"
+{ PASM->EmitInstrR(yypvt[-1].instr, yypvt[-0].float64); delete (yypvt[-0].float64);} break;
+case 504:
+#line 1360 "asmparse.y"
+{ double f = (double) (*yypvt[-0].int64); PASM->EmitInstrR(yypvt[-1].instr, &f); } break;
+case 505:
+#line 1361 "asmparse.y"
+{ unsigned L = yypvt[-1].binstr->length();
+                                                               FAIL_UNLESS(L >= sizeof(float), ("%d hexbytes, must be at least %d\n",
+                                                                           L,sizeof(float))); 
+                                                               if(L < sizeof(float)) {YYERROR; } 
+                                                               else {
+                                                                   double f = (L >= sizeof(double)) ? *((double *)(yypvt[-1].binstr->ptr()))
+                                                                                    : (double)(*(float *)(yypvt[-1].binstr->ptr())); 
+                                                                   PASM->EmitInstrR(yypvt[-2].instr,&f); }
+                                                               delete yypvt[-1].binstr; } break;
+case 506:
+#line 1370 "asmparse.y"
+{ PASM->EmitInstrBrOffset(yypvt[-1].instr, yypvt[-0].int32); } break;
+case 507:
+#line 1371 "asmparse.y"
+{ PASM->EmitInstrBrTarget(yypvt[-1].instr, yypvt[-0].string); } break;
+case 508:
+#line 1373 "asmparse.y"
+{ PASM->SetMemberRefFixup(yypvt[-0].token,PASM->OpcodeLen(yypvt[-1].instr));
+                                                               PASM->EmitInstrI(yypvt[-1].instr,yypvt[-0].token);
+                                                               PASM->m_tkCurrentCVOwner = yypvt[-0].token;
+                                                               PASM->m_pCustomDescrList = NULL;
+                                                               iCallConv = 0;
+                                                             } break;
+case 509:
+#line 1380 "asmparse.y"
+{ yypvt[-3].binstr->insertInt8(IMAGE_CEE_CS_CALLCONV_FIELD); 
+                                                               mdToken mr = PASM->MakeMemberRef(yypvt[-2].token, yypvt[-0].string, yypvt[-3].binstr);
+                                                               PASM->SetMemberRefFixup(mr, PASM->OpcodeLen(yypvt[-4].instr));
+                                                               PASM->EmitInstrI(yypvt[-4].instr,mr);
+                                                               PASM->m_tkCurrentCVOwner = mr;
+                                                               PASM->m_pCustomDescrList = NULL;
+                                                             } break;
+case 510:
+#line 1388 "asmparse.y"
+{ yypvt[-1].binstr->insertInt8(IMAGE_CEE_CS_CALLCONV_FIELD); 
+                                                               mdToken mr = PASM->MakeMemberRef(mdTokenNil, yypvt[-0].string, yypvt[-1].binstr);
+                                                               PASM->SetMemberRefFixup(mr, PASM->OpcodeLen(yypvt[-2].instr));
+                                                               PASM->EmitInstrI(yypvt[-2].instr,mr);
+                                                               PASM->m_tkCurrentCVOwner = mr;
+                                                               PASM->m_pCustomDescrList = NULL;
+                                                             } break;
+case 511:
+#line 1395 "asmparse.y"
+{ mdToken mr = yypvt[-0].token;
+                                                               PASM->SetMemberRefFixup(mr, PASM->OpcodeLen(yypvt[-1].instr));
+                                                               PASM->EmitInstrI(yypvt[-1].instr,mr);
+                                                               PASM->m_tkCurrentCVOwner = mr;
+                                                               PASM->m_pCustomDescrList = NULL;
+                                                             } break;
+case 512:
+#line 1401 "asmparse.y"
+{ mdToken mr = yypvt[-0].tdd->m_tkTypeSpec;
+                                                               PASM->SetMemberRefFixup(mr, PASM->OpcodeLen(yypvt[-1].instr));
+                                                               PASM->EmitInstrI(yypvt[-1].instr,mr);
+                                                               PASM->m_tkCurrentCVOwner = mr;
+                                                               PASM->m_pCustomDescrList = NULL;
+                                                             } break;
+case 513:
+#line 1407 "asmparse.y"
+{ mdToken mr = yypvt[-0].tdd->m_tkTypeSpec;
+                                                               PASM->SetMemberRefFixup(mr, PASM->OpcodeLen(yypvt[-1].instr));
+                                                               PASM->EmitInstrI(yypvt[-1].instr,mr);
+                                                               PASM->m_tkCurrentCVOwner = mr;
+                                                               PASM->m_pCustomDescrList = NULL;
+                                                             } break;
+case 514:
+#line 1413 "asmparse.y"
+{ PASM->EmitInstrI(yypvt[-1].instr, yypvt[-0].token); 
+                                                               PASM->m_tkCurrentCVOwner = yypvt[-0].token;
+                                                               PASM->m_pCustomDescrList = NULL;
+                                                             } break;
+case 515:
+#line 1417 "asmparse.y"
+{ PASM->EmitInstrStringLiteral(yypvt[-1].instr, yypvt[-0].binstr,TRUE); } break;
+case 516:
+#line 1419 "asmparse.y"
+{ PASM->EmitInstrStringLiteral(yypvt[-4].instr, yypvt[-1].binstr,FALSE); } break;
+case 517:
+#line 1421 "asmparse.y"
+{ PASM->EmitInstrStringLiteral(yypvt[-3].instr, yypvt[-1].binstr,FALSE,TRUE); } break;
+case 518:
+#line 1423 "asmparse.y"
+{ PASM->EmitInstrSig(yypvt[-5].instr, parser->MakeSig(yypvt[-4].int32, yypvt[-3].binstr, yypvt[-1].binstr)); 
+                                                               PASM->ResetArgNameList();
+                                                             } break;
+case 519:
+#line 1427 "asmparse.y"
+{ PASM->EmitInstrI(yypvt[-1].instr,yypvt[-0].token);
+                                                               PASM->m_tkCurrentCVOwner = yypvt[-0].token;
+                                                               PASM->m_pCustomDescrList = NULL;
+                                                               iOpcodeLen = 0;
+                                                             } break;
+case 520:
+#line 1432 "asmparse.y"
+{ PASM->EmitInstrSwitch(yypvt[-3].instr, yypvt[-1].labels); } break;
+case 521:
+#line 1435 "asmparse.y"
+{ yyval.labels = 0; } break;
+case 522:
+#line 1436 "asmparse.y"
+{ yyval.labels = new Labels(yypvt[-2].string, yypvt[-0].labels, TRUE); } break;
+case 523:
+#line 1437 "asmparse.y"
+{ yyval.labels = new Labels((char *)(UINT_PTR)yypvt[-2].int32, yypvt[-0].labels, FALSE); } break;
+case 524:
+#line 1438 "asmparse.y"
+{ yyval.labels = new Labels(yypvt[-0].string, NULL, TRUE); } break;
+case 525:
+#line 1439 "asmparse.y"
+{ yyval.labels = new Labels((char *)(UINT_PTR)yypvt[-0].int32, NULL, FALSE); } break;
+case 526:
+#line 1443 "asmparse.y"
+{ yyval.binstr = NULL; } break;
+case 527:
+#line 1444 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; } break;
+case 528:
+#line 1447 "asmparse.y"
+{ yyval.binstr = NULL; } break;
+case 529:
+#line 1448 "asmparse.y"
+{ yyval.binstr = yypvt[-0].binstr; } break;
+case 530:
+#line 1451 "asmparse.y"
+{ yyval.binstr = yypvt[-0].binstr; } break;
+case 531:
+#line 1452 "asmparse.y"
+{ yyval.binstr = yypvt[-2].binstr; yyval.binstr->append(yypvt[-0].binstr); delete yypvt[-0].binstr; } break;
+case 532:
+#line 1456 "asmparse.y"
+{ yyval.binstr = new BinStr(); } break;
+case 533:
+#line 1457 "asmparse.y"
+{ yyval.binstr = yypvt[-0].binstr;} break;
+case 534:
+#line 1460 "asmparse.y"
+{ yyval.binstr = yypvt[-0].binstr; } break;
+case 535:
+#line 1461 "asmparse.y"
+{ yyval.binstr = yypvt[-2].binstr; yyval.binstr->append(yypvt[-0].binstr); delete yypvt[-0].binstr; } break;
+case 536:
+#line 1464 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_SENTINEL); } break;
+case 537:
+#line 1465 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->append(yypvt[-1].binstr); PASM->addArgName(NULL, yypvt[-1].binstr, yypvt[-0].binstr, yypvt[-2].int32); } break;
+case 538:
+#line 1466 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->append(yypvt[-2].binstr); PASM->addArgName(yypvt[-0].string, yypvt[-2].binstr, yypvt[-1].binstr, yypvt[-3].int32);} break;
+case 539:
+#line 1470 "asmparse.y"
+{ yyval.token = PASM->ResolveClassRef(PASM->GetAsmRef(yypvt[-2].string), yypvt[-0].string, NULL); delete[] yypvt[-2].string;} break;
+case 540:
+#line 1471 "asmparse.y"
+{ yyval.token = PASM->ResolveClassRef(yypvt[-2].token, yypvt[-0].string, NULL); } break;
+case 541:
+#line 1472 "asmparse.y"
+{ yyval.token = PASM->ResolveClassRef(mdTokenNil, yypvt[-0].string, NULL); } break;
+case 542:
+#line 1473 "asmparse.y"
+{ yyval.token = PASM->ResolveClassRef(PASM->GetModRef(yypvt[-2].string),yypvt[-0].string, NULL); delete[] yypvt[-2].string;} break;
+case 543:
+#line 1474 "asmparse.y"
+{ yyval.token = PASM->ResolveClassRef(1,yypvt[-0].string,NULL); } break;
+case 544:
+#line 1475 "asmparse.y"
+{ yyval.token = yypvt[-0].token; } break;
+case 545:
+#line 1476 "asmparse.y"
+{ yyval.token = yypvt[-0].tdd->m_tkTypeSpec; } break;
+case 546:
+#line 1477 "asmparse.y"
+{ if(PASM->m_pCurClass != NULL) yyval.token = PASM->m_pCurClass->m_cl;
+                                                                else { yyval.token = 0; PASM->report->error(".this outside class scope\n"); } 
+                                                              } break;
+case 547:
+#line 1480 "asmparse.y"
+{ if(PASM->m_pCurClass != NULL) {
+                                                                  yyval.token = PASM->m_pCurClass->m_crExtends;
+                                                                  if(RidFromToken(yyval.token) == 0)
+                                                                    PASM->report->error(".base undefined\n");
+                                                                } else { yyval.token = 0; PASM->report->error(".base outside class scope\n"); } 
+                                                              } break;
+case 548:
+#line 1486 "asmparse.y"
+{ if(PASM->m_pCurClass != NULL) {
+                                                                  if(PASM->m_pCurClass->m_pEncloser != NULL) yyval.token = PASM->m_pCurClass->m_pEncloser->m_cl;
+                                                                  else { yyval.token = 0; PASM->report->error(".nester undefined\n"); }
+                                                                } else { yyval.token = 0; PASM->report->error(".nester outside class scope\n"); } 
+                                                              } break;
+case 549:
+#line 1493 "asmparse.y"
+{ yyval.string = yypvt[-0].string; } break;
+case 550:
+#line 1494 "asmparse.y"
+{ yyval.string = newStringWDel(yypvt[-2].string, NESTING_SEP, yypvt[-0].string); } break;
+case 551:
+#line 1497 "asmparse.y"
+{ yyval.token = yypvt[-0].token;} break;
+case 552:
+#line 1498 "asmparse.y"
+{ yyval.token = PASM->GetAsmRef(yypvt[-1].string); delete[] yypvt[-1].string;} break;
+case 553:
+#line 1499 "asmparse.y"
+{ yyval.token = PASM->GetModRef(yypvt[-1].string); delete[] yypvt[-1].string;} break;
+case 554:
+#line 1500 "asmparse.y"
+{ yyval.token = PASM->ResolveTypeSpec(yypvt[-0].binstr); } break;
+case 555:
+#line 1504 "asmparse.y"
+{ yyval.binstr = new BinStr(); } break;
+case 556:
+#line 1506 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_CUSTOMMARSHALER);
+                                                                corEmitInt(yyval.binstr,yypvt[-7].binstr->length()); yyval.binstr->append(yypvt[-7].binstr);
+                                                                corEmitInt(yyval.binstr,yypvt[-5].binstr->length()); yyval.binstr->append(yypvt[-5].binstr);
+                                                                corEmitInt(yyval.binstr,yypvt[-3].binstr->length()); yyval.binstr->append(yypvt[-3].binstr);
+                                                                corEmitInt(yyval.binstr,yypvt[-1].binstr->length()); yyval.binstr->append(yypvt[-1].binstr); 
+                                                                PASM->report->warn("Deprecated 4-string form of custom marshaler, first two strings ignored\n");} break;
+case 557:
+#line 1513 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_CUSTOMMARSHALER);
+                                                                corEmitInt(yyval.binstr,0);
+                                                                corEmitInt(yyval.binstr,0);
+                                                                corEmitInt(yyval.binstr,yypvt[-3].binstr->length()); yyval.binstr->append(yypvt[-3].binstr);
+                                                                corEmitInt(yyval.binstr,yypvt[-1].binstr->length()); yyval.binstr->append(yypvt[-1].binstr); } break;
+case 558:
+#line 1518 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_FIXEDSYSSTRING);
+                                                                corEmitInt(yyval.binstr,yypvt[-1].int32); } break;
+case 559:
+#line 1521 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_FIXEDARRAY);
+                                                                corEmitInt(yyval.binstr,yypvt[-2].int32); yyval.binstr->append(yypvt[-0].binstr); } break;
+case 560:
+#line 1523 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_VARIANT); 
+                                                                PASM->report->warn("Deprecated native type 'variant'\n"); } break;
+case 561:
+#line 1525 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_CURRENCY); } break;
+case 562:
+#line 1526 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_SYSCHAR); 
+                                                                PASM->report->warn("Deprecated native type 'syschar'\n"); } break;
+case 563:
+#line 1528 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_VOID); 
+                                                                PASM->report->warn("Deprecated native type 'void'\n"); } break;
+case 564:
+#line 1530 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_BOOLEAN); } break;
+case 565:
+#line 1531 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_I1); } break;
+case 566:
+#line 1532 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_I2); } break;
+case 567:
+#line 1533 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_I4); } break;
+case 568:
+#line 1534 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_I8); } break;
+case 569:
+#line 1535 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_R4); } break;
+case 570:
+#line 1536 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_R8); } break;
+case 571:
+#line 1537 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_ERROR); } break;
+case 572:
+#line 1538 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_U1); } break;
+case 573:
+#line 1539 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_U2); } break;
+case 574:
+#line 1540 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_U4); } break;
+case 575:
+#line 1541 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_U8); } break;
+case 576:
+#line 1542 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_U1); } break;
+case 577:
+#line 1543 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_U2); } break;
+case 578:
+#line 1544 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_U4); } break;
+case 579:
+#line 1545 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_U8); } break;
+case 580:
+#line 1546 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt8(NATIVE_TYPE_PTR); 
+                                                                PASM->report->warn("Deprecated native type '*'\n"); } break;
+case 581:
+#line 1548 "asmparse.y"
+{ yyval.binstr = yypvt[-2].binstr; if(yyval.binstr->length()==0) yyval.binstr->appendInt8(NATIVE_TYPE_MAX);
+                                                                yyval.binstr->insertInt8(NATIVE_TYPE_ARRAY); } break;
+case 582:
+#line 1550 "asmparse.y"
+{ yyval.binstr = yypvt[-3].binstr; if(yyval.binstr->length()==0) yyval.binstr->appendInt8(NATIVE_TYPE_MAX); 
+                                                                yyval.binstr->insertInt8(NATIVE_TYPE_ARRAY);
+                                                                corEmitInt(yyval.binstr,0);
+                                                                corEmitInt(yyval.binstr,yypvt[-1].int32); 
+                                                                corEmitInt(yyval.binstr,0); } break;
+case 583:
+#line 1555 "asmparse.y"
+{ yyval.binstr = yypvt[-5].binstr; if(yyval.binstr->length()==0) yyval.binstr->appendInt8(NATIVE_TYPE_MAX); 
+                                                                yyval.binstr->insertInt8(NATIVE_TYPE_ARRAY);
+                                                                corEmitInt(yyval.binstr,yypvt[-1].int32);
+                                                                corEmitInt(yyval.binstr,yypvt[-3].int32);
+                                                                corEmitInt(yyval.binstr,ntaSizeParamIndexSpecified); } break;
+case 584:
+#line 1560 "asmparse.y"
+{ yyval.binstr = yypvt[-4].binstr; if(yyval.binstr->length()==0) yyval.binstr->appendInt8(NATIVE_TYPE_MAX); 
+                                                                yyval.binstr->insertInt8(NATIVE_TYPE_ARRAY);
+                                                                corEmitInt(yyval.binstr,yypvt[-1].int32); } break;
+case 585:
+#line 1563 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_DECIMAL); 
+                                                                PASM->report->warn("Deprecated native type 'decimal'\n"); } break;
+case 586:
+#line 1565 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_DATE); 
+                                                                PASM->report->warn("Deprecated native type 'date'\n"); } break;
+case 587:
+#line 1567 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_BSTR); } break;
+case 588:
+#line 1568 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_LPSTR); } break;
+case 589:
+#line 1569 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_LPWSTR); } break;
+case 590:
+#line 1570 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_LPTSTR); } break;
+case 591:
+#line 1571 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_OBJECTREF); 
+                                                                PASM->report->warn("Deprecated native type 'objectref'\n"); } break;
+case 592:
+#line 1573 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_IUNKNOWN);
+                                                                if(yypvt[-0].int32 != -1) corEmitInt(yyval.binstr,yypvt[-0].int32); } break;
+case 593:
+#line 1575 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_IDISPATCH); 
+                                                                if(yypvt[-0].int32 != -1) corEmitInt(yyval.binstr,yypvt[-0].int32); } break;
+case 594:
+#line 1577 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_STRUCT); } break;
+case 595:
+#line 1578 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_INTF);
+                                                                if(yypvt[-0].int32 != -1) corEmitInt(yyval.binstr,yypvt[-0].int32); } break;
+case 596:
+#line 1580 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_SAFEARRAY); 
+                                                                corEmitInt(yyval.binstr,yypvt[-0].int32); 
+                                                                corEmitInt(yyval.binstr,0);} break;
+case 597:
+#line 1583 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_SAFEARRAY); 
+                                                                corEmitInt(yyval.binstr,yypvt[-2].int32); 
+                                                                corEmitInt(yyval.binstr,yypvt[-0].binstr->length()); yyval.binstr->append(yypvt[-0].binstr); } break;
+case 598:
+#line 1587 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_INT); } break;
+case 599:
+#line 1588 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_UINT); } break;
+case 600:
+#line 1589 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_UINT); } break;
+case 601:
+#line 1590 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_NESTEDSTRUCT); 
+                                                                PASM->report->warn("Deprecated native type 'nested struct'\n"); } break;
+case 602:
+#line 1592 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_BYVALSTR); } break;
+case 603:
+#line 1593 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_ANSIBSTR); } break;
+case 604:
+#line 1594 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_TBSTR); } break;
+case 605:
+#line 1595 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_VARIANTBOOL); } break;
+case 606:
+#line 1596 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_FUNC); } break;
+case 607:
+#line 1597 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_ASANY); } break;
+case 608:
+#line 1598 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_LPSTRUCT); } break;
+case 609:
+#line 1599 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->append(yypvt[-0].tdd->m_pbsTypeSpec); } break;
+case 610:
+#line 1602 "asmparse.y"
+{ yyval.int32 = -1; } break;
+case 611:
+#line 1603 "asmparse.y"
+{ yyval.int32 = yypvt[-1].int32; } break;
+case 612:
+#line 1606 "asmparse.y"
+{ yyval.int32 = VT_EMPTY; } break;
+case 613:
+#line 1607 "asmparse.y"
+{ yyval.int32 = VT_NULL; } break;
+case 614:
+#line 1608 "asmparse.y"
+{ yyval.int32 = VT_VARIANT; } break;
+case 615:
+#line 1609 "asmparse.y"
+{ yyval.int32 = VT_CY; } break;
+case 616:
+#line 1610 "asmparse.y"
+{ yyval.int32 = VT_VOID; } break;
+case 617:
+#line 1611 "asmparse.y"
+{ yyval.int32 = VT_BOOL; } break;
+case 618:
+#line 1612 "asmparse.y"
+{ yyval.int32 = VT_I1; } break;
+case 619:
+#line 1613 "asmparse.y"
+{ yyval.int32 = VT_I2; } break;
+case 620:
+#line 1614 "asmparse.y"
+{ yyval.int32 = VT_I4; } break;
+case 621:
+#line 1615 "asmparse.y"
+{ yyval.int32 = VT_I8; } break;
+case 622:
+#line 1616 "asmparse.y"
+{ yyval.int32 = VT_R4; } break;
+case 623:
+#line 1617 "asmparse.y"
+{ yyval.int32 = VT_R8; } break;
+case 624:
+#line 1618 "asmparse.y"
+{ yyval.int32 = VT_UI1; } break;
+case 625:
+#line 1619 "asmparse.y"
+{ yyval.int32 = VT_UI2; } break;
+case 626:
+#line 1620 "asmparse.y"
+{ yyval.int32 = VT_UI4; } break;
+case 627:
+#line 1621 "asmparse.y"
+{ yyval.int32 = VT_UI8; } break;
+case 628:
+#line 1622 "asmparse.y"
+{ yyval.int32 = VT_UI1; } break;
+case 629:
+#line 1623 "asmparse.y"
+{ yyval.int32 = VT_UI2; } break;
+case 630:
+#line 1624 "asmparse.y"
+{ yyval.int32 = VT_UI4; } break;
+case 631:
+#line 1625 "asmparse.y"
+{ yyval.int32 = VT_UI8; } break;
+case 632:
+#line 1626 "asmparse.y"
+{ yyval.int32 = VT_PTR; } break;
+case 633:
+#line 1627 "asmparse.y"
+{ yyval.int32 = yypvt[-2].int32 | VT_ARRAY; } break;
+case 634:
+#line 1628 "asmparse.y"
+{ yyval.int32 = yypvt[-1].int32 | VT_VECTOR; } break;
+case 635:
+#line 1629 "asmparse.y"
+{ yyval.int32 = yypvt[-1].int32 | VT_BYREF; } break;
+case 636:
+#line 1630 "asmparse.y"
+{ yyval.int32 = VT_DECIMAL; } break;
+case 637:
+#line 1631 "asmparse.y"
+{ yyval.int32 = VT_DATE; } break;
+case 638:
+#line 1632 "asmparse.y"
+{ yyval.int32 = VT_BSTR; } break;
+case 639:
+#line 1633 "asmparse.y"
+{ yyval.int32 = VT_LPSTR; } break;
+case 640:
+#line 1634 "asmparse.y"
+{ yyval.int32 = VT_LPWSTR; } break;
+case 641:
+#line 1635 "asmparse.y"
+{ yyval.int32 = VT_UNKNOWN; } break;
+case 642:
+#line 1636 "asmparse.y"
+{ yyval.int32 = VT_DISPATCH; } break;
+case 643:
+#line 1637 "asmparse.y"
+{ yyval.int32 = VT_SAFEARRAY; } break;
+case 644:
+#line 1638 "asmparse.y"
+{ yyval.int32 = VT_INT; } break;
+case 645:
+#line 1639 "asmparse.y"
+{ yyval.int32 = VT_UINT; } break;
+case 646:
+#line 1640 "asmparse.y"
+{ yyval.int32 = VT_UINT; } break;
+case 647:
+#line 1641 "asmparse.y"
+{ yyval.int32 = VT_ERROR; } break;
+case 648:
+#line 1642 "asmparse.y"
+{ yyval.int32 = VT_HRESULT; } break;
+case 649:
+#line 1643 "asmparse.y"
+{ yyval.int32 = VT_CARRAY; } break;
+case 650:
+#line 1644 "asmparse.y"
+{ yyval.int32 = VT_USERDEFINED; } break;
+case 651:
+#line 1645 "asmparse.y"
+{ yyval.int32 = VT_RECORD; } break;
+case 652:
+#line 1646 "asmparse.y"
+{ yyval.int32 = VT_FILETIME; } break;
+case 653:
+#line 1647 "asmparse.y"
+{ yyval.int32 = VT_BLOB; } break;
+case 654:
+#line 1648 "asmparse.y"
+{ yyval.int32 = VT_STREAM; } break;
+case 655:
+#line 1649 "asmparse.y"
+{ yyval.int32 = VT_STORAGE; } break;
+case 656:
+#line 1650 "asmparse.y"
+{ yyval.int32 = VT_STREAMED_OBJECT; } break;
+case 657:
+#line 1651 "asmparse.y"
+{ yyval.int32 = VT_STORED_OBJECT; } break;
+case 658:
+#line 1652 "asmparse.y"
+{ yyval.int32 = VT_BLOB_OBJECT; } break;
+case 659:
+#line 1653 "asmparse.y"
+{ yyval.int32 = VT_CF; } break;
+case 660:
+#line 1654 "asmparse.y"
+{ yyval.int32 = VT_CLSID; } break;
+case 661:
+#line 1658 "asmparse.y"
+{ if(yypvt[-0].token == PASM->m_tkSysString)
+                                                                {     yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_STRING); }
+                                                                else if(yypvt[-0].token == PASM->m_tkSysObject)
+                                                                {     yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_OBJECT); }
+                                                                else  
+                                                                 yyval.binstr = parser->MakeTypeClass(ELEMENT_TYPE_CLASS, yypvt[-0].token); } break;
+case 662:
+#line 1664 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_OBJECT); } break;
+case 663:
+#line 1665 "asmparse.y"
+{ yyval.binstr = parser->MakeTypeClass(ELEMENT_TYPE_VALUETYPE, yypvt[-0].token); } break;
+case 664:
+#line 1666 "asmparse.y"
+{ yyval.binstr = parser->MakeTypeClass(ELEMENT_TYPE_VALUETYPE, yypvt[-0].token); } break;
+case 665:
+#line 1667 "asmparse.y"
+{ yyval.binstr = yypvt[-2].binstr; yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break;
+case 666:
+#line 1668 "asmparse.y"
+{ yyval.binstr = parser->MakeTypeArray(ELEMENT_TYPE_ARRAY, yypvt[-3].binstr, yypvt[-1].binstr); } break;
+case 667:
+#line 1669 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt8(ELEMENT_TYPE_BYREF); } break;
+case 668:
+#line 1670 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt8(ELEMENT_TYPE_PTR); } break;
+case 669:
+#line 1671 "asmparse.y"
+{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt8(ELEMENT_TYPE_PINNED); } break;
+case 670:
+#line 1672 "asmparse.y"
+{ yyval.binstr = parser->MakeTypeClass(ELEMENT_TYPE_CMOD_REQD, yypvt[-1].token);
+                                                                yyval.binstr->append(yypvt[-4].binstr); } break;
+case 671:
+#line 1674 "asmparse.y"
+{ yyval.binstr = parser->MakeTypeClass(ELEMENT_TYPE_CMOD_OPT, yypvt[-1].token);
+                                                                yyval.binstr->append(yypvt[-4].binstr); } break;
+case 672:
+#line 1677 "asmparse.y"
+{ yyval.binstr = parser->MakeSig(yypvt[-5].int32, yypvt[-4].binstr, yypvt[-1].binstr);
+                                                                yyval.binstr->insertInt8(ELEMENT_TYPE_FNPTR); 
+                                                                PASM->delArgNameList(PASM->m_firstArgName);
+                                                                PASM->m_firstArgName = parser->m_ANSFirst.POP();
+                                                                PASM->m_lastArgName = parser->m_ANSLast.POP();
+                                                              } break;
+case 673:
+#line 1683 "asmparse.y"
+{ if(yypvt[-1].binstr == NULL) yyval.binstr = yypvt[-3].binstr;
+                                                                else {
+                                                                  yyval.binstr = new BinStr(); 
+                                                                  yyval.binstr->appendInt8(ELEMENT_TYPE_GENERICINST); 
+                                                                  yyval.binstr->append(yypvt[-3].binstr);
+                                                                  corEmitInt(yyval.binstr, corCountArgs(yypvt[-1].binstr));
+                                                                  yyval.binstr->append(yypvt[-1].binstr); delete yypvt[-3].binstr; delete yypvt[-1].binstr; }} break;
+case 674:
+#line 1690 "asmparse.y"
+{ //if(PASM->m_pCurMethod)  {
+                                                                //  if(($3 < 0)||((DWORD)$3 >= PASM->m_pCurMethod->m_NumTyPars))
+                                                                //    PASM->report->error("Invalid method type parameter '%d'\n",$3);
+                                                                  yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_MVAR); corEmitInt(yyval.binstr, yypvt[-0].int32); 
+                                                                //} else PASM->report->error("Method type parameter '%d' outside method scope\n",$3);
+                                                              } break;
+case 675:
+#line 1696 "asmparse.y"
+{ //if(PASM->m_pCurClass)  {
+                                                                //  if(($2 < 0)||((DWORD)$2 >= PASM->m_pCurClass->m_NumTyPars))
+                                                                //    PASM->report->error("Invalid type parameter '%d'\n",$2);
+                                                                  yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_VAR); corEmitInt(yyval.binstr, yypvt[-0].int32); 
+                                                                //} else PASM->report->error("Type parameter '%d' outside class scope\n",$2);
+                                                              } break;
+case 676:
+#line 1702 "asmparse.y"
+{ int eltype = ELEMENT_TYPE_MVAR;
+                                                                int n=-1;
+                                                                if(PASM->m_pCurMethod) n = PASM->m_pCurMethod->FindTyPar(yypvt[-0].string);
+                                                                else {
+                                                                  if(PASM->m_TyParList) n = PASM->m_TyParList->IndexOf(yypvt[-0].string);
+                                                                  if(n == -1)
+                                                                  { n = TyParFixupList.COUNT();
+                                                                    TyParFixupList.PUSH(yypvt[-0].string);
+                                                                    eltype = ELEMENT_TYPE_MVARFIXUP;
+                                                                  }
+                                                                }
+                                                                if(n == -1) { PASM->report->error("Invalid method type parameter '%s'\n",yypvt[-0].string);
+                                                                n = 0x1FFFFFFF; }
+                                                                yyval.binstr = new BinStr(); yyval.binstr->appendInt8(eltype); corEmitInt(yyval.binstr,n); 
+                                                              } break;
+case 677:
+#line 1717 "asmparse.y"
+{ int eltype = ELEMENT_TYPE_VAR;
+                                                                int n=-1;
+                                                                if(PASM->m_pCurClass && !newclass) n = PASM->m_pCurClass->FindTyPar(yypvt[-0].string);
+                                                                else {
+                                                                  if(PASM->m_TyParList) n = PASM->m_TyParList->IndexOf(yypvt[-0].string);
+                                                                  if(n == -1)
+                                                                  { n = TyParFixupList.COUNT();
+                                                                    TyParFixupList.PUSH(yypvt[-0].string);
+                                                                    eltype = ELEMENT_TYPE_VARFIXUP;
+                                                                  }
+                                                                }
+                                                                if(n == -1) { PASM->report->error("Invalid type parameter '%s'\n",yypvt[-0].string);
+                                                                n = 0x1FFFFFFF; }
+                                                                yyval.binstr = new BinStr(); yyval.binstr->appendInt8(eltype); corEmitInt(yyval.binstr,n); 
+                                                              } break;
+case 678:
+#line 1732 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_TYPEDBYREF); } break;
+case 679:
+#line 1733 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_VOID); } break;
+case 680:
+#line 1734 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_I); } break;
+case 681:
+#line 1735 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U); } break;
+case 682:
+#line 1736 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U); } break;
+case 683:
+#line 1737 "asmparse.y"
+{ yyval.binstr = yypvt[-0].binstr; } break;
+case 684:
+#line 1738 "asmparse.y"
+{ yyval.binstr = yypvt[-0].binstr; yyval.binstr->insertInt8(ELEMENT_TYPE_SENTINEL); } break;
+case 685:
+#line 1741 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_CHAR); } break;
+case 686:
+#line 1742 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_STRING); } break;
+case 687:
+#line 1743 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_BOOLEAN); } break;
+case 688:
+#line 1744 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_I1); } break;
+case 689:
+#line 1745 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_I2); } break;
+case 690:
+#line 1746 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_I4); } break;
+case 691:
+#line 1747 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_I8); } break;
+case 692:
+#line 1748 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_R4); } break;
+case 693:
+#line 1749 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_R8); } break;
+case 694:
+#line 1750 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U1); } break;
+case 695:
+#line 1751 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U2); } break;
+case 696:
+#line 1752 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U4); } break;
+case 697:
+#line 1753 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U8); } break;
+case 698:
+#line 1754 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U1); } break;
+case 699:
+#line 1755 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U2); } break;
+case 700:
+#line 1756 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U4); } break;
+case 701:
+#line 1757 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U8); } break;
+case 702:
+#line 1758 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->append(yypvt[-0].tdd->m_pbsTypeSpec); } break;
+case 703:
+#line 1761 "asmparse.y"
+{ yyval.binstr = yypvt[-0].binstr; } break;
+case 704:
+#line 1762 "asmparse.y"
+{ yyval.binstr = yypvt[-2].binstr; yypvt[-2].binstr->append(yypvt[-0].binstr); delete yypvt[-0].binstr; } break;
+case 705:
+#line 1765 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt32(0x7FFFFFFF); yyval.binstr->appendInt32(0x7FFFFFFF);  } break;
+case 706:
+#line 1766 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt32(0x7FFFFFFF); yyval.binstr->appendInt32(0x7FFFFFFF);  } break;
+case 707:
+#line 1767 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt32(0); yyval.binstr->appendInt32(yypvt[-0].int32); } break;
+case 708:
+#line 1768 "asmparse.y"
+{ FAIL_UNLESS(yypvt[-2].int32 <= yypvt[-0].int32, ("lower bound %d must be <= upper bound %d\n", yypvt[-2].int32, yypvt[-0].int32));
+                                                                if (yypvt[-2].int32 > yypvt[-0].int32) { YYERROR; };        
+                                                                yyval.binstr = new BinStr(); yyval.binstr->appendInt32(yypvt[-2].int32); yyval.binstr->appendInt32(yypvt[-0].int32-yypvt[-2].int32+1); } break;
+case 709:
+#line 1771 "asmparse.y"
+{ yyval.binstr = new BinStr(); yyval.binstr->appendInt32(yypvt[-1].int32); yyval.binstr->appendInt32(0x7FFFFFFF); } break;
+case 710:
+#line 1776 "asmparse.y"
+{ PASM->AddPermissionDecl(yypvt[-4].secAct, yypvt[-3].token, yypvt[-1].pair); } break;
+case 711:
+#line 1778 "asmparse.y"
+{ PASM->AddPermissionDecl(yypvt[-5].secAct, yypvt[-4].token, yypvt[-1].binstr); } break;
+case 712:
+#line 1779 "asmparse.y"
+{ PASM->AddPermissionDecl(yypvt[-1].secAct, yypvt[-0].token, (NVPair *)NULL); } break;
+case 713:
+#line 1780 "asmparse.y"
+{ PASM->AddPermissionSetDecl(yypvt[-2].secAct, yypvt[-1].binstr); } break;
+case 714:
+#line 1782 "asmparse.y"
+{ PASM->AddPermissionSetDecl(yypvt[-1].secAct,BinStrToUnicode(yypvt[-0].binstr,true));} break;
+case 715:
+#line 1784 "asmparse.y"
+{ BinStr* ret = new BinStr();
+                                                                ret->insertInt8('.');
+                                                                corEmitInt(ret, nSecAttrBlobs);
+                                                                ret->append(yypvt[-1].binstr);
+                                                                PASM->AddPermissionSetDecl(yypvt[-4].secAct,ret);
+                                                                nSecAttrBlobs = 0; } break;
+case 716:
+#line 1792 "asmparse.y"
+{ yyval.binstr = new BinStr(); nSecAttrBlobs = 0;} break;
+case 717:
+#line 1793 "asmparse.y"
+{ yyval.binstr = yypvt[-0].binstr; nSecAttrBlobs = 1; } break;
+case 718:
+#line 1794 "asmparse.y"
+{ yyval.binstr = yypvt[-2].binstr; yyval.binstr->append(yypvt[-0].binstr); nSecAttrBlobs++; } break;
+case 719:
+#line 1798 "asmparse.y"
+{ yyval.binstr = PASM->EncodeSecAttr(PASM->ReflectionNotation(yypvt[-4].token),yypvt[-1].binstr,nCustomBlobNVPairs); 
+                                                                nCustomBlobNVPairs = 0; } break;
+case 720:
+#line 1801 "asmparse.y"
+{ yyval.binstr = PASM->EncodeSecAttr(yypvt[-4].string,yypvt[-1].binstr,nCustomBlobNVPairs); 
+                                                                nCustomBlobNVPairs = 0; } break;
+case 721:
+#line 1805 "asmparse.y"
+{ yyval.secAct = yypvt[-2].secAct; bParsingByteArray = TRUE; } break;
+case 722:
+#line 1807 "asmparse.y"
+{ yyval.secAct = yypvt[-2].secAct; bParsingByteArray = TRUE; } break;
+case 723:
+#line 1810 "asmparse.y"
+{ yyval.pair = yypvt[-0].pair; } break;
+case 724:
+#line 1811 "asmparse.y"
+{ yyval.pair = yypvt[-2].pair->Concat(yypvt[-0].pair); } break;
+case 725:
+#line 1814 "asmparse.y"
+{ yypvt[-2].binstr->appendInt8(0); yyval.pair = new NVPair(yypvt[-2].binstr, yypvt[-0].binstr); } break;
+case 726:
+#line 1817 "asmparse.y"
+{ yyval.int32 = 1; } break;
+case 727:
+#line 1818 "asmparse.y"
+{ yyval.int32 = 0; } break;
+case 728:
+#line 1821 "asmparse.y"
+{ yyval.binstr = new BinStr();
+                                                                yyval.binstr->appendInt8(SERIALIZATION_TYPE_BOOLEAN);
+                                                                yyval.binstr->appendInt8(yypvt[-0].int32); } break;
+case 729:
+#line 1824 "asmparse.y"
+{ yyval.binstr = new BinStr();
+                                                                yyval.binstr->appendInt8(SERIALIZATION_TYPE_I4);
+                                                                yyval.binstr->appendInt32(yypvt[-0].int32); } break;
+case 730:
+#line 1827 "asmparse.y"
+{ yyval.binstr = new BinStr();
+                                                                yyval.binstr->appendInt8(SERIALIZATION_TYPE_I4);
+                                                                yyval.binstr->appendInt32(yypvt[-1].int32); } break;
+case 731:
+#line 1830 "asmparse.y"
+{ yyval.binstr = new BinStr();
+                                                                yyval.binstr->appendInt8(SERIALIZATION_TYPE_STRING);
+                                                                yyval.binstr->append(yypvt[-0].binstr); delete yypvt[-0].binstr;
+                                                                yyval.binstr->appendInt8(0); } break;
+case 732:
+#line 1834 "asmparse.y"
+{ yyval.binstr = new BinStr();
+                                                                yyval.binstr->appendInt8(SERIALIZATION_TYPE_ENUM);
+                                                                char* sz = PASM->ReflectionNotation(yypvt[-5].token);
+                                                                strcpy_s((char *)yyval.binstr->getBuff((unsigned)strlen(sz) + 1), strlen(sz) + 1,sz);
+                                                                yyval.binstr->appendInt8(1);
+                                                                yyval.binstr->appendInt32(yypvt[-1].int32); } break;
+case 733:
+#line 1840 "asmparse.y"
+{ yyval.binstr = new BinStr();
+                                                                yyval.binstr->appendInt8(SERIALIZATION_TYPE_ENUM);
+                                                                char* sz = PASM->ReflectionNotation(yypvt[-5].token);
+                                                                strcpy_s((char *)yyval.binstr->getBuff((unsigned)strlen(sz) + 1), strlen(sz) + 1,sz);
+                                                                yyval.binstr->appendInt8(2);
+                                                                yyval.binstr->appendInt32(yypvt[-1].int32); } break;
+case 734:
+#line 1846 "asmparse.y"
+{ yyval.binstr = new BinStr();
+                                                                yyval.binstr->appendInt8(SERIALIZATION_TYPE_ENUM);
+                                                                char* sz = PASM->ReflectionNotation(yypvt[-5].token);
+                                                                strcpy_s((char *)yyval.binstr->getBuff((unsigned)strlen(sz) + 1), strlen(sz) + 1,sz);
+                                                                yyval.binstr->appendInt8(4);
+                                                                yyval.binstr->appendInt32(yypvt[-1].int32); } break;
+case 735:
+#line 1852 "asmparse.y"
+{ yyval.binstr = new BinStr();
+                                                                yyval.binstr->appendInt8(SERIALIZATION_TYPE_ENUM);
+                                                                char* sz = PASM->ReflectionNotation(yypvt[-3].token);
+                                                                strcpy_s((char *)yyval.binstr->getBuff((unsigned)strlen(sz) + 1), strlen(sz) + 1,sz);
+                                                                yyval.binstr->appendInt8(4);
+                                                                yyval.binstr->appendInt32(yypvt[-1].int32); } break;
+case 736:
+#line 1860 "asmparse.y"
+{ yyval.secAct = dclRequest; } break;
+case 737:
+#line 1861 "asmparse.y"
+{ yyval.secAct = dclDemand; } break;
+case 738:
+#line 1862 "asmparse.y"
+{ yyval.secAct = dclAssert; } break;
+case 739:
+#line 1863 "asmparse.y"
+{ yyval.secAct = dclDeny; } break;
+case 740:
+#line 1864 "asmparse.y"
+{ yyval.secAct = dclPermitOnly; } break;
+case 741:
+#line 1865 "asmparse.y"
+{ yyval.secAct = dclLinktimeCheck; } break;
+case 742:
+#line 1866 "asmparse.y"
+{ yyval.secAct = dclInheritanceCheck; } break;
+case 743:
+#line 1867 "asmparse.y"
+{ yyval.secAct = dclRequestMinimum; } break;
+case 744:
+#line 1868 "asmparse.y"
+{ yyval.secAct = dclRequestOptional; } break;
+case 745:
+#line 1869 "asmparse.y"
+{ yyval.secAct = dclRequestRefuse; } break;
+case 746:
+#line 1870 "asmparse.y"
+{ yyval.secAct = dclPrejitGrant; } break;
+case 747:
+#line 1871 "asmparse.y"
+{ yyval.secAct = dclPrejitDenied; } break;
+case 748:
+#line 1872 "asmparse.y"
+{ yyval.secAct = dclNonCasDemand; } break;
+case 749:
+#line 1873 "asmparse.y"
+{ yyval.secAct = dclNonCasLinkDemand; } break;
+case 750:
+#line 1874 "asmparse.y"
+{ yyval.secAct = dclNonCasInheritance; } break;
+case 751:
+#line 1878 "asmparse.y"
+{ PASM->ResetLineNumbers(); nCurrPC = PASM->m_CurPC; PENV->bExternSource = TRUE; PENV->bExternSourceAutoincrement = FALSE; } break;
+case 752:
+#line 1879 "asmparse.y"
+{ PASM->ResetLineNumbers(); nCurrPC = PASM->m_CurPC; PENV->bExternSource = TRUE; PENV->bExternSourceAutoincrement = TRUE; } break;
+case 753:
+#line 1882 "asmparse.y"
+{ PENV->nExtLine = PENV->nExtLineEnd = yypvt[-1].int32;
+                                                                PENV->nExtCol = 0; PENV->nExtColEnd  = static_cast<unsigned>(-1);
+                                                                PASM->SetSourceFileName(yypvt[-0].string);} break;
+case 754:
+#line 1885 "asmparse.y"
+{ PENV->nExtLine = PENV->nExtLineEnd = yypvt[-0].int32;
+                                                                PENV->nExtCol = 0; PENV->nExtColEnd  = static_cast<unsigned>(-1); } break;
+case 755:
+#line 1887 "asmparse.y"
+{ PENV->nExtLine = PENV->nExtLineEnd = yypvt[-3].int32; 
+                                                                PENV->nExtCol=yypvt[-1].int32; PENV->nExtColEnd = static_cast<unsigned>(-1);
+                                                                PASM->SetSourceFileName(yypvt[-0].string);} break;
+case 756:
+#line 1890 "asmparse.y"
+{ PENV->nExtLine = PENV->nExtLineEnd = yypvt[-2].int32; 
+                                                                PENV->nExtCol=yypvt[-0].int32; PENV->nExtColEnd = static_cast<unsigned>(-1);} break;
+case 757:
+#line 1893 "asmparse.y"
+{ PENV->nExtLine = PENV->nExtLineEnd = yypvt[-5].int32; 
+                                                                PENV->nExtCol=yypvt[-3].int32; PENV->nExtColEnd = yypvt[-1].int32;
+                                                                PASM->SetSourceFileName(yypvt[-0].string);} break;
+case 758:
+#line 1897 "asmparse.y"
+{ PENV->nExtLine = PENV->nExtLineEnd = yypvt[-4].int32; 
+                                                                PENV->nExtCol=yypvt[-2].int32; PENV->nExtColEnd = yypvt[-0].int32; } break;
+case 759:
+#line 1900 "asmparse.y"
+{ PENV->nExtLine = yypvt[-5].int32; PENV->nExtLineEnd = yypvt[-3].int32; 
+                                                                PENV->nExtCol=yypvt[-1].int32; PENV->nExtColEnd = static_cast<unsigned>(-1);
+                                                                PASM->SetSourceFileName(yypvt[-0].string);} break;
+case 760:
+#line 1904 "asmparse.y"
+{ PENV->nExtLine = yypvt[-4].int32; PENV->nExtLineEnd = yypvt[-2].int32; 
+                                                                PENV->nExtCol=yypvt[-0].int32; PENV->nExtColEnd = static_cast<unsigned>(-1); } break;
+case 761:
+#line 1907 "asmparse.y"
+{ PENV->nExtLine = yypvt[-7].int32; PENV->nExtLineEnd = yypvt[-5].int32; 
+                                                                PENV->nExtCol=yypvt[-3].int32; PENV->nExtColEnd = yypvt[-1].int32;
+                                                                PASM->SetSourceFileName(yypvt[-0].string);} break;
+case 762:
+#line 1911 "asmparse.y"
+{ PENV->nExtLine = yypvt[-6].int32; PENV->nExtLineEnd = yypvt[-4].int32; 
+                                                                PENV->nExtCol=yypvt[-2].int32; PENV->nExtColEnd = yypvt[-0].int32; } break;
+case 763:
+#line 1913 "asmparse.y"
+{ PENV->nExtLine = PENV->nExtLineEnd = yypvt[-1].int32 - 1;
+                                                                PENV->nExtCol = 0; PENV->nExtColEnd = static_cast<unsigned>(-1);
+                                                                PASM->SetSourceFileName(yypvt[-0].binstr);} break;
+case 764:
+#line 1920 "asmparse.y"
+{ PASMM->AddFile(yypvt[-5].string, yypvt[-6].fileAttr|yypvt[-4].fileAttr|yypvt[-0].fileAttr, yypvt[-2].binstr); } break;
+case 765:
+#line 1921 "asmparse.y"
+{ PASMM->AddFile(yypvt[-1].string, yypvt[-2].fileAttr|yypvt[-0].fileAttr, NULL); } break;
+case 766:
+#line 1924 "asmparse.y"
+{ yyval.fileAttr = (CorFileFlags) 0; } break;
+case 767:
+#line 1925 "asmparse.y"
+{ yyval.fileAttr = (CorFileFlags) (yypvt[-1].fileAttr | ffContainsNoMetaData); } break;
+case 768:
+#line 1928 "asmparse.y"
+{ yyval.fileAttr = (CorFileFlags) 0; } break;
+case 769:
+#line 1929 "asmparse.y"
+{ yyval.fileAttr = (CorFileFlags) 0x80000000; } break;
+case 770:
+#line 1932 "asmparse.y"
+{ bParsingByteArray = TRUE; } break;
+case 771:
+#line 1935 "asmparse.y"
+{ PASMM->StartAssembly(yypvt[-0].string, NULL, (DWORD)yypvt[-1].asmAttr, FALSE); } break;
+case 772:
+#line 1938 "asmparse.y"
+{ yyval.asmAttr = (CorAssemblyFlags) 0; } break;
+case 773:
+#line 1939 "asmparse.y"
+{ yyval.asmAttr = (CorAssemblyFlags) (yypvt[-1].asmAttr | afRetargetable); } break;
+case 774:
+#line 1940 "asmparse.y"
+{ yyval.asmAttr = (CorAssemblyFlags) (yypvt[-1].asmAttr | afContentType_WindowsRuntime); } break;
+case 775:
+#line 1941 "asmparse.y"
+{ yyval.asmAttr = (CorAssemblyFlags) (yypvt[-1].asmAttr | afPA_NoPlatform); } break;
+case 776:
+#line 1942 "asmparse.y"
+{ yyval.asmAttr = yypvt[-2].asmAttr; } break;
+case 777:
+#line 1943 "asmparse.y"
+{ SET_PA(yyval.asmAttr,yypvt[-1].asmAttr,afPA_MSIL); } break;
+case 778:
+#line 1944 "asmparse.y"
+{ SET_PA(yyval.asmAttr,yypvt[-1].asmAttr,afPA_x86); } break;
+case 779:
+#line 1945 "asmparse.y"
+{ SET_PA(yyval.asmAttr,yypvt[-1].asmAttr,afPA_IA64); } break;
+case 780:
+#line 1946 "asmparse.y"
+{ SET_PA(yyval.asmAttr,yypvt[-1].asmAttr,afPA_AMD64); } break;
+case 781:
+#line 1947 "asmparse.y"
+{ SET_PA(yyval.asmAttr,yypvt[-1].asmAttr,afPA_ARM); } break;
+case 784:
+#line 1954 "asmparse.y"
+{ PASMM->SetAssemblyHashAlg(yypvt[-0].int32); } break;
+case 787:
+#line 1959 "asmparse.y"
+{ yyval.int32 = yypvt[-0].int32; } break;
+case 788:
+#line 1960 "asmparse.y"
+{ yyval.int32 = 0xFFFF; } break;
+case 789:
+#line 1963 "asmparse.y"
+{ PASMM->SetAssemblyPublicKey(yypvt[-1].binstr); } break;
+case 790:
+#line 1965 "asmparse.y"
+{ PASMM->SetAssemblyVer((USHORT)yypvt[-6].int32, (USHORT)yypvt[-4].int32, (USHORT)yypvt[-2].int32, (USHORT)yypvt[-0].int32); } break;
+case 791:
+#line 1966 "asmparse.y"
+{ yypvt[-0].binstr->appendInt8(0); PASMM->SetAssemblyLocale(yypvt[-0].binstr,TRUE); } break;
+case 792:
+#line 1967 "asmparse.y"
+{ PASMM->SetAssemblyLocale(yypvt[-1].binstr,FALSE); } break;
+case 795:
+#line 1972 "asmparse.y"
+{ bParsingByteArray = TRUE; } break;
+case 796:
+#line 1975 "asmparse.y"
+{ bParsingByteArray = TRUE; } break;
+case 797:
+#line 1978 "asmparse.y"
+{ bParsingByteArray = TRUE; } break;
+case 798:
+#line 1982 "asmparse.y"
+{ PASMM->StartAssembly(yypvt[-0].string, NULL, yypvt[-1].asmAttr, TRUE); } break;
+case 799:
+#line 1984 "asmparse.y"
+{ PASMM->StartAssembly(yypvt[-2].string, yypvt[-0].string, yypvt[-3].asmAttr, TRUE); } break;
+case 802:
+#line 1991 "asmparse.y"
+{ PASMM->SetAssemblyHashBlob(yypvt[-1].binstr); } break;
+case 804:
+#line 1993 "asmparse.y"
+{ PASMM->SetAssemblyPublicKeyToken(yypvt[-1].binstr); } break;
+case 805:
+#line 1994 "asmparse.y"
+{ PASMM->SetAssemblyAutodetect(); } break;
+case 806:
+#line 1997 "asmparse.y"
+{ PASMM->StartComType(yypvt[-0].string, yypvt[-1].exptAttr);} break;
+case 807:
+#line 2000 "asmparse.y"
+{ PASMM->StartComType(yypvt[-0].string, yypvt[-1].exptAttr); } break;
+case 808:
+#line 2003 "asmparse.y"
+{ yyval.exptAttr = (CorTypeAttr) 0; } break;
+case 809:
+#line 2004 "asmparse.y"
+{ yyval.exptAttr = (CorTypeAttr) (yypvt[-1].exptAttr | tdNotPublic); } break;
+case 810:
+#line 2005 "asmparse.y"
+{ yyval.exptAttr = (CorTypeAttr) (yypvt[-1].exptAttr | tdPublic); } break;
+case 811:
+#line 2006 "asmparse.y"
+{ yyval.exptAttr = (CorTypeAttr) (yypvt[-1].exptAttr | tdForwarder); } break;
+case 812:
+#line 2007 "asmparse.y"
+{ yyval.exptAttr = (CorTypeAttr) (yypvt[-2].exptAttr | tdNestedPublic); } break;
+case 813:
+#line 2008 "asmparse.y"
+{ yyval.exptAttr = (CorTypeAttr) (yypvt[-2].exptAttr | tdNestedPrivate); } break;
+case 814:
+#line 2009 "asmparse.y"
+{ yyval.exptAttr = (CorTypeAttr) (yypvt[-2].exptAttr | tdNestedFamily); } break;
+case 815:
+#line 2010 "asmparse.y"
+{ yyval.exptAttr = (CorTypeAttr) (yypvt[-2].exptAttr | tdNestedAssembly); } break;
+case 816:
+#line 2011 "asmparse.y"
+{ yyval.exptAttr = (CorTypeAttr) (yypvt[-2].exptAttr | tdNestedFamANDAssem); } break;
+case 817:
+#line 2012 "asmparse.y"
+{ yyval.exptAttr = (CorTypeAttr) (yypvt[-2].exptAttr | tdNestedFamORAssem); } break;
+case 820:
+#line 2019 "asmparse.y"
+{ PASMM->SetComTypeFile(yypvt[-0].string); } break;
+case 821:
+#line 2020 "asmparse.y"
+{ PASMM->SetComTypeComType(yypvt[-0].string); } break;
+case 822:
+#line 2021 "asmparse.y"
+{ PASMM->SetComTypeAsmRef(yypvt[-0].string); } break;
+case 823:
+#line 2022 "asmparse.y"
+{ if(!PASMM->SetComTypeImplementationTok(yypvt[-1].int32))
+                                                                  PASM->report->error("Invalid implementation of exported type\n"); } break;
+case 824:
+#line 2024 "asmparse.y"
+{ if(!PASMM->SetComTypeClassTok(yypvt[-0].int32))
+                                                                  PASM->report->error("Invalid TypeDefID of exported type\n"); } break;
+case 827:
+#line 2030 "asmparse.y"
+{ PASMM->StartManifestRes(yypvt[-0].string, yypvt[-0].string, yypvt[-1].manresAttr); } break;
+case 828:
+#line 2032 "asmparse.y"
+{ PASMM->StartManifestRes(yypvt[-2].string, yypvt[-0].string, yypvt[-3].manresAttr); } break;
+case 829:
+#line 2035 "asmparse.y"
+{ yyval.manresAttr = (CorManifestResourceFlags) 0; } break;
+case 830:
+#line 2036 "asmparse.y"
+{ yyval.manresAttr = (CorManifestResourceFlags) (yypvt[-1].manresAttr | mrPublic); } break;
+case 831:
+#line 2037 "asmparse.y"
+{ yyval.manresAttr = (CorManifestResourceFlags) (yypvt[-1].manresAttr | mrPrivate); } break;
+case 834:
+#line 2044 "asmparse.y"
+{ PASMM->SetManifestResFile(yypvt[-2].string, (ULONG)yypvt[-0].int32); } break;
+case 835:
+#line 2045 "asmparse.y"
+{ PASMM->SetManifestResAsmRef(yypvt[-0].string); } break;/* End of actions */
+#line 329 "D:\\ProjectK3\\src\\tools\\devdiv\\x86\\yypars.c"
+                       }
+               }
+               goto yystack;  /* stack new state and value */
+       }
+#pragma warning(default:102)
+
+
+#ifdef YYDUMP
+YYLOCAL void YYNEAR YYPASCAL yydumpinfo(void)
+{
+       short stackindex;
+       short valindex;
+
+       //dump yys
+       printf("short yys[%d] {\n", YYMAXDEPTH);
+       for (stackindex = 0; stackindex < YYMAXDEPTH; stackindex++){
+               if (stackindex)
+                       printf(", %s", stackindex % 10 ? "\0" : "\n");
+               printf("%6d", yys[stackindex]);
+               }
+       printf("\n};\n");
+
+       //dump yyv
+       printf("YYSTYPE yyv[%d] {\n", YYMAXDEPTH);
+       for (valindex = 0; valindex < YYMAXDEPTH; valindex++){
+               if (valindex)
+                       printf(", %s", valindex % 5 ? "\0" : "\n");
+               printf("%#*x", 3+sizeof(YYSTYPE), yyv[valindex]);
+               }
+       printf("\n};\n");
+       }
+#endif
index c2b81ff..1b10562 100644 (file)
 #include "assembler.h"
 
 #include "ceefilegenwriter.h"
+#ifndef FEATURE_CORECLR
 #include "strongname.h"
 #include "LegacyActivationShim.h"
+#endif
 
 #ifndef _MSC_VER
 //cloned definition from ntimage.h that is removed for non MSVC builds
@@ -33,12 +35,17 @@ HRESULT Assembler::InitMetaData()
 
     if(bClock) bClock->cMDInitBegin = GetTickCount();
 
+#ifdef FEATURE_CORECLR
+    hr = MetaDataGetDispenser(CLSID_CorMetaDataDispenser,
+        IID_IMetaDataDispenserEx, (void **)&m_pDisp);
+#else
     hr = LegacyActivationShim::ClrCoCreateInstance(
         CLSID_CorMetaDataDispenser, 
         NULL, 
         CLSCTX_INPROC_SERVER, 
         IID_IMetaDataDispenserEx, 
         (void **)&m_pDisp);
+#endif
     if (FAILED(hr))
         goto exit;
 
@@ -250,7 +257,7 @@ HRESULT Assembler::CreateDebugDirectory()
         pParam->debugDirData = new BYTE[pParam->debugDirDataSize];
     } PAL_EXCEPT(EXCEPTION_EXECUTE_HANDLER) {
         hr = E_FAIL;
-    } WIN_PAL_ENDTRY
+    } PAL_ENDTRY
 
     if(FAILED(hr)) return hr;
     // Actually get the data now.
@@ -680,6 +687,7 @@ BYTE HexToByte (CHAR wc)
     return (BYTE) (wc - L'a' + 10);
 }
 
+#ifndef FEATURE_CORECLR
 bool GetBytesFromHex (LPCSTR szPublicKeyHexString, ULONG cchPublicKeyHexString, BYTE** buffer, ULONG *cbBufferSize)
 {
     ULONG cchHex = cchPublicKeyHexString;
@@ -869,6 +877,7 @@ HRESULT Assembler::StrongNameSign()
 
     return S_OK;
 }
+#endif // !FEATURE_CORECLR
 
 BOOL Assembler::EmitFieldsMethods(Class* pClass)
 {
@@ -1222,11 +1231,14 @@ HRESULT Assembler::CreatePEFile(__in __nullterminated WCHAR *pwzOutputFilename)
 
     if(bClock) bClock->cMDEmit1 = GetTickCount();
 
+#ifndef FEATURE_CORECLR
     // Allocate space for a strong name signature if we're delay or full
     // signing the assembly.
     if (m_pManifest->m_sStrongName.m_pbPublicKey)
         if (FAILED(hr = AllocateStrongNameSignature()))
             goto exit;
+#endif
+
     if(bClock) bClock->cMDEmit2 = GetTickCount();
 
     if(m_VTFList.COUNT()==0)
index 4cdb1ec..dfbb7c1 100644 (file)
@@ -59,6 +59,11 @@ class ICeeFileGen;
 
 typedef void *HCEEFILE;
 
+#ifdef FEATURE_CORECLR
+EXTERN_C HRESULT __stdcall CreateICeeFileGen(ICeeFileGen** pCeeFileGen);
+EXTERN_C HRESULT __stdcall DestroyICeeFileGen(ICeeFileGen ** ppCeeFileGen);
+#endif
+
 typedef HRESULT (__stdcall * PFN_CreateICeeFileGen)(ICeeFileGen ** ceeFileGen);  // call this to instantiate an ICeeFileGen interface
 typedef HRESULT (__stdcall * PFN_DestroyICeeFileGen)(ICeeFileGen ** ceeFileGen); // call this to delete an ICeeFileGen