widl: Updated to Wine version 3bb824f98891e8.
diff --git a/mingw-w64-tools/widl/VERSION b/mingw-w64-tools/widl/VERSION
index dd1b8cd..43ffe70 100644
--- a/mingw-w64-tools/widl/VERSION
+++ b/mingw-w64-tools/widl/VERSION
@@ -1 +1 @@
-WIDL version 5.0-rc1
+WIDL version 5.8
diff --git a/mingw-w64-tools/widl/configure b/mingw-w64-tools/widl/configure
index 92c8f45..594a877 100755
--- a/mingw-w64-tools/widl/configure
+++ b/mingw-w64-tools/widl/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for widl 5.0-rc1.
+# Generated by GNU Autoconf 2.69 for widl 5.8.
 #
 # Report bugs to <mingw-w64-public@lists.sourceforge.net>.
 #
@@ -580,8 +580,8 @@
 # Identity of this package.
 PACKAGE_NAME='widl'
 PACKAGE_TARNAME='widl'
-PACKAGE_VERSION='5.0-rc1'
-PACKAGE_STRING='widl 5.0-rc1'
+PACKAGE_VERSION='5.8'
+PACKAGE_STRING='widl 5.8'
 PACKAGE_BUGREPORT='mingw-w64-public@lists.sourceforge.net'
 PACKAGE_URL=''
 
@@ -1296,7 +1296,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures widl 5.0-rc1 to adapt to many kinds of systems.
+\`configure' configures widl 5.8 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1368,7 +1368,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of widl 5.0-rc1:";;
+     short | recursive ) echo "Configuration of widl 5.8:";;
    esac
   cat <<\_ACEOF
 
@@ -1470,7 +1470,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-widl configure 5.0-rc1
+widl configure 5.8
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2023,7 +2023,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by widl $as_me 5.0-rc1, which was
+It was created by widl $as_me 5.8, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3002,7 +3002,7 @@
 
 # Define the identity of the package.
  PACKAGE='widl'
- VERSION='5.0-rc1'
+ VERSION='5.8'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -5466,7 +5466,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by widl $as_me 5.0-rc1, which was
+This file was extended by widl $as_me 5.8, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -5532,7 +5532,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-widl config.status 5.0-rc1
+widl config.status 5.8
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff --git a/mingw-w64-tools/widl/include/basetsd.h b/mingw-w64-tools/widl/include/basetsd.h
index 96ea3f0..c9f5c90 100644
--- a/mingw-w64-tools/widl/include/basetsd.h
+++ b/mingw-w64-tools/widl/include/basetsd.h
@@ -271,44 +271,24 @@
 /* These are hardcoded to avoid dependencies on config.h in Winelib apps. */
 #if defined(__i386__)
 # undef  WORDS_BIGENDIAN
-# undef  BITFIELDS_BIGENDIAN
-# define ALLOW_UNALIGNED_ACCESS
 #elif defined(__x86_64__)
 # undef  WORDS_BIGENDIAN
-# undef  BITFIELDS_BIGENDIAN
-# define ALLOW_UNALIGNED_ACCESS
 #elif defined(__powerpc__)
 # define WORDS_BIGENDIAN
-# define BITFIELDS_BIGENDIAN
-# undef  ALLOW_UNALIGNED_ACCESS
 #elif defined(__ALPHA__)
 # undef  WORDS_BIGENDIAN
-# undef  BITFIELDS_BIGENDIAN
-# undef  ALLOW_UNALIGNED_ACCESS
 #elif defined(__ARMEB__)
 # define WORDS_BIGENDIAN
-# define BITFIELDS_BIGENDIAN
-# undef  ALLOW_UNALIGNED_ACCESS
 #elif defined(__ARMEL__) || defined(__arm__)
 # undef  WORDS_BIGENDIAN
-# undef  BITFIELDS_BIGENDIAN
-# undef  ALLOW_UNALIGNED_ACCESS
 #elif defined(__AARCH64EB__)
 # define WORDS_BIGENDIAN
-# define BITFIELDS_BIGENDIAN
-# undef  ALLOW_UNALIGNED_ACCESS
 #elif defined(__AARCH64EL__) || defined(__aarch64__)
 # undef  WORDS_BIGENDIAN
-# undef  BITFIELDS_BIGENDIAN
-# undef  ALLOW_UNALIGNED_ACCESS
 #elif defined(__MIPSEB__)
 # define WORDS_BIGENDIAN
-# define BITFIELDS_BIGENDIAN
-# undef  ALLOW_UNALIGNED_ACCESS
 #elif defined(__MIPSEL__)
 # undef  WORDS_BIGENDIAN
-# undef  BITFIELDS_BIGENDIAN
-# undef  ALLOW_UNALIGNED_ACCESS
 #elif !defined(RC_INVOKED) && !defined(__WIDL__) && !defined(__midl)
 # error Unknown CPU architecture!
 #endif
diff --git a/mingw-w64-tools/widl/include/guiddef.h b/mingw-w64-tools/widl/include/guiddef.h
index ba39dd8..546c450 100644
--- a/mingw-w64-tools/widl/include/guiddef.h
+++ b/mingw-w64-tools/widl/include/guiddef.h
@@ -30,7 +30,7 @@
 #else
 typedef struct _GUID
 {
-#ifdef _MSC_VER
+#ifdef WINE_USE_LONG
     unsigned long  Data1;
 #else
     unsigned int   Data1;
@@ -42,30 +42,45 @@
 #endif
 
 /* Macros for __uuidof emulation */
-#if defined(__cplusplus) && !defined(_MSC_VER)
+#ifdef __cplusplus
+# if defined(__MINGW32__)
+#  define __WINE_UUID_ATTR __attribute__((selectany))
+# elif defined(__GNUC__)
+#  define __WINE_UUID_ATTR __attribute__((visibility("hidden"),weak))
+# endif
+#endif
+
+#ifdef __WINE_UUID_ATTR
 
 extern "C++" {
-    template<typename T> const GUID &__wine_uuidof();
+    template<typename T> struct __wine_uuidof;
+
+    template<typename T> struct __wine_uuidof_type {
+        typedef __wine_uuidof<T> inst;
+    };
+    template<typename T> struct __wine_uuidof_type<T *> {
+        typedef __wine_uuidof<T> inst;
+    };
+    template<typename T> struct __wine_uuidof_type<T * const> {
+        typedef __wine_uuidof<T> inst;
+    };
 }
 
 #define __CRT_UUID_DECL(type,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)           \
     extern "C++" {                                                      \
-    template<> inline const GUID &__wine_uuidof<type>() {               \
-        static const IID __uuid_inst = {l,w1,w2, {b1,b2,b3,b4,b5,b6,b7,b8}}; \
-        return __uuid_inst;                                             \
-    }                                                                   \
-    template<> inline const GUID &__wine_uuidof<type*>() {              \
-        return __wine_uuidof<type>();                                   \
-    }                                                                   \
+        template<> struct __wine_uuidof<type> {                         \
+            static const GUID uuid;                                     \
+        };                                                              \
+        __WINE_UUID_ATTR const GUID __wine_uuidof<type>::uuid = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}; \
     }
 
-#define __uuidof(type) __wine_uuidof<typeof(type)>()
+#define __uuidof(type) __wine_uuidof_type<typeof(type)>::inst::uuid
 
-#else
+#else /* __WINE_UUID_ATTR */
 
 #define __CRT_UUID_DECL(type,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
 
-#endif
+#endif /* __WINE_UUID_ATTR */
 
 #endif
 
@@ -130,14 +145,14 @@
 #define REFCLSID            const CLSID &
 #define REFIID              const IID &
 #define REFFMTID            const FMTID &
-#else /* !defined(__cplusplus) */
+#else
 #define REFGUID             const GUID* __MIDL_CONST
 #define REFCLSID            const CLSID* __MIDL_CONST
 #define REFIID              const IID* __MIDL_CONST
 #define REFFMTID            const FMTID* __MIDL_CONST
-#endif /* !defined(__cplusplus) */
+#endif
 
-#if defined(__cplusplus) && !defined(CINTERFACE)
+#ifdef __cplusplus
 #define IsEqualGUID(rguid1, rguid2) (!memcmp(&(rguid1), &(rguid2), sizeof(GUID)))
 inline int InlineIsEqualGUID(REFGUID rguid1, REFGUID rguid2)
 {
@@ -146,16 +161,16 @@
            ((ULONG *)&rguid1)[2] == ((ULONG *)&rguid2)[2] &&
            ((ULONG *)&rguid1)[3] == ((ULONG *)&rguid2)[3]);
 }
-#else /* defined(__cplusplus) && !defined(CINTERFACE) */
+#else
 #define IsEqualGUID(rguid1, rguid2) (!memcmp(rguid1, rguid2, sizeof(GUID)))
 #define InlineIsEqualGUID(rguid1, rguid2)  \
         (((ULONG *)rguid1)[0] == ((ULONG *)rguid2)[0] && \
          ((ULONG *)rguid1)[1] == ((ULONG *)rguid2)[1] && \
          ((ULONG *)rguid1)[2] == ((ULONG *)rguid2)[2] && \
          ((ULONG *)rguid1)[3] == ((ULONG *)rguid2)[3])
-#endif /* defined(__cplusplus) && !defined(CINTERFACE) */
+#endif
 
-#if defined(__cplusplus) && !defined(CINTERFACE)
+#ifdef __cplusplus
 #include <string.h>
 inline bool operator==(const GUID& guidOne, const GUID& guidOther)
 {
@@ -167,6 +182,4 @@
 }
 #endif
 
-extern const IID GUID_NULL;
-
 #endif /* _GUIDDEF_H_ */
diff --git a/mingw-w64-tools/widl/include/threadpoolapiset.h b/mingw-w64-tools/widl/include/threadpoolapiset.h
index 010ee3a..e218834 100644
--- a/mingw-w64-tools/widl/include/threadpoolapiset.h
+++ b/mingw-w64-tools/widl/include/threadpoolapiset.h
@@ -43,9 +43,11 @@
 WINBASEAPI void        WINAPI FreeLibraryWhenCallbackReturns(PTP_CALLBACK_INSTANCE,HMODULE);
 WINBASEAPI BOOL        WINAPI IsThreadpoolTimerSet(PTP_TIMER);
 WINBASEAPI void        WINAPI LeaveCriticalSectionWhenCallbackReturns(PTP_CALLBACK_INSTANCE,RTL_CRITICAL_SECTION*);
+WINBASEAPI BOOL        WINAPI QueryThreadpoolStackInformation(PTP_POOL,PTP_POOL_STACK_INFORMATION);
 WINBASEAPI void        WINAPI ReleaseMutexWhenCallbackReturns(PTP_CALLBACK_INSTANCE,HANDLE);
 WINBASEAPI void        WINAPI ReleaseSemaphoreWhenCallbackReturns(PTP_CALLBACK_INSTANCE,HANDLE,DWORD);
 WINBASEAPI void        WINAPI SetEventWhenCallbackReturns(PTP_CALLBACK_INSTANCE,HANDLE);
+WINBASEAPI BOOL        WINAPI SetThreadpoolStackInformation(PTP_POOL,PTP_POOL_STACK_INFORMATION);
 WINBASEAPI void        WINAPI SetThreadpoolThreadMaximum(PTP_POOL,DWORD);
 WINBASEAPI BOOL        WINAPI SetThreadpoolThreadMinimum(PTP_POOL,DWORD);
 WINBASEAPI void        WINAPI SetThreadpoolTimer(PTP_TIMER,FILETIME*,DWORD,DWORD);
diff --git a/mingw-w64-tools/widl/include/winbase.h b/mingw-w64-tools/widl/include/winbase.h
index 655eb48..78ed660 100644
--- a/mingw-w64-tools/widl/include/winbase.h
+++ b/mingw-w64-tools/widl/include/winbase.h
@@ -1409,7 +1409,7 @@
 	DWORD dwProviderSubType;
 	DWORD dwProviderOffset;
 	DWORD dwProviderSize;
-	DWORD wcProviderData[1];
+	WCHAR wcProviderData[1];
 } COMMCONFIG, *LPCOMMCONFIG;
 
 typedef struct tagCOMMPROP {
@@ -2418,6 +2418,7 @@
 WINBASEAPI HMODULE     WINAPI LoadLibraryExW(LPCWSTR,HANDLE,DWORD);
 #define                       LoadLibraryEx WINELIB_NAME_AW(LoadLibraryEx)
 WINBASEAPI DWORD       WINAPI LoadModule(LPCSTR,LPVOID);
+WINBASEAPI HMODULE     WINAPI LoadPackagedLibrary(LPCWSTR,DWORD);
 WINBASEAPI HGLOBAL     WINAPI LoadResource(HMODULE,HRSRC);
 WINBASEAPI HLOCAL      WINAPI LocalAlloc(UINT,SIZE_T) __WINE_ALLOC_SIZE(2);
 WINBASEAPI SIZE_T      WINAPI LocalCompact(UINT);
@@ -2618,6 +2619,9 @@
 WINBASEAPI BOOL        WINAPI SetDllDirectoryW(LPCWSTR);
 #define                       SetDllDirectory WINELIB_NAME_AW(SetDllDirectory)
 WINBASEAPI BOOL        WINAPI SetEndOfFile(HANDLE);
+WINBASEAPI BOOL        WINAPI SetEnvironmentStringsA(char *);
+WINBASEAPI BOOL        WINAPI SetEnvironmentStringsW(WCHAR *);
+#define                       SetEnvironmentStrings WINELIB_NAME_AW(SetEnvironmentStrings)
 WINBASEAPI BOOL        WINAPI SetEnvironmentVariableA(LPCSTR,LPCSTR);
 WINBASEAPI BOOL        WINAPI SetEnvironmentVariableW(LPCWSTR,LPCWSTR);
 #define                       SetEnvironmentVariable WINELIB_NAME_AW(SetEnvironmentVariable)
@@ -2903,123 +2907,135 @@
 
 /* Interlocked functions */
 
-#ifdef __i386__
-# if defined(__GNUC__) && !defined(_NTSYSTEM_) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))
-
-static FORCEINLINE LONG WINAPI InterlockedCompareExchange( LONG volatile *dest, LONG xchg, LONG compare )
-{
-    LONG ret;
-    __asm__ __volatile__( "lock; cmpxchgl %2,(%1)"
-                          : "=a" (ret) : "r" (dest), "r" (xchg), "0" (compare) : "memory" );
-    return ret;
-}
-
-static FORCEINLINE LONG WINAPI InterlockedExchange( LONG volatile *dest, LONG val )
-{
-    LONG ret;
-    __asm__ __volatile__( "lock; xchgl %0,(%1)"
-                          : "=r" (ret) :"r" (dest), "0" (val) : "memory" );
-    return ret;
-}
-
-static FORCEINLINE LONG WINAPI InterlockedExchangeAdd( LONG volatile *dest, LONG incr )
-{
-    LONG ret;
-    __asm__ __volatile__( "lock; xaddl %0,(%1)"
-                          : "=r" (ret) : "r" (dest), "0" (incr) : "memory" );
-    return ret;
-}
-
-static FORCEINLINE LONG WINAPI InterlockedIncrement( LONG volatile *dest )
-{
-    return InterlockedExchangeAdd( dest, 1 ) + 1;
-}
-
-static FORCEINLINE LONG WINAPI InterlockedDecrement( LONG volatile *dest )
-{
-    return InterlockedExchangeAdd( dest, -1 ) - 1;
-}
-
-# else  /* __GNUC__ */
-
-WINBASEAPI LONG WINAPI InterlockedCompareExchange(LONG volatile*,LONG,LONG);
-WINBASEAPI LONG WINAPI InterlockedDecrement(LONG volatile*);
-WINBASEAPI LONG WINAPI InterlockedExchange(LONG volatile*,LONG);
-WINBASEAPI LONG WINAPI InterlockedExchangeAdd(LONG volatile*,LONG);
-WINBASEAPI LONG WINAPI InterlockedIncrement(LONG volatile*);
-
-# endif  /* __GNUC__ */
-
-static FORCEINLINE PVOID WINAPI InterlockedCompareExchangePointer( PVOID volatile *dest, PVOID xchg, PVOID compare )
-{
-    return (PVOID)InterlockedCompareExchange( (LONG volatile*)dest, (LONG)xchg, (LONG)compare );
-}
-
-static FORCEINLINE PVOID WINAPI InterlockedExchangePointer( PVOID volatile *dest, PVOID val )
-{
-    return (PVOID)InterlockedExchange( (LONG volatile*)dest, (LONG)val );
-}
-
-WINBASEAPI LONGLONG WINAPI InterlockedCompareExchange64(LONGLONG volatile*,LONGLONG,LONGLONG);
-
-#elif defined(_MSC_VER)
+#ifdef _MSC_VER
 
 #pragma intrinsic(_InterlockedCompareExchange)
-#pragma intrinsic(_InterlockedCompareExchangePointer)
 #pragma intrinsic(_InterlockedCompareExchange64)
 #pragma intrinsic(_InterlockedExchange)
-#pragma intrinsic(_InterlockedExchangePointer)
 #pragma intrinsic(_InterlockedExchangeAdd)
 #pragma intrinsic(_InterlockedIncrement)
 #pragma intrinsic(_InterlockedDecrement)
 
+long      _InterlockedCompareExchange(long volatile*,long,long);
+long long _InterlockedCompareExchange64(long long volatile*,long long,long long);
+long      _InterlockedDecrement(long volatile*);
+long      _InterlockedExchange(long volatile*,long);
+long      _InterlockedExchangeAdd(long volatile*,long);
+long      _InterlockedIncrement(long volatile*);
+
 static FORCEINLINE LONG WINAPI InterlockedCompareExchange( LONG volatile *dest, LONG xchg, LONG compare )
 {
-    return _InterlockedCompareExchange( dest, xchg, compare );
-}
-
-static FORCEINLINE PVOID WINAPI InterlockedCompareExchangePointer( PVOID volatile *dest, PVOID xchg, PVOID compare )
-{
-    return _InterlockedCompareExchangePointer( dest, xchg, compare );
+    return _InterlockedCompareExchange( (long volatile *)dest, xchg, compare );
 }
 
 static FORCEINLINE LONGLONG WINAPI InterlockedCompareExchange64( LONGLONG volatile *dest, LONGLONG xchg, LONGLONG compare )
 {
-    return _InterlockedCompareExchange64( dest, xchg, compare );
+    return _InterlockedCompareExchange64( (long long volatile *)dest, compare, xchg );
 }
 
 static FORCEINLINE LONG WINAPI InterlockedExchange( LONG volatile *dest, LONG val )
 {
-    return _InterlockedExchange( dest, val );
-}
-
-static FORCEINLINE PVOID WINAPI InterlockedExchangePointer( PVOID volatile *dest, PVOID val )
-{
-    return _InterlockedExchangePointer( dest, val );
+    return _InterlockedExchange( (long volatile *)dest, val );
 }
 
 static FORCEINLINE LONG WINAPI InterlockedExchangeAdd( LONG volatile *dest, LONG incr )
 {
-    return _InterlockedExchangeAdd( dest, incr );
+    return _InterlockedExchangeAdd( (long volatile *)dest, incr );
 }
 
 static FORCEINLINE LONG WINAPI InterlockedIncrement( LONG volatile *dest )
 {
-    return _InterlockedIncrement( dest );
+    return _InterlockedIncrement( (long volatile *)dest );
 }
 
 static FORCEINLINE LONG WINAPI InterlockedDecrement( LONG volatile *dest )
 {
-    return _InterlockedDecrement( dest );
+    return _InterlockedDecrement( (long volatile *)dest );
 }
 
+#ifndef __i386__
+
+#pragma intrinsic(_InterlockedCompareExchangePointer)
+#pragma intrinsic(_InterlockedExchangePointer)
+
+#define InterlockedCompareExchangePointer    _InterlockedCompareExchangePointer
+#define InterlockedExchangePointer           _InterlockedExchangePointer
+
+void *InterlockedCompareExchangePointer(void *volatile*,void*,void*);
+void *InterlockedExchangePointer(void *volatile*,void*);
+
+#else
+
+static FORCEINLINE void *WINAPI InterlockedCompareExchangePointer( void *volatile *dest, void *xchg, void *compare )
+{
+    return (void *)_InterlockedCompareExchange( (long volatile*)dest, (long)xchg, (long)compare );
+}
+
+static FORCEINLINE void *WINAPI InterlockedExchangePointer( void *volatile *dest, void *val )
+{
+    return (void *)_InterlockedExchange( (long volatile*)dest, (long)val );
+}
+
+#endif
+
 #elif defined(__GNUC__)
 
 static FORCEINLINE LONG WINAPI InterlockedCompareExchange( LONG volatile *dest, LONG xchg, LONG compare )
 {
+#ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4
     return __sync_val_compare_and_swap( dest, compare, xchg );
+#else
+    LONG ret;
+    __asm__ __volatile__( "lock; cmpxchgl %2,(%1)"
+                          : "=a" (ret) : "r" (dest), "r" (xchg), "0" (compare) : "memory" );
+    return ret;
+#endif
 }
 
+static FORCEINLINE LONG WINAPI InterlockedExchange( LONG volatile *dest, LONG val )
+{
+    LONG ret;
+#if defined(__i386__) || defined(__x86_64__)
+    __asm__ __volatile__( "lock; xchgl %0,(%1)"
+                          : "=r" (ret) :"r" (dest), "0" (val) : "memory" );
+#else
+    do ret = *dest; while (!__sync_bool_compare_and_swap( dest, ret, val ));
+#endif
+    return ret;
+}
+
+static FORCEINLINE LONG WINAPI InterlockedExchangeAdd( LONG volatile *dest, LONG incr )
+{
+#ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4
+    return __sync_fetch_and_add( dest, incr );
+#else
+    LONG ret;
+    __asm__ __volatile__( "lock; xaddl %0,(%1)"
+                          : "=r" (ret) : "r" (dest), "0" (incr) : "memory" );
+    return ret;
+#endif
+}
+
+static FORCEINLINE LONG WINAPI InterlockedIncrement( LONG volatile *dest )
+{
+#ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4
+    return __sync_add_and_fetch( dest, 1 );
+#else
+    return InterlockedExchangeAdd( dest, 1 ) + 1;
+#endif
+}
+
+static FORCEINLINE LONG WINAPI InterlockedDecrement( LONG volatile *dest )
+{
+#ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4
+    return __sync_add_and_fetch( dest, -1 );
+#else
+    return InterlockedExchangeAdd( dest, -1 ) - 1;
+#endif
+}
+
+#ifdef _WIN64
+
 static FORCEINLINE PVOID WINAPI InterlockedCompareExchangePointer( PVOID volatile *dest, PVOID xchg, PVOID compare )
 {
     return __sync_val_compare_and_swap( dest, compare, xchg );
@@ -3030,17 +3046,6 @@
     return __sync_val_compare_and_swap( dest, compare, xchg );
 }
 
-static FORCEINLINE LONG WINAPI InterlockedExchange( LONG volatile *dest, LONG val )
-{
-    LONG ret;
-#ifdef __x86_64__
-    __asm__ __volatile__( "lock; xchgl %0,(%1)" : "=r" (ret) :"r" (dest), "0" (val) : "memory" );
-#else
-    do ret = *dest; while (!__sync_bool_compare_and_swap( dest, ret, val ));
-#endif
-    return ret;
-}
-
 static FORCEINLINE PVOID WINAPI InterlockedExchangePointer( PVOID volatile *dest, PVOID val )
 {
     PVOID ret;
@@ -3052,22 +3057,30 @@
     return ret;
 }
 
-static FORCEINLINE LONG WINAPI InterlockedExchangeAdd( LONG volatile *dest, LONG incr )
+#else
+
+static FORCEINLINE PVOID WINAPI InterlockedCompareExchangePointer( PVOID volatile *dest, PVOID xchg, PVOID compare )
 {
-    return __sync_fetch_and_add( dest, incr );
+    return (PVOID)InterlockedCompareExchange( (LONG volatile*)dest, (LONG)xchg, (LONG)compare );
 }
 
-static FORCEINLINE LONG WINAPI InterlockedIncrement( LONG volatile *dest )
+static FORCEINLINE PVOID WINAPI InterlockedExchangePointer( PVOID volatile *dest, PVOID val )
 {
-    return __sync_add_and_fetch( dest, 1 );
+    return (PVOID)InterlockedExchange( (LONG volatile*)dest, (LONG)val );
 }
 
-static FORCEINLINE LONG WINAPI InterlockedDecrement( LONG volatile *dest )
+#ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8
+static FORCEINLINE LONGLONG WINAPI InterlockedCompareExchange64( LONGLONG volatile *dest, LONGLONG xchg, LONGLONG compare )
 {
-    return __sync_add_and_fetch( dest, -1 );
+    return __sync_val_compare_and_swap( dest, compare, xchg );
 }
+#else
+WINBASEAPI LONGLONG WINAPI InterlockedCompareExchange64(LONGLONG volatile*,LONGLONG,LONGLONG);
+#endif
 
-#endif  /* __i386__ */
+#endif
+
+#endif  /* __GNUC__ */
 
 #ifdef __WINESRC__
 
@@ -3136,6 +3149,7 @@
 /* WinMain(entry point) must be declared in winbase.h. */
 /* If this is not declared, we cannot compile many sources written with C++. */
 int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int);
+int WINAPI wWinMain(HINSTANCE,HINSTANCE,LPWSTR,int);
 
 #ifdef __WINESRC__
 /* shouldn't be here, but is nice for type checking */
diff --git a/mingw-w64-tools/widl/include/windef.h b/mingw-w64-tools/widl/include/windef.h
index 0074d5c..7ece7c8 100644
--- a/mingw-w64-tools/widl/include/windef.h
+++ b/mingw-w64-tools/widl/include/windef.h
@@ -50,7 +50,7 @@
 # endif
 #endif
 
-#ifndef __stdcall
+#if !defined(_MSC_VER) && !defined(__stdcall)
 # ifdef __i386__
 #  ifdef __GNUC__
 #   if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 2)) || defined(__APPLE__)
@@ -58,8 +58,6 @@
 #   else
 #    define __stdcall __attribute__((__stdcall__))
 #   endif
-#  elif defined(_MSC_VER)
-    /* Nothing needs to be done. __stdcall already exists */
 #  else
 #   error You need to define __stdcall for your compiler
 #  endif
@@ -78,7 +76,7 @@
 # endif  /* __i386__ */
 #endif /* __stdcall */
 
-#ifndef __cdecl
+#if !defined(_MSC_VER) && !defined(__cdecl)
 # if defined(__i386__) && defined(__GNUC__)
 #   if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 2)) || defined(__APPLE__)
 #   define __cdecl __attribute__((__cdecl__)) __attribute__((__force_align_arg_pointer__))
@@ -100,13 +98,11 @@
 # endif
 #endif /* __cdecl */
 
-#ifndef __fastcall
-# ifndef _MSC_VER
-#  define __fastcall __stdcall
-# endif
+#if !defined(_MSC_VER) && !defined(__fastcall)
+# define __fastcall __stdcall
 #endif
 
-#ifndef __thiscall
+#if (!defined(_MSC_VER) || !defined(__clang__)) && !defined(__thiscall)
 # define __thiscall __stdcall
 #endif
 
@@ -140,12 +136,7 @@
 #define __ONLY_IN_WINELIB(x)	x
 #endif
 
-#ifndef pascal
-#define pascal      __ONLY_IN_WINELIB(__stdcall)
-#endif
-#ifndef _pascal
-#define _pascal	    __ONLY_IN_WINELIB(__stdcall)
-#endif
+#ifndef _MSC_VER
 #ifndef _stdcall
 #define _stdcall    __ONLY_IN_WINELIB(__stdcall)
 #endif
@@ -155,16 +146,23 @@
 #ifndef __fastcall
 #define __fastcall  __ONLY_IN_WINELIB(__stdcall)
 #endif
-#ifndef __export
-#define __export    __ONLY_IN_WINELIB(__stdcall)
-#endif
 #ifndef cdecl
 #define cdecl       __ONLY_IN_WINELIB(__cdecl)
 #endif
 #ifndef _cdecl
 #define _cdecl      __ONLY_IN_WINELIB(__cdecl)
 #endif
+#endif /* _MSC_VER */
 
+#ifndef pascal
+#define pascal      __ONLY_IN_WINELIB(__stdcall)
+#endif
+#ifndef _pascal
+#define _pascal     __ONLY_IN_WINELIB(__stdcall)
+#endif
+#ifndef __export
+#define __export    __ONLY_IN_WINELIB(__stdcall)
+#endif
 #ifndef near
 #define near        __ONLY_IN_WINELIB(/* nothing */)
 #endif
@@ -239,25 +237,32 @@
 
 /* Standard data types */
 
+#ifndef BASETYPES
+#define BASETYPES
+typedef unsigned char UCHAR, *PUCHAR;
+typedef unsigned short USHORT, *PUSHORT;
+#ifdef WINE_USE_LONG
+typedef unsigned long ULONG, *PULONG;
+#else
+typedef unsigned int ULONG, *PULONG;
+#endif
+#endif
+
 typedef void                                   *LPVOID;
 typedef const void                             *LPCVOID;
 typedef int             BOOL,       *PBOOL,    *LPBOOL;
 typedef unsigned char   BYTE,       *PBYTE,    *LPBYTE;
-typedef unsigned char   UCHAR,      *PUCHAR;
 typedef unsigned short  WORD,       *PWORD,    *LPWORD;
-typedef unsigned short  USHORT,     *PUSHORT;
 typedef int             INT,        *PINT,     *LPINT;
 typedef unsigned int    UINT,       *PUINT;
 typedef float           FLOAT,      *PFLOAT;
 typedef char                        *PSZ;
-#ifdef _MSC_VER
+#ifdef WINE_USE_LONG
 typedef long                                   *LPLONG;
 typedef unsigned long   DWORD,      *PDWORD,   *LPDWORD;
-typedef unsigned long   ULONG,      *PULONG;
 #else
 typedef int                                    *LPLONG;
 typedef unsigned int    DWORD,      *PDWORD,   *LPDWORD;
-typedef unsigned int    ULONG,      *PULONG;
 #endif
 
 /* Macros to map Winelib names to the correct implementation name */
diff --git a/mingw-w64-tools/widl/include/winerror.h b/mingw-w64-tools/widl/include/winerror.h
index 73027c4..4ebb48c 100644
--- a/mingw-w64-tools/widl/include/winerror.h
+++ b/mingw-w64-tools/widl/include/winerror.h
@@ -348,15 +348,101 @@
 #define ERROR_FT_DI_SCAN_REQUIRED                          339
 #define ERROR_INVALID_KERNEL_INFO_VERSION                  340
 #define ERROR_INVALID_PEP_INFO_VERSION                     341
+#define ERROR_OBJECT_NOT_EXTERNALLY_BACKED                 342
+#define ERROR_EXTERNAL_BACKING_PROVIDER_UNKNOWN            343
+#define ERROR_COMPRESSION_NOT_BENEFICIAL                   344
+#define ERROR_STORAGE_TOPOLOGY_ID_MISMATCH                 345
+#define ERROR_BLOCKED_BY_PARENTAL_CONTROLS                 346
+#define ERROR_BLOCK_TOO_MANY_REFERENCES                    347
+#define ERROR_MARKED_TO_DISALLOW_WRITES                    348
+#define ERROR_ENCLAVE_FAILURE                              349
 #define ERROR_FAIL_NOACTION_REBOOT                         350
 #define ERROR_FAIL_SHUTDOWN                                351
 #define ERROR_FAIL_RESTART                                 352
 #define ERROR_MAX_SESSIONS_REACHED                         353
+#define ERROR_NETWORK_ACCESS_DENIED_EDP                    354
+#define ERROR_DEVICE_HINT_NAME_BUFFER_TOO_SMALL            355
+#define ERROR_EDP_POLICY_DENIES_OPERATION                  356
+#define ERROR_EDP_DPL_POLICY_CANT_BE_SATISFIED             357
+#define ERROR_CLOUD_FILE_SYNC_ROOT_METADATA_CORRUPT        358
+#define ERROR_DEVICE_IN_MAINTENANCE                        359
+#define ERROR_NOT_SUPPORTED_ON_DAX                         360
+#define ERROR_DAX_MAPPING_EXISTS                           361
+#define ERROR_CLOUD_FILE_PROVIDER_NOT_RUNNING              362
+#define ERROR_CLOUD_FILE_METADATA_CORRUPT                  363
+#define ERROR_CLOUD_FILE_METADATA_TOO_LARGE                364
+#define ERROR_CLOUD_FILE_PROPERTY_BLOB_TOO_LARGE           365
+#define ERROR_CLOUD_FILE_PROPERTY_BLOB_CHECKSUM_MISMATCH   366
+#define ERROR_CHILD_PROCESS_BLOCKED                        367
+#define ERROR_STORAGE_LOST_DATA_PERSISTENCE                368
+#define ERROR_FILE_SYSTEM_VIRTUALIZATION_UNAVAILABLE       369
+#define ERROR_FILE_SYSTEM_VIRTUALIZATION_METADATA_CORRUPT  370
+#define ERROR_FILE_SYSTEM_VIRTUALIZATION_BUSY              371
+#define ERROR_FILE_SYSTEM_VIRTUALIZATION_PROVIDER_UNKNOWN  372
+#define ERROR_GDI_HANDLE_LEAK                              373
+#define ERROR_CLOUD_FILE_TOO_MANY_PROPERTY_BLOBS           374
+#define ERROR_CLOUD_FILE_PROPERTY_VERSION_NOT_SUPPORTED    375
+#define ERROR_NOT_A_CLOUD_FILE                             376
+#define ERROR_CLOUD_FILE_NOT_IN_SYNC                       377
+#define ERROR_CLOUD_FILE_ALREADY_CONNECTED                 378
+#define ERROR_CLOUD_FILE_NOT_SUPPORTED                     379
+#define ERROR_CLOUD_FILE_INVALID_REQUEST                   380
+#define ERROR_CLOUD_FILE_READ_ONLY_VOLUME                  381
+#define ERROR_CLOUD_FILE_CONNECTED_PROVIDER_ONLY           382
+#define ERROR_CLOUD_FILE_VALIDATION_FAILED                 383
+#define ERROR_SMB1_NOT_AVAILABLE                           384
+#define ERROR_FILE_SYSTEM_VIRTUALIZATION_INVALID_OPERATION 385
+#define ERROR_CLOUD_FILE_AUTHENTICATION_FAILED             386
+#define ERROR_CLOUD_FILE_INSUFFICIENT_RESOURCES            387
+#define ERROR_CLOUD_FILE_NETWORK_UNAVAILABLE               388
+#define ERROR_CLOUD_FILE_UNSUCCESSFUL                      389
+#define ERROR_CLOUD_FILE_NOT_UNDER_SYNC_ROOT               390
+#define ERROR_CLOUD_FILE_IN_USE                            391
+#define ERROR_CLOUD_FILE_PINNED                            392
+#define ERROR_CLOUD_FILE_REQUEST_ABORTED                   393
+#define ERROR_CLOUD_FILE_PROPERTY_CORRUPT                  394
+#define ERROR_CLOUD_FILE_ACCESS_DENIED                     395
+#define ERROR_CLOUD_FILE_INCOMPATIBLE_HARDLINKS            396
+#define ERROR_CLOUD_FILE_PROPERTY_LOCK_CONFLICT            397
+#define ERROR_CLOUD_FILE_REQUEST_CANCELED                  398
+#define ERROR_EXTERNAL_SYSKEY_NOT_SUPPORTED                399
+#define ERROR_THREAD_MODE_ALREADY_BACKGROUND               400
+#define ERROR_THREAD_MODE_NOT_BACKGROUND                   401
+#define ERROR_PROCESS_MODE_ALREADY_BACKGROUND              402
+#define ERROR_PROCESS_MODE_NOT_BACKGROUND                  403
+#define ERROR_PNP_QUERY_REMOVE_DEVICE_TIMEOUT              480
+#define ERROR_PNP_QUERY_REMOVE_RELATED_DEVICE_TIMEOUT      481
+#define ERROR_PNP_QUERY_REMOVE_UNRELATED_DEVICE_TIMEOUT    482
+#define ERROR_DEVICE_HARDWARE_ERROR                        483
 #define ERROR_INVALID_ADDRESS                              487
 #define ERROR_USER_PROFILE_LOAD                            500
 #define ERROR_ARITHMETIC_OVERFLOW                          534
 #define ERROR_PIPE_CONNECTED                               535
 #define ERROR_PIPE_LISTENING                               536
+#define ERROR_VERIFIER_STOP                                537
+#define ERROR_ABIOS_ERROR                                  538
+#define ERROR_WX86_WARNING                                 539
+#define ERROR_WX86_ERROR                                   540
+#define ERROR_TIMER_NOT_CANCELED                           541
+#define ERROR_UNWIND                                       542
+#define ERROR_BAD_STACK                                    543
+#define ERROR_INVALID_UNWIND_TARGET                        544
+#define ERROR_INVALID_PORT_ATTRIBUTES                      545
+#define ERROR_PORT_MESSAGE_TOO_LONG                        546
+#define ERROR_INVALID_QUOTA_LOWER                          547
+#define ERROR_DEVICE_ALREADY_ATTACHED                      548
+#define ERROR_INSTRUCTION_MISALIGNMENT                     549
+#define ERROR_PROFILING_NOT_STARTED                        550
+#define ERROR_PROFILING_NOT_STOPPED                        551
+#define ERROR_COULD_NOT_INTERPRET                          552
+#define ERROR_PROFILING_AT_LIMIT                           553
+#define ERROR_CANT_WAIT                                    554
+#define ERROR_CANT_TERMINATE_SELF                          555
+#define ERROR_UNEXPECTED_MM_CREATE_ERR                     556
+#define ERROR_UNEXPECTED_MM_MAP_ERROR                      557
+#define ERROR_UNEXPECTED_MM_EXTEND_ERR                     558
+#define ERROR_BAD_FUNCTION_TABLE                           559
+#define ERROR_NO_GUID_TRANSLATION                          560
 #define ERROR_INVALID_LDT_SIZE                             561
 #define ERROR_INVALID_LDT_OFFSET                           563
 #define ERROR_INVALID_LDT_DESCRIPTOR                       564
@@ -451,6 +537,7 @@
 #define ERROR_DRIVER_FAILED_PRIOR_UNLOAD                   654
 #define ERROR_VOLSNAP_PREPARE_HIBERNATE                    655
 #define ERROR_HIBERNATION_FAILURE                          656
+#define ERROR_PWD_TOO_LONG                                 657
 #define ERROR_FILE_SYSTEM_LIMITATION                       665
 #define ERROR_ASSERTION_FAILURE                            668
 #define ERROR_ACPI_ERROR                                   669
@@ -575,8 +662,30 @@
 #define ERROR_LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED   788
 #define ERROR_LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR   789
 #define ERROR_LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR       790
+#define ERROR_BAD_MCFG_TABLE                               791
+#define ERROR_DISK_REPAIR_REDIRECTED                       792
+#define ERROR_DISK_REPAIR_UNSUCCESSFUL                     793
+#define ERROR_CORRUPT_LOG_OVERFULL                         794
+#define ERROR_CORRUPT_LOG_CORRUPTED                        795
+#define ERROR_CORRUPT_LOG_UNAVAILABLE                      796
+#define ERROR_CORRUPT_LOG_DELETED_FULL                     797
+#define ERROR_CORRUPT_LOG_CLEARED                          798
+#define ERROR_ORPHAN_NAME_EXHAUSTED                        799
+#define ERROR_OPLOCK_SWITCHED_TO_NEW_HANDLE                800
+#define ERROR_CANNOT_GRANT_REQUESTED_OPLOCK                801
+#define ERROR_CANNOT_BREAK_OPLOCK                          802
+#define ERROR_OPLOCK_HANDLE_CLOSED                         803
 #define ERROR_NO_ACE_CONDITION                             804
 #define ERROR_INVALID_ACE_CONDITION                        805
+#define ERROR_FILE_HANDLE_REVOKED                          806
+#define ERROR_IMAGE_AT_DIFFERENT_BASE                      807
+#define ERROR_ENCRYPTED_IO_NOT_POSSIBLE                    808
+#define ERROR_FILE_METADATA_OPTIMIZATION_IN_PROGRESS       809
+#define ERROR_QUOTA_ACTIVITY                               810
+#define ERROR_HANDLE_REVOKED                               811
+#define ERROR_CALLBACK_INVOKE_INLINE                       812
+#define ERROR_CPU_SET_INVALID                              813
+#define ERROR_ENCLAVE_NOT_TERMINATED                       814
 #define ERROR_EA_ACCESS_DENIED                             994
 #define ERROR_OPERATION_ABORTED                            995
 #define ERROR_IO_INCOMPLETE                                996
@@ -705,6 +814,8 @@
 #define ERROR_JOURNAL_NOT_ACTIVE                           1179
 #define ERROR_POTENTIAL_FILE_FOUND                         1180
 #define ERROR_JOURNAL_ENTRY_DELETED                        1181
+#define ERROR_VRF_CFG_ENABLED                              1183
+#define ERROR_PARTITION_TERMINATING                        1184
 #define ERROR_BAD_DEVICE                                   1200
 #define ERROR_CONNECTION_UNAVAIL                           1201
 #define ERROR_DEVICE_ALREADY_REMEMBERED                    1202
@@ -764,6 +875,7 @@
 #define ERROR_HOST_DOWN                                    1256
 #define ERROR_NON_ACCOUNT_SID                              1257
 #define ERROR_NON_DOMAIN_SID                               1258
+#define ERROR_APPHELP_BLOCK                                1259
 #define ERROR_ACCESS_DISABLED_BY_POLICY                    1260
 #define ERROR_REG_NAT_CONSUMPTION                          1261
 #define ERROR_PKINIT_FAILURE                               1263
@@ -774,6 +886,29 @@
 #define ERROR_SYNC_FOREGROUND_REFRESH_REQUIRED             1274
 #define ERROR_DRIVER_BLOCKED                               1275
 #define ERROR_INVALID_IMPORT_OF_NON_DLL                    1276
+#define ERROR_ACCESS_DISABLED_WEBBLADE                     1277
+#define ERROR_ACCESS_DISABLED_WEBBLADE_TAMPER              1278
+#define ERROR_RECOVERY_FAILURE                             1279
+#define ERROR_ALREADY_FIBER                                1280
+#define ERROR_ALREADY_THREAD                               1281
+#define ERROR_STACK_BUFFER_OVERRUN                         1282
+#define ERROR_PARAMETER_QUOTA_EXCEEDED                     1283
+#define ERROR_DEBUGGER_INACTIVE                            1284
+#define ERROR_DELAY_LOAD_FAILED                            1285
+#define ERROR_VDM_DISALLOWED                               1286
+#define ERROR_UNIDENTIFIED_ERROR                           1287
+#define ERROR_INVALID_CRUNTIME_PARAMETER                   1288
+#define ERROR_BEYOND_VDL                                   1289
+#define ERROR_INCOMPATIBLE_SERVICE_SID_TYPE                1290
+#define ERROR_DRIVER_PROCESS_TERMINATED                    1291
+#define ERROR_IMPLEMENTATION_LIMIT                         1292
+#define ERROR_PROCESS_IS_PROTECTED                         1293
+#define ERROR_SERVICE_NOTIFY_CLIENT_LAGGING                1294
+#define ERROR_DISK_QUOTA_EXCEEDED                          1295
+#define ERROR_CONTENT_BLOCKED                              1296
+#define ERROR_INCOMPATIBLE_SERVICE_PRIVILEGE               1297
+#define ERROR_APP_HANG                                     1298
+#define ERROR_INVALID_LABEL                                1299
 #define ERROR_NOT_ALL_ASSIGNED                             1300
 #define ERROR_SOME_NOT_MAPPED                              1301
 #define ERROR_NO_QUOTAS_FOR_ACCOUNT                        1302
@@ -944,10 +1079,13 @@
 #define ERROR_WRONG_COMPARTMENT                            1468
 #define ERROR_AUTHIP_FAILURE                               1469
 #define ERROR_NO_NVRAM_RESOURCES                           1470
+#define ERROR_NOT_GUI_PROCESS                              1471
 #define ERROR_EVENTLOG_FILE_CORRUPT                        1500
 #define ERROR_EVENTLOG_CANT_START                          1501
 #define ERROR_LOG_FILE_FULL                                1502
 #define ERROR_EVENTLOG_FILE_CHANGED                        1503
+#define ERROR_CONTAINER_ASSIGNED                           1504
+#define ERROR_JOB_NO_CONTAINER                             1505
 #define ERROR_INVALID_TASK_NAME                            1550
 #define ERROR_INVALID_TASK_INDEX                           1551
 #define ERROR_THREAD_ALREADY_IN_TASK                       1552
@@ -1003,6 +1141,13 @@
 #define ERROR_INVALID_PATCH_XML                            1650
 #define ERROR_PATCH_MANAGED_ADVERTISED_PRODUCT             1651
 #define ERROR_INSTALL_SERVICE_SAFEBOOT                     1652
+#define ERROR_FAIL_FAST_EXCEPTION                          1653
+#define ERROR_INSTALL_REJECTED                             1654
+#define ERROR_DYNAMIC_CODE_BLOCKED                         1655
+#define ERROR_NOT_SAME_OBJECT                              1656
+#define ERROR_STRICT_CFG_VIOLATION                         1657
+#define ERROR_SET_CONTEXT_DENIED                           1660
+#define ERROR_CROSS_PARTITION_VIOLATION                    1661
 #define RPC_S_INVALID_STRING_BINDING                       1700
 #define RPC_S_WRONG_KIND_OF_BINDING                        1701
 #define RPC_S_INVALID_BINDING                              1702
@@ -1032,6 +1177,7 @@
 #define RPC_S_CALL_FAILED                                  1726
 #define RPC_S_CALL_FAILED_DNE                              1727
 #define RPC_S_PROTOCOL_ERROR                               1728
+#define RPC_S_PROXY_ACCESS_DENIED                          1729
 #define RPC_S_UNSUPPORTED_TRANS_SYN                        1730
 #define RPC_S_UNSUPPORTED_TYPE                             1732
 #define RPC_S_INVALID_TAG                                  1733
@@ -1132,6 +1278,10 @@
 #define RPC_X_INVALID_PIPE_OBJECT                          1830
 #define RPC_X_WRONG_PIPE_ORDER                             1831
 #define RPC_X_WRONG_PIPE_VERSION                           1832
+#define RPC_S_COOKIE_AUTH_FAILED                           1833
+#define RPC_S_DO_NOT_DISTURB                               1834
+#define RPC_S_SYSTEM_HANDLE_COUNT_EXCEEDED                 1835
+#define RPC_S_SYSTEM_HANDLE_TYPE_MISMATCH                  1836
 #define RPC_S_GROUP_MEMBER_NOT_FOUND                       1898
 #define EPT_S_CANT_CREATE                                  1899
 #define RPC_S_INVALID_OBJECT                               1900
@@ -1171,6 +1321,9 @@
 #define ERROR_USER_DELETE_TRUST_QUOTA_EXCEEDED             1934
 #define ERROR_AUTHENTICATION_FIREWALL_FAILED               1935
 #define ERROR_REMOTE_PRINT_CONNECTIONS_BLOCKED             1936
+#define ERROR_NTLM_BLOCKED                                 1937
+#define ERROR_PASSWORD_CHANGE_REQUIRED                     1938
+#define ERROR_LOST_MODE_LOGON_RESTRICTION                  1939
 #define ERROR_INVALID_PIXEL_FORMAT                         2000
 #define ERROR_BAD_DRIVER                                   2001
 #define ERROR_INVALID_WINDOW_STYLE                         2002
@@ -1284,6 +1437,34 @@
 #define ERROR_INVALID_REPARSE_DATA                         4392
 #define ERROR_REPARSE_TAG_INVALID                          4393
 #define ERROR_REPARSE_TAG_MISMATCH                         4394
+#define ERROR_REPARSE_POINT_ENCOUNTERED                    4395
+#define ERROR_APP_DATA_NOT_FOUND                           4400
+#define ERROR_APP_DATA_EXPIRED                             4401
+#define ERROR_APP_DATA_CORRUPT                             4402
+#define ERROR_APP_DATA_LIMIT_EXCEEDED                      4403
+#define ERROR_APP_DATA_REBOOT_REQUIRED                     4404
+#define ERROR_SECUREBOOT_ROLLBACK_DETECTED                 4420
+#define ERROR_SECUREBOOT_POLICY_VIOLATION                  4421
+#define ERROR_SECUREBOOT_INVALID_POLICY                    4422
+#define ERROR_SECUREBOOT_POLICY_PUBLISHER_NOT_FOUND        4423
+#define ERROR_SECUREBOOT_POLICY_NOT_SIGNED                 4424
+#define ERROR_SECUREBOOT_NOT_ENABLED                       4425
+#define ERROR_SECUREBOOT_FILE_REPLACED                     4426
+#define ERROR_SECUREBOOT_POLICY_NOT_AUTHORIZED             4427
+#define ERROR_SECUREBOOT_POLICY_UNKNOWN                    4428
+#define ERROR_SECUREBOOT_POLICY_MISSING_ANTIROLLBACKVERSION 4429
+#define ERROR_SECUREBOOT_PLATFORM_ID_MISMATCH              4430
+#define ERROR_SECUREBOOT_POLICY_ROLLBACK_DETECTED          4431
+#define ERROR_SECUREBOOT_POLICY_UPGRADE_MISMATCH           4432
+#define ERROR_SECUREBOOT_REQUIRED_POLICY_FILE_MISSING      4433
+#define ERROR_SECUREBOOT_NOT_BASE_POLICY                   4434
+#define ERROR_SECUREBOOT_NOT_SUPPLEMENTAL_POLICY           4435
+#define ERROR_OFFLOAD_READ_FLT_NOT_SUPPORTED               4440
+#define ERROR_OFFLOAD_WRITE_FLT_NOT_SUPPORTED              4441
+#define ERROR_OFFLOAD_READ_FILE_NOT_SUPPORTED              4442
+#define ERROR_OFFLOAD_WRITE_FILE_NOT_SUPPORTED             4443
+#define ERROR_ALREADY_HAS_STREAM_ID                        4444
+#define ERROR_SMR_GARBAGE_COLLECTION_REQUIRED              4445
 #define ERROR_VOLUME_NOT_SIS_ENABLED                       4500
 #define ERROR_DEPENDENT_RESOURCE_EXISTS                    5001
 #define ERROR_DEPENDENCY_NOT_FOUND                         5002
@@ -1373,6 +1554,116 @@
 #define ERROR_DATABASE_BACKUP_CORRUPT                      5087
 #define ERROR_CLUSTER_NODE_ALREADY_HAS_DFS_ROOT            5088
 #define ERROR_RESOURCE_PROPERTY_UNCHANGEABLE               5089
+#define ERROR_CLUSTER_MEMBERSHIP_INVALID_STATE             5890
+#define ERROR_CLUSTER_QUORUMLOG_NOT_FOUND                  5891
+#define ERROR_CLUSTER_MEMBERSHIP_HALT                      5892
+#define ERROR_CLUSTER_INSTANCE_ID_MISMATCH                 5893
+#define ERROR_CLUSTER_NETWORK_NOT_FOUND_FOR_IP             5894
+#define ERROR_CLUSTER_PROPERTY_DATA_TYPE_MISMATCH          5895
+#define ERROR_CLUSTER_EVICT_WITHOUT_CLEANUP                5896
+#define ERROR_CLUSTER_PARAMETER_MISMATCH                   5897
+#define ERROR_NODE_CANNOT_BE_CLUSTERED                     5898
+#define ERROR_CLUSTER_WRONG_OS_VERSION                     5899
+#define ERROR_CLUSTER_CANT_CREATE_DUP_CLUSTER_NAME         5900
+#define ERROR_CLUSCFG_ALREADY_COMMITTED                    5901
+#define ERROR_CLUSCFG_ROLLBACK_FAILED                      5902
+#define ERROR_CLUSCFG_SYSTEM_DISK_DRIVE_LETTER_CONFLICT    5903
+#define ERROR_CLUSTER_OLD_VERSION                          5904
+#define ERROR_CLUSTER_MISMATCHED_COMPUTER_ACCT_NAME        5905
+#define ERROR_CLUSTER_NO_NET_ADAPTERS                      5906
+#define ERROR_CLUSTER_POISONED                             5907
+#define ERROR_CLUSTER_GROUP_MOVING                         5908
+#define ERROR_CLUSTER_RESOURCE_TYPE_BUSY                   5909
+#define ERROR_RESOURCE_CALL_TIMED_OUT                      5910
+#define ERROR_INVALID_CLUSTER_IPV6_ADDRESS                 5911
+#define ERROR_CLUSTER_INTERNAL_INVALID_FUNCTION            5912
+#define ERROR_CLUSTER_PARAMETER_OUT_OF_BOUNDS              5913
+#define ERROR_CLUSTER_PARTIAL_SEND                         5914
+#define ERROR_CLUSTER_REGISTRY_INVALID_FUNCTION            5915
+#define ERROR_CLUSTER_INVALID_STRING_TERMINATION           5916
+#define ERROR_CLUSTER_INVALID_STRING_FORMAT                5917
+#define ERROR_CLUSTER_DATABASE_TRANSACTION_IN_PROGRESS     5918
+#define ERROR_CLUSTER_DATABASE_TRANSACTION_NOT_IN_PROGRESS 5919
+#define ERROR_CLUSTER_NULL_DATA                            5920
+#define ERROR_CLUSTER_PARTIAL_READ                         5921
+#define ERROR_CLUSTER_PARTIAL_WRITE                        5922
+#define ERROR_CLUSTER_CANT_DESERIALIZE_DATA                5923
+#define ERROR_DEPENDENT_RESOURCE_PROPERTY_CONFLICT         5924
+#define ERROR_CLUSTER_NO_QUORUM                            5925
+#define ERROR_CLUSTER_INVALID_IPV6_NETWORK                 5926
+#define ERROR_CLUSTER_INVALID_IPV6_TUNNEL_NETWORK          5927
+#define ERROR_QUORUM_NOT_ALLOWED_IN_THIS_GROUP             5928
+#define ERROR_DEPENDENCY_TREE_TOO_COMPLEX                  5929
+#define ERROR_EXCEPTION_IN_RESOURCE_CALL                   5930
+#define ERROR_CLUSTER_RHS_FAILED_INITIALIZATION            5931
+#define ERROR_CLUSTER_NOT_INSTALLED                        5932
+#define ERROR_CLUSTER_RESOURCES_MUST_BE_ONLINE_ON_THE_SAME_NODE 5933
+#define ERROR_CLUSTER_MAX_NODES_IN_CLUSTER                 5934
+#define ERROR_CLUSTER_TOO_MANY_NODES                       5935
+#define ERROR_CLUSTER_OBJECT_ALREADY_USED                  5936
+#define ERROR_NONCORE_GROUPS_FOUND                         5937
+#define ERROR_FILE_SHARE_RESOURCE_CONFLICT                 5938
+#define ERROR_CLUSTER_EVICT_INVALID_REQUEST                5939
+#define ERROR_CLUSTER_SINGLETON_RESOURCE                   5940
+#define ERROR_CLUSTER_GROUP_SINGLETON_RESOURCE             5941
+#define ERROR_CLUSTER_RESOURCE_PROVIDER_FAILED             5942
+#define ERROR_CLUSTER_RESOURCE_CONFIGURATION_ERROR         5943
+#define ERROR_CLUSTER_GROUP_BUSY                           5944
+#define ERROR_CLUSTER_NOT_SHARED_VOLUME                    5945
+#define ERROR_CLUSTER_INVALID_SECURITY_DESCRIPTOR          5946
+#define ERROR_CLUSTER_SHARED_VOLUMES_IN_USE                5947
+#define ERROR_CLUSTER_USE_SHARED_VOLUMES_API               5948
+#define ERROR_CLUSTER_BACKUP_IN_PROGRESS                   5949
+#define ERROR_NON_CSV_PATH                                 5950
+#define ERROR_CSV_VOLUME_NOT_LOCAL                         5951
+#define ERROR_CLUSTER_WATCHDOG_TERMINATING                 5952
+#define ERROR_CLUSTER_RESOURCE_VETOED_MOVE_INCOMPATIBLE_NODES 5953
+#define ERROR_CLUSTER_INVALID_NODE_WEIGHT                  5954
+#define ERROR_CLUSTER_RESOURCE_VETOED_CALL                 5955
+#define ERROR_RESMON_SYSTEM_RESOURCES_LACKING              5956
+#define ERROR_CLUSTER_RESOURCE_VETOED_MOVE_NOT_ENOUGH_RESOURCES_ON_DESTINATION 5957
+#define ERROR_CLUSTER_RESOURCE_VETOED_MOVE_NOT_ENOUGH_RESOURCES_ON_SOURCE 5958
+#define ERROR_CLUSTER_GROUP_QUEUED                         5959
+#define ERROR_CLUSTER_RESOURCE_LOCKED_STATUS               5960
+#define ERROR_CLUSTER_SHARED_VOLUME_FAILOVER_NOT_ALLOWED   5961
+#define ERROR_CLUSTER_NODE_DRAIN_IN_PROGRESS               5962
+#define ERROR_CLUSTER_DISK_NOT_CONNECTED                   5963
+#define ERROR_DISK_NOT_CSV_CAPABLE                         5964
+#define ERROR_RESOURCE_NOT_IN_AVAILABLE_STORAGE            5965
+#define ERROR_CLUSTER_SHARED_VOLUME_REDIRECTED             5966
+#define ERROR_CLUSTER_SHARED_VOLUME_NOT_REDIRECTED         5967
+#define ERROR_CLUSTER_CANNOT_RETURN_PROPERTIES             5968
+#define ERROR_CLUSTER_RESOURCE_CONTAINS_UNSUPPORTED_DIFF_AREA_FOR_SHARED_VOLUMES 5969
+#define ERROR_CLUSTER_RESOURCE_IS_IN_MAINTENANCE_MODE      5970
+#define ERROR_CLUSTER_AFFINITY_CONFLICT                    5971
+#define ERROR_CLUSTER_RESOURCE_IS_REPLICA_VIRTUAL_MACHINE  5972
+#define ERROR_CLUSTER_UPGRADE_INCOMPATIBLE_VERSIONS        5973
+#define ERROR_CLUSTER_UPGRADE_FIX_QUORUM_NOT_SUPPORTED     5974
+#define ERROR_CLUSTER_UPGRADE_RESTART_REQUIRED             5975
+#define ERROR_CLUSTER_UPGRADE_IN_PROGRESS                  5976
+#define ERROR_CLUSTER_UPGRADE_INCOMPLETE                   5977
+#define ERROR_CLUSTER_NODE_IN_GRACE_PERIOD                 5978
+#define ERROR_CLUSTER_CSV_IO_PAUSE_TIMEOUT                 5979
+#define ERROR_NODE_NOT_ACTIVE_CLUSTER_MEMBER               5980
+#define ERROR_CLUSTER_RESOURCE_NOT_MONITORED               5981
+#define ERROR_CLUSTER_RESOURCE_DOES_NOT_SUPPORT_UNMONITORED 5982
+#define ERROR_CLUSTER_RESOURCE_IS_REPLICATED               5983
+#define ERROR_CLUSTER_NODE_ISOLATED                        5984
+#define ERROR_CLUSTER_NODE_QUARANTINED                     5985
+#define ERROR_CLUSTER_DATABASE_UPDATE_CONDITION_FAILED     5986
+#define ERROR_CLUSTER_SPACE_DEGRADED                       5987
+#define ERROR_CLUSTER_TOKEN_DELEGATION_NOT_SUPPORTED       5988
+#define ERROR_CLUSTER_CSV_INVALID_HANDLE                   5989
+#define ERROR_CLUSTER_CSV_SUPPORTED_ONLY_ON_COORDINATOR    5990
+#define ERROR_GROUPSET_NOT_AVAILABLE                       5991
+#define ERROR_GROUPSET_NOT_FOUND                           5992
+#define ERROR_GROUPSET_CANT_PROVIDE                        5993
+#define ERROR_CLUSTER_FAULT_DOMAIN_PARENT_NOT_FOUND        5994
+#define ERROR_CLUSTER_FAULT_DOMAIN_INVALID_HIERARCHY       5995
+#define ERROR_CLUSTER_FAULT_DOMAIN_FAILED_S2D_VALIDATION   5996
+#define ERROR_CLUSTER_FAULT_DOMAIN_S2D_CONNECTIVITY_LOSS   5997
+#define ERROR_CLUSTER_INVALID_INFRASTRUCTURE_FILESERVER_NAME 5998
+#define ERROR_CLUSTERSET_MANAGEMENT_CLUSTER_UNREACHABLE    5999
 #define ERROR_ENCRYPTION_FAILED                            6000
 #define ERROR_DECRYPTION_FAILED                            6001
 #define ERROR_FILE_ENCRYPTED                               6002
@@ -1386,8 +1677,71 @@
 #define ERROR_DIR_EFS_DISALLOWED                           6010
 #define ERROR_EFS_SERVER_NOT_TRUSTED                       6011
 #define ERROR_EFS_ALG_BLOB_TOO_BIG                         6013
+#define ERROR_VOLUME_NOT_SUPPORT_EFS                       6014
+#define ERROR_EFS_DISABLED                                 6015
+#define ERROR_EFS_VERSION_NOT_SUPPORT                      6016
+#define ERROR_CS_ENCRYPTION_INVALID_SERVER_RESPONSE        6017
+#define ERROR_CS_ENCRYPTION_UNSUPPORTED_SERVER             6018
+#define ERROR_CS_ENCRYPTION_EXISTING_ENCRYPTED_FILE        6019
+#define ERROR_CS_ENCRYPTION_NEW_ENCRYPTED_FILE             6020
+#define ERROR_CS_ENCRYPTION_FILE_NOT_CSE                   6021
+#define ERROR_ENCRYPTION_POLICY_DENIES_OPERATION           6022
 #define ERROR_NO_BROWSER_SERVERS_FOUND                     6118
 #define SCHED_E_SERVICE_NOT_LOCALSYSTEM                    6200
+#define ERROR_TRANSACTIONAL_CONFLICT                       6800
+#define ERROR_RM_NOT_ACTIVE                                6801
+#define ERROR_RM_METADATA_CORRUPT                          6802
+#define ERROR_DIRECTORY_NOT_RM                             6803
+#define ERROR_TRANSACTIONS_UNSUPPORTED_REMOTE              6805
+#define ERROR_LOG_RESIZE_INVALID_SIZE                      6806
+#define ERROR_OBJECT_NO_LONGER_EXISTS                      6807
+#define ERROR_STREAM_MINIVERSION_NOT_FOUND                 6808
+#define ERROR_STREAM_MINIVERSION_NOT_VALID                 6809
+#define ERROR_MINIVERSION_INACCESSIBLE_FROM_SPECIFIED_TRANSACTION 6810
+#define ERROR_CANT_OPEN_MINIVERSION_WITH_MODIFY_INTENT     6811
+#define ERROR_CANT_CREATE_MORE_STREAM_MINIVERSIONS         6812
+#define ERROR_REMOTE_FILE_VERSION_MISMATCH                 6814
+#define ERROR_HANDLE_NO_LONGER_VALID                       6815
+#define ERROR_NO_TXF_METADATA                              6816
+#define ERROR_LOG_CORRUPTION_DETECTED                      6817
+#define ERROR_CANT_RECOVER_WITH_HANDLE_OPEN                6818
+#define ERROR_RM_DISCONNECTED                              6819
+#define ERROR_ENLISTMENT_NOT_SUPERIOR                      6820
+#define ERROR_RECOVERY_NOT_NEEDED                          6821
+#define ERROR_RM_ALREADY_STARTED                           6822
+#define ERROR_FILE_IDENTITY_NOT_PERSISTENT                 6823
+#define ERROR_CANT_BREAK_TRANSACTIONAL_DEPENDENCY          6824
+#define ERROR_CANT_CROSS_RM_BOUNDARY                       6825
+#define ERROR_TXF_DIR_NOT_EMPTY                            6826
+#define ERROR_INDOUBT_TRANSACTIONS_EXIST                   6827
+#define ERROR_TM_VOLATILE                                  6828
+#define ERROR_ROLLBACK_TIMER_EXPIRED                       6829
+#define ERROR_TXF_ATTRIBUTE_CORRUPT                        6830
+#define ERROR_EFS_NOT_ALLOWED_IN_TRANSACTION               6831
+#define ERROR_TRANSACTIONAL_OPEN_NOT_ALLOWED               6832
+#define ERROR_LOG_GROWTH_FAILED                            6833
+#define ERROR_TRANSACTED_MAPPING_UNSUPPORTED_REMOTE        6834
+#define ERROR_TXF_METADATA_ALREADY_PRESENT                 6835
+#define ERROR_TRANSACTION_SCOPE_CALLBACKS_NOT_SET          6836
+#define ERROR_TRANSACTION_REQUIRED_PROMOTION               6837
+#define ERROR_CANNOT_EXECUTE_FILE_IN_TRANSACTION           6838
+#define ERROR_TRANSACTIONS_NOT_FROZEN                      6839
+#define ERROR_TRANSACTION_FREEZE_IN_PROGRESS               6840
+#define ERROR_NOT_SNAPSHOT_VOLUME                          6841
+#define ERROR_NO_SAVEPOINT_WITH_OPEN_FILES                 6842
+#define ERROR_DATA_LOST_REPAIR                             6843
+#define ERROR_SPARSE_NOT_ALLOWED_IN_TRANSACTION            6844
+#define ERROR_TM_IDENTITY_MISMATCH                         6845
+#define ERROR_FLOATED_SECTION                              6846
+#define ERROR_CANNOT_ACCEPT_TRANSACTED_WORK                6847
+#define ERROR_CANNOT_ABORT_TRANSACTIONS                    6848
+#define ERROR_BAD_CLUSTERS                                 6849
+#define ERROR_COMPRESSION_NOT_ALLOWED_IN_TRANSACTION       6850
+#define ERROR_VOLUME_DIRTY                                 6851
+#define ERROR_NO_LINK_TRACKING_IN_TRANSACTION              6852
+#define ERROR_OPERATION_NOT_SUPPORTED_IN_TRANSACTION       6853
+#define ERROR_EXPIRED_HANDLE                               6854
+#define ERROR_TRANSACTION_NOT_ENLISTED                     6855
 #define ERROR_CTX_WINSTATION_NAME_INVALID                  7001
 #define ERROR_CTX_INVALID_PD                               7002
 #define ERROR_CTX_PD_NOT_FOUND                             7003
@@ -1427,6 +1781,18 @@
 #define ERROR_CTX_LICENSE_EXPIRED                          7056
 #define ERROR_CTX_SHADOW_NOT_RUNNING                       7057
 #define ERROR_CTX_SHADOW_ENDED_BY_MODE_CHANGE              7058
+#define ERROR_ACTIVATION_COUNT_EXCEEDED                    7059
+#define ERROR_CTX_WINSTATIONS_DISABLED                     7060
+#define ERROR_CTX_ENCRYPTION_LEVEL_REQUIRED                7061
+#define ERROR_CTX_SESSION_IN_USE                           7062
+#define ERROR_CTX_NO_FORCE_LOGOFF                          7063
+#define ERROR_CTX_ACCOUNT_RESTRICTION                      7064
+#define ERROR_RDP_PROTOCOL_ERROR                           7065
+#define ERROR_CTX_CDM_CONNECT                              7066
+#define ERROR_CTX_CDM_DISCONNECT                           7067
+#define ERROR_CTX_SECURITY_LAYER_ERROR                     7068
+#define ERROR_TS_INCOMPATIBLE_SESSIONS                     7069
+#define ERROR_TS_VIDEO_SUBSYSTEM_ERROR                     7070
 #define FRS_ERR_INVALID_API_SEQUENCE                       8001
 #define FRS_ERR_STARTING_SERVICE                           8002
 #define FRS_ERR_STOPPING_SERVICE                           8003
@@ -1504,6 +1870,9 @@
 #define ERROR_DS_CONTROL_NOT_FOUND                         8258
 #define ERROR_DS_CLIENT_LOOP                               8259
 #define ERROR_DS_REFERRAL_LIMIT_EXCEEDED                   8260
+#define ERROR_DS_SORT_CONTROL_MISSING                      8261
+#define ERROR_DS_OFFSET_RANGE_ERROR                        8262
+#define ERROR_DS_RIDMGR_DISABLED                           8263
 #define ERROR_DS_ROOT_MUST_BE_NC                           8301
 #define ERROR_DS_ADD_REPLICA_INHIBITED                     8302
 #define ERROR_DS_ATT_NOT_DEF_IN_SCHEMA                     8303
@@ -1764,8 +2133,89 @@
 #define ERROR_DS_CANT_TREE_DELETE_CRITICAL_OBJ             8560
 #define ERROR_DS_INIT_FAILURE_CONSOLE                      8561
 #define ERROR_DS_SAM_INIT_FAILURE_CONSOLE                  8562
+#define ERROR_DS_FOREST_VERSION_TOO_HIGH                   8563
+#define ERROR_DS_DOMAIN_VERSION_TOO_HIGH                   8564
+#define ERROR_DS_FOREST_VERSION_TOO_LOW                    8565
+#define ERROR_DS_DOMAIN_VERSION_TOO_LOW                    8566
+#define ERROR_DS_INCOMPATIBLE_VERSION                      8567
+#define ERROR_DS_LOW_DSA_VERSION                           8568
+#define ERROR_DS_NO_BEHAVIOR_VERSION_IN_MIXEDDOMAIN        8569
+#define ERROR_DS_NOT_SUPPORTED_SORT_ORDER                  8570
+#define ERROR_DS_NAME_NOT_UNIQUE                           8571
 #define ERROR_DS_MACHINE_ACCOUNT_CREATED_PRENT4            8572
 #define ERROR_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER             8578
+#define ERROR_DS_MODIFYDN_DISALLOWED_BY_INSTANCE_TYPE      8579
+#define ERROR_DS_NO_OBJECT_MOVE_IN_SCHEMA_NC               8580
+#define ERROR_DS_MODIFYDN_DISALLOWED_BY_FLAG               8581
+#define ERROR_DS_MODIFYDN_WRONG_GRANDPARENT                8582
+#define ERROR_DS_NAME_ERROR_TRUST_REFERRAL                 8583
+#define ERROR_NOT_SUPPORTED_ON_STANDARD_SERVER             8584
+#define ERROR_DS_CANT_ACCESS_REMOTE_PART_OF_AD             8585
+#define ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE_V2              8586
+#define ERROR_DS_THREAD_LIMIT_EXCEEDED                     8587
+#define ERROR_DS_NOT_CLOSEST                               8588
+#define ERROR_DS_CANT_DERIVE_SPN_WITHOUT_SERVER_REF        8589
+#define ERROR_DS_SINGLE_USER_MODE_FAILED                   8590
+#define ERROR_DS_NTDSCRIPT_SYNTAX_ERROR                    8591
+#define ERROR_DS_NTDSCRIPT_PROCESS_ERROR                   8592
+#define ERROR_DS_DIFFERENT_REPL_EPOCHS                     8593
+#define ERROR_DS_DRS_EXTENSIONS_CHANGED                    8594
+#define ERROR_DS_REPLICA_SET_CHANGE_NOT_ALLOWED_ON_DISABLED_CR 8595
+#define ERROR_DS_NO_MSDS_INTID                             8596
+#define ERROR_DS_DUP_MSDS_INTID                            8597
+#define ERROR_DS_EXISTS_IN_RDNATTID                        8598
+#define ERROR_DS_AUTHORIZATION_FAILED                      8599
+#define ERROR_DS_INVALID_SCRIPT                            8600
+#define ERROR_DS_REMOTE_CROSSREF_OP_FAILED                 8601
+#define ERROR_DS_CROSS_REF_BUSY                            8602
+#define ERROR_DS_CANT_DERIVE_SPN_FOR_DELETED_DOMAIN        8603
+#define ERROR_DS_CANT_DEMOTE_WITH_WRITEABLE_NC             8604
+#define ERROR_DS_DUPLICATE_ID_FOUND                        8605
+#define ERROR_DS_INSUFFICIENT_ATTR_TO_CREATE_OBJECT        8606
+#define ERROR_DS_GROUP_CONVERSION_ERROR                    8607
+#define ERROR_DS_CANT_MOVE_APP_BASIC_GROUP                 8608
+#define ERROR_DS_CANT_MOVE_APP_QUERY_GROUP                 8609
+#define ERROR_DS_ROLE_NOT_VERIFIED                         8610
+#define ERROR_DS_WKO_CONTAINER_CANNOT_BE_SPECIAL           8611
+#define ERROR_DS_DOMAIN_RENAME_IN_PROGRESS                 8612
+#define ERROR_DS_EXISTING_AD_CHILD_NC                      8613
+#define ERROR_DS_REPL_LIFETIME_EXCEEDED                    8614
+#define ERROR_DS_DISALLOWED_IN_SYSTEM_CONTAINER            8615
+#define ERROR_DS_LDAP_SEND_QUEUE_FULL                      8616
+#define ERROR_DS_DRA_OUT_SCHEDULE_WINDOW                   8617
+#define ERROR_DS_POLICY_NOT_KNOWN                          8618
+#define ERROR_NO_SITE_SETTINGS_OBJECT                      8619
+#define ERROR_NO_SECRETS                                   8620
+#define ERROR_NO_WRITABLE_DC_FOUND                         8621
+#define ERROR_DS_NO_SERVER_OBJECT                          8622
+#define ERROR_DS_NO_NTDSA_OBJECT                           8623
+#define ERROR_DS_NON_ASQ_SEARCH                            8624
+#define ERROR_DS_AUDIT_FAILURE                             8625
+#define ERROR_DS_INVALID_SEARCH_FLAG_SUBTREE               8626
+#define ERROR_DS_INVALID_SEARCH_FLAG_TUPLE                 8627
+#define ERROR_DS_HIERARCHY_TABLE_TOO_DEEP                  8628
+#define ERROR_DS_DRA_CORRUPT_UTD_VECTOR                    8629
+#define ERROR_DS_DRA_SECRETS_DENIED                        8630
+#define ERROR_DS_RESERVED_MAPI_ID                          8631
+#define ERROR_DS_MAPI_ID_NOT_AVAILABLE                     8632
+#define ERROR_DS_DRA_MISSING_KRBTGT_SECRET                 8633
+#define ERROR_DS_DOMAIN_NAME_EXISTS_IN_FOREST              8634
+#define ERROR_DS_FLAT_NAME_EXISTS_IN_FOREST                8635
+#define ERROR_INVALID_USER_PRINCIPAL_NAME                  8636
+#define ERROR_DS_OID_MAPPED_GROUP_CANT_HAVE_MEMBERS        8637
+#define ERROR_DS_OID_NOT_FOUND                             8638
+#define ERROR_DS_DRA_RECYCLED_TARGET                       8639
+#define ERROR_DS_DISALLOWED_NC_REDIRECT                    8640
+#define ERROR_DS_HIGH_ADLDS_FFL                            8641
+#define ERROR_DS_HIGH_DSA_VERSION                          8642
+#define ERROR_DS_LOW_ADLDS_FFL                             8643
+#define ERROR_DOMAIN_SID_SAME_AS_LOCAL_WORKSTATION         8644
+#define ERROR_DS_UNDELETE_SAM_VALIDATION_FAILED            8645
+#define ERROR_INCORRECT_ACCOUNT_TYPE                       8646
+#define ERROR_DS_SPN_VALUE_NOT_UNIQUE_IN_FOREST            8647
+#define ERROR_DS_UPN_VALUE_NOT_UNIQUE_IN_FOREST            8648
+#define ERROR_DS_MISSING_FOREST_TRUST                      8649
+#define ERROR_DS_VALUE_KEY_NOT_UNIQUE                      8650
 #define DNS_ERROR_RCODE_FORMAT_ERROR                       9001
 #define DNS_ERROR_RCODE_SERVER_FAILURE                     9002
 #define DNS_ERROR_RCODE_NAME_ERROR                         9003
@@ -2074,10 +2524,31 @@
 #define ERROR_APPX_INTEGRITY_FAILURE_CLR_NGEN              15624
 #define ERROR_RESILIENCY_FILE_CORRUPT                      15625
 #define ERROR_INSTALL_FIREWALL_SERVICE_NOT_RUNNING         15626
+#define ERROR_PACKAGE_MOVE_FAILED                          15627
+#define ERROR_INSTALL_VOLUME_NOT_EMPTY                     15628
+#define ERROR_INSTALL_VOLUME_OFFLINE                       15629
+#define ERROR_INSTALL_VOLUME_CORRUPT                       15630
+#define ERROR_NEEDS_REGISTRATION                           15631
+#define ERROR_INSTALL_WRONG_PROCESSOR_ARCHITECTURE         15632
+#define ERROR_DEV_SIDELOAD_LIMIT_EXCEEDED                  15633
+#define ERROR_INSTALL_OPTIONAL_PACKAGE_REQUIRES_MAIN_PACKAGE 15634
+#define ERROR_PACKAGE_NOT_SUPPORTED_ON_FILESYSTEM          15635
+#define ERROR_PACKAGE_MOVE_BLOCKED_BY_STREAMING            15636
+#define ERROR_INSTALL_OPTIONAL_PACKAGE_APPLICATIONID_NOT_UNIQUE 15637
+#define ERROR_PACKAGE_STAGING_ONHOLD                       15638
+#define ERROR_INSTALL_INVALID_RELATED_SET_UPDATE           15639
+#define ERROR_INSTALL_OPTIONAL_PACKAGE_REQUIRES_MAIN_PACKAGE_FULLTRUST_CAPABILITY 15640
+#define ERROR_DEPLOYMENT_BLOCKED_BY_USER_LOG_OFF           15641
+#define ERROR_PROVISION_OPTIONAL_PACKAGE_REQUIRES_MAIN_PACKAGE_PROVISIONED 15642
+#define ERROR_PACKAGES_REPUTATION_CHECK_FAILED             15643
+#define ERROR_PACKAGES_REPUTATION_CHECK_TIMEDOUT           15644
 #define APPMODEL_ERROR_NO_PACKAGE                          15700
 #define APPMODEL_ERROR_PACKAGE_RUNTIME_CORRUPT             15701
 #define APPMODEL_ERROR_PACKAGE_IDENTITY_CORRUPT            15702
 #define APPMODEL_ERROR_NO_APPLICATION                      15703
+#define APPMODEL_ERROR_DYNAMIC_PROPERTY_READ_FAILED        15704
+#define APPMODEL_ERROR_DYNAMIC_PROPERTY_INVALID            15705
+#define APPMODEL_ERROR_PACKAGE_NOT_AVAILABLE               15706
 
 /* HRESULT values for OLE, SHELL and other Interface stuff */
 /* the codes 4000-40ff are reserved for OLE */
@@ -2088,8 +2559,10 @@
 
 #ifdef RC_INVOKED
 #define _HRESULT_TYPEDEF_(x) (x)
+#define _NDIS_ERROR_TYPEDEF_(x) (x)
 #else
 #define _HRESULT_TYPEDEF_(x) ((HRESULT)x)
+#define _NDIS_ERROR_TYPEDEF_(x) ((DWORD)x)
 #endif
 
 #define NOERROR                                            _HRESULT_TYPEDEF_(0)
@@ -2099,7 +2572,9 @@
 
 #define E_PENDING                                          _HRESULT_TYPEDEF_(0x8000000A)
 #define E_BOUNDS                                           _HRESULT_TYPEDEF_(0x8000000B)
-
+#define E_CHANGED_STATE                                    _HRESULT_TYPEDEF_(0x8000000C)
+#define E_ILLEGAL_STATE_CHANGE                             _HRESULT_TYPEDEF_(0x8000000D)
+#define E_ILLEGAL_METHOD_CALL                              _HRESULT_TYPEDEF_(0x8000000E)
 
 #define E_NOTIMPL                                          _HRESULT_TYPEDEF_(0x80004001)
 #define E_NOINTERFACE                                      _HRESULT_TYPEDEF_(0x80004002)
@@ -2293,6 +2768,23 @@
 #define STG_E_NOTFILEBASEDSTORAGE                          _HRESULT_TYPEDEF_(0x80030107)
 #define STG_E_EXTANTMARSHALLINGS                           _HRESULT_TYPEDEF_(0x80030108)
 #define STG_E_DOCFILECORRUPT                               _HRESULT_TYPEDEF_(0x80030109)
+#define STG_E_BADBASEADDRESS                               _HRESULT_TYPEDEF_(0x80030110)
+#define STG_E_DOCFILETOOLARGE                              _HRESULT_TYPEDEF_(0x80030111)
+#define STG_E_NOTSIMPLEFORMAT                              _HRESULT_TYPEDEF_(0x80030112)
+
+#define STG_E_INCOMPLETE                                   _HRESULT_TYPEDEF_(0x80030201)
+#define STG_E_TERMINATED                                   _HRESULT_TYPEDEF_(0x80030202)
+#define STG_S_CONVERTED                                    _HRESULT_TYPEDEF_(0x00030200)
+#define STG_S_BLOCK                                        _HRESULT_TYPEDEF_(0x00030201)
+#define STG_S_RETRYNOW                                     _HRESULT_TYPEDEF_(0x00030202)
+#define STG_S_MONITORING                                   _HRESULT_TYPEDEF_(0x00030203)
+#define STG_S_MULTIPLEOPENS                                _HRESULT_TYPEDEF_(0x00030204)
+#define STG_S_CONSOLIDATIONFAILED                          _HRESULT_TYPEDEF_(0x00030205)
+#define STG_S_CANNOTCONSOLIDATE                            _HRESULT_TYPEDEF_(0x00030206)
+#define STG_S_POWER_CYCLE_REQUIRED                         _HRESULT_TYPEDEF_(0x00030207)
+#define STG_E_FIRMWARE_SLOT_INVALID                        _HRESULT_TYPEDEF_(0x80030208)
+#define STG_E_FIRMWARE_IMAGE_INVALID                       _HRESULT_TYPEDEF_(0x80030209)
+#define STG_E_DEVICE_UNRESPONSIVE                          _HRESULT_TYPEDEF_(0x8003020A)
 
 #define STG_E_STATUS_COPY_PROTECTION_FAILURE               _HRESULT_TYPEDEF_(0x80030305)
 #define STG_E_CSS_AUTHENTICATION_FAILURE                   _HRESULT_TYPEDEF_(0x80030306)
@@ -2592,8 +3084,6 @@
 #define E_OUTOFMEMORY                                      _HRESULT_TYPEDEF_(0x8007000E)
 #define E_INVALIDARG                                       _HRESULT_TYPEDEF_(0x80070057)
 
-#define CO_S_NOTALLINTERFACES                              _HRESULT_TYPEDEF_(0x00080012)
-
 #define CO_E_CLASS_CREATE_FAILED                           _HRESULT_TYPEDEF_(0x80080001)
 #define CO_E_SCM_ERROR                                     _HRESULT_TYPEDEF_(0x80080002)
 #define CO_E_SCM_RPC_FAILURE                               _HRESULT_TYPEDEF_(0x80080003)
@@ -2605,6 +3095,11 @@
 #define MEM_E_INVALID_ROOT                                 _HRESULT_TYPEDEF_(0x80080009)
 #define MEM_E_INVALID_LINK                                 _HRESULT_TYPEDEF_(0x80080010)
 #define MEM_E_INVALID_SIZE                                 _HRESULT_TYPEDEF_(0x80080011)
+#define CO_S_NOTALLINTERFACES                              _HRESULT_TYPEDEF_(0x00080012)
+
+#define ERROR_AUDITING_DISABLED                            _HRESULT_TYPEDEF_(0xC0090001)
+#define ERROR_ALL_SIDS_FILTERED                            _HRESULT_TYPEDEF_(0xC0090002)
+#define ERROR_BIZRULES_NOT_ENABLED                         _HRESULT_TYPEDEF_(0xC0090003)
 
 /*Cryptographic Error Codes */
 #define NTE_BAD_UID                                        _HRESULT_TYPEDEF_(0x80090001)
@@ -2674,10 +3169,6 @@
 #define SEC_E_MESSAGE_ALTERED                              _HRESULT_TYPEDEF_(0x8009030F)
 #define SEC_E_OUT_OF_SEQUENCE                              _HRESULT_TYPEDEF_(0x80090310)
 #define SEC_E_NO_AUTHENTICATING_AUTHORITY                  _HRESULT_TYPEDEF_(0x80090311)
-#define SEC_I_CONTINUE_NEEDED                              _HRESULT_TYPEDEF_(0x00090312)
-#define SEC_I_COMPLETE_NEEDED                              _HRESULT_TYPEDEF_(0x00090313)
-#define SEC_I_COMPLETE_AND_CONTINUE                        _HRESULT_TYPEDEF_(0x00090314)
-#define SEC_I_CONTEXT_EXPIRED                              _HRESULT_TYPEDEF_(0x00090317)
 #define SEC_E_BAD_PKGID                                    _HRESULT_TYPEDEF_(0x80090316)
 #define SEC_E_CONTEXT_EXPIRED                              _HRESULT_TYPEDEF_(0x80090317)
 #define SEC_E_INCOMPLETE_MESSAGE                           _HRESULT_TYPEDEF_(0x80090318)
@@ -2727,6 +3218,26 @@
 #define SEC_E_ISSUING_CA_UNTRUSTED_KDC                     _HRESULT_TYPEDEF_(0x80090359)
 #define SEC_E_KDC_CERT_EXPIRED                             _HRESULT_TYPEDEF_(0x8009035A)
 #define SEC_E_KDC_CERT_REVOKED                             _HRESULT_TYPEDEF_(0x8009035B)
+#define SEC_E_INVALID_PARAMETER                            _HRESULT_TYPEDEF_(0x8009035D)
+#define SEC_E_DELEGATION_POLICY                            _HRESULT_TYPEDEF_(0x8009035E)
+#define SEC_E_POLICY_NLTM_ONLY                             _HRESULT_TYPEDEF_(0x8009035F)
+#define SEC_E_NO_CONTEXT                                   _HRESULT_TYPEDEF_(0x80090361)
+#define SEC_E_PKU2U_CERT_FAILURE                           _HRESULT_TYPEDEF_(0x80090362)
+#define SEC_E_MUTUAL_AUTH_FAILED                           _HRESULT_TYPEDEF_(0x80090363)
+#define SEC_E_ONLY_HTTPS_ALLOWED                           _HRESULT_TYPEDEF_(0x80090365)
+#define SEC_E_APPLICATION_PROTOCOL_MISMATCH                _HRESULT_TYPEDEF_(0x80090367)
+#define SEC_E_INVALID_UPN_NAME                             _HRESULT_TYPEDEF_(0x80090369)
+
+#define SEC_I_CONTINUE_NEEDED                              _HRESULT_TYPEDEF_(0x00090312)
+#define SEC_I_COMPLETE_NEEDED                              _HRESULT_TYPEDEF_(0x00090313)
+#define SEC_I_COMPLETE_AND_CONTINUE                        _HRESULT_TYPEDEF_(0x00090314)
+#define SEC_I_CONTEXT_EXPIRED                              _HRESULT_TYPEDEF_(0x00090317)
+#define SEC_I_RENEGOTIATE                                  _HRESULT_TYPEDEF_(0x00090321)
+#define SEC_I_SIGNATURE_NEEDED                             _HRESULT_TYPEDEF_(0x0009035C)
+#define SEC_I_NO_RENEGOTIATION                             _HRESULT_TYPEDEF_(0x00090360)
+#define SEC_I_MESSAGE_FRAGMENT                             _HRESULT_TYPEDEF_(0x00090364)
+#define SEC_I_CONTINUE_NEEDED_MESSAGE_OK                   _HRESULT_TYPEDEF_(0x00090366)
+#define SEC_I_ASYNC_CALL_PENDING                           _HRESULT_TYPEDEF_(0x00090368)
 
 #define CRYPT_E_MSG_ERROR                                  _HRESULT_TYPEDEF_(0x80091001)
 #define CRYPT_E_UNKNOWN_ALGO                               _HRESULT_TYPEDEF_(0x80091002)
@@ -2855,6 +3366,31 @@
 #define TRUST_E_BAD_DIGEST                                 _HRESULT_TYPEDEF_(0x80096010)
 #define TRUST_E_BASIC_CONSTRAINTS                          _HRESULT_TYPEDEF_(0x80096019)
 #define TRUST_E_FINANCIAL_CRITERIA                         _HRESULT_TYPEDEF_(0x8009601E)
+
+#define MSSIPOTF_E_OUTOFMEMRANGE                           _HRESULT_TYPEDEF_(0x80097001)
+#define MSSIPOTF_E_CANTGETOBJECT                           _HRESULT_TYPEDEF_(0x80097002)
+#define MSSIPOTF_E_NOHEADTABLE                             _HRESULT_TYPEDEF_(0x80097003)
+#define MSSIPOTF_E_BAD_MAGICNUMBER                         _HRESULT_TYPEDEF_(0x80097004)
+#define MSSIPOTF_E_BAD_OFFSET_TABLE                        _HRESULT_TYPEDEF_(0x80097005)
+#define MSSIPOTF_E_TABLE_TAGORDER                          _HRESULT_TYPEDEF_(0x80097006)
+#define MSSIPOTF_E_TABLE_LONGWORD                          _HRESULT_TYPEDEF_(0x80097007)
+#define MSSIPOTF_E_BAD_FIRST_TABLE_PLACEMENT               _HRESULT_TYPEDEF_(0x80097008)
+#define MSSIPOTF_E_TABLES_OVERLAP                          _HRESULT_TYPEDEF_(0x80097009)
+#define MSSIPOTF_E_TABLE_PADBYTES                          _HRESULT_TYPEDEF_(0x8009700A)
+#define MSSIPOTF_E_FILETOOSMALL                            _HRESULT_TYPEDEF_(0x8009700B)
+#define MSSIPOTF_E_TABLE_CHECKSUM                          _HRESULT_TYPEDEF_(0x8009700C)
+#define MSSIPOTF_E_FILE_CHECKSUM                           _HRESULT_TYPEDEF_(0x8009700D)
+#define MSSIPOTF_E_FAILED_POLICY                           _HRESULT_TYPEDEF_(0x80097010)
+#define MSSIPOTF_E_FAILED_HINTS_CHECK                      _HRESULT_TYPEDEF_(0x80097011)
+#define MSSIPOTF_E_NOT_OPENTYPE                            _HRESULT_TYPEDEF_(0x80097012)
+#define MSSIPOTF_E_FILE                                    _HRESULT_TYPEDEF_(0x80097013)
+#define MSSIPOTF_E_CRYPT                                   _HRESULT_TYPEDEF_(0x80097014)
+#define MSSIPOTF_E_BADVERSION                              _HRESULT_TYPEDEF_(0x80097015)
+#define MSSIPOTF_E_DSIG_STRUCTURE                          _HRESULT_TYPEDEF_(0x80097016)
+#define MSSIPOTF_E_PCONST_CHECK                            _HRESULT_TYPEDEF_(0x80097017)
+#define MSSIPOTF_E_STRUCTURE                               _HRESULT_TYPEDEF_(0x80097018)
+#define ERROR_CRED_REQUIRES_CONFIRMATION                   _HRESULT_TYPEDEF_(0x80097019)
+
 #define TRUST_E_PROVIDER_UNKNOWN                           _HRESULT_TYPEDEF_(0x800B0001)
 #define TRUST_E_ACTION_UNKNOWN                             _HRESULT_TYPEDEF_(0x800B0002)
 #define TRUST_E_SUBJECT_FORM_UNKNOWN                       _HRESULT_TYPEDEF_(0x800B0003)
@@ -3093,6 +3629,7 @@
 #define WININET_E_LOGIN_FAILURE_DISPLAY_ENTITY_BODY        _HRESULT_TYPEDEF_(0x80072f8e)
 #define WININET_E_DECODING_FAILED                          _HRESULT_TYPEDEF_(0x80072f8f)
 
+#define ERROR_HUNG_DISPLAY_DRIVER_THREAD                   _HRESULT_TYPEDEF_(0x80260001)
 #define DWM_E_COMPOSITIONDISABLED                          _HRESULT_TYPEDEF_(0x80263001)
 #define DWM_E_REMOTING_NOT_SUPPORTED                       _HRESULT_TYPEDEF_(0x80263002)
 #define DWM_E_NO_REDIRECTION_SURFACE_AVAILABLE             _HRESULT_TYPEDEF_(0x80263003)
@@ -3126,6 +3663,120 @@
 #define UI_E_PRIMITIVE_OUT_OF_BOUNDS                       _HRESULT_TYPEDEF_(0x802a010c)
 #define UI_E_WINDOW_CLOSED                                 _HRESULT_TYPEDEF_(0x802a0201)
 
+#define ERROR_VOLMGR_INCOMPLETE_REGENERATION               _NDIS_ERROR_TYPEDEF_(0x80380001)
+#define ERROR_VOLMGR_INCOMPLETE_DISK_MIGRATION             _NDIS_ERROR_TYPEDEF_(0x80380002)
+#define ERROR_VOLMGR_DATABASE_FULL                         _NDIS_ERROR_TYPEDEF_(0xC0380001)
+#define ERROR_VOLMGR_DISK_CONFIGURATION_CORRUPTED          _NDIS_ERROR_TYPEDEF_(0xC0380002)
+#define ERROR_VOLMGR_DISK_CONFIGURATION_NOT_IN_SYNC        _NDIS_ERROR_TYPEDEF_(0xC0380003)
+#define ERROR_VOLMGR_PACK_CONFIG_UPDATE_FAILED             _NDIS_ERROR_TYPEDEF_(0xC0380004)
+#define ERROR_VOLMGR_DISK_CONTAINS_NON_SIMPLE_VOLUME       _NDIS_ERROR_TYPEDEF_(0xC0380005)
+#define ERROR_VOLMGR_DISK_DUPLICATE                        _NDIS_ERROR_TYPEDEF_(0xC0380006)
+#define ERROR_VOLMGR_DISK_DYNAMIC                          _NDIS_ERROR_TYPEDEF_(0xC0380007)
+#define ERROR_VOLMGR_DISK_ID_INVALID                       _NDIS_ERROR_TYPEDEF_(0xC0380008)
+#define ERROR_VOLMGR_DISK_INVALID                          _NDIS_ERROR_TYPEDEF_(0xC0380009)
+#define ERROR_VOLMGR_DISK_LAST_VOTER                       _NDIS_ERROR_TYPEDEF_(0xC038000A)
+#define ERROR_VOLMGR_DISK_LAYOUT_INVALID                   _NDIS_ERROR_TYPEDEF_(0xC038000B)
+#define ERROR_VOLMGR_DISK_LAYOUT_NON_BASIC_BETWEEN_BASIC_PARTITIONS _NDIS_ERROR_TYPEDEF_(0xC038000C)
+#define ERROR_VOLMGR_DISK_LAYOUT_NOT_CYLINDER_ALIGNED      _NDIS_ERROR_TYPEDEF_(0xC038000D)
+#define ERROR_VOLMGR_DISK_LAYOUT_PARTITIONS_TOO_SMALL      _NDIS_ERROR_TYPEDEF_(0xC038000E)
+#define ERROR_VOLMGR_DISK_LAYOUT_PRIMARY_BETWEEN_LOGICAL_PARTITIONS _NDIS_ERROR_TYPEDEF_(0xC038000F)
+#define ERROR_VOLMGR_DISK_LAYOUT_TOO_MANY_PARTITIONS       _NDIS_ERROR_TYPEDEF_(0xC0380010)
+#define ERROR_VOLMGR_DISK_MISSING                          _NDIS_ERROR_TYPEDEF_(0xC0380011)
+#define ERROR_VOLMGR_DISK_NOT_EMPTY                        _NDIS_ERROR_TYPEDEF_(0xC0380012)
+#define ERROR_VOLMGR_DISK_NOT_ENOUGH_SPACE                 _NDIS_ERROR_TYPEDEF_(0xC0380013)
+#define ERROR_VOLMGR_DISK_REVECTORING_FAILED               _NDIS_ERROR_TYPEDEF_(0xC0380014)
+#define ERROR_VOLMGR_DISK_SECTOR_SIZE_INVALID              _NDIS_ERROR_TYPEDEF_(0xC0380015)
+#define ERROR_VOLMGR_DISK_SET_NOT_CONTAINED                _NDIS_ERROR_TYPEDEF_(0xC0380016)
+#define ERROR_VOLMGR_DISK_USED_BY_MULTIPLE_MEMBERS         _NDIS_ERROR_TYPEDEF_(0xC0380017)
+#define ERROR_VOLMGR_DISK_USED_BY_MULTIPLE_PLEXES          _NDIS_ERROR_TYPEDEF_(0xC0380018)
+#define ERROR_VOLMGR_DYNAMIC_DISK_NOT_SUPPORTED            _NDIS_ERROR_TYPEDEF_(0xC0380019)
+#define ERROR_VOLMGR_EXTENT_ALREADY_USED                   _NDIS_ERROR_TYPEDEF_(0xC038001A)
+#define ERROR_VOLMGR_EXTENT_NOT_CONTIGUOUS                 _NDIS_ERROR_TYPEDEF_(0xC038001B)
+#define ERROR_VOLMGR_EXTENT_NOT_IN_PUBLIC_REGION           _NDIS_ERROR_TYPEDEF_(0xC038001C)
+#define ERROR_VOLMGR_EXTENT_NOT_SECTOR_ALIGNED             _NDIS_ERROR_TYPEDEF_(0xC038001D)
+#define ERROR_VOLMGR_EXTENT_OVERLAPS_EBR_PARTITION         _NDIS_ERROR_TYPEDEF_(0xC038001E)
+#define ERROR_VOLMGR_EXTENT_VOLUME_LENGTHS_DO_NOT_MATCH    _NDIS_ERROR_TYPEDEF_(0xC038001F)
+#define ERROR_VOLMGR_FAULT_TOLERANT_NOT_SUPPORTED          _NDIS_ERROR_TYPEDEF_(0xC0380020)
+#define ERROR_VOLMGR_INTERLEAVE_LENGTH_INVALID             _NDIS_ERROR_TYPEDEF_(0xC0380021)
+#define ERROR_VOLMGR_MAXIMUM_REGISTERED_USERS              _NDIS_ERROR_TYPEDEF_(0xC0380022)
+#define ERROR_VOLMGR_MEMBER_IN_SYNC                        _NDIS_ERROR_TYPEDEF_(0xC0380023)
+#define ERROR_VOLMGR_MEMBER_INDEX_DUPLICATE                _NDIS_ERROR_TYPEDEF_(0xC0380024)
+#define ERROR_VOLMGR_MEMBER_INDEX_INVALID                  _NDIS_ERROR_TYPEDEF_(0xC0380025)
+#define ERROR_VOLMGR_MEMBER_MISSING                        _NDIS_ERROR_TYPEDEF_(0xC0380026)
+#define ERROR_VOLMGR_MEMBER_NOT_DETACHED                   _NDIS_ERROR_TYPEDEF_(0xC0380027)
+#define ERROR_VOLMGR_MEMBER_REGENERATING                   _NDIS_ERROR_TYPEDEF_(0xC0380028)
+#define ERROR_VOLMGR_ALL_DISKS_FAILED                      _NDIS_ERROR_TYPEDEF_(0xC0380029)
+#define ERROR_VOLMGR_NO_REGISTERED_USERS                   _NDIS_ERROR_TYPEDEF_(0xC038002A)
+#define ERROR_VOLMGR_NO_SUCH_USER                          _NDIS_ERROR_TYPEDEF_(0xC038002B)
+#define ERROR_VOLMGR_NOTIFICATION_RESET                    _NDIS_ERROR_TYPEDEF_(0xC038002C)
+#define ERROR_VOLMGR_NUMBER_OF_MEMBERS_INVALID             _NDIS_ERROR_TYPEDEF_(0xC038002D)
+#define ERROR_VOLMGR_NUMBER_OF_PLEXES_INVALID              _NDIS_ERROR_TYPEDEF_(0xC038002E)
+#define ERROR_VOLMGR_PACK_DUPLICATE                        _NDIS_ERROR_TYPEDEF_(0xC038002F)
+#define ERROR_VOLMGR_PACK_ID_INVALID                       _NDIS_ERROR_TYPEDEF_(0xC0380030)
+#define ERROR_VOLMGR_PACK_INVALID                          _NDIS_ERROR_TYPEDEF_(0xC0380031)
+#define ERROR_VOLMGR_PACK_NAME_INVALID                     _NDIS_ERROR_TYPEDEF_(0xC0380032)
+#define ERROR_VOLMGR_PACK_OFFLINE                          _NDIS_ERROR_TYPEDEF_(0xC0380033)
+#define ERROR_VOLMGR_PACK_HAS_QUORUM                       _NDIS_ERROR_TYPEDEF_(0xC0380034)
+#define ERROR_VOLMGR_PACK_WITHOUT_QUORUM                   _NDIS_ERROR_TYPEDEF_(0xC0380035)
+#define ERROR_VOLMGR_PARTITION_STYLE_INVALID               _NDIS_ERROR_TYPEDEF_(0xC0380036)
+#define ERROR_VOLMGR_PARTITION_UPDATE_FAILED               _NDIS_ERROR_TYPEDEF_(0xC0380037)
+#define ERROR_VOLMGR_PLEX_IN_SYNC                          _NDIS_ERROR_TYPEDEF_(0xC0380038)
+#define ERROR_VOLMGR_PLEX_INDEX_DUPLICATE                  _NDIS_ERROR_TYPEDEF_(0xC0380039)
+#define ERROR_VOLMGR_PLEX_INDEX_INVALID                    _NDIS_ERROR_TYPEDEF_(0xC038003A)
+#define ERROR_VOLMGR_PLEX_LAST_ACTIVE                      _NDIS_ERROR_TYPEDEF_(0xC038003B)
+#define ERROR_VOLMGR_PLEX_MISSING                          _NDIS_ERROR_TYPEDEF_(0xC038003C)
+#define ERROR_VOLMGR_PLEX_REGENERATING                     _NDIS_ERROR_TYPEDEF_(0xC038003D)
+#define ERROR_VOLMGR_PLEX_TYPE_INVALID                     _NDIS_ERROR_TYPEDEF_(0xC038003E)
+#define ERROR_VOLMGR_PLEX_NOT_RAID5                        _NDIS_ERROR_TYPEDEF_(0xC038003F)
+#define ERROR_VOLMGR_PLEX_NOT_SIMPLE                       _NDIS_ERROR_TYPEDEF_(0xC0380040)
+#define ERROR_VOLMGR_STRUCTURE_SIZE_INVALID                _NDIS_ERROR_TYPEDEF_(0xC0380041)
+#define ERROR_VOLMGR_TOO_MANY_NOTIFICATION_REQUESTS        _NDIS_ERROR_TYPEDEF_(0xC0380042)
+#define ERROR_VOLMGR_TRANSACTION_IN_PROGRESS               _NDIS_ERROR_TYPEDEF_(0xC0380043)
+#define ERROR_VOLMGR_UNEXPECTED_DISK_LAYOUT_CHANGE         _NDIS_ERROR_TYPEDEF_(0xC0380044)
+#define ERROR_VOLMGR_VOLUME_CONTAINS_MISSING_DISK          _NDIS_ERROR_TYPEDEF_(0xC0380045)
+#define ERROR_VOLMGR_VOLUME_ID_INVALID                     _NDIS_ERROR_TYPEDEF_(0xC0380046)
+#define ERROR_VOLMGR_VOLUME_LENGTH_INVALID                 _NDIS_ERROR_TYPEDEF_(0xC0380047)
+#define ERROR_VOLMGR_VOLUME_LENGTH_NOT_SECTOR_SIZE_MULTIPLE _NDIS_ERROR_TYPEDEF_(0xC0380048)
+#define ERROR_VOLMGR_VOLUME_NOT_MIRRORED                   _NDIS_ERROR_TYPEDEF_(0xC0380049)
+#define ERROR_VOLMGR_VOLUME_NOT_RETAINED                   _NDIS_ERROR_TYPEDEF_(0xC038004A)
+#define ERROR_VOLMGR_VOLUME_OFFLINE                        _NDIS_ERROR_TYPEDEF_(0xC038004B)
+#define ERROR_VOLMGR_VOLUME_RETAINED                       _NDIS_ERROR_TYPEDEF_(0xC038004C)
+#define ERROR_VOLMGR_NUMBER_OF_EXTENTS_INVALID             _NDIS_ERROR_TYPEDEF_(0xC038004D)
+#define ERROR_VOLMGR_DIFFERENT_SECTOR_SIZE                 _NDIS_ERROR_TYPEDEF_(0xC038004E)
+#define ERROR_VOLMGR_BAD_BOOT_DISK                         _NDIS_ERROR_TYPEDEF_(0xC038004F)
+#define ERROR_VOLMGR_PACK_CONFIG_OFFLINE                   _NDIS_ERROR_TYPEDEF_(0xC0380050)
+#define ERROR_VOLMGR_PACK_CONFIG_ONLINE                    _NDIS_ERROR_TYPEDEF_(0xC0380051)
+#define ERROR_VOLMGR_NOT_PRIMARY_PACK                      _NDIS_ERROR_TYPEDEF_(0xC0380052)
+#define ERROR_VOLMGR_PACK_LOG_UPDATE_FAILED                _NDIS_ERROR_TYPEDEF_(0xC0380053)
+#define ERROR_VOLMGR_NUMBER_OF_DISKS_IN_PLEX_INVALID       _NDIS_ERROR_TYPEDEF_(0xC0380054)
+#define ERROR_VOLMGR_NUMBER_OF_DISKS_IN_MEMBER_INVALID     _NDIS_ERROR_TYPEDEF_(0xC0380055)
+#define ERROR_VOLMGR_VOLUME_MIRRORED                       _NDIS_ERROR_TYPEDEF_(0xC0380056)
+#define ERROR_VOLMGR_PLEX_NOT_SIMPLE_SPANNED               _NDIS_ERROR_TYPEDEF_(0xC0380057)
+#define ERROR_VOLMGR_NO_VALID_LOG_COPIES                   _NDIS_ERROR_TYPEDEF_(0xC0380058)
+#define ERROR_VOLMGR_PRIMARY_PACK_PRESENT                  _NDIS_ERROR_TYPEDEF_(0xC0380059)
+#define ERROR_VOLMGR_NUMBER_OF_DISKS_INVALID               _NDIS_ERROR_TYPEDEF_(0xC038005A)
+#define ERROR_VOLMGR_MIRROR_NOT_SUPPORTED                  _NDIS_ERROR_TYPEDEF_(0xC038005B)
+#define ERROR_VOLMGR_RAID5_NOT_SUPPORTED                   _NDIS_ERROR_TYPEDEF_(0xC038005C)
+
+#define ERROR_SPACES_POOL_WAS_DELETED                      _HRESULT_TYPEDEF_(0x00e70001)
+#define ERROR_SPACES_FAULT_DOMAIN_TYPE_INVALID             _HRESULT_TYPEDEF_(0x80e70001)
+#define ERROR_SPACES_INTERNAL_ERROR                        _HRESULT_TYPEDEF_(0x80e70002)
+#define ERROR_SPACES_RESILIENCY_TYPE_INVALID               _HRESULT_TYPEDEF_(0x80e70003)
+#define ERROR_SPACES_DRIVE_SECTOR_SIZE_INVALID             _HRESULT_TYPEDEF_(0x80e70004)
+#define ERROR_SPACES_DRIVE_REDUNDANCY_INVALID              _HRESULT_TYPEDEF_(0x80e70006)
+#define ERROR_SPACES_NUMBER_OF_DATA_COPIES_INVALID         _HRESULT_TYPEDEF_(0x80e70007)
+#define ERROR_SPACES_PARITY_LAYOUT_INVALID                 _HRESULT_TYPEDEF_(0x80e70008)
+#define ERROR_SPACES_INTERLEAVE_LENGTH_INVALID             _HRESULT_TYPEDEF_(0x80e70009)
+#define ERROR_SPACES_NUMBER_OF_COLUMNS_INVALID             _HRESULT_TYPEDEF_(0x80e7000a)
+#define ERROR_SPACES_NOT_ENOUGH_DRIVES                     _HRESULT_TYPEDEF_(0x80e7000b)
+#define ERROR_SPACES_EXTENDED_ERROR                        _HRESULT_TYPEDEF_(0x80e7000c)
+#define ERROR_SPACES_PROVISIONING_TYPE_INVALID             _HRESULT_TYPEDEF_(0x80e7000d)
+#define ERROR_SPACES_ALLOCATION_SIZE_INVALID               _HRESULT_TYPEDEF_(0x80e7000e)
+#define ERROR_SPACES_ENCLOSURE_AWARE_INVALID               _HRESULT_TYPEDEF_(0x80e7000f)
+#define ERROR_SPACES_WRITE_CACHE_SIZE_INVALID              _HRESULT_TYPEDEF_(0x80e70010)
+#define ERROR_SPACES_NUMBER_OF_GROUPS_INVALID              _HRESULT_TYPEDEF_(0x80e70011)
+#define ERROR_SPACES_DRIVE_OPERATIONAL_STATE_INVALID       _HRESULT_TYPEDEF_(0x80e70012)
+
 #define D3D11_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS          _HRESULT_TYPEDEF_(0x887c0001)
 #define D3D11_ERROR_FILE_NOT_FOUND                         _HRESULT_TYPEDEF_(0x887c0002)
 #define D3D11_ERROR_TOO_MANY_UNIQUE_VIEW_OBJECTS           _HRESULT_TYPEDEF_(0x887c0003)
diff --git a/mingw-w64-tools/widl/include/winnls.h b/mingw-w64-tools/widl/include/winnls.h
index c7c2cfb..e7b478b 100644
--- a/mingw-w64-tools/widl/include/winnls.h
+++ b/mingw-w64-tools/widl/include/winnls.h
@@ -735,6 +735,8 @@
     DWORD dwNLSVersionInfoSize;
     DWORD dwNLSVersion;
     DWORD dwDefinedVersion;
+    DWORD dwEffectiveId;
+    GUID  guidCustomVersion;
 } NLSVERSIONINFO, *LPNLSVERSIONINFO;
 
 typedef struct _nlsversioninfoex {
@@ -745,6 +747,9 @@
     GUID  guidCustomVersion;
 } NLSVERSIONINFOEX, *LPNLSVERSIONINFOEX;
 
+enum SYSNLS_FUNCTION { COMPARE_STRING = 1 };
+typedef DWORD NLS_FUNCTION;
+
 /* Define a bunch of callback types */
 
 typedef BOOL    (CALLBACK *CALINFO_ENUMPROCEXEX)(LPWSTR,CALID,LPWSTR,LPARAM);
@@ -913,6 +918,8 @@
 WINBASEAPI INT         WINAPI GetLocaleInfoW(LCID,LCTYPE,LPWSTR,INT);
 #define                       GetLocaleInfo WINELIB_NAME_AW(GetLocaleInfo)
 WINBASEAPI INT         WINAPI GetLocaleInfoEx(LPCWSTR,LCTYPE,LPWSTR,INT);
+WINBASEAPI BOOL        WINAPI GetNLSVersion(NLS_FUNCTION,LCID,NLSVERSIONINFO*);
+WINBASEAPI BOOL        WINAPI GetNLSVersionEx(NLS_FUNCTION,LPCWSTR,NLSVERSIONINFOEX*);
 WINBASEAPI INT         WINAPI GetNumberFormatA(LCID,DWORD,LPCSTR,const NUMBERFMTA*,LPSTR,INT);
 WINBASEAPI INT         WINAPI GetNumberFormatW(LCID,DWORD,LPCWSTR,const NUMBERFMTW*,LPWSTR,INT);
 #define                       GetNumberFormat WINELIB_NAME_AW(GetNumberFormat)
@@ -950,6 +957,7 @@
 WINBASEAPI BOOL        WINAPI IsValidLanguageGroup(LGRPID,DWORD);
 WINBASEAPI BOOL        WINAPI IsValidLocale(LCID,DWORD);
 WINBASEAPI BOOL        WINAPI IsValidLocaleName(LPCWSTR);
+WINBASEAPI DWORD       WINAPI IsValidNLSVersion(NLS_FUNCTION,LPCWSTR,NLSVERSIONINFOEX*);
 WINBASEAPI INT         WINAPI LCIDToLocaleName(LCID,LPWSTR,INT,DWORD);
 WINBASEAPI INT         WINAPI LCMapStringA(LCID,DWORD,LPCSTR,INT,LPSTR,INT);
 WINBASEAPI INT         WINAPI LCMapStringW(LCID,DWORD,LPCWSTR,INT,LPWSTR,INT);
diff --git a/mingw-w64-tools/widl/include/winnt.h b/mingw-w64-tools/widl/include/winnt.h
index 56734f1..46e17c5 100644
--- a/mingw-w64-tools/widl/include/winnt.h
+++ b/mingw-w64-tools/widl/include/winnt.h
@@ -388,11 +388,7 @@
 
 /* Compile time assertion */
 
-#if defined(_MSC_VER)
-# define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1]
-#else
-# define C_ASSERT(e) extern void __C_ASSERT__(int [(e)?1:-1])
-#endif
+#define C_ASSERT(e) extern void __C_ASSERT__(int [(e)?1:-1])
 
 /* Eliminate Microsoft C/C++ compiler warning 4715 */
 #if defined(_MSC_VER) && (_MSC_VER > 1200)
@@ -456,18 +452,21 @@
 typedef BYTE            BOOLEAN,    *PBOOLEAN;
 typedef char            CHAR,       *PCHAR;
 typedef short           SHORT,      *PSHORT;
-#ifdef _MSC_VER
+#ifdef WINE_USE_LONG
 typedef long            LONG,       *PLONG;
 #else
 typedef int             LONG,       *PLONG;
 #endif
 
 /* Some systems might have wchar_t, but we really need 16 bit characters */
-#ifdef WINE_UNICODE_NATIVE
-typedef wchar_t         WCHAR,      *PWCHAR;
+#if defined(WINE_UNICODE_NATIVE)
+typedef wchar_t         WCHAR;
+#elif defined(WINE_UNICODE_CHAR16)
+typedef char16_t        WCHAR;
 #else
-typedef unsigned short  WCHAR,      *PWCHAR;
+typedef unsigned short  WCHAR;
 #endif
+typedef WCHAR          *PWCHAR;
 
 typedef ULONG           UCSCHAR;
 #define MIN_UCSCHAR                 (0)
@@ -607,10 +606,13 @@
 #define STATUS_TIMEOUT                   ((DWORD) 0x00000102)
 #define STATUS_PENDING                   ((DWORD) 0x00000103)
 #define STATUS_SEGMENT_NOTIFICATION      ((DWORD) 0x40000005)
+#define STATUS_FATAL_APP_EXIT            ((DWORD) 0x40000015)
 #define STATUS_GUARD_PAGE_VIOLATION      ((DWORD) 0x80000001)
 #define STATUS_DATATYPE_MISALIGNMENT     ((DWORD) 0x80000002)
 #define STATUS_BREAKPOINT                ((DWORD) 0x80000003)
 #define STATUS_SINGLE_STEP               ((DWORD) 0x80000004)
+#define STATUS_LONGJUMP                  ((DWORD) 0x80000026)
+#define STATUS_UNWIND_CONSOLIDATE        ((DWORD) 0x80000029)
 #define STATUS_ACCESS_VIOLATION          ((DWORD) 0xC0000005)
 #define STATUS_IN_PAGE_ERROR             ((DWORD) 0xC0000006)
 #define STATUS_INVALID_HANDLE            ((DWORD) 0xC0000008)
@@ -630,16 +632,25 @@
 #define STATUS_INTEGER_OVERFLOW          ((DWORD) 0xC0000095)
 #define STATUS_PRIVILEGED_INSTRUCTION    ((DWORD) 0xC0000096)
 #define STATUS_STACK_OVERFLOW            ((DWORD) 0xC00000FD)
+#define STATUS_DLL_NOT_FOUND             ((DWORD) 0xC0000135)
+#define STATUS_ORDINAL_NOT_FOUND         ((DWORD) 0xC0000138)
+#define STATUS_ENTRYPOINT_NOT_FOUND      ((DWORD) 0xC0000139)
 #define STATUS_CONTROL_C_EXIT            ((DWORD) 0xC000013A)
+#define STATUS_DLL_INIT_FAILED           ((DWORD) 0xC0000142)
 #define STATUS_FLOAT_MULTIPLE_FAULTS     ((DWORD) 0xC00002B4)
 #define STATUS_FLOAT_MULTIPLE_TRAPS      ((DWORD) 0xC00002B5)
 #define STATUS_REG_NAT_CONSUMPTION       ((DWORD) 0xC00002C9)
+#define STATUS_HEAP_CORRUPTION           ((DWORD) 0xC0000374)
+#define STATUS_STACK_BUFFER_OVERRUN      ((DWORD) 0xC0000409)
+#define STATUS_INVALID_CRUNTIME_PARAMETER ((DWORD) 0xC0000417)
+#define STATUS_ASSERTION_FAILURE         ((DWORD) 0xC0000420)
 #define STATUS_SXS_EARLY_DEACTIVATION    ((DWORD) 0xC015000F)
 #define STATUS_SXS_INVALID_DEACTIVATION  ((DWORD) 0xC0150010)
 
 /* status values for ContinueDebugEvent */
 #define DBG_EXCEPTION_HANDLED       ((DWORD) 0x00010001)
 #define DBG_CONTINUE                ((DWORD) 0x00010002)
+#define DBG_REPLY_LATER             ((DWORD) 0x40010001)
 #define DBG_TERMINATE_THREAD        ((DWORD) 0x40010003)
 #define DBG_TERMINATE_PROCESS       ((DWORD) 0x40010004)
 #define DBG_CONTROL_C               ((DWORD) 0x40010005)
@@ -647,6 +658,7 @@
 #define DBG_RIPEXCEPTION            ((DWORD) 0x40010007)
 #define DBG_CONTROL_BREAK           ((DWORD) 0x40010008)
 #define DBG_COMMAND_EXCEPTION       ((DWORD) 0x40010009)
+#define DBG_PRINTEXCEPTION_WIDE_C   ((DWORD) 0x4001000A)
 #define DBG_EXCEPTION_NOT_HANDLED   ((DWORD) 0x80010001)
 
 #endif /* WIN32_NO_STATUS */
@@ -784,6 +796,7 @@
 #define CONTAINING_RECORD(address, type, field) \
   ((type *)((PCHAR)(address) - offsetof(type, field)))
 
+#define ARRAYSIZE(x) (sizeof(x) / sizeof((x)[0]))
 #ifdef __WINESRC__
 # define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
 #endif
@@ -2651,6 +2664,7 @@
     return teb;
 }
 #elif defined(__x86_64__) && defined(_MSC_VER)
+unsigned __int64 __readgsqword(unsigned long);
 #pragma intrinsic(__readgsqword)
 static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void)
 {
@@ -3804,33 +3818,17 @@
 typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY {
 	union {
 		struct {
-#ifdef BITFIELDS_BIGENDIAN
-			unsigned NameIsString:1;
-			unsigned NameOffset:31;
-#else
 			unsigned NameOffset:31;
 			unsigned NameIsString:1;
-#endif
 		} DUMMYSTRUCTNAME;
 		DWORD   Name;
-#ifdef WORDS_BIGENDIAN
-		WORD    __pad;
 		WORD    Id;
-#else
-		WORD    Id;
-		WORD    __pad;
-#endif
 	} DUMMYUNIONNAME;
 	union {
 		DWORD   OffsetToData;
 		struct {
-#ifdef BITFIELDS_BIGENDIAN
-			unsigned DataIsDirectory:1;
-			unsigned OffsetToDirectory:31;
-#else
 			unsigned OffsetToDirectory:31;
 			unsigned DataIsDirectory:1;
-#endif
 		} DUMMYSTRUCTNAME2;
 	} DUMMYUNIONNAME2;
 } IMAGE_RESOURCE_DIRECTORY_ENTRY,*PIMAGE_RESOURCE_DIRECTORY_ENTRY;
@@ -4324,6 +4322,12 @@
 #define SE_MANAGE_VOLUME_NAME           L"SeManageVolumePrivilege"
 #define SE_IMPERSONATE_NAME             L"SeImpersonatePrivilege"
 #define SE_CREATE_GLOBAL_NAME           L"SeCreateGlobalPrivilege"
+#define SE_TRUSTED_CREDMAN_ACCESS_NAME  L"SeTrustedCredManAccessPrivilege"
+#define SE_RELABEL_NAME                 L"SeRelabelPrivilege"
+#define SE_INC_WORKING_SET_NAME         L"SeIncreaseWorkingSetPrivilege"
+#define SE_TIME_ZONE_NAME               L"SeTimeZonePrivilege"
+#define SE_CREATE_SYMBOLIC_LINK_NAME    L"SeCreateSymbolicLinkPrivilege"
+#define SE_DELEGATE_SESSION_USER_IMPERSONATE_NAME L"SeDelegateSessionUserImpersonatePrivilege"
 #else /* _MSC_VER/__MINGW32__ */
 static const WCHAR SE_CREATE_TOKEN_NAME[] = { 'S','e','C','r','e','a','t','e','T','o','k','e','n','P','r','i','v','i','l','e','g','e',0 };
 static const WCHAR SE_ASSIGNPRIMARYTOKEN_NAME[] = { 'S','e','A','s','s','i','g','n','P','r','i','m','a','r','y','T','o','k','e','n','P','r','i','v','i','l','e','g','e',0 };
@@ -4354,6 +4358,12 @@
 static const WCHAR SE_MANAGE_VOLUME_NAME[] = { 'S','e','M','a','n','a','g','e','V','o','l','u','m','e','P','r','i','v','i','l','e','g','e',0 };
 static const WCHAR SE_IMPERSONATE_NAME[] = { 'S','e','I','m','p','e','r','s','o','n','a','t','e','P','r','i','v','i','l','e','g','e',0 };
 static const WCHAR SE_CREATE_GLOBAL_NAME[] = { 'S','e','C','r','e','a','t','e','G','l','o','b','a','l','P','r','i','v','i','l','e','g','e',0 };
+static const WCHAR SE_TRUSTED_CREDMAN_ACCESS_NAME[] = { 'S','e','T','r','u','s','t','e','d','C','r','e','d','M','a','n','A','c','c','e','s','s','P','r','i','v','i','l','e','g','e',0 };
+static const WCHAR SE_RELABEL_NAME[] = { 'S','e','R','e','l','a','b','e','l','P','r','i','v','i','l','e','g','e',0 };
+static const WCHAR SE_INC_WORKING_SET_NAME[] = { 'S','e','I','n','c','r','e','a','s','e','W','o','r','k','i','n','g','S','e','t','P','r','i','v','i','l','e','g','e',0 };
+static const WCHAR SE_TIME_ZONE_NAME[] = { 'S','e','T','i','m','e','Z','o','n','e','P','r','i','v','i','l','e','g','e',0 };
+static const WCHAR SE_CREATE_SYMBOLIC_LINK_NAME[] = { 'S','e','C','r','e','a','t','e','S','y','m','b','o','l','i','c','L','i','n','k','P','r','i','v','i','l','e','g','e',0 };
+static const WCHAR SE_DELEGATE_SESSION_USER_IMPERSONATE_NAME[] = { 'S','e','D','e','l','e','g','a','t','e','S','e','s','s','i','o','n','U','s','e','r','I','m','p','e','r','s','o','n','a','t','e','P','r','i','v','i','l','e','g','e',0 };
 #endif
 #else /* UNICODE */
 #define SE_CREATE_TOKEN_NAME            "SeCreateTokenPrivilege"
@@ -4385,6 +4395,12 @@
 #define SE_MANAGE_VOLUME_NAME           "SeManageVolumePrivilege"
 #define SE_IMPERSONATE_NAME             "SeImpersonatePrivilege"
 #define SE_CREATE_GLOBAL_NAME           "SeCreateGlobalPrivilege"
+#define SE_TRUSTED_CREDMAN_ACCESS_NAME  "SeTrustedCredManAccessPrivilege"
+#define SE_RELABEL_NAME                 "SeRelabelPrivilege"
+#define SE_INC_WORKING_SET_NAME         "SeIncreaseWorkingSetPrivilege"
+#define SE_TIME_ZONE_NAME               "SeTimeZonePrivilege"
+#define SE_CREATE_SYMBOLIC_LINK_NAME    "SeCreateSymbolicLinkPrivilege"
+#define SE_DELEGATE_SESSION_USER_IMPERSONATE_NAME "SeDelegateSessionUserImpersonatePrivilege"
 #endif
 
 #define SE_GROUP_MANDATORY          0x00000001
@@ -5046,7 +5062,10 @@
 #define	SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE 0xf
 #define	SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE 0x10
 #define SYSTEM_MANDATORY_LABEL_ACE_TYPE 0x11
-#define	ACCESS_MAX_MS_V5_ACE_TYPE	0x11
+#define SYSTEM_RESOURCE_ATTRIBUTE_ACE_TYPE  0x12
+#define SYSTEM_SCOPED_POLICY_ID_ACE_TYPE    0x13
+#define SYSTEM_PROCESS_TRUST_LABEL_ACE_TYPE 0x14
+#define ACCESS_MAX_MS_V5_ACE_TYPE           0x14
 
 /* inherit AceFlags */
 #define	OBJECT_INHERIT_ACE		0x01
@@ -5308,6 +5327,15 @@
 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE  0x00000004
 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
+#define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
+
+typedef union _RATE_QUOTA_LIMIT {
+    DWORD RateData;
+    struct {
+        DWORD RatePercent:7;
+        DWORD Reserved0:25;
+    } DUMMYSTRUCTNAME;
+} RATE_QUOTA_LIMIT, *PRATE_QUOTA_LIMIT;
 
 typedef struct _QUOTA_LIMITS_EX {
     SIZE_T PagedPoolLimit;
@@ -5316,12 +5344,12 @@
     SIZE_T MaximumWorkingSetSize;
     SIZE_T PagefileLimit;
     LARGE_INTEGER TimeLimit;
-    SIZE_T Reserved1;
+    SIZE_T WorkingSetLimit;
     SIZE_T Reserved2;
     SIZE_T Reserved3;
     SIZE_T Reserved4;
     DWORD Flags;
-    DWORD Reserved5;
+    RATE_QUOTA_LIMIT CpuRateLimit;
 } QUOTA_LIMITS_EX, *PQUOTA_LIMITS_EX;
 
 #define SECTION_QUERY              0x0001
@@ -5436,6 +5464,8 @@
 #define FILE_SUPPORTS_INTEGRITY_STREAMS      0x04000000
 #define FILE_SUPPORTS_BLOCK_REFCOUNTING      0x08000000
 #define FILE_SUPPORTS_SPARSE_VDL             0x10000000
+#define FILE_DAX_VOLUME                      0x20000000
+#define FILE_SUPPORTS_GHOSTING               0x40000000
 
 /* File alignments (NT) */
 #define	FILE_BYTE_ALIGNMENT		0x00000000
@@ -6249,8 +6279,10 @@
 typedef const ASSEMBLY_FILE_DETAILED_INFORMATION *PCASSEMBLY_FILE_DETAILED_INFORMATION;
 
 typedef enum {
-    ACTCX_COMPATIBILITY_ELEMENT_TYPE_UNKNOWN = 0,
-    ACTCX_COMPATIBILITY_ELEMENT_TYPE_OS
+    ACTCTX_COMPATIBILITY_ELEMENT_TYPE_UNKNOWN = 0,
+    ACTCTX_COMPATIBILITY_ELEMENT_TYPE_OS,
+    ACTCTX_COMPATIBILITY_ELEMENT_TYPE_MITIGATION,
+    ACTCTX_COMPATIBILITY_ELEMENT_TYPE_MAXVERSIONTESTED
 } ACTCTX_COMPATIBILITY_ELEMENT_TYPE;
 
 typedef struct _COMPATIBILITY_CONTEXT_ELEMENT {
diff --git a/mingw-w64-tools/widl/include/winnt.rh b/mingw-w64-tools/widl/include/winnt.rh
index 59791bc..786a38f 100644
--- a/mingw-w64-tools/widl/include/winnt.rh
+++ b/mingw-w64-tools/widl/include/winnt.rh
@@ -24,10 +24,12 @@
  * macro which only exists in the user's code.
  */
 #ifndef WINE_NO_UNICODE_MACROS
-# ifdef UNICODE
+# ifndef UNICODE
+#  define __TEXT(string) string
+# elif defined(WINE_UNICODE_NATIVE)
 #  define __TEXT(string) L##string
 # else
-#  define __TEXT(string) string
+#  define __TEXT(string) u##string
 # endif
 # define TEXT(string) __TEXT(string)
 #endif
diff --git a/mingw-w64-tools/widl/patches/0001-relocatable.patch b/mingw-w64-tools/widl/patches/0001-relocatable.patch
index c555468..84f3058 100644
--- a/mingw-w64-tools/widl/patches/0001-relocatable.patch
+++ b/mingw-w64-tools/widl/patches/0001-relocatable.patch
@@ -1,5 +1,5 @@
 diff --git a/mingw-w64-tools/widl/src/widl.c b/mingw-w64-tools/widl/src/widl.c
-index aa669713..35d37d9b 100644
+index a99eed4e..38b9d864 100644
 --- a/mingw-w64-tools/widl/src/widl.c
 +++ b/mingw-w64-tools/widl/src/widl.c
 @@ -42,6 +42,7 @@
@@ -10,12 +10,17 @@
  
  static const char usage[] =
  "Usage: widl [options...] infile.idl\n"
-@@ -749,14 +750,12 @@ int main(int argc,char *argv[])
+@@ -772,19 +773,12 @@ int main(int argc,char *argv[])
  
    if (stdinc)
    {
 -      static const char *incl_dirs[] = { INCLUDEDIR, "/usr/include", "/usr/local/include" };
 -
+-      if (includedir)
+-      {
+-          wpp_add_include_path( strmake( "%s/wine/msvcrt", includedir ));
+-          wpp_add_include_path( strmake( "%s/wine/windows", includedir ));
+-      }
 -      for (i = 0; i < ARRAY_SIZE(incl_dirs); i++)
 -      {
 -          if (i && !strcmp( incl_dirs[i], incl_dirs[0] )) continue;
diff --git a/mingw-w64-tools/widl/src/parser.tab.c b/mingw-w64-tools/widl/src/parser.tab.c
index 9484289..047b535 100644
--- a/mingw-w64-tools/widl/src/parser.tab.c
+++ b/mingw-w64-tools/widl/src/parser.tab.c
@@ -1,8 +1,9 @@
-/* A Bison parser, made by GNU Bison 3.1.  */
+/* A Bison parser, made by GNU Bison 3.5.4.  */
 
 /* Bison implementation for Yacc-like parsers in C
 
-   Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc.
+   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation,
+   Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -40,11 +41,14 @@
    define necessary library symbols; they are noted "INFRINGES ON
    USER NAME SPACE" below.  */
 
+/* Undocumented macros, especially those whose name start with YY_,
+   are private implementation details.  Do not rely on them.  */
+
 /* Identify Bison output.  */
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "3.1"
+#define YYBISON_VERSION "3.5.4"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -65,12 +69,11 @@
 #define yyerror         parser_error
 #define yydebug         parser_debug
 #define yynerrs         parser_nerrs
-
 #define yylval          parser_lval
 #define yychar          parser_char
 
-/* Copy the first part of user declarations.  */
-#line 1 "parser.y" /* yacc.c:339  */
+/* First part of user prologue.  */
+#line 1 "parser.y"
 
 /*
  * IDL Compiler
@@ -199,13 +202,26 @@
 static typelib_t *current_typelib;
 
 
-#line 203 "parser.tab.c" /* yacc.c:339  */
+#line 206 "parser.tab.c"
 
-# ifndef YY_NULLPTR
-#  if defined __cplusplus && 201103L <= __cplusplus
-#   define YY_NULLPTR nullptr
+# ifndef YY_CAST
+#  ifdef __cplusplus
+#   define YY_CAST(Type, Val) static_cast<Type> (Val)
+#   define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
 #  else
-#   define YY_NULLPTR 0
+#   define YY_CAST(Type, Val) ((Type) (Val))
+#   define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
+#  endif
+# endif
+# ifndef YY_NULLPTR
+#  if defined __cplusplus
+#   if 201103L <= __cplusplus
+#    define YY_NULLPTR nullptr
+#   else
+#    define YY_NULLPTR 0
+#   endif
+#  else
+#   define YY_NULLPTR ((void*)0)
 #  endif
 # endif
 
@@ -422,10 +438,9 @@
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-
 union YYSTYPE
 {
-#line 129 "parser.y" /* yacc.c:355  */
+#line 129 "parser.y"
 
 	attr_t *attr;
 	attr_list_t *attr_list;
@@ -454,9 +469,9 @@
 	enum type_qualifier type_qualifier;
 	enum function_specifier function_specifier;
 
-#line 458 "parser.tab.c" /* yacc.c:355  */
-};
+#line 473 "parser.tab.c"
 
+};
 typedef union YYSTYPE YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
@@ -469,44 +484,89 @@
 
 
 
-/* Copy the second part of user declarations.  */
 
-#line 475 "parser.tab.c" /* yacc.c:358  */
 
 #ifdef short
 # undef short
 #endif
 
-#ifdef YYTYPE_UINT8
-typedef YYTYPE_UINT8 yytype_uint8;
-#else
-typedef unsigned char yytype_uint8;
+/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
+   <limits.h> and (if available) <stdint.h> are included
+   so that the code can choose integer types of a good width.  */
+
+#ifndef __PTRDIFF_MAX__
+# include <limits.h> /* INFRINGES ON USER NAME SPACE */
+# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
+#  include <stdint.h> /* INFRINGES ON USER NAME SPACE */
+#  define YY_STDINT_H
+# endif
 #endif
 
-#ifdef YYTYPE_INT8
-typedef YYTYPE_INT8 yytype_int8;
+/* Narrow types that promote to a signed type and that can represent a
+   signed or unsigned integer of at least N bits.  In tables they can
+   save space and decrease cache pressure.  Promoting to a signed type
+   helps avoid bugs in integer arithmetic.  */
+
+#ifdef __INT_LEAST8_MAX__
+typedef __INT_LEAST8_TYPE__ yytype_int8;
+#elif defined YY_STDINT_H
+typedef int_least8_t yytype_int8;
 #else
 typedef signed char yytype_int8;
 #endif
 
-#ifdef YYTYPE_UINT16
-typedef YYTYPE_UINT16 yytype_uint16;
-#else
-typedef unsigned short yytype_uint16;
-#endif
-
-#ifdef YYTYPE_INT16
-typedef YYTYPE_INT16 yytype_int16;
+#ifdef __INT_LEAST16_MAX__
+typedef __INT_LEAST16_TYPE__ yytype_int16;
+#elif defined YY_STDINT_H
+typedef int_least16_t yytype_int16;
 #else
 typedef short yytype_int16;
 #endif
 
+#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST8_TYPE__ yytype_uint8;
+#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
+       && UINT_LEAST8_MAX <= INT_MAX)
+typedef uint_least8_t yytype_uint8;
+#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
+typedef unsigned char yytype_uint8;
+#else
+typedef short yytype_uint8;
+#endif
+
+#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST16_TYPE__ yytype_uint16;
+#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
+       && UINT_LEAST16_MAX <= INT_MAX)
+typedef uint_least16_t yytype_uint16;
+#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
+typedef unsigned short yytype_uint16;
+#else
+typedef int yytype_uint16;
+#endif
+
+#ifndef YYPTRDIFF_T
+# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
+#  define YYPTRDIFF_T __PTRDIFF_TYPE__
+#  define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
+# elif defined PTRDIFF_MAX
+#  ifndef ptrdiff_t
+#   include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  endif
+#  define YYPTRDIFF_T ptrdiff_t
+#  define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
+# else
+#  define YYPTRDIFF_T long
+#  define YYPTRDIFF_MAXIMUM LONG_MAX
+# endif
+#endif
+
 #ifndef YYSIZE_T
 # ifdef __SIZE_TYPE__
 #  define YYSIZE_T __SIZE_TYPE__
 # elif defined size_t
 #  define YYSIZE_T size_t
-# elif ! defined YYSIZE_T
+# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
 #  define YYSIZE_T size_t
 # else
@@ -514,7 +574,19 @@
 # endif
 #endif
 
-#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+#define YYSIZE_MAXIMUM                                  \
+  YY_CAST (YYPTRDIFF_T,                                 \
+           (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1)  \
+            ? YYPTRDIFF_MAXIMUM                         \
+            : YY_CAST (YYSIZE_T, -1)))
+
+#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
+
+/* Stored state numbers (used for stacks). */
+typedef yytype_int16 yy_state_t;
+
+/* State numbers in computations.  */
+typedef int yy_state_fast_t;
 
 #ifndef YY_
 # if defined YYENABLE_NLS && YYENABLE_NLS
@@ -528,30 +600,19 @@
 # endif
 #endif
 
-#ifndef YY_ATTRIBUTE
-# if (defined __GNUC__                                               \
-      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
-     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
-#  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
+#ifndef YY_ATTRIBUTE_PURE
+# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
+#  define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
 # else
-#  define YY_ATTRIBUTE(Spec) /* empty */
+#  define YY_ATTRIBUTE_PURE
 # endif
 #endif
 
-#ifndef YY_ATTRIBUTE_PURE
-# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
-#endif
-
 #ifndef YY_ATTRIBUTE_UNUSED
-# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
-#endif
-
-#if !defined _Noreturn \
-     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
-# if defined _MSC_VER && 1200 <= _MSC_VER
-#  define _Noreturn __declspec (noreturn)
+# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
+#  define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
 # else
-#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
+#  define YY_ATTRIBUTE_UNUSED
 # endif
 #endif
 
@@ -564,11 +625,11 @@
 
 #if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
 /* Suppress an incorrect diagnostic about yylval being uninitialized.  */
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
-    _Pragma ("GCC diagnostic push") \
-    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN                            \
+    _Pragma ("GCC diagnostic push")                                     \
+    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")              \
     _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END      \
     _Pragma ("GCC diagnostic pop")
 #else
 # define YY_INITIAL_VALUE(Value) Value
@@ -581,6 +642,20 @@
 # define YY_INITIAL_VALUE(Value) /* Nothing. */
 #endif
 
+#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
+# define YY_IGNORE_USELESS_CAST_BEGIN                          \
+    _Pragma ("GCC diagnostic push")                            \
+    _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
+# define YY_IGNORE_USELESS_CAST_END            \
+    _Pragma ("GCC diagnostic pop")
+#endif
+#ifndef YY_IGNORE_USELESS_CAST_BEGIN
+# define YY_IGNORE_USELESS_CAST_BEGIN
+# define YY_IGNORE_USELESS_CAST_END
+#endif
+
+
+#define YY_ASSERT(E) ((void) (0 && (E)))
 
 #if ! defined yyoverflow || YYERROR_VERBOSE
 
@@ -657,17 +732,17 @@
 /* A type that is properly aligned for any stack member.  */
 union yyalloc
 {
-  yytype_int16 yyss_alloc;
+  yy_state_t yyss_alloc;
   YYSTYPE yyvs_alloc;
 };
 
 /* The size of the maximum gap between one aligned stack and the next.  */
-# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
 
 /* The size of an array large to enough to hold all stacks, each with
    N elements.  */
 # define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+     ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \
       + YYSTACK_GAP_MAXIMUM)
 
 # define YYCOPY_NEEDED 1
@@ -680,11 +755,11 @@
 # define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
     do                                                                  \
       {                                                                 \
-        YYSIZE_T yynewbytes;                                            \
+        YYPTRDIFF_T yynewbytes;                                         \
         YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
         Stack = &yyptr->Stack_alloc;                                    \
-        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-        yyptr += yynewbytes / sizeof (*yyptr);                          \
+        yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
+        yyptr += yynewbytes / YYSIZEOF (*yyptr);                        \
       }                                                                 \
     while (0)
 
@@ -696,12 +771,12 @@
 # ifndef YYCOPY
 #  if defined __GNUC__ && 1 < __GNUC__
 #   define YYCOPY(Dst, Src, Count) \
-      __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
+      __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
 #  else
 #   define YYCOPY(Dst, Src, Count)              \
       do                                        \
         {                                       \
-          YYSIZE_T yyi;                         \
+          YYPTRDIFF_T yyi;                      \
           for (yyi = 0; yyi < (Count); yyi++)   \
             (Dst)[yyi] = (Src)[yyi];            \
         }                                       \
@@ -724,16 +799,17 @@
 /* YYNSTATES -- Number of states.  */
 #define YYNSTATES  718
 
-/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
-   by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
 #define YYMAXUTOK   443
 
+
+/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
+   as returned by yylex, with out-of-bounds checking.  */
 #define YYTRANSLATE(YYX)                                                \
-  ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+  (0 <= (YYX) && (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
 /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
-   as returned by yylex, without out-of-bounds checking.  */
+   as returned by yylex.  */
 static const yytype_uint8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -785,7 +861,7 @@
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
-static const yytype_uint16 yyrline[] =
+static const yytype_int16 yyrline[] =
 {
        0,   315,   315,   329,   329,   331,   332,   332,   334,   335,
      336,   339,   342,   343,   344,   347,   348,   349,   349,   351,
@@ -826,8 +902,8 @@
     1043,  1044,  1045,  1049,  1056,  1057,  1060,  1061,  1064,  1071,
     1072,  1077,  1078,  1082,  1083,  1084,  1085,  1086,  1090,  1091,
     1092,  1095,  1098,  1099,  1100,  1101,  1102,  1103,  1104,  1105,
-    1106,  1107,  1110,  1117,  1119,  1125,  1126,  1127,  1130,  1132,
-    1134,  1136,  1139,  1144,  1152,  1153,  1156,  1157,  1160,  1161,
+    1106,  1107,  1110,  1117,  1119,  1125,  1126,  1127,  1131,  1132,
+    1135,  1136,  1139,  1144,  1152,  1153,  1156,  1157,  1160,  1161,
     1162
 };
 #endif
@@ -907,7 +983,7 @@
 # ifdef YYPRINT
 /* YYTOKNUM[NUM] -- (External) token number corresponding to the
    (internal) symbol number NUM (which must be that of a token).  */
-static const yytype_uint16 yytoknum[] =
+static const yytype_int16 yytoknum[] =
 {
        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
@@ -934,14 +1010,14 @@
 };
 # endif
 
-#define YYPACT_NINF -560
+#define YYPACT_NINF (-560)
 
-#define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-560)))
+#define yypact_value_is_default(Yyn) \
+  ((Yyn) == YYPACT_NINF)
 
-#define YYTABLE_NINF -405
+#define YYTABLE_NINF (-405)
 
-#define yytable_value_is_error(Yytable_value) \
+#define yytable_value_is_error(Yyn) \
   0
 
   /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
@@ -1025,7 +1101,7 @@
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
      Performed when YYTABLE does not specify something else to do.  Zero
      means the default is an error.  */
-static const yytype_uint16 yydefact[] =
+static const yytype_int16 yydefact[] =
 {
        5,     0,     3,     1,    35,   383,   398,   273,   265,   284,
        0,   322,     0,     0,   272,   260,   274,   318,   271,   275,
@@ -1758,7 +1834,7 @@
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
      symbol of state STATE-NUM.  */
-static const yytype_uint16 yystos[] =
+static const yytype_int16 yystos[] =
 {
        0,   214,   216,     0,     4,     5,    14,    33,    35,    41,
       42,    45,    50,    59,    61,    67,    68,    70,    74,    77,
@@ -1835,7 +1911,7 @@
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_uint16 yyr1[] =
+static const yytype_int16 yyr1[] =
 {
        0,   213,   214,   215,   215,   216,   217,   216,   216,   216,
      216,   216,   216,   216,   216,   218,   218,   219,   218,   218,
@@ -1882,7 +1958,7 @@
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
-static const yytype_uint8 yyr2[] =
+static const yytype_int8 yyr2[] =
 {
        0,     2,     2,     0,     2,     0,     0,     6,     2,     2,
        3,     2,     2,     2,     2,     0,     2,     0,     6,     2,
@@ -1941,22 +2017,22 @@
 
 #define YYRECOVERING()  (!!yyerrstatus)
 
-#define YYBACKUP(Token, Value)                                  \
-do                                                              \
-  if (yychar == YYEMPTY)                                        \
-    {                                                           \
-      yychar = (Token);                                         \
-      yylval = (Value);                                         \
-      YYPOPSTACK (yylen);                                       \
-      yystate = *yyssp;                                         \
-      goto yybackup;                                            \
-    }                                                           \
-  else                                                          \
-    {                                                           \
-      yyerror (YY_("syntax error: cannot back up")); \
-      YYERROR;                                                  \
-    }                                                           \
-while (0)
+#define YYBACKUP(Token, Value)                                    \
+  do                                                              \
+    if (yychar == YYEMPTY)                                        \
+      {                                                           \
+        yychar = (Token);                                         \
+        yylval = (Value);                                         \
+        YYPOPSTACK (yylen);                                       \
+        yystate = *yyssp;                                         \
+        goto yybackup;                                            \
+      }                                                           \
+    else                                                          \
+      {                                                           \
+        yyerror (YY_("syntax error: cannot back up")); \
+        YYERROR;                                                  \
+      }                                                           \
+  while (0)
 
 /* Error token number */
 #define YYTERROR        1
@@ -1996,37 +2072,39 @@
 } while (0)
 
 
-/*----------------------------------------.
-| Print this symbol's value on YYOUTPUT.  |
-`----------------------------------------*/
+/*-----------------------------------.
+| Print this symbol's value on YYO.  |
+`-----------------------------------*/
 
 static void
-yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep)
 {
-  FILE *yyo = yyoutput;
-  YYUSE (yyo);
+  FILE *yyoutput = yyo;
+  YYUSE (yyoutput);
   if (!yyvaluep)
     return;
 # ifdef YYPRINT
   if (yytype < YYNTOKENS)
-    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+    YYPRINT (yyo, yytoknum[yytype], *yyvaluep);
 # endif
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   YYUSE (yytype);
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 }
 
 
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
+/*---------------------------.
+| Print this symbol on YYO.  |
+`---------------------------*/
 
 static void
-yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep)
 {
-  YYFPRINTF (yyoutput, "%s %s (",
+  YYFPRINTF (yyo, "%s %s (",
              yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
 
-  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
-  YYFPRINTF (yyoutput, ")");
+  yy_symbol_value_print (yyo, yytype, yyvaluep);
+  YYFPRINTF (yyo, ")");
 }
 
 /*------------------------------------------------------------------.
@@ -2035,7 +2113,7 @@
 `------------------------------------------------------------------*/
 
 static void
-yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
 {
   YYFPRINTF (stderr, "Stack now");
   for (; yybottom <= yytop; yybottom++)
@@ -2058,20 +2136,20 @@
 `------------------------------------------------*/
 
 static void
-yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
+yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, int yyrule)
 {
-  unsigned long yylno = yyrline[yyrule];
+  int yylno = yyrline[yyrule];
   int yynrhs = yyr2[yyrule];
   int yyi;
-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
              yyrule - 1, yylno);
   /* The symbols being reduced.  */
   for (yyi = 0; yyi < yynrhs; yyi++)
     {
       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
       yy_symbol_print (stderr,
-                       yystos[yyssp[yyi + 1 - yynrhs]],
-                       &(yyvsp[(yyi + 1) - (yynrhs)])
+                       yystos[+yyssp[yyi + 1 - yynrhs]],
+                       &yyvsp[(yyi + 1) - (yynrhs)]
                                               );
       YYFPRINTF (stderr, "\n");
     }
@@ -2115,13 +2193,13 @@
 
 # ifndef yystrlen
 #  if defined __GLIBC__ && defined _STRING_H
-#   define yystrlen strlen
+#   define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S)))
 #  else
 /* Return the length of YYSTR.  */
-static YYSIZE_T
+static YYPTRDIFF_T
 yystrlen (const char *yystr)
 {
-  YYSIZE_T yylen;
+  YYPTRDIFF_T yylen;
   for (yylen = 0; yystr[yylen]; yylen++)
     continue;
   return yylen;
@@ -2157,12 +2235,12 @@
    backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
    null, do not copy; instead, return the length of what the result
    would have been.  */
-static YYSIZE_T
+static YYPTRDIFF_T
 yytnamerr (char *yyres, const char *yystr)
 {
   if (*yystr == '"')
     {
-      YYSIZE_T yyn = 0;
+      YYPTRDIFF_T yyn = 0;
       char const *yyp = yystr;
 
       for (;;)
@@ -2175,7 +2253,10 @@
           case '\\':
             if (*++yyp != '\\')
               goto do_not_strip_quotes;
-            /* Fall through.  */
+            else
+              goto append;
+
+          append:
           default:
             if (yyres)
               yyres[yyn] = *yyp;
@@ -2190,10 +2271,10 @@
     do_not_strip_quotes: ;
     }
 
-  if (! yyres)
+  if (yyres)
+    return yystpcpy (yyres, yystr) - yyres;
+  else
     return yystrlen (yystr);
-
-  return yystpcpy (yyres, yystr) - yyres;
 }
 # endif
 
@@ -2206,19 +2287,19 @@
    *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
    required number of bytes is too large to store.  */
 static int
-yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
-                yytype_int16 *yyssp, int yytoken)
+yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg,
+                yy_state_t *yyssp, int yytoken)
 {
-  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
-  YYSIZE_T yysize = yysize0;
   enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
   /* Internationalized format string. */
   const char *yyformat = YY_NULLPTR;
-  /* Arguments of yyformat. */
+  /* Arguments of yyformat: reported tokens (one for the "unexpected",
+     one per "expected"). */
   char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-  /* Number of reported tokens (one for the "unexpected", one per
-     "expected"). */
+  /* Actual size of YYARG. */
   int yycount = 0;
+  /* Cumulated lengths of YYARG.  */
+  YYPTRDIFF_T yysize = 0;
 
   /* There are many possibilities here to consider:
      - If this state is a consistent state with a default action, then
@@ -2245,7 +2326,9 @@
   */
   if (yytoken != YYEMPTY)
     {
-      int yyn = yypact[*yyssp];
+      int yyn = yypact[+*yyssp];
+      YYPTRDIFF_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
+      yysize = yysize0;
       yyarg[yycount++] = yytname[yytoken];
       if (!yypact_value_is_default (yyn))
         {
@@ -2270,11 +2353,12 @@
                   }
                 yyarg[yycount++] = yytname[yyx];
                 {
-                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
-                  if (! (yysize <= yysize1
-                         && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+                  YYPTRDIFF_T yysize1
+                    = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
+                  if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
+                    yysize = yysize1;
+                  else
                     return 2;
-                  yysize = yysize1;
                 }
               }
         }
@@ -2297,10 +2381,13 @@
     }
 
   {
-    YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
-    if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+    /* Don't count the "%s"s in the final size, but reserve room for
+       the terminator.  */
+    YYPTRDIFF_T yysize1 = yysize + (yystrlen (yyformat) - 2 * yycount) + 1;
+    if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
+      yysize = yysize1;
+    else
       return 2;
-    yysize = yysize1;
   }
 
   if (*yymsg_alloc < yysize)
@@ -2326,8 +2413,8 @@
         }
       else
         {
-          yyp++;
-          yyformat++;
+          ++yyp;
+          ++yyformat;
         }
   }
   return 0;
@@ -2370,7 +2457,7 @@
 int
 yyparse (void)
 {
-    int yystate;
+    yy_state_fast_t yystate;
     /* Number of tokens to shift before error messages enabled.  */
     int yyerrstatus;
 
@@ -2382,16 +2469,16 @@
        to reallocate them elsewhere.  */
 
     /* The state stack.  */
-    yytype_int16 yyssa[YYINITDEPTH];
-    yytype_int16 *yyss;
-    yytype_int16 *yyssp;
+    yy_state_t yyssa[YYINITDEPTH];
+    yy_state_t *yyss;
+    yy_state_t *yyssp;
 
     /* The semantic value stack.  */
     YYSTYPE yyvsa[YYINITDEPTH];
     YYSTYPE *yyvs;
     YYSTYPE *yyvsp;
 
-    YYSIZE_T yystacksize;
+    YYPTRDIFF_T yystacksize;
 
   int yyn;
   int yyresult;
@@ -2405,7 +2492,7 @@
   /* Buffer for error messages, and its allocated size.  */
   char yymsgbuf[128];
   char *yymsg = yymsgbuf;
-  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+  YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf;
 #endif
 
 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
@@ -2426,46 +2513,54 @@
   yychar = YYEMPTY; /* Cause a token to be read.  */
   goto yysetstate;
 
+
 /*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate.  |
+| yynewstate -- push a new state, which is found in yystate.  |
 `------------------------------------------------------------*/
- yynewstate:
+yynewstate:
   /* In all cases, when you get here, the value and location stacks
      have just been pushed.  So pushing a state here evens the stacks.  */
   yyssp++;
 
- yysetstate:
-  *yyssp = yystate;
+
+/*--------------------------------------------------------------------.
+| yysetstate -- set current state (the top of the stack) to yystate.  |
+`--------------------------------------------------------------------*/
+yysetstate:
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+  YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
+  YY_IGNORE_USELESS_CAST_BEGIN
+  *yyssp = YY_CAST (yy_state_t, yystate);
+  YY_IGNORE_USELESS_CAST_END
 
   if (yyss + yystacksize - 1 <= yyssp)
+#if !defined yyoverflow && !defined YYSTACK_RELOCATE
+    goto yyexhaustedlab;
+#else
     {
       /* Get the current used size of the three stacks, in elements.  */
-      YYSIZE_T yysize = yyssp - yyss + 1;
+      YYPTRDIFF_T yysize = yyssp - yyss + 1;
 
-#ifdef yyoverflow
+# if defined yyoverflow
       {
         /* Give user a chance to reallocate the stack.  Use copies of
            these so that the &'s don't force the real ones into
            memory.  */
+        yy_state_t *yyss1 = yyss;
         YYSTYPE *yyvs1 = yyvs;
-        yytype_int16 *yyss1 = yyss;
 
         /* Each stack pointer address is followed by the size of the
            data in use in that stack, in bytes.  This used to be a
            conditional around just the two extra args, but that might
            be undefined if yyoverflow is a macro.  */
         yyoverflow (YY_("memory exhausted"),
-                    &yyss1, yysize * sizeof (*yyssp),
-                    &yyvs1, yysize * sizeof (*yyvsp),
+                    &yyss1, yysize * YYSIZEOF (*yyssp),
+                    &yyvs1, yysize * YYSIZEOF (*yyvsp),
                     &yystacksize);
-
         yyss = yyss1;
         yyvs = yyvs1;
       }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
-      goto yyexhaustedlab;
-# else
+# else /* defined YYSTACK_RELOCATE */
       /* Extend the stack our own way.  */
       if (YYMAXDEPTH <= yystacksize)
         goto yyexhaustedlab;
@@ -2474,42 +2569,43 @@
         yystacksize = YYMAXDEPTH;
 
       {
-        yytype_int16 *yyss1 = yyss;
+        yy_state_t *yyss1 = yyss;
         union yyalloc *yyptr =
-          (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+          YY_CAST (union yyalloc *,
+                   YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
         if (! yyptr)
           goto yyexhaustedlab;
         YYSTACK_RELOCATE (yyss_alloc, yyss);
         YYSTACK_RELOCATE (yyvs_alloc, yyvs);
-#  undef YYSTACK_RELOCATE
+# undef YYSTACK_RELOCATE
         if (yyss1 != yyssa)
           YYSTACK_FREE (yyss1);
       }
 # endif
-#endif /* no yyoverflow */
 
       yyssp = yyss + yysize - 1;
       yyvsp = yyvs + yysize - 1;
 
-      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-                  (unsigned long) yystacksize));
+      YY_IGNORE_USELESS_CAST_BEGIN
+      YYDPRINTF ((stderr, "Stack size increased to %ld\n",
+                  YY_CAST (long, yystacksize)));
+      YY_IGNORE_USELESS_CAST_END
 
       if (yyss + yystacksize - 1 <= yyssp)
         YYABORT;
     }
-
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
 
   if (yystate == YYFINAL)
     YYACCEPT;
 
   goto yybackup;
 
+
 /*-----------.
 | yybackup.  |
 `-----------*/
 yybackup:
-
   /* Do appropriate processing given the current state.  Read a
      lookahead token if we need one and don't already have one.  */
 
@@ -2559,15 +2655,13 @@
 
   /* Shift the lookahead token.  */
   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-
-  /* Discard the shifted token.  */
-  yychar = YYEMPTY;
-
   yystate = yyn;
   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   *++yyvsp = yylval;
   YY_IGNORE_MAYBE_UNINITIALIZED_END
 
+  /* Discard the shifted token.  */
+  yychar = YYEMPTY;
   goto yynewstate;
 
 
@@ -2582,7 +2676,7 @@
 
 
 /*-----------------------------.
-| yyreduce -- Do a reduction.  |
+| yyreduce -- do a reduction.  |
 `-----------------------------*/
 yyreduce:
   /* yyn is the number of a rule to reduce with.  */
@@ -2602,9 +2696,9 @@
   YY_REDUCE_PRINT (yyn);
   switch (yyn)
     {
-        case 2:
-#line 315 "parser.y" /* yacc.c:1651  */
-    { check_statements((yyvsp[-1].stmt_list), FALSE);
+  case 2:
+#line 315 "parser.y"
+                                                { check_statements((yyvsp[-1].stmt_list), FALSE);
 						  check_all_user_types((yyvsp[-1].stmt_list));
 						  write_header((yyvsp[-1].stmt_list));
 						  write_id_data((yyvsp[-1].stmt_list));
@@ -2616,1108 +2710,1108 @@
 						  write_dlldata((yyvsp[-1].stmt_list));
 						  write_local_stubs((yyvsp[-1].stmt_list));
 						}
-#line 2620 "parser.tab.c" /* yacc.c:1651  */
+#line 2714 "parser.tab.c"
     break;
 
   case 5:
-#line 331 "parser.y" /* yacc.c:1651  */
-    { (yyval.stmt_list) = NULL; }
-#line 2626 "parser.tab.c" /* yacc.c:1651  */
+#line 331 "parser.y"
+                                                { (yyval.stmt_list) = NULL; }
+#line 2720 "parser.tab.c"
     break;
 
   case 6:
-#line 332 "parser.y" /* yacc.c:1651  */
-    { push_namespace((yyvsp[-1].str)); }
-#line 2632 "parser.tab.c" /* yacc.c:1651  */
+#line 332 "parser.y"
+                                          { push_namespace((yyvsp[-1].str)); }
+#line 2726 "parser.tab.c"
     break;
 
   case 7:
-#line 333 "parser.y" /* yacc.c:1651  */
-    { pop_namespace((yyvsp[-4].str)); (yyval.stmt_list) = append_statements((yyvsp[-5].stmt_list), (yyvsp[-1].stmt_list)); }
-#line 2638 "parser.tab.c" /* yacc.c:1651  */
+#line 333 "parser.y"
+                                                { pop_namespace((yyvsp[-4].str)); (yyval.stmt_list) = append_statements((yyvsp[-5].stmt_list), (yyvsp[-1].stmt_list)); }
+#line 2732 "parser.tab.c"
     break;
 
   case 8:
-#line 334 "parser.y" /* yacc.c:1651  */
-    { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_reference((yyvsp[0].type))); }
-#line 2644 "parser.tab.c" /* yacc.c:1651  */
+#line 334 "parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_reference((yyvsp[0].type))); }
+#line 2738 "parser.tab.c"
     break;
 
   case 9:
-#line 335 "parser.y" /* yacc.c:1651  */
-    { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); }
-#line 2650 "parser.tab.c" /* yacc.c:1651  */
+#line 335 "parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); }
+#line 2744 "parser.tab.c"
     break;
 
   case 10:
-#line 336 "parser.y" /* yacc.c:1651  */
-    { (yyval.stmt_list) = (yyvsp[-2].stmt_list);
+#line 336 "parser.y"
+                                                { (yyval.stmt_list) = (yyvsp[-2].stmt_list);
 						  reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0);
 						}
-#line 2658 "parser.tab.c" /* yacc.c:1651  */
+#line 2752 "parser.tab.c"
     break;
 
   case 11:
-#line 339 "parser.y" /* yacc.c:1651  */
-    { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type)));
+#line 339 "parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type)));
 						  reg_type((yyvsp[0].type), (yyvsp[0].type)->name, current_namespace, 0);
 						}
-#line 2666 "parser.tab.c" /* yacc.c:1651  */
+#line 2760 "parser.tab.c"
     break;
 
   case 12:
-#line 342 "parser.y" /* yacc.c:1651  */
-    { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_module((yyvsp[0].type))); }
-#line 2672 "parser.tab.c" /* yacc.c:1651  */
+#line 342 "parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_module((yyvsp[0].type))); }
+#line 2766 "parser.tab.c"
     break;
 
   case 13:
-#line 343 "parser.y" /* yacc.c:1651  */
-    { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_library((yyvsp[0].typelib))); }
-#line 2678 "parser.tab.c" /* yacc.c:1651  */
+#line 343 "parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_library((yyvsp[0].typelib))); }
+#line 2772 "parser.tab.c"
     break;
 
   case 14:
-#line 344 "parser.y" /* yacc.c:1651  */
-    { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); }
-#line 2684 "parser.tab.c" /* yacc.c:1651  */
+#line 344 "parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); }
+#line 2778 "parser.tab.c"
     break;
 
   case 15:
-#line 347 "parser.y" /* yacc.c:1651  */
-    { (yyval.stmt_list) = NULL; }
-#line 2690 "parser.tab.c" /* yacc.c:1651  */
+#line 347 "parser.y"
+                                                { (yyval.stmt_list) = NULL; }
+#line 2784 "parser.tab.c"
     break;
 
   case 16:
-#line 348 "parser.y" /* yacc.c:1651  */
-    { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_reference((yyvsp[0].type))); }
-#line 2696 "parser.tab.c" /* yacc.c:1651  */
+#line 348 "parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_reference((yyvsp[0].type))); }
+#line 2790 "parser.tab.c"
     break;
 
   case 17:
-#line 349 "parser.y" /* yacc.c:1651  */
-    { push_namespace((yyvsp[-1].str)); }
-#line 2702 "parser.tab.c" /* yacc.c:1651  */
+#line 349 "parser.y"
+                                          { push_namespace((yyvsp[-1].str)); }
+#line 2796 "parser.tab.c"
     break;
 
   case 18:
-#line 350 "parser.y" /* yacc.c:1651  */
-    { pop_namespace((yyvsp[-4].str)); (yyval.stmt_list) = append_statements((yyvsp[-5].stmt_list), (yyvsp[-1].stmt_list)); }
-#line 2708 "parser.tab.c" /* yacc.c:1651  */
+#line 350 "parser.y"
+                                                { pop_namespace((yyvsp[-4].str)); (yyval.stmt_list) = append_statements((yyvsp[-5].stmt_list), (yyvsp[-1].stmt_list)); }
+#line 2802 "parser.tab.c"
     break;
 
   case 19:
-#line 351 "parser.y" /* yacc.c:1651  */
-    { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); }
-#line 2714 "parser.tab.c" /* yacc.c:1651  */
+#line 351 "parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); }
+#line 2808 "parser.tab.c"
     break;
 
   case 20:
-#line 352 "parser.y" /* yacc.c:1651  */
-    { (yyval.stmt_list) = (yyvsp[-2].stmt_list); reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); }
-#line 2720 "parser.tab.c" /* yacc.c:1651  */
+#line 352 "parser.y"
+                                                { (yyval.stmt_list) = (yyvsp[-2].stmt_list); reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); }
+#line 2814 "parser.tab.c"
     break;
 
   case 21:
-#line 353 "parser.y" /* yacc.c:1651  */
-    { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type)));
+#line 353 "parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type)));
 						  reg_type((yyvsp[0].type), (yyvsp[0].type)->name, current_namespace, 0);
 						}
-#line 2728 "parser.tab.c" /* yacc.c:1651  */
+#line 2822 "parser.tab.c"
     break;
 
   case 22:
-#line 356 "parser.y" /* yacc.c:1651  */
-    { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_module((yyvsp[0].type))); }
-#line 2734 "parser.tab.c" /* yacc.c:1651  */
+#line 356 "parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_module((yyvsp[0].type))); }
+#line 2828 "parser.tab.c"
     break;
 
   case 23:
-#line 357 "parser.y" /* yacc.c:1651  */
-    { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); }
-#line 2740 "parser.tab.c" /* yacc.c:1651  */
+#line 357 "parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); }
+#line 2834 "parser.tab.c"
     break;
 
   case 24:
-#line 358 "parser.y" /* yacc.c:1651  */
-    { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_importlib((yyvsp[0].str))); }
-#line 2746 "parser.tab.c" /* yacc.c:1651  */
+#line 358 "parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_importlib((yyvsp[0].str))); }
+#line 2840 "parser.tab.c"
     break;
 
   case 25:
-#line 359 "parser.y" /* yacc.c:1651  */
-    { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_library((yyvsp[0].typelib))); }
-#line 2752 "parser.tab.c" /* yacc.c:1651  */
+#line 359 "parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_library((yyvsp[0].typelib))); }
+#line 2846 "parser.tab.c"
     break;
 
   case 26:
-#line 362 "parser.y" /* yacc.c:1651  */
-    { (yyval.stmt_list) = NULL; }
-#line 2758 "parser.tab.c" /* yacc.c:1651  */
+#line 362 "parser.y"
+                                                { (yyval.stmt_list) = NULL; }
+#line 2852 "parser.tab.c"
     break;
 
   case 27:
-#line 363 "parser.y" /* yacc.c:1651  */
-    { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); }
-#line 2764 "parser.tab.c" /* yacc.c:1651  */
+#line 363 "parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); }
+#line 2858 "parser.tab.c"
     break;
 
   case 30:
-#line 371 "parser.y" /* yacc.c:1651  */
-    { (yyval.statement) = make_statement_cppquote((yyvsp[0].str)); }
-#line 2770 "parser.tab.c" /* yacc.c:1651  */
+#line 371 "parser.y"
+                                                { (yyval.statement) = make_statement_cppquote((yyvsp[0].str)); }
+#line 2864 "parser.tab.c"
     break;
 
   case 31:
-#line 372 "parser.y" /* yacc.c:1651  */
-    { (yyval.statement) = make_statement_type_decl((yyvsp[-1].type)); }
-#line 2776 "parser.tab.c" /* yacc.c:1651  */
+#line 372 "parser.y"
+                                                { (yyval.statement) = make_statement_type_decl((yyvsp[-1].type)); }
+#line 2870 "parser.tab.c"
     break;
 
   case 32:
-#line 373 "parser.y" /* yacc.c:1651  */
-    { (yyval.statement) = make_statement_declaration((yyvsp[-1].var)); }
-#line 2782 "parser.tab.c" /* yacc.c:1651  */
+#line 373 "parser.y"
+                                                { (yyval.statement) = make_statement_declaration((yyvsp[-1].var)); }
+#line 2876 "parser.tab.c"
     break;
 
   case 33:
-#line 374 "parser.y" /* yacc.c:1651  */
-    { (yyval.statement) = make_statement_import((yyvsp[0].str)); }
-#line 2788 "parser.tab.c" /* yacc.c:1651  */
+#line 374 "parser.y"
+                                                { (yyval.statement) = make_statement_import((yyvsp[0].str)); }
+#line 2882 "parser.tab.c"
     break;
 
   case 34:
-#line 375 "parser.y" /* yacc.c:1651  */
-    { (yyval.statement) = (yyvsp[-1].statement); }
-#line 2794 "parser.tab.c" /* yacc.c:1651  */
+#line 375 "parser.y"
+                                                { (yyval.statement) = (yyvsp[-1].statement); }
+#line 2888 "parser.tab.c"
     break;
 
   case 35:
-#line 376 "parser.y" /* yacc.c:1651  */
-    { (yyval.statement) = make_statement_pragma((yyvsp[0].str)); }
-#line 2800 "parser.tab.c" /* yacc.c:1651  */
+#line 376 "parser.y"
+                                                { (yyval.statement) = make_statement_pragma((yyvsp[0].str)); }
+#line 2894 "parser.tab.c"
     break;
 
   case 36:
-#line 377 "parser.y" /* yacc.c:1651  */
-    { (yyval.statement) = NULL; }
-#line 2806 "parser.tab.c" /* yacc.c:1651  */
+#line 377 "parser.y"
+                         { (yyval.statement) = NULL; }
+#line 2900 "parser.tab.c"
     break;
 
   case 37:
-#line 381 "parser.y" /* yacc.c:1651  */
-    {
+#line 381 "parser.y"
+                  {
                       int result;
                       (yyval.statement) = NULL;
                       result = do_warning((yyvsp[-3].str), (yyvsp[-1].warning_list));
                       if(!result)
                           error_loc("expected \"disable\" or \"enable\"\n");
                   }
-#line 2818 "parser.tab.c" /* yacc.c:1651  */
+#line 2912 "parser.tab.c"
     break;
 
   case 38:
-#line 391 "parser.y" /* yacc.c:1651  */
-    { (yyval.warning_list) = append_warning(NULL, (yyvsp[0].num)); }
-#line 2824 "parser.tab.c" /* yacc.c:1651  */
+#line 391 "parser.y"
+               { (yyval.warning_list) = append_warning(NULL, (yyvsp[0].num)); }
+#line 2918 "parser.tab.c"
     break;
 
   case 39:
-#line 392 "parser.y" /* yacc.c:1651  */
-    { (yyval.warning_list) = append_warning((yyvsp[-1].warning_list), (yyvsp[0].num)); }
-#line 2830 "parser.tab.c" /* yacc.c:1651  */
+#line 392 "parser.y"
+                        { (yyval.warning_list) = append_warning((yyvsp[-1].warning_list), (yyvsp[0].num)); }
+#line 2924 "parser.tab.c"
     break;
 
   case 41:
-#line 397 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = type_new_enum((yyvsp[0].str), current_namespace, FALSE, NULL); }
-#line 2836 "parser.tab.c" /* yacc.c:1651  */
+#line 397 "parser.y"
+                                                { (yyval.type) = type_new_enum((yyvsp[0].str), current_namespace, FALSE, NULL); }
+#line 2930 "parser.tab.c"
     break;
 
   case 43:
-#line 399 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = type_new_struct((yyvsp[0].str), current_namespace, FALSE, NULL); }
-#line 2842 "parser.tab.c" /* yacc.c:1651  */
+#line 399 "parser.y"
+                                                { (yyval.type) = type_new_struct((yyvsp[0].str), current_namespace, FALSE, NULL); }
+#line 2936 "parser.tab.c"
     break;
 
   case 45:
-#line 401 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = type_new_nonencapsulated_union((yyvsp[0].str), FALSE, NULL); }
-#line 2848 "parser.tab.c" /* yacc.c:1651  */
+#line 401 "parser.y"
+                                                { (yyval.type) = type_new_nonencapsulated_union((yyvsp[0].str), FALSE, NULL); }
+#line 2942 "parser.tab.c"
     break;
 
   case 46:
-#line 402 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_enum_attrs((yyvsp[-1].attr_list)); }
-#line 2854 "parser.tab.c" /* yacc.c:1651  */
+#line 402 "parser.y"
+                                                { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_enum_attrs((yyvsp[-1].attr_list)); }
+#line 2948 "parser.tab.c"
     break;
 
   case 47:
-#line 403 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_struct_attrs((yyvsp[-1].attr_list)); }
-#line 2860 "parser.tab.c" /* yacc.c:1651  */
+#line 403 "parser.y"
+                                                { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_struct_attrs((yyvsp[-1].attr_list)); }
+#line 2954 "parser.tab.c"
     break;
 
   case 48:
-#line 404 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_union_attrs((yyvsp[-1].attr_list)); }
-#line 2866 "parser.tab.c" /* yacc.c:1651  */
+#line 404 "parser.y"
+                                                { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_union_attrs((yyvsp[-1].attr_list)); }
+#line 2960 "parser.tab.c"
     break;
 
   case 49:
-#line 407 "parser.y" /* yacc.c:1651  */
-    { (yyval.str) = (yyvsp[-1].str); }
-#line 2872 "parser.tab.c" /* yacc.c:1651  */
+#line 407 "parser.y"
+                                                { (yyval.str) = (yyvsp[-1].str); }
+#line 2966 "parser.tab.c"
     break;
 
   case 50:
-#line 409 "parser.y" /* yacc.c:1651  */
-    { assert(yychar == YYEMPTY);
+#line 409 "parser.y"
+                                                { assert(yychar == YYEMPTY);
 						  (yyval.import) = xmalloc(sizeof(struct _import_t));
 						  (yyval.import)->name = (yyvsp[-1].str);
 						  (yyval.import)->import_performed = do_import((yyvsp[-1].str));
 						  if (!(yyval.import)->import_performed) yychar = aEOF;
 						}
-#line 2883 "parser.tab.c" /* yacc.c:1651  */
+#line 2977 "parser.tab.c"
     break;
 
   case 51:
-#line 417 "parser.y" /* yacc.c:1651  */
-    { (yyval.str) = (yyvsp[-2].import)->name;
+#line 417 "parser.y"
+                                                { (yyval.str) = (yyvsp[-2].import)->name;
 						  if ((yyvsp[-2].import)->import_performed) pop_import();
 						  free((yyvsp[-2].import));
 						}
-#line 2892 "parser.tab.c" /* yacc.c:1651  */
+#line 2986 "parser.tab.c"
     break;
 
   case 52:
-#line 424 "parser.y" /* yacc.c:1651  */
-    { (yyval.str) = (yyvsp[-2].str); if(!parse_only) add_importlib((yyvsp[-2].str), current_typelib); }
-#line 2898 "parser.tab.c" /* yacc.c:1651  */
+#line 424 "parser.y"
+                                                { (yyval.str) = (yyvsp[-2].str); if(!parse_only) add_importlib((yyvsp[-2].str), current_typelib); }
+#line 2992 "parser.tab.c"
     break;
 
   case 53:
-#line 427 "parser.y" /* yacc.c:1651  */
-    { (yyval.str) = (yyvsp[0].str); }
-#line 2904 "parser.tab.c" /* yacc.c:1651  */
+#line 427 "parser.y"
+                                                { (yyval.str) = (yyvsp[0].str); }
+#line 2998 "parser.tab.c"
     break;
 
   case 54:
-#line 428 "parser.y" /* yacc.c:1651  */
-    { (yyval.str) = (yyvsp[0].str); }
-#line 2910 "parser.tab.c" /* yacc.c:1651  */
+#line 428 "parser.y"
+                                                { (yyval.str) = (yyvsp[0].str); }
+#line 3004 "parser.tab.c"
     break;
 
   case 55:
-#line 430 "parser.y" /* yacc.c:1651  */
-    { (yyval.typelib) = make_library((yyvsp[-1].str), check_library_attrs((yyvsp[-1].str), (yyvsp[-2].attr_list)));
+#line 430 "parser.y"
+                                                { (yyval.typelib) = make_library((yyvsp[-1].str), check_library_attrs((yyvsp[-1].str), (yyvsp[-2].attr_list)));
 						  if (!parse_only && do_typelib) current_typelib = (yyval.typelib);
 						}
-#line 2918 "parser.tab.c" /* yacc.c:1651  */
+#line 3012 "parser.tab.c"
     break;
 
   case 56:
-#line 435 "parser.y" /* yacc.c:1651  */
-    { (yyval.typelib) = (yyvsp[-3].typelib); (yyval.typelib)->stmts = (yyvsp[-2].stmt_list); }
-#line 2924 "parser.tab.c" /* yacc.c:1651  */
+#line 435 "parser.y"
+                                                { (yyval.typelib) = (yyvsp[-3].typelib); (yyval.typelib)->stmts = (yyvsp[-2].stmt_list); }
+#line 3018 "parser.tab.c"
     break;
 
   case 57:
-#line 438 "parser.y" /* yacc.c:1651  */
-    { (yyval.var_list) = NULL; }
-#line 2930 "parser.tab.c" /* yacc.c:1651  */
+#line 438 "parser.y"
+                                                { (yyval.var_list) = NULL; }
+#line 3024 "parser.tab.c"
     break;
 
   case 59:
-#line 442 "parser.y" /* yacc.c:1651  */
-    { check_arg_attrs((yyvsp[0].var)); (yyval.var_list) = append_var( NULL, (yyvsp[0].var) ); }
-#line 2936 "parser.tab.c" /* yacc.c:1651  */
+#line 442 "parser.y"
+                                                { check_arg_attrs((yyvsp[0].var)); (yyval.var_list) = append_var( NULL, (yyvsp[0].var) ); }
+#line 3030 "parser.tab.c"
     break;
 
   case 60:
-#line 443 "parser.y" /* yacc.c:1651  */
-    { check_arg_attrs((yyvsp[0].var)); (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[0].var) ); }
-#line 2942 "parser.tab.c" /* yacc.c:1651  */
+#line 443 "parser.y"
+                                                { check_arg_attrs((yyvsp[0].var)); (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[0].var) ); }
+#line 3036 "parser.tab.c"
     break;
 
   case 62:
-#line 447 "parser.y" /* yacc.c:1651  */
-    { (yyval.var_list) = append_var( (yyvsp[-2].var_list), make_var(strdup("...")) ); }
-#line 2948 "parser.tab.c" /* yacc.c:1651  */
+#line 447 "parser.y"
+                                                { (yyval.var_list) = append_var( (yyvsp[-2].var_list), make_var(strdup("...")) ); }
+#line 3042 "parser.tab.c"
     break;
 
   case 63:
-#line 451 "parser.y" /* yacc.c:1651  */
-    { if ((yyvsp[-1].declspec)->stgclass != STG_NONE && (yyvsp[-1].declspec)->stgclass != STG_REGISTER)
+#line 451 "parser.y"
+                                                { if ((yyvsp[-1].declspec)->stgclass != STG_NONE && (yyvsp[-1].declspec)->stgclass != STG_REGISTER)
 						    error_loc("invalid storage class for function parameter\n");
 						  (yyval.var) = declare_var((yyvsp[-2].attr_list), (yyvsp[-1].declspec), (yyvsp[0].declarator), TRUE);
 						  free((yyvsp[-1].declspec)); free((yyvsp[0].declarator));
 						}
-#line 2958 "parser.tab.c" /* yacc.c:1651  */
+#line 3052 "parser.tab.c"
     break;
 
   case 64:
-#line 456 "parser.y" /* yacc.c:1651  */
-    { if ((yyvsp[-1].declspec)->stgclass != STG_NONE && (yyvsp[-1].declspec)->stgclass != STG_REGISTER)
+#line 456 "parser.y"
+                                                { if ((yyvsp[-1].declspec)->stgclass != STG_NONE && (yyvsp[-1].declspec)->stgclass != STG_REGISTER)
 						    error_loc("invalid storage class for function parameter\n");
 						  (yyval.var) = declare_var(NULL, (yyvsp[-1].declspec), (yyvsp[0].declarator), TRUE);
 						  free((yyvsp[-1].declspec)); free((yyvsp[0].declarator));
 						}
-#line 2968 "parser.tab.c" /* yacc.c:1651  */
+#line 3062 "parser.tab.c"
     break;
 
   case 65:
-#line 463 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = (yyvsp[-1].expr);
+#line 463 "parser.y"
+                                                { (yyval.expr) = (yyvsp[-1].expr);
 						  if (!(yyval.expr)->is_const || (yyval.expr)->cval <= 0)
 						      error_loc("array dimension is not a positive integer constant\n");
 						}
-#line 2977 "parser.tab.c" /* yacc.c:1651  */
+#line 3071 "parser.tab.c"
     break;
 
   case 66:
-#line 467 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_expr(EXPR_VOID); }
-#line 2983 "parser.tab.c" /* yacc.c:1651  */
+#line 467 "parser.y"
+                                                { (yyval.expr) = make_expr(EXPR_VOID); }
+#line 3077 "parser.tab.c"
     break;
 
   case 67:
-#line 468 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_expr(EXPR_VOID); }
-#line 2989 "parser.tab.c" /* yacc.c:1651  */
+#line 468 "parser.y"
+                                                { (yyval.expr) = make_expr(EXPR_VOID); }
+#line 3083 "parser.tab.c"
     break;
 
   case 68:
-#line 471 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr_list) = NULL; }
-#line 2995 "parser.tab.c" /* yacc.c:1651  */
+#line 471 "parser.y"
+                                                { (yyval.attr_list) = NULL; }
+#line 3089 "parser.tab.c"
     break;
 
   case 70:
-#line 476 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr_list) = (yyvsp[-1].attr_list); }
-#line 3001 "parser.tab.c" /* yacc.c:1651  */
+#line 476 "parser.y"
+                                                { (yyval.attr_list) = (yyvsp[-1].attr_list); }
+#line 3095 "parser.tab.c"
     break;
 
   case 71:
-#line 479 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr_list) = append_attr( NULL, (yyvsp[0].attr) ); }
-#line 3007 "parser.tab.c" /* yacc.c:1651  */
+#line 479 "parser.y"
+                                                { (yyval.attr_list) = append_attr( NULL, (yyvsp[0].attr) ); }
+#line 3101 "parser.tab.c"
     break;
 
   case 72:
-#line 480 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr_list) = append_attr( (yyvsp[-2].attr_list), (yyvsp[0].attr) ); }
-#line 3013 "parser.tab.c" /* yacc.c:1651  */
+#line 480 "parser.y"
+                                                { (yyval.attr_list) = append_attr( (yyvsp[-2].attr_list), (yyvsp[0].attr) ); }
+#line 3107 "parser.tab.c"
     break;
 
   case 73:
-#line 481 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr_list) = append_attr( (yyvsp[-3].attr_list), (yyvsp[0].attr) ); }
-#line 3019 "parser.tab.c" /* yacc.c:1651  */
+#line 481 "parser.y"
+                                                { (yyval.attr_list) = append_attr( (yyvsp[-3].attr_list), (yyvsp[0].attr) ); }
+#line 3113 "parser.tab.c"
     break;
 
   case 74:
-#line 484 "parser.y" /* yacc.c:1651  */
-    { (yyval.str_list) = append_str( NULL, (yyvsp[0].str) ); }
-#line 3025 "parser.tab.c" /* yacc.c:1651  */
+#line 484 "parser.y"
+                                                { (yyval.str_list) = append_str( NULL, (yyvsp[0].str) ); }
+#line 3119 "parser.tab.c"
     break;
 
   case 75:
-#line 485 "parser.y" /* yacc.c:1651  */
-    { (yyval.str_list) = append_str( (yyvsp[-2].str_list), (yyvsp[0].str) ); }
-#line 3031 "parser.tab.c" /* yacc.c:1651  */
+#line 485 "parser.y"
+                                                { (yyval.str_list) = append_str( (yyvsp[-2].str_list), (yyvsp[0].str) ); }
+#line 3125 "parser.tab.c"
     break;
 
   case 76:
-#line 488 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = NULL; }
-#line 3037 "parser.tab.c" /* yacc.c:1651  */
+#line 488 "parser.y"
+                                                { (yyval.attr) = NULL; }
+#line 3131 "parser.tab.c"
     break;
 
   case 77:
-#line 489 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_AGGREGATABLE); }
-#line 3043 "parser.tab.c" /* yacc.c:1651  */
+#line 489 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_AGGREGATABLE); }
+#line 3137 "parser.tab.c"
     break;
 
   case 78:
-#line 490 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrp(ATTR_ANNOTATION, (yyvsp[-1].str)); }
-#line 3049 "parser.tab.c" /* yacc.c:1651  */
+#line 490 "parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_ANNOTATION, (yyvsp[-1].str)); }
+#line 3143 "parser.tab.c"
     break;
 
   case 79:
-#line 491 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_APPOBJECT); }
-#line 3055 "parser.tab.c" /* yacc.c:1651  */
+#line 491 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_APPOBJECT); }
+#line 3149 "parser.tab.c"
     break;
 
   case 80:
-#line 492 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_ASYNC); }
-#line 3061 "parser.tab.c" /* yacc.c:1651  */
+#line 492 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_ASYNC); }
+#line 3155 "parser.tab.c"
     break;
 
   case 81:
-#line 493 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_AUTO_HANDLE); }
-#line 3067 "parser.tab.c" /* yacc.c:1651  */
+#line 493 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_AUTO_HANDLE); }
+#line 3161 "parser.tab.c"
     break;
 
   case 82:
-#line 494 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_BINDABLE); }
-#line 3073 "parser.tab.c" /* yacc.c:1651  */
+#line 494 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_BINDABLE); }
+#line 3167 "parser.tab.c"
     break;
 
   case 83:
-#line 495 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_BROADCAST); }
-#line 3079 "parser.tab.c" /* yacc.c:1651  */
+#line 495 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_BROADCAST); }
+#line 3173 "parser.tab.c"
     break;
 
   case 84:
-#line 496 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrp(ATTR_CALLAS, (yyvsp[-1].var)); }
-#line 3085 "parser.tab.c" /* yacc.c:1651  */
+#line 496 "parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_CALLAS, (yyvsp[-1].var)); }
+#line 3179 "parser.tab.c"
     break;
 
   case 85:
-#line 497 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrp(ATTR_CASE, (yyvsp[-1].expr_list)); }
-#line 3091 "parser.tab.c" /* yacc.c:1651  */
+#line 497 "parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_CASE, (yyvsp[-1].expr_list)); }
+#line 3185 "parser.tab.c"
     break;
 
   case 86:
-#line 498 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_CODE); }
-#line 3097 "parser.tab.c" /* yacc.c:1651  */
+#line 498 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_CODE); }
+#line 3191 "parser.tab.c"
     break;
 
   case 87:
-#line 499 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_COMMSTATUS); }
-#line 3103 "parser.tab.c" /* yacc.c:1651  */
+#line 499 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_COMMSTATUS); }
+#line 3197 "parser.tab.c"
     break;
 
   case 88:
-#line 500 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); }
-#line 3109 "parser.tab.c" /* yacc.c:1651  */
+#line 500 "parser.y"
+                                                { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); }
+#line 3203 "parser.tab.c"
     break;
 
   case 89:
-#line 501 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_DONT_SERIALIZE */ }
-#line 3115 "parser.tab.c" /* yacc.c:1651  */
+#line 501 "parser.y"
+                                                { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_DONT_SERIALIZE */ }
+#line 3209 "parser.tab.c"
     break;
 
   case 90:
-#line 502 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_SERIALIZE */ }
-#line 3121 "parser.tab.c" /* yacc.c:1651  */
+#line 502 "parser.y"
+                                                { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_SERIALIZE */ }
+#line 3215 "parser.tab.c"
     break;
 
   case 91:
-#line 503 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_CONTROL); }
-#line 3127 "parser.tab.c" /* yacc.c:1651  */
+#line 503 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_CONTROL); }
+#line 3221 "parser.tab.c"
     break;
 
   case 92:
-#line 504 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_DECODE); }
-#line 3133 "parser.tab.c" /* yacc.c:1651  */
+#line 504 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_DECODE); }
+#line 3227 "parser.tab.c"
     break;
 
   case 93:
-#line 505 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_DEFAULT); }
-#line 3139 "parser.tab.c" /* yacc.c:1651  */
+#line 505 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_DEFAULT); }
+#line 3233 "parser.tab.c"
     break;
 
   case 94:
-#line 506 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_DEFAULTBIND); }
-#line 3145 "parser.tab.c" /* yacc.c:1651  */
+#line 506 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_DEFAULTBIND); }
+#line 3239 "parser.tab.c"
     break;
 
   case 95:
-#line 507 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_DEFAULTCOLLELEM); }
-#line 3151 "parser.tab.c" /* yacc.c:1651  */
+#line 507 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_DEFAULTCOLLELEM); }
+#line 3245 "parser.tab.c"
     break;
 
   case 96:
-#line 508 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrp(ATTR_DEFAULTVALUE, (yyvsp[-1].expr)); }
-#line 3157 "parser.tab.c" /* yacc.c:1651  */
+#line 508 "parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_DEFAULTVALUE, (yyvsp[-1].expr)); }
+#line 3251 "parser.tab.c"
     break;
 
   case 97:
-#line 509 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_DEFAULTVTABLE); }
-#line 3163 "parser.tab.c" /* yacc.c:1651  */
+#line 509 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_DEFAULTVTABLE); }
+#line 3257 "parser.tab.c"
     break;
 
   case 98:
-#line 510 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_DISABLECONSISTENCYCHECK); }
-#line 3169 "parser.tab.c" /* yacc.c:1651  */
+#line 510 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_DISABLECONSISTENCYCHECK); }
+#line 3263 "parser.tab.c"
     break;
 
   case 99:
-#line 511 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_DISPLAYBIND); }
-#line 3175 "parser.tab.c" /* yacc.c:1651  */
+#line 511 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_DISPLAYBIND); }
+#line 3269 "parser.tab.c"
     break;
 
   case 100:
-#line 512 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrp(ATTR_DLLNAME, (yyvsp[-1].str)); }
-#line 3181 "parser.tab.c" /* yacc.c:1651  */
+#line 512 "parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_DLLNAME, (yyvsp[-1].str)); }
+#line 3275 "parser.tab.c"
     break;
 
   case 101:
-#line 513 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_DUAL); }
-#line 3187 "parser.tab.c" /* yacc.c:1651  */
+#line 513 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_DUAL); }
+#line 3281 "parser.tab.c"
     break;
 
   case 102:
-#line 514 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_ENABLEALLOCATE); }
-#line 3193 "parser.tab.c" /* yacc.c:1651  */
+#line 514 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_ENABLEALLOCATE); }
+#line 3287 "parser.tab.c"
     break;
 
   case 103:
-#line 515 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_ENCODE); }
-#line 3199 "parser.tab.c" /* yacc.c:1651  */
+#line 515 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_ENCODE); }
+#line 3293 "parser.tab.c"
     break;
 
   case 104:
-#line 516 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrp(ATTR_ENDPOINT, (yyvsp[-1].str_list)); }
-#line 3205 "parser.tab.c" /* yacc.c:1651  */
+#line 516 "parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_ENDPOINT, (yyvsp[-1].str_list)); }
+#line 3299 "parser.tab.c"
     break;
 
   case 105:
-#line 517 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrp(ATTR_ENTRY, (yyvsp[-1].expr)); }
-#line 3211 "parser.tab.c" /* yacc.c:1651  */
+#line 517 "parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_ENTRY, (yyvsp[-1].expr)); }
+#line 3305 "parser.tab.c"
     break;
 
   case 106:
-#line 518 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_EXPLICIT_HANDLE); }
-#line 3217 "parser.tab.c" /* yacc.c:1651  */
+#line 518 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_EXPLICIT_HANDLE); }
+#line 3311 "parser.tab.c"
     break;
 
   case 107:
-#line 519 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_FAULTSTATUS); }
-#line 3223 "parser.tab.c" /* yacc.c:1651  */
+#line 519 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_FAULTSTATUS); }
+#line 3317 "parser.tab.c"
     break;
 
   case 108:
-#line 520 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_FORCEALLOCATE); }
-#line 3229 "parser.tab.c" /* yacc.c:1651  */
+#line 520 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_FORCEALLOCATE); }
+#line 3323 "parser.tab.c"
     break;
 
   case 109:
-#line 521 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_HANDLE); }
-#line 3235 "parser.tab.c" /* yacc.c:1651  */
+#line 521 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_HANDLE); }
+#line 3329 "parser.tab.c"
     break;
 
   case 110:
-#line 522 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrp(ATTR_HELPCONTEXT, (yyvsp[-1].expr)); }
-#line 3241 "parser.tab.c" /* yacc.c:1651  */
+#line 522 "parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_HELPCONTEXT, (yyvsp[-1].expr)); }
+#line 3335 "parser.tab.c"
     break;
 
   case 111:
-#line 523 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrp(ATTR_HELPFILE, (yyvsp[-1].str)); }
-#line 3247 "parser.tab.c" /* yacc.c:1651  */
+#line 523 "parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_HELPFILE, (yyvsp[-1].str)); }
+#line 3341 "parser.tab.c"
     break;
 
   case 112:
-#line 524 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrp(ATTR_HELPSTRING, (yyvsp[-1].str)); }
-#line 3253 "parser.tab.c" /* yacc.c:1651  */
+#line 524 "parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_HELPSTRING, (yyvsp[-1].str)); }
+#line 3347 "parser.tab.c"
     break;
 
   case 113:
-#line 525 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrp(ATTR_HELPSTRINGCONTEXT, (yyvsp[-1].expr)); }
-#line 3259 "parser.tab.c" /* yacc.c:1651  */
+#line 525 "parser.y"
+                                                        { (yyval.attr) = make_attrp(ATTR_HELPSTRINGCONTEXT, (yyvsp[-1].expr)); }
+#line 3353 "parser.tab.c"
     break;
 
   case 114:
-#line 526 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrp(ATTR_HELPSTRINGDLL, (yyvsp[-1].str)); }
-#line 3265 "parser.tab.c" /* yacc.c:1651  */
+#line 526 "parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_HELPSTRINGDLL, (yyvsp[-1].str)); }
+#line 3359 "parser.tab.c"
     break;
 
   case 115:
-#line 527 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_HIDDEN); }
-#line 3271 "parser.tab.c" /* yacc.c:1651  */
+#line 527 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_HIDDEN); }
+#line 3365 "parser.tab.c"
     break;
 
   case 116:
-#line 528 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrp(ATTR_ID, (yyvsp[-1].expr)); }
-#line 3277 "parser.tab.c" /* yacc.c:1651  */
+#line 528 "parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_ID, (yyvsp[-1].expr)); }
+#line 3371 "parser.tab.c"
     break;
 
   case 117:
-#line 529 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_IDEMPOTENT); }
-#line 3283 "parser.tab.c" /* yacc.c:1651  */
+#line 529 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_IDEMPOTENT); }
+#line 3377 "parser.tab.c"
     break;
 
   case 118:
-#line 530 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_IGNORE); }
-#line 3289 "parser.tab.c" /* yacc.c:1651  */
+#line 530 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_IGNORE); }
+#line 3383 "parser.tab.c"
     break;
 
   case 119:
-#line 531 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrp(ATTR_IIDIS, (yyvsp[-1].expr)); }
-#line 3295 "parser.tab.c" /* yacc.c:1651  */
+#line 531 "parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_IIDIS, (yyvsp[-1].expr)); }
+#line 3389 "parser.tab.c"
     break;
 
   case 120:
-#line 532 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_IMMEDIATEBIND); }
-#line 3301 "parser.tab.c" /* yacc.c:1651  */
+#line 532 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_IMMEDIATEBIND); }
+#line 3395 "parser.tab.c"
     break;
 
   case 121:
-#line 533 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrp(ATTR_IMPLICIT_HANDLE, (yyvsp[-1].var)); }
-#line 3307 "parser.tab.c" /* yacc.c:1651  */
+#line 533 "parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_IMPLICIT_HANDLE, (yyvsp[-1].var)); }
+#line 3401 "parser.tab.c"
     break;
 
   case 122:
-#line 534 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_IN); }
-#line 3313 "parser.tab.c" /* yacc.c:1651  */
+#line 534 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_IN); }
+#line 3407 "parser.tab.c"
     break;
 
   case 123:
-#line 535 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_INPUTSYNC); }
-#line 3319 "parser.tab.c" /* yacc.c:1651  */
+#line 535 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_INPUTSYNC); }
+#line 3413 "parser.tab.c"
     break;
 
   case 124:
-#line 536 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrp(ATTR_LENGTHIS, (yyvsp[-1].expr_list)); }
-#line 3325 "parser.tab.c" /* yacc.c:1651  */
+#line 536 "parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_LENGTHIS, (yyvsp[-1].expr_list)); }
+#line 3419 "parser.tab.c"
     break;
 
   case 125:
-#line 537 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrp(ATTR_LIBLCID, (yyvsp[-1].expr)); }
-#line 3331 "parser.tab.c" /* yacc.c:1651  */
+#line 537 "parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_LIBLCID, (yyvsp[-1].expr)); }
+#line 3425 "parser.tab.c"
     break;
 
   case 126:
-#line 538 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_PARAMLCID); }
-#line 3337 "parser.tab.c" /* yacc.c:1651  */
+#line 538 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_PARAMLCID); }
+#line 3431 "parser.tab.c"
     break;
 
   case 127:
-#line 539 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_LICENSED); }
-#line 3343 "parser.tab.c" /* yacc.c:1651  */
+#line 539 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_LICENSED); }
+#line 3437 "parser.tab.c"
     break;
 
   case 128:
-#line 540 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_LOCAL); }
-#line 3349 "parser.tab.c" /* yacc.c:1651  */
+#line 540 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_LOCAL); }
+#line 3443 "parser.tab.c"
     break;
 
   case 129:
-#line 541 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_MAYBE); }
-#line 3355 "parser.tab.c" /* yacc.c:1651  */
+#line 541 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_MAYBE); }
+#line 3449 "parser.tab.c"
     break;
 
   case 130:
-#line 542 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_MESSAGE); }
-#line 3361 "parser.tab.c" /* yacc.c:1651  */
+#line 542 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_MESSAGE); }
+#line 3455 "parser.tab.c"
     break;
 
   case 131:
-#line 543 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_NOCODE); }
-#line 3367 "parser.tab.c" /* yacc.c:1651  */
+#line 543 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_NOCODE); }
+#line 3461 "parser.tab.c"
     break;
 
   case 132:
-#line 544 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_NONBROWSABLE); }
-#line 3373 "parser.tab.c" /* yacc.c:1651  */
+#line 544 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_NONBROWSABLE); }
+#line 3467 "parser.tab.c"
     break;
 
   case 133:
-#line 545 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_NONCREATABLE); }
-#line 3379 "parser.tab.c" /* yacc.c:1651  */
+#line 545 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_NONCREATABLE); }
+#line 3473 "parser.tab.c"
     break;
 
   case 134:
-#line 546 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_NONEXTENSIBLE); }
-#line 3385 "parser.tab.c" /* yacc.c:1651  */
+#line 546 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_NONEXTENSIBLE); }
+#line 3479 "parser.tab.c"
     break;
 
   case 135:
-#line 547 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_NOTIFY); }
-#line 3391 "parser.tab.c" /* yacc.c:1651  */
+#line 547 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_NOTIFY); }
+#line 3485 "parser.tab.c"
     break;
 
   case 136:
-#line 548 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_NOTIFYFLAG); }
-#line 3397 "parser.tab.c" /* yacc.c:1651  */
+#line 548 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_NOTIFYFLAG); }
+#line 3491 "parser.tab.c"
     break;
 
   case 137:
-#line 549 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_OBJECT); }
-#line 3403 "parser.tab.c" /* yacc.c:1651  */
+#line 549 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_OBJECT); }
+#line 3497 "parser.tab.c"
     break;
 
   case 138:
-#line 550 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_ODL); }
-#line 3409 "parser.tab.c" /* yacc.c:1651  */
+#line 550 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_ODL); }
+#line 3503 "parser.tab.c"
     break;
 
   case 139:
-#line 551 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_OLEAUTOMATION); }
-#line 3415 "parser.tab.c" /* yacc.c:1651  */
+#line 551 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_OLEAUTOMATION); }
+#line 3509 "parser.tab.c"
     break;
 
   case 140:
-#line 552 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrp(ATTR_OPTIMIZE, (yyvsp[-1].str)); }
-#line 3421 "parser.tab.c" /* yacc.c:1651  */
+#line 552 "parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_OPTIMIZE, (yyvsp[-1].str)); }
+#line 3515 "parser.tab.c"
     break;
 
   case 141:
-#line 553 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_OPTIONAL); }
-#line 3427 "parser.tab.c" /* yacc.c:1651  */
+#line 553 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_OPTIONAL); }
+#line 3521 "parser.tab.c"
     break;
 
   case 142:
-#line 554 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_OUT); }
-#line 3433 "parser.tab.c" /* yacc.c:1651  */
+#line 554 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_OUT); }
+#line 3527 "parser.tab.c"
     break;
 
   case 143:
-#line 555 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_PARTIALIGNORE); }
-#line 3439 "parser.tab.c" /* yacc.c:1651  */
+#line 555 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_PARTIALIGNORE); }
+#line 3533 "parser.tab.c"
     break;
 
   case 144:
-#line 556 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrv(ATTR_POINTERDEFAULT, (yyvsp[-1].num)); }
-#line 3445 "parser.tab.c" /* yacc.c:1651  */
+#line 556 "parser.y"
+                                                { (yyval.attr) = make_attrv(ATTR_POINTERDEFAULT, (yyvsp[-1].num)); }
+#line 3539 "parser.tab.c"
     break;
 
   case 145:
-#line 557 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrp(ATTR_PROGID, (yyvsp[-1].str)); }
-#line 3451 "parser.tab.c" /* yacc.c:1651  */
+#line 557 "parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_PROGID, (yyvsp[-1].str)); }
+#line 3545 "parser.tab.c"
     break;
 
   case 146:
-#line 558 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_PROPGET); }
-#line 3457 "parser.tab.c" /* yacc.c:1651  */
+#line 558 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_PROPGET); }
+#line 3551 "parser.tab.c"
     break;
 
   case 147:
-#line 559 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_PROPPUT); }
-#line 3463 "parser.tab.c" /* yacc.c:1651  */
+#line 559 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_PROPPUT); }
+#line 3557 "parser.tab.c"
     break;
 
   case 148:
-#line 560 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_PROPPUTREF); }
-#line 3469 "parser.tab.c" /* yacc.c:1651  */
+#line 560 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_PROPPUTREF); }
+#line 3563 "parser.tab.c"
     break;
 
   case 149:
-#line 561 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_PROXY); }
-#line 3475 "parser.tab.c" /* yacc.c:1651  */
+#line 561 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_PROXY); }
+#line 3569 "parser.tab.c"
     break;
 
   case 150:
-#line 562 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_PUBLIC); }
-#line 3481 "parser.tab.c" /* yacc.c:1651  */
+#line 562 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_PUBLIC); }
+#line 3575 "parser.tab.c"
     break;
 
   case 151:
-#line 564 "parser.y" /* yacc.c:1651  */
-    { expr_list_t *list = append_expr( NULL, (yyvsp[-3].expr) );
+#line 564 "parser.y"
+                                                { expr_list_t *list = append_expr( NULL, (yyvsp[-3].expr) );
 						  list = append_expr( list, (yyvsp[-1].expr) );
 						  (yyval.attr) = make_attrp(ATTR_RANGE, list); }
-#line 3489 "parser.tab.c" /* yacc.c:1651  */
+#line 3583 "parser.tab.c"
     break;
 
   case 152:
-#line 567 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_READONLY); }
-#line 3495 "parser.tab.c" /* yacc.c:1651  */
+#line 567 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_READONLY); }
+#line 3589 "parser.tab.c"
     break;
 
   case 153:
-#line 568 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrp(ATTR_REPRESENTAS, (yyvsp[-1].type)); }
-#line 3501 "parser.tab.c" /* yacc.c:1651  */
+#line 568 "parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_REPRESENTAS, (yyvsp[-1].type)); }
+#line 3595 "parser.tab.c"
     break;
 
   case 154:
-#line 569 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_REQUESTEDIT); }
-#line 3507 "parser.tab.c" /* yacc.c:1651  */
+#line 569 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_REQUESTEDIT); }
+#line 3601 "parser.tab.c"
     break;
 
   case 155:
-#line 570 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_RESTRICTED); }
-#line 3513 "parser.tab.c" /* yacc.c:1651  */
+#line 570 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_RESTRICTED); }
+#line 3607 "parser.tab.c"
     break;
 
   case 156:
-#line 571 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_RETVAL); }
-#line 3519 "parser.tab.c" /* yacc.c:1651  */
+#line 571 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_RETVAL); }
+#line 3613 "parser.tab.c"
     break;
 
   case 157:
-#line 572 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrp(ATTR_SIZEIS, (yyvsp[-1].expr_list)); }
-#line 3525 "parser.tab.c" /* yacc.c:1651  */
+#line 572 "parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_SIZEIS, (yyvsp[-1].expr_list)); }
+#line 3619 "parser.tab.c"
     break;
 
   case 158:
-#line 573 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_SOURCE); }
-#line 3531 "parser.tab.c" /* yacc.c:1651  */
+#line 573 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_SOURCE); }
+#line 3625 "parser.tab.c"
     break;
 
   case 159:
-#line 574 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_STRICTCONTEXTHANDLE); }
-#line 3537 "parser.tab.c" /* yacc.c:1651  */
+#line 574 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_STRICTCONTEXTHANDLE); }
+#line 3631 "parser.tab.c"
     break;
 
   case 160:
-#line 575 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_STRING); }
-#line 3543 "parser.tab.c" /* yacc.c:1651  */
+#line 575 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_STRING); }
+#line 3637 "parser.tab.c"
     break;
 
   case 161:
-#line 576 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrp(ATTR_SWITCHIS, (yyvsp[-1].expr)); }
-#line 3549 "parser.tab.c" /* yacc.c:1651  */
+#line 576 "parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_SWITCHIS, (yyvsp[-1].expr)); }
+#line 3643 "parser.tab.c"
     break;
 
   case 162:
-#line 577 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrp(ATTR_SWITCHTYPE, (yyvsp[-1].type)); }
-#line 3555 "parser.tab.c" /* yacc.c:1651  */
+#line 577 "parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_SWITCHTYPE, (yyvsp[-1].type)); }
+#line 3649 "parser.tab.c"
     break;
 
   case 163:
-#line 578 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrp(ATTR_TRANSMITAS, (yyvsp[-1].type)); }
-#line 3561 "parser.tab.c" /* yacc.c:1651  */
+#line 578 "parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_TRANSMITAS, (yyvsp[-1].type)); }
+#line 3655 "parser.tab.c"
     break;
 
   case 164:
-#line 579 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrv(ATTR_THREADING, (yyvsp[-1].num)); }
-#line 3567 "parser.tab.c" /* yacc.c:1651  */
+#line 579 "parser.y"
+                                                { (yyval.attr) = make_attrv(ATTR_THREADING, (yyvsp[-1].num)); }
+#line 3661 "parser.tab.c"
     break;
 
   case 165:
-#line 580 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_UIDEFAULT); }
-#line 3573 "parser.tab.c" /* yacc.c:1651  */
+#line 580 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_UIDEFAULT); }
+#line 3667 "parser.tab.c"
     break;
 
   case 166:
-#line 581 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_USESGETLASTERROR); }
-#line 3579 "parser.tab.c" /* yacc.c:1651  */
+#line 581 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_USESGETLASTERROR); }
+#line 3673 "parser.tab.c"
     break;
 
   case 167:
-#line 582 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrp(ATTR_USERMARSHAL, (yyvsp[-1].type)); }
-#line 3585 "parser.tab.c" /* yacc.c:1651  */
+#line 582 "parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_USERMARSHAL, (yyvsp[-1].type)); }
+#line 3679 "parser.tab.c"
     break;
 
   case 168:
-#line 583 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrp(ATTR_UUID, (yyvsp[-1].uuid)); }
-#line 3591 "parser.tab.c" /* yacc.c:1651  */
+#line 583 "parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_UUID, (yyvsp[-1].uuid)); }
+#line 3685 "parser.tab.c"
     break;
 
   case 169:
-#line 584 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrp(ATTR_ASYNCUUID, (yyvsp[-1].uuid)); }
-#line 3597 "parser.tab.c" /* yacc.c:1651  */
+#line 584 "parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_ASYNCUUID, (yyvsp[-1].uuid)); }
+#line 3691 "parser.tab.c"
     break;
 
   case 170:
-#line 585 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_V1ENUM); }
-#line 3603 "parser.tab.c" /* yacc.c:1651  */
+#line 585 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_V1ENUM); }
+#line 3697 "parser.tab.c"
     break;
 
   case 171:
-#line 586 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_VARARG); }
-#line 3609 "parser.tab.c" /* yacc.c:1651  */
+#line 586 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_VARARG); }
+#line 3703 "parser.tab.c"
     break;
 
   case 172:
-#line 587 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrv(ATTR_VERSION, (yyvsp[-1].num)); }
-#line 3615 "parser.tab.c" /* yacc.c:1651  */
+#line 587 "parser.y"
+                                                { (yyval.attr) = make_attrv(ATTR_VERSION, (yyvsp[-1].num)); }
+#line 3709 "parser.tab.c"
     break;
 
   case 173:
-#line 588 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrp(ATTR_VIPROGID, (yyvsp[-1].str)); }
-#line 3621 "parser.tab.c" /* yacc.c:1651  */
+#line 588 "parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_VIPROGID, (yyvsp[-1].str)); }
+#line 3715 "parser.tab.c"
     break;
 
   case 174:
-#line 589 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrp(ATTR_WIREMARSHAL, (yyvsp[-1].type)); }
-#line 3627 "parser.tab.c" /* yacc.c:1651  */
+#line 589 "parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_WIREMARSHAL, (yyvsp[-1].type)); }
+#line 3721 "parser.tab.c"
     break;
 
   case 175:
-#line 590 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attrv(ATTR_POINTERTYPE, (yyvsp[0].num)); }
-#line 3633 "parser.tab.c" /* yacc.c:1651  */
+#line 590 "parser.y"
+                                                { (yyval.attr) = make_attrv(ATTR_POINTERTYPE, (yyvsp[0].num)); }
+#line 3727 "parser.tab.c"
     break;
 
   case 177:
-#line 595 "parser.y" /* yacc.c:1651  */
-    { if (!is_valid_uuid((yyvsp[0].str)))
+#line 595 "parser.y"
+                                                { if (!is_valid_uuid((yyvsp[0].str)))
 						    error_loc("invalid UUID: %s\n", (yyvsp[0].str));
 						  (yyval.uuid) = parse_uuid((yyvsp[0].str)); }
-#line 3641 "parser.tab.c" /* yacc.c:1651  */
+#line 3735 "parser.tab.c"
     break;
 
   case 178:
-#line 600 "parser.y" /* yacc.c:1651  */
-    { (yyval.str) = xstrdup("__cdecl"); }
-#line 3647 "parser.tab.c" /* yacc.c:1651  */
+#line 600 "parser.y"
+                                                { (yyval.str) = xstrdup("__cdecl"); }
+#line 3741 "parser.tab.c"
     break;
 
   case 179:
-#line 601 "parser.y" /* yacc.c:1651  */
-    { (yyval.str) = xstrdup("__fastcall"); }
-#line 3653 "parser.tab.c" /* yacc.c:1651  */
+#line 601 "parser.y"
+                                                { (yyval.str) = xstrdup("__fastcall"); }
+#line 3747 "parser.tab.c"
     break;
 
   case 180:
-#line 602 "parser.y" /* yacc.c:1651  */
-    { (yyval.str) = xstrdup("__pascal"); }
-#line 3659 "parser.tab.c" /* yacc.c:1651  */
+#line 602 "parser.y"
+                                                { (yyval.str) = xstrdup("__pascal"); }
+#line 3753 "parser.tab.c"
     break;
 
   case 181:
-#line 603 "parser.y" /* yacc.c:1651  */
-    { (yyval.str) = xstrdup("__stdcall"); }
-#line 3665 "parser.tab.c" /* yacc.c:1651  */
+#line 603 "parser.y"
+                                                { (yyval.str) = xstrdup("__stdcall"); }
+#line 3759 "parser.tab.c"
     break;
 
   case 182:
-#line 606 "parser.y" /* yacc.c:1651  */
-    { (yyval.var_list) = NULL; }
-#line 3671 "parser.tab.c" /* yacc.c:1651  */
+#line 606 "parser.y"
+                                                { (yyval.var_list) = NULL; }
+#line 3765 "parser.tab.c"
     break;
 
   case 183:
-#line 607 "parser.y" /* yacc.c:1651  */
-    { (yyval.var_list) = append_var( (yyvsp[-1].var_list), (yyvsp[0].var) ); }
-#line 3677 "parser.tab.c" /* yacc.c:1651  */
+#line 607 "parser.y"
+                                                { (yyval.var_list) = append_var( (yyvsp[-1].var_list), (yyvsp[0].var) ); }
+#line 3771 "parser.tab.c"
     break;
 
   case 184:
-#line 610 "parser.y" /* yacc.c:1651  */
-    { attr_t *a = make_attrp(ATTR_CASE, append_expr( NULL, (yyvsp[-2].expr) ));
+#line 610 "parser.y"
+                                                { attr_t *a = make_attrp(ATTR_CASE, append_expr( NULL, (yyvsp[-2].expr) ));
 						  (yyval.var) = (yyvsp[0].var); if (!(yyval.var)) (yyval.var) = make_var(NULL);
 						  (yyval.var)->attrs = append_attr( (yyval.var)->attrs, a );
 						}
-#line 3686 "parser.tab.c" /* yacc.c:1651  */
+#line 3780 "parser.tab.c"
     break;
 
   case 185:
-#line 614 "parser.y" /* yacc.c:1651  */
-    { attr_t *a = make_attr(ATTR_DEFAULT);
+#line 614 "parser.y"
+                                                { attr_t *a = make_attr(ATTR_DEFAULT);
 						  (yyval.var) = (yyvsp[0].var); if (!(yyval.var)) (yyval.var) = make_var(NULL);
 						  (yyval.var)->attrs = append_attr( (yyval.var)->attrs, a );
 						}
-#line 3695 "parser.tab.c" /* yacc.c:1651  */
+#line 3789 "parser.tab.c"
     break;
 
   case 186:
-#line 620 "parser.y" /* yacc.c:1651  */
-    { (yyval.var_list) = NULL; }
-#line 3701 "parser.tab.c" /* yacc.c:1651  */
+#line 620 "parser.y"
+                                                { (yyval.var_list) = NULL; }
+#line 3795 "parser.tab.c"
     break;
 
   case 187:
-#line 621 "parser.y" /* yacc.c:1651  */
-    { (yyval.var_list) = (yyvsp[-1].var_list); }
-#line 3707 "parser.tab.c" /* yacc.c:1651  */
+#line 621 "parser.y"
+                                                { (yyval.var_list) = (yyvsp[-1].var_list); }
+#line 3801 "parser.tab.c"
     break;
 
   case 189:
-#line 625 "parser.y" /* yacc.c:1651  */
-    { if (!(yyvsp[0].var)->eval)
+#line 625 "parser.y"
+                                                { if (!(yyvsp[0].var)->eval)
 						    (yyvsp[0].var)->eval = make_exprl(EXPR_NUM, 0 /* default for first enum entry */);
                                                   (yyval.var_list) = append_var( NULL, (yyvsp[0].var) );
 						}
-#line 3716 "parser.tab.c" /* yacc.c:1651  */
+#line 3810 "parser.tab.c"
     break;
 
   case 190:
-#line 629 "parser.y" /* yacc.c:1651  */
-    { if (!(yyvsp[0].var)->eval)
+#line 629 "parser.y"
+                                                { if (!(yyvsp[0].var)->eval)
                                                   {
                                                     var_t *last = LIST_ENTRY( list_tail((yyval.var_list)), var_t, entry );
                                                     enum expr_type type = EXPR_NUM;
@@ -3727,1325 +3821,1326 @@
                                                   }
                                                   (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[0].var) );
 						}
-#line 3731 "parser.tab.c" /* yacc.c:1651  */
+#line 3825 "parser.tab.c"
     break;
 
   case 191:
-#line 641 "parser.y" /* yacc.c:1651  */
-    { (yyval.var) = reg_const((yyvsp[-2].var));
+#line 641 "parser.y"
+                                                { (yyval.var) = reg_const((yyvsp[-2].var));
 						  (yyval.var)->eval = (yyvsp[0].expr);
                                                   (yyval.var)->declspec.type = type_new_int(TYPE_BASIC_INT, 0);
 						}
-#line 3740 "parser.tab.c" /* yacc.c:1651  */
+#line 3834 "parser.tab.c"
     break;
 
   case 192:
-#line 645 "parser.y" /* yacc.c:1651  */
-    { (yyval.var) = reg_const((yyvsp[0].var));
+#line 645 "parser.y"
+                                                { (yyval.var) = reg_const((yyvsp[0].var));
                                                   (yyval.var)->declspec.type = type_new_int(TYPE_BASIC_INT, 0);
 						}
-#line 3748 "parser.tab.c" /* yacc.c:1651  */
+#line 3842 "parser.tab.c"
     break;
 
   case 193:
-#line 650 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = type_new_enum((yyvsp[-3].str), current_namespace, TRUE, (yyvsp[-1].var_list)); }
-#line 3754 "parser.tab.c" /* yacc.c:1651  */
+#line 650 "parser.y"
+                                                { (yyval.type) = type_new_enum((yyvsp[-3].str), current_namespace, TRUE, (yyvsp[-1].var_list)); }
+#line 3848 "parser.tab.c"
     break;
 
   case 194:
-#line 653 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr_list) = append_expr( NULL, (yyvsp[0].expr) ); }
-#line 3760 "parser.tab.c" /* yacc.c:1651  */
+#line 653 "parser.y"
+                                                { (yyval.expr_list) = append_expr( NULL, (yyvsp[0].expr) ); }
+#line 3854 "parser.tab.c"
     break;
 
   case 195:
-#line 654 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); }
-#line 3766 "parser.tab.c" /* yacc.c:1651  */
+#line 654 "parser.y"
+                                                { (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); }
+#line 3860 "parser.tab.c"
     break;
 
   case 196:
-#line 657 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_expr(EXPR_VOID); }
-#line 3772 "parser.tab.c" /* yacc.c:1651  */
+#line 657 "parser.y"
+                                                { (yyval.expr) = make_expr(EXPR_VOID); }
+#line 3866 "parser.tab.c"
     break;
 
   case 198:
-#line 661 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_exprl(EXPR_NUM, (yyvsp[0].num)); }
-#line 3778 "parser.tab.c" /* yacc.c:1651  */
+#line 661 "parser.y"
+                                                { (yyval.expr) = make_exprl(EXPR_NUM, (yyvsp[0].num)); }
+#line 3872 "parser.tab.c"
     break;
 
   case 199:
-#line 662 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_exprl(EXPR_HEXNUM, (yyvsp[0].num)); }
-#line 3784 "parser.tab.c" /* yacc.c:1651  */
+#line 662 "parser.y"
+                                                { (yyval.expr) = make_exprl(EXPR_HEXNUM, (yyvsp[0].num)); }
+#line 3878 "parser.tab.c"
     break;
 
   case 200:
-#line 663 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_exprd(EXPR_DOUBLE, (yyvsp[0].dbl)); }
-#line 3790 "parser.tab.c" /* yacc.c:1651  */
+#line 663 "parser.y"
+                                                { (yyval.expr) = make_exprd(EXPR_DOUBLE, (yyvsp[0].dbl)); }
+#line 3884 "parser.tab.c"
     break;
 
   case 201:
-#line 664 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 0); }
-#line 3796 "parser.tab.c" /* yacc.c:1651  */
+#line 664 "parser.y"
+                                                { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 0); }
+#line 3890 "parser.tab.c"
     break;
 
   case 202:
-#line 665 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_exprl(EXPR_NUM, 0); }
-#line 3802 "parser.tab.c" /* yacc.c:1651  */
+#line 665 "parser.y"
+                                                { (yyval.expr) = make_exprl(EXPR_NUM, 0); }
+#line 3896 "parser.tab.c"
     break;
 
   case 203:
-#line 666 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 1); }
-#line 3808 "parser.tab.c" /* yacc.c:1651  */
+#line 666 "parser.y"
+                                                { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 1); }
+#line 3902 "parser.tab.c"
     break;
 
   case 204:
-#line 667 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_exprs(EXPR_STRLIT, (yyvsp[0].str)); }
-#line 3814 "parser.tab.c" /* yacc.c:1651  */
+#line 667 "parser.y"
+                                                { (yyval.expr) = make_exprs(EXPR_STRLIT, (yyvsp[0].str)); }
+#line 3908 "parser.tab.c"
     break;
 
   case 205:
-#line 668 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_exprs(EXPR_WSTRLIT, (yyvsp[0].str)); }
-#line 3820 "parser.tab.c" /* yacc.c:1651  */
+#line 668 "parser.y"
+                                                { (yyval.expr) = make_exprs(EXPR_WSTRLIT, (yyvsp[0].str)); }
+#line 3914 "parser.tab.c"
     break;
 
   case 206:
-#line 669 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_exprs(EXPR_CHARCONST, (yyvsp[0].str)); }
-#line 3826 "parser.tab.c" /* yacc.c:1651  */
+#line 669 "parser.y"
+                                                { (yyval.expr) = make_exprs(EXPR_CHARCONST, (yyvsp[0].str)); }
+#line 3920 "parser.tab.c"
     break;
 
   case 207:
-#line 670 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str)); }
-#line 3832 "parser.tab.c" /* yacc.c:1651  */
+#line 670 "parser.y"
+                                                { (yyval.expr) = make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str)); }
+#line 3926 "parser.tab.c"
     break;
 
   case 208:
-#line 671 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_expr3(EXPR_COND, (yyvsp[-4].expr), (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 3838 "parser.tab.c" /* yacc.c:1651  */
+#line 671 "parser.y"
+                                                { (yyval.expr) = make_expr3(EXPR_COND, (yyvsp[-4].expr), (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 3932 "parser.tab.c"
     break;
 
   case 209:
-#line 672 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_expr2(EXPR_LOGOR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 3844 "parser.tab.c" /* yacc.c:1651  */
+#line 672 "parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_LOGOR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 3938 "parser.tab.c"
     break;
 
   case 210:
-#line 673 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_expr2(EXPR_LOGAND, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 3850 "parser.tab.c" /* yacc.c:1651  */
+#line 673 "parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_LOGAND, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 3944 "parser.tab.c"
     break;
 
   case 211:
-#line 674 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_expr2(EXPR_OR , (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 3856 "parser.tab.c" /* yacc.c:1651  */
+#line 674 "parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_OR , (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 3950 "parser.tab.c"
     break;
 
   case 212:
-#line 675 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_expr2(EXPR_XOR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 3862 "parser.tab.c" /* yacc.c:1651  */
+#line 675 "parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_XOR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 3956 "parser.tab.c"
     break;
 
   case 213:
-#line 676 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_expr2(EXPR_AND, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 3868 "parser.tab.c" /* yacc.c:1651  */
+#line 676 "parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_AND, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 3962 "parser.tab.c"
     break;
 
   case 214:
-#line 677 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_expr2(EXPR_EQUALITY, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 3874 "parser.tab.c" /* yacc.c:1651  */
+#line 677 "parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_EQUALITY, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 3968 "parser.tab.c"
     break;
 
   case 215:
-#line 678 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_expr2(EXPR_INEQUALITY, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 3880 "parser.tab.c" /* yacc.c:1651  */
+#line 678 "parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_INEQUALITY, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 3974 "parser.tab.c"
     break;
 
   case 216:
-#line 679 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_expr2(EXPR_GTR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 3886 "parser.tab.c" /* yacc.c:1651  */
+#line 679 "parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_GTR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 3980 "parser.tab.c"
     break;
 
   case 217:
-#line 680 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_expr2(EXPR_LESS, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 3892 "parser.tab.c" /* yacc.c:1651  */
+#line 680 "parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_LESS, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 3986 "parser.tab.c"
     break;
 
   case 218:
-#line 681 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_expr2(EXPR_GTREQL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 3898 "parser.tab.c" /* yacc.c:1651  */
+#line 681 "parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_GTREQL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 3992 "parser.tab.c"
     break;
 
   case 219:
-#line 682 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_expr2(EXPR_LESSEQL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 3904 "parser.tab.c" /* yacc.c:1651  */
+#line 682 "parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_LESSEQL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 3998 "parser.tab.c"
     break;
 
   case 220:
-#line 683 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_expr2(EXPR_SHL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 3910 "parser.tab.c" /* yacc.c:1651  */
+#line 683 "parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_SHL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4004 "parser.tab.c"
     break;
 
   case 221:
-#line 684 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_expr2(EXPR_SHR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 3916 "parser.tab.c" /* yacc.c:1651  */
+#line 684 "parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_SHR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4010 "parser.tab.c"
     break;
 
   case 222:
-#line 685 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_expr2(EXPR_ADD, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 3922 "parser.tab.c" /* yacc.c:1651  */
+#line 685 "parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_ADD, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4016 "parser.tab.c"
     break;
 
   case 223:
-#line 686 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_expr2(EXPR_SUB, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 3928 "parser.tab.c" /* yacc.c:1651  */
+#line 686 "parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_SUB, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4022 "parser.tab.c"
     break;
 
   case 224:
-#line 687 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_expr2(EXPR_MOD, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 3934 "parser.tab.c" /* yacc.c:1651  */
+#line 687 "parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_MOD, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4028 "parser.tab.c"
     break;
 
   case 225:
-#line 688 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_expr2(EXPR_MUL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 3940 "parser.tab.c" /* yacc.c:1651  */
+#line 688 "parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_MUL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4034 "parser.tab.c"
     break;
 
   case 226:
-#line 689 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_expr2(EXPR_DIV, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 3946 "parser.tab.c" /* yacc.c:1651  */
+#line 689 "parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_DIV, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4040 "parser.tab.c"
     break;
 
   case 227:
-#line 690 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_expr1(EXPR_LOGNOT, (yyvsp[0].expr)); }
-#line 3952 "parser.tab.c" /* yacc.c:1651  */
+#line 690 "parser.y"
+                                                { (yyval.expr) = make_expr1(EXPR_LOGNOT, (yyvsp[0].expr)); }
+#line 4046 "parser.tab.c"
     break;
 
   case 228:
-#line 691 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_expr1(EXPR_NOT, (yyvsp[0].expr)); }
-#line 3958 "parser.tab.c" /* yacc.c:1651  */
+#line 691 "parser.y"
+                                                { (yyval.expr) = make_expr1(EXPR_NOT, (yyvsp[0].expr)); }
+#line 4052 "parser.tab.c"
     break;
 
   case 229:
-#line 692 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_expr1(EXPR_POS, (yyvsp[0].expr)); }
-#line 3964 "parser.tab.c" /* yacc.c:1651  */
+#line 692 "parser.y"
+                                                { (yyval.expr) = make_expr1(EXPR_POS, (yyvsp[0].expr)); }
+#line 4058 "parser.tab.c"
     break;
 
   case 230:
-#line 693 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_expr1(EXPR_NEG, (yyvsp[0].expr)); }
-#line 3970 "parser.tab.c" /* yacc.c:1651  */
+#line 693 "parser.y"
+                                                { (yyval.expr) = make_expr1(EXPR_NEG, (yyvsp[0].expr)); }
+#line 4064 "parser.tab.c"
     break;
 
   case 231:
-#line 694 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_expr1(EXPR_ADDRESSOF, (yyvsp[0].expr)); }
-#line 3976 "parser.tab.c" /* yacc.c:1651  */
+#line 694 "parser.y"
+                                                { (yyval.expr) = make_expr1(EXPR_ADDRESSOF, (yyvsp[0].expr)); }
+#line 4070 "parser.tab.c"
     break;
 
   case 232:
-#line 695 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_expr1(EXPR_PPTR, (yyvsp[0].expr)); }
-#line 3982 "parser.tab.c" /* yacc.c:1651  */
+#line 695 "parser.y"
+                                                { (yyval.expr) = make_expr1(EXPR_PPTR, (yyvsp[0].expr)); }
+#line 4076 "parser.tab.c"
     break;
 
   case 233:
-#line 696 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_expr2(EXPR_MEMBER, make_expr1(EXPR_PPTR, (yyvsp[-2].expr)), make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str))); }
-#line 3988 "parser.tab.c" /* yacc.c:1651  */
+#line 696 "parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_MEMBER, make_expr1(EXPR_PPTR, (yyvsp[-2].expr)), make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str))); }
+#line 4082 "parser.tab.c"
     break;
 
   case 234:
-#line 697 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_expr2(EXPR_MEMBER, (yyvsp[-2].expr), make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str))); }
-#line 3994 "parser.tab.c" /* yacc.c:1651  */
+#line 697 "parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_MEMBER, (yyvsp[-2].expr), make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str))); }
+#line 4088 "parser.tab.c"
     break;
 
   case 235:
-#line 699 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_exprt(EXPR_CAST, declare_var(NULL, (yyvsp[-3].declspec), (yyvsp[-2].declarator), 0), (yyvsp[0].expr)); free((yyvsp[-3].declspec)); free((yyvsp[-2].declarator)); }
-#line 4000 "parser.tab.c" /* yacc.c:1651  */
+#line 699 "parser.y"
+                                                { (yyval.expr) = make_exprt(EXPR_CAST, declare_var(NULL, (yyvsp[-3].declspec), (yyvsp[-2].declarator), 0), (yyvsp[0].expr)); free((yyvsp[-3].declspec)); free((yyvsp[-2].declarator)); }
+#line 4094 "parser.tab.c"
     break;
 
   case 236:
-#line 701 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_exprt(EXPR_SIZEOF, declare_var(NULL, (yyvsp[-2].declspec), (yyvsp[-1].declarator), 0), NULL); free((yyvsp[-2].declspec)); free((yyvsp[-1].declarator)); }
-#line 4006 "parser.tab.c" /* yacc.c:1651  */
+#line 701 "parser.y"
+                                                { (yyval.expr) = make_exprt(EXPR_SIZEOF, declare_var(NULL, (yyvsp[-2].declspec), (yyvsp[-1].declarator), 0), NULL); free((yyvsp[-2].declspec)); free((yyvsp[-1].declarator)); }
+#line 4100 "parser.tab.c"
     break;
 
   case 237:
-#line 702 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = make_expr2(EXPR_ARRAY, (yyvsp[-3].expr), (yyvsp[-1].expr)); }
-#line 4012 "parser.tab.c" /* yacc.c:1651  */
+#line 702 "parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_ARRAY, (yyvsp[-3].expr), (yyvsp[-1].expr)); }
+#line 4106 "parser.tab.c"
     break;
 
   case 238:
-#line 703 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = (yyvsp[-1].expr); }
-#line 4018 "parser.tab.c" /* yacc.c:1651  */
+#line 703 "parser.y"
+                                                { (yyval.expr) = (yyvsp[-1].expr); }
+#line 4112 "parser.tab.c"
     break;
 
   case 239:
-#line 706 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr_list) = append_expr( NULL, (yyvsp[0].expr) ); }
-#line 4024 "parser.tab.c" /* yacc.c:1651  */
+#line 706 "parser.y"
+                                                { (yyval.expr_list) = append_expr( NULL, (yyvsp[0].expr) ); }
+#line 4118 "parser.tab.c"
     break;
 
   case 240:
-#line 707 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); }
-#line 4030 "parser.tab.c" /* yacc.c:1651  */
+#line 707 "parser.y"
+                                                        { (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); }
+#line 4124 "parser.tab.c"
     break;
 
   case 241:
-#line 710 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = (yyvsp[0].expr);
+#line 710 "parser.y"
+                                                { (yyval.expr) = (yyvsp[0].expr);
 						  if (!(yyval.expr)->is_const)
 						      error_loc("expression is not an integer constant\n");
 						}
-#line 4039 "parser.tab.c" /* yacc.c:1651  */
+#line 4133 "parser.tab.c"
     break;
 
   case 242:
-#line 716 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = (yyvsp[0].expr);
+#line 716 "parser.y"
+                                                { (yyval.expr) = (yyvsp[0].expr);
 						  if (!(yyval.expr)->is_const && (yyval.expr)->type != EXPR_STRLIT && (yyval.expr)->type != EXPR_WSTRLIT)
 						      error_loc("expression is not constant\n");
 						}
-#line 4048 "parser.tab.c" /* yacc.c:1651  */
+#line 4142 "parser.tab.c"
     break;
 
   case 243:
-#line 722 "parser.y" /* yacc.c:1651  */
-    { (yyval.var_list) = NULL; }
-#line 4054 "parser.tab.c" /* yacc.c:1651  */
+#line 722 "parser.y"
+                                                { (yyval.var_list) = NULL; }
+#line 4148 "parser.tab.c"
     break;
 
   case 244:
-#line 723 "parser.y" /* yacc.c:1651  */
-    { (yyval.var_list) = append_var_list((yyvsp[-1].var_list), (yyvsp[0].var_list)); }
-#line 4060 "parser.tab.c" /* yacc.c:1651  */
+#line 723 "parser.y"
+                                                { (yyval.var_list) = append_var_list((yyvsp[-1].var_list), (yyvsp[0].var_list)); }
+#line 4154 "parser.tab.c"
     break;
 
   case 245:
-#line 727 "parser.y" /* yacc.c:1651  */
-    { const char *first = LIST_ENTRY(list_head((yyvsp[-1].declarator_list)), declarator_t, entry)->var->name;
+#line 727 "parser.y"
+                                                { const char *first = LIST_ENTRY(list_head((yyvsp[-1].declarator_list)), declarator_t, entry)->var->name;
 						  check_field_attrs(first, (yyvsp[-3].attr_list));
 						  (yyval.var_list) = set_var_types((yyvsp[-3].attr_list), (yyvsp[-2].declspec), (yyvsp[-1].declarator_list));
 						}
-#line 4069 "parser.tab.c" /* yacc.c:1651  */
+#line 4163 "parser.tab.c"
     break;
 
   case 246:
-#line 731 "parser.y" /* yacc.c:1651  */
-    { var_t *v = make_var(NULL);
+#line 731 "parser.y"
+                                                { var_t *v = make_var(NULL);
 						  v->declspec.type = (yyvsp[-1].type); v->attrs = (yyvsp[-2].attr_list);
 						  (yyval.var_list) = append_var(NULL, v);
 						}
-#line 4078 "parser.tab.c" /* yacc.c:1651  */
+#line 4172 "parser.tab.c"
     break;
 
   case 247:
-#line 738 "parser.y" /* yacc.c:1651  */
-    { (yyval.var) = (yyvsp[-1].var); }
-#line 4084 "parser.tab.c" /* yacc.c:1651  */
+#line 738 "parser.y"
+                                                { (yyval.var) = (yyvsp[-1].var); }
+#line 4178 "parser.tab.c"
     break;
 
   case 248:
-#line 739 "parser.y" /* yacc.c:1651  */
-    { (yyval.var) = make_var(NULL); (yyval.var)->attrs = (yyvsp[-1].attr_list); }
-#line 4090 "parser.tab.c" /* yacc.c:1651  */
+#line 739 "parser.y"
+                                                { (yyval.var) = make_var(NULL); (yyval.var)->attrs = (yyvsp[-1].attr_list); }
+#line 4184 "parser.tab.c"
     break;
 
   case 249:
-#line 742 "parser.y" /* yacc.c:1651  */
-    { (yyval.var_list) = NULL; }
-#line 4096 "parser.tab.c" /* yacc.c:1651  */
+#line 742 "parser.y"
+                                                { (yyval.var_list) = NULL; }
+#line 4190 "parser.tab.c"
     break;
 
   case 250:
-#line 743 "parser.y" /* yacc.c:1651  */
-    { (yyval.var_list) = append_var( (yyvsp[-1].var_list), (yyvsp[0].var) ); }
-#line 4102 "parser.tab.c" /* yacc.c:1651  */
+#line 743 "parser.y"
+                                                { (yyval.var_list) = append_var( (yyvsp[-1].var_list), (yyvsp[0].var) ); }
+#line 4196 "parser.tab.c"
     break;
 
   case 251:
-#line 747 "parser.y" /* yacc.c:1651  */
-    { (yyval.var) = (yyvsp[-1].var); }
-#line 4108 "parser.tab.c" /* yacc.c:1651  */
+#line 747 "parser.y"
+                                                { (yyval.var) = (yyvsp[-1].var); }
+#line 4202 "parser.tab.c"
     break;
 
   case 252:
-#line 748 "parser.y" /* yacc.c:1651  */
-    { (yyval.var) = NULL; }
-#line 4114 "parser.tab.c" /* yacc.c:1651  */
+#line 748 "parser.y"
+                                                { (yyval.var) = NULL; }
+#line 4208 "parser.tab.c"
     break;
 
   case 253:
-#line 751 "parser.y" /* yacc.c:1651  */
-    { (yyval.var) = declare_var(check_field_attrs((yyvsp[0].declarator)->var->name, (yyvsp[-2].attr_list)),
+#line 751 "parser.y"
+                                                { (yyval.var) = declare_var(check_field_attrs((yyvsp[0].declarator)->var->name, (yyvsp[-2].attr_list)),
 						                (yyvsp[-1].declspec), (yyvsp[0].declarator), FALSE);
 						  free((yyvsp[0].declarator));
 						}
-#line 4123 "parser.tab.c" /* yacc.c:1651  */
+#line 4217 "parser.tab.c"
     break;
 
   case 254:
-#line 755 "parser.y" /* yacc.c:1651  */
-    { var_t *v = make_var(NULL);
+#line 755 "parser.y"
+                                                { var_t *v = make_var(NULL);
 						  v->declspec.type = (yyvsp[0].type); v->attrs = (yyvsp[-1].attr_list);
 						  (yyval.var) = v;
 						}
-#line 4132 "parser.tab.c" /* yacc.c:1651  */
+#line 4226 "parser.tab.c"
     break;
 
   case 255:
-#line 761 "parser.y" /* yacc.c:1651  */
-    { (yyval.var) = (yyvsp[0].var);
+#line 761 "parser.y"
+                                                { (yyval.var) = (yyvsp[0].var);
 						  if (type_get_type((yyval.var)->declspec.type) != TYPE_FUNCTION)
 						    error_loc("only methods may be declared inside the methods section of a dispinterface\n");
 						  check_function_attrs((yyval.var)->name, (yyval.var)->attrs);
 						}
-#line 4142 "parser.tab.c" /* yacc.c:1651  */
+#line 4236 "parser.tab.c"
     break;
 
   case 256:
-#line 770 "parser.y" /* yacc.c:1651  */
-    { (yyval.var) = declare_var((yyvsp[-2].attr_list), (yyvsp[-1].declspec), (yyvsp[0].declarator), FALSE);
+#line 770 "parser.y"
+                                                { (yyval.var) = declare_var((yyvsp[-2].attr_list), (yyvsp[-1].declspec), (yyvsp[0].declarator), FALSE);
 						  free((yyvsp[0].declarator));
 						}
-#line 4150 "parser.tab.c" /* yacc.c:1651  */
+#line 4244 "parser.tab.c"
     break;
 
   case 257:
-#line 773 "parser.y" /* yacc.c:1651  */
-    { (yyval.var) = declare_var(NULL, (yyvsp[-1].declspec), (yyvsp[0].declarator), FALSE);
+#line 773 "parser.y"
+                                                { (yyval.var) = declare_var(NULL, (yyvsp[-1].declspec), (yyvsp[0].declarator), FALSE);
 						  free((yyvsp[0].declarator));
 						}
-#line 4158 "parser.tab.c" /* yacc.c:1651  */
+#line 4252 "parser.tab.c"
     break;
 
   case 258:
-#line 778 "parser.y" /* yacc.c:1651  */
-    { (yyval.var) = NULL; }
-#line 4164 "parser.tab.c" /* yacc.c:1651  */
+#line 778 "parser.y"
+                                                { (yyval.var) = NULL; }
+#line 4258 "parser.tab.c"
     break;
 
   case 260:
-#line 782 "parser.y" /* yacc.c:1651  */
-    { (yyval.str) = NULL; }
-#line 4170 "parser.tab.c" /* yacc.c:1651  */
+#line 782 "parser.y"
+                                                { (yyval.str) = NULL; }
+#line 4264 "parser.tab.c"
     break;
 
   case 261:
-#line 783 "parser.y" /* yacc.c:1651  */
-    { (yyval.str) = (yyvsp[0].str); }
-#line 4176 "parser.tab.c" /* yacc.c:1651  */
+#line 783 "parser.y"
+                                                { (yyval.str) = (yyvsp[0].str); }
+#line 4270 "parser.tab.c"
     break;
 
   case 262:
-#line 784 "parser.y" /* yacc.c:1651  */
-    { (yyval.str) = (yyvsp[0].str); }
-#line 4182 "parser.tab.c" /* yacc.c:1651  */
+#line 784 "parser.y"
+                                                { (yyval.str) = (yyvsp[0].str); }
+#line 4276 "parser.tab.c"
     break;
 
   case 263:
-#line 787 "parser.y" /* yacc.c:1651  */
-    { (yyval.var) = make_var((yyvsp[0].str)); }
-#line 4188 "parser.tab.c" /* yacc.c:1651  */
+#line 787 "parser.y"
+                                                { (yyval.var) = make_var((yyvsp[0].str)); }
+#line 4282 "parser.tab.c"
     break;
 
   case 264:
-#line 789 "parser.y" /* yacc.c:1651  */
-    { (yyval.var) = make_var((yyvsp[0].str)); }
-#line 4194 "parser.tab.c" /* yacc.c:1651  */
+#line 789 "parser.y"
+                                                { (yyval.var) = make_var((yyvsp[0].str)); }
+#line 4288 "parser.tab.c"
     break;
 
   case 265:
-#line 792 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
-#line 4200 "parser.tab.c" /* yacc.c:1651  */
+#line 792 "parser.y"
+                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
+#line 4294 "parser.tab.c"
     break;
 
   case 266:
-#line 793 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
-#line 4206 "parser.tab.c" /* yacc.c:1651  */
+#line 793 "parser.y"
+                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
+#line 4300 "parser.tab.c"
     break;
 
   case 268:
-#line 795 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = type_new_int(type_basic_get_type((yyvsp[0].type)), -1); }
-#line 4212 "parser.tab.c" /* yacc.c:1651  */
+#line 795 "parser.y"
+                                                { (yyval.type) = type_new_int(type_basic_get_type((yyvsp[0].type)), -1); }
+#line 4306 "parser.tab.c"
     break;
 
   case 269:
-#line 796 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = type_new_int(type_basic_get_type((yyvsp[0].type)), 1); }
-#line 4218 "parser.tab.c" /* yacc.c:1651  */
+#line 796 "parser.y"
+                                                { (yyval.type) = type_new_int(type_basic_get_type((yyvsp[0].type)), 1); }
+#line 4312 "parser.tab.c"
     break;
 
   case 270:
-#line 797 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = type_new_int(TYPE_BASIC_INT, 1); }
-#line 4224 "parser.tab.c" /* yacc.c:1651  */
+#line 797 "parser.y"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT, 1); }
+#line 4318 "parser.tab.c"
     break;
 
   case 271:
-#line 798 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
-#line 4230 "parser.tab.c" /* yacc.c:1651  */
+#line 798 "parser.y"
+                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
+#line 4324 "parser.tab.c"
     break;
 
   case 272:
-#line 799 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
-#line 4236 "parser.tab.c" /* yacc.c:1651  */
+#line 799 "parser.y"
+                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
+#line 4330 "parser.tab.c"
     break;
 
   case 273:
-#line 800 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
-#line 4242 "parser.tab.c" /* yacc.c:1651  */
+#line 800 "parser.y"
+                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
+#line 4336 "parser.tab.c"
     break;
 
   case 274:
-#line 801 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
-#line 4248 "parser.tab.c" /* yacc.c:1651  */
+#line 801 "parser.y"
+                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
+#line 4342 "parser.tab.c"
     break;
 
   case 275:
-#line 802 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
-#line 4254 "parser.tab.c" /* yacc.c:1651  */
+#line 802 "parser.y"
+                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
+#line 4348 "parser.tab.c"
     break;
 
   case 278:
-#line 809 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = type_new_int(TYPE_BASIC_INT, 0); }
-#line 4260 "parser.tab.c" /* yacc.c:1651  */
+#line 809 "parser.y"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT, 0); }
+#line 4354 "parser.tab.c"
     break;
 
   case 279:
-#line 810 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = type_new_int(TYPE_BASIC_INT16, 0); }
-#line 4266 "parser.tab.c" /* yacc.c:1651  */
+#line 810 "parser.y"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT16, 0); }
+#line 4360 "parser.tab.c"
     break;
 
   case 280:
-#line 811 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = type_new_int(TYPE_BASIC_INT8, 0); }
-#line 4272 "parser.tab.c" /* yacc.c:1651  */
+#line 811 "parser.y"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT8, 0); }
+#line 4366 "parser.tab.c"
     break;
 
   case 281:
-#line 812 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = type_new_int(TYPE_BASIC_LONG, 0); }
-#line 4278 "parser.tab.c" /* yacc.c:1651  */
+#line 812 "parser.y"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_LONG, 0); }
+#line 4372 "parser.tab.c"
     break;
 
   case 282:
-#line 813 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = type_new_int(TYPE_BASIC_HYPER, 0); }
-#line 4284 "parser.tab.c" /* yacc.c:1651  */
+#line 813 "parser.y"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_HYPER, 0); }
+#line 4378 "parser.tab.c"
     break;
 
   case 283:
-#line 814 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = type_new_int(TYPE_BASIC_INT64, 0); }
-#line 4290 "parser.tab.c" /* yacc.c:1651  */
+#line 814 "parser.y"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT64, 0); }
+#line 4384 "parser.tab.c"
     break;
 
   case 284:
-#line 815 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = type_new_int(TYPE_BASIC_CHAR, 0); }
-#line 4296 "parser.tab.c" /* yacc.c:1651  */
+#line 815 "parser.y"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_CHAR, 0); }
+#line 4390 "parser.tab.c"
     break;
 
   case 285:
-#line 816 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = type_new_int(TYPE_BASIC_INT32, 0); }
-#line 4302 "parser.tab.c" /* yacc.c:1651  */
+#line 816 "parser.y"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT32, 0); }
+#line 4396 "parser.tab.c"
     break;
 
   case 286:
-#line 817 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = type_new_int(TYPE_BASIC_INT3264, 0); }
-#line 4308 "parser.tab.c" /* yacc.c:1651  */
+#line 817 "parser.y"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT3264, 0); }
+#line 4402 "parser.tab.c"
     break;
 
   case 287:
-#line 820 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = type_new_coclass((yyvsp[0].str)); }
-#line 4314 "parser.tab.c" /* yacc.c:1651  */
+#line 820 "parser.y"
+                                                { (yyval.type) = type_new_coclass((yyvsp[0].str)); }
+#line 4408 "parser.tab.c"
     break;
 
   case 288:
-#line 821 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = find_type((yyvsp[0].str), NULL, 0);
+#line 821 "parser.y"
+                                                { (yyval.type) = find_type((yyvsp[0].str), NULL, 0);
 						  if (type_get_type_detect_alias((yyval.type)) != TYPE_COCLASS)
 						    error_loc("%s was not declared a coclass at %s:%d\n",
 							      (yyvsp[0].str), (yyval.type)->loc_info.input_name,
 							      (yyval.type)->loc_info.line_number);
 						}
-#line 4325 "parser.tab.c" /* yacc.c:1651  */
+#line 4419 "parser.tab.c"
     break;
 
   case 289:
-#line 829 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = (yyvsp[0].type);
+#line 829 "parser.y"
+                                                { (yyval.type) = (yyvsp[0].type);
 						  check_def((yyval.type));
 						  (yyval.type)->attrs = check_coclass_attrs((yyvsp[0].type)->name, (yyvsp[-1].attr_list));
 						}
-#line 4334 "parser.tab.c" /* yacc.c:1651  */
+#line 4428 "parser.tab.c"
     break;
 
   case 290:
-#line 836 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = type_coclass_define((yyvsp[-4].type), (yyvsp[-2].ifref_list)); }
-#line 4340 "parser.tab.c" /* yacc.c:1651  */
+#line 836 "parser.y"
+                                                { (yyval.type) = type_coclass_define((yyvsp[-4].type), (yyvsp[-2].ifref_list)); }
+#line 4434 "parser.tab.c"
     break;
 
   case 291:
-#line 839 "parser.y" /* yacc.c:1651  */
-    { (yyval.str) = (yyvsp[0].str); }
-#line 4346 "parser.tab.c" /* yacc.c:1651  */
+#line 839 "parser.y"
+                                                { (yyval.str) = (yyvsp[0].str); }
+#line 4440 "parser.tab.c"
     break;
 
   case 292:
-#line 842 "parser.y" /* yacc.c:1651  */
-    { (yyval.ifref_list) = NULL; }
-#line 4352 "parser.tab.c" /* yacc.c:1651  */
+#line 842 "parser.y"
+                                                { (yyval.ifref_list) = NULL; }
+#line 4446 "parser.tab.c"
     break;
 
   case 293:
-#line 843 "parser.y" /* yacc.c:1651  */
-    { (yyval.ifref_list) = append_ifref( (yyvsp[-1].ifref_list), (yyvsp[0].ifref) ); }
-#line 4358 "parser.tab.c" /* yacc.c:1651  */
+#line 843 "parser.y"
+                                                { (yyval.ifref_list) = append_ifref( (yyvsp[-1].ifref_list), (yyvsp[0].ifref) ); }
+#line 4452 "parser.tab.c"
     break;
 
   case 294:
-#line 847 "parser.y" /* yacc.c:1651  */
-    { (yyval.ifref) = make_ifref((yyvsp[0].type)); (yyval.ifref)->attrs = (yyvsp[-1].attr_list); }
-#line 4364 "parser.tab.c" /* yacc.c:1651  */
+#line 847 "parser.y"
+                                                { (yyval.ifref) = make_ifref((yyvsp[0].type)); (yyval.ifref)->attrs = (yyvsp[-1].attr_list); }
+#line 4458 "parser.tab.c"
     break;
 
   case 295:
-#line 850 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), current_namespace, 0); }
-#line 4370 "parser.tab.c" /* yacc.c:1651  */
+#line 850 "parser.y"
+                                                { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), current_namespace, 0); }
+#line 4464 "parser.tab.c"
     break;
 
   case 296:
-#line 851 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), current_namespace, 0); }
-#line 4376 "parser.tab.c" /* yacc.c:1651  */
+#line 851 "parser.y"
+                                                { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), current_namespace, 0); }
+#line 4470 "parser.tab.c"
     break;
 
   case 297:
-#line 854 "parser.y" /* yacc.c:1651  */
-    { attr_t *attrs;
+#line 854 "parser.y"
+                                                { attr_t *attrs;
 						  (yyval.type) = (yyvsp[0].type);
 						  check_def((yyval.type));
 						  attrs = make_attr(ATTR_DISPINTERFACE);
 						  (yyval.type)->attrs = append_attr( check_dispiface_attrs((yyvsp[0].type)->name, (yyvsp[-1].attr_list)), attrs );
 						  (yyval.type)->defined = TRUE;
 						}
-#line 4388 "parser.tab.c" /* yacc.c:1651  */
+#line 4482 "parser.tab.c"
     break;
 
   case 298:
-#line 863 "parser.y" /* yacc.c:1651  */
-    { (yyval.var_list) = NULL; }
-#line 4394 "parser.tab.c" /* yacc.c:1651  */
+#line 863 "parser.y"
+                                                { (yyval.var_list) = NULL; }
+#line 4488 "parser.tab.c"
     break;
 
   case 299:
-#line 864 "parser.y" /* yacc.c:1651  */
-    { (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[-1].var) ); }
-#line 4400 "parser.tab.c" /* yacc.c:1651  */
+#line 864 "parser.y"
+                                                { (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[-1].var) ); }
+#line 4494 "parser.tab.c"
     break;
 
   case 300:
-#line 867 "parser.y" /* yacc.c:1651  */
-    { (yyval.var_list) = NULL; }
-#line 4406 "parser.tab.c" /* yacc.c:1651  */
+#line 867 "parser.y"
+                                                { (yyval.var_list) = NULL; }
+#line 4500 "parser.tab.c"
     break;
 
   case 301:
-#line 868 "parser.y" /* yacc.c:1651  */
-    { (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[-1].var) ); }
-#line 4412 "parser.tab.c" /* yacc.c:1651  */
+#line 868 "parser.y"
+                                                { (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[-1].var) ); }
+#line 4506 "parser.tab.c"
     break;
 
   case 302:
-#line 874 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = (yyvsp[-4].type);
+#line 874 "parser.y"
+                                                { (yyval.type) = (yyvsp[-4].type);
 						  type_dispinterface_define((yyval.type), (yyvsp[-2].var_list), (yyvsp[-1].var_list));
 						}
-#line 4420 "parser.tab.c" /* yacc.c:1651  */
+#line 4514 "parser.tab.c"
     break;
 
   case 303:
-#line 878 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = (yyvsp[-4].type);
+#line 878 "parser.y"
+                                                { (yyval.type) = (yyvsp[-4].type);
 						  type_dispinterface_define_from_iface((yyval.type), (yyvsp[-2].type));
 						}
-#line 4428 "parser.tab.c" /* yacc.c:1651  */
+#line 4522 "parser.tab.c"
     break;
 
   case 304:
-#line 883 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = NULL; }
-#line 4434 "parser.tab.c" /* yacc.c:1651  */
+#line 883 "parser.y"
+                                                { (yyval.type) = NULL; }
+#line 4528 "parser.tab.c"
     break;
 
   case 305:
-#line 884 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = find_type_or_error2((yyvsp[0].str), 0); }
-#line 4440 "parser.tab.c" /* yacc.c:1651  */
+#line 884 "parser.y"
+                                                { (yyval.type) = find_type_or_error2((yyvsp[0].str), 0); }
+#line 4534 "parser.tab.c"
     break;
 
   case 306:
-#line 887 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), current_namespace, 0); }
-#line 4446 "parser.tab.c" /* yacc.c:1651  */
+#line 887 "parser.y"
+                                                { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), current_namespace, 0); }
+#line 4540 "parser.tab.c"
     break;
 
   case 307:
-#line 888 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), current_namespace, 0); }
-#line 4452 "parser.tab.c" /* yacc.c:1651  */
+#line 888 "parser.y"
+                                                { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), current_namespace, 0); }
+#line 4546 "parser.tab.c"
     break;
 
   case 308:
-#line 891 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = (yyvsp[0].type);
+#line 891 "parser.y"
+                                                { (yyval.type) = (yyvsp[0].type);
 						  check_def((yyvsp[0].type));
 						  (yyvsp[0].type)->attrs = check_iface_attrs((yyvsp[0].type)->name, (yyvsp[-1].attr_list));
 						  (yyvsp[0].type)->defined = TRUE;
 						}
-#line 4462 "parser.tab.c" /* yacc.c:1651  */
+#line 4556 "parser.tab.c"
     break;
 
   case 309:
-#line 899 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = (yyvsp[-5].type);
+#line 899 "parser.y"
+                                                { (yyval.type) = (yyvsp[-5].type);
 						  if((yyval.type) == (yyvsp[-4].type))
 						    error_loc("Interface can't inherit from itself\n");
 						  type_interface_define((yyval.type), (yyvsp[-4].type), (yyvsp[-2].stmt_list));
 						  check_async_uuid((yyval.type));
 						}
-#line 4473 "parser.tab.c" /* yacc.c:1651  */
+#line 4567 "parser.tab.c"
     break;
 
   case 310:
-#line 909 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = (yyvsp[-7].type);
+#line 909 "parser.y"
+                                                { (yyval.type) = (yyvsp[-7].type);
 						  type_interface_define((yyval.type), find_type_or_error2((yyvsp[-5].str), 0), (yyvsp[-2].stmt_list));
 						}
-#line 4481 "parser.tab.c" /* yacc.c:1651  */
+#line 4575 "parser.tab.c"
     break;
 
   case 311:
-#line 912 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = (yyvsp[-1].type); }
-#line 4487 "parser.tab.c" /* yacc.c:1651  */
+#line 912 "parser.y"
+                                                { (yyval.type) = (yyvsp[-1].type); }
+#line 4581 "parser.tab.c"
     break;
 
   case 312:
-#line 916 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = (yyvsp[-1].type); }
-#line 4493 "parser.tab.c" /* yacc.c:1651  */
+#line 916 "parser.y"
+                                                { (yyval.type) = (yyvsp[-1].type); }
+#line 4587 "parser.tab.c"
     break;
 
   case 313:
-#line 917 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = (yyvsp[-1].type); }
-#line 4499 "parser.tab.c" /* yacc.c:1651  */
+#line 917 "parser.y"
+                                                { (yyval.type) = (yyvsp[-1].type); }
+#line 4593 "parser.tab.c"
     break;
 
   case 314:
-#line 920 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = type_new_module((yyvsp[0].str)); }
-#line 4505 "parser.tab.c" /* yacc.c:1651  */
+#line 920 "parser.y"
+                                                { (yyval.type) = type_new_module((yyvsp[0].str)); }
+#line 4599 "parser.tab.c"
     break;
 
   case 315:
-#line 921 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = type_new_module((yyvsp[0].str)); }
-#line 4511 "parser.tab.c" /* yacc.c:1651  */
+#line 921 "parser.y"
+                                                { (yyval.type) = type_new_module((yyvsp[0].str)); }
+#line 4605 "parser.tab.c"
     break;
 
   case 316:
-#line 924 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = (yyvsp[0].type);
+#line 924 "parser.y"
+                                                { (yyval.type) = (yyvsp[0].type);
 						  (yyval.type)->attrs = check_module_attrs((yyvsp[0].type)->name, (yyvsp[-1].attr_list));
 						}
-#line 4519 "parser.tab.c" /* yacc.c:1651  */
+#line 4613 "parser.tab.c"
     break;
 
   case 317:
-#line 930 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = (yyvsp[-4].type);
+#line 930 "parser.y"
+                                                { (yyval.type) = (yyvsp[-4].type);
                                                   type_module_define((yyval.type), (yyvsp[-2].stmt_list));
 						}
-#line 4527 "parser.tab.c" /* yacc.c:1651  */
+#line 4621 "parser.tab.c"
     break;
 
   case 318:
-#line 936 "parser.y" /* yacc.c:1651  */
-    { (yyval.stgclass) = STG_EXTERN; }
-#line 4533 "parser.tab.c" /* yacc.c:1651  */
+#line 936 "parser.y"
+                                                { (yyval.stgclass) = STG_EXTERN; }
+#line 4627 "parser.tab.c"
     break;
 
   case 319:
-#line 937 "parser.y" /* yacc.c:1651  */
-    { (yyval.stgclass) = STG_STATIC; }
-#line 4539 "parser.tab.c" /* yacc.c:1651  */
+#line 937 "parser.y"
+                                                { (yyval.stgclass) = STG_STATIC; }
+#line 4633 "parser.tab.c"
     break;
 
   case 320:
-#line 938 "parser.y" /* yacc.c:1651  */
-    { (yyval.stgclass) = STG_REGISTER; }
-#line 4545 "parser.tab.c" /* yacc.c:1651  */
+#line 938 "parser.y"
+                                                { (yyval.stgclass) = STG_REGISTER; }
+#line 4639 "parser.tab.c"
     break;
 
   case 321:
-#line 942 "parser.y" /* yacc.c:1651  */
-    { (yyval.function_specifier) = FUNCTION_SPECIFIER_INLINE; }
-#line 4551 "parser.tab.c" /* yacc.c:1651  */
+#line 942 "parser.y"
+                                                { (yyval.function_specifier) = FUNCTION_SPECIFIER_INLINE; }
+#line 4645 "parser.tab.c"
     break;
 
   case 322:
-#line 946 "parser.y" /* yacc.c:1651  */
-    { (yyval.type_qualifier) = TYPE_QUALIFIER_CONST; }
-#line 4557 "parser.tab.c" /* yacc.c:1651  */
+#line 946 "parser.y"
+                                                { (yyval.type_qualifier) = TYPE_QUALIFIER_CONST; }
+#line 4651 "parser.tab.c"
     break;
 
   case 323:
-#line 949 "parser.y" /* yacc.c:1651  */
-    { (yyval.type_qualifier) = 0; }
-#line 4563 "parser.tab.c" /* yacc.c:1651  */
+#line 949 "parser.y"
+                                                { (yyval.type_qualifier) = 0; }
+#line 4657 "parser.tab.c"
     break;
 
   case 324:
-#line 950 "parser.y" /* yacc.c:1651  */
-    { (yyval.type_qualifier) = (yyvsp[-1].type_qualifier) | (yyvsp[0].type_qualifier); }
-#line 4569 "parser.tab.c" /* yacc.c:1651  */
+#line 950 "parser.y"
+                                                { (yyval.type_qualifier) = (yyvsp[-1].type_qualifier) | (yyvsp[0].type_qualifier); }
+#line 4663 "parser.tab.c"
     break;
 
   case 325:
-#line 953 "parser.y" /* yacc.c:1651  */
-    { (yyval.declspec) = make_decl_spec((yyvsp[-1].type), (yyvsp[0].declspec), NULL, STG_NONE, 0, 0); }
-#line 4575 "parser.tab.c" /* yacc.c:1651  */
+#line 953 "parser.y"
+                                                { (yyval.declspec) = make_decl_spec((yyvsp[-1].type), (yyvsp[0].declspec), NULL, STG_NONE, 0, 0); }
+#line 4669 "parser.tab.c"
     break;
 
   case 326:
-#line 955 "parser.y" /* yacc.c:1651  */
-    { (yyval.declspec) = make_decl_spec((yyvsp[-1].type), (yyvsp[-2].declspec), (yyvsp[0].declspec), STG_NONE, 0, 0); }
-#line 4581 "parser.tab.c" /* yacc.c:1651  */
+#line 955 "parser.y"
+                                                { (yyval.declspec) = make_decl_spec((yyvsp[-1].type), (yyvsp[-2].declspec), (yyvsp[0].declspec), STG_NONE, 0, 0); }
+#line 4675 "parser.tab.c"
     break;
 
   case 327:
-#line 958 "parser.y" /* yacc.c:1651  */
-    { (yyval.declspec) = NULL; }
-#line 4587 "parser.tab.c" /* yacc.c:1651  */
+#line 958 "parser.y"
+                                                { (yyval.declspec) = NULL; }
+#line 4681 "parser.tab.c"
     break;
 
   case 329:
-#line 963 "parser.y" /* yacc.c:1651  */
-    { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, STG_NONE, (yyvsp[-1].type_qualifier), 0); }
-#line 4593 "parser.tab.c" /* yacc.c:1651  */
+#line 963 "parser.y"
+                                                { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, STG_NONE, (yyvsp[-1].type_qualifier), 0); }
+#line 4687 "parser.tab.c"
     break;
 
   case 330:
-#line 964 "parser.y" /* yacc.c:1651  */
-    { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, STG_NONE, 0, (yyvsp[-1].function_specifier)); }
-#line 4599 "parser.tab.c" /* yacc.c:1651  */
+#line 964 "parser.y"
+                                                  { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, STG_NONE, 0, (yyvsp[-1].function_specifier)); }
+#line 4693 "parser.tab.c"
     break;
 
   case 331:
-#line 965 "parser.y" /* yacc.c:1651  */
-    { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, (yyvsp[-1].stgclass), 0, 0); }
-#line 4605 "parser.tab.c" /* yacc.c:1651  */
+#line 965 "parser.y"
+                                                { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, (yyvsp[-1].stgclass), 0, 0); }
+#line 4699 "parser.tab.c"
     break;
 
   case 332:
-#line 970 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
-#line 4611 "parser.tab.c" /* yacc.c:1651  */
+#line 970 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
+#line 4705 "parser.tab.c"
     break;
 
   case 333:
-#line 971 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
-#line 4617 "parser.tab.c" /* yacc.c:1651  */
+#line 971 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
+#line 4711 "parser.tab.c"
     break;
 
   case 335:
-#line 976 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator) = make_declarator((yyvsp[0].var)); }
-#line 4623 "parser.tab.c" /* yacc.c:1651  */
+#line 976 "parser.y"
+                                                { (yyval.declarator) = make_declarator((yyvsp[0].var)); }
+#line 4717 "parser.tab.c"
     break;
 
   case 336:
-#line 977 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator) = (yyvsp[-1].declarator); }
-#line 4629 "parser.tab.c" /* yacc.c:1651  */
+#line 977 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[-1].declarator); }
+#line 4723 "parser.tab.c"
     break;
 
   case 337:
-#line 978 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator) = (yyvsp[-1].declarator); append_array((yyval.declarator), (yyvsp[0].expr)); }
-#line 4635 "parser.tab.c" /* yacc.c:1651  */
+#line 978 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[-1].declarator); append_array((yyval.declarator), (yyvsp[0].expr)); }
+#line 4729 "parser.tab.c"
     break;
 
   case 338:
-#line 979 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator) = (yyvsp[-3].declarator); append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0); }
-#line 4641 "parser.tab.c" /* yacc.c:1651  */
+#line 979 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[-3].declarator); append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0); }
+#line 4735 "parser.tab.c"
     break;
 
   case 339:
-#line 985 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
-#line 4647 "parser.tab.c" /* yacc.c:1651  */
+#line 985 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
+#line 4741 "parser.tab.c"
     break;
 
   case 340:
-#line 986 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
-#line 4653 "parser.tab.c" /* yacc.c:1651  */
+#line 986 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
+#line 4747 "parser.tab.c"
     break;
 
   case 342:
-#line 993 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
-#line 4659 "parser.tab.c" /* yacc.c:1651  */
+#line 993 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
+#line 4753 "parser.tab.c"
     break;
 
   case 343:
-#line 994 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
-#line 4665 "parser.tab.c" /* yacc.c:1651  */
+#line 994 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
+#line 4759 "parser.tab.c"
     break;
 
   case 344:
-#line 998 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator) = make_declarator(NULL); }
-#line 4671 "parser.tab.c" /* yacc.c:1651  */
+#line 998 "parser.y"
+                                                { (yyval.declarator) = make_declarator(NULL); }
+#line 4765 "parser.tab.c"
     break;
 
   case 346:
-#line 1004 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator) = (yyvsp[-1].declarator); }
-#line 4677 "parser.tab.c" /* yacc.c:1651  */
+#line 1004 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[-1].declarator); }
+#line 4771 "parser.tab.c"
     break;
 
   case 347:
-#line 1005 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator) = (yyvsp[-1].declarator); append_array((yyval.declarator), (yyvsp[0].expr)); }
-#line 4683 "parser.tab.c" /* yacc.c:1651  */
+#line 1005 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[-1].declarator); append_array((yyval.declarator), (yyvsp[0].expr)); }
+#line 4777 "parser.tab.c"
     break;
 
   case 348:
-#line 1006 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator) = make_declarator(NULL); append_array((yyval.declarator), (yyvsp[0].expr)); }
-#line 4689 "parser.tab.c" /* yacc.c:1651  */
+#line 1006 "parser.y"
+                                                { (yyval.declarator) = make_declarator(NULL); append_array((yyval.declarator), (yyvsp[0].expr)); }
+#line 4783 "parser.tab.c"
     break;
 
   case 349:
-#line 1008 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator) = make_declarator(NULL);
+#line 1008 "parser.y"
+                                                { (yyval.declarator) = make_declarator(NULL);
 						  append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0);
 						}
-#line 4697 "parser.tab.c" /* yacc.c:1651  */
+#line 4791 "parser.tab.c"
     break;
 
   case 350:
-#line 1012 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator) = (yyvsp[-3].declarator);
+#line 1012 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[-3].declarator);
 						  append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0);
 						}
-#line 4705 "parser.tab.c" /* yacc.c:1651  */
+#line 4799 "parser.tab.c"
     break;
 
   case 351:
-#line 1020 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
-#line 4711 "parser.tab.c" /* yacc.c:1651  */
+#line 1020 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
+#line 4805 "parser.tab.c"
     break;
 
   case 352:
-#line 1021 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
-#line 4717 "parser.tab.c" /* yacc.c:1651  */
+#line 1021 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
+#line 4811 "parser.tab.c"
     break;
 
   case 354:
-#line 1028 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
-#line 4723 "parser.tab.c" /* yacc.c:1651  */
+#line 1028 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
+#line 4817 "parser.tab.c"
     break;
 
   case 355:
-#line 1029 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
-#line 4729 "parser.tab.c" /* yacc.c:1651  */
+#line 1029 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
+#line 4823 "parser.tab.c"
     break;
 
   case 356:
-#line 1033 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator) = make_declarator(NULL); }
-#line 4735 "parser.tab.c" /* yacc.c:1651  */
+#line 1033 "parser.y"
+                                                { (yyval.declarator) = make_declarator(NULL); }
+#line 4829 "parser.tab.c"
     break;
 
   case 358:
-#line 1041 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator) = make_declarator((yyvsp[0].var)); }
-#line 4741 "parser.tab.c" /* yacc.c:1651  */
+#line 1041 "parser.y"
+                                                { (yyval.declarator) = make_declarator((yyvsp[0].var)); }
+#line 4835 "parser.tab.c"
     break;
 
   case 359:
-#line 1042 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator) = (yyvsp[-1].declarator); }
-#line 4747 "parser.tab.c" /* yacc.c:1651  */
+#line 1042 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[-1].declarator); }
+#line 4841 "parser.tab.c"
     break;
 
   case 360:
-#line 1043 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator) = (yyvsp[-1].declarator); append_array((yyval.declarator), (yyvsp[0].expr)); }
-#line 4753 "parser.tab.c" /* yacc.c:1651  */
+#line 1043 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[-1].declarator); append_array((yyval.declarator), (yyvsp[0].expr)); }
+#line 4847 "parser.tab.c"
     break;
 
   case 361:
-#line 1044 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator) = make_declarator(NULL); append_array((yyval.declarator), (yyvsp[0].expr)); }
-#line 4759 "parser.tab.c" /* yacc.c:1651  */
+#line 1044 "parser.y"
+                                                { (yyval.declarator) = make_declarator(NULL); append_array((yyval.declarator), (yyvsp[0].expr)); }
+#line 4853 "parser.tab.c"
     break;
 
   case 362:
-#line 1046 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator) = make_declarator(NULL);
+#line 1046 "parser.y"
+                                                { (yyval.declarator) = make_declarator(NULL);
 						  append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0);
 						}
-#line 4767 "parser.tab.c" /* yacc.c:1651  */
+#line 4861 "parser.tab.c"
     break;
 
   case 363:
-#line 1050 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator) = (yyvsp[-3].declarator);
+#line 1050 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[-3].declarator);
 						  append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0);
 						}
-#line 4775 "parser.tab.c" /* yacc.c:1651  */
+#line 4869 "parser.tab.c"
     break;
 
   case 364:
-#line 1056 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator_list) = append_declarator( NULL, (yyvsp[0].declarator) ); }
-#line 4781 "parser.tab.c" /* yacc.c:1651  */
+#line 1056 "parser.y"
+                                                { (yyval.declarator_list) = append_declarator( NULL, (yyvsp[0].declarator) ); }
+#line 4875 "parser.tab.c"
     break;
 
   case 365:
-#line 1057 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator_list) = append_declarator( (yyvsp[-2].declarator_list), (yyvsp[0].declarator) ); }
-#line 4787 "parser.tab.c" /* yacc.c:1651  */
+#line 1057 "parser.y"
+                                                { (yyval.declarator_list) = append_declarator( (yyvsp[-2].declarator_list), (yyvsp[0].declarator) ); }
+#line 4881 "parser.tab.c"
     break;
 
   case 366:
-#line 1060 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = NULL; }
-#line 4793 "parser.tab.c" /* yacc.c:1651  */
+#line 1060 "parser.y"
+                                                { (yyval.expr) = NULL; }
+#line 4887 "parser.tab.c"
     break;
 
   case 367:
-#line 1061 "parser.y" /* yacc.c:1651  */
-    { (yyval.expr) = (yyvsp[0].expr); }
-#line 4799 "parser.tab.c" /* yacc.c:1651  */
+#line 1061 "parser.y"
+                                                { (yyval.expr) = (yyvsp[0].expr); }
+#line 4893 "parser.tab.c"
     break;
 
   case 368:
-#line 1064 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator) = (yyvsp[-1].declarator); (yyval.declarator)->bits = (yyvsp[0].expr);
+#line 1064 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[-1].declarator); (yyval.declarator)->bits = (yyvsp[0].expr);
 						  if (!(yyval.declarator)->bits && !(yyval.declarator)->var->name)
 						    error_loc("unnamed fields are not allowed\n");
 						}
-#line 4808 "parser.tab.c" /* yacc.c:1651  */
+#line 4902 "parser.tab.c"
     break;
 
   case 369:
-#line 1071 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator_list) = append_declarator( NULL, (yyvsp[0].declarator) ); }
-#line 4814 "parser.tab.c" /* yacc.c:1651  */
+#line 1071 "parser.y"
+                                                { (yyval.declarator_list) = append_declarator( NULL, (yyvsp[0].declarator) ); }
+#line 4908 "parser.tab.c"
     break;
 
   case 370:
-#line 1073 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator_list) = append_declarator( (yyvsp[-2].declarator_list), (yyvsp[0].declarator) ); }
-#line 4820 "parser.tab.c" /* yacc.c:1651  */
+#line 1073 "parser.y"
+                                                { (yyval.declarator_list) = append_declarator( (yyvsp[-2].declarator_list), (yyvsp[0].declarator) ); }
+#line 4914 "parser.tab.c"
     break;
 
   case 371:
-#line 1077 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator) = (yyvsp[0].declarator); }
-#line 4826 "parser.tab.c" /* yacc.c:1651  */
+#line 1077 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); }
+#line 4920 "parser.tab.c"
     break;
 
   case 372:
-#line 1078 "parser.y" /* yacc.c:1651  */
-    { (yyval.declarator) = (yyvsp[-2].declarator); (yyvsp[-2].declarator)->var->eval = (yyvsp[0].expr); }
-#line 4832 "parser.tab.c" /* yacc.c:1651  */
+#line 1078 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[-2].declarator); (yyvsp[-2].declarator)->var->eval = (yyvsp[0].expr); }
+#line 4926 "parser.tab.c"
     break;
 
   case 373:
-#line 1082 "parser.y" /* yacc.c:1651  */
-    { (yyval.num) = THREADING_APARTMENT; }
-#line 4838 "parser.tab.c" /* yacc.c:1651  */
+#line 1082 "parser.y"
+                                                { (yyval.num) = THREADING_APARTMENT; }
+#line 4932 "parser.tab.c"
     break;
 
   case 374:
-#line 1083 "parser.y" /* yacc.c:1651  */
-    { (yyval.num) = THREADING_NEUTRAL; }
-#line 4844 "parser.tab.c" /* yacc.c:1651  */
+#line 1083 "parser.y"
+                                                { (yyval.num) = THREADING_NEUTRAL; }
+#line 4938 "parser.tab.c"
     break;
 
   case 375:
-#line 1084 "parser.y" /* yacc.c:1651  */
-    { (yyval.num) = THREADING_SINGLE; }
-#line 4850 "parser.tab.c" /* yacc.c:1651  */
+#line 1084 "parser.y"
+                                                { (yyval.num) = THREADING_SINGLE; }
+#line 4944 "parser.tab.c"
     break;
 
   case 376:
-#line 1085 "parser.y" /* yacc.c:1651  */
-    { (yyval.num) = THREADING_FREE; }
-#line 4856 "parser.tab.c" /* yacc.c:1651  */
+#line 1085 "parser.y"
+                                                { (yyval.num) = THREADING_FREE; }
+#line 4950 "parser.tab.c"
     break;
 
   case 377:
-#line 1086 "parser.y" /* yacc.c:1651  */
-    { (yyval.num) = THREADING_BOTH; }
-#line 4862 "parser.tab.c" /* yacc.c:1651  */
+#line 1086 "parser.y"
+                                                { (yyval.num) = THREADING_BOTH; }
+#line 4956 "parser.tab.c"
     break;
 
   case 378:
-#line 1090 "parser.y" /* yacc.c:1651  */
-    { (yyval.num) = FC_RP; }
-#line 4868 "parser.tab.c" /* yacc.c:1651  */
+#line 1090 "parser.y"
+                                                { (yyval.num) = FC_RP; }
+#line 4962 "parser.tab.c"
     break;
 
   case 379:
-#line 1091 "parser.y" /* yacc.c:1651  */
-    { (yyval.num) = FC_UP; }
-#line 4874 "parser.tab.c" /* yacc.c:1651  */
+#line 1091 "parser.y"
+                                                { (yyval.num) = FC_UP; }
+#line 4968 "parser.tab.c"
     break;
 
   case 380:
-#line 1092 "parser.y" /* yacc.c:1651  */
-    { (yyval.num) = FC_FP; }
-#line 4880 "parser.tab.c" /* yacc.c:1651  */
+#line 1092 "parser.y"
+                                                { (yyval.num) = FC_FP; }
+#line 4974 "parser.tab.c"
     break;
 
   case 381:
-#line 1095 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = type_new_struct((yyvsp[-3].str), current_namespace, TRUE, (yyvsp[-1].var_list)); }
-#line 4886 "parser.tab.c" /* yacc.c:1651  */
+#line 1095 "parser.y"
+                                                { (yyval.type) = type_new_struct((yyvsp[-3].str), current_namespace, TRUE, (yyvsp[-1].var_list)); }
+#line 4980 "parser.tab.c"
     break;
 
   case 382:
-#line 1098 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = type_new_void(); }
-#line 4892 "parser.tab.c" /* yacc.c:1651  */
+#line 1098 "parser.y"
+                                                { (yyval.type) = type_new_void(); }
+#line 4986 "parser.tab.c"
     break;
 
   case 383:
-#line 1099 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
-#line 4898 "parser.tab.c" /* yacc.c:1651  */
+#line 1099 "parser.y"
+                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
+#line 4992 "parser.tab.c"
     break;
 
   case 384:
-#line 1100 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = (yyvsp[0].type); }
-#line 4904 "parser.tab.c" /* yacc.c:1651  */
+#line 1100 "parser.y"
+                                                { (yyval.type) = (yyvsp[0].type); }
+#line 4998 "parser.tab.c"
     break;
 
   case 385:
-#line 1101 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = (yyvsp[0].type); }
-#line 4910 "parser.tab.c" /* yacc.c:1651  */
+#line 1101 "parser.y"
+                                                { (yyval.type) = (yyvsp[0].type); }
+#line 5004 "parser.tab.c"
     break;
 
   case 386:
-#line 1102 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = type_new_enum((yyvsp[0].str), current_namespace, FALSE, NULL); }
-#line 4916 "parser.tab.c" /* yacc.c:1651  */
+#line 1102 "parser.y"
+                                                { (yyval.type) = type_new_enum((yyvsp[0].str), current_namespace, FALSE, NULL); }
+#line 5010 "parser.tab.c"
     break;
 
   case 387:
-#line 1103 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = (yyvsp[0].type); }
-#line 4922 "parser.tab.c" /* yacc.c:1651  */
+#line 1103 "parser.y"
+                                                { (yyval.type) = (yyvsp[0].type); }
+#line 5016 "parser.tab.c"
     break;
 
   case 388:
-#line 1104 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = type_new_struct((yyvsp[0].str), current_namespace, FALSE, NULL); }
-#line 4928 "parser.tab.c" /* yacc.c:1651  */
+#line 1104 "parser.y"
+                                                { (yyval.type) = type_new_struct((yyvsp[0].str), current_namespace, FALSE, NULL); }
+#line 5022 "parser.tab.c"
     break;
 
   case 389:
-#line 1105 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = (yyvsp[0].type); }
-#line 4934 "parser.tab.c" /* yacc.c:1651  */
+#line 1105 "parser.y"
+                                                { (yyval.type) = (yyvsp[0].type); }
+#line 5028 "parser.tab.c"
     break;
 
   case 390:
-#line 1106 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = type_new_nonencapsulated_union((yyvsp[0].str), FALSE, NULL); }
-#line 4940 "parser.tab.c" /* yacc.c:1651  */
+#line 1106 "parser.y"
+                                                { (yyval.type) = type_new_nonencapsulated_union((yyvsp[0].str), FALSE, NULL); }
+#line 5034 "parser.tab.c"
     break;
 
   case 391:
-#line 1107 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = make_safearray((yyvsp[-1].type)); }
-#line 4946 "parser.tab.c" /* yacc.c:1651  */
+#line 1107 "parser.y"
+                                                { (yyval.type) = make_safearray((yyvsp[-1].type)); }
+#line 5040 "parser.tab.c"
     break;
 
   case 392:
-#line 1111 "parser.y" /* yacc.c:1651  */
-    { (yyvsp[-4].attr_list) = append_attribs((yyvsp[-4].attr_list), (yyvsp[-2].attr_list));
+#line 1111 "parser.y"
+                                                { (yyvsp[-4].attr_list) = append_attribs((yyvsp[-4].attr_list), (yyvsp[-2].attr_list));
 						  reg_typedefs((yyvsp[-1].declspec), (yyvsp[0].declarator_list), check_typedef_attrs((yyvsp[-4].attr_list)));
 						  (yyval.statement) = make_statement_typedef((yyvsp[0].declarator_list), !(yyvsp[-1].declspec)->type->defined);
 						}
-#line 4955 "parser.tab.c" /* yacc.c:1651  */
+#line 5049 "parser.tab.c"
     break;
 
   case 393:
-#line 1118 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = type_new_nonencapsulated_union((yyvsp[-3].str), TRUE, (yyvsp[-1].var_list)); }
-#line 4961 "parser.tab.c" /* yacc.c:1651  */
+#line 1118 "parser.y"
+                                                { (yyval.type) = type_new_nonencapsulated_union((yyvsp[-3].str), TRUE, (yyvsp[-1].var_list)); }
+#line 5055 "parser.tab.c"
     break;
 
   case 394:
-#line 1121 "parser.y" /* yacc.c:1651  */
-    { (yyval.type) = type_new_encapsulated_union((yyvsp[-8].str), (yyvsp[-5].var), (yyvsp[-3].var), (yyvsp[-1].var_list)); }
-#line 4967 "parser.tab.c" /* yacc.c:1651  */
+#line 1121 "parser.y"
+                                                { (yyval.type) = type_new_encapsulated_union((yyvsp[-8].str), (yyvsp[-5].var), (yyvsp[-3].var), (yyvsp[-1].var_list)); }
+#line 5061 "parser.tab.c"
     break;
 
   case 395:
-#line 1125 "parser.y" /* yacc.c:1651  */
-    { (yyval.num) = MAKEVERSION((yyvsp[0].num), 0); }
-#line 4973 "parser.tab.c" /* yacc.c:1651  */
+#line 1125 "parser.y"
+                                                { (yyval.num) = MAKEVERSION((yyvsp[0].num), 0); }
+#line 5067 "parser.tab.c"
     break;
 
   case 396:
-#line 1126 "parser.y" /* yacc.c:1651  */
-    { (yyval.num) = MAKEVERSION((yyvsp[-2].num), (yyvsp[0].num)); }
-#line 4979 "parser.tab.c" /* yacc.c:1651  */
+#line 1126 "parser.y"
+                                                { (yyval.num) = MAKEVERSION((yyvsp[-2].num), (yyvsp[0].num)); }
+#line 5073 "parser.tab.c"
     break;
 
   case 397:
-#line 1127 "parser.y" /* yacc.c:1651  */
-    { (yyval.num) = (yyvsp[0].num); }
-#line 4985 "parser.tab.c" /* yacc.c:1651  */
+#line 1127 "parser.y"
+                                                { (yyval.num) = (yyvsp[0].num); }
+#line 5079 "parser.tab.c"
     break;
 
   case 402:
-#line 1140 "parser.y" /* yacc.c:1651  */
-    { type_t *type = find_type_or_error((yyvsp[-1].str), 0);
+#line 1140 "parser.y"
+                                                { type_t *type = find_type_or_error((yyvsp[-1].str), 0);
                                                   type->attrs = append_attr_list(type->attrs, (yyvsp[-2].attr_list));
                                                 }
-#line 4993 "parser.tab.c" /* yacc.c:1651  */
+#line 5087 "parser.tab.c"
     break;
 
   case 403:
-#line 1145 "parser.y" /* yacc.c:1651  */
-    {  type_t *iface = find_type_or_error2((yyvsp[-3].str), 0);
+#line 1145 "parser.y"
+                                                {  type_t *iface = find_type_or_error2((yyvsp[-3].str), 0);
                                                    if (type_get_type(iface) != TYPE_INTERFACE)
                                                        error_loc("%s is not an interface\n", iface->name);
                                                    iface->attrs = append_attr_list(iface->attrs, (yyvsp[-5].attr_list));
                                                 }
-#line 5003 "parser.tab.c" /* yacc.c:1651  */
+#line 5097 "parser.tab.c"
     break;
 
   case 404:
-#line 1152 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr_list) = NULL; }
-#line 5009 "parser.tab.c" /* yacc.c:1651  */
+#line 1152 "parser.y"
+                                                { (yyval.attr_list) = NULL; }
+#line 5103 "parser.tab.c"
     break;
 
   case 405:
-#line 1153 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr_list) = (yyvsp[-1].attr_list); }
-#line 5015 "parser.tab.c" /* yacc.c:1651  */
+#line 1153 "parser.y"
+                                                { (yyval.attr_list) = (yyvsp[-1].attr_list); }
+#line 5109 "parser.tab.c"
     break;
 
   case 406:
-#line 1156 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr_list) = append_attr(NULL, (yyvsp[0].attr)); }
-#line 5021 "parser.tab.c" /* yacc.c:1651  */
+#line 1156 "parser.y"
+                                                { (yyval.attr_list) = append_attr(NULL, (yyvsp[0].attr)); }
+#line 5115 "parser.tab.c"
     break;
 
   case 407:
-#line 1157 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr_list) = append_attr((yyvsp[-2].attr_list), (yyvsp[0].attr)); }
-#line 5027 "parser.tab.c" /* yacc.c:1651  */
+#line 1157 "parser.y"
+                                                { (yyval.attr_list) = append_attr((yyvsp[-2].attr_list), (yyvsp[0].attr)); }
+#line 5121 "parser.tab.c"
     break;
 
   case 408:
-#line 1160 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_ENCODE); }
-#line 5033 "parser.tab.c" /* yacc.c:1651  */
+#line 1160 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_ENCODE); }
+#line 5127 "parser.tab.c"
     break;
 
   case 409:
-#line 1161 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_DECODE); }
-#line 5039 "parser.tab.c" /* yacc.c:1651  */
+#line 1161 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_DECODE); }
+#line 5133 "parser.tab.c"
     break;
 
   case 410:
-#line 1162 "parser.y" /* yacc.c:1651  */
-    { (yyval.attr) = make_attr(ATTR_EXPLICIT_HANDLE); }
-#line 5045 "parser.tab.c" /* yacc.c:1651  */
+#line 1162 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_EXPLICIT_HANDLE); }
+#line 5139 "parser.tab.c"
     break;
 
 
-#line 5049 "parser.tab.c" /* yacc.c:1651  */
+#line 5143 "parser.tab.c"
+
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -5070,14 +5165,13 @@
   /* Now 'shift' the result of the reduction.  Determine what state
      that goes to, based on the state we popped back to and the rule
      number reduced by.  */
-
-  yyn = yyr1[yyn];
-
-  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
-  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTOKENS];
+  {
+    const int yylhs = yyr1[yyn] - YYNTOKENS;
+    const int yyi = yypgoto[yylhs] + *yyssp;
+    yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
+               ? yytable[yyi]
+               : yydefgoto[yylhs]);
+  }
 
   goto yynewstate;
 
@@ -5109,7 +5203,7 @@
           {
             if (yymsg != yymsgbuf)
               YYSTACK_FREE (yymsg);
-            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+            yymsg = YY_CAST (char *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc)));
             if (!yymsg)
               {
                 yymsg = yymsgbuf;
@@ -5160,12 +5254,10 @@
 | yyerrorlab -- error raised explicitly by YYERROR.  |
 `---------------------------------------------------*/
 yyerrorlab:
-
-  /* Pacify compilers like GCC when the user code never invokes
-     YYERROR and the label yyerrorlab therefore never appears in user
-     code.  */
-  if (/*CONSTCOND*/ 0)
-     goto yyerrorlab;
+  /* Pacify compilers when the user code never invokes YYERROR and the
+     label yyerrorlab therefore never appears in user code.  */
+  if (0)
+    YYERROR;
 
   /* Do not reclaim the symbols of the rule whose action triggered
      this YYERROR.  */
@@ -5227,6 +5319,7 @@
   yyresult = 0;
   goto yyreturn;
 
+
 /*-----------------------------------.
 | yyabortlab -- YYABORT comes here.  |
 `-----------------------------------*/
@@ -5234,6 +5327,7 @@
   yyresult = 1;
   goto yyreturn;
 
+
 #if !defined yyoverflow || YYERROR_VERBOSE
 /*-------------------------------------------------.
 | yyexhaustedlab -- memory exhaustion comes here.  |
@@ -5244,6 +5338,10 @@
   /* Fall through.  */
 #endif
 
+
+/*-----------------------------------------------------.
+| yyreturn -- parsing is finished, return the result.  |
+`-----------------------------------------------------*/
 yyreturn:
   if (yychar != YYEMPTY)
     {
@@ -5260,7 +5358,7 @@
   while (yyssp != yyss)
     {
       yydestruct ("Cleanup: popping",
-                  yystos[*yyssp], yyvsp);
+                  yystos[+*yyssp], yyvsp);
       YYPOPSTACK (1);
     }
 #ifndef yyoverflow
@@ -5273,7 +5371,7 @@
 #endif
   return yyresult;
 }
-#line 1164 "parser.y" /* yacc.c:1910  */
+#line 1164 "parser.y"
 
 
 static void decl_builtin_basic(const char *name, enum type_basic_type type)
@@ -5905,6 +6003,7 @@
 static typelib_t *make_library(const char *name, const attr_list_t *attrs)
 {
     typelib_t *typelib = xmalloc(sizeof(*typelib));
+    memset(typelib, 0, sizeof(*typelib));
     typelib->name = xstrdup(name);
     typelib->attrs = attrs;
     list_init( &typelib->importlibs );
@@ -6813,6 +6912,25 @@
 static void check_functions(const type_t *iface, int is_inside_library)
 {
     const statement_t *stmt;
+    /* check for duplicates */
+    if (is_attr(iface->attrs, ATTR_DISPINTERFACE))
+    {
+        var_list_t *methods = type_dispiface_get_methods(iface);
+        var_t *func, *func_iter;
+
+        if (methods) LIST_FOR_EACH_ENTRY( func, methods, var_t, entry )
+        {
+            LIST_FOR_EACH_ENTRY( func_iter, methods, var_t, entry )
+            {
+                if (func == func_iter) break;
+                if (strcmp(func->name, func_iter->name)) continue;
+                if (is_attr(func->attrs, ATTR_PROPGET) != is_attr(func_iter->attrs, ATTR_PROPGET)) continue;
+                if (is_attr(func->attrs, ATTR_PROPPUT) != is_attr(func_iter->attrs, ATTR_PROPPUT)) continue;
+                if (is_attr(func->attrs, ATTR_PROPPUTREF) != is_attr(func_iter->attrs, ATTR_PROPPUTREF)) continue;
+                error_loc_info(&func->loc_info, "duplicated function \'%s\'\n", func->name);
+            }
+        }
+    }
     if (is_attr(iface->attrs, ATTR_EXPLICIT_HANDLE))
     {
         STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) )
diff --git a/mingw-w64-tools/widl/src/parser.tab.h b/mingw-w64-tools/widl/src/parser.tab.h
index 289ba0f..453bf31 100644
--- a/mingw-w64-tools/widl/src/parser.tab.h
+++ b/mingw-w64-tools/widl/src/parser.tab.h
@@ -1,8 +1,9 @@
-/* A Bison parser, made by GNU Bison 3.1.  */
+/* A Bison parser, made by GNU Bison 3.5.4.  */
 
 /* Bison interface for Yacc-like parsers in C
 
-   Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc.
+   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation,
+   Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -30,6 +31,9 @@
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
+/* Undocumented macros, especially those whose name start with YY_,
+   are private implementation details.  Do not rely on them.  */
+
 #ifndef YY_PARSER_PARSER_TAB_H_INCLUDED
 # define YY_PARSER_PARSER_TAB_H_INCLUDED
 /* Debug traces.  */
@@ -236,10 +240,9 @@
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-
 union YYSTYPE
 {
-#line 129 "parser.y" /* yacc.c:1913  */
+#line 129 "parser.y"
 
 	attr_t *attr;
 	attr_list_t *attr_list;
@@ -268,9 +271,9 @@
 	enum type_qualifier type_qualifier;
 	enum function_specifier function_specifier;
 
-#line 272 "parser.tab.h" /* yacc.c:1913  */
-};
+#line 275 "parser.tab.h"
 
+};
 typedef union YYSTYPE YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
diff --git a/mingw-w64-tools/widl/src/parser.y b/mingw-w64-tools/widl/src/parser.y
index 5f6eb50..3ef8d89 100644
--- a/mingw-w64-tools/widl/src/parser.y
+++ b/mingw-w64-tools/widl/src/parser.y
@@ -1792,6 +1792,7 @@
 static typelib_t *make_library(const char *name, const attr_list_t *attrs)
 {
     typelib_t *typelib = xmalloc(sizeof(*typelib));
+    memset(typelib, 0, sizeof(*typelib));
     typelib->name = xstrdup(name);
     typelib->attrs = attrs;
     list_init( &typelib->importlibs );
@@ -2700,6 +2701,25 @@
 static void check_functions(const type_t *iface, int is_inside_library)
 {
     const statement_t *stmt;
+    /* check for duplicates */
+    if (is_attr(iface->attrs, ATTR_DISPINTERFACE))
+    {
+        var_list_t *methods = type_dispiface_get_methods(iface);
+        var_t *func, *func_iter;
+
+        if (methods) LIST_FOR_EACH_ENTRY( func, methods, var_t, entry )
+        {
+            LIST_FOR_EACH_ENTRY( func_iter, methods, var_t, entry )
+            {
+                if (func == func_iter) break;
+                if (strcmp(func->name, func_iter->name)) continue;
+                if (is_attr(func->attrs, ATTR_PROPGET) != is_attr(func_iter->attrs, ATTR_PROPGET)) continue;
+                if (is_attr(func->attrs, ATTR_PROPPUT) != is_attr(func_iter->attrs, ATTR_PROPPUT)) continue;
+                if (is_attr(func->attrs, ATTR_PROPPUTREF) != is_attr(func_iter->attrs, ATTR_PROPPUTREF)) continue;
+                error_loc_info(&func->loc_info, "duplicated function \'%s\'\n", func->name);
+            }
+        }
+    }
     if (is_attr(iface->attrs, ATTR_EXPLICIT_HANDLE))
     {
         STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) )
diff --git a/mingw-w64-tools/widl/src/register.c b/mingw-w64-tools/widl/src/register.c
index f65cbdd..c03ab3c 100644
--- a/mingw-w64-tools/widl/src/register.c
+++ b/mingw-w64-tools/widl/src/register.c
@@ -119,8 +119,6 @@
 
     if (!uuid) return;
     if (!is_object( iface )) return;
-    if (!is_attr( iface->attrs, ATTR_OLEAUTOMATION ) && !is_attr( iface->attrs, ATTR_DISPINTERFACE ))
-        return;
     put_str( indent, "'%s' = s '%s'\n", format_uuid( uuid ), iface->name );
     put_str( indent, "{\n" );
     indent++;
@@ -137,13 +135,10 @@
 
 static void write_typelib_interfaces( const typelib_t *typelib )
 {
-    const statement_t *stmt;
+    unsigned int i;
 
-    if (typelib->stmts) LIST_FOR_EACH_ENTRY( stmt, typelib->stmts, const statement_t, entry )
-    {
-        if (stmt->type == STMT_TYPE && type_get_type( stmt->u.type ) == TYPE_INTERFACE)
-            write_typelib_interface( stmt->u.type, typelib );
-    }
+    for (i = 0; i < typelib->reg_iface_count; ++i)
+        write_typelib_interface( typelib->reg_ifaces[i], typelib );
 }
 
 static int write_coclass( const type_t *class, const typelib_t *typelib )
diff --git a/mingw-w64-tools/widl/src/server.c b/mingw-w64-tools/widl/src/server.c
index 79dc079..cce880b 100644
--- a/mingw-w64-tools/widl/src/server.c
+++ b/mingw-w64-tools/widl/src/server.c
@@ -307,7 +307,7 @@
     {
         var_t *func = stmt->u.var;
         if (is_local( func->attrs )) continue;
-        print_server( "(SERVER_ROUTINE)%s%s,\n", prefix_server, get_name(func));
+        print_server( "(void *)%s%s,\n", prefix_server, get_name(func));
     }
     indent--;
     print_server( "};\n\n" );
diff --git a/mingw-w64-tools/widl/src/typegen.c b/mingw-w64-tools/widl/src/typegen.c
index 9b8aa1a..04280cb 100644
--- a/mingw-w64-tools/widl/src/typegen.c
+++ b/mingw-w64-tools/widl/src/typegen.c
@@ -4813,20 +4813,21 @@
         if (is_array( arg->declspec.type ) || is_ptr( arg->declspec.type )) align = pointer_size;
         else type_memsize_and_alignment( arg->declspec.type, &align );
 
-        if (align >= pointer_size)
-            fprintf( file, "%s;\n", arg->name );
-        else
-            fprintf( file, "%s DECLSPEC_ALIGN(%u);\n", arg->name, pointer_size );
+        if (align < pointer_size)
+            fprintf( file, "DECLSPEC_ALIGN(%u) ", pointer_size );
+        fprintf( file, "%s;\n", arg->name );
     }
     if (add_retval && !is_void( retval->declspec.type ))
     {
         print_file(file, 2, "%s", "");
-        write_type_decl( file, &retval->declspec, retval->name );
-        if (is_array( retval->declspec.type ) || is_ptr( retval->declspec.type ) ||
-            type_memsize( retval->declspec.type ) == pointer_size)
-            fprintf( file, ";\n" );
-        else
-            fprintf( file, " DECLSPEC_ALIGN(%u);\n", pointer_size );
+        write_type_left( file, &retval->declspec, NAME_DEFAULT, TRUE, TRUE );
+        if (needs_space_after( retval->declspec.type )) fputc( ' ', file );
+        if (!is_array( retval->declspec.type ) && !is_ptr( retval->declspec.type ) &&
+            type_memsize( retval->declspec.type ) != pointer_size)
+        {
+            fprintf( file, "DECLSPEC_ALIGN(%u) ", pointer_size );
+        }
+        fprintf( file, "%s;\n", retval->name );
     }
     print_file(file, 1, "} %s;\n", var_decl );
     if (needs_packing) print_file( file, 0, "#include <poppack.h>\n" );
diff --git a/mingw-w64-tools/widl/src/widl.c b/mingw-w64-tools/widl/src/widl.c
index 35d37d9..38b9d86 100644
--- a/mingw-w64-tools/widl/src/widl.c
+++ b/mingw-w64-tools/widl/src/widl.c
@@ -151,6 +151,7 @@
 char *temp_name;
 const char *prefix_client = "";
 const char *prefix_server = "";
+static const char *includedir;
 
 int line_number = 1;
 
@@ -573,6 +574,27 @@
   fclose(idfile);
 }
 
+static void init_argv0_dir( const char *argv0 )
+{
+#ifndef _WIN32
+    char *p, *dir;
+
+#if defined(__linux__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__)
+    dir = realpath( "/proc/self/exe", NULL );
+#elif defined (__FreeBSD__) || defined(__DragonFly__)
+    dir = realpath( "/proc/curproc/file", NULL );
+#else
+    dir = realpath( argv0, NULL );
+#endif
+    if (!dir) return;
+    if (!(p = strrchr( dir, '/' ))) return;
+    if (p == dir) p++;
+    *p = 0;
+    includedir = strmake( "%s/%s", dir, BIN_TO_INCLUDEDIR );
+    free( dir );
+#endif
+}
+
 int main(int argc,char *argv[])
 {
   int i, optc;
@@ -586,6 +608,7 @@
 #ifdef SIGHUP
   signal( SIGHUP, exit_on_signal );
 #endif
+  init_argv0_dir( argv[0] );
 
   now = time(NULL);
 
diff --git a/mingw-w64-tools/widl/src/widltypes.h b/mingw-w64-tools/widl/src/widltypes.h
index 5e28329..085a0ff 100644
--- a/mingw-w64-tools/widl/src/widltypes.h
+++ b/mingw-w64-tools/widl/src/widltypes.h
@@ -538,6 +538,9 @@
     const attr_list_t *attrs;
     struct list importlibs;
     statement_list_t *stmts;
+
+    type_t **reg_ifaces;
+    unsigned int reg_iface_count;
 };
 
 struct _user_type_t {
diff --git a/mingw-w64-tools/widl/src/wpp/ppl.l b/mingw-w64-tools/widl/src/wpp/ppl.l
index 4fd12c6..a681243 100644
--- a/mingw-w64-tools/widl/src/wpp/ppl.l
+++ b/mingw-w64-tools/widl/src/wpp/ppl.l
@@ -1620,8 +1620,8 @@
 	pp_incl_state.ppp = NULL;
 
 	if(pp_status.debug)
-		fprintf(stderr, "pp_do_include: %s:%d: include_state=%d, include_ppp='%s', include_ifdepth=%d\n",
-                        pp_status.input, pp_status.line_number, pp_incl_state.state, pp_incl_state.ppp, pp_incl_state.ifdepth);
+		fprintf(stderr, "pp_do_include: %s:%d: include_state=%d, include_ifdepth=%d\n",
+                        pp_status.input, pp_status.line_number, pp_incl_state.state, pp_incl_state.ifdepth);
 	pp_status.file = fp;
 	ppy__switch_to_buffer(ppy__create_buffer(NULL, YY_BUF_SIZE));
 
diff --git a/mingw-w64-tools/widl/src/wpp/ppl.yy.c b/mingw-w64-tools/widl/src/wpp/ppl.yy.c
index c7b1e1c..aff35a1 100644
--- a/mingw-w64-tools/widl/src/wpp/ppl.yy.c
+++ b/mingw-w64-tools/widl/src/wpp/ppl.yy.c
@@ -4827,8 +4827,8 @@
 	pp_incl_state.ppp = NULL;
 
 	if(pp_status.debug)
-		fprintf(stderr, "pp_do_include: %s:%d: include_state=%d, include_ppp='%s', include_ifdepth=%d\n",
-                        pp_status.input, pp_status.line_number, pp_incl_state.state, pp_incl_state.ppp, pp_incl_state.ifdepth);
+		fprintf(stderr, "pp_do_include: %s:%d: include_state=%d, include_ifdepth=%d\n",
+                        pp_status.input, pp_status.line_number, pp_incl_state.state, pp_incl_state.ifdepth);
 	pp_status.file = fp;
 	ppy__switch_to_buffer(ppy__create_buffer(NULL, YY_BUF_SIZE));
 
diff --git a/mingw-w64-tools/widl/src/wpp/ppy.tab.c b/mingw-w64-tools/widl/src/wpp/ppy.tab.c
index c5a1323..7b8686c 100644
--- a/mingw-w64-tools/widl/src/wpp/ppy.tab.c
+++ b/mingw-w64-tools/widl/src/wpp/ppy.tab.c
@@ -1,8 +1,9 @@
-/* A Bison parser, made by GNU Bison 3.1.  */
+/* A Bison parser, made by GNU Bison 3.5.4.  */
 
 /* Bison implementation for Yacc-like parsers in C
 
-   Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc.
+   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation,
+   Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -40,11 +41,14 @@
    define necessary library symbols; they are noted "INFRINGES ON
    USER NAME SPACE" below.  */
 
+/* Undocumented macros, especially those whose name start with YY_,
+   are private implementation details.  Do not rely on them.  */
+
 /* Identify Bison output.  */
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "3.1"
+#define YYBISON_VERSION "3.5.4"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -65,12 +69,11 @@
 #define yyerror         ppy_error
 #define yydebug         ppy_debug
 #define yynerrs         ppy_nerrs
-
 #define yylval          ppy_lval
 #define yychar          ppy_char
 
-/* Copy the first part of user declarations.  */
-#line 30 "ppy.y" /* yacc.c:339  */
+/* First part of user prologue.  */
+#line 30 "ppy.y"
 
 #include "config.h"
 #include "wine/port.h"
@@ -166,13 +169,26 @@
 static int	nmacro_args;
 
 
-#line 170 "ppy.tab.c" /* yacc.c:339  */
+#line 173 "ppy.tab.c"
 
-# ifndef YY_NULLPTR
-#  if defined __cplusplus && 201103L <= __cplusplus
-#   define YY_NULLPTR nullptr
+# ifndef YY_CAST
+#  ifdef __cplusplus
+#   define YY_CAST(Type, Val) static_cast<Type> (Val)
+#   define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
 #  else
-#   define YY_NULLPTR 0
+#   define YY_CAST(Type, Val) ((Type) (Val))
+#   define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
+#  endif
+# endif
+# ifndef YY_NULLPTR
+#  if defined __cplusplus
+#   if 201103L <= __cplusplus
+#    define YY_NULLPTR nullptr
+#   else
+#    define YY_NULLPTR 0
+#   endif
+#  else
+#   define YY_NULLPTR ((void*)0)
 #  endif
 # endif
 
@@ -246,10 +262,9 @@
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-
 union YYSTYPE
 {
-#line 126 "ppy.y" /* yacc.c:355  */
+#line 126 "ppy.y"
 
 	int		sint;
 	unsigned int	uint;
@@ -263,9 +278,9 @@
 	marg_t		*marg;
 	mtext_t		*mtext;
 
-#line 267 "ppy.tab.c" /* yacc.c:355  */
-};
+#line 282 "ppy.tab.c"
 
+};
 typedef union YYSTYPE YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
@@ -278,44 +293,89 @@
 
 
 
-/* Copy the second part of user declarations.  */
 
-#line 284 "ppy.tab.c" /* yacc.c:358  */
 
 #ifdef short
 # undef short
 #endif
 
-#ifdef YYTYPE_UINT8
-typedef YYTYPE_UINT8 yytype_uint8;
-#else
-typedef unsigned char yytype_uint8;
+/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
+   <limits.h> and (if available) <stdint.h> are included
+   so that the code can choose integer types of a good width.  */
+
+#ifndef __PTRDIFF_MAX__
+# include <limits.h> /* INFRINGES ON USER NAME SPACE */
+# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
+#  include <stdint.h> /* INFRINGES ON USER NAME SPACE */
+#  define YY_STDINT_H
+# endif
 #endif
 
-#ifdef YYTYPE_INT8
-typedef YYTYPE_INT8 yytype_int8;
+/* Narrow types that promote to a signed type and that can represent a
+   signed or unsigned integer of at least N bits.  In tables they can
+   save space and decrease cache pressure.  Promoting to a signed type
+   helps avoid bugs in integer arithmetic.  */
+
+#ifdef __INT_LEAST8_MAX__
+typedef __INT_LEAST8_TYPE__ yytype_int8;
+#elif defined YY_STDINT_H
+typedef int_least8_t yytype_int8;
 #else
 typedef signed char yytype_int8;
 #endif
 
-#ifdef YYTYPE_UINT16
-typedef YYTYPE_UINT16 yytype_uint16;
-#else
-typedef unsigned short yytype_uint16;
-#endif
-
-#ifdef YYTYPE_INT16
-typedef YYTYPE_INT16 yytype_int16;
+#ifdef __INT_LEAST16_MAX__
+typedef __INT_LEAST16_TYPE__ yytype_int16;
+#elif defined YY_STDINT_H
+typedef int_least16_t yytype_int16;
 #else
 typedef short yytype_int16;
 #endif
 
+#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST8_TYPE__ yytype_uint8;
+#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
+       && UINT_LEAST8_MAX <= INT_MAX)
+typedef uint_least8_t yytype_uint8;
+#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
+typedef unsigned char yytype_uint8;
+#else
+typedef short yytype_uint8;
+#endif
+
+#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST16_TYPE__ yytype_uint16;
+#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
+       && UINT_LEAST16_MAX <= INT_MAX)
+typedef uint_least16_t yytype_uint16;
+#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
+typedef unsigned short yytype_uint16;
+#else
+typedef int yytype_uint16;
+#endif
+
+#ifndef YYPTRDIFF_T
+# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
+#  define YYPTRDIFF_T __PTRDIFF_TYPE__
+#  define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
+# elif defined PTRDIFF_MAX
+#  ifndef ptrdiff_t
+#   include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  endif
+#  define YYPTRDIFF_T ptrdiff_t
+#  define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
+# else
+#  define YYPTRDIFF_T long
+#  define YYPTRDIFF_MAXIMUM LONG_MAX
+# endif
+#endif
+
 #ifndef YYSIZE_T
 # ifdef __SIZE_TYPE__
 #  define YYSIZE_T __SIZE_TYPE__
 # elif defined size_t
 #  define YYSIZE_T size_t
-# elif ! defined YYSIZE_T
+# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
 #  define YYSIZE_T size_t
 # else
@@ -323,7 +383,19 @@
 # endif
 #endif
 
-#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+#define YYSIZE_MAXIMUM                                  \
+  YY_CAST (YYPTRDIFF_T,                                 \
+           (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1)  \
+            ? YYPTRDIFF_MAXIMUM                         \
+            : YY_CAST (YYSIZE_T, -1)))
+
+#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
+
+/* Stored state numbers (used for stacks). */
+typedef yytype_uint8 yy_state_t;
+
+/* State numbers in computations.  */
+typedef int yy_state_fast_t;
 
 #ifndef YY_
 # if defined YYENABLE_NLS && YYENABLE_NLS
@@ -337,30 +409,19 @@
 # endif
 #endif
 
-#ifndef YY_ATTRIBUTE
-# if (defined __GNUC__                                               \
-      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
-     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
-#  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
+#ifndef YY_ATTRIBUTE_PURE
+# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
+#  define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
 # else
-#  define YY_ATTRIBUTE(Spec) /* empty */
+#  define YY_ATTRIBUTE_PURE
 # endif
 #endif
 
-#ifndef YY_ATTRIBUTE_PURE
-# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
-#endif
-
 #ifndef YY_ATTRIBUTE_UNUSED
-# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
-#endif
-
-#if !defined _Noreturn \
-     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
-# if defined _MSC_VER && 1200 <= _MSC_VER
-#  define _Noreturn __declspec (noreturn)
+# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
+#  define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
 # else
-#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
+#  define YY_ATTRIBUTE_UNUSED
 # endif
 #endif
 
@@ -373,11 +434,11 @@
 
 #if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
 /* Suppress an incorrect diagnostic about yylval being uninitialized.  */
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
-    _Pragma ("GCC diagnostic push") \
-    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN                            \
+    _Pragma ("GCC diagnostic push")                                     \
+    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")              \
     _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END      \
     _Pragma ("GCC diagnostic pop")
 #else
 # define YY_INITIAL_VALUE(Value) Value
@@ -390,6 +451,20 @@
 # define YY_INITIAL_VALUE(Value) /* Nothing. */
 #endif
 
+#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
+# define YY_IGNORE_USELESS_CAST_BEGIN                          \
+    _Pragma ("GCC diagnostic push")                            \
+    _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
+# define YY_IGNORE_USELESS_CAST_END            \
+    _Pragma ("GCC diagnostic pop")
+#endif
+#ifndef YY_IGNORE_USELESS_CAST_BEGIN
+# define YY_IGNORE_USELESS_CAST_BEGIN
+# define YY_IGNORE_USELESS_CAST_END
+#endif
+
+
+#define YY_ASSERT(E) ((void) (0 && (E)))
 
 #if ! defined yyoverflow || YYERROR_VERBOSE
 
@@ -466,17 +541,17 @@
 /* A type that is properly aligned for any stack member.  */
 union yyalloc
 {
-  yytype_int16 yyss_alloc;
+  yy_state_t yyss_alloc;
   YYSTYPE yyvs_alloc;
 };
 
 /* The size of the maximum gap between one aligned stack and the next.  */
-# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
 
 /* The size of an array large to enough to hold all stacks, each with
    N elements.  */
 # define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+     ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \
       + YYSTACK_GAP_MAXIMUM)
 
 # define YYCOPY_NEEDED 1
@@ -489,11 +564,11 @@
 # define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
     do                                                                  \
       {                                                                 \
-        YYSIZE_T yynewbytes;                                            \
+        YYPTRDIFF_T yynewbytes;                                         \
         YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
         Stack = &yyptr->Stack_alloc;                                    \
-        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-        yyptr += yynewbytes / sizeof (*yyptr);                          \
+        yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
+        yyptr += yynewbytes / YYSIZEOF (*yyptr);                        \
       }                                                                 \
     while (0)
 
@@ -505,12 +580,12 @@
 # ifndef YYCOPY
 #  if defined __GNUC__ && 1 < __GNUC__
 #   define YYCOPY(Dst, Src, Count) \
-      __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
+      __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
 #  else
 #   define YYCOPY(Dst, Src, Count)              \
       do                                        \
         {                                       \
-          YYSIZE_T yyi;                         \
+          YYPTRDIFF_T yyi;                      \
           for (yyi = 0; yyi < (Count); yyi++)   \
             (Dst)[yyi] = (Src)[yyi];            \
         }                                       \
@@ -533,17 +608,18 @@
 /* YYNSTATES -- Number of states.  */
 #define YYNSTATES  153
 
-/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
-   by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
 #define YYMAXUTOK   300
 
+
+/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
+   as returned by yylex, with out-of-bounds checking.  */
 #define YYTRANSLATE(YYX)                                                \
-  ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+  (0 <= (YYX) && (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
 /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
-   as returned by yylex, without out-of-bounds checking.  */
-static const yytype_uint8 yytranslate[] =
+   as returned by yylex.  */
+static const yytype_int8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -580,7 +656,7 @@
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
-static const yytype_uint16 yyrline[] =
+static const yytype_int16 yyrline[] =
 {
        0,   181,   181,   182,   186,   187,   188,   189,   190,   210,
      234,   260,   277,   278,   279,   282,   283,   284,   286,   288,
@@ -616,7 +692,7 @@
 # ifdef YYPRINT
 /* YYTOKNUM[NUM] -- (External) token number corresponding to the
    (internal) symbol number NUM (which must be that of a token).  */
-static const yytype_uint16 yytoknum[] =
+static const yytype_int16 yytoknum[] =
 {
        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
@@ -628,14 +704,14 @@
 };
 # endif
 
-#define YYPACT_NINF -27
+#define YYPACT_NINF (-27)
 
-#define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-27)))
+#define yypact_value_is_default(Yyn) \
+  ((Yyn) == YYPACT_NINF)
 
-#define YYTABLE_NINF -1
+#define YYTABLE_NINF (-1)
 
-#define yytable_value_is_error(Yytable_value) \
+#define yytable_value_is_error(Yyn) \
   0
 
   /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
@@ -663,7 +739,7 @@
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
      Performed when YYTABLE does not specify something else to do.  Zero
      means the default is an error.  */
-static const yytype_uint8 yydefact[] =
+static const yytype_int8 yydefact[] =
 {
        2,     0,     1,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,    28,    28,    28,    28,     0,    36,    28,
@@ -772,7 +848,7 @@
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
      symbol of state STATE-NUM.  */
-static const yytype_uint8 yystos[] =
+static const yytype_int8 yystos[] =
 {
        0,    63,     0,     3,     4,     5,     6,     7,     8,     9,
       12,    13,    14,    15,    16,    17,    18,    19,    26,    27,
@@ -793,7 +869,7 @@
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_uint8 yyr1[] =
+static const yytype_int8 yyr1[] =
 {
        0,    62,    63,    63,    64,    64,    64,    64,    64,    64,
       64,    64,    64,    64,    64,    64,    64,    64,    64,    64,
@@ -807,7 +883,7 @@
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
-static const yytype_uint8 yyr2[] =
+static const yytype_int8 yyr2[] =
 {
        0,     2,     0,     2,     3,     3,     3,     3,     3,     3,
        2,     2,     3,     3,     6,     4,     4,     5,     6,     7,
@@ -833,22 +909,22 @@
 
 #define YYRECOVERING()  (!!yyerrstatus)
 
-#define YYBACKUP(Token, Value)                                  \
-do                                                              \
-  if (yychar == YYEMPTY)                                        \
-    {                                                           \
-      yychar = (Token);                                         \
-      yylval = (Value);                                         \
-      YYPOPSTACK (yylen);                                       \
-      yystate = *yyssp;                                         \
-      goto yybackup;                                            \
-    }                                                           \
-  else                                                          \
-    {                                                           \
-      yyerror (YY_("syntax error: cannot back up")); \
-      YYERROR;                                                  \
-    }                                                           \
-while (0)
+#define YYBACKUP(Token, Value)                                    \
+  do                                                              \
+    if (yychar == YYEMPTY)                                        \
+      {                                                           \
+        yychar = (Token);                                         \
+        yylval = (Value);                                         \
+        YYPOPSTACK (yylen);                                       \
+        yystate = *yyssp;                                         \
+        goto yybackup;                                            \
+      }                                                           \
+    else                                                          \
+      {                                                           \
+        yyerror (YY_("syntax error: cannot back up")); \
+        YYERROR;                                                  \
+      }                                                           \
+  while (0)
 
 /* Error token number */
 #define YYTERROR        1
@@ -888,37 +964,39 @@
 } while (0)
 
 
-/*----------------------------------------.
-| Print this symbol's value on YYOUTPUT.  |
-`----------------------------------------*/
+/*-----------------------------------.
+| Print this symbol's value on YYO.  |
+`-----------------------------------*/
 
 static void
-yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep)
 {
-  FILE *yyo = yyoutput;
-  YYUSE (yyo);
+  FILE *yyoutput = yyo;
+  YYUSE (yyoutput);
   if (!yyvaluep)
     return;
 # ifdef YYPRINT
   if (yytype < YYNTOKENS)
-    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+    YYPRINT (yyo, yytoknum[yytype], *yyvaluep);
 # endif
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   YYUSE (yytype);
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 }
 
 
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
+/*---------------------------.
+| Print this symbol on YYO.  |
+`---------------------------*/
 
 static void
-yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep)
 {
-  YYFPRINTF (yyoutput, "%s %s (",
+  YYFPRINTF (yyo, "%s %s (",
              yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
 
-  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
-  YYFPRINTF (yyoutput, ")");
+  yy_symbol_value_print (yyo, yytype, yyvaluep);
+  YYFPRINTF (yyo, ")");
 }
 
 /*------------------------------------------------------------------.
@@ -927,7 +1005,7 @@
 `------------------------------------------------------------------*/
 
 static void
-yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
 {
   YYFPRINTF (stderr, "Stack now");
   for (; yybottom <= yytop; yybottom++)
@@ -950,20 +1028,20 @@
 `------------------------------------------------*/
 
 static void
-yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
+yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, int yyrule)
 {
-  unsigned long yylno = yyrline[yyrule];
+  int yylno = yyrline[yyrule];
   int yynrhs = yyr2[yyrule];
   int yyi;
-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
              yyrule - 1, yylno);
   /* The symbols being reduced.  */
   for (yyi = 0; yyi < yynrhs; yyi++)
     {
       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
       yy_symbol_print (stderr,
-                       yystos[yyssp[yyi + 1 - yynrhs]],
-                       &(yyvsp[(yyi + 1) - (yynrhs)])
+                       yystos[+yyssp[yyi + 1 - yynrhs]],
+                       &yyvsp[(yyi + 1) - (yynrhs)]
                                               );
       YYFPRINTF (stderr, "\n");
     }
@@ -1007,13 +1085,13 @@
 
 # ifndef yystrlen
 #  if defined __GLIBC__ && defined _STRING_H
-#   define yystrlen strlen
+#   define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S)))
 #  else
 /* Return the length of YYSTR.  */
-static YYSIZE_T
+static YYPTRDIFF_T
 yystrlen (const char *yystr)
 {
-  YYSIZE_T yylen;
+  YYPTRDIFF_T yylen;
   for (yylen = 0; yystr[yylen]; yylen++)
     continue;
   return yylen;
@@ -1049,12 +1127,12 @@
    backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
    null, do not copy; instead, return the length of what the result
    would have been.  */
-static YYSIZE_T
+static YYPTRDIFF_T
 yytnamerr (char *yyres, const char *yystr)
 {
   if (*yystr == '"')
     {
-      YYSIZE_T yyn = 0;
+      YYPTRDIFF_T yyn = 0;
       char const *yyp = yystr;
 
       for (;;)
@@ -1067,7 +1145,10 @@
           case '\\':
             if (*++yyp != '\\')
               goto do_not_strip_quotes;
-            /* Fall through.  */
+            else
+              goto append;
+
+          append:
           default:
             if (yyres)
               yyres[yyn] = *yyp;
@@ -1082,10 +1163,10 @@
     do_not_strip_quotes: ;
     }
 
-  if (! yyres)
+  if (yyres)
+    return yystpcpy (yyres, yystr) - yyres;
+  else
     return yystrlen (yystr);
-
-  return yystpcpy (yyres, yystr) - yyres;
 }
 # endif
 
@@ -1098,19 +1179,19 @@
    *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
    required number of bytes is too large to store.  */
 static int
-yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
-                yytype_int16 *yyssp, int yytoken)
+yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg,
+                yy_state_t *yyssp, int yytoken)
 {
-  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
-  YYSIZE_T yysize = yysize0;
   enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
   /* Internationalized format string. */
   const char *yyformat = YY_NULLPTR;
-  /* Arguments of yyformat. */
+  /* Arguments of yyformat: reported tokens (one for the "unexpected",
+     one per "expected"). */
   char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-  /* Number of reported tokens (one for the "unexpected", one per
-     "expected"). */
+  /* Actual size of YYARG. */
   int yycount = 0;
+  /* Cumulated lengths of YYARG.  */
+  YYPTRDIFF_T yysize = 0;
 
   /* There are many possibilities here to consider:
      - If this state is a consistent state with a default action, then
@@ -1137,7 +1218,9 @@
   */
   if (yytoken != YYEMPTY)
     {
-      int yyn = yypact[*yyssp];
+      int yyn = yypact[+*yyssp];
+      YYPTRDIFF_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
+      yysize = yysize0;
       yyarg[yycount++] = yytname[yytoken];
       if (!yypact_value_is_default (yyn))
         {
@@ -1162,11 +1245,12 @@
                   }
                 yyarg[yycount++] = yytname[yyx];
                 {
-                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
-                  if (! (yysize <= yysize1
-                         && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+                  YYPTRDIFF_T yysize1
+                    = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
+                  if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
+                    yysize = yysize1;
+                  else
                     return 2;
-                  yysize = yysize1;
                 }
               }
         }
@@ -1189,10 +1273,13 @@
     }
 
   {
-    YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
-    if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+    /* Don't count the "%s"s in the final size, but reserve room for
+       the terminator.  */
+    YYPTRDIFF_T yysize1 = yysize + (yystrlen (yyformat) - 2 * yycount) + 1;
+    if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
+      yysize = yysize1;
+    else
       return 2;
-    yysize = yysize1;
   }
 
   if (*yymsg_alloc < yysize)
@@ -1218,8 +1305,8 @@
         }
       else
         {
-          yyp++;
-          yyformat++;
+          ++yyp;
+          ++yyformat;
         }
   }
   return 0;
@@ -1262,7 +1349,7 @@
 int
 yyparse (void)
 {
-    int yystate;
+    yy_state_fast_t yystate;
     /* Number of tokens to shift before error messages enabled.  */
     int yyerrstatus;
 
@@ -1274,16 +1361,16 @@
        to reallocate them elsewhere.  */
 
     /* The state stack.  */
-    yytype_int16 yyssa[YYINITDEPTH];
-    yytype_int16 *yyss;
-    yytype_int16 *yyssp;
+    yy_state_t yyssa[YYINITDEPTH];
+    yy_state_t *yyss;
+    yy_state_t *yyssp;
 
     /* The semantic value stack.  */
     YYSTYPE yyvsa[YYINITDEPTH];
     YYSTYPE *yyvs;
     YYSTYPE *yyvsp;
 
-    YYSIZE_T yystacksize;
+    YYPTRDIFF_T yystacksize;
 
   int yyn;
   int yyresult;
@@ -1297,7 +1384,7 @@
   /* Buffer for error messages, and its allocated size.  */
   char yymsgbuf[128];
   char *yymsg = yymsgbuf;
-  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+  YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf;
 #endif
 
 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
@@ -1318,46 +1405,54 @@
   yychar = YYEMPTY; /* Cause a token to be read.  */
   goto yysetstate;
 
+
 /*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate.  |
+| yynewstate -- push a new state, which is found in yystate.  |
 `------------------------------------------------------------*/
- yynewstate:
+yynewstate:
   /* In all cases, when you get here, the value and location stacks
      have just been pushed.  So pushing a state here evens the stacks.  */
   yyssp++;
 
- yysetstate:
-  *yyssp = yystate;
+
+/*--------------------------------------------------------------------.
+| yysetstate -- set current state (the top of the stack) to yystate.  |
+`--------------------------------------------------------------------*/
+yysetstate:
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+  YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
+  YY_IGNORE_USELESS_CAST_BEGIN
+  *yyssp = YY_CAST (yy_state_t, yystate);
+  YY_IGNORE_USELESS_CAST_END
 
   if (yyss + yystacksize - 1 <= yyssp)
+#if !defined yyoverflow && !defined YYSTACK_RELOCATE
+    goto yyexhaustedlab;
+#else
     {
       /* Get the current used size of the three stacks, in elements.  */
-      YYSIZE_T yysize = yyssp - yyss + 1;
+      YYPTRDIFF_T yysize = yyssp - yyss + 1;
 
-#ifdef yyoverflow
+# if defined yyoverflow
       {
         /* Give user a chance to reallocate the stack.  Use copies of
            these so that the &'s don't force the real ones into
            memory.  */
+        yy_state_t *yyss1 = yyss;
         YYSTYPE *yyvs1 = yyvs;
-        yytype_int16 *yyss1 = yyss;
 
         /* Each stack pointer address is followed by the size of the
            data in use in that stack, in bytes.  This used to be a
            conditional around just the two extra args, but that might
            be undefined if yyoverflow is a macro.  */
         yyoverflow (YY_("memory exhausted"),
-                    &yyss1, yysize * sizeof (*yyssp),
-                    &yyvs1, yysize * sizeof (*yyvsp),
+                    &yyss1, yysize * YYSIZEOF (*yyssp),
+                    &yyvs1, yysize * YYSIZEOF (*yyvsp),
                     &yystacksize);
-
         yyss = yyss1;
         yyvs = yyvs1;
       }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
-      goto yyexhaustedlab;
-# else
+# else /* defined YYSTACK_RELOCATE */
       /* Extend the stack our own way.  */
       if (YYMAXDEPTH <= yystacksize)
         goto yyexhaustedlab;
@@ -1366,42 +1461,43 @@
         yystacksize = YYMAXDEPTH;
 
       {
-        yytype_int16 *yyss1 = yyss;
+        yy_state_t *yyss1 = yyss;
         union yyalloc *yyptr =
-          (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+          YY_CAST (union yyalloc *,
+                   YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
         if (! yyptr)
           goto yyexhaustedlab;
         YYSTACK_RELOCATE (yyss_alloc, yyss);
         YYSTACK_RELOCATE (yyvs_alloc, yyvs);
-#  undef YYSTACK_RELOCATE
+# undef YYSTACK_RELOCATE
         if (yyss1 != yyssa)
           YYSTACK_FREE (yyss1);
       }
 # endif
-#endif /* no yyoverflow */
 
       yyssp = yyss + yysize - 1;
       yyvsp = yyvs + yysize - 1;
 
-      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-                  (unsigned long) yystacksize));
+      YY_IGNORE_USELESS_CAST_BEGIN
+      YYDPRINTF ((stderr, "Stack size increased to %ld\n",
+                  YY_CAST (long, yystacksize)));
+      YY_IGNORE_USELESS_CAST_END
 
       if (yyss + yystacksize - 1 <= yyssp)
         YYABORT;
     }
-
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
 
   if (yystate == YYFINAL)
     YYACCEPT;
 
   goto yybackup;
 
+
 /*-----------.
 | yybackup.  |
 `-----------*/
 yybackup:
-
   /* Do appropriate processing given the current state.  Read a
      lookahead token if we need one and don't already have one.  */
 
@@ -1451,15 +1547,13 @@
 
   /* Shift the lookahead token.  */
   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-
-  /* Discard the shifted token.  */
-  yychar = YYEMPTY;
-
   yystate = yyn;
   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   *++yyvsp = yylval;
   YY_IGNORE_MAYBE_UNINITIALIZED_END
 
+  /* Discard the shifted token.  */
+  yychar = YYEMPTY;
   goto yynewstate;
 
 
@@ -1474,7 +1568,7 @@
 
 
 /*-----------------------------.
-| yyreduce -- Do a reduction.  |
+| yyreduce -- do a reduction.  |
 `-----------------------------*/
 yyreduce:
   /* yyn is the number of a rule to reduce with.  */
@@ -1494,33 +1588,33 @@
   YY_REDUCE_PRINT (yyn);
   switch (yyn)
     {
-        case 4:
-#line 186 "ppy.y" /* yacc.c:1651  */
-    { pp_do_include((yyvsp[-1].cptr), 1); }
-#line 1501 "ppy.tab.c" /* yacc.c:1651  */
+  case 4:
+#line 186 "ppy.y"
+                                        { pp_do_include((yyvsp[-1].cptr), 1); }
+#line 1595 "ppy.tab.c"
     break;
 
   case 5:
-#line 187 "ppy.y" /* yacc.c:1651  */
-    { pp_do_include((yyvsp[-1].cptr), 0); }
-#line 1507 "ppy.tab.c" /* yacc.c:1651  */
+#line 187 "ppy.y"
+                                        { pp_do_include((yyvsp[-1].cptr), 0); }
+#line 1601 "ppy.tab.c"
     break;
 
   case 6:
-#line 188 "ppy.y" /* yacc.c:1651  */
-    { pp_next_if_state(boolean(&(yyvsp[-1].cval))); }
-#line 1513 "ppy.tab.c" /* yacc.c:1651  */
+#line 188 "ppy.y"
+                                { pp_next_if_state(boolean(&(yyvsp[-1].cval))); }
+#line 1607 "ppy.tab.c"
     break;
 
   case 7:
-#line 189 "ppy.y" /* yacc.c:1651  */
-    { pp_next_if_state(pplookup((yyvsp[-1].cptr)) != NULL); free((yyvsp[-1].cptr)); }
-#line 1519 "ppy.tab.c" /* yacc.c:1651  */
+#line 189 "ppy.y"
+                                { pp_next_if_state(pplookup((yyvsp[-1].cptr)) != NULL); free((yyvsp[-1].cptr)); }
+#line 1613 "ppy.tab.c"
     break;
 
   case 8:
-#line 190 "ppy.y" /* yacc.c:1651  */
-    {
+#line 190 "ppy.y"
+                                {
 		int t = pplookup((yyvsp[-1].cptr)) == NULL;
 		if(pp_incl_state.state == 0 && t && !pp_incl_state.seen_junk)
 		{
@@ -1540,12 +1634,12 @@
 			fprintf(stderr, "tIFNDEF: %s:%d: include_state=%d, include_ppp='%s', include_ifdepth=%d\n",
                                 pp_status.input, pp_status.line_number, pp_incl_state.state, pp_incl_state.ppp, pp_incl_state.ifdepth);
 		}
-#line 1544 "ppy.tab.c" /* yacc.c:1651  */
+#line 1638 "ppy.tab.c"
     break;
 
   case 9:
-#line 210 "ppy.y" /* yacc.c:1651  */
-    {
+#line 210 "ppy.y"
+                                {
 		pp_if_state_t s = pp_pop_if();
 		switch(s)
 		{
@@ -1569,12 +1663,12 @@
 			pp_internal_error(__FILE__, __LINE__, "Invalid pp_if_state (%d) in #elif directive", s);
 		}
 		}
-#line 1573 "ppy.tab.c" /* yacc.c:1651  */
+#line 1667 "ppy.tab.c"
     break;
 
   case 10:
-#line 234 "ppy.y" /* yacc.c:1651  */
-    {
+#line 234 "ppy.y"
+                                {
 		pp_if_state_t s = pp_pop_if();
 		switch(s)
 		{
@@ -1600,12 +1694,12 @@
 			pp_internal_error(__FILE__, __LINE__, "Invalid pp_if_state (%d) in #else directive", s);
 		}
 		}
-#line 1604 "ppy.tab.c" /* yacc.c:1651  */
+#line 1698 "ppy.tab.c"
     break;
 
   case 11:
-#line 260 "ppy.y" /* yacc.c:1651  */
-    {
+#line 260 "ppy.y"
+                                {
 		if(pp_pop_if() != if_error)
 		{
 			if(pp_incl_state.ifdepth == pp_get_if_depth() && pp_incl_state.state == 1)
@@ -1622,92 +1716,92 @@
 					pp_status.input, pp_status.line_number, pp_incl_state.state, pp_incl_state.ppp, pp_incl_state.ifdepth);
 		}
 		}
-#line 1626 "ppy.tab.c" /* yacc.c:1651  */
+#line 1720 "ppy.tab.c"
     break;
 
   case 12:
-#line 277 "ppy.y" /* yacc.c:1651  */
-    { pp_del_define((yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); }
-#line 1632 "ppy.tab.c" /* yacc.c:1651  */
+#line 277 "ppy.y"
+                                { pp_del_define((yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); }
+#line 1726 "ppy.tab.c"
     break;
 
   case 13:
-#line 278 "ppy.y" /* yacc.c:1651  */
-    { pp_add_define((yyvsp[-2].cptr), (yyvsp[-1].cptr)); free((yyvsp[-2].cptr)); free((yyvsp[-1].cptr)); }
-#line 1638 "ppy.tab.c" /* yacc.c:1651  */
+#line 278 "ppy.y"
+                                { pp_add_define((yyvsp[-2].cptr), (yyvsp[-1].cptr)); free((yyvsp[-2].cptr)); free((yyvsp[-1].cptr)); }
+#line 1732 "ppy.tab.c"
     break;
 
   case 14:
-#line 279 "ppy.y" /* yacc.c:1651  */
-    {
+#line 279 "ppy.y"
+                                                                {
 		pp_add_macro((yyvsp[-5].cptr), macro_args, nmacro_args, (yyvsp[-1].mtext));
 		}
-#line 1646 "ppy.tab.c" /* yacc.c:1651  */
+#line 1740 "ppy.tab.c"
     break;
 
   case 15:
-#line 282 "ppy.y" /* yacc.c:1651  */
-    { if((yyvsp[-1].cptr)) pp_writestring("# %d %s\n", (yyvsp[-2].sint) , (yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); }
-#line 1652 "ppy.tab.c" /* yacc.c:1651  */
+#line 282 "ppy.y"
+                                        { if((yyvsp[-1].cptr)) pp_writestring("# %d %s\n", (yyvsp[-2].sint) , (yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); }
+#line 1746 "ppy.tab.c"
     break;
 
   case 16:
-#line 283 "ppy.y" /* yacc.c:1651  */
-    { if((yyvsp[-1].cptr)) pp_writestring("# %d %s\n", (yyvsp[-2].sint) , (yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); }
-#line 1658 "ppy.tab.c" /* yacc.c:1651  */
+#line 283 "ppy.y"
+                                        { if((yyvsp[-1].cptr)) pp_writestring("# %d %s\n", (yyvsp[-2].sint) , (yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); }
+#line 1752 "ppy.tab.c"
     break;
 
   case 17:
-#line 285 "ppy.y" /* yacc.c:1651  */
-    { if((yyvsp[-2].cptr)) pp_writestring("# %d %s %d\n", (yyvsp[-3].sint), (yyvsp[-2].cptr), (yyvsp[-1].sint)); free((yyvsp[-2].cptr)); }
-#line 1664 "ppy.tab.c" /* yacc.c:1651  */
+#line 285 "ppy.y"
+                { if((yyvsp[-2].cptr)) pp_writestring("# %d %s %d\n", (yyvsp[-3].sint), (yyvsp[-2].cptr), (yyvsp[-1].sint)); free((yyvsp[-2].cptr)); }
+#line 1758 "ppy.tab.c"
     break;
 
   case 18:
-#line 287 "ppy.y" /* yacc.c:1651  */
-    { if((yyvsp[-3].cptr)) pp_writestring("# %d %s %d %d\n", (yyvsp[-4].sint) ,(yyvsp[-3].cptr), (yyvsp[-2].sint), (yyvsp[-1].sint)); free((yyvsp[-3].cptr)); }
-#line 1670 "ppy.tab.c" /* yacc.c:1651  */
+#line 287 "ppy.y"
+                { if((yyvsp[-3].cptr)) pp_writestring("# %d %s %d %d\n", (yyvsp[-4].sint) ,(yyvsp[-3].cptr), (yyvsp[-2].sint), (yyvsp[-1].sint)); free((yyvsp[-3].cptr)); }
+#line 1764 "ppy.tab.c"
     break;
 
   case 19:
-#line 289 "ppy.y" /* yacc.c:1651  */
-    { if((yyvsp[-4].cptr)) pp_writestring("# %d %s %d %d %d\n", (yyvsp[-5].sint) ,(yyvsp[-4].cptr) ,(yyvsp[-3].sint) ,(yyvsp[-2].sint), (yyvsp[-1].sint)); free((yyvsp[-4].cptr)); }
-#line 1676 "ppy.tab.c" /* yacc.c:1651  */
+#line 289 "ppy.y"
+                { if((yyvsp[-4].cptr)) pp_writestring("# %d %s %d %d %d\n", (yyvsp[-5].sint) ,(yyvsp[-4].cptr) ,(yyvsp[-3].sint) ,(yyvsp[-2].sint), (yyvsp[-1].sint)); free((yyvsp[-4].cptr)); }
+#line 1770 "ppy.tab.c"
     break;
 
   case 20:
-#line 291 "ppy.y" /* yacc.c:1651  */
-    { if((yyvsp[-5].cptr)) pp_writestring("# %d %s %d %d %d %d\n", (yyvsp[-6].sint) ,(yyvsp[-5].cptr) ,(yyvsp[-4].sint) ,(yyvsp[-3].sint), (yyvsp[-2].sint), (yyvsp[-1].sint)); free((yyvsp[-5].cptr)); }
-#line 1682 "ppy.tab.c" /* yacc.c:1651  */
+#line 291 "ppy.y"
+                { if((yyvsp[-5].cptr)) pp_writestring("# %d %s %d %d %d %d\n", (yyvsp[-6].sint) ,(yyvsp[-5].cptr) ,(yyvsp[-4].sint) ,(yyvsp[-3].sint), (yyvsp[-2].sint), (yyvsp[-1].sint)); free((yyvsp[-5].cptr)); }
+#line 1776 "ppy.tab.c"
     break;
 
   case 22:
-#line 293 "ppy.y" /* yacc.c:1651  */
-    { ppy_error("#error directive: '%s'", (yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); }
-#line 1688 "ppy.tab.c" /* yacc.c:1651  */
+#line 293 "ppy.y"
+                                { ppy_error("#error directive: '%s'", (yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); }
+#line 1782 "ppy.tab.c"
     break;
 
   case 23:
-#line 294 "ppy.y" /* yacc.c:1651  */
-    { ppy_warning("#warning directive: '%s'", (yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); }
-#line 1694 "ppy.tab.c" /* yacc.c:1651  */
+#line 294 "ppy.y"
+                                { ppy_warning("#warning directive: '%s'", (yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); }
+#line 1788 "ppy.tab.c"
     break;
 
   case 24:
-#line 295 "ppy.y" /* yacc.c:1651  */
-    { pp_writestring("#pragma %s\n", (yyvsp[-1].cptr) ? (yyvsp[-1].cptr) : ""); free((yyvsp[-1].cptr)); }
-#line 1700 "ppy.tab.c" /* yacc.c:1651  */
+#line 295 "ppy.y"
+                                { pp_writestring("#pragma %s\n", (yyvsp[-1].cptr) ? (yyvsp[-1].cptr) : ""); free((yyvsp[-1].cptr)); }
+#line 1794 "ppy.tab.c"
     break;
 
   case 25:
-#line 296 "ppy.y" /* yacc.c:1651  */
-    { if(pp_status.pedantic) ppy_warning("#ident ignored (arg: '%s')", (yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); }
-#line 1706 "ppy.tab.c" /* yacc.c:1651  */
+#line 296 "ppy.y"
+                                { if(pp_status.pedantic) ppy_warning("#ident ignored (arg: '%s')", (yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); }
+#line 1800 "ppy.tab.c"
     break;
 
   case 26:
-#line 297 "ppy.y" /* yacc.c:1651  */
-    {
+#line 297 "ppy.y"
+                                    {
                 if((yyvsp[0].cptr))
                 {
                         int nl=strlen((yyvsp[0].cptr)) +3;
@@ -1720,376 +1814,377 @@
                         free((yyvsp[0].cptr));
                 }
 	}
-#line 1724 "ppy.tab.c" /* yacc.c:1651  */
+#line 1818 "ppy.tab.c"
     break;
 
   case 27:
-#line 310 "ppy.y" /* yacc.c:1651  */
-    {
+#line 310 "ppy.y"
+                               {
 		pp_do_include((yyvsp[0].cptr),1);
 	}
-#line 1732 "ppy.tab.c" /* yacc.c:1651  */
+#line 1826 "ppy.tab.c"
     break;
 
   case 28:
-#line 316 "ppy.y" /* yacc.c:1651  */
-    { (yyval.cptr) = NULL; }
-#line 1738 "ppy.tab.c" /* yacc.c:1651  */
+#line 316 "ppy.y"
+                        { (yyval.cptr) = NULL; }
+#line 1832 "ppy.tab.c"
     break;
 
   case 29:
-#line 317 "ppy.y" /* yacc.c:1651  */
-    { (yyval.cptr) = (yyvsp[0].cptr); }
-#line 1744 "ppy.tab.c" /* yacc.c:1651  */
+#line 317 "ppy.y"
+                        { (yyval.cptr) = (yyvsp[0].cptr); }
+#line 1838 "ppy.tab.c"
     break;
 
   case 30:
-#line 320 "ppy.y" /* yacc.c:1651  */
-    { (yyval.cptr) = (yyvsp[0].cptr); }
-#line 1750 "ppy.tab.c" /* yacc.c:1651  */
+#line 320 "ppy.y"
+                                { (yyval.cptr) = (yyvsp[0].cptr); }
+#line 1844 "ppy.tab.c"
     break;
 
   case 31:
-#line 321 "ppy.y" /* yacc.c:1651  */
-    { (yyval.cptr) = (yyvsp[0].cptr); }
-#line 1756 "ppy.tab.c" /* yacc.c:1651  */
+#line 321 "ppy.y"
+                                { (yyval.cptr) = (yyvsp[0].cptr); }
+#line 1850 "ppy.tab.c"
     break;
 
   case 32:
-#line 322 "ppy.y" /* yacc.c:1651  */
-    { (yyval.cptr) = (yyvsp[0].cptr); }
-#line 1762 "ppy.tab.c" /* yacc.c:1651  */
+#line 322 "ppy.y"
+                                { (yyval.cptr) = (yyvsp[0].cptr); }
+#line 1856 "ppy.tab.c"
     break;
 
   case 33:
-#line 323 "ppy.y" /* yacc.c:1651  */
-    { (yyval.cptr) = merge_text((yyvsp[-1].cptr), (yyvsp[0].cptr)); }
-#line 1768 "ppy.tab.c" /* yacc.c:1651  */
+#line 323 "ppy.y"
+                                { (yyval.cptr) = merge_text((yyvsp[-1].cptr), (yyvsp[0].cptr)); }
+#line 1862 "ppy.tab.c"
     break;
 
   case 34:
-#line 324 "ppy.y" /* yacc.c:1651  */
-    { (yyval.cptr) = merge_text((yyvsp[-1].cptr), (yyvsp[0].cptr)); }
-#line 1774 "ppy.tab.c" /* yacc.c:1651  */
+#line 324 "ppy.y"
+                                { (yyval.cptr) = merge_text((yyvsp[-1].cptr), (yyvsp[0].cptr)); }
+#line 1868 "ppy.tab.c"
     break;
 
   case 35:
-#line 325 "ppy.y" /* yacc.c:1651  */
-    { (yyval.cptr) = merge_text((yyvsp[-1].cptr), (yyvsp[0].cptr)); }
-#line 1780 "ppy.tab.c" /* yacc.c:1651  */
+#line 325 "ppy.y"
+                                { (yyval.cptr) = merge_text((yyvsp[-1].cptr), (yyvsp[0].cptr)); }
+#line 1874 "ppy.tab.c"
     break;
 
   case 36:
-#line 328 "ppy.y" /* yacc.c:1651  */
-    { macro_args = NULL; nmacro_args = 0; }
-#line 1786 "ppy.tab.c" /* yacc.c:1651  */
+#line 328 "ppy.y"
+                        { macro_args = NULL; nmacro_args = 0; }
+#line 1880 "ppy.tab.c"
     break;
 
   case 37:
-#line 331 "ppy.y" /* yacc.c:1651  */
-    { (yyval.sint) = 0; macro_args = NULL; nmacro_args = 0; }
-#line 1792 "ppy.tab.c" /* yacc.c:1651  */
+#line 331 "ppy.y"
+                                { (yyval.sint) = 0; macro_args = NULL; nmacro_args = 0; }
+#line 1886 "ppy.tab.c"
     break;
 
   case 38:
-#line 332 "ppy.y" /* yacc.c:1651  */
-    { (yyval.sint) = nmacro_args; }
-#line 1798 "ppy.tab.c" /* yacc.c:1651  */
+#line 332 "ppy.y"
+                                { (yyval.sint) = nmacro_args; }
+#line 1892 "ppy.tab.c"
     break;
 
   case 39:
-#line 335 "ppy.y" /* yacc.c:1651  */
-    { (yyval.marg) = (yyvsp[0].marg); }
-#line 1804 "ppy.tab.c" /* yacc.c:1651  */
+#line 335 "ppy.y"
+                                { (yyval.marg) = (yyvsp[0].marg); }
+#line 1898 "ppy.tab.c"
     break;
 
   case 40:
-#line 336 "ppy.y" /* yacc.c:1651  */
-    { (yyval.marg) = add_new_marg(NULL, arg_list); nmacro_args *= -1; }
-#line 1810 "ppy.tab.c" /* yacc.c:1651  */
+#line 336 "ppy.y"
+                                { (yyval.marg) = add_new_marg(NULL, arg_list); nmacro_args *= -1; }
+#line 1904 "ppy.tab.c"
     break;
 
   case 41:
-#line 339 "ppy.y" /* yacc.c:1651  */
-    { (yyval.marg) = add_new_marg((yyvsp[0].cptr), arg_single); }
-#line 1816 "ppy.tab.c" /* yacc.c:1651  */
+#line 339 "ppy.y"
+                                { (yyval.marg) = add_new_marg((yyvsp[0].cptr), arg_single); }
+#line 1910 "ppy.tab.c"
     break;
 
   case 42:
-#line 340 "ppy.y" /* yacc.c:1651  */
-    { (yyval.marg) = add_new_marg((yyvsp[0].cptr), arg_single); }
-#line 1822 "ppy.tab.c" /* yacc.c:1651  */
+#line 340 "ppy.y"
+                                { (yyval.marg) = add_new_marg((yyvsp[0].cptr), arg_single); }
+#line 1916 "ppy.tab.c"
     break;
 
   case 43:
-#line 344 "ppy.y" /* yacc.c:1651  */
-    { (yyval.mtext) = NULL; }
-#line 1828 "ppy.tab.c" /* yacc.c:1651  */
+#line 344 "ppy.y"
+                        { (yyval.mtext) = NULL; }
+#line 1922 "ppy.tab.c"
     break;
 
   case 44:
-#line 345 "ppy.y" /* yacc.c:1651  */
-    {
+#line 345 "ppy.y"
+                        {
 		for((yyval.mtext) = (yyvsp[0].mtext); (yyval.mtext) && (yyval.mtext)->prev; (yyval.mtext) = (yyval.mtext)->prev)
 			;
 		}
-#line 1837 "ppy.tab.c" /* yacc.c:1651  */
+#line 1931 "ppy.tab.c"
     break;
 
   case 45:
-#line 351 "ppy.y" /* yacc.c:1651  */
-    { (yyval.mtext) = (yyvsp[0].mtext); }
-#line 1843 "ppy.tab.c" /* yacc.c:1651  */
+#line 351 "ppy.y"
+                        { (yyval.mtext) = (yyvsp[0].mtext); }
+#line 1937 "ppy.tab.c"
     break;
 
   case 46:
-#line 352 "ppy.y" /* yacc.c:1651  */
-    { (yyval.mtext) = combine_mtext((yyvsp[-1].mtext), (yyvsp[0].mtext)); }
-#line 1849 "ppy.tab.c" /* yacc.c:1651  */
+#line 352 "ppy.y"
+                        { (yyval.mtext) = combine_mtext((yyvsp[-1].mtext), (yyvsp[0].mtext)); }
+#line 1943 "ppy.tab.c"
     break;
 
   case 47:
-#line 355 "ppy.y" /* yacc.c:1651  */
-    { (yyval.mtext) = new_mtext((yyvsp[0].cptr), 0, exp_text); }
-#line 1855 "ppy.tab.c" /* yacc.c:1651  */
+#line 355 "ppy.y"
+                        { (yyval.mtext) = new_mtext((yyvsp[0].cptr), 0, exp_text); }
+#line 1949 "ppy.tab.c"
     break;
 
   case 48:
-#line 356 "ppy.y" /* yacc.c:1651  */
-    { (yyval.mtext) = new_mtext((yyvsp[0].cptr), 0, exp_text); }
-#line 1861 "ppy.tab.c" /* yacc.c:1651  */
+#line 356 "ppy.y"
+                        { (yyval.mtext) = new_mtext((yyvsp[0].cptr), 0, exp_text); }
+#line 1955 "ppy.tab.c"
     break;
 
   case 49:
-#line 357 "ppy.y" /* yacc.c:1651  */
-    { (yyval.mtext) = new_mtext((yyvsp[0].cptr), 0, exp_text); }
-#line 1867 "ppy.tab.c" /* yacc.c:1651  */
+#line 357 "ppy.y"
+                        { (yyval.mtext) = new_mtext((yyvsp[0].cptr), 0, exp_text); }
+#line 1961 "ppy.tab.c"
     break;
 
   case 50:
-#line 358 "ppy.y" /* yacc.c:1651  */
-    { (yyval.mtext) = new_mtext(NULL, 0, exp_concat); }
-#line 1873 "ppy.tab.c" /* yacc.c:1651  */
+#line 358 "ppy.y"
+                        { (yyval.mtext) = new_mtext(NULL, 0, exp_concat); }
+#line 1967 "ppy.tab.c"
     break;
 
   case 51:
-#line 359 "ppy.y" /* yacc.c:1651  */
-    {
+#line 359 "ppy.y"
+                                {
 		int mat = marg_index((yyvsp[0].cptr));
 		if(mat < 0)
 			ppy_error("Stringification identifier must be an argument parameter");
 		else
 			(yyval.mtext) = new_mtext(NULL, mat, exp_stringize);
 		}
-#line 1885 "ppy.tab.c" /* yacc.c:1651  */
+#line 1979 "ppy.tab.c"
     break;
 
   case 52:
-#line 366 "ppy.y" /* yacc.c:1651  */
-    {
+#line 366 "ppy.y"
+                        {
 		int mat = marg_index((yyvsp[0].cptr));
 		if(mat >= 0)
 			(yyval.mtext) = new_mtext(NULL, mat, exp_subst);
 		else if((yyvsp[0].cptr))
 			(yyval.mtext) = new_mtext((yyvsp[0].cptr), 0, exp_text);
 		}
-#line 1897 "ppy.tab.c" /* yacc.c:1651  */
+#line 1991 "ppy.tab.c"
     break;
 
   case 53:
-#line 375 "ppy.y" /* yacc.c:1651  */
-    { (yyval.cval).type = cv_sint;  (yyval.cval).val.si = (yyvsp[0].sint); }
-#line 1903 "ppy.tab.c" /* yacc.c:1651  */
+#line 375 "ppy.y"
+                                        { (yyval.cval).type = cv_sint;  (yyval.cval).val.si = (yyvsp[0].sint); }
+#line 1997 "ppy.tab.c"
     break;
 
   case 54:
-#line 376 "ppy.y" /* yacc.c:1651  */
-    { (yyval.cval).type = cv_uint;  (yyval.cval).val.ui = (yyvsp[0].uint); }
-#line 1909 "ppy.tab.c" /* yacc.c:1651  */
+#line 376 "ppy.y"
+                                        { (yyval.cval).type = cv_uint;  (yyval.cval).val.ui = (yyvsp[0].uint); }
+#line 2003 "ppy.tab.c"
     break;
 
   case 55:
-#line 377 "ppy.y" /* yacc.c:1651  */
-    { (yyval.cval).type = cv_slong; (yyval.cval).val.sl = (yyvsp[0].slong); }
-#line 1915 "ppy.tab.c" /* yacc.c:1651  */
+#line 377 "ppy.y"
+                                        { (yyval.cval).type = cv_slong; (yyval.cval).val.sl = (yyvsp[0].slong); }
+#line 2009 "ppy.tab.c"
     break;
 
   case 56:
-#line 378 "ppy.y" /* yacc.c:1651  */
-    { (yyval.cval).type = cv_ulong; (yyval.cval).val.ul = (yyvsp[0].ulong); }
-#line 1921 "ppy.tab.c" /* yacc.c:1651  */
+#line 378 "ppy.y"
+                                        { (yyval.cval).type = cv_ulong; (yyval.cval).val.ul = (yyvsp[0].ulong); }
+#line 2015 "ppy.tab.c"
     break;
 
   case 57:
-#line 379 "ppy.y" /* yacc.c:1651  */
-    { (yyval.cval).type = cv_sll;   (yyval.cval).val.sll = (yyvsp[0].sll); }
-#line 1927 "ppy.tab.c" /* yacc.c:1651  */
+#line 379 "ppy.y"
+                                        { (yyval.cval).type = cv_sll;   (yyval.cval).val.sll = (yyvsp[0].sll); }
+#line 2021 "ppy.tab.c"
     break;
 
   case 58:
-#line 380 "ppy.y" /* yacc.c:1651  */
-    { (yyval.cval).type = cv_ull;   (yyval.cval).val.ull = (yyvsp[0].ull); }
-#line 1933 "ppy.tab.c" /* yacc.c:1651  */
+#line 380 "ppy.y"
+                                        { (yyval.cval).type = cv_ull;   (yyval.cval).val.ull = (yyvsp[0].ull); }
+#line 2027 "ppy.tab.c"
     break;
 
   case 59:
-#line 381 "ppy.y" /* yacc.c:1651  */
-    { (yyval.cval).type = cv_sint;  (yyval.cval).val.si = pplookup((yyvsp[0].cptr)) != NULL; }
-#line 1939 "ppy.tab.c" /* yacc.c:1651  */
+#line 381 "ppy.y"
+                                        { (yyval.cval).type = cv_sint;  (yyval.cval).val.si = pplookup((yyvsp[0].cptr)) != NULL; }
+#line 2033 "ppy.tab.c"
     break;
 
   case 60:
-#line 382 "ppy.y" /* yacc.c:1651  */
-    { (yyval.cval).type = cv_sint;  (yyval.cval).val.si = pplookup((yyvsp[-1].cptr)) != NULL; }
-#line 1945 "ppy.tab.c" /* yacc.c:1651  */
+#line 382 "ppy.y"
+                                        { (yyval.cval).type = cv_sint;  (yyval.cval).val.si = pplookup((yyvsp[-1].cptr)) != NULL; }
+#line 2039 "ppy.tab.c"
     break;
 
   case 61:
-#line 383 "ppy.y" /* yacc.c:1651  */
-    { (yyval.cval).type = cv_sint;  (yyval.cval).val.si = 0; }
-#line 1951 "ppy.tab.c" /* yacc.c:1651  */
+#line 383 "ppy.y"
+                                        { (yyval.cval).type = cv_sint;  (yyval.cval).val.si = 0; }
+#line 2045 "ppy.tab.c"
     break;
 
   case 62:
-#line 384 "ppy.y" /* yacc.c:1651  */
-    { (yyval.cval).type = cv_sint; (yyval.cval).val.si = boolean(&(yyvsp[-2].cval)) || boolean(&(yyvsp[0].cval)); }
-#line 1957 "ppy.tab.c" /* yacc.c:1651  */
+#line 384 "ppy.y"
+                                        { (yyval.cval).type = cv_sint; (yyval.cval).val.si = boolean(&(yyvsp[-2].cval)) || boolean(&(yyvsp[0].cval)); }
+#line 2051 "ppy.tab.c"
     break;
 
   case 63:
-#line 385 "ppy.y" /* yacc.c:1651  */
-    { (yyval.cval).type = cv_sint; (yyval.cval).val.si = boolean(&(yyvsp[-2].cval)) && boolean(&(yyvsp[0].cval)); }
-#line 1963 "ppy.tab.c" /* yacc.c:1651  */
+#line 385 "ppy.y"
+                                        { (yyval.cval).type = cv_sint; (yyval.cval).val.si = boolean(&(yyvsp[-2].cval)) && boolean(&(yyvsp[0].cval)); }
+#line 2057 "ppy.tab.c"
     break;
 
   case 64:
-#line 386 "ppy.y" /* yacc.c:1651  */
-    { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), ==); }
-#line 1969 "ppy.tab.c" /* yacc.c:1651  */
+#line 386 "ppy.y"
+                                        { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), ==); }
+#line 2063 "ppy.tab.c"
     break;
 
   case 65:
-#line 387 "ppy.y" /* yacc.c:1651  */
-    { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), !=); }
-#line 1975 "ppy.tab.c" /* yacc.c:1651  */
+#line 387 "ppy.y"
+                                        { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), !=); }
+#line 2069 "ppy.tab.c"
     break;
 
   case 66:
-#line 388 "ppy.y" /* yacc.c:1651  */
-    { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval),  <); }
-#line 1981 "ppy.tab.c" /* yacc.c:1651  */
+#line 388 "ppy.y"
+                                        { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval),  <); }
+#line 2075 "ppy.tab.c"
     break;
 
   case 67:
-#line 389 "ppy.y" /* yacc.c:1651  */
-    { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval),  >); }
-#line 1987 "ppy.tab.c" /* yacc.c:1651  */
+#line 389 "ppy.y"
+                                        { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval),  >); }
+#line 2081 "ppy.tab.c"
     break;
 
   case 68:
-#line 390 "ppy.y" /* yacc.c:1651  */
-    { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), <=); }
-#line 1993 "ppy.tab.c" /* yacc.c:1651  */
+#line 390 "ppy.y"
+                                        { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), <=); }
+#line 2087 "ppy.tab.c"
     break;
 
   case 69:
-#line 391 "ppy.y" /* yacc.c:1651  */
-    { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), >=); }
-#line 1999 "ppy.tab.c" /* yacc.c:1651  */
+#line 391 "ppy.y"
+                                        { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), >=); }
+#line 2093 "ppy.tab.c"
     break;
 
   case 70:
-#line 392 "ppy.y" /* yacc.c:1651  */
-    { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval),  +); }
-#line 2005 "ppy.tab.c" /* yacc.c:1651  */
+#line 392 "ppy.y"
+                                        { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval),  +); }
+#line 2099 "ppy.tab.c"
     break;
 
   case 71:
-#line 393 "ppy.y" /* yacc.c:1651  */
-    { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval),  -); }
-#line 2011 "ppy.tab.c" /* yacc.c:1651  */
+#line 393 "ppy.y"
+                                        { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval),  -); }
+#line 2105 "ppy.tab.c"
     break;
 
   case 72:
-#line 394 "ppy.y" /* yacc.c:1651  */
-    { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval),  ^); }
-#line 2017 "ppy.tab.c" /* yacc.c:1651  */
+#line 394 "ppy.y"
+                                        { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval),  ^); }
+#line 2111 "ppy.tab.c"
     break;
 
   case 73:
-#line 395 "ppy.y" /* yacc.c:1651  */
-    { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval),  &); }
-#line 2023 "ppy.tab.c" /* yacc.c:1651  */
+#line 395 "ppy.y"
+                                        { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval),  &); }
+#line 2117 "ppy.tab.c"
     break;
 
   case 74:
-#line 396 "ppy.y" /* yacc.c:1651  */
-    { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval),  |); }
-#line 2029 "ppy.tab.c" /* yacc.c:1651  */
+#line 396 "ppy.y"
+                                        { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval),  |); }
+#line 2123 "ppy.tab.c"
     break;
 
   case 75:
-#line 397 "ppy.y" /* yacc.c:1651  */
-    { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval),  *); }
-#line 2035 "ppy.tab.c" /* yacc.c:1651  */
+#line 397 "ppy.y"
+                                        { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval),  *); }
+#line 2129 "ppy.tab.c"
     break;
 
   case 76:
-#line 398 "ppy.y" /* yacc.c:1651  */
-    { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval),  /); }
-#line 2041 "ppy.tab.c" /* yacc.c:1651  */
+#line 398 "ppy.y"
+                                        { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval),  /); }
+#line 2135 "ppy.tab.c"
     break;
 
   case 77:
-#line 399 "ppy.y" /* yacc.c:1651  */
-    { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), <<); }
-#line 2047 "ppy.tab.c" /* yacc.c:1651  */
+#line 399 "ppy.y"
+                                        { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), <<); }
+#line 2141 "ppy.tab.c"
     break;
 
   case 78:
-#line 400 "ppy.y" /* yacc.c:1651  */
-    { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), >>); }
-#line 2053 "ppy.tab.c" /* yacc.c:1651  */
+#line 400 "ppy.y"
+                                        { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), >>); }
+#line 2147 "ppy.tab.c"
     break;
 
   case 79:
-#line 401 "ppy.y" /* yacc.c:1651  */
-    { (yyval.cval) =  (yyvsp[0].cval); }
-#line 2059 "ppy.tab.c" /* yacc.c:1651  */
+#line 401 "ppy.y"
+                                        { (yyval.cval) =  (yyvsp[0].cval); }
+#line 2153 "ppy.tab.c"
     break;
 
   case 80:
-#line 402 "ppy.y" /* yacc.c:1651  */
-    { UNARY_OP((yyval.cval), (yyvsp[0].cval), -); }
-#line 2065 "ppy.tab.c" /* yacc.c:1651  */
+#line 402 "ppy.y"
+                                        { UNARY_OP((yyval.cval), (yyvsp[0].cval), -); }
+#line 2159 "ppy.tab.c"
     break;
 
   case 81:
-#line 403 "ppy.y" /* yacc.c:1651  */
-    { UNARY_OP((yyval.cval), (yyvsp[0].cval), ~); }
-#line 2071 "ppy.tab.c" /* yacc.c:1651  */
+#line 403 "ppy.y"
+                                        { UNARY_OP((yyval.cval), (yyvsp[0].cval), ~); }
+#line 2165 "ppy.tab.c"
     break;
 
   case 82:
-#line 404 "ppy.y" /* yacc.c:1651  */
-    { (yyval.cval).type = cv_sint; (yyval.cval).val.si = !boolean(&(yyvsp[0].cval)); }
-#line 2077 "ppy.tab.c" /* yacc.c:1651  */
+#line 404 "ppy.y"
+                                        { (yyval.cval).type = cv_sint; (yyval.cval).val.si = !boolean(&(yyvsp[0].cval)); }
+#line 2171 "ppy.tab.c"
     break;
 
   case 83:
-#line 405 "ppy.y" /* yacc.c:1651  */
-    { (yyval.cval) =  (yyvsp[-1].cval); }
-#line 2083 "ppy.tab.c" /* yacc.c:1651  */
+#line 405 "ppy.y"
+                                        { (yyval.cval) =  (yyvsp[-1].cval); }
+#line 2177 "ppy.tab.c"
     break;
 
   case 84:
-#line 406 "ppy.y" /* yacc.c:1651  */
-    { (yyval.cval) = boolean(&(yyvsp[-4].cval)) ? (yyvsp[-2].cval) : (yyvsp[0].cval); }
-#line 2089 "ppy.tab.c" /* yacc.c:1651  */
+#line 406 "ppy.y"
+                                          { (yyval.cval) = boolean(&(yyvsp[-4].cval)) ? (yyvsp[-2].cval) : (yyvsp[0].cval); }
+#line 2183 "ppy.tab.c"
     break;
 
 
-#line 2093 "ppy.tab.c" /* yacc.c:1651  */
+#line 2187 "ppy.tab.c"
+
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -2114,14 +2209,13 @@
   /* Now 'shift' the result of the reduction.  Determine what state
      that goes to, based on the state we popped back to and the rule
      number reduced by.  */
-
-  yyn = yyr1[yyn];
-
-  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
-  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTOKENS];
+  {
+    const int yylhs = yyr1[yyn] - YYNTOKENS;
+    const int yyi = yypgoto[yylhs] + *yyssp;
+    yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
+               ? yytable[yyi]
+               : yydefgoto[yylhs]);
+  }
 
   goto yynewstate;
 
@@ -2153,7 +2247,7 @@
           {
             if (yymsg != yymsgbuf)
               YYSTACK_FREE (yymsg);
-            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+            yymsg = YY_CAST (char *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc)));
             if (!yymsg)
               {
                 yymsg = yymsgbuf;
@@ -2204,12 +2298,10 @@
 | yyerrorlab -- error raised explicitly by YYERROR.  |
 `---------------------------------------------------*/
 yyerrorlab:
-
-  /* Pacify compilers like GCC when the user code never invokes
-     YYERROR and the label yyerrorlab therefore never appears in user
-     code.  */
-  if (/*CONSTCOND*/ 0)
-     goto yyerrorlab;
+  /* Pacify compilers when the user code never invokes YYERROR and the
+     label yyerrorlab therefore never appears in user code.  */
+  if (0)
+    YYERROR;
 
   /* Do not reclaim the symbols of the rule whose action triggered
      this YYERROR.  */
@@ -2271,6 +2363,7 @@
   yyresult = 0;
   goto yyreturn;
 
+
 /*-----------------------------------.
 | yyabortlab -- YYABORT comes here.  |
 `-----------------------------------*/
@@ -2278,6 +2371,7 @@
   yyresult = 1;
   goto yyreturn;
 
+
 #if !defined yyoverflow || YYERROR_VERBOSE
 /*-------------------------------------------------.
 | yyexhaustedlab -- memory exhaustion comes here.  |
@@ -2288,6 +2382,10 @@
   /* Fall through.  */
 #endif
 
+
+/*-----------------------------------------------------.
+| yyreturn -- parsing is finished, return the result.  |
+`-----------------------------------------------------*/
 yyreturn:
   if (yychar != YYEMPTY)
     {
@@ -2304,7 +2402,7 @@
   while (yyssp != yyss)
     {
       yydestruct ("Cleanup: popping",
-                  yystos[*yyssp], yyvsp);
+                  yystos[+*yyssp], yyvsp);
       YYPOPSTACK (1);
     }
 #ifndef yyoverflow
@@ -2317,7 +2415,7 @@
 #endif
   return yyresult;
 }
-#line 409 "ppy.y" /* yacc.c:1910  */
+#line 409 "ppy.y"
 
 
 /*
diff --git a/mingw-w64-tools/widl/src/wpp/ppy.tab.h b/mingw-w64-tools/widl/src/wpp/ppy.tab.h
index 3ec785e..76e3700 100644
--- a/mingw-w64-tools/widl/src/wpp/ppy.tab.h
+++ b/mingw-w64-tools/widl/src/wpp/ppy.tab.h
@@ -1,8 +1,9 @@
-/* A Bison parser, made by GNU Bison 3.1.  */
+/* A Bison parser, made by GNU Bison 3.5.4.  */
 
 /* Bison interface for Yacc-like parsers in C
 
-   Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc.
+   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation,
+   Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -30,6 +31,9 @@
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
+/* Undocumented macros, especially those whose name start with YY_,
+   are private implementation details.  Do not rely on them.  */
+
 #ifndef YY_PPY_PPY_TAB_H_INCLUDED
 # define YY_PPY_PPY_TAB_H_INCLUDED
 /* Debug traces.  */
@@ -93,10 +97,9 @@
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-
 union YYSTYPE
 {
-#line 126 "ppy.y" /* yacc.c:1913  */
+#line 126 "ppy.y"
 
 	int		sint;
 	unsigned int	uint;
@@ -110,9 +113,9 @@
 	marg_t		*marg;
 	mtext_t		*mtext;
 
-#line 114 "ppy.tab.h" /* yacc.c:1913  */
-};
+#line 117 "ppy.tab.h"
 
+};
 typedef union YYSTYPE YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
diff --git a/mingw-w64-tools/widl/src/wpp/preproc.c b/mingw-w64-tools/widl/src/wpp/preproc.c
index df5adf0..284704b 100644
--- a/mingw-w64-tools/widl/src/wpp/preproc.c
+++ b/mingw-w64-tools/widl/src/wpp/preproc.c
@@ -692,7 +692,7 @@
 {
 	va_list ap;
 	va_start(ap, s);
-	generic_msg(s, "Error", ppy_text, ap);
+	generic_msg(s, "error", ppy_text, ap);
 	va_end(ap);
 	exit(1);
 }
@@ -701,7 +701,7 @@
 {
 	va_list ap;
 	va_start(ap, s);
-	generic_msg(s, "Warning", ppy_text, ap);
+	generic_msg(s, "warning", ppy_text, ap);
 	va_end(ap);
 	return 0;
 }
diff --git a/mingw-w64-tools/widl/src/write_msft.c b/mingw-w64-tools/widl/src/write_msft.c
index dc0a6cb..7cfe9e1 100644
--- a/mingw-w64-tools/widl/src/write_msft.c
+++ b/mingw-w64-tools/widl/src/write_msft.c
@@ -1630,6 +1630,9 @@
     unsigned char *namedata;
     int var_num = (typeinfo->typeinfo->cElement >> 16) & 0xffff;
 
+    if (!var->name)
+        var->name = gen_name();
+
     chat("add_var_desc(%d, %s)\n", index, var->name);
 
     id = 0x40000000 + index;
@@ -2068,6 +2071,10 @@
             if(add_func_desc(msft_typeinfo, func, idx) == S_OK)
                 idx++;
     }
+
+        typelib->typelib->reg_ifaces = xrealloc(typelib->typelib->reg_ifaces,
+                (typelib->typelib->reg_iface_count + 1) * sizeof(dispinterface));
+    typelib->typelib->reg_ifaces[typelib->typelib->reg_iface_count++] = dispinterface;
 }
 
 static void add_interface_typeinfo(msft_typelib_t *typelib, type_t *interface)
@@ -2142,6 +2149,13 @@
         if(add_func_desc(msft_typeinfo, func, idx) == S_OK)
             idx++;
     }
+
+    if (is_attr(interface->attrs, ATTR_OLEAUTOMATION) || is_attr(interface->attrs, ATTR_DUAL))
+    {
+        typelib->typelib->reg_ifaces = xrealloc(typelib->typelib->reg_ifaces,
+                (typelib->typelib->reg_iface_count + 1) * sizeof(interface));
+        typelib->typelib->reg_ifaces[typelib->typelib->reg_iface_count++] = interface;
+    }
 }
 
 static void add_structure_typeinfo(msft_typelib_t *typelib, type_t *structure)
@@ -2197,6 +2211,9 @@
     if (-1 < tunion->typelib_idx)
         return;
 
+    if (!tunion->name)
+        tunion->name = gen_name();
+
     tunion->typelib_idx = typelib->typelib_header.nrtypeinfos;
     msft_typeinfo = create_msft_typeinfo(typelib, TKIND_UNION, tunion->name, tunion->attrs);
     msft_typeinfo->typeinfo->size = 0;