diff --git a/testing/webkitgtk2/APKBUILD b/testing/webkitgtk2/APKBUILD
deleted file mode 100644
index fa328a1daf9a1d7f4ce9a7066445e67b9d922138..0000000000000000000000000000000000000000
--- a/testing/webkitgtk2/APKBUILD
+++ /dev/null
@@ -1,126 +0,0 @@
-# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
-pkgname=webkitgtk2
-_realpkgname=webkitgtk
-pkgver=2.4.5
-pkgrel=1
-pkgdesc="GTK+ Web content engine library for GTK2"
-url="http://webkitgtk.org/"
-arch="all"
-license="LGPL2+ BSD"
-depends=""
-depends_dev="libsoup-dev gstreamer1-dev gst-plugins-base1-dev"
-makedepends="$depends_dev
-	autoconf automake libtool
-	bison
-	enchant-dev
-	expat-dev
-	flex
-	gnutls-dev
-	gobject-introspection-dev
-	gperf
-	gtk+2.0-dev
-	gtk-doc
-	icu-dev
-	libgcrypt-dev
-	libgpg-error-dev
-	libjpeg-turbo-dev
-	libpng-dev
-	libsecret-dev
-	libsoup-dev
-	libwebp-dev
-	libxcomposite-dev
-	libxcursor-dev
-	libxdamage-dev
-	libxi-dev
-	libxml2-dev
-	libxrandr-dev
-	libxslt-dev
-	libxt-dev
-	mesa-dev
-	pango-dev
-	perl-switch
-	ruby
-	sqlite-dev
-	zlib-dev
-	"
-install=
-replaces="webkit"
-subpackages="$pkgname-dev $pkgname-lang"
-source="http://webkitgtk.org/releases/webkitgtk-$pkgver.tar.xz
-	webkit-gtk-1.7.90-parallel-make-hack.patch
-	webkitgtk-1.10-textrels.patch
-	harfbuzz.patch
-	fix-execinfo.patch
-	disallow-ctype.patch
-	"
-
-_builddir="$srcdir"/$_realpkgname-$pkgver
-prepare() {
-	cd "$_builddir"
-	update_config_sub || return 1
-	for i in $source; do
-		case "$i" in
-		*.patch)
-			msg "Applying $i"
-			patch -p1 -i "$srcdir"/$i || return 1
-			;;
-		esac
-	done
-	libtoolize --force && aclocal -I Source/autotools && autoconf && automake --force || return 1
-}
-
-build() {
-	cd "$_builddir"
-	./configure \
-		--build=$CBUILD \
-		--host=$CHOST \
-		--prefix=/usr \
-		--sysconfdir=/etc \
-		--mandir=/usr/share/man \
-		--infodir=/usr/share/info \
-		--disable-geolocation \
-		--disable-webkit2 \
-		--with-gtk=2.0 \
-		--enable-introspection \
-		|| return 1
-
-	# fight overlinking
-	# https://bugzilla.gnome.org/show_bug.cgi?id=655517
-	sed -i 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool || return 1
-
-	# hack to work around parallel make problems,
-	# see https://bugs.webkit.org/show_bug.cgi?id=79498
-	make -j1 all-built-sources-local \
-		&& make all-ltlibraries-local \
-		&& make all-programs-local \
-		&& make || return 1
-}
-
-package() {
-	cd "$_builddir"
-	make DESTDIR="$pkgdir" install || return 1
-	# verify so we don't have textrels
-	if scanelf -qRt "$pkgdir" | grep TEXTREL; then
-		error "found textrels"
-		return 1
-	fi
-}
-
-md5sums="c2e1687bb0314a0948fbf78e2d1e931f  webkitgtk-2.4.5.tar.xz
-de77a3e7e61753e7f1cce3f4bd00a3f6  webkit-gtk-1.7.90-parallel-make-hack.patch
-9ace721086b25f0f32d7f76b29789f67  webkitgtk-1.10-textrels.patch
-b1f455b3ea4db1598b60f5aa59f27fd5  harfbuzz.patch
-c114751c30cdcaede5a7ed5568b2b0d4  fix-execinfo.patch
-f5b41e756d2dfdc2bbee034d4f2d2e66  disallow-ctype.patch"
-sha256sums="88d06277aae179c205b548e1851a5e5663ca6f59f5aa8e81af9b87732d6b8a13  webkitgtk-2.4.5.tar.xz
-e20d7d45e6230308f7d4a7aac1095cb1fe8d9c7eb0f3e65b061acf8bc4bbaf73  webkit-gtk-1.7.90-parallel-make-hack.patch
-754bbf13c7a6c9bd745f642367ff884156020dd2ea7611c3d20a509c6685c836  webkitgtk-1.10-textrels.patch
-0b7c1ce7e0e8548507eed8911c73d4a06434e5ca3b84275e785013f8b04433a2  harfbuzz.patch
-b2bc9e03fd5d968d6df4531a7d102496139120e666e6fed397a19ae4026751c6  fix-execinfo.patch
-6e972b5cb3f1101be646d1a018ff61c0e6614310a971eb392c4fd0fee5623455  disallow-ctype.patch"
-sha512sums="8dea7d34874d9ba37ad7e5ae7209cdacfe9f7d621bdb6e39492c0709990746cc869c350d77ed805095c86478c8a5d3381b9adc3316fdf72239b0b2ea6399783a  webkitgtk-2.4.5.tar.xz
-907356faab08ebf65da8760ad11ee8ecd4e97274b1c00c1e207fd52e479d64a0545ba66859b1a79bd150a95da4a9e8724b3c461a24f803fb341b8242566b5cc0  webkit-gtk-1.7.90-parallel-make-hack.patch
-c3502a11ce4777abc164209c0087ec7cb6c28b376056bee52651b4e4bd2d49f2d6e4a74422f21d9bce848479a4a1b02052935b3c9397f1d43a59b3de22ef2758  webkitgtk-1.10-textrels.patch
-8eb77ed1a1c60aac44fb00cfa6ddd46a23c4701fd6a24eac901d07eb49e0191080f7410fa3801115da5448b514e5d2095a4c4072a8c1e9f8c668eebb78afe6a1  harfbuzz.patch
-602630468ee80b9f9bb53ee7808f4b2f2c86d1d4db14ac9c244b3e2e79a245510a289eb321cb7dbefd3b7a2dde13cf444b8ecf7cd46f23eaa5c0f04670914e42  fix-execinfo.patch
-40a213548d4f76152d2cae57c15c6fb079b64a681a2b033b0c8265c5dbe2653818c898d1ac76ae59298cbf568dc4b811f86c3913e9d2c3d3f33e5cb8c1bd217e  disallow-ctype.patch"
diff --git a/testing/webkitgtk2/disallow-ctype.patch b/testing/webkitgtk2/disallow-ctype.patch
deleted file mode 100644
index 01414a2d7eeba790168c092ff9884f7a3f57c318..0000000000000000000000000000000000000000
--- a/testing/webkitgtk2/disallow-ctype.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- ./Source/WTF/wtf/DisallowCType.h.orig	2014-04-07 06:37:46.851957952 +0000
-+++ ./Source/WTF/wtf/DisallowCType.h	2014-04-07 06:39:30.653205023 +0000
-@@ -41,7 +41,7 @@
- // or <glib/gi18n-lib.h>, which in turn include <xlocale/_ctype.h> which uses
- // isacii(). 
- #include <wtf/Platform.h>
--#if !(OS(DARWIN) && PLATFORM(GTK)) && !PLATFORM(EFL) && !defined(_LIBCPP_VERSION)
-+#if !(OS(DARWIN) && PLATFORM(GTK)) && !PLATFORM(EFL) && !defined(_LIBCPP_VERSION) && defined(__GLIBC__)
- 
- #include <ctype.h>
- 
diff --git a/testing/webkitgtk2/fix-execinfo.patch b/testing/webkitgtk2/fix-execinfo.patch
deleted file mode 100644
index eb825312f3be6c452a2953d2bfad8f6330794b50..0000000000000000000000000000000000000000
--- a/testing/webkitgtk2/fix-execinfo.patch
+++ /dev/null
@@ -1,20 +0,0 @@
---- webkitgtk-2.2.0.orig/Source/WTF/wtf/Assertions.cpp
-+++ webkitgtk-2.2.0/Source/WTF/wtf/Assertions.cpp
-@@ -64,7 +64,7 @@
- #include <windows.h>
- #endif
- 
--#if OS(DARWIN) || (OS(LINUX) && !defined(__UCLIBC__))
-+#if OS(DARWIN) || (OS(LINUX) && defined(__GLIBC__) && !defined(__UCLIBC__))
- #include <cxxabi.h>
- #include <dlfcn.h>
- #include <execinfo.h>
-@@ -242,7 +242,7 @@
- 
- void WTFGetBacktrace(void** stack, int* size)
- {
--#if OS(DARWIN) || (OS(LINUX) && !defined(__UCLIBC__))
-+#if OS(DARWIN) || (OS(LINUX) && defined(__GLIBC__) && !defined(__UCLIBC__))
-     *size = backtrace(stack, *size);
- #elif OS(WINDOWS) && !OS(WINCE)
-     // The CaptureStackBackTrace function is available in XP, but it is not defined
diff --git a/testing/webkitgtk2/harfbuzz.patch b/testing/webkitgtk2/harfbuzz.patch
deleted file mode 100644
index c334fe877ffdf9a49df9bfe7304f804b1e4f215c..0000000000000000000000000000000000000000
--- a/testing/webkitgtk2/harfbuzz.patch
+++ /dev/null
@@ -1,16 +0,0 @@
---- ./Source/autotools/FindDependencies.m4.orig	2013-06-10 12:31:46.700819390 +0000
-+++ ./Source/autotools/FindDependencies.m4	2013-06-10 12:32:15.101112741 +0000
-@@ -373,6 +373,13 @@
-     PKG_CHECK_MODULES([FREETYPE],
-         [cairo-ft fontconfig >= fontconfig_required_version freetype2 >= freetype2_required_version harfbuzz >= harfbuzz_required_version])
- fi
-+# HarfBuzz 0.9.18 splits harbuzz-icu into a separate library.
-+# Since we support earlier HarfBuzz versions we keep this conditional by now.
-+if $PKG_CONFIG --atleast-version 0.9.18 harfbuzz ; then
-+    PKG_CHECK_MODULES(HARFBUZZ_ICU, harfbuzz-icu >= $harfbuzz_required_version)
-+    FREETYPE_CFLAGS+=" $HARFBUZZ_ICU_CFLAGS"
-+    FREETYPE_LIBS+=" $HARFBUZZ_ICU_LIBS"
-+fi
- AC_SUBST([FREETYPE_CFLAGS])
- AC_SUBST([FREETYPE_LIBS])
- 
diff --git a/testing/webkitgtk2/webkit-gtk-1.7.90-parallel-make-hack.patch b/testing/webkitgtk2/webkit-gtk-1.7.90-parallel-make-hack.patch
deleted file mode 100644
index b632ca2791dbf00a1d37f871dea93cfdd96d30db..0000000000000000000000000000000000000000
--- a/testing/webkitgtk2/webkit-gtk-1.7.90-parallel-make-hack.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-Horrible failure of a hack to enable workaround for
-https://bugs.webkit.org/show_bug.cgi?id=79498
-
---- a/GNUmakefile.am
-+++ b/GNUmakefile.am
-@@ -285,6 +285,15 @@
- all-local: stamp-po
- 	$(mkdir_p) $(top_builddir)/$(DEPDIR)/DerivedSources
- 
-+# Horrible hack to enable workaround for parallel make failure
-+all-built-sources-local: $(BUILT_SOURCES) autotoolsconfig.h
-+
-+all-ltlibraries-local: GNUmakefile $(LTLIBRARIES)
-+
-+all-programs-local: GNUmakefile $(PROGRAMS)
-+
-+all-data-local: GNUmakefile $(DATA)
-+
- # remove built sources and program directories
- clean-local:
- 	-rm -rf $(GENPROGRAMS)
diff --git a/testing/webkitgtk2/webkitgtk-1.10-textrels.patch b/testing/webkitgtk2/webkitgtk-1.10-textrels.patch
deleted file mode 100644
index 7f2dda2d48d8fd400e9bbb0fccd977a8da306fda..0000000000000000000000000000000000000000
--- a/testing/webkitgtk2/webkitgtk-1.10-textrels.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- ./Source/WTF/wtf/InlineASM.h.orig
-+++ ./Source/WTF/wtf/InlineASM.h
-@@ -42,7 +42,7 @@
- #define THUMB_FUNC_PARAM(name)
- #endif
- 
--#if (OS(LINUX) || OS(FREEBSD)) && CPU(X86_64)
-+#if (OS(LINUX) || OS(FREEBSD)) && (CPU(X86_64) || CPU(X86))
- #define GLOBAL_REFERENCE(name) #name "@plt"
- #elif CPU(X86) && COMPILER(MINGW)
- #define GLOBAL_REFERENCE(name) "@" #name "@4"
diff --git a/testing/webkitgtk2/webkitgtk-2.0.4-bison-3.0.patch b/testing/webkitgtk2/webkitgtk-2.0.4-bison-3.0.patch
deleted file mode 100644
index 87335d9947d834abdb995779952a4fa4442a2ee9..0000000000000000000000000000000000000000
--- a/testing/webkitgtk2/webkitgtk-2.0.4-bison-3.0.patch
+++ /dev/null
@@ -1,8229 +0,0 @@
-diff --git a/Source/ThirdParty/ANGLE/src/compiler/glslang_lex.cpp b/Source/ThirdParty/ANGLE/src/compiler/glslang_lex.cpp
-new file mode 100644
-index 0000000..90c0dd4
---- /dev/null
-+++ b/Source/ThirdParty/ANGLE/src/compiler/glslang_lex.cpp
-@@ -0,0 +1,3041 @@
-+#line 17 "./glslang.l"
-+//
-+// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style license that can be
-+// found in the LICENSE file.
-+//
-+
-+// This file is auto-generated by generate_parser.sh. DO NOT EDIT!
-+
-+// Ignore errors in auto-generated code.
-+#if defined(__clang__)
-+#pragma clang diagnostic ignored "-Wshorten-64-to-32"
-+#endif
-+#if defined(__GNUC__)
-+#pragma GCC diagnostic ignored "-Wunused-function"
-+#pragma GCC diagnostic ignored "-Wunused-variable"
-+#pragma GCC diagnostic ignored "-Wswitch-enum"
-+#elif defined(_MSC_VER)
-+#pragma warning(disable: 4065)
-+#pragma warning(disable: 4189)
-+#pragma warning(disable: 4505)
-+#pragma warning(disable: 4701)
-+#endif
-+
-+
-+
-+#line 25 "./glslang_lex.cpp"
-+
-+#define  YY_INT_ALIGNED short int
-+
-+/* A lexical scanner generated by flex */
-+
-+#define FLEX_SCANNER
-+#define YY_FLEX_MAJOR_VERSION 2
-+#define YY_FLEX_MINOR_VERSION 5
-+#define YY_FLEX_SUBMINOR_VERSION 35
-+#if YY_FLEX_SUBMINOR_VERSION > 0
-+#define FLEX_BETA
-+#endif
-+
-+/* First, we deal with  platform-specific or compiler-specific issues. */
-+
-+/* begin standard C headers. */
-+#include <stdio.h>
-+#include <string.h>
-+#include <errno.h>
-+#include <stdlib.h>
-+
-+/* end standard C headers. */
-+
-+/* flex integer type definitions */
-+
-+#ifndef FLEXINT_H
-+#define FLEXINT_H
-+
-+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
-+
-+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-+
-+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
-+ * if you want the limit (max/min) macros for int types. 
-+ */
-+#ifndef __STDC_LIMIT_MACROS
-+#define __STDC_LIMIT_MACROS 1
-+#endif
-+
-+#include <inttypes.h>
-+typedef int8_t flex_int8_t;
-+typedef uint8_t flex_uint8_t;
-+typedef int16_t flex_int16_t;
-+typedef uint16_t flex_uint16_t;
-+typedef int32_t flex_int32_t;
-+typedef uint32_t flex_uint32_t;
-+typedef uint64_t flex_uint64_t;
-+#else
-+typedef signed char flex_int8_t;
-+typedef short int flex_int16_t;
-+typedef int flex_int32_t;
-+typedef unsigned char flex_uint8_t; 
-+typedef unsigned short int flex_uint16_t;
-+typedef unsigned int flex_uint32_t;
-+#endif /* ! C99 */
-+
-+/* Limits of integral types. */
-+#ifndef INT8_MIN
-+#define INT8_MIN               (-128)
-+#endif
-+#ifndef INT16_MIN
-+#define INT16_MIN              (-32767-1)
-+#endif
-+#ifndef INT32_MIN
-+#define INT32_MIN              (-2147483647-1)
-+#endif
-+#ifndef INT8_MAX
-+#define INT8_MAX               (127)
-+#endif
-+#ifndef INT16_MAX
-+#define INT16_MAX              (32767)
-+#endif
-+#ifndef INT32_MAX
-+#define INT32_MAX              (2147483647)
-+#endif
-+#ifndef UINT8_MAX
-+#define UINT8_MAX              (255U)
-+#endif
-+#ifndef UINT16_MAX
-+#define UINT16_MAX             (65535U)
-+#endif
-+#ifndef UINT32_MAX
-+#define UINT32_MAX             (4294967295U)
-+#endif
-+
-+#endif /* ! FLEXINT_H */
-+
-+#ifdef __cplusplus
-+
-+/* The "const" storage-class-modifier is valid. */
-+#define YY_USE_CONST
-+
-+#else	/* ! __cplusplus */
-+
-+/* C99 requires __STDC__ to be defined as 1. */
-+#if defined (__STDC__)
-+
-+#define YY_USE_CONST
-+
-+#endif	/* defined (__STDC__) */
-+#endif	/* ! __cplusplus */
-+
-+#ifdef YY_USE_CONST
-+#define yyconst const
-+#else
-+#define yyconst
-+#endif
-+
-+/* Returned upon end-of-file. */
-+#define YY_NULL 0
-+
-+/* Promotes a possibly negative, possibly signed char to an unsigned
-+ * integer for use as an array index.  If the signed char is negative,
-+ * we want to instead treat it as an 8-bit unsigned char, hence the
-+ * double cast.
-+ */
-+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
-+
-+/* An opaque pointer. */
-+#ifndef YY_TYPEDEF_YY_SCANNER_T
-+#define YY_TYPEDEF_YY_SCANNER_T
-+typedef void* yyscan_t;
-+#endif
-+
-+/* For convenience, these vars (plus the bison vars far below)
-+   are macros in the reentrant scanner. */
-+#define yyin yyg->yyin_r
-+#define yyout yyg->yyout_r
-+#define yyextra yyg->yyextra_r
-+#define yyleng yyg->yyleng_r
-+#define yytext yyg->yytext_r
-+#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno)
-+#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)
-+#define yy_flex_debug yyg->yy_flex_debug_r
-+
-+/* Enter a start condition.  This macro really ought to take a parameter,
-+ * but we do it the disgusting crufty way forced on us by the ()-less
-+ * definition of BEGIN.
-+ */
-+#define BEGIN yyg->yy_start = 1 + 2 *
-+
-+/* Translate the current start state into a value that can be later handed
-+ * to BEGIN to return to the state.  The YYSTATE alias is for lex
-+ * compatibility.
-+ */
-+#define YY_START ((yyg->yy_start - 1) / 2)
-+#define YYSTATE YY_START
-+
-+/* Action number for EOF rule of a given start state. */
-+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
-+
-+/* Special action meaning "start processing a new file". */
-+#define YY_NEW_FILE yyrestart(yyin ,yyscanner )
-+
-+#define YY_END_OF_BUFFER_CHAR 0
-+
-+/* Size of default input buffer. */
-+#ifndef YY_BUF_SIZE
-+#define YY_BUF_SIZE 16384
-+#endif
-+
-+/* The state buf must be large enough to hold one state per character in the main buffer.
-+ */
-+#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
-+
-+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
-+#define YY_TYPEDEF_YY_BUFFER_STATE
-+typedef struct yy_buffer_state *YY_BUFFER_STATE;
-+#endif
-+
-+#ifndef YY_TYPEDEF_YY_SIZE_T
-+#define YY_TYPEDEF_YY_SIZE_T
-+typedef size_t yy_size_t;
-+#endif
-+
-+#define EOB_ACT_CONTINUE_SCAN 0
-+#define EOB_ACT_END_OF_FILE 1
-+#define EOB_ACT_LAST_MATCH 2
-+
-+    /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
-+     *       access to the local variable yy_act. Since yyless() is a macro, it would break
-+     *       existing scanners that call yyless() from OUTSIDE yylex. 
-+     *       One obvious solution it to make yy_act a global. I tried that, and saw
-+     *       a 5% performance hit in a non-yylineno scanner, because yy_act is
-+     *       normally declared as a register variable-- so it is not worth it.
-+     */
-+    #define  YY_LESS_LINENO(n) \
-+            do { \
-+                yy_size_t yyl;\
-+                for ( yyl = n; yyl < yyleng; ++yyl )\
-+                    if ( yytext[yyl] == '\n' )\
-+                        --yylineno;\
-+            }while(0)
-+    
-+/* Return all but the first "n" matched characters back to the input stream. */
-+#define yyless(n) \
-+	do \
-+		{ \
-+		/* Undo effects of setting up yytext. */ \
-+        int yyless_macro_arg = (n); \
-+        YY_LESS_LINENO(yyless_macro_arg);\
-+		*yy_cp = yyg->yy_hold_char; \
-+		YY_RESTORE_YY_MORE_OFFSET \
-+		yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
-+		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
-+		} \
-+	while ( 0 )
-+
-+#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner )
-+
-+#ifndef YY_STRUCT_YY_BUFFER_STATE
-+#define YY_STRUCT_YY_BUFFER_STATE
-+struct yy_buffer_state
-+	{
-+	FILE *yy_input_file;
-+
-+	char *yy_ch_buf;		/* input buffer */
-+	char *yy_buf_pos;		/* current position in input buffer */
-+
-+	/* Size of input buffer in bytes, not including room for EOB
-+	 * characters.
-+	 */
-+	yy_size_t yy_buf_size;
-+
-+	/* Number of characters read into yy_ch_buf, not including EOB
-+	 * characters.
-+	 */
-+	yy_size_t yy_n_chars;
-+
-+	/* Whether we "own" the buffer - i.e., we know we created it,
-+	 * and can realloc() it to grow it, and should free() it to
-+	 * delete it.
-+	 */
-+	int yy_is_our_buffer;
-+
-+	/* Whether this is an "interactive" input source; if so, and
-+	 * if we're using stdio for input, then we want to use getc()
-+	 * instead of fread(), to make sure we stop fetching input after
-+	 * each newline.
-+	 */
-+	int yy_is_interactive;
-+
-+	/* Whether we're considered to be at the beginning of a line.
-+	 * If so, '^' rules will be active on the next match, otherwise
-+	 * not.
-+	 */
-+	int yy_at_bol;
-+
-+    int yy_bs_lineno; /**< The line count. */
-+    int yy_bs_column; /**< The column count. */
-+    
-+	/* Whether to try to fill the input buffer when we reach the
-+	 * end of it.
-+	 */
-+	int yy_fill_buffer;
-+
-+	int yy_buffer_status;
-+
-+#define YY_BUFFER_NEW 0
-+#define YY_BUFFER_NORMAL 1
-+	/* When an EOF's been seen but there's still some text to process
-+	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
-+	 * shouldn't try reading from the input source any more.  We might
-+	 * still have a bunch of tokens to match, though, because of
-+	 * possible backing-up.
-+	 *
-+	 * When we actually see the EOF, we change the status to "new"
-+	 * (via yyrestart()), so that the user can continue scanning by
-+	 * just pointing yyin at a new input file.
-+	 */
-+#define YY_BUFFER_EOF_PENDING 2
-+
-+	};
-+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
-+
-+/* We provide macros for accessing buffer states in case in the
-+ * future we want to put the buffer states in a more general
-+ * "scanner state".
-+ *
-+ * Returns the top of the stack, or NULL.
-+ */
-+#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \
-+                          ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \
-+                          : NULL)
-+
-+/* Same as previous macro, but useful when we know that the buffer stack is not
-+ * NULL or when we need an lvalue. For internal use only.
-+ */
-+#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top]
-+
-+void yyrestart (FILE *input_file ,yyscan_t yyscanner );
-+void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
-+YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner );
-+void yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
-+void yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
-+void yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
-+void yypop_buffer_state (yyscan_t yyscanner );
-+
-+static void yyensure_buffer_stack (yyscan_t yyscanner );
-+static void yy_load_buffer_state (yyscan_t yyscanner );
-+static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner );
-+
-+#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER ,yyscanner)
-+
-+YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner );
-+YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner );
-+YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len ,yyscan_t yyscanner );
-+
-+void *yyalloc (yy_size_t ,yyscan_t yyscanner );
-+void *yyrealloc (void *,yy_size_t ,yyscan_t yyscanner );
-+void yyfree (void * ,yyscan_t yyscanner );
-+
-+#define yy_new_buffer yy_create_buffer
-+
-+#define yy_set_interactive(is_interactive) \
-+	{ \
-+	if ( ! YY_CURRENT_BUFFER ){ \
-+        yyensure_buffer_stack (yyscanner); \
-+		YY_CURRENT_BUFFER_LVALUE =    \
-+            yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
-+	} \
-+	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
-+	}
-+
-+#define yy_set_bol(at_bol) \
-+	{ \
-+	if ( ! YY_CURRENT_BUFFER ){\
-+        yyensure_buffer_stack (yyscanner); \
-+		YY_CURRENT_BUFFER_LVALUE =    \
-+            yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
-+	} \
-+	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
-+	}
-+
-+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
-+
-+/* Begin user sect3 */
-+
-+#define yywrap(n) 1
-+#define YY_SKIP_YYWRAP
-+
-+typedef unsigned char YY_CHAR;
-+
-+typedef int yy_state_type;
-+
-+#define yytext_ptr yytext_r
-+
-+static yy_state_type yy_get_previous_state (yyscan_t yyscanner );
-+static yy_state_type yy_try_NUL_trans (yy_state_type current_state  ,yyscan_t yyscanner);
-+static int yy_get_next_buffer (yyscan_t yyscanner );
-+static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
-+
-+/* Done after the current pattern has been matched and before the
-+ * corresponding action - sets up yytext.
-+ */
-+#define YY_DO_BEFORE_ACTION \
-+	yyg->yytext_ptr = yy_bp; \
-+	yyleng = (yy_size_t) (yy_cp - yy_bp); \
-+	yyg->yy_hold_char = *yy_cp; \
-+	*yy_cp = '\0'; \
-+	yyg->yy_c_buf_p = yy_cp;
-+
-+#define YY_NUM_RULES 155
-+#define YY_END_OF_BUFFER 156
-+/* This struct is not used in this scanner,
-+   but its presence is necessary. */
-+struct yy_trans_info
-+	{
-+	flex_int32_t yy_verify;
-+	flex_int32_t yy_nxt;
-+	};
-+static yyconst flex_int16_t yy_accept[459] =
-+    {   0,
-+        0,    0,    0,    0,    0,    0,  156,  154,  153,  153,
-+      138,  144,  149,  133,  134,  142,  141,  130,  139,  137,
-+      143,  102,  102,  131,  127,  145,  132,  146,  150,   98,
-+      135,  136,  148,   98,   98,   98,   98,   98,   98,   98,
-+       98,   98,   98,   98,   98,   98,   98,   98,   98,   98,
-+       98,   98,   98,  128,  147,  129,  140,    3,    4,    3,
-+      152,  155,  151,  124,  110,  129,  118,  113,  108,  116,
-+      106,  117,  107,  105,    2,    1,  109,  104,  100,  101,
-+        0,    0,  102,  136,  128,  135,  125,  121,  123,  122,
-+      126,   98,  114,  120,   98,   98,   98,   98,   98,   98,
-+
-+       98,   98,   98,   98,   17,   98,   98,   98,   98,   98,
-+       98,   98,   98,   98,   98,   98,   98,   98,   20,   22,
-+       98,   98,   98,   98,   98,   98,   98,   98,   98,   98,
-+       98,   98,   98,   98,   98,   98,   98,   98,   98,   98,
-+       98,   98,   98,   98,   98,   98,   98,  115,  119,    5,
-+      151,    0,    1,  104,    0,    0,  103,   99,  111,  112,
-+       50,   98,   98,   98,   98,   98,   98,   98,   98,   98,
-+       98,   98,   98,   98,   98,   98,   98,   98,   98,   18,
-+       98,   98,   98,   98,   98,   98,   98,   98,   26,   98,
-+       98,   98,   98,   98,   98,   98,   98,   23,   98,   98,
-+
-+       98,   98,   98,   98,   98,   98,   98,   98,   98,   98,
-+       98,   98,   98,   98,   98,   98,   98,   98,   98,   98,
-+       98,    0,  105,    0,  104,   98,   28,   98,   98,   95,
-+       98,   98,   98,   98,   98,   98,   98,   21,   53,   98,
-+       98,   98,   69,   98,   98,   58,   73,   98,   98,   98,
-+       98,   98,   98,   98,   98,   70,    9,   33,   34,   35,
-+       98,   98,   98,   98,   98,   98,   98,   98,   98,   98,
-+       98,   98,   98,   98,   98,   98,   56,   29,   98,   98,
-+       98,   98,   98,   98,   36,   37,   38,   27,   98,   98,
-+       98,   15,   42,   43,   44,   51,   12,   98,   98,   98,
-+
-+       98,   82,   83,   84,   98,   30,   74,   25,   85,   86,
-+       87,    7,   79,   80,   81,   98,   24,   77,   98,   98,
-+       39,   40,   41,   98,   98,   98,   98,   98,   98,   98,
-+       98,   98,   71,   98,   98,   98,   98,   98,   98,   98,
-+       98,   52,   98,   97,   98,   98,   19,   98,   98,   98,
-+       98,   72,   66,   61,   98,   98,   98,   98,   98,   78,
-+       57,   98,   64,   32,   98,   94,   65,   49,   76,   59,
-+       98,   98,   98,   98,   98,   98,   98,   98,   60,   31,
-+       98,   98,   98,    8,   98,   98,   98,   98,   98,   54,
-+       13,   98,   14,   98,   98,   16,   67,   98,   98,   98,
-+
-+       62,   98,   98,   98,   98,   98,   98,   55,   75,   63,
-+       11,   68,    6,   96,   10,   88,   45,   89,   98,   98,
-+       98,   98,   98,   98,   98,   98,   98,   98,   98,   98,
-+       46,   98,   98,   98,   98,   98,   98,   98,   48,   98,
-+       92,   98,   98,   98,   98,   98,   90,   98,   91,   98,
-+       98,   98,   98,   98,   98,   47,   93,    0
-+    } ;
-+
-+static yyconst flex_int32_t yy_ec[256] =
-+    {   0,
-+        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
-+        2,    2,    2,    1,    1,    1,    1,    1,    1,    1,
-+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-+        1,    2,    4,    1,    1,    1,    5,    6,    1,    7,
-+        8,    9,   10,   11,   12,   13,   14,   15,   16,   17,
-+       18,   19,   20,   20,   20,   21,   21,   22,   23,   24,
-+       25,   26,   27,    1,   28,   28,   29,   30,   31,   28,
-+       32,   32,   32,   32,   32,   32,   32,   32,   33,   32,
-+       32,   34,   35,   32,   32,   32,   32,   36,   32,   32,
-+       37,    1,   38,   39,   32,    1,   40,   41,   42,   43,
-+
-+       44,   45,   46,   47,   48,   32,   49,   50,   51,   52,
-+       53,   54,   32,   55,   56,   57,   58,   59,   60,   61,
-+       62,   63,   64,   65,   66,   67,    1,    1,    1,    1,
-+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-+
-+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-+        1,    1,    1,    1,    1
-+    } ;
-+
-+static yyconst flex_int32_t yy_meta[68] =
-+    {   0,
-+        1,    1,    2,    1,    1,    1,    1,    1,    1,    1,
-+        1,    1,    1,    1,    3,    3,    3,    3,    3,    3,
-+        3,    1,    1,    1,    1,    1,    1,    3,    3,    3,
-+        3,    4,    4,    4,    4,    4,    1,    1,    1,    3,
-+        3,    3,    3,    3,    3,    4,    4,    4,    4,    4,
-+        4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
-+        4,    4,    4,    1,    1,    1,    1
-+    } ;
-+
-+static yyconst flex_int16_t yy_base[464] =
-+    {   0,
-+        0,    0,   65,   66,   75,    0,  680,  681,  681,  681,
-+      654,   45,  137,  681,  681,  653,  134,  681,  133,  131,
-+      146,  159,  168,  651,  681,  186,  651,   47,  681,    0,
-+      681,  681,  128,  100,  110,  152,  156,  146,  166,  622,
-+      173,  109,  621,  126,  177,  615,  178,  628,  187,  184,
-+      141,  197,  624,  681,  157,  681,  681,  681,  681,  656,
-+      681,  681,    0,  681,  681,  681,  681,  681,  681,  681,
-+      681,  681,  681,  236,  681,    0,  681,  243,  273,  282,
-+      304,    0,  314,  681,  681,  681,  644,  681,  681,  681,
-+      643,    0,  681,  681,  616,  609,  612,  620,  619,  606,
-+
-+      621,  608,  614,  602,  599,  612,  599,  596,  596,  602,
-+      590,  189,  595,  605,  591,  597,  600,  601,    0,  216,
-+      600,  188,  586,  599,  590,  592,  582,  596,  593,  595,
-+      578,  583,  580,  569,  183,  577,  582,  578,  580,  569,
-+      572,  220,  577,  569,  581,  176,  574,  681,  681,  681,
-+        0,  331,    0,  344,  361,  290,  374,    0,  681,  681,
-+        0,  566,  570,  579,  576,  560,  560,  215,  575,  572,
-+      572,  570,  567,  559,  565,  552,  563,  549,  565,    0,
-+      562,  550,  557,  554,  558,  551,  540,  539,  552,  555,
-+      552,  547,  538,  260,  543,  546,  537,  534,  538,  544,
-+
-+      535,  526,  529,  527,  537,  523,  521,  534,  520,  522,
-+      519,  530,  529,  283,  524,  519,  508,  264,  526,  528,
-+      517,  381,  388,  395,  402,  518,    0,  516,  320,    0,
-+      508,  506,  514,  503,  520,  509,  336,    0,    0,  503,
-+      513,  513,    0,  498,  349,    0,    0,  500,  366,  501,
-+      495,  494,  495,  494,  407,    0,    0,    0,    0,    0,
-+      490,  491,  496,  487,  500,  495,  494,  486,  490,  482,
-+      485,  489,  494,  480,  492,  483,    0,    0,  489,  478,
-+      478,  483,  482,  479,    0,    0,    0,    0,  469,  481,
-+      483,    0,    0,    0,    0,    0,    0,  471,  472,  466,
-+
-+      476,    0,    0,    0,  467,    0,    0,    0,    0,    0,
-+        0,    0,    0,    0,    0,  474,    0,    0,  472,  468,
-+        0,    0,    0,  464,  460,  465,  455,  468,  454,  467,
-+      456,  463,    0,  461,  463,  447,  449,  455,  461,  456,
-+      444,    0,  446,    0,  445,  448,    0,  437,  436,  436,
-+      449,    0,  451,    0,  450,  449,  434,  447,  434,    0,
-+        0,  437,    0,    0,  429,    0,    0,    0,    0,    0,
-+      426,  437,  430,  436,  433,  428,  420,  432,    0,    0,
-+      425,  432,  421,    0,  430,  427,  417,  411,  425,    0,
-+        0,  425,    0,  423,  422,    0,    0,  421,  407,  419,
-+
-+        0,  410,  431,  430,  429,  400,  396,    0,    0,    0,
-+        0,    0,    0,    0,    0,  421,  250,  421,  411,  384,
-+      392,  394,  390,  392,  391,  390,  393,  390,  391,  388,
-+        0,  332,  343,  317,  329,  313,  317,  304,  321,  291,
-+        0,  302,  280,  271,  255,  262,    0,  256,    0,  232,
-+      206,  212,  148,  159,  113,    0,    0,  681,  442,  444,
-+      446,  450,  161
-+    } ;
-+
-+static yyconst flex_int16_t yy_def[464] =
-+    {   0,
-+      458,    1,  459,  459,  458,    5,  458,  458,  458,  458,
-+      458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
-+      458,  458,  458,  458,  458,  458,  458,  458,  458,  460,
-+      458,  458,  458,  460,  460,  460,  460,  460,  460,  460,
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+      460,  460,  460,  458,  458,  458,  458,  458,  458,  458,
-+      458,  458,  461,  458,  458,  458,  458,  458,  458,  458,
-+      458,  458,  458,  458,  458,  462,  458,  458,  458,  458,
-+      458,  463,  458,  458,  458,  458,  458,  458,  458,  458,
-+      458,  460,  458,  458,  460,  460,  460,  460,  460,  460,
-+
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+      460,  460,  460,  460,  460,  460,  460,  458,  458,  458,
-+      461,  458,  462,  458,  458,  458,  458,  463,  458,  458,
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+      460,  458,  458,  458,  458,  460,  460,  460,  460,  460,
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-+      460,  460,  460,  460,  460,  460,  460,    0,  458,  458,
-+      458,  458,  458
-+    } ;
-+
-+static yyconst flex_int16_t yy_nxt[749] =
-+    {   0,
-+        8,    9,   10,   11,   12,   13,   14,   15,   16,   17,
-+       18,   19,   20,   21,   22,   23,   23,   23,   23,   23,
-+       23,   24,   25,   26,   27,   28,   29,   30,   30,   30,
-+       30,   30,   30,   30,   30,   30,   31,   32,   33,   34,
-+       35,   36,   37,   38,   39,   40,   41,   42,   30,   43,
-+       44,   45,   46,   47,   48,   49,   50,   51,   52,   53,
-+       30,   30,   30,   54,   55,   56,   57,   59,   59,   65,
-+       66,   90,   91,   60,   60,    8,   61,   62,    8,    8,
-+        8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
-+        8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
-+
-+        8,    8,   63,   63,   63,   63,   63,   63,   63,   63,
-+       63,    8,    8,    8,   63,   63,   63,   63,   63,   63,
-+       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
-+       63,   63,   63,   63,   63,   63,   63,   63,    8,    8,
-+        8,    8,   67,   70,   72,   74,   74,   74,   74,   74,
-+       74,   74,   93,  119,   75,   95,   96,   73,   71,   76,
-+      120,   68,   97,  158,   98,  123,   94,  121,   99,  124,
-+       77,   78,  457,   79,   79,   79,   79,   79,   79,   80,
-+       78,  148,   83,   83,   83,   83,   83,   83,   83,   81,
-+       85,  100,  142,  456,   82,  107,  143,  108,   81,  103,
-+
-+      455,  101,   81,  104,  102,  110,  109,   86,  105,   87,
-+       88,   81,  116,  111,  106,  112,  125,  128,  113,   82,
-+      117,  149,  206,  219,  114,  220,  132,  138,  178,  126,
-+      139,  118,  129,  133,  134,  130,  144,  207,  140,  192,
-+      145,  179,  454,  135,  136,  141,  137,  193,  453,  146,
-+       74,   74,   74,   74,   74,   74,   74,  154,  154,  154,
-+      154,  154,  154,  154,  452,  186,  152,  214,  187,  188,
-+      232,  233,  189,  155,  190,  215,  258,  259,  260,  152,
-+      285,  286,  287,  422,  423,   78,  155,   79,   79,   79,
-+       79,   79,   79,   80,   78,  451,   80,   80,   80,   80,
-+
-+       80,   80,   80,   81,  157,  157,  157,  157,  157,  157,
-+      157,  450,   81,  156,  449,  156,   81,  448,  157,  157,
-+      157,  157,  157,  157,  157,   81,   78,  280,   83,   83,
-+       83,   83,   83,   83,   83,  281,  293,  294,  295,  447,
-+      222,  446,  222,  445,   81,  223,  223,  223,  223,  223,
-+      223,  223,  302,  303,  304,  444,  443,   81,  154,  154,
-+      154,  154,  154,  154,  154,  309,  310,  311,  442,  441,
-+      224,  440,  224,  439,  155,  225,  225,  225,  225,  225,
-+      225,  225,  313,  314,  315,  438,  437,  155,  157,  157,
-+      157,  157,  157,  157,  157,  223,  223,  223,  223,  223,
-+
-+      223,  223,  223,  223,  223,  223,  223,  223,  223,  225,
-+      225,  225,  225,  225,  225,  225,  225,  225,  225,  225,
-+      225,  225,  225,  321,  322,  323,  403,  404,  405,  436,
-+      435,  434,  433,  432,  431,  430,  429,  428,  427,  406,
-+      426,  407,   58,   58,   58,   58,   92,   92,  151,  151,
-+      153,  425,  153,  153,  424,  421,  420,  419,  418,  417,
-+      416,  415,  414,  413,  412,  411,  410,  409,  408,  402,
-+      401,  400,  399,  398,  397,  396,  395,  394,  393,  392,
-+      391,  390,  389,  388,  387,  386,  385,  384,  383,  382,
-+      381,  380,  379,  378,  377,  376,  375,  374,  373,  372,
-+
-+      371,  370,  369,  368,  367,  366,  365,  364,  363,  362,
-+      361,  360,  359,  358,  357,  356,  355,  354,  353,  352,
-+      351,  350,  349,  348,  347,  346,  345,  344,  343,  342,
-+      341,  340,  339,  338,  337,  336,  335,  334,  333,  332,
-+      331,  330,  329,  328,  327,  326,  325,  324,  320,  319,
-+      318,  317,  316,  312,  308,  307,  306,  305,  301,  300,
-+      299,  298,  297,  296,  292,  291,  290,  289,  288,  284,
-+      283,  282,  279,  278,  277,  276,  275,  274,  273,  272,
-+      271,  270,  269,  268,  267,  266,  265,  264,  263,  262,
-+      261,  257,  256,  255,  254,  253,  252,  251,  250,  249,
-+
-+      248,  247,  246,  245,  244,  243,  242,  241,  240,  239,
-+      238,  237,  236,  235,  234,  231,  230,  229,  228,  227,
-+      226,  221,  218,  217,  216,  213,  212,  211,  210,  209,
-+      208,  205,  204,  203,  202,  201,  200,  199,  198,  197,
-+      196,  195,  194,  191,  185,  184,  183,  182,  181,  180,
-+      177,  176,  175,  174,  173,  172,  171,  170,  169,  168,
-+      167,  166,  165,  164,  163,  162,  161,  160,  159,  150,
-+      147,  131,  127,  122,  115,   89,   84,   69,   64,  458,
-+        7,  458,  458,  458,  458,  458,  458,  458,  458,  458,
-+      458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
-+
-+      458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
-+      458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
-+      458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
-+      458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
-+      458,  458,  458,  458,  458,  458,  458,  458
-+    } ;
-+
-+static yyconst flex_int16_t yy_chk[749] =
-+    {   0,
-+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-+        1,    1,    1,    1,    1,    1,    1,    3,    4,   12,
-+       12,   28,   28,    3,    4,    5,    5,    5,    5,    5,
-+        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-+        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-+
-+        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-+        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-+        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-+        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-+        5,    5,   13,   17,   19,   20,   20,   20,   20,   20,
-+       20,   20,   33,   42,   21,   34,   34,   19,   17,   21,
-+       42,   13,   35,  463,   35,   44,   33,   42,   35,   44,
-+       21,   22,  455,   22,   22,   22,   22,   22,   22,   22,
-+       23,   55,   23,   23,   23,   23,   23,   23,   23,   22,
-+       26,   36,   51,  454,   22,   38,   51,   38,   23,   37,
-+
-+      453,   36,   22,   37,   36,   39,   38,   26,   37,   26,
-+       26,   23,   41,   39,   37,   39,   45,   47,   39,   22,
-+       41,   55,  135,  146,   39,  146,   49,   50,  112,   45,
-+       50,   41,   47,   49,   49,   47,   52,  135,   50,  122,
-+       52,  112,  452,   49,   49,   50,   49,  122,  451,   52,
-+       74,   74,   74,   74,   74,   74,   74,   78,   78,   78,
-+       78,   78,   78,   78,  450,  120,   74,  142,  120,  120,
-+      168,  168,  120,   78,  120,  142,  194,  194,  194,   74,
-+      218,  218,  218,  417,  417,   79,   78,   79,   79,   79,
-+       79,   79,   79,   79,   80,  448,   80,   80,   80,   80,
-+
-+       80,   80,   80,   79,  156,  156,  156,  156,  156,  156,
-+      156,  446,   80,   81,  445,   81,   79,  444,   81,   81,
-+       81,   81,   81,   81,   81,   80,   83,  214,   83,   83,
-+       83,   83,   83,   83,   83,  214,  229,  229,  229,  443,
-+      152,  442,  152,  440,   83,  152,  152,  152,  152,  152,
-+      152,  152,  237,  237,  237,  439,  438,   83,  154,  154,
-+      154,  154,  154,  154,  154,  245,  245,  245,  437,  436,
-+      155,  435,  155,  434,  154,  155,  155,  155,  155,  155,
-+      155,  155,  249,  249,  249,  433,  432,  154,  157,  157,
-+      157,  157,  157,  157,  157,  222,  222,  222,  222,  222,
-+
-+      222,  222,  223,  223,  223,  223,  223,  223,  223,  224,
-+      224,  224,  224,  224,  224,  224,  225,  225,  225,  225,
-+      225,  225,  225,  255,  255,  255,  388,  388,  388,  430,
-+      429,  428,  427,  426,  425,  424,  423,  422,  421,  388,
-+      420,  388,  459,  459,  459,  459,  460,  460,  461,  461,
-+      462,  419,  462,  462,  418,  416,  407,  406,  405,  404,
-+      403,  402,  400,  399,  398,  395,  394,  392,  389,  387,
-+      386,  385,  383,  382,  381,  378,  377,  376,  375,  374,
-+      373,  372,  371,  365,  362,  359,  358,  357,  356,  355,
-+      353,  351,  350,  349,  348,  346,  345,  343,  341,  340,
-+
-+      339,  338,  337,  336,  335,  334,  332,  331,  330,  329,
-+      328,  327,  326,  325,  324,  320,  319,  316,  305,  301,
-+      300,  299,  298,  291,  290,  289,  284,  283,  282,  281,
-+      280,  279,  276,  275,  274,  273,  272,  271,  270,  269,
-+      268,  267,  266,  265,  264,  263,  262,  261,  254,  253,
-+      252,  251,  250,  248,  244,  242,  241,  240,  236,  235,
-+      234,  233,  232,  231,  228,  226,  221,  220,  219,  217,
-+      216,  215,  213,  212,  211,  210,  209,  208,  207,  206,
-+      205,  204,  203,  202,  201,  200,  199,  198,  197,  196,
-+      195,  193,  192,  191,  190,  189,  188,  187,  186,  185,
-+
-+      184,  183,  182,  181,  179,  178,  177,  176,  175,  174,
-+      173,  172,  171,  170,  169,  167,  166,  165,  164,  163,
-+      162,  147,  145,  144,  143,  141,  140,  139,  138,  137,
-+      136,  134,  133,  132,  131,  130,  129,  128,  127,  126,
-+      125,  124,  123,  121,  118,  117,  116,  115,  114,  113,
-+      111,  110,  109,  108,  107,  106,  105,  104,  103,  102,
-+      101,  100,   99,   98,   97,   96,   95,   91,   87,   60,
-+       53,   48,   46,   43,   40,   27,   24,   16,   11,    7,
-+      458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
-+      458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
-+
-+      458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
-+      458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
-+      458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
-+      458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
-+      458,  458,  458,  458,  458,  458,  458,  458
-+    } ;
-+
-+/* Table of booleans, true if rule could match eol. */
-+static yyconst flex_int32_t yy_rule_can_match_eol[156] =
-+    {   0,
-+0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,     };
-+
-+/* The intent behind this definition is that it'll catch
-+ * any uses of REJECT which flex missed.
-+ */
-+#define REJECT reject_used_but_not_detected
-+#define yymore() yymore_used_but_not_detected
-+#define YY_MORE_ADJ 0
-+#define YY_RESTORE_YY_MORE_OFFSET
-+/*
-+//
-+// Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style license that can be
-+// found in the LICENSE file.
-+//
-+
-+This file contains the Lex specification for GLSL ES.
-+Based on ANSI C grammar, Lex specification:
-+http://www.lysator.liu.se/c/ANSI-C-grammar-l.html
-+
-+IF YOU MODIFY THIS FILE YOU ALSO NEED TO RUN generate_parser.sh,
-+WHICH GENERATES THE GLSL ES LEXER (glslang_lex.cpp).
-+*/
-+
-+#include "compiler/glslang.h"
-+#include "compiler/ParseHelper.h"
-+#include "compiler/preprocessor/Token.h"
-+#include "compiler/util.h"
-+#include "glslang_tab.h"
-+
-+/* windows only pragma */
-+#ifdef _MSC_VER
-+#pragma warning(disable : 4102)
-+#endif
-+
-+#define YY_USER_ACTION yylval->lex.line = yylineno;
-+#define YY_INPUT(buf, result, max_size) \
-+    result = string_input(buf, max_size, yyscanner);
-+
-+static int string_input(char* buf, int max_size, yyscan_t yyscanner);
-+static int check_type(yyscan_t yyscanner);
-+static int reserved_word(yyscan_t yyscanner);
-+
-+#define INITIAL 0
-+#define COMMENT 1
-+#define FIELDS 2
-+
-+#define YY_EXTRA_TYPE TParseContext*
-+
-+/* Holds the entire state of the reentrant scanner. */
-+struct yyguts_t
-+    {
-+
-+    /* User-defined. Not touched by flex. */
-+    YY_EXTRA_TYPE yyextra_r;
-+
-+    /* The rest are the same as the globals declared in the non-reentrant scanner. */
-+    FILE *yyin_r, *yyout_r;
-+    size_t yy_buffer_stack_top; /**< index of top of stack. */
-+    size_t yy_buffer_stack_max; /**< capacity of stack. */
-+    YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */
-+    char yy_hold_char;
-+    yy_size_t yy_n_chars;
-+    yy_size_t yyleng_r;
-+    char *yy_c_buf_p;
-+    int yy_init;
-+    int yy_start;
-+    int yy_did_buffer_switch_on_eof;
-+    int yy_start_stack_ptr;
-+    int yy_start_stack_depth;
-+    int *yy_start_stack;
-+    yy_state_type yy_last_accepting_state;
-+    char* yy_last_accepting_cpos;
-+
-+    int yylineno_r;
-+    int yy_flex_debug_r;
-+
-+    char *yytext_r;
-+    int yy_more_flag;
-+    int yy_more_len;
-+
-+    YYSTYPE * yylval_r;
-+
-+    }; /* end struct yyguts_t */
-+
-+static int yy_init_globals (yyscan_t yyscanner );
-+
-+    /* This must go here because YYSTYPE and YYLTYPE are included
-+     * from bison output in section 1.*/
-+    #    define yylval yyg->yylval_r
-+    
-+int yylex_init (yyscan_t* scanner);
-+
-+int yylex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner);
-+
-+/* Accessor methods to globals.
-+   These are made visible to non-reentrant scanners for convenience. */
-+
-+int yylex_destroy (yyscan_t yyscanner );
-+
-+int yyget_debug (yyscan_t yyscanner );
-+
-+void yyset_debug (int debug_flag ,yyscan_t yyscanner );
-+
-+YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner );
-+
-+void yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );
-+
-+FILE *yyget_in (yyscan_t yyscanner );
-+
-+void yyset_in  (FILE * in_str ,yyscan_t yyscanner );
-+
-+FILE *yyget_out (yyscan_t yyscanner );
-+
-+void yyset_out  (FILE * out_str ,yyscan_t yyscanner );
-+
-+yy_size_t yyget_leng (yyscan_t yyscanner );
-+
-+char *yyget_text (yyscan_t yyscanner );
-+
-+int yyget_lineno (yyscan_t yyscanner );
-+
-+void yyset_lineno (int line_number ,yyscan_t yyscanner );
-+
-+YYSTYPE * yyget_lval (yyscan_t yyscanner );
-+
-+void yyset_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner );
-+
-+/* Macros after this point can all be overridden by user definitions in
-+ * section 1.
-+ */
-+
-+#ifndef YY_SKIP_YYWRAP
-+#ifdef __cplusplus
-+extern "C" int yywrap (yyscan_t yyscanner );
-+#else
-+extern int yywrap (yyscan_t yyscanner );
-+#endif
-+#endif
-+
-+#ifndef yytext_ptr
-+static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner);
-+#endif
-+
-+#ifdef YY_NEED_STRLEN
-+static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner);
-+#endif
-+
-+#ifndef YY_NO_INPUT
-+
-+#ifdef __cplusplus
-+static int yyinput (yyscan_t yyscanner );
-+#else
-+static int input (yyscan_t yyscanner );
-+#endif
-+
-+#endif
-+
-+    static void yy_push_state (int new_state ,yyscan_t yyscanner);
-+    
-+    static void yy_pop_state (yyscan_t yyscanner );
-+    
-+    static int yy_top_state (yyscan_t yyscanner );
-+    
-+/* Amount of stuff to slurp up with each read. */
-+#ifndef YY_READ_BUF_SIZE
-+#define YY_READ_BUF_SIZE 8192
-+#endif
-+
-+/* Copy whatever the last rule matched to the standard output. */
-+#ifndef ECHO
-+/* This used to be an fputs(), but since the string might contain NUL's,
-+ * we now use fwrite().
-+ */
-+#define ECHO fwrite( yytext, yyleng, 1, yyout )
-+#endif
-+
-+/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
-+ * is returned in "result".
-+ */
-+#ifndef YY_INPUT
-+#define YY_INPUT(buf,result,max_size) \
-+	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
-+		{ \
-+		int c = '*'; \
-+		yy_size_t n; \
-+		for ( n = 0; n < max_size && \
-+			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
-+			buf[n] = (char) c; \
-+		if ( c == '\n' ) \
-+			buf[n++] = (char) c; \
-+		if ( c == EOF && ferror( yyin ) ) \
-+			YY_FATAL_ERROR( "input in flex scanner failed" ); \
-+		result = n; \
-+		} \
-+	else \
-+		{ \
-+		errno=0; \
-+		while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
-+			{ \
-+			if( errno != EINTR) \
-+				{ \
-+				YY_FATAL_ERROR( "input in flex scanner failed" ); \
-+				break; \
-+				} \
-+			errno=0; \
-+			clearerr(yyin); \
-+			} \
-+		}\
-+\
-+
-+#endif
-+
-+/* No semi-colon after return; correct usage is to write "yyterminate();" -
-+ * we don't want an extra ';' after the "return" because that will cause
-+ * some compilers to complain about unreachable statements.
-+ */
-+#ifndef yyterminate
-+#define yyterminate() return YY_NULL
-+#endif
-+
-+/* Number of entries by which start-condition stack grows. */
-+#ifndef YY_START_STACK_INCR
-+#define YY_START_STACK_INCR 25
-+#endif
-+
-+/* Report a fatal error. */
-+#ifndef YY_FATAL_ERROR
-+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner)
-+#endif
-+
-+/* end tables serialization structures and prototypes */
-+
-+/* Default declaration of generated scanner - a define so the user can
-+ * easily add parameters.
-+ */
-+#ifndef YY_DECL
-+#define YY_DECL_IS_OURS 1
-+
-+extern int yylex \
-+               (YYSTYPE * yylval_param ,yyscan_t yyscanner);
-+
-+#define YY_DECL int yylex \
-+               (YYSTYPE * yylval_param , yyscan_t yyscanner)
-+#endif /* !YY_DECL */
-+
-+/* Code executed at the beginning of each rule, after yytext and yyleng
-+ * have been set up.
-+ */
-+#ifndef YY_USER_ACTION
-+#define YY_USER_ACTION
-+#endif
-+
-+/* Code executed at the end of each rule. */
-+#ifndef YY_BREAK
-+#define YY_BREAK break;
-+#endif
-+
-+#define YY_RULE_SETUP \
-+	YY_USER_ACTION
-+
-+/** The main scanner function which does all the work.
-+ */
-+YY_DECL
-+{
-+	register yy_state_type yy_current_state;
-+	register char *yy_cp, *yy_bp;
-+	register int yy_act;
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+
-+    TParseContext* context = yyextra;
-+
-+    /* Single-line comments */
-+
-+    yylval = yylval_param;
-+
-+	if ( !yyg->yy_init )
-+		{
-+		yyg->yy_init = 1;
-+
-+#ifdef YY_USER_INIT
-+		YY_USER_INIT;
-+#endif
-+
-+		if ( ! yyg->yy_start )
-+			yyg->yy_start = 1;	/* first start state */
-+
-+		if ( ! yyin )
-+			yyin = stdin;
-+
-+		if ( ! yyout )
-+			yyout = stdout;
-+
-+		if ( ! YY_CURRENT_BUFFER ) {
-+			yyensure_buffer_stack (yyscanner);
-+			YY_CURRENT_BUFFER_LVALUE =
-+				yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
-+		}
-+
-+		yy_load_buffer_state(yyscanner );
-+		}
-+
-+	while ( 1 )		/* loops until end-of-file is reached */
-+		{
-+		yy_cp = yyg->yy_c_buf_p;
-+
-+		/* Support of yytext. */
-+		*yy_cp = yyg->yy_hold_char;
-+
-+		/* yy_bp points to the position in yy_ch_buf of the start of
-+		 * the current run.
-+		 */
-+		yy_bp = yy_cp;
-+
-+		yy_current_state = yyg->yy_start;
-+yy_match:
-+		do
-+			{
-+			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
-+			if ( yy_accept[yy_current_state] )
-+				{
-+				yyg->yy_last_accepting_state = yy_current_state;
-+				yyg->yy_last_accepting_cpos = yy_cp;
-+				}
-+			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-+				{
-+				yy_current_state = (int) yy_def[yy_current_state];
-+				if ( yy_current_state >= 459 )
-+					yy_c = yy_meta[(unsigned int) yy_c];
-+				}
-+			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-+			++yy_cp;
-+			}
-+		while ( yy_current_state != 458 );
-+		yy_cp = yyg->yy_last_accepting_cpos;
-+		yy_current_state = yyg->yy_last_accepting_state;
-+
-+yy_find_action:
-+		yy_act = yy_accept[yy_current_state];
-+
-+		YY_DO_BEFORE_ACTION;
-+
-+		if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
-+			{
-+			yy_size_t yyl;
-+			for ( yyl = 0; yyl < yyleng; ++yyl )
-+				if ( yytext[yyl] == '\n' )
-+					   
-+    do{ yylineno++;
-+        yycolumn=0;
-+    }while(0)
-+;
-+			}
-+
-+do_action:	/* This label is used only to access EOF actions. */
-+
-+		switch ( yy_act )
-+	{ /* beginning of action switch */
-+			case 0: /* must back up */
-+			/* undo the effects of YY_DO_BEFORE_ACTION */
-+			*yy_cp = yyg->yy_hold_char;
-+			yy_cp = yyg->yy_last_accepting_cpos;
-+			yy_current_state = yyg->yy_last_accepting_state;
-+			goto yy_find_action;
-+
-+case 1:
-+YY_RULE_SETUP
-+;
-+	YY_BREAK
-+/* Multi-line comments */
-+case 2:
-+YY_RULE_SETUP
-+{ yy_push_state(COMMENT, yyscanner); }
-+	YY_BREAK
-+case 3:
-+case 4:
-+/* rule 4 can match eol */
-+YY_RULE_SETUP
-+;
-+	YY_BREAK
-+case 5:
-+YY_RULE_SETUP
-+{ yy_pop_state(yyscanner); }
-+	YY_BREAK
-+case 6:
-+YY_RULE_SETUP
-+{ return(INVARIANT); }
-+	YY_BREAK
-+case 7:
-+YY_RULE_SETUP
-+{ return(HIGH_PRECISION); }
-+	YY_BREAK
-+case 8:
-+YY_RULE_SETUP
-+{ return(MEDIUM_PRECISION); }
-+	YY_BREAK
-+case 9:
-+YY_RULE_SETUP
-+{ return(LOW_PRECISION); }
-+	YY_BREAK
-+case 10:
-+YY_RULE_SETUP
-+{ return(PRECISION); }
-+	YY_BREAK
-+case 11:
-+YY_RULE_SETUP
-+{ return(ATTRIBUTE); }
-+	YY_BREAK
-+case 12:
-+YY_RULE_SETUP
-+{ return(CONST_QUAL); }
-+	YY_BREAK
-+case 13:
-+YY_RULE_SETUP
-+{ return(UNIFORM); }
-+	YY_BREAK
-+case 14:
-+YY_RULE_SETUP
-+{ return(VARYING); }
-+	YY_BREAK
-+case 15:
-+YY_RULE_SETUP
-+{ return(BREAK); }
-+	YY_BREAK
-+case 16:
-+YY_RULE_SETUP
-+{ return(CONTINUE); }
-+	YY_BREAK
-+case 17:
-+YY_RULE_SETUP
-+{ return(DO); }
-+	YY_BREAK
-+case 18:
-+YY_RULE_SETUP
-+{ return(FOR); }
-+	YY_BREAK
-+case 19:
-+YY_RULE_SETUP
-+{ return(WHILE); }
-+	YY_BREAK
-+case 20:
-+YY_RULE_SETUP
-+{ return(IF); }
-+	YY_BREAK
-+case 21:
-+YY_RULE_SETUP
-+{ return(ELSE); }
-+	YY_BREAK
-+case 22:
-+YY_RULE_SETUP
-+{ return(IN_QUAL); }
-+	YY_BREAK
-+case 23:
-+YY_RULE_SETUP
-+{ return(OUT_QUAL); }
-+	YY_BREAK
-+case 24:
-+YY_RULE_SETUP
-+{ return(INOUT_QUAL); }
-+	YY_BREAK
-+case 25:
-+YY_RULE_SETUP
-+{ context->lexAfterType = true; return(FLOAT_TYPE); }
-+	YY_BREAK
-+case 26:
-+YY_RULE_SETUP
-+{ context->lexAfterType = true; return(INT_TYPE); }
-+	YY_BREAK
-+case 27:
-+YY_RULE_SETUP
-+{ context->lexAfterType = true; return(VOID_TYPE); }
-+	YY_BREAK
-+case 28:
-+YY_RULE_SETUP
-+{ context->lexAfterType = true; return(BOOL_TYPE); }
-+	YY_BREAK
-+case 29:
-+YY_RULE_SETUP
-+{ yylval->lex.b = true;  return(BOOLCONSTANT); }
-+	YY_BREAK
-+case 30:
-+YY_RULE_SETUP
-+{ yylval->lex.b = false; return(BOOLCONSTANT); }
-+	YY_BREAK
-+case 31:
-+YY_RULE_SETUP
-+{ return(DISCARD); }
-+	YY_BREAK
-+case 32:
-+YY_RULE_SETUP
-+{ return(RETURN); }
-+	YY_BREAK
-+case 33:
-+YY_RULE_SETUP
-+{ context->lexAfterType = true; return(MATRIX2); }
-+	YY_BREAK
-+case 34:
-+YY_RULE_SETUP
-+{ context->lexAfterType = true; return(MATRIX3); }
-+	YY_BREAK
-+case 35:
-+YY_RULE_SETUP
-+{ context->lexAfterType = true; return(MATRIX4); }
-+	YY_BREAK
-+case 36:
-+YY_RULE_SETUP
-+{ context->lexAfterType = true; return (VEC2); }
-+	YY_BREAK
-+case 37:
-+YY_RULE_SETUP
-+{ context->lexAfterType = true; return (VEC3); }
-+	YY_BREAK
-+case 38:
-+YY_RULE_SETUP
-+{ context->lexAfterType = true; return (VEC4); }
-+	YY_BREAK
-+case 39:
-+YY_RULE_SETUP
-+{ context->lexAfterType = true; return (IVEC2); }
-+	YY_BREAK
-+case 40:
-+YY_RULE_SETUP
-+{ context->lexAfterType = true; return (IVEC3); }
-+	YY_BREAK
-+case 41:
-+YY_RULE_SETUP
-+{ context->lexAfterType = true; return (IVEC4); }
-+	YY_BREAK
-+case 42:
-+YY_RULE_SETUP
-+{ context->lexAfterType = true; return (BVEC2); }
-+	YY_BREAK
-+case 43:
-+YY_RULE_SETUP
-+{ context->lexAfterType = true; return (BVEC3); }
-+	YY_BREAK
-+case 44:
-+YY_RULE_SETUP
-+{ context->lexAfterType = true; return (BVEC4); }
-+	YY_BREAK
-+case 45:
-+YY_RULE_SETUP
-+{ context->lexAfterType = true; return SAMPLER2D; }
-+	YY_BREAK
-+case 46:
-+YY_RULE_SETUP
-+{ context->lexAfterType = true; return SAMPLERCUBE; }
-+	YY_BREAK
-+case 47:
-+YY_RULE_SETUP
-+{ context->lexAfterType = true; return SAMPLER_EXTERNAL_OES; }
-+	YY_BREAK
-+case 48:
-+YY_RULE_SETUP
-+{ context->lexAfterType = true; return SAMPLER2DRECT; }
-+	YY_BREAK
-+case 49:
-+YY_RULE_SETUP
-+{ context->lexAfterType = true; return(STRUCT); }
-+	YY_BREAK
-+case 50:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 51:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 52:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 53:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 54:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 55:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 56:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 57:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 58:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 59:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 60:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 61:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 62:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 63:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 64:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 65:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 66:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 67:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 68:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 69:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 70:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 71:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 72:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 73:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 74:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 75:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 76:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 77:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 78:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 79:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 80:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 81:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 82:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 83:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 84:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 85:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 86:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 87:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 88:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 89:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 90:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 91:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 92:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 93:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 94:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 95:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 96:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 97:
-+YY_RULE_SETUP
-+{ return reserved_word(yyscanner); }
-+	YY_BREAK
-+case 98:
-+YY_RULE_SETUP
-+{
-+   yylval->lex.string = NewPoolTString(yytext); 
-+   return check_type(yyscanner);
-+}
-+	YY_BREAK
-+case 99:
-+YY_RULE_SETUP
-+{ yylval->lex.i = strtol(yytext, 0, 0); return(INTCONSTANT); }
-+	YY_BREAK
-+case 100:
-+YY_RULE_SETUP
-+{ yylval->lex.i = strtol(yytext, 0, 0); return(INTCONSTANT); }
-+	YY_BREAK
-+case 101:
-+YY_RULE_SETUP
-+{ context->error(yylineno, "Invalid Octal number.", yytext); context->recover(); return 0;}
-+	YY_BREAK
-+case 102:
-+YY_RULE_SETUP
-+{ yylval->lex.i = strtol(yytext, 0, 0); return(INTCONSTANT); }
-+	YY_BREAK
-+case 103:
-+YY_RULE_SETUP
-+{ yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
-+	YY_BREAK
-+case 104:
-+YY_RULE_SETUP
-+{ yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
-+	YY_BREAK
-+case 105:
-+YY_RULE_SETUP
-+{ yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
-+	YY_BREAK
-+case 106:
-+YY_RULE_SETUP
-+{  return(ADD_ASSIGN); }
-+	YY_BREAK
-+case 107:
-+YY_RULE_SETUP
-+{  return(SUB_ASSIGN); }
-+	YY_BREAK
-+case 108:
-+YY_RULE_SETUP
-+{  return(MUL_ASSIGN); }
-+	YY_BREAK
-+case 109:
-+YY_RULE_SETUP
-+{  return(DIV_ASSIGN); }
-+	YY_BREAK
-+case 110:
-+YY_RULE_SETUP
-+{  return(MOD_ASSIGN); }
-+	YY_BREAK
-+case 111:
-+YY_RULE_SETUP
-+{  return(LEFT_ASSIGN); }
-+	YY_BREAK
-+case 112:
-+YY_RULE_SETUP
-+{  return(RIGHT_ASSIGN); }
-+	YY_BREAK
-+case 113:
-+YY_RULE_SETUP
-+{  return(AND_ASSIGN); }
-+	YY_BREAK
-+case 114:
-+YY_RULE_SETUP
-+{  return(XOR_ASSIGN); }
-+	YY_BREAK
-+case 115:
-+YY_RULE_SETUP
-+{  return(OR_ASSIGN); }
-+	YY_BREAK
-+case 116:
-+YY_RULE_SETUP
-+{  return(INC_OP); }
-+	YY_BREAK
-+case 117:
-+YY_RULE_SETUP
-+{  return(DEC_OP); }
-+	YY_BREAK
-+case 118:
-+YY_RULE_SETUP
-+{  return(AND_OP); }
-+	YY_BREAK
-+case 119:
-+YY_RULE_SETUP
-+{  return(OR_OP); }
-+	YY_BREAK
-+case 120:
-+YY_RULE_SETUP
-+{  return(XOR_OP); }
-+	YY_BREAK
-+case 121:
-+YY_RULE_SETUP
-+{  return(LE_OP); }
-+	YY_BREAK
-+case 122:
-+YY_RULE_SETUP
-+{  return(GE_OP); }
-+	YY_BREAK
-+case 123:
-+YY_RULE_SETUP
-+{  return(EQ_OP); }
-+	YY_BREAK
-+case 124:
-+YY_RULE_SETUP
-+{  return(NE_OP); }
-+	YY_BREAK
-+case 125:
-+YY_RULE_SETUP
-+{  return(LEFT_OP); }
-+	YY_BREAK
-+case 126:
-+YY_RULE_SETUP
-+{  return(RIGHT_OP); }
-+	YY_BREAK
-+case 127:
-+YY_RULE_SETUP
-+{ context->lexAfterType = false; return(SEMICOLON); }
-+	YY_BREAK
-+case 128:
-+YY_RULE_SETUP
-+{ context->lexAfterType = false; return(LEFT_BRACE); }
-+	YY_BREAK
-+case 129:
-+YY_RULE_SETUP
-+{ return(RIGHT_BRACE); }
-+	YY_BREAK
-+case 130:
-+YY_RULE_SETUP
-+{ if (context->inTypeParen) context->lexAfterType = false; return(COMMA); }
-+	YY_BREAK
-+case 131:
-+YY_RULE_SETUP
-+{ return(COLON); }
-+	YY_BREAK
-+case 132:
-+YY_RULE_SETUP
-+{ context->lexAfterType = false; return(EQUAL); }
-+	YY_BREAK
-+case 133:
-+YY_RULE_SETUP
-+{ context->lexAfterType = false; context->inTypeParen = true; return(LEFT_PAREN); }
-+	YY_BREAK
-+case 134:
-+YY_RULE_SETUP
-+{ context->inTypeParen = false; return(RIGHT_PAREN); }
-+	YY_BREAK
-+case 135:
-+YY_RULE_SETUP
-+{ return(LEFT_BRACKET); }
-+	YY_BREAK
-+case 136:
-+YY_RULE_SETUP
-+{ return(RIGHT_BRACKET); }
-+	YY_BREAK
-+case 137:
-+YY_RULE_SETUP
-+{ BEGIN(FIELDS);  return(DOT); }
-+	YY_BREAK
-+case 138:
-+YY_RULE_SETUP
-+{ return(BANG); }
-+	YY_BREAK
-+case 139:
-+YY_RULE_SETUP
-+{ return(DASH); }
-+	YY_BREAK
-+case 140:
-+YY_RULE_SETUP
-+{ return(TILDE); }
-+	YY_BREAK
-+case 141:
-+YY_RULE_SETUP
-+{ return(PLUS); }
-+	YY_BREAK
-+case 142:
-+YY_RULE_SETUP
-+{ return(STAR); }
-+	YY_BREAK
-+case 143:
-+YY_RULE_SETUP
-+{ return(SLASH); }
-+	YY_BREAK
-+case 144:
-+YY_RULE_SETUP
-+{ return(PERCENT); }
-+	YY_BREAK
-+case 145:
-+YY_RULE_SETUP
-+{ return(LEFT_ANGLE); }
-+	YY_BREAK
-+case 146:
-+YY_RULE_SETUP
-+{ return(RIGHT_ANGLE); }
-+	YY_BREAK
-+case 147:
-+YY_RULE_SETUP
-+{ return(VERTICAL_BAR); }
-+	YY_BREAK
-+case 148:
-+YY_RULE_SETUP
-+{ return(CARET); }
-+	YY_BREAK
-+case 149:
-+YY_RULE_SETUP
-+{ return(AMPERSAND); }
-+	YY_BREAK
-+case 150:
-+YY_RULE_SETUP
-+{ return(QUESTION); }
-+	YY_BREAK
-+case 151:
-+YY_RULE_SETUP
-+{ 
-+    BEGIN(INITIAL);
-+    yylval->lex.string = NewPoolTString(yytext); 
-+    return FIELD_SELECTION;
-+}
-+	YY_BREAK
-+case 152:
-+YY_RULE_SETUP
-+{}
-+	YY_BREAK
-+case 153:
-+/* rule 153 can match eol */
-+YY_RULE_SETUP
-+{  }
-+	YY_BREAK
-+case YY_STATE_EOF(INITIAL):
-+case YY_STATE_EOF(COMMENT):
-+case YY_STATE_EOF(FIELDS):
-+{ context->AfterEOF = true; yyterminate(); }
-+	YY_BREAK
-+case 154:
-+YY_RULE_SETUP
-+{ context->warning(yylineno, "Unknown char", yytext, ""); return 0; }
-+	YY_BREAK
-+case 155:
-+YY_RULE_SETUP
-+ECHO;
-+	YY_BREAK
-+
-+	case YY_END_OF_BUFFER:
-+		{
-+		/* Amount of text matched not including the EOB char. */
-+		int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1;
-+
-+		/* Undo the effects of YY_DO_BEFORE_ACTION. */
-+		*yy_cp = yyg->yy_hold_char;
-+		YY_RESTORE_YY_MORE_OFFSET
-+
-+		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
-+			{
-+			/* We're scanning a new file or input source.  It's
-+			 * possible that this happened because the user
-+			 * just pointed yyin at a new source and called
-+			 * yylex().  If so, then we have to assure
-+			 * consistency between YY_CURRENT_BUFFER and our
-+			 * globals.  Here is the right place to do so, because
-+			 * this is the first action (other than possibly a
-+			 * back-up) that will match for the new input source.
-+			 */
-+			yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-+			YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
-+			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
-+			}
-+
-+		/* Note that here we test for yy_c_buf_p "<=" to the position
-+		 * of the first EOB in the buffer, since yy_c_buf_p will
-+		 * already have been incremented past the NUL character
-+		 * (since all states make transitions on EOB to the
-+		 * end-of-buffer state).  Contrast this with the test
-+		 * in input().
-+		 */
-+		if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
-+			{ /* This was really a NUL. */
-+			yy_state_type yy_next_state;
-+
-+			yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text;
-+
-+			yy_current_state = yy_get_previous_state( yyscanner );
-+
-+			/* Okay, we're now positioned to make the NUL
-+			 * transition.  We couldn't have
-+			 * yy_get_previous_state() go ahead and do it
-+			 * for us because it doesn't know how to deal
-+			 * with the possibility of jamming (and we don't
-+			 * want to build jamming into it because then it
-+			 * will run more slowly).
-+			 */
-+
-+			yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner);
-+
-+			yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
-+
-+			if ( yy_next_state )
-+				{
-+				/* Consume the NUL. */
-+				yy_cp = ++yyg->yy_c_buf_p;
-+				yy_current_state = yy_next_state;
-+				goto yy_match;
-+				}
-+
-+			else
-+				{
-+				yy_cp = yyg->yy_last_accepting_cpos;
-+				yy_current_state = yyg->yy_last_accepting_state;
-+				goto yy_find_action;
-+				}
-+			}
-+
-+		else switch ( yy_get_next_buffer( yyscanner ) )
-+			{
-+			case EOB_ACT_END_OF_FILE:
-+				{
-+				yyg->yy_did_buffer_switch_on_eof = 0;
-+
-+				if ( yywrap(yyscanner ) )
-+					{
-+					/* Note: because we've taken care in
-+					 * yy_get_next_buffer() to have set up
-+					 * yytext, we can now set up
-+					 * yy_c_buf_p so that if some total
-+					 * hoser (like flex itself) wants to
-+					 * call the scanner after we return the
-+					 * YY_NULL, it'll still work - another
-+					 * YY_NULL will get returned.
-+					 */
-+					yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ;
-+
-+					yy_act = YY_STATE_EOF(YY_START);
-+					goto do_action;
-+					}
-+
-+				else
-+					{
-+					if ( ! yyg->yy_did_buffer_switch_on_eof )
-+						YY_NEW_FILE;
-+					}
-+				break;
-+				}
-+
-+			case EOB_ACT_CONTINUE_SCAN:
-+				yyg->yy_c_buf_p =
-+					yyg->yytext_ptr + yy_amount_of_matched_text;
-+
-+				yy_current_state = yy_get_previous_state( yyscanner );
-+
-+				yy_cp = yyg->yy_c_buf_p;
-+				yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
-+				goto yy_match;
-+
-+			case EOB_ACT_LAST_MATCH:
-+				yyg->yy_c_buf_p =
-+				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars];
-+
-+				yy_current_state = yy_get_previous_state( yyscanner );
-+
-+				yy_cp = yyg->yy_c_buf_p;
-+				yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
-+				goto yy_find_action;
-+			}
-+		break;
-+		}
-+
-+	default:
-+		YY_FATAL_ERROR(
-+			"fatal flex scanner internal error--no action found" );
-+	} /* end of action switch */
-+		} /* end of scanning one token */
-+} /* end of yylex */
-+
-+/* yy_get_next_buffer - try to read in a new buffer
-+ *
-+ * Returns a code representing an action:
-+ *	EOB_ACT_LAST_MATCH -
-+ *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
-+ *	EOB_ACT_END_OF_FILE - end of file
-+ */
-+static int yy_get_next_buffer (yyscan_t yyscanner)
-+{
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
-+	register char *source = yyg->yytext_ptr;
-+	register int number_to_move, i;
-+	int ret_val;
-+
-+	if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] )
-+		YY_FATAL_ERROR(
-+		"fatal flex scanner internal error--end of buffer missed" );
-+
-+	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
-+		{ /* Don't try to fill the buffer, so this is an EOF. */
-+		if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 )
-+			{
-+			/* We matched a single character, the EOB, so
-+			 * treat this as a final EOF.
-+			 */
-+			return EOB_ACT_END_OF_FILE;
-+			}
-+
-+		else
-+			{
-+			/* We matched some text prior to the EOB, first
-+			 * process it.
-+			 */
-+			return EOB_ACT_LAST_MATCH;
-+			}
-+		}
-+
-+	/* Try to read more data. */
-+
-+	/* First move last chars to start of buffer. */
-+	number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1;
-+
-+	for ( i = 0; i < number_to_move; ++i )
-+		*(dest++) = *(source++);
-+
-+	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
-+		/* don't do the read, it's not guaranteed to return an EOF,
-+		 * just force an EOF
-+		 */
-+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0;
-+
-+	else
-+		{
-+			yy_size_t num_to_read =
-+			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
-+
-+		while ( num_to_read <= 0 )
-+			{ /* Not enough room in the buffer - grow it. */
-+
-+			/* just a shorter name for the current buffer */
-+			YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
-+
-+			int yy_c_buf_p_offset =
-+				(int) (yyg->yy_c_buf_p - b->yy_ch_buf);
-+
-+			if ( b->yy_is_our_buffer )
-+				{
-+				yy_size_t new_size = b->yy_buf_size * 2;
-+
-+				if ( new_size <= 0 )
-+					b->yy_buf_size += b->yy_buf_size / 8;
-+				else
-+					b->yy_buf_size *= 2;
-+
-+				b->yy_ch_buf = (char *)
-+					/* Include room in for 2 EOB chars. */
-+					yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ,yyscanner );
-+				}
-+			else
-+				/* Can't grow it, we don't own it. */
-+				b->yy_ch_buf = 0;
-+
-+			if ( ! b->yy_ch_buf )
-+				YY_FATAL_ERROR(
-+				"fatal error - scanner input buffer overflow" );
-+
-+			yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
-+
-+			num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
-+						number_to_move - 1;
-+
-+			}
-+
-+		if ( num_to_read > YY_READ_BUF_SIZE )
-+			num_to_read = YY_READ_BUF_SIZE;
-+
-+		/* Read in more data. */
-+		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
-+			yyg->yy_n_chars, num_to_read );
-+
-+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
-+		}
-+
-+	if ( yyg->yy_n_chars == 0 )
-+		{
-+		if ( number_to_move == YY_MORE_ADJ )
-+			{
-+			ret_val = EOB_ACT_END_OF_FILE;
-+			yyrestart(yyin  ,yyscanner);
-+			}
-+
-+		else
-+			{
-+			ret_val = EOB_ACT_LAST_MATCH;
-+			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
-+				YY_BUFFER_EOF_PENDING;
-+			}
-+		}
-+
-+	else
-+		ret_val = EOB_ACT_CONTINUE_SCAN;
-+
-+	if ((yy_size_t) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
-+		/* Extend the array by 50%, plus the number we really need. */
-+		yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1);
-+		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner );
-+		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
-+			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
-+	}
-+
-+	yyg->yy_n_chars += number_to_move;
-+	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR;
-+	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
-+
-+	yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
-+
-+	return ret_val;
-+}
-+
-+/* yy_get_previous_state - get the state just before the EOB char was reached */
-+
-+    static yy_state_type yy_get_previous_state (yyscan_t yyscanner)
-+{
-+	register yy_state_type yy_current_state;
-+	register char *yy_cp;
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+
-+	yy_current_state = yyg->yy_start;
-+
-+	for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp )
-+		{
-+		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
-+		if ( yy_accept[yy_current_state] )
-+			{
-+			yyg->yy_last_accepting_state = yy_current_state;
-+			yyg->yy_last_accepting_cpos = yy_cp;
-+			}
-+		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-+			{
-+			yy_current_state = (int) yy_def[yy_current_state];
-+			if ( yy_current_state >= 459 )
-+				yy_c = yy_meta[(unsigned int) yy_c];
-+			}
-+		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-+		}
-+
-+	return yy_current_state;
-+}
-+
-+/* yy_try_NUL_trans - try to make a transition on the NUL character
-+ *
-+ * synopsis
-+ *	next_state = yy_try_NUL_trans( current_state );
-+ */
-+    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state , yyscan_t yyscanner)
-+{
-+	register int yy_is_jam;
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */
-+	register char *yy_cp = yyg->yy_c_buf_p;
-+
-+	register YY_CHAR yy_c = 1;
-+	if ( yy_accept[yy_current_state] )
-+		{
-+		yyg->yy_last_accepting_state = yy_current_state;
-+		yyg->yy_last_accepting_cpos = yy_cp;
-+		}
-+	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-+		{
-+		yy_current_state = (int) yy_def[yy_current_state];
-+		if ( yy_current_state >= 459 )
-+			yy_c = yy_meta[(unsigned int) yy_c];
-+		}
-+	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-+	yy_is_jam = (yy_current_state == 458);
-+
-+	return yy_is_jam ? 0 : yy_current_state;
-+}
-+
-+#ifndef YY_NO_INPUT
-+#ifdef __cplusplus
-+    static int yyinput (yyscan_t yyscanner)
-+#else
-+    static int input  (yyscan_t yyscanner)
-+#endif
-+
-+{
-+	int c;
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+
-+	*yyg->yy_c_buf_p = yyg->yy_hold_char;
-+
-+	if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
-+		{
-+		/* yy_c_buf_p now points to the character we want to return.
-+		 * If this occurs *before* the EOB characters, then it's a
-+		 * valid NUL; if not, then we've hit the end of the buffer.
-+		 */
-+		if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
-+			/* This was really a NUL. */
-+			*yyg->yy_c_buf_p = '\0';
-+
-+		else
-+			{ /* need more input */
-+			yy_size_t offset = yyg->yy_c_buf_p - yyg->yytext_ptr;
-+			++yyg->yy_c_buf_p;
-+
-+			switch ( yy_get_next_buffer( yyscanner ) )
-+				{
-+				case EOB_ACT_LAST_MATCH:
-+					/* This happens because yy_g_n_b()
-+					 * sees that we've accumulated a
-+					 * token and flags that we need to
-+					 * try matching the token before
-+					 * proceeding.  But for input(),
-+					 * there's no matching to consider.
-+					 * So convert the EOB_ACT_LAST_MATCH
-+					 * to EOB_ACT_END_OF_FILE.
-+					 */
-+
-+					/* Reset buffer status. */
-+					yyrestart(yyin ,yyscanner);
-+
-+					/*FALLTHROUGH*/
-+
-+				case EOB_ACT_END_OF_FILE:
-+					{
-+					if ( yywrap(yyscanner ) )
-+						return 0;
-+
-+					if ( ! yyg->yy_did_buffer_switch_on_eof )
-+						YY_NEW_FILE;
-+#ifdef __cplusplus
-+					return yyinput(yyscanner);
-+#else
-+					return input(yyscanner);
-+#endif
-+					}
-+
-+				case EOB_ACT_CONTINUE_SCAN:
-+					yyg->yy_c_buf_p = yyg->yytext_ptr + offset;
-+					break;
-+				}
-+			}
-+		}
-+
-+	c = *(unsigned char *) yyg->yy_c_buf_p;	/* cast for 8-bit char's */
-+	*yyg->yy_c_buf_p = '\0';	/* preserve yytext */
-+	yyg->yy_hold_char = *++yyg->yy_c_buf_p;
-+
-+	if ( c == '\n' )
-+		   
-+    do{ yylineno++;
-+        yycolumn=0;
-+    }while(0)
-+;
-+
-+	return c;
-+}
-+#endif	/* ifndef YY_NO_INPUT */
-+
-+/** Immediately switch to a different input stream.
-+ * @param input_file A readable stream.
-+ * @param yyscanner The scanner object.
-+ * @note This function does not reset the start condition to @c INITIAL .
-+ */
-+    void yyrestart  (FILE * input_file , yyscan_t yyscanner)
-+{
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+
-+	if ( ! YY_CURRENT_BUFFER ){
-+        yyensure_buffer_stack (yyscanner);
-+		YY_CURRENT_BUFFER_LVALUE =
-+            yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
-+	}
-+
-+	yy_init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner);
-+	yy_load_buffer_state(yyscanner );
-+}
-+
-+/** Switch to a different input buffer.
-+ * @param new_buffer The new input buffer.
-+ * @param yyscanner The scanner object.
-+ */
-+    void yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer , yyscan_t yyscanner)
-+{
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+
-+	/* TODO. We should be able to replace this entire function body
-+	 * with
-+	 *		yypop_buffer_state();
-+	 *		yypush_buffer_state(new_buffer);
-+     */
-+	yyensure_buffer_stack (yyscanner);
-+	if ( YY_CURRENT_BUFFER == new_buffer )
-+		return;
-+
-+	if ( YY_CURRENT_BUFFER )
-+		{
-+		/* Flush out information for old buffer. */
-+		*yyg->yy_c_buf_p = yyg->yy_hold_char;
-+		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
-+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
-+		}
-+
-+	YY_CURRENT_BUFFER_LVALUE = new_buffer;
-+	yy_load_buffer_state(yyscanner );
-+
-+	/* We don't actually know whether we did this switch during
-+	 * EOF (yywrap()) processing, but the only time this flag
-+	 * is looked at is after yywrap() is called, so it's safe
-+	 * to go ahead and always set it.
-+	 */
-+	yyg->yy_did_buffer_switch_on_eof = 1;
-+}
-+
-+static void yy_load_buffer_state  (yyscan_t yyscanner)
-+{
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+	yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-+	yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
-+	yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
-+	yyg->yy_hold_char = *yyg->yy_c_buf_p;
-+}
-+
-+/** Allocate and initialize an input buffer state.
-+ * @param file A readable stream.
-+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
-+ * @param yyscanner The scanner object.
-+ * @return the allocated buffer state.
-+ */
-+    YY_BUFFER_STATE yy_create_buffer  (FILE * file, int  size , yyscan_t yyscanner)
-+{
-+	YY_BUFFER_STATE b;
-+    
-+	b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner );
-+	if ( ! b )
-+		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
-+
-+	b->yy_buf_size = size;
-+
-+	/* yy_ch_buf has to be 2 characters longer than the size given because
-+	 * we need to put in 2 end-of-buffer characters.
-+	 */
-+	b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 ,yyscanner );
-+	if ( ! b->yy_ch_buf )
-+		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
-+
-+	b->yy_is_our_buffer = 1;
-+
-+	yy_init_buffer(b,file ,yyscanner);
-+
-+	return b;
-+}
-+
-+/** Destroy the buffer.
-+ * @param b a buffer created with yy_create_buffer()
-+ * @param yyscanner The scanner object.
-+ */
-+    void yy_delete_buffer (YY_BUFFER_STATE  b , yyscan_t yyscanner)
-+{
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+
-+	if ( ! b )
-+		return;
-+
-+	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
-+		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
-+
-+	if ( b->yy_is_our_buffer )
-+		yyfree((void *) b->yy_ch_buf ,yyscanner );
-+
-+	yyfree((void *) b ,yyscanner );
-+}
-+
-+/* Initializes or reinitializes a buffer.
-+ * This function is sometimes called more than once on the same buffer,
-+ * such as during a yyrestart() or at EOF.
-+ */
-+    static void yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file , yyscan_t yyscanner)
-+
-+{
-+	int oerrno = errno;
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+
-+	yy_flush_buffer(b ,yyscanner);
-+
-+	b->yy_input_file = file;
-+	b->yy_fill_buffer = 1;
-+
-+    /* If b is the current buffer, then yy_init_buffer was _probably_
-+     * called from yyrestart() or through yy_get_next_buffer.
-+     * In that case, we don't want to reset the lineno or column.
-+     */
-+    if (b != YY_CURRENT_BUFFER){
-+        b->yy_bs_lineno = 1;
-+        b->yy_bs_column = 0;
-+    }
-+
-+        b->yy_is_interactive = 0;
-+    
-+	errno = oerrno;
-+}
-+
-+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
-+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
-+ * @param yyscanner The scanner object.
-+ */
-+    void yy_flush_buffer (YY_BUFFER_STATE  b , yyscan_t yyscanner)
-+{
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+	if ( ! b )
-+		return;
-+
-+	b->yy_n_chars = 0;
-+
-+	/* We always need two end-of-buffer characters.  The first causes
-+	 * a transition to the end-of-buffer state.  The second causes
-+	 * a jam in that state.
-+	 */
-+	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
-+	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
-+
-+	b->yy_buf_pos = &b->yy_ch_buf[0];
-+
-+	b->yy_at_bol = 1;
-+	b->yy_buffer_status = YY_BUFFER_NEW;
-+
-+	if ( b == YY_CURRENT_BUFFER )
-+		yy_load_buffer_state(yyscanner );
-+}
-+
-+/** Pushes the new state onto the stack. The new state becomes
-+ *  the current state. This function will allocate the stack
-+ *  if necessary.
-+ *  @param new_buffer The new state.
-+ *  @param yyscanner The scanner object.
-+ */
-+void yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
-+{
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+	if (new_buffer == NULL)
-+		return;
-+
-+	yyensure_buffer_stack(yyscanner);
-+
-+	/* This block is copied from yy_switch_to_buffer. */
-+	if ( YY_CURRENT_BUFFER )
-+		{
-+		/* Flush out information for old buffer. */
-+		*yyg->yy_c_buf_p = yyg->yy_hold_char;
-+		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
-+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
-+		}
-+
-+	/* Only push if top exists. Otherwise, replace top. */
-+	if (YY_CURRENT_BUFFER)
-+		yyg->yy_buffer_stack_top++;
-+	YY_CURRENT_BUFFER_LVALUE = new_buffer;
-+
-+	/* copied from yy_switch_to_buffer. */
-+	yy_load_buffer_state(yyscanner );
-+	yyg->yy_did_buffer_switch_on_eof = 1;
-+}
-+
-+/** Removes and deletes the top of the stack, if present.
-+ *  The next element becomes the new top.
-+ *  @param yyscanner The scanner object.
-+ */
-+void yypop_buffer_state (yyscan_t yyscanner)
-+{
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+	if (!YY_CURRENT_BUFFER)
-+		return;
-+
-+	yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner);
-+	YY_CURRENT_BUFFER_LVALUE = NULL;
-+	if (yyg->yy_buffer_stack_top > 0)
-+		--yyg->yy_buffer_stack_top;
-+
-+	if (YY_CURRENT_BUFFER) {
-+		yy_load_buffer_state(yyscanner );
-+		yyg->yy_did_buffer_switch_on_eof = 1;
-+	}
-+}
-+
-+/* Allocates the stack if it does not exist.
-+ *  Guarantees space for at least one push.
-+ */
-+static void yyensure_buffer_stack (yyscan_t yyscanner)
-+{
-+	yy_size_t num_to_alloc;
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+
-+	if (!yyg->yy_buffer_stack) {
-+
-+		/* First allocation is just for 2 elements, since we don't know if this
-+		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
-+		 * immediate realloc on the next call.
-+         */
-+		num_to_alloc = 1;
-+		yyg->yy_buffer_stack = (struct yy_buffer_state**)yyalloc
-+								(num_to_alloc * sizeof(struct yy_buffer_state*)
-+								, yyscanner);
-+		if ( ! yyg->yy_buffer_stack )
-+			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
-+								  
-+		memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*));
-+				
-+		yyg->yy_buffer_stack_max = num_to_alloc;
-+		yyg->yy_buffer_stack_top = 0;
-+		return;
-+	}
-+
-+	if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){
-+
-+		/* Increase the buffer to prepare for a possible push. */
-+		int grow_size = 8 /* arbitrary grow size */;
-+
-+		num_to_alloc = yyg->yy_buffer_stack_max + grow_size;
-+		yyg->yy_buffer_stack = (struct yy_buffer_state**)yyrealloc
-+								(yyg->yy_buffer_stack,
-+								num_to_alloc * sizeof(struct yy_buffer_state*)
-+								, yyscanner);
-+		if ( ! yyg->yy_buffer_stack )
-+			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
-+
-+		/* zero only the new slots.*/
-+		memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*));
-+		yyg->yy_buffer_stack_max = num_to_alloc;
-+	}
-+}
-+
-+/** Setup the input buffer state to scan directly from a user-specified character buffer.
-+ * @param base the character buffer
-+ * @param size the size in bytes of the character buffer
-+ * @param yyscanner The scanner object.
-+ * @return the newly allocated buffer state object. 
-+ */
-+YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size , yyscan_t yyscanner)
-+{
-+	YY_BUFFER_STATE b;
-+    
-+	if ( size < 2 ||
-+	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
-+	     base[size-1] != YY_END_OF_BUFFER_CHAR )
-+		/* They forgot to leave room for the EOB's. */
-+		return 0;
-+
-+	b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner );
-+	if ( ! b )
-+		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
-+
-+	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
-+	b->yy_buf_pos = b->yy_ch_buf = base;
-+	b->yy_is_our_buffer = 0;
-+	b->yy_input_file = 0;
-+	b->yy_n_chars = b->yy_buf_size;
-+	b->yy_is_interactive = 0;
-+	b->yy_at_bol = 1;
-+	b->yy_fill_buffer = 0;
-+	b->yy_buffer_status = YY_BUFFER_NEW;
-+
-+	yy_switch_to_buffer(b ,yyscanner );
-+
-+	return b;
-+}
-+
-+/** Setup the input buffer state to scan a string. The next call to yylex() will
-+ * scan from a @e copy of @a str.
-+ * @param yystr a NUL-terminated string to scan
-+ * @param yyscanner The scanner object.
-+ * @return the newly allocated buffer state object.
-+ * @note If you want to scan bytes that may contain NUL values, then use
-+ *       yy_scan_bytes() instead.
-+ */
-+YY_BUFFER_STATE yy_scan_string (yyconst char * yystr , yyscan_t yyscanner)
-+{
-+    
-+	return yy_scan_bytes(yystr,strlen(yystr) ,yyscanner);
-+}
-+
-+/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
-+ * scan from a @e copy of @a bytes.
-+ * @param bytes the byte buffer to scan
-+ * @param len the number of bytes in the buffer pointed to by @a bytes.
-+ * @param yyscanner The scanner object.
-+ * @return the newly allocated buffer state object.
-+ */
-+YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len , yyscan_t yyscanner)
-+{
-+	YY_BUFFER_STATE b;
-+	char *buf;
-+	yy_size_t n, i;
-+    
-+	/* Get memory for full buffer, including space for trailing EOB's. */
-+	n = _yybytes_len + 2;
-+	buf = (char *) yyalloc(n ,yyscanner );
-+	if ( ! buf )
-+		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
-+
-+	for ( i = 0; i < _yybytes_len; ++i )
-+		buf[i] = yybytes[i];
-+
-+	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
-+
-+	b = yy_scan_buffer(buf,n ,yyscanner);
-+	if ( ! b )
-+		YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
-+
-+	/* It's okay to grow etc. this buffer, and we should throw it
-+	 * away when we're done.
-+	 */
-+	b->yy_is_our_buffer = 1;
-+
-+	return b;
-+}
-+
-+    static void yy_push_state (int  new_state , yyscan_t yyscanner)
-+{
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+	if ( yyg->yy_start_stack_ptr >= yyg->yy_start_stack_depth )
-+		{
-+		yy_size_t new_size;
-+
-+		yyg->yy_start_stack_depth += YY_START_STACK_INCR;
-+		new_size = yyg->yy_start_stack_depth * sizeof( int );
-+
-+		if ( ! yyg->yy_start_stack )
-+			yyg->yy_start_stack = (int *) yyalloc(new_size ,yyscanner );
-+
-+		else
-+			yyg->yy_start_stack = (int *) yyrealloc((void *) yyg->yy_start_stack,new_size ,yyscanner );
-+
-+		if ( ! yyg->yy_start_stack )
-+			YY_FATAL_ERROR( "out of memory expanding start-condition stack" );
-+		}
-+
-+	yyg->yy_start_stack[yyg->yy_start_stack_ptr++] = YY_START;
-+
-+	BEGIN(new_state);
-+}
-+
-+    static void yy_pop_state  (yyscan_t yyscanner)
-+{
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+	if ( --yyg->yy_start_stack_ptr < 0 )
-+		YY_FATAL_ERROR( "start-condition stack underflow" );
-+
-+	BEGIN(yyg->yy_start_stack[yyg->yy_start_stack_ptr]);
-+}
-+
-+    static int yy_top_state  (yyscan_t yyscanner)
-+{
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+	return yyg->yy_start_stack[yyg->yy_start_stack_ptr - 1];
-+}
-+
-+#ifndef YY_EXIT_FAILURE
-+#define YY_EXIT_FAILURE 2
-+#endif
-+
-+static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner)
-+{
-+    	(void) fprintf( stderr, "%s\n", msg );
-+	exit( YY_EXIT_FAILURE );
-+}
-+
-+/* Redefine yyless() so it works in section 3 code. */
-+
-+#undef yyless
-+#define yyless(n) \
-+	do \
-+		{ \
-+		/* Undo effects of setting up yytext. */ \
-+        int yyless_macro_arg = (n); \
-+        YY_LESS_LINENO(yyless_macro_arg);\
-+		yytext[yyleng] = yyg->yy_hold_char; \
-+		yyg->yy_c_buf_p = yytext + yyless_macro_arg; \
-+		yyg->yy_hold_char = *yyg->yy_c_buf_p; \
-+		*yyg->yy_c_buf_p = '\0'; \
-+		yyleng = yyless_macro_arg; \
-+		} \
-+	while ( 0 )
-+
-+/* Accessor  methods (get/set functions) to struct members. */
-+
-+/** Get the user-defined data for this scanner.
-+ * @param yyscanner The scanner object.
-+ */
-+YY_EXTRA_TYPE yyget_extra  (yyscan_t yyscanner)
-+{
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+    return yyextra;
-+}
-+
-+/** Get the current line number.
-+ * @param yyscanner The scanner object.
-+ */
-+int yyget_lineno  (yyscan_t yyscanner)
-+{
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+    
-+        if (! YY_CURRENT_BUFFER)
-+            return 0;
-+    
-+    return yylineno;
-+}
-+
-+/** Get the current column number.
-+ * @param yyscanner The scanner object.
-+ */
-+int yyget_column  (yyscan_t yyscanner)
-+{
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+    
-+        if (! YY_CURRENT_BUFFER)
-+            return 0;
-+    
-+    return yycolumn;
-+}
-+
-+/** Get the input stream.
-+ * @param yyscanner The scanner object.
-+ */
-+FILE *yyget_in  (yyscan_t yyscanner)
-+{
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+    return yyin;
-+}
-+
-+/** Get the output stream.
-+ * @param yyscanner The scanner object.
-+ */
-+FILE *yyget_out  (yyscan_t yyscanner)
-+{
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+    return yyout;
-+}
-+
-+/** Get the length of the current token.
-+ * @param yyscanner The scanner object.
-+ */
-+yy_size_t yyget_leng  (yyscan_t yyscanner)
-+{
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+    return yyleng;
-+}
-+
-+/** Get the current token.
-+ * @param yyscanner The scanner object.
-+ */
-+
-+char *yyget_text  (yyscan_t yyscanner)
-+{
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+    return yytext;
-+}
-+
-+/** Set the user-defined data. This data is never touched by the scanner.
-+ * @param user_defined The data to be associated with this scanner.
-+ * @param yyscanner The scanner object.
-+ */
-+void yyset_extra (YY_EXTRA_TYPE  user_defined , yyscan_t yyscanner)
-+{
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+    yyextra = user_defined ;
-+}
-+
-+/** Set the current line number.
-+ * @param line_number
-+ * @param yyscanner The scanner object.
-+ */
-+void yyset_lineno (int  line_number , yyscan_t yyscanner)
-+{
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+
-+        /* lineno is only valid if an input buffer exists. */
-+        if (! YY_CURRENT_BUFFER )
-+           yy_fatal_error( "yyset_lineno called with no buffer" , yyscanner); 
-+    
-+    yylineno = line_number;
-+}
-+
-+/** Set the current column.
-+ * @param line_number
-+ * @param yyscanner The scanner object.
-+ */
-+void yyset_column (int  column_no , yyscan_t yyscanner)
-+{
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+
-+        /* column is only valid if an input buffer exists. */
-+        if (! YY_CURRENT_BUFFER )
-+           yy_fatal_error( "yyset_column called with no buffer" , yyscanner); 
-+    
-+    yycolumn = column_no;
-+}
-+
-+/** Set the input stream. This does not discard the current
-+ * input buffer.
-+ * @param in_str A readable stream.
-+ * @param yyscanner The scanner object.
-+ * @see yy_switch_to_buffer
-+ */
-+void yyset_in (FILE *  in_str , yyscan_t yyscanner)
-+{
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+    yyin = in_str ;
-+}
-+
-+void yyset_out (FILE *  out_str , yyscan_t yyscanner)
-+{
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+    yyout = out_str ;
-+}
-+
-+int yyget_debug  (yyscan_t yyscanner)
-+{
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+    return yy_flex_debug;
-+}
-+
-+void yyset_debug (int  bdebug , yyscan_t yyscanner)
-+{
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+    yy_flex_debug = bdebug ;
-+}
-+
-+/* Accessor methods for yylval and yylloc */
-+
-+YYSTYPE * yyget_lval  (yyscan_t yyscanner)
-+{
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+    return yylval;
-+}
-+
-+void yyset_lval (YYSTYPE *  yylval_param , yyscan_t yyscanner)
-+{
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+    yylval = yylval_param;
-+}
-+
-+/* User-visible API */
-+
-+/* yylex_init is special because it creates the scanner itself, so it is
-+ * the ONLY reentrant function that doesn't take the scanner as the last argument.
-+ * That's why we explicitly handle the declaration, instead of using our macros.
-+ */
-+
-+int yylex_init(yyscan_t* ptr_yy_globals)
-+
-+{
-+    if (ptr_yy_globals == NULL){
-+        errno = EINVAL;
-+        return 1;
-+    }
-+
-+    *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL );
-+
-+    if (*ptr_yy_globals == NULL){
-+        errno = ENOMEM;
-+        return 1;
-+    }
-+
-+    /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */
-+    memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
-+
-+    return yy_init_globals ( *ptr_yy_globals );
-+}
-+
-+/* yylex_init_extra has the same functionality as yylex_init, but follows the
-+ * convention of taking the scanner as the last argument. Note however, that
-+ * this is a *pointer* to a scanner, as it will be allocated by this call (and
-+ * is the reason, too, why this function also must handle its own declaration).
-+ * The user defined value in the first argument will be available to yyalloc in
-+ * the yyextra field.
-+ */
-+
-+int yylex_init_extra(YY_EXTRA_TYPE yy_user_defined,yyscan_t* ptr_yy_globals )
-+
-+{
-+    struct yyguts_t dummy_yyguts;
-+
-+    yyset_extra (yy_user_defined, &dummy_yyguts);
-+
-+    if (ptr_yy_globals == NULL){
-+        errno = EINVAL;
-+        return 1;
-+    }
-+	
-+    *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts );
-+	
-+    if (*ptr_yy_globals == NULL){
-+        errno = ENOMEM;
-+        return 1;
-+    }
-+    
-+    /* By setting to 0xAA, we expose bugs in
-+    yy_init_globals. Leave at 0x00 for releases. */
-+    memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
-+    
-+    yyset_extra (yy_user_defined, *ptr_yy_globals);
-+    
-+    return yy_init_globals ( *ptr_yy_globals );
-+}
-+
-+static int yy_init_globals (yyscan_t yyscanner)
-+{
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+    /* Initialization is the same as for the non-reentrant scanner.
-+     * This function is called from yylex_destroy(), so don't allocate here.
-+     */
-+
-+    yyg->yy_buffer_stack = 0;
-+    yyg->yy_buffer_stack_top = 0;
-+    yyg->yy_buffer_stack_max = 0;
-+    yyg->yy_c_buf_p = (char *) 0;
-+    yyg->yy_init = 0;
-+    yyg->yy_start = 0;
-+
-+    yyg->yy_start_stack_ptr = 0;
-+    yyg->yy_start_stack_depth = 0;
-+    yyg->yy_start_stack =  NULL;
-+
-+/* Defined in main.c */
-+#ifdef YY_STDINIT
-+    yyin = stdin;
-+    yyout = stdout;
-+#else
-+    yyin = (FILE *) 0;
-+    yyout = (FILE *) 0;
-+#endif
-+
-+    /* For future reference: Set errno on error, since we are called by
-+     * yylex_init()
-+     */
-+    return 0;
-+}
-+
-+/* yylex_destroy is for both reentrant and non-reentrant scanners. */
-+int yylex_destroy  (yyscan_t yyscanner)
-+{
-+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-+
-+    /* Pop the buffer stack, destroying each element. */
-+	while(YY_CURRENT_BUFFER){
-+		yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner );
-+		YY_CURRENT_BUFFER_LVALUE = NULL;
-+		yypop_buffer_state(yyscanner);
-+	}
-+
-+	/* Destroy the stack itself. */
-+	yyfree(yyg->yy_buffer_stack ,yyscanner);
-+	yyg->yy_buffer_stack = NULL;
-+
-+    /* Destroy the start condition stack. */
-+        yyfree(yyg->yy_start_stack ,yyscanner );
-+        yyg->yy_start_stack = NULL;
-+
-+    /* Reset the globals. This is important in a non-reentrant scanner so the next time
-+     * yylex() is called, initialization will occur. */
-+    yy_init_globals( yyscanner);
-+
-+    /* Destroy the main struct (reentrant only). */
-+    yyfree ( yyscanner , yyscanner );
-+    yyscanner = NULL;
-+    return 0;
-+}
-+
-+/*
-+ * Internal utility routines.
-+ */
-+
-+#ifndef yytext_ptr
-+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner)
-+{
-+	register int i;
-+	for ( i = 0; i < n; ++i )
-+		s1[i] = s2[i];
-+}
-+#endif
-+
-+#ifdef YY_NEED_STRLEN
-+static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner)
-+{
-+	register int n;
-+	for ( n = 0; s[n]; ++n )
-+		;
-+
-+	return n;
-+}
-+#endif
-+
-+void *yyalloc (yy_size_t  size , yyscan_t yyscanner)
-+{
-+	return (void *) malloc( size );
-+}
-+
-+void *yyrealloc  (void * ptr, yy_size_t  size , yyscan_t yyscanner)
-+{
-+	/* The cast to (char *) in the following accommodates both
-+	 * implementations that use char* generic pointers, and those
-+	 * that use void* generic pointers.  It works with the latter
-+	 * because both ANSI C and C++ allow castless assignment from
-+	 * any pointer type to void*, and deal with argument conversions
-+	 * as though doing an assignment.
-+	 */
-+	return (void *) realloc( (char *) ptr, size );
-+}
-+
-+void yyfree (void * ptr , yyscan_t yyscanner)
-+{
-+	free( (char *) ptr );	/* see yyrealloc() for (char *) cast */
-+}
-+
-+#define YYTABLES_NAME "yytables"
-+
-+int string_input(char* buf, int max_size, yyscan_t yyscanner) {
-+    pp::Token token;
-+    yyget_extra(yyscanner)->preprocessor.lex(&token);
-+    int len = token.type == pp::Token::LAST ? 0 : token.text.size();
-+    if ((len > 0) && (len < max_size))
-+        memcpy(buf, token.text.c_str(), len);
-+    yyset_lineno(EncodeSourceLoc(token.location.file, token.location.line),yyscanner);
-+
-+    if (len >= max_size)
-+        YY_FATAL_ERROR("Input buffer overflow");
-+    else if (len > 0)
-+        buf[len++] = ' ';
-+    return len;
-+}
-+
-+int check_type(yyscan_t yyscanner) {
-+    struct yyguts_t* yyg = (struct yyguts_t*) yyscanner;
-+    
-+    int token = IDENTIFIER;
-+    TSymbol* symbol = yyextra->symbolTable.find(yytext);
-+    if (yyextra->lexAfterType == false && symbol && symbol->isVariable()) {
-+        TVariable* variable = static_cast<TVariable*>(symbol);
-+        if (variable->isUserType()) {
-+            yyextra->lexAfterType = true;
-+            token = TYPE_NAME;
-+        }
-+    }
-+    yylval->lex.symbol = symbol;
-+    return token;
-+}
-+
-+int reserved_word(yyscan_t yyscanner) {
-+    struct yyguts_t* yyg = (struct yyguts_t*) yyscanner;
-+
-+    yyextra->error(yylineno, "Illegal use of reserved word", yytext, "");
-+    yyextra->recover();
-+    return 0;
-+}
-+
-+void yyerror(TParseContext* context, const char* reason) {
-+    struct yyguts_t* yyg = (struct yyguts_t*) context->scanner;
-+
-+    if (context->AfterEOF) {
-+        context->error(yylineno, reason, "unexpected EOF");
-+    } else {
-+        context->error(yylineno, reason, yytext);
-+    }
-+    context->recover();
-+}
-+
-+int glslang_initialize(TParseContext* context) {
-+    yyscan_t scanner = NULL;
-+    if (yylex_init_extra(context,&scanner))
-+        return 1;
-+
-+    context->scanner = scanner;
-+    return 0;
-+}
-+
-+int glslang_finalize(TParseContext* context) {
-+    yyscan_t scanner = context->scanner;
-+    if (scanner == NULL) return 0;
-+    
-+    context->scanner = NULL;
-+    yylex_destroy(scanner);
-+
-+    return 0;
-+}
-+
-+int glslang_scan(int count, const char* const string[], const int length[],
-+                 TParseContext* context) {
-+    yyrestart(NULL,context->scanner);
-+    yyset_lineno(EncodeSourceLoc(0, 1),context->scanner);
-+    context->AfterEOF = false;
-+
-+    // Initialize preprocessor.
-+    if (!context->preprocessor.init(count, string, length))
-+        return 1;
-+
-+    // Define extension macros.
-+    const TExtensionBehavior& extBehavior = context->extensionBehavior();
-+    for (TExtensionBehavior::const_iterator iter = extBehavior.begin();
-+         iter != extBehavior.end(); ++iter) {
-+        context->preprocessor.predefineMacro(iter->first.c_str(), 1);
-+    }
-+    return 0;
-+}
-+
-diff --git a/Source/ThirdParty/ANGLE/src/compiler/glslang_tab.cpp b/Source/ThirdParty/ANGLE/src/compiler/glslang_tab.cpp
-new file mode 100644
-index 0000000..72cc849
---- /dev/null
-+++ b/Source/ThirdParty/ANGLE/src/compiler/glslang_tab.cpp
-@@ -0,0 +1,4847 @@
-+/* A Bison parser, made by GNU Bison 2.3.  */
-+
-+/* Skeleton implementation for Bison's Yacc-like parsers in C
-+
-+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-+   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
-+   the Free Software Foundation; either version 2, or (at your option)
-+   any later version.
-+
-+   This program is distributed in the hope that it will be useful,
-+   but WITHOUT ANY WARRANTY; without even the implied warranty of
-+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+   GNU General Public License for more details.
-+
-+   You should have received a copy of the GNU General Public License
-+   along with this program; if not, write to the Free Software
-+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
-+   Boston, MA 02110-1301, USA.  */
-+
-+/* As a special exception, you may create a larger work that contains
-+   part or all of the Bison parser skeleton and distribute that work
-+   under terms of your choice, so long as that work isn't itself a
-+   parser generator using the skeleton or a modified version thereof
-+   as a parser skeleton.  Alternatively, if you modify or redistribute
-+   the parser skeleton itself, you may (at your option) remove this
-+   special exception, which will cause the skeleton and the resulting
-+   Bison output files to be licensed under the GNU General Public
-+   License without this special exception.
-+
-+   This special exception was added by the Free Software Foundation in
-+   version 2.2 of Bison.  */
-+
-+/* C LALR(1) parser skeleton written by Richard Stallman, by
-+   simplifying the original so-called "semantic" parser.  */
-+
-+/* All symbols defined below should begin with yy or YY, to avoid
-+   infringing on user name space.  This should be done even for local
-+   variables, as they might otherwise be expanded by user macros.
-+   There are some unavoidable exceptions within include files to
-+   define necessary library symbols; they are noted "INFRINGES ON
-+   USER NAME SPACE" below.  */
-+
-+/* Identify Bison output.  */
-+#define YYBISON 1
-+
-+/* Bison version.  */
-+#define YYBISON_VERSION "2.3"
-+
-+/* Skeleton name.  */
-+#define YYSKELETON_NAME "yacc.c"
-+
-+/* Pure parsers.  */
-+#define YYPURE 1
-+
-+/* Using locations.  */
-+#define YYLSP_NEEDED 0
-+
-+
-+
-+/* Tokens.  */
-+#ifndef YYTOKENTYPE
-+# define YYTOKENTYPE
-+   /* Put the tokens into the symbol table, so that GDB and other debuggers
-+      know about them.  */
-+   enum yytokentype {
-+     INVARIANT = 258,
-+     HIGH_PRECISION = 259,
-+     MEDIUM_PRECISION = 260,
-+     LOW_PRECISION = 261,
-+     PRECISION = 262,
-+     ATTRIBUTE = 263,
-+     CONST_QUAL = 264,
-+     BOOL_TYPE = 265,
-+     FLOAT_TYPE = 266,
-+     INT_TYPE = 267,
-+     BREAK = 268,
-+     CONTINUE = 269,
-+     DO = 270,
-+     ELSE = 271,
-+     FOR = 272,
-+     IF = 273,
-+     DISCARD = 274,
-+     RETURN = 275,
-+     BVEC2 = 276,
-+     BVEC3 = 277,
-+     BVEC4 = 278,
-+     IVEC2 = 279,
-+     IVEC3 = 280,
-+     IVEC4 = 281,
-+     VEC2 = 282,
-+     VEC3 = 283,
-+     VEC4 = 284,
-+     MATRIX2 = 285,
-+     MATRIX3 = 286,
-+     MATRIX4 = 287,
-+     IN_QUAL = 288,
-+     OUT_QUAL = 289,
-+     INOUT_QUAL = 290,
-+     UNIFORM = 291,
-+     VARYING = 292,
-+     STRUCT = 293,
-+     VOID_TYPE = 294,
-+     WHILE = 295,
-+     SAMPLER2D = 296,
-+     SAMPLERCUBE = 297,
-+     SAMPLER_EXTERNAL_OES = 298,
-+     SAMPLER2DRECT = 299,
-+     IDENTIFIER = 300,
-+     TYPE_NAME = 301,
-+     FLOATCONSTANT = 302,
-+     INTCONSTANT = 303,
-+     BOOLCONSTANT = 304,
-+     FIELD_SELECTION = 305,
-+     LEFT_OP = 306,
-+     RIGHT_OP = 307,
-+     INC_OP = 308,
-+     DEC_OP = 309,
-+     LE_OP = 310,
-+     GE_OP = 311,
-+     EQ_OP = 312,
-+     NE_OP = 313,
-+     AND_OP = 314,
-+     OR_OP = 315,
-+     XOR_OP = 316,
-+     MUL_ASSIGN = 317,
-+     DIV_ASSIGN = 318,
-+     ADD_ASSIGN = 319,
-+     MOD_ASSIGN = 320,
-+     LEFT_ASSIGN = 321,
-+     RIGHT_ASSIGN = 322,
-+     AND_ASSIGN = 323,
-+     XOR_ASSIGN = 324,
-+     OR_ASSIGN = 325,
-+     SUB_ASSIGN = 326,
-+     LEFT_PAREN = 327,
-+     RIGHT_PAREN = 328,
-+     LEFT_BRACKET = 329,
-+     RIGHT_BRACKET = 330,
-+     LEFT_BRACE = 331,
-+     RIGHT_BRACE = 332,
-+     DOT = 333,
-+     COMMA = 334,
-+     COLON = 335,
-+     EQUAL = 336,
-+     SEMICOLON = 337,
-+     BANG = 338,
-+     DASH = 339,
-+     TILDE = 340,
-+     PLUS = 341,
-+     STAR = 342,
-+     SLASH = 343,
-+     PERCENT = 344,
-+     LEFT_ANGLE = 345,
-+     RIGHT_ANGLE = 346,
-+     VERTICAL_BAR = 347,
-+     CARET = 348,
-+     AMPERSAND = 349,
-+     QUESTION = 350
-+   };
-+#endif
-+/* Tokens.  */
-+#define INVARIANT 258
-+#define HIGH_PRECISION 259
-+#define MEDIUM_PRECISION 260
-+#define LOW_PRECISION 261
-+#define PRECISION 262
-+#define ATTRIBUTE 263
-+#define CONST_QUAL 264
-+#define BOOL_TYPE 265
-+#define FLOAT_TYPE 266
-+#define INT_TYPE 267
-+#define BREAK 268
-+#define CONTINUE 269
-+#define DO 270
-+#define ELSE 271
-+#define FOR 272
-+#define IF 273
-+#define DISCARD 274
-+#define RETURN 275
-+#define BVEC2 276
-+#define BVEC3 277
-+#define BVEC4 278
-+#define IVEC2 279
-+#define IVEC3 280
-+#define IVEC4 281
-+#define VEC2 282
-+#define VEC3 283
-+#define VEC4 284
-+#define MATRIX2 285
-+#define MATRIX3 286
-+#define MATRIX4 287
-+#define IN_QUAL 288
-+#define OUT_QUAL 289
-+#define INOUT_QUAL 290
-+#define UNIFORM 291
-+#define VARYING 292
-+#define STRUCT 293
-+#define VOID_TYPE 294
-+#define WHILE 295
-+#define SAMPLER2D 296
-+#define SAMPLERCUBE 297
-+#define SAMPLER_EXTERNAL_OES 298
-+#define SAMPLER2DRECT 299
-+#define IDENTIFIER 300
-+#define TYPE_NAME 301
-+#define FLOATCONSTANT 302
-+#define INTCONSTANT 303
-+#define BOOLCONSTANT 304
-+#define FIELD_SELECTION 305
-+#define LEFT_OP 306
-+#define RIGHT_OP 307
-+#define INC_OP 308
-+#define DEC_OP 309
-+#define LE_OP 310
-+#define GE_OP 311
-+#define EQ_OP 312
-+#define NE_OP 313
-+#define AND_OP 314
-+#define OR_OP 315
-+#define XOR_OP 316
-+#define MUL_ASSIGN 317
-+#define DIV_ASSIGN 318
-+#define ADD_ASSIGN 319
-+#define MOD_ASSIGN 320
-+#define LEFT_ASSIGN 321
-+#define RIGHT_ASSIGN 322
-+#define AND_ASSIGN 323
-+#define XOR_ASSIGN 324
-+#define OR_ASSIGN 325
-+#define SUB_ASSIGN 326
-+#define LEFT_PAREN 327
-+#define RIGHT_PAREN 328
-+#define LEFT_BRACKET 329
-+#define RIGHT_BRACKET 330
-+#define LEFT_BRACE 331
-+#define RIGHT_BRACE 332
-+#define DOT 333
-+#define COMMA 334
-+#define COLON 335
-+#define EQUAL 336
-+#define SEMICOLON 337
-+#define BANG 338
-+#define DASH 339
-+#define TILDE 340
-+#define PLUS 341
-+#define STAR 342
-+#define SLASH 343
-+#define PERCENT 344
-+#define LEFT_ANGLE 345
-+#define RIGHT_ANGLE 346
-+#define VERTICAL_BAR 347
-+#define CARET 348
-+#define AMPERSAND 349
-+#define QUESTION 350
-+
-+
-+
-+
-+/* Copy the first part of user declarations.  */
-+
-+
-+//
-+// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style license that can be
-+// found in the LICENSE file.
-+//
-+
-+// This file is auto-generated by generate_parser.sh. DO NOT EDIT!
-+
-+// Ignore errors in auto-generated code.
-+#if defined(__GNUC__)
-+#pragma GCC diagnostic ignored "-Wunused-function"
-+#pragma GCC diagnostic ignored "-Wunused-variable"
-+#pragma GCC diagnostic ignored "-Wswitch-enum"
-+#elif defined(_MSC_VER)
-+#pragma warning(disable: 4065)
-+#pragma warning(disable: 4189)
-+#pragma warning(disable: 4505)
-+#pragma warning(disable: 4701)
-+#endif
-+
-+#include "compiler/SymbolTable.h"
-+#include "compiler/ParseHelper.h"
-+#include "GLSLANG/ShaderLang.h"
-+
-+#define YYENABLE_NLS 0
-+#define YYLTYPE_IS_TRIVIAL 1
-+
-+#define YYLEX_PARAM context->scanner
-+
-+
-+/* Enabling traces.  */
-+#ifndef YYDEBUG
-+# define YYDEBUG 0
-+#endif
-+
-+/* Enabling verbose error messages.  */
-+#ifdef YYERROR_VERBOSE
-+# undef YYERROR_VERBOSE
-+# define YYERROR_VERBOSE 1
-+#else
-+# define YYERROR_VERBOSE 0
-+#endif
-+
-+/* Enabling the token table.  */
-+#ifndef YYTOKEN_TABLE
-+# define YYTOKEN_TABLE 0
-+#endif
-+
-+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-+typedef union YYSTYPE
-+
-+{
-+    struct {
-+        TSourceLoc line;
-+        union {
-+            TString *string;
-+            float f;
-+            int i;
-+            bool b;
-+        };
-+        TSymbol* symbol;
-+    } lex;
-+    struct {
-+        TSourceLoc line;
-+        TOperator op;
-+        union {
-+            TIntermNode* intermNode;
-+            TIntermNodePair nodePair;
-+            TIntermTyped* intermTypedNode;
-+            TIntermAggregate* intermAggregate;
-+        };
-+        union {
-+            TPublicType type;
-+            TPrecision precision;
-+            TQualifier qualifier;
-+            TFunction* function;
-+            TParameter param;
-+            TTypeLine typeLine;
-+            TTypeList* typeList;
-+        };
-+    } interm;
-+}
-+/* Line 193 of yacc.c.  */
-+
-+	YYSTYPE;
-+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-+# define YYSTYPE_IS_DECLARED 1
-+# define YYSTYPE_IS_TRIVIAL 1
-+#endif
-+
-+
-+
-+/* Copy the second part of user declarations.  */
-+
-+
-+extern int yylex(YYSTYPE* yylval_param, void* yyscanner);
-+extern void yyerror(TParseContext* context, const char* reason);
-+
-+#define FRAG_VERT_ONLY(S, L) {  \
-+    if (context->shaderType != SH_FRAGMENT_SHADER &&  \
-+        context->shaderType != SH_VERTEX_SHADER) {  \
-+        context->error(L, " supported in vertex/fragment shaders only ", S);  \
-+        context->recover();  \
-+    }  \
-+}
-+
-+#define VERTEX_ONLY(S, L) {  \
-+    if (context->shaderType != SH_VERTEX_SHADER) {  \
-+        context->error(L, " supported in vertex shaders only ", S);  \
-+        context->recover();  \
-+    }  \
-+}
-+
-+#define FRAG_ONLY(S, L) {  \
-+    if (context->shaderType != SH_FRAGMENT_SHADER) {  \
-+        context->error(L, " supported in fragment shaders only ", S);  \
-+        context->recover();  \
-+    }  \
-+}
-+
-+
-+/* Line 216 of yacc.c.  */
-+
-+
-+#ifdef short
-+# undef short
-+#endif
-+
-+#ifdef YYTYPE_UINT8
-+typedef YYTYPE_UINT8 yytype_uint8;
-+#else
-+typedef unsigned char yytype_uint8;
-+#endif
-+
-+#ifdef YYTYPE_INT8
-+typedef YYTYPE_INT8 yytype_int8;
-+#elif (defined __STDC__ || defined __C99__FUNC__ \
-+     || defined __cplusplus || defined _MSC_VER)
-+typedef signed char yytype_int8;
-+#else
-+typedef short int yytype_int8;
-+#endif
-+
-+#ifdef YYTYPE_UINT16
-+typedef YYTYPE_UINT16 yytype_uint16;
-+#else
-+typedef unsigned short int yytype_uint16;
-+#endif
-+
-+#ifdef YYTYPE_INT16
-+typedef YYTYPE_INT16 yytype_int16;
-+#else
-+typedef short int yytype_int16;
-+#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 && (defined __STDC__ || defined __C99__FUNC__ \
-+     || defined __cplusplus || defined _MSC_VER)
-+#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-+#  define YYSIZE_T size_t
-+# else
-+#  define YYSIZE_T unsigned int
-+# endif
-+#endif
-+
-+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
-+
-+#ifndef YY_
-+# if YYENABLE_NLS
-+#  if ENABLE_NLS
-+#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
-+#   define YY_(msgid) dgettext ("bison-runtime", msgid)
-+#  endif
-+# endif
-+# ifndef YY_
-+#  define YY_(msgid) msgid
-+# endif
-+#endif
-+
-+/* Suppress unused-variable warnings by "using" E.  */
-+#if ! defined lint || defined __GNUC__
-+# define YYUSE(e) ((void) (e))
-+#else
-+# define YYUSE(e) /* empty */
-+#endif
-+
-+/* Identity function, used to suppress warnings about constant conditions.  */
-+#ifndef lint
-+# define YYID(n) (n)
-+#else
-+#if (defined __STDC__ || defined __C99__FUNC__ \
-+     || defined __cplusplus || defined _MSC_VER)
-+static int
-+YYID (int i)
-+#else
-+static int
-+YYID (i)
-+    int i;
-+#endif
-+{
-+  return i;
-+}
-+#endif
-+
-+#if ! defined yyoverflow || YYERROR_VERBOSE
-+
-+/* The parser invokes alloca or malloc; define the necessary symbols.  */
-+
-+# ifdef YYSTACK_USE_ALLOCA
-+#  if YYSTACK_USE_ALLOCA
-+#   ifdef __GNUC__
-+#    define YYSTACK_ALLOC __builtin_alloca
-+#   elif defined __BUILTIN_VA_ARG_INCR
-+#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
-+#   elif defined _AIX
-+#    define YYSTACK_ALLOC __alloca
-+#   elif defined _MSC_VER
-+#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
-+#    define alloca _alloca
-+#   else
-+#    define YYSTACK_ALLOC alloca
-+#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
-+     || defined __cplusplus || defined _MSC_VER)
-+#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-+#     ifndef _STDLIB_H
-+#      define _STDLIB_H 1
-+#     endif
-+#    endif
-+#   endif
-+#  endif
-+# endif
-+
-+# ifdef YYSTACK_ALLOC
-+   /* Pacify GCC's `empty if-body' warning.  */
-+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
-+#  ifndef YYSTACK_ALLOC_MAXIMUM
-+    /* The OS might guarantee only one guard page at the bottom of the stack,
-+       and a page size can be as small as 4096 bytes.  So we cannot safely
-+       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
-+       to allow for a few compiler-allocated temporary stack slots.  */
-+#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
-+#  endif
-+# else
-+#  define YYSTACK_ALLOC YYMALLOC
-+#  define YYSTACK_FREE YYFREE
-+#  ifndef YYSTACK_ALLOC_MAXIMUM
-+#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
-+#  endif
-+#  if (defined __cplusplus && ! defined _STDLIB_H \
-+       && ! ((defined YYMALLOC || defined malloc) \
-+	     && (defined YYFREE || defined free)))
-+#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-+#   ifndef _STDLIB_H
-+#    define _STDLIB_H 1
-+#   endif
-+#  endif
-+#  ifndef YYMALLOC
-+#   define YYMALLOC malloc
-+#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
-+     || defined __cplusplus || defined _MSC_VER)
-+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
-+#   endif
-+#  endif
-+#  ifndef YYFREE
-+#   define YYFREE free
-+#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
-+     || defined __cplusplus || defined _MSC_VER)
-+void free (void *); /* INFRINGES ON USER NAME SPACE */
-+#   endif
-+#  endif
-+# endif
-+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
-+
-+
-+#if (! defined yyoverflow \
-+     && (! defined __cplusplus \
-+	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
-+
-+/* A type that is properly aligned for any stack member.  */
-+union yyalloc
-+{
-+  yytype_int16 yyss;
-+  YYSTYPE yyvs;
-+  };
-+
-+/* The size of the maximum gap between one aligned stack and the next.  */
-+# define YYSTACK_GAP_MAXIMUM (sizeof (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)) \
-+      + YYSTACK_GAP_MAXIMUM)
-+
-+/* Copy COUNT objects from FROM to TO.  The source and destination do
-+   not overlap.  */
-+# ifndef YYCOPY
-+#  if defined __GNUC__ && 1 < __GNUC__
-+#   define YYCOPY(To, From, Count) \
-+      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
-+#  else
-+#   define YYCOPY(To, From, Count)		\
-+      do					\
-+	{					\
-+	  YYSIZE_T yyi;				\
-+	  for (yyi = 0; yyi < (Count); yyi++)	\
-+	    (To)[yyi] = (From)[yyi];		\
-+	}					\
-+      while (YYID (0))
-+#  endif
-+# endif
-+
-+/* Relocate STACK from its old location to the new one.  The
-+   local variables YYSIZE and YYSTACKSIZE give the old and new number of
-+   elements in the stack, and YYPTR gives the new location of the
-+   stack.  Advance YYPTR to a properly aligned location for the next
-+   stack.  */
-+# define YYSTACK_RELOCATE(Stack)					\
-+    do									\
-+      {									\
-+	YYSIZE_T yynewbytes;						\
-+	YYCOPY (&yyptr->Stack, Stack, yysize);				\
-+	Stack = &yyptr->Stack;						\
-+	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-+	yyptr += yynewbytes / sizeof (*yyptr);				\
-+      }									\
-+    while (YYID (0))
-+
-+#endif
-+
-+/* YYFINAL -- State number of the termination state.  */
-+#define YYFINAL  71
-+/* YYLAST -- Last index in YYTABLE.  */
-+#define YYLAST   1416
-+
-+/* YYNTOKENS -- Number of terminals.  */
-+#define YYNTOKENS  96
-+/* YYNNTS -- Number of nonterminals.  */
-+#define YYNNTS  83
-+/* YYNRULES -- Number of rules.  */
-+#define YYNRULES  201
-+/* YYNRULES -- Number of states.  */
-+#define YYNSTATES  304
-+
-+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
-+#define YYUNDEFTOK  2
-+#define YYMAXUTOK   350
-+
-+#define YYTRANSLATE(YYX)						\
-+  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
-+
-+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
-+static const yytype_uint8 yytranslate[] =
-+{
-+       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-+       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
-+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-+      95
-+};
-+
-+#if YYDEBUG
-+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
-+   YYRHS.  */
-+static const yytype_uint16 yyprhs[] =
-+{
-+       0,     0,     3,     5,     7,     9,    11,    13,    17,    19,
-+      24,    26,    30,    33,    36,    38,    40,    42,    46,    49,
-+      52,    55,    57,    60,    64,    67,    69,    71,    73,    75,
-+      78,    81,    84,    86,    88,    90,    92,    96,   100,   102,
-+     106,   110,   112,   114,   118,   122,   126,   130,   132,   136,
-+     140,   142,   144,   146,   148,   152,   154,   158,   160,   164,
-+     166,   172,   174,   178,   180,   182,   184,   186,   188,   190,
-+     194,   196,   199,   202,   207,   210,   212,   214,   217,   221,
-+     225,   228,   234,   238,   241,   245,   248,   249,   251,   253,
-+     255,   257,   259,   263,   269,   276,   282,   284,   287,   292,
-+     298,   303,   306,   308,   311,   313,   315,   317,   320,   322,
-+     324,   327,   329,   331,   333,   335,   340,   342,   344,   346,
-+     348,   350,   352,   354,   356,   358,   360,   362,   364,   366,
-+     368,   370,   372,   374,   376,   378,   380,   382,   384,   385,
-+     392,   393,   399,   401,   404,   408,   410,   414,   416,   421,
-+     423,   425,   427,   429,   431,   433,   435,   437,   439,   442,
-+     443,   444,   450,   452,   454,   455,   458,   459,   462,   465,
-+     469,   471,   474,   476,   479,   485,   489,   491,   493,   498,
-+     499,   506,   507,   516,   517,   525,   527,   529,   531,   532,
-+     535,   539,   542,   545,   548,   552,   555,   557,   560,   562,
-+     564,   565
-+};
-+
-+/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
-+static const yytype_int16 yyrhs[] =
-+{
-+     175,     0,    -1,    45,    -1,    97,    -1,    48,    -1,    47,
-+      -1,    49,    -1,    72,   124,    73,    -1,    98,    -1,    99,
-+      74,   100,    75,    -1,   101,    -1,    99,    78,    50,    -1,
-+      99,    53,    -1,    99,    54,    -1,   124,    -1,   102,    -1,
-+     103,    -1,    99,    78,   103,    -1,   105,    73,    -1,   104,
-+      73,    -1,   106,    39,    -1,   106,    -1,   106,   122,    -1,
-+     105,    79,   122,    -1,   107,    72,    -1,   142,    -1,    45,
-+      -1,    50,    -1,    99,    -1,    53,   108,    -1,    54,   108,
-+      -1,   109,   108,    -1,    86,    -1,    84,    -1,    83,    -1,
-+     108,    -1,   110,    87,   108,    -1,   110,    88,   108,    -1,
-+     110,    -1,   111,    86,   110,    -1,   111,    84,   110,    -1,
-+     111,    -1,   112,    -1,   113,    90,   112,    -1,   113,    91,
-+     112,    -1,   113,    55,   112,    -1,   113,    56,   112,    -1,
-+     113,    -1,   114,    57,   113,    -1,   114,    58,   113,    -1,
-+     114,    -1,   115,    -1,   116,    -1,   117,    -1,   118,    59,
-+     117,    -1,   118,    -1,   119,    61,   118,    -1,   119,    -1,
-+     120,    60,   119,    -1,   120,    -1,   120,    95,   124,    80,
-+     122,    -1,   121,    -1,   108,   123,   122,    -1,    81,    -1,
-+      62,    -1,    63,    -1,    64,    -1,    71,    -1,   122,    -1,
-+     124,    79,   122,    -1,   121,    -1,   127,    82,    -1,   135,
-+      82,    -1,     7,   140,   141,    82,    -1,   128,    73,    -1,
-+     130,    -1,   129,    -1,   130,   132,    -1,   129,    79,   132,
-+      -1,   137,    45,    72,    -1,   139,    45,    -1,   139,    45,
-+      74,   125,    75,    -1,   138,   133,   131,    -1,   133,   131,
-+      -1,   138,   133,   134,    -1,   133,   134,    -1,    -1,    33,
-+      -1,    34,    -1,    35,    -1,   139,    -1,   136,    -1,   135,
-+      79,    45,    -1,   135,    79,    45,    74,    75,    -1,   135,
-+      79,    45,    74,   125,    75,    -1,   135,    79,    45,    81,
-+     150,    -1,   137,    -1,   137,    45,    -1,   137,    45,    74,
-+      75,    -1,   137,    45,    74,   125,    75,    -1,   137,    45,
-+      81,   150,    -1,     3,    45,    -1,   139,    -1,   138,   139,
-+      -1,     9,    -1,     8,    -1,    37,    -1,     3,    37,    -1,
-+      36,    -1,   141,    -1,   140,   141,    -1,     4,    -1,     5,
-+      -1,     6,    -1,   142,    -1,   142,    74,   125,    75,    -1,
-+      39,    -1,    11,    -1,    12,    -1,    10,    -1,    27,    -1,
-+      28,    -1,    29,    -1,    21,    -1,    22,    -1,    23,    -1,
-+      24,    -1,    25,    -1,    26,    -1,    30,    -1,    31,    -1,
-+      32,    -1,    41,    -1,    42,    -1,    43,    -1,    44,    -1,
-+     143,    -1,    46,    -1,    -1,    38,    45,    76,   144,   146,
-+      77,    -1,    -1,    38,    76,   145,   146,    77,    -1,   147,
-+      -1,   146,   147,    -1,   139,   148,    82,    -1,   149,    -1,
-+     148,    79,   149,    -1,    45,    -1,    45,    74,   125,    75,
-+      -1,   122,    -1,   126,    -1,   154,    -1,   153,    -1,   151,
-+      -1,   163,    -1,   164,    -1,   167,    -1,   174,    -1,    76,
-+      77,    -1,    -1,    -1,    76,   155,   162,   156,    77,    -1,
-+     161,    -1,   153,    -1,    -1,   159,   161,    -1,    -1,   160,
-+     153,    -1,    76,    77,    -1,    76,   162,    77,    -1,   152,
-+      -1,   162,   152,    -1,    82,    -1,   124,    82,    -1,    18,
-+      72,   124,    73,   165,    -1,   158,    16,   158,    -1,   158,
-+      -1,   124,    -1,   137,    45,    81,   150,    -1,    -1,    40,
-+      72,   168,   166,    73,   157,    -1,    -1,    15,   169,   158,
-+      40,    72,   124,    73,    82,    -1,    -1,    17,    72,   170,
-+     171,   173,    73,   157,    -1,   163,    -1,   151,    -1,   166,
-+      -1,    -1,   172,    82,    -1,   172,    82,   124,    -1,    14,
-+      82,    -1,    13,    82,    -1,    20,    82,    -1,    20,   124,
-+      82,    -1,    19,    82,    -1,   176,    -1,   175,   176,    -1,
-+     177,    -1,   126,    -1,    -1,   127,   178,   161,    -1
-+};
-+
-+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
-+static const yytype_uint16 yyrline[] =
-+{
-+       0,   168,   168,   203,   206,   219,   224,   229,   235,   238,
-+     317,   320,   421,   431,   444,   452,   552,   555,   563,   567,
-+     574,   578,   585,   591,   600,   608,   663,   670,   680,   683,
-+     693,   703,   724,   725,   726,   731,   732,   741,   753,   754,
-+     762,   773,   777,   778,   788,   798,   808,   821,   822,   832,
-+     845,   849,   853,   857,   858,   871,   872,   885,   886,   899,
-+     900,   917,   918,   931,   932,   933,   934,   935,   939,   942,
-+     953,   961,   988,   993,  1000,  1038,  1041,  1048,  1056,  1077,
-+    1098,  1109,  1138,  1143,  1153,  1158,  1168,  1171,  1174,  1177,
-+    1183,  1190,  1193,  1215,  1233,  1257,  1280,  1284,  1302,  1310,
-+    1342,  1362,  1451,  1460,  1483,  1486,  1492,  1500,  1508,  1516,
-+    1526,  1533,  1536,  1539,  1545,  1548,  1563,  1567,  1571,  1575,
-+    1584,  1589,  1594,  1599,  1604,  1609,  1614,  1619,  1624,  1629,
-+    1635,  1641,  1647,  1652,  1657,  1666,  1675,  1680,  1693,  1693,
-+    1707,  1707,  1716,  1719,  1734,  1770,  1774,  1780,  1788,  1804,
-+    1808,  1812,  1813,  1819,  1820,  1821,  1822,  1823,  1827,  1828,
-+    1828,  1828,  1838,  1839,  1843,  1843,  1844,  1844,  1849,  1852,
-+    1862,  1865,  1871,  1872,  1876,  1884,  1888,  1898,  1903,  1920,
-+    1920,  1925,  1925,  1932,  1932,  1940,  1943,  1949,  1952,  1958,
-+    1962,  1969,  1976,  1983,  1990,  2001,  2010,  2014,  2021,  2024,
-+    2030,  2030
-+};
-+#endif
-+
-+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
-+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
-+   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
-+static const char *const yytname[] =
-+{
-+  "$end", "error", "$undefined", "INVARIANT", "HIGH_PRECISION",
-+  "MEDIUM_PRECISION", "LOW_PRECISION", "PRECISION", "ATTRIBUTE",
-+  "CONST_QUAL", "BOOL_TYPE", "FLOAT_TYPE", "INT_TYPE", "BREAK", "CONTINUE",
-+  "DO", "ELSE", "FOR", "IF", "DISCARD", "RETURN", "BVEC2", "BVEC3",
-+  "BVEC4", "IVEC2", "IVEC3", "IVEC4", "VEC2", "VEC3", "VEC4", "MATRIX2",
-+  "MATRIX3", "MATRIX4", "IN_QUAL", "OUT_QUAL", "INOUT_QUAL", "UNIFORM",
-+  "VARYING", "STRUCT", "VOID_TYPE", "WHILE", "SAMPLER2D", "SAMPLERCUBE",
-+  "SAMPLER_EXTERNAL_OES", "SAMPLER2DRECT", "IDENTIFIER", "TYPE_NAME",
-+  "FLOATCONSTANT", "INTCONSTANT", "BOOLCONSTANT", "FIELD_SELECTION",
-+  "LEFT_OP", "RIGHT_OP", "INC_OP", "DEC_OP", "LE_OP", "GE_OP", "EQ_OP",
-+  "NE_OP", "AND_OP", "OR_OP", "XOR_OP", "MUL_ASSIGN", "DIV_ASSIGN",
-+  "ADD_ASSIGN", "MOD_ASSIGN", "LEFT_ASSIGN", "RIGHT_ASSIGN", "AND_ASSIGN",
-+  "XOR_ASSIGN", "OR_ASSIGN", "SUB_ASSIGN", "LEFT_PAREN", "RIGHT_PAREN",
-+  "LEFT_BRACKET", "RIGHT_BRACKET", "LEFT_BRACE", "RIGHT_BRACE", "DOT",
-+  "COMMA", "COLON", "EQUAL", "SEMICOLON", "BANG", "DASH", "TILDE", "PLUS",
-+  "STAR", "SLASH", "PERCENT", "LEFT_ANGLE", "RIGHT_ANGLE", "VERTICAL_BAR",
-+  "CARET", "AMPERSAND", "QUESTION", "$accept", "variable_identifier",
-+  "primary_expression", "postfix_expression", "integer_expression",
-+  "function_call", "function_call_or_method", "function_call_generic",
-+  "function_call_header_no_parameters",
-+  "function_call_header_with_parameters", "function_call_header",
-+  "function_identifier", "unary_expression", "unary_operator",
-+  "multiplicative_expression", "additive_expression", "shift_expression",
-+  "relational_expression", "equality_expression", "and_expression",
-+  "exclusive_or_expression", "inclusive_or_expression",
-+  "logical_and_expression", "logical_xor_expression",
-+  "logical_or_expression", "conditional_expression",
-+  "assignment_expression", "assignment_operator", "expression",
-+  "constant_expression", "declaration", "function_prototype",
-+  "function_declarator", "function_header_with_parameters",
-+  "function_header", "parameter_declarator", "parameter_declaration",
-+  "parameter_qualifier", "parameter_type_specifier",
-+  "init_declarator_list", "single_declaration", "fully_specified_type",
-+  "type_qualifier", "type_specifier", "precision_qualifier",
-+  "type_specifier_no_prec", "type_specifier_nonarray", "struct_specifier",
-+  "@1", "@2", "struct_declaration_list", "struct_declaration",
-+  "struct_declarator_list", "struct_declarator", "initializer",
-+  "declaration_statement", "statement", "simple_statement",
-+  "compound_statement", "@3", "@4", "statement_no_new_scope",
-+  "statement_with_scope", "@5", "@6", "compound_statement_no_new_scope",
-+  "statement_list", "expression_statement", "selection_statement",
-+  "selection_rest_statement", "condition", "iteration_statement", "@7",
-+  "@8", "@9", "for_init_statement", "conditionopt", "for_rest_statement",
-+  "jump_statement", "translation_unit", "external_declaration",
-+  "function_definition", "@10", 0
-+};
-+#endif
-+
-+# ifdef YYPRINT
-+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
-+   token YYLEX-NUM.  */
-+static const yytype_uint16 yytoknum[] =
-+{
-+       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-+     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-+     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-+     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
-+     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
-+     345,   346,   347,   348,   349,   350
-+};
-+# endif
-+
-+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-+static const yytype_uint8 yyr1[] =
-+{
-+       0,    96,    97,    98,    98,    98,    98,    98,    99,    99,
-+      99,    99,    99,    99,   100,   101,   102,   102,   103,   103,
-+     104,   104,   105,   105,   106,   107,   107,   107,   108,   108,
-+     108,   108,   109,   109,   109,   110,   110,   110,   111,   111,
-+     111,   112,   113,   113,   113,   113,   113,   114,   114,   114,
-+     115,   116,   117,   118,   118,   119,   119,   120,   120,   121,
-+     121,   122,   122,   123,   123,   123,   123,   123,   124,   124,
-+     125,   126,   126,   126,   127,   128,   128,   129,   129,   130,
-+     131,   131,   132,   132,   132,   132,   133,   133,   133,   133,
-+     134,   135,   135,   135,   135,   135,   136,   136,   136,   136,
-+     136,   136,   137,   137,   138,   138,   138,   138,   138,   139,
-+     139,   140,   140,   140,   141,   141,   142,   142,   142,   142,
-+     142,   142,   142,   142,   142,   142,   142,   142,   142,   142,
-+     142,   142,   142,   142,   142,   142,   142,   142,   144,   143,
-+     145,   143,   146,   146,   147,   148,   148,   149,   149,   150,
-+     151,   152,   152,   153,   153,   153,   153,   153,   154,   155,
-+     156,   154,   157,   157,   159,   158,   160,   158,   161,   161,
-+     162,   162,   163,   163,   164,   165,   165,   166,   166,   168,
-+     167,   169,   167,   170,   167,   171,   171,   172,   172,   173,
-+     173,   174,   174,   174,   174,   174,   175,   175,   176,   176,
-+     178,   177
-+};
-+
-+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
-+static const yytype_uint8 yyr2[] =
-+{
-+       0,     2,     1,     1,     1,     1,     1,     3,     1,     4,
-+       1,     3,     2,     2,     1,     1,     1,     3,     2,     2,
-+       2,     1,     2,     3,     2,     1,     1,     1,     1,     2,
-+       2,     2,     1,     1,     1,     1,     3,     3,     1,     3,
-+       3,     1,     1,     3,     3,     3,     3,     1,     3,     3,
-+       1,     1,     1,     1,     3,     1,     3,     1,     3,     1,
-+       5,     1,     3,     1,     1,     1,     1,     1,     1,     3,
-+       1,     2,     2,     4,     2,     1,     1,     2,     3,     3,
-+       2,     5,     3,     2,     3,     2,     0,     1,     1,     1,
-+       1,     1,     3,     5,     6,     5,     1,     2,     4,     5,
-+       4,     2,     1,     2,     1,     1,     1,     2,     1,     1,
-+       2,     1,     1,     1,     1,     4,     1,     1,     1,     1,
-+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-+       1,     1,     1,     1,     1,     1,     1,     1,     0,     6,
-+       0,     5,     1,     2,     3,     1,     3,     1,     4,     1,
-+       1,     1,     1,     1,     1,     1,     1,     1,     2,     0,
-+       0,     5,     1,     1,     0,     2,     0,     2,     2,     3,
-+       1,     2,     1,     2,     5,     3,     1,     1,     4,     0,
-+       6,     0,     8,     0,     7,     1,     1,     1,     0,     2,
-+       3,     2,     2,     2,     3,     2,     1,     2,     1,     1,
-+       0,     3
-+};
-+
-+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
-+   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
-+   means the default is an error.  */
-+static const yytype_uint8 yydefact[] =
-+{
-+       0,     0,   111,   112,   113,     0,   105,   104,   119,   117,
-+     118,   123,   124,   125,   126,   127,   128,   120,   121,   122,
-+     129,   130,   131,   108,   106,     0,   116,   132,   133,   134,
-+     135,   137,   199,   200,     0,    76,    86,     0,    91,    96,
-+       0,   102,     0,   109,   114,   136,     0,   196,   198,   107,
-+     101,     0,     0,   140,    71,     0,    74,    86,     0,    87,
-+      88,    89,    77,     0,    86,     0,    72,    97,   103,   110,
-+       0,     1,   197,     0,   138,     0,     0,   201,    78,    83,
-+      85,    90,     0,    92,    79,     0,     0,     2,     5,     4,
-+       6,    27,     0,     0,     0,    34,    33,    32,     3,     8,
-+      28,    10,    15,    16,     0,     0,    21,     0,    35,     0,
-+      38,    41,    42,    47,    50,    51,    52,    53,    55,    57,
-+      59,    70,     0,    25,    73,     0,     0,     0,   142,     0,
-+       0,   181,     0,     0,     0,     0,     0,   159,   168,   172,
-+      35,    61,    68,     0,   150,     0,   114,   153,   170,   152,
-+     151,     0,   154,   155,   156,   157,    80,    82,    84,     0,
-+       0,    98,     0,   149,   100,    29,    30,     0,    12,    13,
-+       0,     0,    19,    18,     0,    20,    22,    24,    31,     0,
-+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-+       0,     0,     0,   115,     0,   147,     0,   145,   141,   143,
-+     192,   191,   166,   183,     0,   195,   193,     0,   179,   158,
-+       0,    64,    65,    66,    67,    63,     0,     0,   173,   169,
-+     171,     0,    93,     0,    95,    99,     7,     0,    14,    26,
-+      11,    17,    23,    36,    37,    40,    39,    45,    46,    43,
-+      44,    48,    49,    54,    56,    58,     0,   139,     0,     0,
-+     144,     0,     0,     0,     0,     0,   194,     0,   160,    62,
-+      69,     0,    94,     9,     0,     0,   146,     0,   165,   167,
-+     186,   185,   188,   166,   177,     0,     0,     0,    81,    60,
-+     148,     0,   187,     0,     0,   176,   174,     0,     0,   161,
-+       0,   189,     0,   166,     0,   163,   180,   162,     0,   190,
-+     184,   175,   178,   182
-+};
-+
-+/* YYDEFGOTO[NTERM-NUM].  */
-+static const yytype_int16 yydefgoto[] =
-+{
-+      -1,    98,    99,   100,   227,   101,   102,   103,   104,   105,
-+     106,   107,   140,   109,   110,   111,   112,   113,   114,   115,
-+     116,   117,   118,   119,   120,   141,   142,   216,   143,   122,
-+     144,   145,    34,    35,    36,    79,    62,    63,    80,    37,
-+      38,    39,    40,    41,    42,    43,   123,    45,   125,    75,
-+     127,   128,   196,   197,   164,   147,   148,   149,   150,   210,
-+     277,   296,   251,   252,   253,   297,   151,   152,   153,   286,
-+     276,   154,   257,   202,   254,   272,   283,   284,   155,    46,
-+      47,    48,    55
-+};
-+
-+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-+   STATE-NUM.  */
-+#define YYPACT_NINF -266
-+static const yytype_int16 yypact[] =
-+{
-+    1253,   -20,  -266,  -266,  -266,   148,  -266,  -266,  -266,  -266,
-+    -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,
-+    -266,  -266,  -266,  -266,  -266,   -39,  -266,  -266,  -266,  -266,
-+    -266,  -266,  -266,   -18,    -2,     6,    21,   -61,  -266,    51,
-+    1296,  -266,  1370,  -266,    25,  -266,  1209,  -266,  -266,  -266,
-+    -266,  1370,    42,  -266,  -266,    50,  -266,    71,    95,  -266,
-+    -266,  -266,  -266,  1296,   123,   105,  -266,     9,  -266,  -266,
-+     974,  -266,  -266,    81,  -266,  1296,   290,  -266,  -266,  -266,
-+    -266,   125,  1296,   -13,  -266,   776,   974,    99,  -266,  -266,
-+    -266,  -266,   974,   974,   974,  -266,  -266,  -266,  -266,  -266,
-+      35,  -266,  -266,  -266,   100,    -6,  1040,   104,  -266,   974,
-+      36,   -64,  -266,   -21,   102,  -266,  -266,  -266,   113,   117,
-+     -51,  -266,   108,  -266,  -266,  1296,   129,  1109,  -266,    97,
-+     103,  -266,   112,   114,   106,   842,   115,   116,  -266,  -266,
-+      39,  -266,  -266,   -43,  -266,   -18,    47,  -266,  -266,  -266,
-+    -266,   374,  -266,  -266,  -266,  -266,   118,  -266,  -266,   908,
-+     974,  -266,   120,  -266,  -266,  -266,  -266,    19,  -266,  -266,
-+     974,  1333,  -266,  -266,   974,   119,  -266,  -266,  -266,   974,
-+     974,   974,   974,   974,   974,   974,   974,   974,   974,   974,
-+     974,   974,   974,  -266,  1152,   122,   -29,  -266,  -266,  -266,
-+    -266,  -266,   121,  -266,   974,  -266,  -266,     5,  -266,  -266,
-+     458,  -266,  -266,  -266,  -266,  -266,   974,   974,  -266,  -266,
-+    -266,   974,  -266,   137,  -266,  -266,  -266,   138,   111,  -266,
-+     142,  -266,  -266,  -266,  -266,    36,    36,  -266,  -266,  -266,
-+    -266,   -21,   -21,  -266,   113,   117,    82,  -266,   974,   129,
-+    -266,   175,    50,   626,   710,    38,  -266,   197,   458,  -266,
-+    -266,   141,  -266,  -266,   974,   155,  -266,   145,  -266,  -266,
-+    -266,  -266,   197,   121,   111,   186,   159,   160,  -266,  -266,
-+    -266,   974,  -266,   166,   176,   236,  -266,   174,   542,  -266,
-+      43,   974,   542,   121,   974,  -266,  -266,  -266,   177,   111,
-+    -266,  -266,  -266,  -266
-+};
-+
-+/* YYPGOTO[NTERM-NUM].  */
-+static const yytype_int16 yypgoto[] =
-+{
-+    -266,  -266,  -266,  -266,  -266,  -266,  -266,    85,  -266,  -266,
-+    -266,  -266,   -44,  -266,   -15,  -266,   -55,   -19,  -266,  -266,
-+    -266,    72,    70,    73,  -266,   -66,   -83,  -266,   -92,   -73,
-+      13,    14,  -266,  -266,  -266,   180,   206,   201,   184,  -266,
-+    -266,  -241,   -25,   -30,   262,    -4,     0,  -266,  -266,  -266,
-+     143,  -122,  -266,    22,  -145,    16,  -144,  -226,  -266,  -266,
-+    -266,   -17,  -265,  -266,  -266,   -54,    63,    20,  -266,  -266,
-+       4,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,
-+     231,  -266,  -266
-+};
-+
-+/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
-+   positive, shift that token.  If negative, reduce the rule which
-+   number is the opposite.  If zero, do what YYDEFACT says.
-+   If YYTABLE_NINF, syntax error.  */
-+#define YYTABLE_NINF -165
-+static const yytype_int16 yytable[] =
-+{
-+      44,    77,   167,   163,   121,   199,    52,   220,   285,   191,
-+      68,    64,   162,    32,    33,   224,   275,    49,    65,   121,
-+     181,    66,   182,   176,    58,    50,   108,   269,   301,     6,
-+       7,   275,    64,    81,   183,   184,   217,    53,    69,   218,
-+      44,   108,    44,   207,   192,   126,    44,    73,   165,   166,
-+     249,    44,    81,   250,    59,    60,    61,    23,    24,    32,
-+      33,   159,   295,    44,    54,   178,   295,   173,   160,   185,
-+     186,    56,   199,   174,    58,    44,   146,   163,   228,     6,
-+       7,    84,    44,    85,   217,    57,   223,   256,   168,   169,
-+      86,   232,   226,   121,   -75,   126,    67,   126,   217,    70,
-+     246,   211,   212,   213,    59,    60,    61,    23,    24,   170,
-+     214,   273,   255,   171,   220,   108,   298,   217,    74,   -25,
-+     215,    70,   217,   179,   180,    44,    76,    44,   237,   238,
-+     239,   240,    49,   259,   260,   233,   234,   108,   108,   108,
-+     108,   108,   108,   108,   108,   108,   108,   108,   261,   302,
-+      83,   146,     2,     3,     4,   121,    59,    60,    61,   187,
-+     188,   217,   264,   124,   126,   274,   235,   236,   241,   242,
-+     156,   -26,   189,   172,   195,   265,   177,   108,   190,   200,
-+     274,   279,   121,   193,   203,   201,   204,   208,   205,   290,
-+     217,  -116,   221,   209,    44,   225,   248,  -164,   268,   299,
-+      58,     2,     3,     4,   108,     6,     7,     8,     9,    10,
-+     146,   163,   262,   263,   -27,   267,   278,   281,    11,    12,
-+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-+     280,   287,   288,    23,    24,    25,    26,   289,    27,    28,
-+      29,    30,    87,    31,    88,    89,    90,    91,   291,   292,
-+      92,    93,   293,   146,   146,   294,   231,   146,   146,   303,
-+     244,   243,   157,    78,   245,    82,   158,    51,   194,    94,
-+     270,   266,   146,   258,   271,   300,   282,    72,     0,     0,
-+      95,    96,     0,    97,     0,     0,     0,     0,   146,     0,
-+       0,     0,   146,     1,     2,     3,     4,     5,     6,     7,
-+       8,     9,    10,   129,   130,   131,     0,   132,   133,   134,
-+     135,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-+      20,    21,    22,     0,     0,     0,    23,    24,    25,    26,
-+     136,    27,    28,    29,    30,    87,    31,    88,    89,    90,
-+      91,     0,     0,    92,    93,     0,     0,     0,     0,     0,
-+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-+       0,     0,    94,     0,     0,     0,   137,   138,     0,     0,
-+       0,     0,   139,    95,    96,     0,    97,     1,     2,     3,
-+       4,     5,     6,     7,     8,     9,    10,   129,   130,   131,
-+       0,   132,   133,   134,   135,    11,    12,    13,    14,    15,
-+      16,    17,    18,    19,    20,    21,    22,     0,     0,     0,
-+      23,    24,    25,    26,   136,    27,    28,    29,    30,    87,
-+      31,    88,    89,    90,    91,     0,     0,    92,    93,     0,
-+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-+       0,     0,     0,     0,     0,     0,    94,     0,     0,     0,
-+     137,   219,     0,     0,     0,     0,   139,    95,    96,     0,
-+      97,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-+      10,   129,   130,   131,     0,   132,   133,   134,   135,    11,
-+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-+      22,     0,     0,     0,    23,    24,    25,    26,   136,    27,
-+      28,    29,    30,    87,    31,    88,    89,    90,    91,     0,
-+       0,    92,    93,     0,     0,     0,     0,     0,     0,     0,
-+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-+      94,     0,     0,     0,   137,     0,     0,     0,     0,     0,
-+     139,    95,    96,     0,    97,     1,     2,     3,     4,     5,
-+       6,     7,     8,     9,    10,   129,   130,   131,     0,   132,
-+     133,   134,   135,    11,    12,    13,    14,    15,    16,    17,
-+      18,    19,    20,    21,    22,     0,     0,     0,    23,    24,
-+      25,    26,   136,    27,    28,    29,    30,    87,    31,    88,
-+      89,    90,    91,     0,     0,    92,    93,     0,     0,     0,
-+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-+       0,     0,     0,     0,    94,     0,     0,     0,    76,     0,
-+       0,     0,     0,     0,   139,    95,    96,     0,    97,     1,
-+       2,     3,     4,     5,     6,     7,     8,     9,    10,   129,
-+     130,   131,     0,   132,   133,   134,   135,    11,    12,    13,
-+      14,    15,    16,    17,    18,    19,    20,    21,    22,     0,
-+       0,     0,    23,    24,    25,    26,   136,    27,    28,    29,
-+      30,    87,    31,    88,    89,    90,    91,     0,     0,    92,
-+      93,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-+       0,     0,     0,     0,     0,     0,     0,     0,    94,     0,
-+       0,     0,     0,     0,     0,     0,     0,     0,   139,    95,
-+      96,     0,    97,     1,     2,     3,     4,     5,     6,     7,
-+       8,     9,    10,     0,     0,     0,     0,     0,     0,     0,
-+       0,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-+      20,    21,    22,     0,     0,     0,    23,    24,    25,    26,
-+       0,    27,    28,    29,    30,    87,    31,    88,    89,    90,
-+      91,     0,     0,    92,    93,     0,     0,     0,     0,     0,
-+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-+       0,     0,    94,     0,     0,     0,     8,     9,    10,     0,
-+       0,     0,   139,    95,    96,     0,    97,    11,    12,    13,
-+      14,    15,    16,    17,    18,    19,    20,    21,    22,     0,
-+       0,     0,     0,     0,    25,    26,     0,    27,    28,    29,
-+      30,    87,    31,    88,    89,    90,    91,     0,     0,    92,
-+      93,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-+       0,     0,     0,     0,     0,     0,     0,     0,    94,     0,
-+       0,   161,     8,     9,    10,     0,     0,     0,     0,    95,
-+      96,     0,    97,    11,    12,    13,    14,    15,    16,    17,
-+      18,    19,    20,    21,    22,     0,     0,     0,     0,     0,
-+      25,    26,     0,    27,    28,    29,    30,    87,    31,    88,
-+      89,    90,    91,     0,     0,    92,    93,     0,     0,     0,
-+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-+       0,     0,     0,     0,    94,     0,     0,     0,     8,     9,
-+      10,     0,     0,     0,   206,    95,    96,     0,    97,    11,
-+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-+      22,     0,     0,     0,     0,     0,    25,    26,     0,    27,
-+      28,    29,    30,    87,    31,    88,    89,    90,    91,     0,
-+       0,    92,    93,     0,     0,     0,     0,     0,     0,     0,
-+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-+      94,     0,     0,   222,     8,     9,    10,     0,     0,     0,
-+       0,    95,    96,     0,    97,    11,    12,    13,    14,    15,
-+      16,    17,    18,    19,    20,    21,    22,     0,     0,     0,
-+       0,     0,    25,    26,     0,    27,    28,    29,    30,    87,
-+      31,    88,    89,    90,    91,     0,     0,    92,    93,     0,
-+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-+       0,     0,     0,     0,     0,     0,    94,     0,     0,     0,
-+       8,     9,    10,     0,     0,     0,     0,    95,    96,     0,
-+      97,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-+      20,    21,    22,     0,     0,     0,     0,     0,    25,   175,
-+       0,    27,    28,    29,    30,    87,    31,    88,    89,    90,
-+      91,     0,     0,    92,    93,     0,     0,     0,     0,     0,
-+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-+       0,     0,    94,     2,     3,     4,     0,     0,     0,     8,
-+       9,    10,     0,    95,    96,     0,    97,     0,     0,     0,
-+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-+      21,    22,     0,     0,     0,     0,     0,    25,    26,     0,
-+      27,    28,    29,    30,     0,    31,     2,     3,     4,     0,
-+       0,     0,     8,     9,    10,     0,     0,     0,     0,     0,
-+       0,     0,     0,    11,    12,    13,    14,    15,    16,    17,
-+      18,    19,    20,    21,    22,     0,   198,     0,     0,     0,
-+      25,    26,     0,    27,    28,    29,    30,     0,    31,     0,
-+       0,     0,     0,     0,     0,     0,     0,     0,     0,    71,
-+       0,     0,     1,     2,     3,     4,     5,     6,     7,     8,
-+       9,    10,     0,     0,     0,     0,     0,     0,     0,   247,
-+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-+      21,    22,     0,     0,     0,    23,    24,    25,    26,     0,
-+      27,    28,    29,    30,     0,    31,     1,     2,     3,     4,
-+       5,     6,     7,     8,     9,    10,     0,     0,     0,     0,
-+       0,     0,     0,     0,    11,    12,    13,    14,    15,    16,
-+      17,    18,    19,    20,    21,    22,     0,     0,     0,    23,
-+      24,    25,    26,     0,    27,    28,    29,    30,     0,    31,
-+       2,     3,     4,     0,     0,     0,     8,     9,    10,     0,
-+       0,     0,     0,     0,     0,     0,     0,    11,    12,    13,
-+      14,    15,    16,    17,    18,    19,    20,    21,    22,     0,
-+       0,     0,     0,     0,    25,    26,     0,    27,    28,    29,
-+      30,     0,    31,     8,     9,    10,     0,     0,     0,     0,
-+       0,     0,     0,     0,    11,    12,    13,    14,    15,    16,
-+      17,    18,    19,    20,    21,    22,     0,     0,     0,     0,
-+       0,    25,    26,     0,    27,    28,    29,    30,   229,    31,
-+       8,     9,    10,   230,     0,     0,     0,     0,     0,     0,
-+       0,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-+      20,    21,    22,     0,     0,     0,     0,     0,    25,    26,
-+       0,    27,    28,    29,    30,     0,    31
-+};
-+
-+static const yytype_int16 yycheck[] =
-+{
-+       0,    55,    94,    86,    70,   127,    45,   151,   273,    60,
-+      40,    36,    85,     0,     0,   160,   257,    37,    79,    85,
-+      84,    82,    86,   106,     3,    45,    70,   253,   293,     8,
-+       9,   272,    57,    63,    55,    56,    79,    76,    42,    82,
-+      40,    85,    42,   135,    95,    75,    46,    51,    92,    93,
-+      79,    51,    82,    82,    33,    34,    35,    36,    37,    46,
-+      46,    74,   288,    63,    82,   109,   292,    73,    81,    90,
-+      91,    73,   194,    79,     3,    75,    76,   160,   170,     8,
-+       9,    72,    82,    74,    79,    79,   159,    82,    53,    54,
-+      81,   174,    73,   159,    73,   125,    45,   127,    79,    74,
-+     192,    62,    63,    64,    33,    34,    35,    36,    37,    74,
-+      71,    73,   204,    78,   258,   159,    73,    79,    76,    72,
-+      81,    74,    79,    87,    88,   125,    76,   127,   183,   184,
-+     185,   186,    37,   216,   217,   179,   180,   181,   182,   183,
-+     184,   185,   186,   187,   188,   189,   190,   191,   221,   294,
-+      45,   151,     4,     5,     6,   221,    33,    34,    35,    57,
-+      58,    79,    80,    82,   194,   257,   181,   182,   187,   188,
-+      45,    72,    59,    73,    45,   248,    72,   221,    61,    82,
-+     272,   264,   248,    75,    72,    82,    72,    72,    82,   281,
-+      79,    72,    74,    77,   194,    75,    74,    76,   252,   291,
-+       3,     4,     5,     6,   248,     8,     9,    10,    11,    12,
-+     210,   294,    75,    75,    72,    40,    75,    72,    21,    22,
-+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-+      75,    45,    73,    36,    37,    38,    39,    77,    41,    42,
-+      43,    44,    45,    46,    47,    48,    49,    50,    82,    73,
-+      53,    54,    16,   253,   254,    81,   171,   257,   258,    82,
-+     190,   189,    82,    57,   191,    64,    82,     5,   125,    72,
-+     254,   249,   272,   210,   254,   292,   272,    46,    -1,    -1,
-+      83,    84,    -1,    86,    -1,    -1,    -1,    -1,   288,    -1,
-+      -1,    -1,   292,     3,     4,     5,     6,     7,     8,     9,
-+      10,    11,    12,    13,    14,    15,    -1,    17,    18,    19,
-+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-+      30,    31,    32,    -1,    -1,    -1,    36,    37,    38,    39,
-+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-+      50,    -1,    -1,    53,    54,    -1,    -1,    -1,    -1,    -1,
-+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-+      -1,    -1,    72,    -1,    -1,    -1,    76,    77,    -1,    -1,
-+      -1,    -1,    82,    83,    84,    -1,    86,     3,     4,     5,
-+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-+      -1,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-+      26,    27,    28,    29,    30,    31,    32,    -1,    -1,    -1,
-+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-+      46,    47,    48,    49,    50,    -1,    -1,    53,    54,    -1,
-+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-+      -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,
-+      76,    77,    -1,    -1,    -1,    -1,    82,    83,    84,    -1,
-+      86,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-+      12,    13,    14,    15,    -1,    17,    18,    19,    20,    21,
-+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-+      32,    -1,    -1,    -1,    36,    37,    38,    39,    40,    41,
-+      42,    43,    44,    45,    46,    47,    48,    49,    50,    -1,
-+      -1,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-+      72,    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,
-+      82,    83,    84,    -1,    86,     3,     4,     5,     6,     7,
-+       8,     9,    10,    11,    12,    13,    14,    15,    -1,    17,
-+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-+      28,    29,    30,    31,    32,    -1,    -1,    -1,    36,    37,
-+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-+      48,    49,    50,    -1,    -1,    53,    54,    -1,    -1,    -1,
-+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-+      -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
-+      -1,    -1,    -1,    -1,    82,    83,    84,    -1,    86,     3,
-+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-+      14,    15,    -1,    17,    18,    19,    20,    21,    22,    23,
-+      24,    25,    26,    27,    28,    29,    30,    31,    32,    -1,
-+      -1,    -1,    36,    37,    38,    39,    40,    41,    42,    43,
-+      44,    45,    46,    47,    48,    49,    50,    -1,    -1,    53,
-+      54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,
-+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,    83,
-+      84,    -1,    86,     3,     4,     5,     6,     7,     8,     9,
-+      10,    11,    12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-+      -1,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-+      30,    31,    32,    -1,    -1,    -1,    36,    37,    38,    39,
-+      -1,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-+      50,    -1,    -1,    53,    54,    -1,    -1,    -1,    -1,    -1,
-+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-+      -1,    -1,    72,    -1,    -1,    -1,    10,    11,    12,    -1,
-+      -1,    -1,    82,    83,    84,    -1,    86,    21,    22,    23,
-+      24,    25,    26,    27,    28,    29,    30,    31,    32,    -1,
-+      -1,    -1,    -1,    -1,    38,    39,    -1,    41,    42,    43,
-+      44,    45,    46,    47,    48,    49,    50,    -1,    -1,    53,
-+      54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,
-+      -1,    75,    10,    11,    12,    -1,    -1,    -1,    -1,    83,
-+      84,    -1,    86,    21,    22,    23,    24,    25,    26,    27,
-+      28,    29,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,
-+      38,    39,    -1,    41,    42,    43,    44,    45,    46,    47,
-+      48,    49,    50,    -1,    -1,    53,    54,    -1,    -1,    -1,
-+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-+      -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    10,    11,
-+      12,    -1,    -1,    -1,    82,    83,    84,    -1,    86,    21,
-+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-+      32,    -1,    -1,    -1,    -1,    -1,    38,    39,    -1,    41,
-+      42,    43,    44,    45,    46,    47,    48,    49,    50,    -1,
-+      -1,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-+      72,    -1,    -1,    75,    10,    11,    12,    -1,    -1,    -1,
-+      -1,    83,    84,    -1,    86,    21,    22,    23,    24,    25,
-+      26,    27,    28,    29,    30,    31,    32,    -1,    -1,    -1,
-+      -1,    -1,    38,    39,    -1,    41,    42,    43,    44,    45,
-+      46,    47,    48,    49,    50,    -1,    -1,    53,    54,    -1,
-+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-+      -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,
-+      10,    11,    12,    -1,    -1,    -1,    -1,    83,    84,    -1,
-+      86,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-+      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    38,    39,
-+      -1,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-+      50,    -1,    -1,    53,    54,    -1,    -1,    -1,    -1,    -1,
-+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-+      -1,    -1,    72,     4,     5,     6,    -1,    -1,    -1,    10,
-+      11,    12,    -1,    83,    84,    -1,    86,    -1,    -1,    -1,
-+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-+      31,    32,    -1,    -1,    -1,    -1,    -1,    38,    39,    -1,
-+      41,    42,    43,    44,    -1,    46,     4,     5,     6,    -1,
-+      -1,    -1,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,
-+      -1,    -1,    -1,    21,    22,    23,    24,    25,    26,    27,
-+      28,    29,    30,    31,    32,    -1,    77,    -1,    -1,    -1,
-+      38,    39,    -1,    41,    42,    43,    44,    -1,    46,    -1,
-+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     0,
-+      -1,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
-+      11,    12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    77,
-+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-+      31,    32,    -1,    -1,    -1,    36,    37,    38,    39,    -1,
-+      41,    42,    43,    44,    -1,    46,     3,     4,     5,     6,
-+       7,     8,     9,    10,    11,    12,    -1,    -1,    -1,    -1,
-+      -1,    -1,    -1,    -1,    21,    22,    23,    24,    25,    26,
-+      27,    28,    29,    30,    31,    32,    -1,    -1,    -1,    36,
-+      37,    38,    39,    -1,    41,    42,    43,    44,    -1,    46,
-+       4,     5,     6,    -1,    -1,    -1,    10,    11,    12,    -1,
-+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    21,    22,    23,
-+      24,    25,    26,    27,    28,    29,    30,    31,    32,    -1,
-+      -1,    -1,    -1,    -1,    38,    39,    -1,    41,    42,    43,
-+      44,    -1,    46,    10,    11,    12,    -1,    -1,    -1,    -1,
-+      -1,    -1,    -1,    -1,    21,    22,    23,    24,    25,    26,
-+      27,    28,    29,    30,    31,    32,    -1,    -1,    -1,    -1,
-+      -1,    38,    39,    -1,    41,    42,    43,    44,    45,    46,
-+      10,    11,    12,    50,    -1,    -1,    -1,    -1,    -1,    -1,
-+      -1,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-+      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    38,    39,
-+      -1,    41,    42,    43,    44,    -1,    46
-+};
-+
-+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-+   symbol of state STATE-NUM.  */
-+static const yytype_uint8 yystos[] =
-+{
-+       0,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-+      12,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-+      30,    31,    32,    36,    37,    38,    39,    41,    42,    43,
-+      44,    46,   126,   127,   128,   129,   130,   135,   136,   137,
-+     138,   139,   140,   141,   142,   143,   175,   176,   177,    37,
-+      45,   140,    45,    76,    82,   178,    73,    79,     3,    33,
-+      34,    35,   132,   133,   138,    79,    82,    45,   139,   141,
-+      74,     0,   176,   141,    76,   145,    76,   161,   132,   131,
-+     134,   139,   133,    45,    72,    74,    81,    45,    47,    48,
-+      49,    50,    53,    54,    72,    83,    84,    86,    97,    98,
-+      99,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-+     120,   121,   125,   142,    82,   144,   139,   146,   147,    13,
-+      14,    15,    17,    18,    19,    20,    40,    76,    77,    82,
-+     108,   121,   122,   124,   126,   127,   142,   151,   152,   153,
-+     154,   162,   163,   164,   167,   174,    45,   131,   134,    74,
-+      81,    75,   125,   122,   150,   108,   108,   124,    53,    54,
-+      74,    78,    73,    73,    79,    39,   122,    72,   108,    87,
-+      88,    84,    86,    55,    56,    90,    91,    57,    58,    59,
-+      61,    60,    95,    75,   146,    45,   148,   149,    77,   147,
-+      82,    82,   169,    72,    72,    82,    82,   124,    72,    77,
-+     155,    62,    63,    64,    71,    81,   123,    79,    82,    77,
-+     152,    74,    75,   125,   150,    75,    73,   100,   124,    45,
-+      50,   103,   122,   108,   108,   110,   110,   112,   112,   112,
-+     112,   113,   113,   117,   118,   119,   124,    77,    74,    79,
-+      82,   158,   159,   160,   170,   124,    82,   168,   162,   122,
-+     122,   125,    75,    75,    80,   125,   149,    40,   161,   153,
-+     151,   163,   171,    73,   124,   137,   166,   156,    75,   122,
-+      75,    72,   166,   172,   173,   158,   165,    45,    73,    77,
-+     124,    82,    73,    16,    81,   153,   157,   161,    73,   124,
-+     157,   158,   150,    82
-+};
-+
-+#define yyerrok		(yyerrstatus = 0)
-+#define yyclearin	(yychar = YYEMPTY)
-+#define YYEMPTY		(-2)
-+#define YYEOF		0
-+
-+#define YYACCEPT	goto yyacceptlab
-+#define YYABORT		goto yyabortlab
-+#define YYERROR		goto yyerrorlab
-+
-+
-+/* Like YYERROR except do call yyerror.  This remains here temporarily
-+   to ease the transition to the new meaning of YYERROR, for GCC.
-+   Once GCC version 2 has supplanted version 1, this can go.  */
-+
-+#define YYFAIL		goto yyerrlab
-+
-+#define YYRECOVERING()  (!!yyerrstatus)
-+
-+#define YYBACKUP(Token, Value)					\
-+do								\
-+  if (yychar == YYEMPTY && yylen == 1)				\
-+    {								\
-+      yychar = (Token);						\
-+      yylval = (Value);						\
-+      yytoken = YYTRANSLATE (yychar);				\
-+      YYPOPSTACK (1);						\
-+      goto yybackup;						\
-+    }								\
-+  else								\
-+    {								\
-+      yyerror (context, YY_("syntax error: cannot back up")); \
-+      YYERROR;							\
-+    }								\
-+while (YYID (0))
-+
-+
-+#define YYTERROR	1
-+#define YYERRCODE	256
-+
-+
-+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
-+   If N is 0, then set CURRENT to the empty location which ends
-+   the previous symbol: RHS[0] (always defined).  */
-+
-+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
-+#ifndef YYLLOC_DEFAULT
-+# define YYLLOC_DEFAULT(Current, Rhs, N)				\
-+    do									\
-+      if (YYID (N))                                                    \
-+	{								\
-+	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
-+	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
-+	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
-+	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
-+	}								\
-+      else								\
-+	{								\
-+	  (Current).first_line   = (Current).last_line   =		\
-+	    YYRHSLOC (Rhs, 0).last_line;				\
-+	  (Current).first_column = (Current).last_column =		\
-+	    YYRHSLOC (Rhs, 0).last_column;				\
-+	}								\
-+    while (YYID (0))
-+#endif
-+
-+
-+/* YY_LOCATION_PRINT -- Print the location on the stream.
-+   This macro was not mandated originally: define only if we know
-+   we won't break user code: when these are the locations we know.  */
-+
-+#ifndef YY_LOCATION_PRINT
-+# if YYLTYPE_IS_TRIVIAL
-+#  define YY_LOCATION_PRINT(File, Loc)			\
-+     fprintf (File, "%d.%d-%d.%d",			\
-+	      (Loc).first_line, (Loc).first_column,	\
-+	      (Loc).last_line,  (Loc).last_column)
-+# else
-+#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-+# endif
-+#endif
-+
-+
-+/* YYLEX -- calling `yylex' with the right arguments.  */
-+
-+#ifdef YYLEX_PARAM
-+# define YYLEX yylex (&yylval, YYLEX_PARAM)
-+#else
-+# define YYLEX yylex (&yylval)
-+#endif
-+
-+/* Enable debugging if requested.  */
-+#if YYDEBUG
-+
-+# ifndef YYFPRINTF
-+#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
-+#  define YYFPRINTF fprintf
-+# endif
-+
-+# define YYDPRINTF(Args)			\
-+do {						\
-+  if (yydebug)					\
-+    YYFPRINTF Args;				\
-+} while (YYID (0))
-+
-+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
-+do {									  \
-+  if (yydebug)								  \
-+    {									  \
-+      YYFPRINTF (stderr, "%s ", Title);					  \
-+      yy_symbol_print (stderr,						  \
-+		  Type, Value, context); \
-+      YYFPRINTF (stderr, "\n");						  \
-+    }									  \
-+} while (YYID (0))
-+
-+
-+/*--------------------------------.
-+| Print this symbol on YYOUTPUT.  |
-+`--------------------------------*/
-+
-+/*ARGSUSED*/
-+#if (defined __STDC__ || defined __C99__FUNC__ \
-+     || defined __cplusplus || defined _MSC_VER)
-+static void
-+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, TParseContext* context)
-+#else
-+static void
-+yy_symbol_value_print (yyoutput, yytype, yyvaluep, context)
-+    FILE *yyoutput;
-+    int yytype;
-+    YYSTYPE const * const yyvaluep;
-+    TParseContext* context;
-+#endif
-+{
-+  if (!yyvaluep)
-+    return;
-+  YYUSE (context);
-+# ifdef YYPRINT
-+  if (yytype < YYNTOKENS)
-+    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-+# else
-+  YYUSE (yyoutput);
-+# endif
-+  switch (yytype)
-+    {
-+      default:
-+	break;
-+    }
-+}
-+
-+
-+/*--------------------------------.
-+| Print this symbol on YYOUTPUT.  |
-+`--------------------------------*/
-+
-+#if (defined __STDC__ || defined __C99__FUNC__ \
-+     || defined __cplusplus || defined _MSC_VER)
-+static void
-+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, TParseContext* context)
-+#else
-+static void
-+yy_symbol_print (yyoutput, yytype, yyvaluep, context)
-+    FILE *yyoutput;
-+    int yytype;
-+    YYSTYPE const * const yyvaluep;
-+    TParseContext* context;
-+#endif
-+{
-+  if (yytype < YYNTOKENS)
-+    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
-+  else
-+    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
-+
-+  yy_symbol_value_print (yyoutput, yytype, yyvaluep, context);
-+  YYFPRINTF (yyoutput, ")");
-+}
-+
-+/*------------------------------------------------------------------.
-+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
-+| TOP (included).                                                   |
-+`------------------------------------------------------------------*/
-+
-+#if (defined __STDC__ || defined __C99__FUNC__ \
-+     || defined __cplusplus || defined _MSC_VER)
-+static void
-+yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
-+#else
-+static void
-+yy_stack_print (bottom, top)
-+    yytype_int16 *bottom;
-+    yytype_int16 *top;
-+#endif
-+{
-+  YYFPRINTF (stderr, "Stack now");
-+  for (; bottom <= top; ++bottom)
-+    YYFPRINTF (stderr, " %d", *bottom);
-+  YYFPRINTF (stderr, "\n");
-+}
-+
-+# define YY_STACK_PRINT(Bottom, Top)				\
-+do {								\
-+  if (yydebug)							\
-+    yy_stack_print ((Bottom), (Top));				\
-+} while (YYID (0))
-+
-+
-+/*------------------------------------------------.
-+| Report that the YYRULE is going to be reduced.  |
-+`------------------------------------------------*/
-+
-+#if (defined __STDC__ || defined __C99__FUNC__ \
-+     || defined __cplusplus || defined _MSC_VER)
-+static void
-+yy_reduce_print (YYSTYPE *yyvsp, int yyrule, TParseContext* context)
-+#else
-+static void
-+yy_reduce_print (yyvsp, yyrule, context)
-+    YYSTYPE *yyvsp;
-+    int yyrule;
-+    TParseContext* context;
-+#endif
-+{
-+  int yynrhs = yyr2[yyrule];
-+  int yyi;
-+  unsigned long int yylno = yyrline[yyrule];
-+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
-+	     yyrule - 1, yylno);
-+  /* The symbols being reduced.  */
-+  for (yyi = 0; yyi < yynrhs; yyi++)
-+    {
-+      fprintf (stderr, "   $%d = ", yyi + 1);
-+      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
-+		       &(yyvsp[(yyi + 1) - (yynrhs)])
-+		       		       , context);
-+      fprintf (stderr, "\n");
-+    }
-+}
-+
-+# define YY_REDUCE_PRINT(Rule)		\
-+do {					\
-+  if (yydebug)				\
-+    yy_reduce_print (yyvsp, Rule, context); \
-+} while (YYID (0))
-+
-+/* Nonzero means print parse trace.  It is left uninitialized so that
-+   multiple parsers can coexist.  */
-+int yydebug;
-+#else /* !YYDEBUG */
-+# define YYDPRINTF(Args)
-+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
-+# define YY_STACK_PRINT(Bottom, Top)
-+# define YY_REDUCE_PRINT(Rule)
-+#endif /* !YYDEBUG */
-+
-+
-+/* YYINITDEPTH -- initial size of the parser's stacks.  */
-+#ifndef	YYINITDEPTH
-+# define YYINITDEPTH 200
-+#endif
-+
-+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
-+   if the built-in stack extension method is used).
-+
-+   Do not make this value too large; the results are undefined if
-+   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
-+   evaluated with infinite-precision integer arithmetic.  */
-+
-+#ifndef YYMAXDEPTH
-+# define YYMAXDEPTH 10000
-+#endif
-+
-+
-+
-+#if YYERROR_VERBOSE
-+
-+# ifndef yystrlen
-+#  if defined __GLIBC__ && defined _STRING_H
-+#   define yystrlen strlen
-+#  else
-+/* Return the length of YYSTR.  */
-+#if (defined __STDC__ || defined __C99__FUNC__ \
-+     || defined __cplusplus || defined _MSC_VER)
-+static YYSIZE_T
-+yystrlen (const char *yystr)
-+#else
-+static YYSIZE_T
-+yystrlen (yystr)
-+    const char *yystr;
-+#endif
-+{
-+  YYSIZE_T yylen;
-+  for (yylen = 0; yystr[yylen]; yylen++)
-+    continue;
-+  return yylen;
-+}
-+#  endif
-+# endif
-+
-+# ifndef yystpcpy
-+#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
-+#   define yystpcpy stpcpy
-+#  else
-+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
-+   YYDEST.  */
-+#if (defined __STDC__ || defined __C99__FUNC__ \
-+     || defined __cplusplus || defined _MSC_VER)
-+static char *
-+yystpcpy (char *yydest, const char *yysrc)
-+#else
-+static char *
-+yystpcpy (yydest, yysrc)
-+    char *yydest;
-+    const char *yysrc;
-+#endif
-+{
-+  char *yyd = yydest;
-+  const char *yys = yysrc;
-+
-+  while ((*yyd++ = *yys++) != '\0')
-+    continue;
-+
-+  return yyd - 1;
-+}
-+#  endif
-+# endif
-+
-+# ifndef yytnamerr
-+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
-+   quotes and backslashes, so that it's suitable for yyerror.  The
-+   heuristic is that double-quoting is unnecessary unless the string
-+   contains an apostrophe, a comma, or backslash (other than
-+   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
-+yytnamerr (char *yyres, const char *yystr)
-+{
-+  if (*yystr == '"')
-+    {
-+      YYSIZE_T yyn = 0;
-+      char const *yyp = yystr;
-+
-+      for (;;)
-+	switch (*++yyp)
-+	  {
-+	  case '\'':
-+	  case ',':
-+	    goto do_not_strip_quotes;
-+
-+	  case '\\':
-+	    if (*++yyp != '\\')
-+	      goto do_not_strip_quotes;
-+	    /* Fall through.  */
-+	  default:
-+	    if (yyres)
-+	      yyres[yyn] = *yyp;
-+	    yyn++;
-+	    break;
-+
-+	  case '"':
-+	    if (yyres)
-+	      yyres[yyn] = '\0';
-+	    return yyn;
-+	  }
-+    do_not_strip_quotes: ;
-+    }
-+
-+  if (! yyres)
-+    return yystrlen (yystr);
-+
-+  return yystpcpy (yyres, yystr) - yyres;
-+}
-+# endif
-+
-+/* Copy into YYRESULT an error message about the unexpected token
-+   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
-+   including the terminating null byte.  If YYRESULT is null, do not
-+   copy anything; just return the number of bytes that would be
-+   copied.  As a special case, return 0 if an ordinary "syntax error"
-+   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
-+   size calculation.  */
-+static YYSIZE_T
-+yysyntax_error (char *yyresult, int yystate, int yychar)
-+{
-+  int yyn = yypact[yystate];
-+
-+  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
-+    return 0;
-+  else
-+    {
-+      int yytype = YYTRANSLATE (yychar);
-+      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
-+      YYSIZE_T yysize = yysize0;
-+      YYSIZE_T yysize1;
-+      int yysize_overflow = 0;
-+      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
-+      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-+      int yyx;
-+
-+# if 0
-+      /* This is so xgettext sees the translatable formats that are
-+	 constructed on the fly.  */
-+      YY_("syntax error, unexpected %s");
-+      YY_("syntax error, unexpected %s, expecting %s");
-+      YY_("syntax error, unexpected %s, expecting %s or %s");
-+      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
-+      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
-+# endif
-+      char *yyfmt;
-+      char const *yyf;
-+      static char const yyunexpected[] = "syntax error, unexpected %s";
-+      static char const yyexpecting[] = ", expecting %s";
-+      static char const yyor[] = " or %s";
-+      char yyformat[sizeof yyunexpected
-+		    + sizeof yyexpecting - 1
-+		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
-+		       * (sizeof yyor - 1))];
-+      char const *yyprefix = yyexpecting;
-+
-+      /* Start YYX at -YYN if negative to avoid negative indexes in
-+	 YYCHECK.  */
-+      int yyxbegin = yyn < 0 ? -yyn : 0;
-+
-+      /* Stay within bounds of both yycheck and yytname.  */
-+      int yychecklim = YYLAST - yyn + 1;
-+      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
-+      int yycount = 1;
-+
-+      yyarg[0] = yytname[yytype];
-+      yyfmt = yystpcpy (yyformat, yyunexpected);
-+
-+      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-+	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
-+	  {
-+	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
-+	      {
-+		yycount = 1;
-+		yysize = yysize0;
-+		yyformat[sizeof yyunexpected - 1] = '\0';
-+		break;
-+	      }
-+	    yyarg[yycount++] = yytname[yyx];
-+	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
-+	    yysize_overflow |= (yysize1 < yysize);
-+	    yysize = yysize1;
-+	    yyfmt = yystpcpy (yyfmt, yyprefix);
-+	    yyprefix = yyor;
-+	  }
-+
-+      yyf = YY_(yyformat);
-+      yysize1 = yysize + yystrlen (yyf);
-+      yysize_overflow |= (yysize1 < yysize);
-+      yysize = yysize1;
-+
-+      if (yysize_overflow)
-+	return YYSIZE_MAXIMUM;
-+
-+      if (yyresult)
-+	{
-+	  /* Avoid sprintf, as that infringes on the user's name space.
-+	     Don't have undefined behavior even if the translation
-+	     produced a string with the wrong number of "%s"s.  */
-+	  char *yyp = yyresult;
-+	  int yyi = 0;
-+	  while ((*yyp = *yyf) != '\0')
-+	    {
-+	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
-+		{
-+		  yyp += yytnamerr (yyp, yyarg[yyi++]);
-+		  yyf += 2;
-+		}
-+	      else
-+		{
-+		  yyp++;
-+		  yyf++;
-+		}
-+	    }
-+	}
-+      return yysize;
-+    }
-+}
-+#endif /* YYERROR_VERBOSE */
-+
-+
-+/*-----------------------------------------------.
-+| Release the memory associated to this symbol.  |
-+`-----------------------------------------------*/
-+
-+/*ARGSUSED*/
-+#if (defined __STDC__ || defined __C99__FUNC__ \
-+     || defined __cplusplus || defined _MSC_VER)
-+static void
-+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, TParseContext* context)
-+#else
-+static void
-+yydestruct (yymsg, yytype, yyvaluep, context)
-+    const char *yymsg;
-+    int yytype;
-+    YYSTYPE *yyvaluep;
-+    TParseContext* context;
-+#endif
-+{
-+  YYUSE (yyvaluep);
-+  YYUSE (context);
-+
-+  if (!yymsg)
-+    yymsg = "Deleting";
-+  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
-+
-+  switch (yytype)
-+    {
-+
-+      default:
-+	break;
-+    }
-+}
-+
-+
-+/* Prevent warnings from -Wmissing-prototypes.  */
-+
-+#ifdef YYPARSE_PARAM
-+#if defined __STDC__ || defined __cplusplus
-+int yyparse (void *YYPARSE_PARAM);
-+#else
-+int yyparse ();
-+#endif
-+#else /* ! YYPARSE_PARAM */
-+#if defined __STDC__ || defined __cplusplus
-+int yyparse (TParseContext* context);
-+#else
-+int yyparse ();
-+#endif
-+#endif /* ! YYPARSE_PARAM */
-+
-+
-+
-+
-+
-+
-+/*----------.
-+| yyparse.  |
-+`----------*/
-+
-+#ifdef YYPARSE_PARAM
-+#if (defined __STDC__ || defined __C99__FUNC__ \
-+     || defined __cplusplus || defined _MSC_VER)
-+int
-+yyparse (void *YYPARSE_PARAM)
-+#else
-+int
-+yyparse (YYPARSE_PARAM)
-+    void *YYPARSE_PARAM;
-+#endif
-+#else /* ! YYPARSE_PARAM */
-+#if (defined __STDC__ || defined __C99__FUNC__ \
-+     || defined __cplusplus || defined _MSC_VER)
-+int
-+yyparse (TParseContext* context)
-+#else
-+int
-+yyparse (context)
-+    TParseContext* context;
-+#endif
-+#endif
-+{
-+  /* The look-ahead symbol.  */
-+int yychar;
-+
-+/* The semantic value of the look-ahead symbol.  */
-+YYSTYPE yylval;
-+
-+/* Number of syntax errors so far.  */
-+int yynerrs;
-+
-+  int yystate;
-+  int yyn;
-+  int yyresult;
-+  /* Number of tokens to shift before error messages enabled.  */
-+  int yyerrstatus;
-+  /* Look-ahead token as an internal (translated) token number.  */
-+  int yytoken = 0;
-+#if YYERROR_VERBOSE
-+  /* Buffer for error messages, and its allocated size.  */
-+  char yymsgbuf[128];
-+  char *yymsg = yymsgbuf;
-+  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
-+#endif
-+
-+  /* Three stacks and their tools:
-+     `yyss': related to states,
-+     `yyvs': related to semantic values,
-+     `yyls': related to locations.
-+
-+     Refer to the stacks thru separate pointers, to allow yyoverflow
-+     to reallocate them elsewhere.  */
-+
-+  /* The state stack.  */
-+  yytype_int16 yyssa[YYINITDEPTH];
-+  yytype_int16 *yyss = yyssa;
-+  yytype_int16 *yyssp;
-+
-+  /* The semantic value stack.  */
-+  YYSTYPE yyvsa[YYINITDEPTH];
-+  YYSTYPE *yyvs = yyvsa;
-+  YYSTYPE *yyvsp;
-+
-+
-+
-+#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
-+
-+  YYSIZE_T yystacksize = YYINITDEPTH;
-+
-+  /* The variables used to return semantic value and location from the
-+     action routines.  */
-+  YYSTYPE yyval;
-+
-+
-+  /* The number of symbols on the RHS of the reduced rule.
-+     Keep to zero when no symbol should be popped.  */
-+  int yylen = 0;
-+
-+  YYDPRINTF ((stderr, "Starting parse\n"));
-+
-+  yystate = 0;
-+  yyerrstatus = 0;
-+  yynerrs = 0;
-+  yychar = YYEMPTY;		/* Cause a token to be read.  */
-+
-+  /* Initialize stack pointers.
-+     Waste one element of value and location stack
-+     so that they stay on the same level as the state stack.
-+     The wasted elements are never initialized.  */
-+
-+  yyssp = yyss;
-+  yyvsp = yyvs;
-+
-+  goto yysetstate;
-+
-+/*------------------------------------------------------------.
-+| yynewstate -- Push a new state, which is found in yystate.  |
-+`------------------------------------------------------------*/
-+ 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;
-+
-+  if (yyss + yystacksize - 1 <= yyssp)
-+    {
-+      /* Get the current used size of the three stacks, in elements.  */
-+      YYSIZE_T yysize = yyssp - yyss + 1;
-+
-+#ifdef 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.  */
-+	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),
-+
-+		    &yystacksize);
-+
-+	yyss = yyss1;
-+	yyvs = yyvs1;
-+      }
-+#else /* no yyoverflow */
-+# ifndef YYSTACK_RELOCATE
-+      goto yyexhaustedlab;
-+# else
-+      /* Extend the stack our own way.  */
-+      if (YYMAXDEPTH <= yystacksize)
-+	goto yyexhaustedlab;
-+      yystacksize *= 2;
-+      if (YYMAXDEPTH < yystacksize)
-+	yystacksize = YYMAXDEPTH;
-+
-+      {
-+	yytype_int16 *yyss1 = yyss;
-+	union yyalloc *yyptr =
-+	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
-+	if (! yyptr)
-+	  goto yyexhaustedlab;
-+	YYSTACK_RELOCATE (yyss);
-+	YYSTACK_RELOCATE (yyvs);
-+
-+#  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 int) yystacksize));
-+
-+      if (yyss + yystacksize - 1 <= yyssp)
-+	YYABORT;
-+    }
-+
-+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
-+
-+  goto yybackup;
-+
-+/*-----------.
-+| yybackup.  |
-+`-----------*/
-+yybackup:
-+
-+  /* Do appropriate processing given the current state.  Read a
-+     look-ahead token if we need one and don't already have one.  */
-+
-+  /* First try to decide what to do without reference to look-ahead token.  */
-+  yyn = yypact[yystate];
-+  if (yyn == YYPACT_NINF)
-+    goto yydefault;
-+
-+  /* Not known => get a look-ahead token if don't already have one.  */
-+
-+  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
-+  if (yychar == YYEMPTY)
-+    {
-+      YYDPRINTF ((stderr, "Reading a token: "));
-+      yychar = YYLEX;
-+    }
-+
-+  if (yychar <= YYEOF)
-+    {
-+      yychar = yytoken = YYEOF;
-+      YYDPRINTF ((stderr, "Now at end of input.\n"));
-+    }
-+  else
-+    {
-+      yytoken = YYTRANSLATE (yychar);
-+      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
-+    }
-+
-+  /* If the proper action on seeing token YYTOKEN is to reduce or to
-+     detect an error, take that action.  */
-+  yyn += yytoken;
-+  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
-+    goto yydefault;
-+  yyn = yytable[yyn];
-+  if (yyn <= 0)
-+    {
-+      if (yyn == 0 || yyn == YYTABLE_NINF)
-+	goto yyerrlab;
-+      yyn = -yyn;
-+      goto yyreduce;
-+    }
-+
-+  if (yyn == YYFINAL)
-+    YYACCEPT;
-+
-+  /* Count tokens shifted since error; after three, turn off error
-+     status.  */
-+  if (yyerrstatus)
-+    yyerrstatus--;
-+
-+  /* Shift the look-ahead token.  */
-+  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-+
-+  /* Discard the shifted token unless it is eof.  */
-+  if (yychar != YYEOF)
-+    yychar = YYEMPTY;
-+
-+  yystate = yyn;
-+  *++yyvsp = yylval;
-+
-+  goto yynewstate;
-+
-+
-+/*-----------------------------------------------------------.
-+| yydefault -- do the default action for the current state.  |
-+`-----------------------------------------------------------*/
-+yydefault:
-+  yyn = yydefact[yystate];
-+  if (yyn == 0)
-+    goto yyerrlab;
-+  goto yyreduce;
-+
-+
-+/*-----------------------------.
-+| yyreduce -- Do a reduction.  |
-+`-----------------------------*/
-+yyreduce:
-+  /* yyn is the number of a rule to reduce with.  */
-+  yylen = yyr2[yyn];
-+
-+  /* If YYLEN is nonzero, implement the default value of the action:
-+     `$$ = $1'.
-+
-+     Otherwise, the following line sets YYVAL to garbage.
-+     This behavior is undocumented and Bison
-+     users should not rely upon it.  Assigning to YYVAL
-+     unconditionally makes the parser a bit smaller, and it avoids a
-+     GCC warning that YYVAL may be used uninitialized.  */
-+  yyval = yyvsp[1-yylen];
-+
-+
-+  YY_REDUCE_PRINT (yyn);
-+  switch (yyn)
-+    {
-+        case 2:
-+
-+    {
-+        // The symbol table search was done in the lexical phase
-+        const TSymbol* symbol = (yyvsp[(1) - (1)].lex).symbol;
-+        const TVariable* variable;
-+        if (symbol == 0) {
-+            context->error((yyvsp[(1) - (1)].lex).line, "undeclared identifier", (yyvsp[(1) - (1)].lex).string->c_str());
-+            context->recover();
-+            TType type(EbtFloat, EbpUndefined);
-+            TVariable* fakeVariable = new TVariable((yyvsp[(1) - (1)].lex).string, type);
-+            context->symbolTable.insert(*fakeVariable);
-+            variable = fakeVariable;
-+        } else {
-+            // This identifier can only be a variable type symbol
-+            if (! symbol->isVariable()) {
-+                context->error((yyvsp[(1) - (1)].lex).line, "variable expected", (yyvsp[(1) - (1)].lex).string->c_str());
-+                context->recover();
-+            }
-+            variable = static_cast<const TVariable*>(symbol);
-+        }
-+
-+        // don't delete $1.string, it's used by error recovery, and the pool
-+        // pop will reclaim the memory
-+
-+        if (variable->getType().getQualifier() == EvqConst ) {
-+            ConstantUnion* constArray = variable->getConstPointer();
-+            TType t(variable->getType());
-+            (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(constArray, t, (yyvsp[(1) - (1)].lex).line);
-+        } else
-+            (yyval.interm.intermTypedNode) = context->intermediate.addSymbol(variable->getUniqueId(),
-+                                                     variable->getName(),
-+                                                     variable->getType(), (yyvsp[(1) - (1)].lex).line);
-+    ;}
-+    break;
-+
-+  case 3:
-+
-+    {
-+        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
-+    ;}
-+    break;
-+
-+  case 4:
-+
-+    {
-+        //
-+        // INT_TYPE is only 16-bit plus sign bit for vertex/fragment shaders,
-+        // check for overflow for constants
-+        //
-+        if (abs((yyvsp[(1) - (1)].lex).i) >= (1 << 16)) {
-+            context->error((yyvsp[(1) - (1)].lex).line, " integer constant overflow", "");
-+            context->recover();
-+        }
-+        ConstantUnion *unionArray = new ConstantUnion[1];
-+        unionArray->setIConst((yyvsp[(1) - (1)].lex).i);
-+        (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtInt, EbpUndefined, EvqConst), (yyvsp[(1) - (1)].lex).line);
-+    ;}
-+    break;
-+
-+  case 5:
-+
-+    {
-+        ConstantUnion *unionArray = new ConstantUnion[1];
-+        unionArray->setFConst((yyvsp[(1) - (1)].lex).f);
-+        (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtFloat, EbpUndefined, EvqConst), (yyvsp[(1) - (1)].lex).line);
-+    ;}
-+    break;
-+
-+  case 6:
-+
-+    {
-+        ConstantUnion *unionArray = new ConstantUnion[1];
-+        unionArray->setBConst((yyvsp[(1) - (1)].lex).b);
-+        (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtBool, EbpUndefined, EvqConst), (yyvsp[(1) - (1)].lex).line);
-+    ;}
-+    break;
-+
-+  case 7:
-+
-+    {
-+        (yyval.interm.intermTypedNode) = (yyvsp[(2) - (3)].interm.intermTypedNode);
-+    ;}
-+    break;
-+
-+  case 8:
-+
-+    {
-+        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
-+    ;}
-+    break;
-+
-+  case 9:
-+
-+    {
-+        if (!(yyvsp[(1) - (4)].interm.intermTypedNode)->isArray() && !(yyvsp[(1) - (4)].interm.intermTypedNode)->isMatrix() && !(yyvsp[(1) - (4)].interm.intermTypedNode)->isVector()) {
-+            if ((yyvsp[(1) - (4)].interm.intermTypedNode)->getAsSymbolNode())
-+                context->error((yyvsp[(2) - (4)].lex).line, " left of '[' is not of type array, matrix, or vector ", (yyvsp[(1) - (4)].interm.intermTypedNode)->getAsSymbolNode()->getSymbol().c_str());
-+            else
-+                context->error((yyvsp[(2) - (4)].lex).line, " left of '[' is not of type array, matrix, or vector ", "expression");
-+            context->recover();
-+        }
-+        if ((yyvsp[(1) - (4)].interm.intermTypedNode)->getType().getQualifier() == EvqConst && (yyvsp[(3) - (4)].interm.intermTypedNode)->getQualifier() == EvqConst) {
-+            if ((yyvsp[(1) - (4)].interm.intermTypedNode)->isArray()) { // constant folding for arrays
-+                (yyval.interm.intermTypedNode) = context->addConstArrayNode((yyvsp[(3) - (4)].interm.intermTypedNode)->getAsConstantUnion()->getUnionArrayPointer()->getIConst(), (yyvsp[(1) - (4)].interm.intermTypedNode), (yyvsp[(2) - (4)].lex).line);
-+            } else if ((yyvsp[(1) - (4)].interm.intermTypedNode)->isVector()) {  // constant folding for vectors
-+                TVectorFields fields;
-+                fields.num = 1;
-+                fields.offsets[0] = (yyvsp[(3) - (4)].interm.intermTypedNode)->getAsConstantUnion()->getUnionArrayPointer()->getIConst(); // need to do it this way because v.xy sends fields integer array
-+                (yyval.interm.intermTypedNode) = context->addConstVectorNode(fields, (yyvsp[(1) - (4)].interm.intermTypedNode), (yyvsp[(2) - (4)].lex).line);
-+            } else if ((yyvsp[(1) - (4)].interm.intermTypedNode)->isMatrix()) { // constant folding for matrices
-+                (yyval.interm.intermTypedNode) = context->addConstMatrixNode((yyvsp[(3) - (4)].interm.intermTypedNode)->getAsConstantUnion()->getUnionArrayPointer()->getIConst(), (yyvsp[(1) - (4)].interm.intermTypedNode), (yyvsp[(2) - (4)].lex).line);
-+            }
-+        } else {
-+            if ((yyvsp[(3) - (4)].interm.intermTypedNode)->getQualifier() == EvqConst) {
-+                if (((yyvsp[(1) - (4)].interm.intermTypedNode)->isVector() || (yyvsp[(1) - (4)].interm.intermTypedNode)->isMatrix()) && (yyvsp[(1) - (4)].interm.intermTypedNode)->getType().getNominalSize() <= (yyvsp[(3) - (4)].interm.intermTypedNode)->getAsConstantUnion()->getUnionArrayPointer()->getIConst() && !(yyvsp[(1) - (4)].interm.intermTypedNode)->isArray() ) {
-+                    std::stringstream extraInfoStream;
-+                    extraInfoStream << "field selection out of range '" << (yyvsp[(3) - (4)].interm.intermTypedNode)->getAsConstantUnion()->getUnionArrayPointer()->getIConst() << "'";
-+                    std::string extraInfo = extraInfoStream.str();
-+                    context->error((yyvsp[(2) - (4)].lex).line, "", "[", extraInfo.c_str());
-+                    context->recover();
-+                } else {
-+                    if ((yyvsp[(1) - (4)].interm.intermTypedNode)->isArray()) {
-+                        if ((yyvsp[(1) - (4)].interm.intermTypedNode)->getType().getArraySize() == 0) {
-+                            if ((yyvsp[(1) - (4)].interm.intermTypedNode)->getType().getMaxArraySize() <= (yyvsp[(3) - (4)].interm.intermTypedNode)->getAsConstantUnion()->getUnionArrayPointer()->getIConst()) {
-+                                if (context->arraySetMaxSize((yyvsp[(1) - (4)].interm.intermTypedNode)->getAsSymbolNode(), (yyvsp[(1) - (4)].interm.intermTypedNode)->getTypePointer(), (yyvsp[(3) - (4)].interm.intermTypedNode)->getAsConstantUnion()->getUnionArrayPointer()->getIConst(), true, (yyvsp[(2) - (4)].lex).line))
-+                                    context->recover();
-+                            } else {
-+                                if (context->arraySetMaxSize((yyvsp[(1) - (4)].interm.intermTypedNode)->getAsSymbolNode(), (yyvsp[(1) - (4)].interm.intermTypedNode)->getTypePointer(), 0, false, (yyvsp[(2) - (4)].lex).line))
-+                                    context->recover();
-+                            }
-+                        } else if ( (yyvsp[(3) - (4)].interm.intermTypedNode)->getAsConstantUnion()->getUnionArrayPointer()->getIConst() >= (yyvsp[(1) - (4)].interm.intermTypedNode)->getType().getArraySize()) {
-+                            std::stringstream extraInfoStream;
-+                            extraInfoStream << "array index out of range '" << (yyvsp[(3) - (4)].interm.intermTypedNode)->getAsConstantUnion()->getUnionArrayPointer()->getIConst() << "'";
-+                            std::string extraInfo = extraInfoStream.str();
-+                            context->error((yyvsp[(2) - (4)].lex).line, "", "[", extraInfo.c_str());
-+                            context->recover();
-+                        }
-+                    }
-+                    (yyval.interm.intermTypedNode) = context->intermediate.addIndex(EOpIndexDirect, (yyvsp[(1) - (4)].interm.intermTypedNode), (yyvsp[(3) - (4)].interm.intermTypedNode), (yyvsp[(2) - (4)].lex).line);
-+                }
-+            } else {
-+                if ((yyvsp[(1) - (4)].interm.intermTypedNode)->isArray() && (yyvsp[(1) - (4)].interm.intermTypedNode)->getType().getArraySize() == 0) {
-+                    context->error((yyvsp[(2) - (4)].lex).line, "", "[", "array must be redeclared with a size before being indexed with a variable");
-+                    context->recover();
-+                }
-+
-+                (yyval.interm.intermTypedNode) = context->intermediate.addIndex(EOpIndexIndirect, (yyvsp[(1) - (4)].interm.intermTypedNode), (yyvsp[(3) - (4)].interm.intermTypedNode), (yyvsp[(2) - (4)].lex).line);
-+            }
-+        }
-+        if ((yyval.interm.intermTypedNode) == 0) {
-+            ConstantUnion *unionArray = new ConstantUnion[1];
-+            unionArray->setFConst(0.0f);
-+            (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtFloat, EbpHigh, EvqConst), (yyvsp[(2) - (4)].lex).line);
-+        } else if ((yyvsp[(1) - (4)].interm.intermTypedNode)->isArray()) {
-+            if ((yyvsp[(1) - (4)].interm.intermTypedNode)->getType().getStruct())
-+                (yyval.interm.intermTypedNode)->setType(TType((yyvsp[(1) - (4)].interm.intermTypedNode)->getType().getStruct(), (yyvsp[(1) - (4)].interm.intermTypedNode)->getType().getTypeName()));
-+            else
-+                (yyval.interm.intermTypedNode)->setType(TType((yyvsp[(1) - (4)].interm.intermTypedNode)->getBasicType(), (yyvsp[(1) - (4)].interm.intermTypedNode)->getPrecision(), EvqTemporary, (yyvsp[(1) - (4)].interm.intermTypedNode)->getNominalSize(), (yyvsp[(1) - (4)].interm.intermTypedNode)->isMatrix()));
-+
-+            if ((yyvsp[(1) - (4)].interm.intermTypedNode)->getType().getQualifier() == EvqConst)
-+                (yyval.interm.intermTypedNode)->getTypePointer()->setQualifier(EvqConst);
-+        } else if ((yyvsp[(1) - (4)].interm.intermTypedNode)->isMatrix() && (yyvsp[(1) - (4)].interm.intermTypedNode)->getType().getQualifier() == EvqConst)
-+            (yyval.interm.intermTypedNode)->setType(TType((yyvsp[(1) - (4)].interm.intermTypedNode)->getBasicType(), (yyvsp[(1) - (4)].interm.intermTypedNode)->getPrecision(), EvqConst, (yyvsp[(1) - (4)].interm.intermTypedNode)->getNominalSize()));
-+        else if ((yyvsp[(1) - (4)].interm.intermTypedNode)->isMatrix())
-+            (yyval.interm.intermTypedNode)->setType(TType((yyvsp[(1) - (4)].interm.intermTypedNode)->getBasicType(), (yyvsp[(1) - (4)].interm.intermTypedNode)->getPrecision(), EvqTemporary, (yyvsp[(1) - (4)].interm.intermTypedNode)->getNominalSize()));
-+        else if ((yyvsp[(1) - (4)].interm.intermTypedNode)->isVector() && (yyvsp[(1) - (4)].interm.intermTypedNode)->getType().getQualifier() == EvqConst)
-+            (yyval.interm.intermTypedNode)->setType(TType((yyvsp[(1) - (4)].interm.intermTypedNode)->getBasicType(), (yyvsp[(1) - (4)].interm.intermTypedNode)->getPrecision(), EvqConst));
-+        else if ((yyvsp[(1) - (4)].interm.intermTypedNode)->isVector())
-+            (yyval.interm.intermTypedNode)->setType(TType((yyvsp[(1) - (4)].interm.intermTypedNode)->getBasicType(), (yyvsp[(1) - (4)].interm.intermTypedNode)->getPrecision(), EvqTemporary));
-+        else
-+            (yyval.interm.intermTypedNode)->setType((yyvsp[(1) - (4)].interm.intermTypedNode)->getType());
-+    ;}
-+    break;
-+
-+  case 10:
-+
-+    {
-+        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
-+    ;}
-+    break;
-+
-+  case 11:
-+
-+    {
-+        if ((yyvsp[(1) - (3)].interm.intermTypedNode)->isArray()) {
-+            context->error((yyvsp[(3) - (3)].lex).line, "cannot apply dot operator to an array", ".");
-+            context->recover();
-+        }
-+
-+        if ((yyvsp[(1) - (3)].interm.intermTypedNode)->isVector()) {
-+            TVectorFields fields;
-+            if (! context->parseVectorFields(*(yyvsp[(3) - (3)].lex).string, (yyvsp[(1) - (3)].interm.intermTypedNode)->getNominalSize(), fields, (yyvsp[(3) - (3)].lex).line)) {
-+                fields.num = 1;
-+                fields.offsets[0] = 0;
-+                context->recover();
-+            }
-+
-+            if ((yyvsp[(1) - (3)].interm.intermTypedNode)->getType().getQualifier() == EvqConst) { // constant folding for vector fields
-+                (yyval.interm.intermTypedNode) = context->addConstVectorNode(fields, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].lex).line);
-+                if ((yyval.interm.intermTypedNode) == 0) {
-+                    context->recover();
-+                    (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
-+                }
-+                else
-+                    (yyval.interm.intermTypedNode)->setType(TType((yyvsp[(1) - (3)].interm.intermTypedNode)->getBasicType(), (yyvsp[(1) - (3)].interm.intermTypedNode)->getPrecision(), EvqConst, (int) (*(yyvsp[(3) - (3)].lex).string).size()));
-+            } else {
-+                TString vectorString = *(yyvsp[(3) - (3)].lex).string;
-+                TIntermTyped* index = context->intermediate.addSwizzle(fields, (yyvsp[(3) - (3)].lex).line);
-+                (yyval.interm.intermTypedNode) = context->intermediate.addIndex(EOpVectorSwizzle, (yyvsp[(1) - (3)].interm.intermTypedNode), index, (yyvsp[(2) - (3)].lex).line);
-+                (yyval.interm.intermTypedNode)->setType(TType((yyvsp[(1) - (3)].interm.intermTypedNode)->getBasicType(), (yyvsp[(1) - (3)].interm.intermTypedNode)->getPrecision(), EvqTemporary, (int) vectorString.size()));
-+            }
-+        } else if ((yyvsp[(1) - (3)].interm.intermTypedNode)->isMatrix()) {
-+            TMatrixFields fields;
-+            if (! context->parseMatrixFields(*(yyvsp[(3) - (3)].lex).string, (yyvsp[(1) - (3)].interm.intermTypedNode)->getNominalSize(), fields, (yyvsp[(3) - (3)].lex).line)) {
-+                fields.wholeRow = false;
-+                fields.wholeCol = false;
-+                fields.row = 0;
-+                fields.col = 0;
-+                context->recover();
-+            }
-+
-+            if (fields.wholeRow || fields.wholeCol) {
-+                context->error((yyvsp[(2) - (3)].lex).line, " non-scalar fields not implemented yet", ".");
-+                context->recover();
-+                ConstantUnion *unionArray = new ConstantUnion[1];
-+                unionArray->setIConst(0);
-+                TIntermTyped* index = context->intermediate.addConstantUnion(unionArray, TType(EbtInt, EbpUndefined, EvqConst), (yyvsp[(3) - (3)].lex).line);
-+                (yyval.interm.intermTypedNode) = context->intermediate.addIndex(EOpIndexDirect, (yyvsp[(1) - (3)].interm.intermTypedNode), index, (yyvsp[(2) - (3)].lex).line);
-+                (yyval.interm.intermTypedNode)->setType(TType((yyvsp[(1) - (3)].interm.intermTypedNode)->getBasicType(), (yyvsp[(1) - (3)].interm.intermTypedNode)->getPrecision(),EvqTemporary, (yyvsp[(1) - (3)].interm.intermTypedNode)->getNominalSize()));
-+            } else {
-+                ConstantUnion *unionArray = new ConstantUnion[1];
-+                unionArray->setIConst(fields.col * (yyvsp[(1) - (3)].interm.intermTypedNode)->getNominalSize() + fields.row);
-+                TIntermTyped* index = context->intermediate.addConstantUnion(unionArray, TType(EbtInt, EbpUndefined, EvqConst), (yyvsp[(3) - (3)].lex).line);
-+                (yyval.interm.intermTypedNode) = context->intermediate.addIndex(EOpIndexDirect, (yyvsp[(1) - (3)].interm.intermTypedNode), index, (yyvsp[(2) - (3)].lex).line);
-+                (yyval.interm.intermTypedNode)->setType(TType((yyvsp[(1) - (3)].interm.intermTypedNode)->getBasicType(), (yyvsp[(1) - (3)].interm.intermTypedNode)->getPrecision()));
-+            }
-+        } else if ((yyvsp[(1) - (3)].interm.intermTypedNode)->getBasicType() == EbtStruct) {
-+            bool fieldFound = false;
-+            const TTypeList* fields = (yyvsp[(1) - (3)].interm.intermTypedNode)->getType().getStruct();
-+            if (fields == 0) {
-+                context->error((yyvsp[(2) - (3)].lex).line, "structure has no fields", "Internal Error");
-+                context->recover();
-+                (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
-+            } else {
-+                unsigned int i;
-+                for (i = 0; i < fields->size(); ++i) {
-+                    if ((*fields)[i].type->getFieldName() == *(yyvsp[(3) - (3)].lex).string) {
-+                        fieldFound = true;
-+                        break;
-+                    }
-+                }
-+                if (fieldFound) {
-+                    if ((yyvsp[(1) - (3)].interm.intermTypedNode)->getType().getQualifier() == EvqConst) {
-+                        (yyval.interm.intermTypedNode) = context->addConstStruct(*(yyvsp[(3) - (3)].lex).string, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line);
-+                        if ((yyval.interm.intermTypedNode) == 0) {
-+                            context->recover();
-+                            (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
-+                        }
-+                        else {
-+                            (yyval.interm.intermTypedNode)->setType(*(*fields)[i].type);
-+                            // change the qualifier of the return type, not of the structure field
-+                            // as the structure definition is shared between various structures.
-+                            (yyval.interm.intermTypedNode)->getTypePointer()->setQualifier(EvqConst);
-+                        }
-+                    } else {
-+                        ConstantUnion *unionArray = new ConstantUnion[1];
-+                        unionArray->setIConst(i);
-+                        TIntermTyped* index = context->intermediate.addConstantUnion(unionArray, *(*fields)[i].type, (yyvsp[(3) - (3)].lex).line);
-+                        (yyval.interm.intermTypedNode) = context->intermediate.addIndex(EOpIndexDirectStruct, (yyvsp[(1) - (3)].interm.intermTypedNode), index, (yyvsp[(2) - (3)].lex).line);
-+                        (yyval.interm.intermTypedNode)->setType(*(*fields)[i].type);
-+                    }
-+                } else {
-+                    context->error((yyvsp[(2) - (3)].lex).line, " no such field in structure", (yyvsp[(3) - (3)].lex).string->c_str());
-+                    context->recover();
-+                    (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
-+                }
-+            }
-+        } else {
-+            context->error((yyvsp[(2) - (3)].lex).line, " field selection requires structure, vector, or matrix on left hand side", (yyvsp[(3) - (3)].lex).string->c_str());
-+            context->recover();
-+            (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
-+        }
-+        // don't delete $3.string, it's from the pool
-+    ;}
-+    break;
-+
-+  case 12:
-+
-+    {
-+        if (context->lValueErrorCheck((yyvsp[(2) - (2)].lex).line, "++", (yyvsp[(1) - (2)].interm.intermTypedNode)))
-+            context->recover();
-+        (yyval.interm.intermTypedNode) = context->intermediate.addUnaryMath(EOpPostIncrement, (yyvsp[(1) - (2)].interm.intermTypedNode), (yyvsp[(2) - (2)].lex).line, context->symbolTable);
-+        if ((yyval.interm.intermTypedNode) == 0) {
-+            context->unaryOpError((yyvsp[(2) - (2)].lex).line, "++", (yyvsp[(1) - (2)].interm.intermTypedNode)->getCompleteString());
-+            context->recover();
-+            (yyval.interm.intermTypedNode) = (yyvsp[(1) - (2)].interm.intermTypedNode);
-+        }
-+    ;}
-+    break;
-+
-+  case 13:
-+
-+    {
-+        if (context->lValueErrorCheck((yyvsp[(2) - (2)].lex).line, "--", (yyvsp[(1) - (2)].interm.intermTypedNode)))
-+            context->recover();
-+        (yyval.interm.intermTypedNode) = context->intermediate.addUnaryMath(EOpPostDecrement, (yyvsp[(1) - (2)].interm.intermTypedNode), (yyvsp[(2) - (2)].lex).line, context->symbolTable);
-+        if ((yyval.interm.intermTypedNode) == 0) {
-+            context->unaryOpError((yyvsp[(2) - (2)].lex).line, "--", (yyvsp[(1) - (2)].interm.intermTypedNode)->getCompleteString());
-+            context->recover();
-+            (yyval.interm.intermTypedNode) = (yyvsp[(1) - (2)].interm.intermTypedNode);
-+        }
-+    ;}
-+    break;
-+
-+  case 14:
-+
-+    {
-+        if (context->integerErrorCheck((yyvsp[(1) - (1)].interm.intermTypedNode), "[]"))
-+            context->recover();
-+        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
-+    ;}
-+    break;
-+
-+  case 15:
-+
-+    {
-+        TFunction* fnCall = (yyvsp[(1) - (1)].interm).function;
-+        TOperator op = fnCall->getBuiltInOp();
-+
-+        if (op != EOpNull)
-+        {
-+            //
-+            // Then this should be a constructor.
-+            // Don't go through the symbol table for constructors.
-+            // Their parameters will be verified algorithmically.
-+            //
-+            TType type(EbtVoid, EbpUndefined);  // use this to get the type back
-+            if (context->constructorErrorCheck((yyvsp[(1) - (1)].interm).line, (yyvsp[(1) - (1)].interm).intermNode, *fnCall, op, &type)) {
-+                (yyval.interm.intermTypedNode) = 0;
-+            } else {
-+                //
-+                // It's a constructor, of type 'type'.
-+                //
-+                (yyval.interm.intermTypedNode) = context->addConstructor((yyvsp[(1) - (1)].interm).intermNode, &type, op, fnCall, (yyvsp[(1) - (1)].interm).line);
-+            }
-+
-+            if ((yyval.interm.intermTypedNode) == 0) {
-+                context->recover();
-+                (yyval.interm.intermTypedNode) = context->intermediate.setAggregateOperator(0, op, (yyvsp[(1) - (1)].interm).line);
-+            }
-+            (yyval.interm.intermTypedNode)->setType(type);
-+        } else {
-+            //
-+            // Not a constructor.  Find it in the symbol table.
-+            //
-+            const TFunction* fnCandidate;
-+            bool builtIn;
-+            fnCandidate = context->findFunction((yyvsp[(1) - (1)].interm).line, fnCall, &builtIn);
-+            if (fnCandidate) {
-+                //
-+                // A declared function.
-+                //
-+                if (builtIn && !fnCandidate->getExtension().empty() &&
-+                    context->extensionErrorCheck((yyvsp[(1) - (1)].interm).line, fnCandidate->getExtension())) {
-+                    context->recover();
-+                }
-+                op = fnCandidate->getBuiltInOp();
-+                if (builtIn && op != EOpNull) {
-+                    //
-+                    // A function call mapped to a built-in operation.
-+                    //
-+                    if (fnCandidate->getParamCount() == 1) {
-+                        //
-+                        // Treat it like a built-in unary operator.
-+                        //
-+                        (yyval.interm.intermTypedNode) = context->intermediate.addUnaryMath(op, (yyvsp[(1) - (1)].interm).intermNode, 0, context->symbolTable);
-+                        if ((yyval.interm.intermTypedNode) == 0)  {
-+                            std::stringstream extraInfoStream;
-+                            extraInfoStream << "built in unary operator function.  Type: " << static_cast<TIntermTyped*>((yyvsp[(1) - (1)].interm).intermNode)->getCompleteString();
-+                            std::string extraInfo = extraInfoStream.str();
-+                            context->error((yyvsp[(1) - (1)].interm).intermNode->getLine(), " wrong operand type", "Internal Error", extraInfo.c_str());
-+                            YYERROR;
-+                        }
-+                    } else {
-+                        (yyval.interm.intermTypedNode) = context->intermediate.setAggregateOperator((yyvsp[(1) - (1)].interm).intermAggregate, op, (yyvsp[(1) - (1)].interm).line);
-+                    }
-+                } else {
-+                    // This is a real function call
-+
-+                    (yyval.interm.intermTypedNode) = context->intermediate.setAggregateOperator((yyvsp[(1) - (1)].interm).intermAggregate, EOpFunctionCall, (yyvsp[(1) - (1)].interm).line);
-+                    (yyval.interm.intermTypedNode)->setType(fnCandidate->getReturnType());
-+
-+                    // this is how we know whether the given function is a builtIn function or a user defined function
-+                    // if builtIn == false, it's a userDefined -> could be an overloaded builtIn function also
-+                    // if builtIn == true, it's definitely a builtIn function with EOpNull
-+                    if (!builtIn)
-+                        (yyval.interm.intermTypedNode)->getAsAggregate()->setUserDefined();
-+                    (yyval.interm.intermTypedNode)->getAsAggregate()->setName(fnCandidate->getMangledName());
-+
-+                    TQualifier qual;
-+                    for (int i = 0; i < fnCandidate->getParamCount(); ++i) {
-+                        qual = fnCandidate->getParam(i).type->getQualifier();
-+                        if (qual == EvqOut || qual == EvqInOut) {
-+                            if (context->lValueErrorCheck((yyval.interm.intermTypedNode)->getLine(), "assign", (yyval.interm.intermTypedNode)->getAsAggregate()->getSequence()[i]->getAsTyped())) {
-+                                context->error((yyvsp[(1) - (1)].interm).intermNode->getLine(), "Constant value cannot be passed for 'out' or 'inout' parameters.", "Error");
-+                                context->recover();
-+                            }
-+                        }
-+                    }
-+                }
-+                (yyval.interm.intermTypedNode)->setType(fnCandidate->getReturnType());
-+            } else {
-+                // error message was put out by PaFindFunction()
-+                // Put on a dummy node for error recovery
-+                ConstantUnion *unionArray = new ConstantUnion[1];
-+                unionArray->setFConst(0.0f);
-+                (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtFloat, EbpUndefined, EvqConst), (yyvsp[(1) - (1)].interm).line);
-+                context->recover();
-+            }
-+        }
-+        delete fnCall;
-+    ;}
-+    break;
-+
-+  case 16:
-+
-+    {
-+        (yyval.interm) = (yyvsp[(1) - (1)].interm);
-+    ;}
-+    break;
-+
-+  case 17:
-+
-+    {
-+        context->error((yyvsp[(3) - (3)].interm).line, "methods are not supported", "");
-+        context->recover();
-+        (yyval.interm) = (yyvsp[(3) - (3)].interm);
-+    ;}
-+    break;
-+
-+  case 18:
-+
-+    {
-+        (yyval.interm) = (yyvsp[(1) - (2)].interm);
-+        (yyval.interm).line = (yyvsp[(2) - (2)].lex).line;
-+    ;}
-+    break;
-+
-+  case 19:
-+
-+    {
-+        (yyval.interm) = (yyvsp[(1) - (2)].interm);
-+        (yyval.interm).line = (yyvsp[(2) - (2)].lex).line;
-+    ;}
-+    break;
-+
-+  case 20:
-+
-+    {
-+        (yyval.interm).function = (yyvsp[(1) - (2)].interm.function);
-+        (yyval.interm).intermNode = 0;
-+    ;}
-+    break;
-+
-+  case 21:
-+
-+    {
-+        (yyval.interm).function = (yyvsp[(1) - (1)].interm.function);
-+        (yyval.interm).intermNode = 0;
-+    ;}
-+    break;
-+
-+  case 22:
-+
-+    {
-+        TParameter param = { 0, new TType((yyvsp[(2) - (2)].interm.intermTypedNode)->getType()) };
-+        (yyvsp[(1) - (2)].interm.function)->addParameter(param);
-+        (yyval.interm).function = (yyvsp[(1) - (2)].interm.function);
-+        (yyval.interm).intermNode = (yyvsp[(2) - (2)].interm.intermTypedNode);
-+    ;}
-+    break;
-+
-+  case 23:
-+
-+    {
-+        TParameter param = { 0, new TType((yyvsp[(3) - (3)].interm.intermTypedNode)->getType()) };
-+        (yyvsp[(1) - (3)].interm).function->addParameter(param);
-+        (yyval.interm).function = (yyvsp[(1) - (3)].interm).function;
-+        (yyval.interm).intermNode = context->intermediate.growAggregate((yyvsp[(1) - (3)].interm).intermNode, (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line);
-+    ;}
-+    break;
-+
-+  case 24:
-+
-+    {
-+        (yyval.interm.function) = (yyvsp[(1) - (2)].interm.function);
-+    ;}
-+    break;
-+
-+  case 25:
-+
-+    {
-+        //
-+        // Constructor
-+        //
-+        TOperator op = EOpNull;
-+        if ((yyvsp[(1) - (1)].interm.type).userDef) {
-+            op = EOpConstructStruct;
-+        } else {
-+            switch ((yyvsp[(1) - (1)].interm.type).type) {
-+            case EbtFloat:
-+                if ((yyvsp[(1) - (1)].interm.type).matrix) {
-+                    switch((yyvsp[(1) - (1)].interm.type).size) {
-+                    case 2:                                     op = EOpConstructMat2;  break;
-+                    case 3:                                     op = EOpConstructMat3;  break;
-+                    case 4:                                     op = EOpConstructMat4;  break;
-+                    }
-+                } else {
-+                    switch((yyvsp[(1) - (1)].interm.type).size) {
-+                    case 1:                                     op = EOpConstructFloat; break;
-+                    case 2:                                     op = EOpConstructVec2;  break;
-+                    case 3:                                     op = EOpConstructVec3;  break;
-+                    case 4:                                     op = EOpConstructVec4;  break;
-+                    }
-+                }
-+                break;
-+            case EbtInt:
-+                switch((yyvsp[(1) - (1)].interm.type).size) {
-+                case 1:                                         op = EOpConstructInt;   break;
-+                case 2:       FRAG_VERT_ONLY("ivec2", (yyvsp[(1) - (1)].interm.type).line); op = EOpConstructIVec2; break;
-+                case 3:       FRAG_VERT_ONLY("ivec3", (yyvsp[(1) - (1)].interm.type).line); op = EOpConstructIVec3; break;
-+                case 4:       FRAG_VERT_ONLY("ivec4", (yyvsp[(1) - (1)].interm.type).line); op = EOpConstructIVec4; break;
-+                }
-+                break;
-+            case EbtBool:
-+                switch((yyvsp[(1) - (1)].interm.type).size) {
-+                case 1:                                         op = EOpConstructBool;  break;
-+                case 2:       FRAG_VERT_ONLY("bvec2", (yyvsp[(1) - (1)].interm.type).line); op = EOpConstructBVec2; break;
-+                case 3:       FRAG_VERT_ONLY("bvec3", (yyvsp[(1) - (1)].interm.type).line); op = EOpConstructBVec3; break;
-+                case 4:       FRAG_VERT_ONLY("bvec4", (yyvsp[(1) - (1)].interm.type).line); op = EOpConstructBVec4; break;
-+                }
-+                break;
-+            default: break;
-+            }
-+            if (op == EOpNull) {
-+                context->error((yyvsp[(1) - (1)].interm.type).line, "cannot construct this type", getBasicString((yyvsp[(1) - (1)].interm.type).type));
-+                context->recover();
-+                (yyvsp[(1) - (1)].interm.type).type = EbtFloat;
-+                op = EOpConstructFloat;
-+            }
-+        }
-+        TString tempString;
-+        TType type((yyvsp[(1) - (1)].interm.type));
-+        TFunction *function = new TFunction(&tempString, type, op);
-+        (yyval.interm.function) = function;
-+    ;}
-+    break;
-+
-+  case 26:
-+
-+    {
-+        if (context->reservedErrorCheck((yyvsp[(1) - (1)].lex).line, *(yyvsp[(1) - (1)].lex).string))
-+            context->recover();
-+        TType type(EbtVoid, EbpUndefined);
-+        TFunction *function = new TFunction((yyvsp[(1) - (1)].lex).string, type);
-+        (yyval.interm.function) = function;
-+    ;}
-+    break;
-+
-+  case 27:
-+
-+    {
-+        if (context->reservedErrorCheck((yyvsp[(1) - (1)].lex).line, *(yyvsp[(1) - (1)].lex).string))
-+            context->recover();
-+        TType type(EbtVoid, EbpUndefined);
-+        TFunction *function = new TFunction((yyvsp[(1) - (1)].lex).string, type);
-+        (yyval.interm.function) = function;
-+    ;}
-+    break;
-+
-+  case 28:
-+
-+    {
-+        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
-+    ;}
-+    break;
-+
-+  case 29:
-+
-+    {
-+        if (context->lValueErrorCheck((yyvsp[(1) - (2)].lex).line, "++", (yyvsp[(2) - (2)].interm.intermTypedNode)))
-+            context->recover();
-+        (yyval.interm.intermTypedNode) = context->intermediate.addUnaryMath(EOpPreIncrement, (yyvsp[(2) - (2)].interm.intermTypedNode), (yyvsp[(1) - (2)].lex).line, context->symbolTable);
-+        if ((yyval.interm.intermTypedNode) == 0) {
-+            context->unaryOpError((yyvsp[(1) - (2)].lex).line, "++", (yyvsp[(2) - (2)].interm.intermTypedNode)->getCompleteString());
-+            context->recover();
-+            (yyval.interm.intermTypedNode) = (yyvsp[(2) - (2)].interm.intermTypedNode);
-+        }
-+    ;}
-+    break;
-+
-+  case 30:
-+
-+    {
-+        if (context->lValueErrorCheck((yyvsp[(1) - (2)].lex).line, "--", (yyvsp[(2) - (2)].interm.intermTypedNode)))
-+            context->recover();
-+        (yyval.interm.intermTypedNode) = context->intermediate.addUnaryMath(EOpPreDecrement, (yyvsp[(2) - (2)].interm.intermTypedNode), (yyvsp[(1) - (2)].lex).line, context->symbolTable);
-+        if ((yyval.interm.intermTypedNode) == 0) {
-+            context->unaryOpError((yyvsp[(1) - (2)].lex).line, "--", (yyvsp[(2) - (2)].interm.intermTypedNode)->getCompleteString());
-+            context->recover();
-+            (yyval.interm.intermTypedNode) = (yyvsp[(2) - (2)].interm.intermTypedNode);
-+        }
-+    ;}
-+    break;
-+
-+  case 31:
-+
-+    {
-+        if ((yyvsp[(1) - (2)].interm).op != EOpNull) {
-+            (yyval.interm.intermTypedNode) = context->intermediate.addUnaryMath((yyvsp[(1) - (2)].interm).op, (yyvsp[(2) - (2)].interm.intermTypedNode), (yyvsp[(1) - (2)].interm).line, context->symbolTable);
-+            if ((yyval.interm.intermTypedNode) == 0) {
-+                const char* errorOp = "";
-+                switch((yyvsp[(1) - (2)].interm).op) {
-+                case EOpNegative:   errorOp = "-"; break;
-+                case EOpLogicalNot: errorOp = "!"; break;
-+                default: break;
-+                }
-+                context->unaryOpError((yyvsp[(1) - (2)].interm).line, errorOp, (yyvsp[(2) - (2)].interm.intermTypedNode)->getCompleteString());
-+                context->recover();
-+                (yyval.interm.intermTypedNode) = (yyvsp[(2) - (2)].interm.intermTypedNode);
-+            }
-+        } else
-+            (yyval.interm.intermTypedNode) = (yyvsp[(2) - (2)].interm.intermTypedNode);
-+    ;}
-+    break;
-+
-+  case 32:
-+
-+    { (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpNull; ;}
-+    break;
-+
-+  case 33:
-+
-+    { (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpNegative; ;}
-+    break;
-+
-+  case 34:
-+
-+    { (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpLogicalNot; ;}
-+    break;
-+
-+  case 35:
-+
-+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); ;}
-+    break;
-+
-+  case 36:
-+
-+    {
-+        FRAG_VERT_ONLY("*", (yyvsp[(2) - (3)].lex).line);
-+        (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpMul, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
-+        if ((yyval.interm.intermTypedNode) == 0) {
-+            context->binaryOpError((yyvsp[(2) - (3)].lex).line, "*", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
-+            context->recover();
-+            (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
-+        }
-+    ;}
-+    break;
-+
-+  case 37:
-+
-+    {
-+        FRAG_VERT_ONLY("/", (yyvsp[(2) - (3)].lex).line);
-+        (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpDiv, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
-+        if ((yyval.interm.intermTypedNode) == 0) {
-+            context->binaryOpError((yyvsp[(2) - (3)].lex).line, "/", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
-+            context->recover();
-+            (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
-+        }
-+    ;}
-+    break;
-+
-+  case 38:
-+
-+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); ;}
-+    break;
-+
-+  case 39:
-+
-+    {
-+        (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpAdd, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
-+        if ((yyval.interm.intermTypedNode) == 0) {
-+            context->binaryOpError((yyvsp[(2) - (3)].lex).line, "+", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
-+            context->recover();
-+            (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
-+        }
-+    ;}
-+    break;
-+
-+  case 40:
-+
-+    {
-+        (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpSub, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
-+        if ((yyval.interm.intermTypedNode) == 0) {
-+            context->binaryOpError((yyvsp[(2) - (3)].lex).line, "-", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
-+            context->recover();
-+            (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
-+        }
-+    ;}
-+    break;
-+
-+  case 41:
-+
-+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); ;}
-+    break;
-+
-+  case 42:
-+
-+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); ;}
-+    break;
-+
-+  case 43:
-+
-+    {
-+        (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpLessThan, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
-+        if ((yyval.interm.intermTypedNode) == 0) {
-+            context->binaryOpError((yyvsp[(2) - (3)].lex).line, "<", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
-+            context->recover();
-+            ConstantUnion *unionArray = new ConstantUnion[1];
-+            unionArray->setBConst(false);
-+            (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtBool, EbpUndefined, EvqConst), (yyvsp[(2) - (3)].lex).line);
-+        }
-+    ;}
-+    break;
-+
-+  case 44:
-+
-+    {
-+        (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpGreaterThan, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
-+        if ((yyval.interm.intermTypedNode) == 0) {
-+            context->binaryOpError((yyvsp[(2) - (3)].lex).line, ">", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
-+            context->recover();
-+            ConstantUnion *unionArray = new ConstantUnion[1];
-+            unionArray->setBConst(false);
-+            (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtBool, EbpUndefined, EvqConst), (yyvsp[(2) - (3)].lex).line);
-+        }
-+    ;}
-+    break;
-+
-+  case 45:
-+
-+    {
-+        (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpLessThanEqual, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
-+        if ((yyval.interm.intermTypedNode) == 0) {
-+            context->binaryOpError((yyvsp[(2) - (3)].lex).line, "<=", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
-+            context->recover();
-+            ConstantUnion *unionArray = new ConstantUnion[1];
-+            unionArray->setBConst(false);
-+            (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtBool, EbpUndefined, EvqConst), (yyvsp[(2) - (3)].lex).line);
-+        }
-+    ;}
-+    break;
-+
-+  case 46:
-+
-+    {
-+        (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpGreaterThanEqual, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
-+        if ((yyval.interm.intermTypedNode) == 0) {
-+            context->binaryOpError((yyvsp[(2) - (3)].lex).line, ">=", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
-+            context->recover();
-+            ConstantUnion *unionArray = new ConstantUnion[1];
-+            unionArray->setBConst(false);
-+            (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtBool, EbpUndefined, EvqConst), (yyvsp[(2) - (3)].lex).line);
-+        }
-+    ;}
-+    break;
-+
-+  case 47:
-+
-+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); ;}
-+    break;
-+
-+  case 48:
-+
-+    {
-+        (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpEqual, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
-+        if ((yyval.interm.intermTypedNode) == 0) {
-+            context->binaryOpError((yyvsp[(2) - (3)].lex).line, "==", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
-+            context->recover();
-+            ConstantUnion *unionArray = new ConstantUnion[1];
-+            unionArray->setBConst(false);
-+            (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtBool, EbpUndefined, EvqConst), (yyvsp[(2) - (3)].lex).line);
-+        }
-+    ;}
-+    break;
-+
-+  case 49:
-+
-+    {
-+        (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpNotEqual, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
-+        if ((yyval.interm.intermTypedNode) == 0) {
-+            context->binaryOpError((yyvsp[(2) - (3)].lex).line, "!=", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
-+            context->recover();
-+            ConstantUnion *unionArray = new ConstantUnion[1];
-+            unionArray->setBConst(false);
-+            (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtBool, EbpUndefined, EvqConst), (yyvsp[(2) - (3)].lex).line);
-+        }
-+    ;}
-+    break;
-+
-+  case 50:
-+
-+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); ;}
-+    break;
-+
-+  case 51:
-+
-+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); ;}
-+    break;
-+
-+  case 52:
-+
-+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); ;}
-+    break;
-+
-+  case 53:
-+
-+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); ;}
-+    break;
-+
-+  case 54:
-+
-+    {
-+        (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpLogicalAnd, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
-+        if ((yyval.interm.intermTypedNode) == 0) {
-+            context->binaryOpError((yyvsp[(2) - (3)].lex).line, "&&", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
-+            context->recover();
-+            ConstantUnion *unionArray = new ConstantUnion[1];
-+            unionArray->setBConst(false);
-+            (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtBool, EbpUndefined, EvqConst), (yyvsp[(2) - (3)].lex).line);
-+        }
-+    ;}
-+    break;
-+
-+  case 55:
-+
-+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); ;}
-+    break;
-+
-+  case 56:
-+
-+    {
-+        (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpLogicalXor, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
-+        if ((yyval.interm.intermTypedNode) == 0) {
-+            context->binaryOpError((yyvsp[(2) - (3)].lex).line, "^^", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
-+            context->recover();
-+            ConstantUnion *unionArray = new ConstantUnion[1];
-+            unionArray->setBConst(false);
-+            (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtBool, EbpUndefined, EvqConst), (yyvsp[(2) - (3)].lex).line);
-+        }
-+    ;}
-+    break;
-+
-+  case 57:
-+
-+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); ;}
-+    break;
-+
-+  case 58:
-+
-+    {
-+        (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpLogicalOr, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
-+        if ((yyval.interm.intermTypedNode) == 0) {
-+            context->binaryOpError((yyvsp[(2) - (3)].lex).line, "||", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
-+            context->recover();
-+            ConstantUnion *unionArray = new ConstantUnion[1];
-+            unionArray->setBConst(false);
-+            (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtBool, EbpUndefined, EvqConst), (yyvsp[(2) - (3)].lex).line);
-+        }
-+    ;}
-+    break;
-+
-+  case 59:
-+
-+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); ;}
-+    break;
-+
-+  case 60:
-+
-+    {
-+       if (context->boolErrorCheck((yyvsp[(2) - (5)].lex).line, (yyvsp[(1) - (5)].interm.intermTypedNode)))
-+            context->recover();
-+
-+        (yyval.interm.intermTypedNode) = context->intermediate.addSelection((yyvsp[(1) - (5)].interm.intermTypedNode), (yyvsp[(3) - (5)].interm.intermTypedNode), (yyvsp[(5) - (5)].interm.intermTypedNode), (yyvsp[(2) - (5)].lex).line);
-+        if ((yyvsp[(3) - (5)].interm.intermTypedNode)->getType() != (yyvsp[(5) - (5)].interm.intermTypedNode)->getType())
-+            (yyval.interm.intermTypedNode) = 0;
-+
-+        if ((yyval.interm.intermTypedNode) == 0) {
-+            context->binaryOpError((yyvsp[(2) - (5)].lex).line, ":", (yyvsp[(3) - (5)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(5) - (5)].interm.intermTypedNode)->getCompleteString());
-+            context->recover();
-+            (yyval.interm.intermTypedNode) = (yyvsp[(5) - (5)].interm.intermTypedNode);
-+        }
-+    ;}
-+    break;
-+
-+  case 61:
-+
-+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); ;}
-+    break;
-+
-+  case 62:
-+
-+    {
-+        if (context->lValueErrorCheck((yyvsp[(2) - (3)].interm).line, "assign", (yyvsp[(1) - (3)].interm.intermTypedNode)))
-+            context->recover();
-+        (yyval.interm.intermTypedNode) = context->intermediate.addAssign((yyvsp[(2) - (3)].interm).op, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].interm).line);
-+        if ((yyval.interm.intermTypedNode) == 0) {
-+            context->assignError((yyvsp[(2) - (3)].interm).line, "assign", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
-+            context->recover();
-+            (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
-+        }
-+    ;}
-+    break;
-+
-+  case 63:
-+
-+    {                                    (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpAssign; ;}
-+    break;
-+
-+  case 64:
-+
-+    { FRAG_VERT_ONLY("*=", (yyvsp[(1) - (1)].lex).line);     (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpMulAssign; ;}
-+    break;
-+
-+  case 65:
-+
-+    { FRAG_VERT_ONLY("/=", (yyvsp[(1) - (1)].lex).line);     (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpDivAssign; ;}
-+    break;
-+
-+  case 66:
-+
-+    {                                    (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpAddAssign; ;}
-+    break;
-+
-+  case 67:
-+
-+    {                                    (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpSubAssign; ;}
-+    break;
-+
-+  case 68:
-+
-+    {
-+        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
-+    ;}
-+    break;
-+
-+  case 69:
-+
-+    {
-+        (yyval.interm.intermTypedNode) = context->intermediate.addComma((yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line);
-+        if ((yyval.interm.intermTypedNode) == 0) {
-+            context->binaryOpError((yyvsp[(2) - (3)].lex).line, ",", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
-+            context->recover();
-+            (yyval.interm.intermTypedNode) = (yyvsp[(3) - (3)].interm.intermTypedNode);
-+        }
-+    ;}
-+    break;
-+
-+  case 70:
-+
-+    {
-+        if (context->constErrorCheck((yyvsp[(1) - (1)].interm.intermTypedNode)))
-+            context->recover();
-+        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
-+    ;}
-+    break;
-+
-+  case 71:
-+
-+    {
-+        TFunction &function = *((yyvsp[(1) - (2)].interm).function);
-+        
-+        TIntermAggregate *prototype = new TIntermAggregate;
-+        prototype->setType(function.getReturnType());
-+        prototype->setName(function.getName());
-+        
-+        for (int i = 0; i < function.getParamCount(); i++)
-+        {
-+            const TParameter &param = function.getParam(i);
-+            if (param.name != 0)
-+            {
-+                TVariable *variable = new TVariable(param.name, *param.type);
-+                
-+                prototype = context->intermediate.growAggregate(prototype, context->intermediate.addSymbol(variable->getUniqueId(), variable->getName(), variable->getType(), (yyvsp[(1) - (2)].interm).line), (yyvsp[(1) - (2)].interm).line);
-+            }
-+            else
-+            {
-+                prototype = context->intermediate.growAggregate(prototype, context->intermediate.addSymbol(0, "", *param.type, (yyvsp[(1) - (2)].interm).line), (yyvsp[(1) - (2)].interm).line);
-+            }
-+        }
-+        
-+        prototype->setOp(EOpPrototype);
-+        (yyval.interm.intermNode) = prototype;
-+
-+        context->symbolTable.pop();
-+    ;}
-+    break;
-+
-+  case 72:
-+
-+    {
-+        if ((yyvsp[(1) - (2)].interm).intermAggregate)
-+            (yyvsp[(1) - (2)].interm).intermAggregate->setOp(EOpDeclaration);
-+        (yyval.interm.intermNode) = (yyvsp[(1) - (2)].interm).intermAggregate;
-+    ;}
-+    break;
-+
-+  case 73:
-+
-+    {
-+        context->symbolTable.setDefaultPrecision( (yyvsp[(3) - (4)].interm.type).type, (yyvsp[(2) - (4)].interm.precision) );
-+        (yyval.interm.intermNode) = 0;
-+    ;}
-+    break;
-+
-+  case 74:
-+
-+    {
-+        //
-+        // Multiple declarations of the same function are allowed.
-+        //
-+        // If this is a definition, the definition production code will check for redefinitions
-+        // (we don't know at this point if it's a definition or not).
-+        //
-+        // Redeclarations are allowed.  But, return types and parameter qualifiers must match.
-+        //
-+        TFunction* prevDec = static_cast<TFunction*>(context->symbolTable.find((yyvsp[(1) - (2)].interm.function)->getMangledName()));
-+        if (prevDec) {
-+            if (prevDec->getReturnType() != (yyvsp[(1) - (2)].interm.function)->getReturnType()) {
-+                context->error((yyvsp[(2) - (2)].lex).line, "overloaded functions must have the same return type", (yyvsp[(1) - (2)].interm.function)->getReturnType().getBasicString());
-+                context->recover();
-+            }
-+            for (int i = 0; i < prevDec->getParamCount(); ++i) {
-+                if (prevDec->getParam(i).type->getQualifier() != (yyvsp[(1) - (2)].interm.function)->getParam(i).type->getQualifier()) {
-+                    context->error((yyvsp[(2) - (2)].lex).line, "overloaded functions must have the same parameter qualifiers", (yyvsp[(1) - (2)].interm.function)->getParam(i).type->getQualifierString());
-+                    context->recover();
-+                }
-+            }
-+        }
-+
-+        //
-+        // If this is a redeclaration, it could also be a definition,
-+        // in which case, we want to use the variable names from this one, and not the one that's
-+        // being redeclared.  So, pass back up this declaration, not the one in the symbol table.
-+        //
-+        (yyval.interm).function = (yyvsp[(1) - (2)].interm.function);
-+        (yyval.interm).line = (yyvsp[(2) - (2)].lex).line;
-+
-+        // We're at the inner scope level of the function's arguments and body statement.
-+        // Add the function prototype to the surrounding scope instead.
-+        context->symbolTable.getOuterLevel()->insert(*(yyval.interm).function);
-+    ;}
-+    break;
-+
-+  case 75:
-+
-+    {
-+        (yyval.interm.function) = (yyvsp[(1) - (1)].interm.function);
-+    ;}
-+    break;
-+
-+  case 76:
-+
-+    {
-+        (yyval.interm.function) = (yyvsp[(1) - (1)].interm.function);
-+    ;}
-+    break;
-+
-+  case 77:
-+
-+    {
-+        // Add the parameter
-+        (yyval.interm.function) = (yyvsp[(1) - (2)].interm.function);
-+        if ((yyvsp[(2) - (2)].interm).param.type->getBasicType() != EbtVoid)
-+            (yyvsp[(1) - (2)].interm.function)->addParameter((yyvsp[(2) - (2)].interm).param);
-+        else
-+            delete (yyvsp[(2) - (2)].interm).param.type;
-+    ;}
-+    break;
-+
-+  case 78:
-+
-+    {
-+        //
-+        // Only first parameter of one-parameter functions can be void
-+        // The check for named parameters not being void is done in parameter_declarator
-+        //
-+        if ((yyvsp[(3) - (3)].interm).param.type->getBasicType() == EbtVoid) {
-+            //
-+            // This parameter > first is void
-+            //
-+            context->error((yyvsp[(2) - (3)].lex).line, "cannot be an argument type except for '(void)'", "void");
-+            context->recover();
-+            delete (yyvsp[(3) - (3)].interm).param.type;
-+        } else {
-+            // Add the parameter
-+            (yyval.interm.function) = (yyvsp[(1) - (3)].interm.function);
-+            (yyvsp[(1) - (3)].interm.function)->addParameter((yyvsp[(3) - (3)].interm).param);
-+        }
-+    ;}
-+    break;
-+
-+  case 79:
-+
-+    {
-+        if ((yyvsp[(1) - (3)].interm.type).qualifier != EvqGlobal && (yyvsp[(1) - (3)].interm.type).qualifier != EvqTemporary) {
-+            context->error((yyvsp[(2) - (3)].lex).line, "no qualifiers allowed for function return", getQualifierString((yyvsp[(1) - (3)].interm.type).qualifier));
-+            context->recover();
-+        }
-+        // make sure a sampler is not involved as well...
-+        if (context->structQualifierErrorCheck((yyvsp[(2) - (3)].lex).line, (yyvsp[(1) - (3)].interm.type)))
-+            context->recover();
-+
-+        // Add the function as a prototype after parsing it (we do not support recursion)
-+        TFunction *function;
-+        TType type((yyvsp[(1) - (3)].interm.type));
-+        function = new TFunction((yyvsp[(2) - (3)].lex).string, type);
-+        (yyval.interm.function) = function;
-+        
-+        context->symbolTable.push();
-+    ;}
-+    break;
-+
-+  case 80:
-+
-+    {
-+        if ((yyvsp[(1) - (2)].interm.type).type == EbtVoid) {
-+            context->error((yyvsp[(2) - (2)].lex).line, "illegal use of type 'void'", (yyvsp[(2) - (2)].lex).string->c_str());
-+            context->recover();
-+        }
-+        if (context->reservedErrorCheck((yyvsp[(2) - (2)].lex).line, *(yyvsp[(2) - (2)].lex).string))
-+            context->recover();
-+        TParameter param = {(yyvsp[(2) - (2)].lex).string, new TType((yyvsp[(1) - (2)].interm.type))};
-+        (yyval.interm).line = (yyvsp[(2) - (2)].lex).line;
-+        (yyval.interm).param = param;
-+    ;}
-+    break;
-+
-+  case 81:
-+
-+    {
-+        // Check that we can make an array out of this type
-+        if (context->arrayTypeErrorCheck((yyvsp[(3) - (5)].lex).line, (yyvsp[(1) - (5)].interm.type)))
-+            context->recover();
-+
-+        if (context->reservedErrorCheck((yyvsp[(2) - (5)].lex).line, *(yyvsp[(2) - (5)].lex).string))
-+            context->recover();
-+
-+        int size;
-+        if (context->arraySizeErrorCheck((yyvsp[(3) - (5)].lex).line, (yyvsp[(4) - (5)].interm.intermTypedNode), size))
-+            context->recover();
-+        (yyvsp[(1) - (5)].interm.type).setArray(true, size);
-+
-+        TType* type = new TType((yyvsp[(1) - (5)].interm.type));
-+        TParameter param = { (yyvsp[(2) - (5)].lex).string, type };
-+        (yyval.interm).line = (yyvsp[(2) - (5)].lex).line;
-+        (yyval.interm).param = param;
-+    ;}
-+    break;
-+
-+  case 82:
-+
-+    {
-+        (yyval.interm) = (yyvsp[(3) - (3)].interm);
-+        if (context->paramErrorCheck((yyvsp[(3) - (3)].interm).line, (yyvsp[(1) - (3)].interm.type).qualifier, (yyvsp[(2) - (3)].interm.qualifier), (yyval.interm).param.type))
-+            context->recover();
-+    ;}
-+    break;
-+
-+  case 83:
-+
-+    {
-+        (yyval.interm) = (yyvsp[(2) - (2)].interm);
-+        if (context->parameterSamplerErrorCheck((yyvsp[(2) - (2)].interm).line, (yyvsp[(1) - (2)].interm.qualifier), *(yyvsp[(2) - (2)].interm).param.type))
-+            context->recover();
-+        if (context->paramErrorCheck((yyvsp[(2) - (2)].interm).line, EvqTemporary, (yyvsp[(1) - (2)].interm.qualifier), (yyval.interm).param.type))
-+            context->recover();
-+    ;}
-+    break;
-+
-+  case 84:
-+
-+    {
-+        (yyval.interm) = (yyvsp[(3) - (3)].interm);
-+        if (context->paramErrorCheck((yyvsp[(3) - (3)].interm).line, (yyvsp[(1) - (3)].interm.type).qualifier, (yyvsp[(2) - (3)].interm.qualifier), (yyval.interm).param.type))
-+            context->recover();
-+    ;}
-+    break;
-+
-+  case 85:
-+
-+    {
-+        (yyval.interm) = (yyvsp[(2) - (2)].interm);
-+        if (context->parameterSamplerErrorCheck((yyvsp[(2) - (2)].interm).line, (yyvsp[(1) - (2)].interm.qualifier), *(yyvsp[(2) - (2)].interm).param.type))
-+            context->recover();
-+        if (context->paramErrorCheck((yyvsp[(2) - (2)].interm).line, EvqTemporary, (yyvsp[(1) - (2)].interm.qualifier), (yyval.interm).param.type))
-+            context->recover();
-+    ;}
-+    break;
-+
-+  case 86:
-+
-+    {
-+        (yyval.interm.qualifier) = EvqIn;
-+    ;}
-+    break;
-+
-+  case 87:
-+
-+    {
-+        (yyval.interm.qualifier) = EvqIn;
-+    ;}
-+    break;
-+
-+  case 88:
-+
-+    {
-+        (yyval.interm.qualifier) = EvqOut;
-+    ;}
-+    break;
-+
-+  case 89:
-+
-+    {
-+        (yyval.interm.qualifier) = EvqInOut;
-+    ;}
-+    break;
-+
-+  case 90:
-+
-+    {
-+        TParameter param = { 0, new TType((yyvsp[(1) - (1)].interm.type)) };
-+        (yyval.interm).param = param;
-+    ;}
-+    break;
-+
-+  case 91:
-+
-+    {
-+        (yyval.interm) = (yyvsp[(1) - (1)].interm);
-+    ;}
-+    break;
-+
-+  case 92:
-+
-+    {
-+        if ((yyvsp[(1) - (3)].interm).type.type == EbtInvariant && !(yyvsp[(3) - (3)].lex).symbol)
-+        {
-+            context->error((yyvsp[(3) - (3)].lex).line, "undeclared identifier declared as invariant", (yyvsp[(3) - (3)].lex).string->c_str());
-+            context->recover();
-+        }
-+
-+        TIntermSymbol* symbol = context->intermediate.addSymbol(0, *(yyvsp[(3) - (3)].lex).string, TType((yyvsp[(1) - (3)].interm).type), (yyvsp[(3) - (3)].lex).line);
-+        (yyval.interm).intermAggregate = context->intermediate.growAggregate((yyvsp[(1) - (3)].interm).intermNode, symbol, (yyvsp[(3) - (3)].lex).line);
-+        
-+        if (context->structQualifierErrorCheck((yyvsp[(3) - (3)].lex).line, (yyval.interm).type))
-+            context->recover();
-+
-+        if (context->nonInitConstErrorCheck((yyvsp[(3) - (3)].lex).line, *(yyvsp[(3) - (3)].lex).string, (yyval.interm).type, false))
-+            context->recover();
-+
-+        TVariable* variable = 0;
-+        if (context->nonInitErrorCheck((yyvsp[(3) - (3)].lex).line, *(yyvsp[(3) - (3)].lex).string, (yyval.interm).type, variable))
-+            context->recover();
-+        if (symbol && variable)
-+            symbol->setId(variable->getUniqueId());
-+    ;}
-+    break;
-+
-+  case 93:
-+
-+    {
-+        if (context->structQualifierErrorCheck((yyvsp[(3) - (5)].lex).line, (yyvsp[(1) - (5)].interm).type))
-+            context->recover();
-+
-+        if (context->nonInitConstErrorCheck((yyvsp[(3) - (5)].lex).line, *(yyvsp[(3) - (5)].lex).string, (yyvsp[(1) - (5)].interm).type, true))
-+            context->recover();
-+
-+        (yyval.interm) = (yyvsp[(1) - (5)].interm);
-+
-+        if (context->arrayTypeErrorCheck((yyvsp[(4) - (5)].lex).line, (yyvsp[(1) - (5)].interm).type) || context->arrayQualifierErrorCheck((yyvsp[(4) - (5)].lex).line, (yyvsp[(1) - (5)].interm).type))
-+            context->recover();
-+        else {
-+            (yyvsp[(1) - (5)].interm).type.setArray(true);
-+            TVariable* variable;
-+            if (context->arrayErrorCheck((yyvsp[(4) - (5)].lex).line, *(yyvsp[(3) - (5)].lex).string, (yyvsp[(1) - (5)].interm).type, variable))
-+                context->recover();
-+        }
-+    ;}
-+    break;
-+
-+  case 94:
-+
-+    {
-+        if (context->structQualifierErrorCheck((yyvsp[(3) - (6)].lex).line, (yyvsp[(1) - (6)].interm).type))
-+            context->recover();
-+
-+        if (context->nonInitConstErrorCheck((yyvsp[(3) - (6)].lex).line, *(yyvsp[(3) - (6)].lex).string, (yyvsp[(1) - (6)].interm).type, true))
-+            context->recover();
-+
-+        (yyval.interm) = (yyvsp[(1) - (6)].interm);
-+
-+        if (context->arrayTypeErrorCheck((yyvsp[(4) - (6)].lex).line, (yyvsp[(1) - (6)].interm).type) || context->arrayQualifierErrorCheck((yyvsp[(4) - (6)].lex).line, (yyvsp[(1) - (6)].interm).type))
-+            context->recover();
-+        else {
-+            int size;
-+            if (context->arraySizeErrorCheck((yyvsp[(4) - (6)].lex).line, (yyvsp[(5) - (6)].interm.intermTypedNode), size))
-+                context->recover();
-+            (yyvsp[(1) - (6)].interm).type.setArray(true, size);
-+            TVariable* variable = 0;
-+            if (context->arrayErrorCheck((yyvsp[(4) - (6)].lex).line, *(yyvsp[(3) - (6)].lex).string, (yyvsp[(1) - (6)].interm).type, variable))
-+                context->recover();
-+            TType type = TType((yyvsp[(1) - (6)].interm).type);
-+            type.setArraySize(size);
-+            (yyval.interm).intermAggregate = context->intermediate.growAggregate((yyvsp[(1) - (6)].interm).intermNode, context->intermediate.addSymbol(variable ? variable->getUniqueId() : 0, *(yyvsp[(3) - (6)].lex).string, type, (yyvsp[(3) - (6)].lex).line), (yyvsp[(3) - (6)].lex).line);
-+        }
-+    ;}
-+    break;
-+
-+  case 95:
-+
-+    {
-+        if (context->structQualifierErrorCheck((yyvsp[(3) - (5)].lex).line, (yyvsp[(1) - (5)].interm).type))
-+            context->recover();
-+
-+        (yyval.interm) = (yyvsp[(1) - (5)].interm);
-+
-+        TIntermNode* intermNode;
-+        if (!context->executeInitializer((yyvsp[(3) - (5)].lex).line, *(yyvsp[(3) - (5)].lex).string, (yyvsp[(1) - (5)].interm).type, (yyvsp[(5) - (5)].interm.intermTypedNode), intermNode)) {
-+            //
-+            // build the intermediate representation
-+            //
-+            if (intermNode)
-+        (yyval.interm).intermAggregate = context->intermediate.growAggregate((yyvsp[(1) - (5)].interm).intermNode, intermNode, (yyvsp[(4) - (5)].lex).line);
-+            else
-+                (yyval.interm).intermAggregate = (yyvsp[(1) - (5)].interm).intermAggregate;
-+        } else {
-+            context->recover();
-+            (yyval.interm).intermAggregate = 0;
-+        }
-+    ;}
-+    break;
-+
-+  case 96:
-+
-+    {
-+        (yyval.interm).type = (yyvsp[(1) - (1)].interm.type);
-+        (yyval.interm).intermAggregate = context->intermediate.makeAggregate(context->intermediate.addSymbol(0, "", TType((yyvsp[(1) - (1)].interm.type)), (yyvsp[(1) - (1)].interm.type).line), (yyvsp[(1) - (1)].interm.type).line);
-+    ;}
-+    break;
-+
-+  case 97:
-+
-+    {
-+        TIntermSymbol* symbol = context->intermediate.addSymbol(0, *(yyvsp[(2) - (2)].lex).string, TType((yyvsp[(1) - (2)].interm.type)), (yyvsp[(2) - (2)].lex).line);
-+        (yyval.interm).intermAggregate = context->intermediate.makeAggregate(symbol, (yyvsp[(2) - (2)].lex).line);
-+        
-+        if (context->structQualifierErrorCheck((yyvsp[(2) - (2)].lex).line, (yyval.interm).type))
-+            context->recover();
-+
-+        if (context->nonInitConstErrorCheck((yyvsp[(2) - (2)].lex).line, *(yyvsp[(2) - (2)].lex).string, (yyval.interm).type, false))
-+            context->recover();
-+            
-+            (yyval.interm).type = (yyvsp[(1) - (2)].interm.type);
-+
-+        TVariable* variable = 0;
-+        if (context->nonInitErrorCheck((yyvsp[(2) - (2)].lex).line, *(yyvsp[(2) - (2)].lex).string, (yyval.interm).type, variable))
-+            context->recover();
-+        if (variable && symbol)
-+            symbol->setId(variable->getUniqueId());
-+    ;}
-+    break;
-+
-+  case 98:
-+
-+    {
-+        context->error((yyvsp[(2) - (4)].lex).line, "unsized array declarations not supported", (yyvsp[(2) - (4)].lex).string->c_str());
-+        context->recover();
-+
-+        TIntermSymbol* symbol = context->intermediate.addSymbol(0, *(yyvsp[(2) - (4)].lex).string, TType((yyvsp[(1) - (4)].interm.type)), (yyvsp[(2) - (4)].lex).line);
-+        (yyval.interm).intermAggregate = context->intermediate.makeAggregate(symbol, (yyvsp[(2) - (4)].lex).line);
-+        (yyval.interm).type = (yyvsp[(1) - (4)].interm.type);
-+    ;}
-+    break;
-+
-+  case 99:
-+
-+    {
-+        TType type = TType((yyvsp[(1) - (5)].interm.type));
-+        int size;
-+        if (context->arraySizeErrorCheck((yyvsp[(2) - (5)].lex).line, (yyvsp[(4) - (5)].interm.intermTypedNode), size))
-+            context->recover();
-+        type.setArraySize(size);
-+        TIntermSymbol* symbol = context->intermediate.addSymbol(0, *(yyvsp[(2) - (5)].lex).string, type, (yyvsp[(2) - (5)].lex).line);
-+        (yyval.interm).intermAggregate = context->intermediate.makeAggregate(symbol, (yyvsp[(2) - (5)].lex).line);
-+        
-+        if (context->structQualifierErrorCheck((yyvsp[(2) - (5)].lex).line, (yyvsp[(1) - (5)].interm.type)))
-+            context->recover();
-+
-+        if (context->nonInitConstErrorCheck((yyvsp[(2) - (5)].lex).line, *(yyvsp[(2) - (5)].lex).string, (yyvsp[(1) - (5)].interm.type), true))
-+            context->recover();
-+
-+        (yyval.interm).type = (yyvsp[(1) - (5)].interm.type);
-+
-+        if (context->arrayTypeErrorCheck((yyvsp[(3) - (5)].lex).line, (yyvsp[(1) - (5)].interm.type)) || context->arrayQualifierErrorCheck((yyvsp[(3) - (5)].lex).line, (yyvsp[(1) - (5)].interm.type)))
-+            context->recover();
-+        else {
-+            int size;
-+            if (context->arraySizeErrorCheck((yyvsp[(3) - (5)].lex).line, (yyvsp[(4) - (5)].interm.intermTypedNode), size))
-+                context->recover();
-+
-+            (yyvsp[(1) - (5)].interm.type).setArray(true, size);
-+            TVariable* variable = 0;
-+            if (context->arrayErrorCheck((yyvsp[(3) - (5)].lex).line, *(yyvsp[(2) - (5)].lex).string, (yyvsp[(1) - (5)].interm.type), variable))
-+                context->recover();
-+            if (variable && symbol)
-+                symbol->setId(variable->getUniqueId());
-+        }
-+    ;}
-+    break;
-+
-+  case 100:
-+
-+    {
-+        if (context->structQualifierErrorCheck((yyvsp[(2) - (4)].lex).line, (yyvsp[(1) - (4)].interm.type)))
-+            context->recover();
-+
-+        (yyval.interm).type = (yyvsp[(1) - (4)].interm.type);
-+
-+        TIntermNode* intermNode;
-+        if (!context->executeInitializer((yyvsp[(2) - (4)].lex).line, *(yyvsp[(2) - (4)].lex).string, (yyvsp[(1) - (4)].interm.type), (yyvsp[(4) - (4)].interm.intermTypedNode), intermNode)) {
-+        //
-+        // Build intermediate representation
-+        //
-+            if(intermNode)
-+                (yyval.interm).intermAggregate = context->intermediate.makeAggregate(intermNode, (yyvsp[(3) - (4)].lex).line);
-+            else
-+                (yyval.interm).intermAggregate = 0;
-+        } else {
-+            context->recover();
-+            (yyval.interm).intermAggregate = 0;
-+        }
-+    ;}
-+    break;
-+
-+  case 101:
-+
-+    {
-+        VERTEX_ONLY("invariant declaration", (yyvsp[(1) - (2)].lex).line);
-+        if (context->globalErrorCheck((yyvsp[(1) - (2)].lex).line, context->symbolTable.atGlobalLevel(), "invariant varying"))
-+            context->recover();
-+        (yyval.interm).type.setBasic(EbtInvariant, EvqInvariantVaryingOut, (yyvsp[(2) - (2)].lex).line);
-+        if (!(yyvsp[(2) - (2)].lex).symbol)
-+        {
-+            context->error((yyvsp[(2) - (2)].lex).line, "undeclared identifier declared as invariant", (yyvsp[(2) - (2)].lex).string->c_str());
-+            context->recover();
-+            
-+            (yyval.interm).intermAggregate = 0;
-+        }
-+        else
-+        {
-+            TIntermSymbol *symbol = context->intermediate.addSymbol(0, *(yyvsp[(2) - (2)].lex).string, TType((yyval.interm).type), (yyvsp[(2) - (2)].lex).line);
-+            (yyval.interm).intermAggregate = context->intermediate.makeAggregate(symbol, (yyvsp[(2) - (2)].lex).line);
-+        }
-+    ;}
-+    break;
-+
-+  case 102:
-+
-+    {
-+        (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
-+
-+        if ((yyvsp[(1) - (1)].interm.type).array) {
-+            context->error((yyvsp[(1) - (1)].interm.type).line, "not supported", "first-class array");
-+            context->recover();
-+            (yyvsp[(1) - (1)].interm.type).setArray(false);
-+        }
-+    ;}
-+    break;
-+
-+  case 103:
-+
-+    {
-+        if ((yyvsp[(2) - (2)].interm.type).array) {
-+            context->error((yyvsp[(2) - (2)].interm.type).line, "not supported", "first-class array");
-+            context->recover();
-+            (yyvsp[(2) - (2)].interm.type).setArray(false);
-+        }
-+
-+        if ((yyvsp[(1) - (2)].interm.type).qualifier == EvqAttribute &&
-+            ((yyvsp[(2) - (2)].interm.type).type == EbtBool || (yyvsp[(2) - (2)].interm.type).type == EbtInt)) {
-+            context->error((yyvsp[(2) - (2)].interm.type).line, "cannot be bool or int", getQualifierString((yyvsp[(1) - (2)].interm.type).qualifier));
-+            context->recover();
-+        }
-+        if (((yyvsp[(1) - (2)].interm.type).qualifier == EvqVaryingIn || (yyvsp[(1) - (2)].interm.type).qualifier == EvqVaryingOut) &&
-+            ((yyvsp[(2) - (2)].interm.type).type == EbtBool || (yyvsp[(2) - (2)].interm.type).type == EbtInt)) {
-+            context->error((yyvsp[(2) - (2)].interm.type).line, "cannot be bool or int", getQualifierString((yyvsp[(1) - (2)].interm.type).qualifier));
-+            context->recover();
-+        }
-+        (yyval.interm.type) = (yyvsp[(2) - (2)].interm.type);
-+        (yyval.interm.type).qualifier = (yyvsp[(1) - (2)].interm.type).qualifier;
-+    ;}
-+    break;
-+
-+  case 104:
-+
-+    {
-+        (yyval.interm.type).setBasic(EbtVoid, EvqConst, (yyvsp[(1) - (1)].lex).line);
-+    ;}
-+    break;
-+
-+  case 105:
-+
-+    {
-+        VERTEX_ONLY("attribute", (yyvsp[(1) - (1)].lex).line);
-+        if (context->globalErrorCheck((yyvsp[(1) - (1)].lex).line, context->symbolTable.atGlobalLevel(), "attribute"))
-+            context->recover();
-+        (yyval.interm.type).setBasic(EbtVoid, EvqAttribute, (yyvsp[(1) - (1)].lex).line);
-+    ;}
-+    break;
-+
-+  case 106:
-+
-+    {
-+        if (context->globalErrorCheck((yyvsp[(1) - (1)].lex).line, context->symbolTable.atGlobalLevel(), "varying"))
-+            context->recover();
-+        if (context->shaderType == SH_VERTEX_SHADER)
-+            (yyval.interm.type).setBasic(EbtVoid, EvqVaryingOut, (yyvsp[(1) - (1)].lex).line);
-+        else
-+            (yyval.interm.type).setBasic(EbtVoid, EvqVaryingIn, (yyvsp[(1) - (1)].lex).line);
-+    ;}
-+    break;
-+
-+  case 107:
-+
-+    {
-+        if (context->globalErrorCheck((yyvsp[(1) - (2)].lex).line, context->symbolTable.atGlobalLevel(), "invariant varying"))
-+            context->recover();
-+        if (context->shaderType == SH_VERTEX_SHADER)
-+            (yyval.interm.type).setBasic(EbtVoid, EvqInvariantVaryingOut, (yyvsp[(1) - (2)].lex).line);
-+        else
-+            (yyval.interm.type).setBasic(EbtVoid, EvqInvariantVaryingIn, (yyvsp[(1) - (2)].lex).line);
-+    ;}
-+    break;
-+
-+  case 108:
-+
-+    {
-+        if (context->globalErrorCheck((yyvsp[(1) - (1)].lex).line, context->symbolTable.atGlobalLevel(), "uniform"))
-+            context->recover();
-+        (yyval.interm.type).setBasic(EbtVoid, EvqUniform, (yyvsp[(1) - (1)].lex).line);
-+    ;}
-+    break;
-+
-+  case 109:
-+
-+    {
-+        (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
-+
-+        if ((yyval.interm.type).precision == EbpUndefined) {
-+            (yyval.interm.type).precision = context->symbolTable.getDefaultPrecision((yyvsp[(1) - (1)].interm.type).type);
-+            if (context->precisionErrorCheck((yyvsp[(1) - (1)].interm.type).line, (yyval.interm.type).precision, (yyvsp[(1) - (1)].interm.type).type)) {
-+                context->recover();
-+            }
-+        }
-+    ;}
-+    break;
-+
-+  case 110:
-+
-+    {
-+        (yyval.interm.type) = (yyvsp[(2) - (2)].interm.type);
-+        (yyval.interm.type).precision = (yyvsp[(1) - (2)].interm.precision);
-+    ;}
-+    break;
-+
-+  case 111:
-+
-+    {
-+        (yyval.interm.precision) = EbpHigh;
-+    ;}
-+    break;
-+
-+  case 112:
-+
-+    {
-+        (yyval.interm.precision) = EbpMedium;
-+    ;}
-+    break;
-+
-+  case 113:
-+
-+    {
-+        (yyval.interm.precision) = EbpLow;
-+    ;}
-+    break;
-+
-+  case 114:
-+
-+    {
-+        (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
-+    ;}
-+    break;
-+
-+  case 115:
-+
-+    {
-+        (yyval.interm.type) = (yyvsp[(1) - (4)].interm.type);
-+
-+        if (context->arrayTypeErrorCheck((yyvsp[(2) - (4)].lex).line, (yyvsp[(1) - (4)].interm.type)))
-+            context->recover();
-+        else {
-+            int size;
-+            if (context->arraySizeErrorCheck((yyvsp[(2) - (4)].lex).line, (yyvsp[(3) - (4)].interm.intermTypedNode), size))
-+                context->recover();
-+            (yyval.interm.type).setArray(true, size);
-+        }
-+    ;}
-+    break;
-+
-+  case 116:
-+
-+    {
-+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-+        (yyval.interm.type).setBasic(EbtVoid, qual, (yyvsp[(1) - (1)].lex).line);
-+    ;}
-+    break;
-+
-+  case 117:
-+
-+    {
-+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-+        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
-+    ;}
-+    break;
-+
-+  case 118:
-+
-+    {
-+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-+        (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
-+    ;}
-+    break;
-+
-+  case 119:
-+
-+    {
-+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-+        (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
-+    ;}
-+    break;
-+
-+  case 120:
-+
-+    {
-+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-+        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
-+        (yyval.interm.type).setAggregate(2);
-+    ;}
-+    break;
-+
-+  case 121:
-+
-+    {
-+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-+        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
-+        (yyval.interm.type).setAggregate(3);
-+    ;}
-+    break;
-+
-+  case 122:
-+
-+    {
-+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-+        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
-+        (yyval.interm.type).setAggregate(4);
-+    ;}
-+    break;
-+
-+  case 123:
-+
-+    {
-+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-+        (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
-+        (yyval.interm.type).setAggregate(2);
-+    ;}
-+    break;
-+
-+  case 124:
-+
-+    {
-+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-+        (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
-+        (yyval.interm.type).setAggregate(3);
-+    ;}
-+    break;
-+
-+  case 125:
-+
-+    {
-+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-+        (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
-+        (yyval.interm.type).setAggregate(4);
-+    ;}
-+    break;
-+
-+  case 126:
-+
-+    {
-+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-+        (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
-+        (yyval.interm.type).setAggregate(2);
-+    ;}
-+    break;
-+
-+  case 127:
-+
-+    {
-+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-+        (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
-+        (yyval.interm.type).setAggregate(3);
-+    ;}
-+    break;
-+
-+  case 128:
-+
-+    {
-+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-+        (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
-+        (yyval.interm.type).setAggregate(4);
-+    ;}
-+    break;
-+
-+  case 129:
-+
-+    {
-+        FRAG_VERT_ONLY("mat2", (yyvsp[(1) - (1)].lex).line);
-+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-+        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
-+        (yyval.interm.type).setAggregate(2, true);
-+    ;}
-+    break;
-+
-+  case 130:
-+
-+    {
-+        FRAG_VERT_ONLY("mat3", (yyvsp[(1) - (1)].lex).line);
-+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-+        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
-+        (yyval.interm.type).setAggregate(3, true);
-+    ;}
-+    break;
-+
-+  case 131:
-+
-+    {
-+        FRAG_VERT_ONLY("mat4", (yyvsp[(1) - (1)].lex).line);
-+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-+        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
-+        (yyval.interm.type).setAggregate(4, true);
-+    ;}
-+    break;
-+
-+  case 132:
-+
-+    {
-+        FRAG_VERT_ONLY("sampler2D", (yyvsp[(1) - (1)].lex).line);
-+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-+        (yyval.interm.type).setBasic(EbtSampler2D, qual, (yyvsp[(1) - (1)].lex).line);
-+    ;}
-+    break;
-+
-+  case 133:
-+
-+    {
-+        FRAG_VERT_ONLY("samplerCube", (yyvsp[(1) - (1)].lex).line);
-+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-+        (yyval.interm.type).setBasic(EbtSamplerCube, qual, (yyvsp[(1) - (1)].lex).line);
-+    ;}
-+    break;
-+
-+  case 134:
-+
-+    {
-+        if (!context->supportsExtension("GL_OES_EGL_image_external")) {
-+            context->error((yyvsp[(1) - (1)].lex).line, "unsupported type", "samplerExternalOES");
-+            context->recover();
-+        }
-+        FRAG_VERT_ONLY("samplerExternalOES", (yyvsp[(1) - (1)].lex).line);
-+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-+        (yyval.interm.type).setBasic(EbtSamplerExternalOES, qual, (yyvsp[(1) - (1)].lex).line);
-+    ;}
-+    break;
-+
-+  case 135:
-+
-+    {
-+        if (!context->supportsExtension("GL_ARB_texture_rectangle")) {
-+            context->error((yyvsp[(1) - (1)].lex).line, "unsupported type", "sampler2DRect");
-+            context->recover();
-+        }
-+        FRAG_VERT_ONLY("sampler2DRect", (yyvsp[(1) - (1)].lex).line);
-+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-+        (yyval.interm.type).setBasic(EbtSampler2DRect, qual, (yyvsp[(1) - (1)].lex).line);
-+    ;}
-+    break;
-+
-+  case 136:
-+
-+    {
-+        FRAG_VERT_ONLY("struct", (yyvsp[(1) - (1)].interm.type).line);
-+        (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
-+        (yyval.interm.type).qualifier = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-+    ;}
-+    break;
-+
-+  case 137:
-+
-+    {
-+        //
-+        // This is for user defined type names.  The lexical phase looked up the
-+        // type.
-+        //
-+        TType& structure = static_cast<TVariable*>((yyvsp[(1) - (1)].lex).symbol)->getType();
-+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-+        (yyval.interm.type).setBasic(EbtStruct, qual, (yyvsp[(1) - (1)].lex).line);
-+        (yyval.interm.type).userDef = &structure;
-+    ;}
-+    break;
-+
-+  case 138:
-+
-+    { if (context->enterStructDeclaration((yyvsp[(2) - (3)].lex).line, *(yyvsp[(2) - (3)].lex).string)) context->recover(); ;}
-+    break;
-+
-+  case 139:
-+
-+    {
-+        if (context->reservedErrorCheck((yyvsp[(2) - (6)].lex).line, *(yyvsp[(2) - (6)].lex).string))
-+            context->recover();
-+
-+        TType* structure = new TType((yyvsp[(5) - (6)].interm.typeList), *(yyvsp[(2) - (6)].lex).string);
-+        TVariable* userTypeDef = new TVariable((yyvsp[(2) - (6)].lex).string, *structure, true);
-+        if (! context->symbolTable.insert(*userTypeDef)) {
-+            context->error((yyvsp[(2) - (6)].lex).line, "redefinition", (yyvsp[(2) - (6)].lex).string->c_str(), "struct");
-+            context->recover();
-+        }
-+        (yyval.interm.type).setBasic(EbtStruct, EvqTemporary, (yyvsp[(1) - (6)].lex).line);
-+        (yyval.interm.type).userDef = structure;
-+        context->exitStructDeclaration();
-+    ;}
-+    break;
-+
-+  case 140:
-+
-+    { if (context->enterStructDeclaration((yyvsp[(2) - (2)].lex).line, *(yyvsp[(2) - (2)].lex).string)) context->recover(); ;}
-+    break;
-+
-+  case 141:
-+
-+    {
-+        TType* structure = new TType((yyvsp[(4) - (5)].interm.typeList), TString(""));
-+        (yyval.interm.type).setBasic(EbtStruct, EvqTemporary, (yyvsp[(1) - (5)].lex).line);
-+        (yyval.interm.type).userDef = structure;
-+        context->exitStructDeclaration();
-+    ;}
-+    break;
-+
-+  case 142:
-+
-+    {
-+        (yyval.interm.typeList) = (yyvsp[(1) - (1)].interm.typeList);
-+    ;}
-+    break;
-+
-+  case 143:
-+
-+    {
-+        (yyval.interm.typeList) = (yyvsp[(1) - (2)].interm.typeList);
-+        for (unsigned int i = 0; i < (yyvsp[(2) - (2)].interm.typeList)->size(); ++i) {
-+            for (unsigned int j = 0; j < (yyval.interm.typeList)->size(); ++j) {
-+                if ((*(yyval.interm.typeList))[j].type->getFieldName() == (*(yyvsp[(2) - (2)].interm.typeList))[i].type->getFieldName()) {
-+                    context->error((*(yyvsp[(2) - (2)].interm.typeList))[i].line, "duplicate field name in structure:", "struct", (*(yyvsp[(2) - (2)].interm.typeList))[i].type->getFieldName().c_str());
-+                    context->recover();
-+                }
-+            }
-+            (yyval.interm.typeList)->push_back((*(yyvsp[(2) - (2)].interm.typeList))[i]);
-+        }
-+    ;}
-+    break;
-+
-+  case 144:
-+
-+    {
-+        (yyval.interm.typeList) = (yyvsp[(2) - (3)].interm.typeList);
-+
-+        if (context->voidErrorCheck((yyvsp[(1) - (3)].interm.type).line, (*(yyvsp[(2) - (3)].interm.typeList))[0].type->getFieldName(), (yyvsp[(1) - (3)].interm.type))) {
-+            context->recover();
-+        }
-+        for (unsigned int i = 0; i < (yyval.interm.typeList)->size(); ++i) {
-+            //
-+            // Careful not to replace already known aspects of type, like array-ness
-+            //
-+            TType* type = (*(yyval.interm.typeList))[i].type;
-+            type->setBasicType((yyvsp[(1) - (3)].interm.type).type);
-+            type->setNominalSize((yyvsp[(1) - (3)].interm.type).size);
-+            type->setMatrix((yyvsp[(1) - (3)].interm.type).matrix);
-+            type->setPrecision((yyvsp[(1) - (3)].interm.type).precision);
-+
-+            // don't allow arrays of arrays
-+            if (type->isArray()) {
-+                if (context->arrayTypeErrorCheck((yyvsp[(1) - (3)].interm.type).line, (yyvsp[(1) - (3)].interm.type)))
-+                    context->recover();
-+            }
-+            if ((yyvsp[(1) - (3)].interm.type).array)
-+                type->setArraySize((yyvsp[(1) - (3)].interm.type).arraySize);
-+            if ((yyvsp[(1) - (3)].interm.type).userDef) {
-+                type->setStruct((yyvsp[(1) - (3)].interm.type).userDef->getStruct());
-+                type->setTypeName((yyvsp[(1) - (3)].interm.type).userDef->getTypeName());
-+            }
-+
-+            if (context->structNestingErrorCheck((yyvsp[(1) - (3)].interm.type).line, *type)) {
-+                context->recover();
-+            }
-+        }
-+    ;}
-+    break;
-+
-+  case 145:
-+
-+    {
-+        (yyval.interm.typeList) = NewPoolTTypeList();
-+        (yyval.interm.typeList)->push_back((yyvsp[(1) - (1)].interm.typeLine));
-+    ;}
-+    break;
-+
-+  case 146:
-+
-+    {
-+        (yyval.interm.typeList)->push_back((yyvsp[(3) - (3)].interm.typeLine));
-+    ;}
-+    break;
-+
-+  case 147:
-+
-+    {
-+        if (context->reservedErrorCheck((yyvsp[(1) - (1)].lex).line, *(yyvsp[(1) - (1)].lex).string))
-+            context->recover();
-+
-+        (yyval.interm.typeLine).type = new TType(EbtVoid, EbpUndefined);
-+        (yyval.interm.typeLine).line = (yyvsp[(1) - (1)].lex).line;
-+        (yyval.interm.typeLine).type->setFieldName(*(yyvsp[(1) - (1)].lex).string);
-+    ;}
-+    break;
-+
-+  case 148:
-+
-+    {
-+        if (context->reservedErrorCheck((yyvsp[(1) - (4)].lex).line, *(yyvsp[(1) - (4)].lex).string))
-+            context->recover();
-+
-+        (yyval.interm.typeLine).type = new TType(EbtVoid, EbpUndefined);
-+        (yyval.interm.typeLine).line = (yyvsp[(1) - (4)].lex).line;
-+        (yyval.interm.typeLine).type->setFieldName(*(yyvsp[(1) - (4)].lex).string);
-+
-+        int size;
-+        if (context->arraySizeErrorCheck((yyvsp[(2) - (4)].lex).line, (yyvsp[(3) - (4)].interm.intermTypedNode), size))
-+            context->recover();
-+        (yyval.interm.typeLine).type->setArraySize(size);
-+    ;}
-+    break;
-+
-+  case 149:
-+
-+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); ;}
-+    break;
-+
-+  case 150:
-+
-+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); ;}
-+    break;
-+
-+  case 151:
-+
-+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermAggregate); ;}
-+    break;
-+
-+  case 152:
-+
-+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); ;}
-+    break;
-+
-+  case 153:
-+
-+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); ;}
-+    break;
-+
-+  case 154:
-+
-+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); ;}
-+    break;
-+
-+  case 155:
-+
-+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); ;}
-+    break;
-+
-+  case 156:
-+
-+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); ;}
-+    break;
-+
-+  case 157:
-+
-+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); ;}
-+    break;
-+
-+  case 158:
-+
-+    { (yyval.interm.intermAggregate) = 0; ;}
-+    break;
-+
-+  case 159:
-+
-+    { context->symbolTable.push(); ;}
-+    break;
-+
-+  case 160:
-+
-+    { context->symbolTable.pop(); ;}
-+    break;
-+
-+  case 161:
-+
-+    {
-+        if ((yyvsp[(3) - (5)].interm.intermAggregate) != 0) {
-+            (yyvsp[(3) - (5)].interm.intermAggregate)->setOp(EOpSequence);
-+            (yyvsp[(3) - (5)].interm.intermAggregate)->setEndLine((yyvsp[(5) - (5)].lex).line);
-+        }
-+        (yyval.interm.intermAggregate) = (yyvsp[(3) - (5)].interm.intermAggregate);
-+    ;}
-+    break;
-+
-+  case 162:
-+
-+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); ;}
-+    break;
-+
-+  case 163:
-+
-+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); ;}
-+    break;
-+
-+  case 164:
-+
-+    { context->symbolTable.push(); ;}
-+    break;
-+
-+  case 165:
-+
-+    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); ;}
-+    break;
-+
-+  case 166:
-+
-+    { context->symbolTable.push(); ;}
-+    break;
-+
-+  case 167:
-+
-+    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); ;}
-+    break;
-+
-+  case 168:
-+
-+    {
-+        (yyval.interm.intermNode) = 0;
-+    ;}
-+    break;
-+
-+  case 169:
-+
-+    {
-+        if ((yyvsp[(2) - (3)].interm.intermAggregate)) {
-+            (yyvsp[(2) - (3)].interm.intermAggregate)->setOp(EOpSequence);
-+            (yyvsp[(2) - (3)].interm.intermAggregate)->setEndLine((yyvsp[(3) - (3)].lex).line);
-+        }
-+        (yyval.interm.intermNode) = (yyvsp[(2) - (3)].interm.intermAggregate);
-+    ;}
-+    break;
-+
-+  case 170:
-+
-+    {
-+        (yyval.interm.intermAggregate) = context->intermediate.makeAggregate((yyvsp[(1) - (1)].interm.intermNode), 0);
-+    ;}
-+    break;
-+
-+  case 171:
-+
-+    {
-+        (yyval.interm.intermAggregate) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermAggregate), (yyvsp[(2) - (2)].interm.intermNode), 0);
-+    ;}
-+    break;
-+
-+  case 172:
-+
-+    { (yyval.interm.intermNode) = 0; ;}
-+    break;
-+
-+  case 173:
-+
-+    { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[(1) - (2)].interm.intermTypedNode)); ;}
-+    break;
-+
-+  case 174:
-+
-+    {
-+        if (context->boolErrorCheck((yyvsp[(1) - (5)].lex).line, (yyvsp[(3) - (5)].interm.intermTypedNode)))
-+            context->recover();
-+        (yyval.interm.intermNode) = context->intermediate.addSelection((yyvsp[(3) - (5)].interm.intermTypedNode), (yyvsp[(5) - (5)].interm.nodePair), (yyvsp[(1) - (5)].lex).line);
-+    ;}
-+    break;
-+
-+  case 175:
-+
-+    {
-+        (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermNode);
-+        (yyval.interm.nodePair).node2 = (yyvsp[(3) - (3)].interm.intermNode);
-+    ;}
-+    break;
-+
-+  case 176:
-+
-+    {
-+        (yyval.interm.nodePair).node1 = (yyvsp[(1) - (1)].interm.intermNode);
-+        (yyval.interm.nodePair).node2 = 0;
-+    ;}
-+    break;
-+
-+  case 177:
-+
-+    {
-+        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
-+        if (context->boolErrorCheck((yyvsp[(1) - (1)].interm.intermTypedNode)->getLine(), (yyvsp[(1) - (1)].interm.intermTypedNode)))
-+            context->recover();
-+    ;}
-+    break;
-+
-+  case 178:
-+
-+    {
-+        TIntermNode* intermNode;
-+        if (context->structQualifierErrorCheck((yyvsp[(2) - (4)].lex).line, (yyvsp[(1) - (4)].interm.type)))
-+            context->recover();
-+        if (context->boolErrorCheck((yyvsp[(2) - (4)].lex).line, (yyvsp[(1) - (4)].interm.type)))
-+            context->recover();
-+
-+        if (!context->executeInitializer((yyvsp[(2) - (4)].lex).line, *(yyvsp[(2) - (4)].lex).string, (yyvsp[(1) - (4)].interm.type), (yyvsp[(4) - (4)].interm.intermTypedNode), intermNode))
-+            (yyval.interm.intermTypedNode) = (yyvsp[(4) - (4)].interm.intermTypedNode);
-+        else {
-+            context->recover();
-+            (yyval.interm.intermTypedNode) = 0;
-+        }
-+    ;}
-+    break;
-+
-+  case 179:
-+
-+    { context->symbolTable.push(); ++context->loopNestingLevel; ;}
-+    break;
-+
-+  case 180:
-+
-+    {
-+        context->symbolTable.pop();
-+        (yyval.interm.intermNode) = context->intermediate.addLoop(ELoopWhile, 0, (yyvsp[(4) - (6)].interm.intermTypedNode), 0, (yyvsp[(6) - (6)].interm.intermNode), (yyvsp[(1) - (6)].lex).line);
-+        --context->loopNestingLevel;
-+    ;}
-+    break;
-+
-+  case 181:
-+
-+    { ++context->loopNestingLevel; ;}
-+    break;
-+
-+  case 182:
-+
-+    {
-+        if (context->boolErrorCheck((yyvsp[(8) - (8)].lex).line, (yyvsp[(6) - (8)].interm.intermTypedNode)))
-+            context->recover();
-+
-+        (yyval.interm.intermNode) = context->intermediate.addLoop(ELoopDoWhile, 0, (yyvsp[(6) - (8)].interm.intermTypedNode), 0, (yyvsp[(3) - (8)].interm.intermNode), (yyvsp[(4) - (8)].lex).line);
-+        --context->loopNestingLevel;
-+    ;}
-+    break;
-+
-+  case 183:
-+
-+    { context->symbolTable.push(); ++context->loopNestingLevel; ;}
-+    break;
-+
-+  case 184:
-+
-+    {
-+        context->symbolTable.pop();
-+        (yyval.interm.intermNode) = context->intermediate.addLoop(ELoopFor, (yyvsp[(4) - (7)].interm.intermNode), reinterpret_cast<TIntermTyped*>((yyvsp[(5) - (7)].interm.nodePair).node1), reinterpret_cast<TIntermTyped*>((yyvsp[(5) - (7)].interm.nodePair).node2), (yyvsp[(7) - (7)].interm.intermNode), (yyvsp[(1) - (7)].lex).line);
-+        --context->loopNestingLevel;
-+    ;}
-+    break;
-+
-+  case 185:
-+
-+    {
-+        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
-+    ;}
-+    break;
-+
-+  case 186:
-+
-+    {
-+        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
-+    ;}
-+    break;
-+
-+  case 187:
-+
-+    {
-+        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
-+    ;}
-+    break;
-+
-+  case 188:
-+
-+    {
-+        (yyval.interm.intermTypedNode) = 0;
-+    ;}
-+    break;
-+
-+  case 189:
-+
-+    {
-+        (yyval.interm.nodePair).node1 = (yyvsp[(1) - (2)].interm.intermTypedNode);
-+        (yyval.interm.nodePair).node2 = 0;
-+    ;}
-+    break;
-+
-+  case 190:
-+
-+    {
-+        (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermTypedNode);
-+        (yyval.interm.nodePair).node2 = (yyvsp[(3) - (3)].interm.intermTypedNode);
-+    ;}
-+    break;
-+
-+  case 191:
-+
-+    {
-+        if (context->loopNestingLevel <= 0) {
-+            context->error((yyvsp[(1) - (2)].lex).line, "continue statement only allowed in loops", "");
-+            context->recover();
-+        }
-+        (yyval.interm.intermNode) = context->intermediate.addBranch(EOpContinue, (yyvsp[(1) - (2)].lex).line);
-+    ;}
-+    break;
-+
-+  case 192:
-+
-+    {
-+        if (context->loopNestingLevel <= 0) {
-+            context->error((yyvsp[(1) - (2)].lex).line, "break statement only allowed in loops", "");
-+            context->recover();
-+        }
-+        (yyval.interm.intermNode) = context->intermediate.addBranch(EOpBreak, (yyvsp[(1) - (2)].lex).line);
-+    ;}
-+    break;
-+
-+  case 193:
-+
-+    {
-+        (yyval.interm.intermNode) = context->intermediate.addBranch(EOpReturn, (yyvsp[(1) - (2)].lex).line);
-+        if (context->currentFunctionType->getBasicType() != EbtVoid) {
-+            context->error((yyvsp[(1) - (2)].lex).line, "non-void function must return a value", "return");
-+            context->recover();
-+        }
-+    ;}
-+    break;
-+
-+  case 194:
-+
-+    {
-+        (yyval.interm.intermNode) = context->intermediate.addBranch(EOpReturn, (yyvsp[(2) - (3)].interm.intermTypedNode), (yyvsp[(1) - (3)].lex).line);
-+        context->functionReturnsValue = true;
-+        if (context->currentFunctionType->getBasicType() == EbtVoid) {
-+            context->error((yyvsp[(1) - (3)].lex).line, "void function cannot return a value", "return");
-+            context->recover();
-+        } else if (*(context->currentFunctionType) != (yyvsp[(2) - (3)].interm.intermTypedNode)->getType()) {
-+            context->error((yyvsp[(1) - (3)].lex).line, "function return is not matching type:", "return");
-+            context->recover();
-+        }
-+    ;}
-+    break;
-+
-+  case 195:
-+
-+    {
-+        FRAG_ONLY("discard", (yyvsp[(1) - (2)].lex).line);
-+        (yyval.interm.intermNode) = context->intermediate.addBranch(EOpKill, (yyvsp[(1) - (2)].lex).line);
-+    ;}
-+    break;
-+
-+  case 196:
-+
-+    {
-+        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
-+        context->treeRoot = (yyval.interm.intermNode);
-+    ;}
-+    break;
-+
-+  case 197:
-+
-+    {
-+        (yyval.interm.intermNode) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermNode), (yyvsp[(2) - (2)].interm.intermNode), 0);
-+        context->treeRoot = (yyval.interm.intermNode);
-+    ;}
-+    break;
-+
-+  case 198:
-+
-+    {
-+        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
-+    ;}
-+    break;
-+
-+  case 199:
-+
-+    {
-+        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
-+    ;}
-+    break;
-+
-+  case 200:
-+
-+    {
-+        TFunction* function = (yyvsp[(1) - (1)].interm).function;
-+        
-+        const TSymbol *builtIn = context->symbolTable.findBuiltIn(function->getMangledName());
-+        
-+        if (builtIn)
-+        {
-+            context->error((yyvsp[(1) - (1)].interm).line, "built-in functions cannot be redefined", function->getName().c_str());
-+            context->recover();
-+        }
-+        
-+        TFunction* prevDec = static_cast<TFunction*>(context->symbolTable.find(function->getMangledName()));
-+        //
-+        // Note:  'prevDec' could be 'function' if this is the first time we've seen function
-+        // as it would have just been put in the symbol table.  Otherwise, we're looking up
-+        // an earlier occurance.
-+        //
-+        if (prevDec->isDefined()) {
-+            //
-+            // Then this function already has a body.
-+            //
-+            context->error((yyvsp[(1) - (1)].interm).line, "function already has a body", function->getName().c_str());
-+            context->recover();
-+        }
-+        prevDec->setDefined();
-+
-+        //
-+        // Raise error message if main function takes any parameters or return anything other than void
-+        //
-+        if (function->getName() == "main") {
-+            if (function->getParamCount() > 0) {
-+                context->error((yyvsp[(1) - (1)].interm).line, "function cannot take any parameter(s)", function->getName().c_str());
-+                context->recover();
-+            }
-+            if (function->getReturnType().getBasicType() != EbtVoid) {
-+                context->error((yyvsp[(1) - (1)].interm).line, "", function->getReturnType().getBasicString(), "main function cannot return a value");
-+                context->recover();
-+            }
-+        }
-+
-+        //
-+        // Remember the return type for later checking for RETURN statements.
-+        //
-+        context->currentFunctionType = &(prevDec->getReturnType());
-+        context->functionReturnsValue = false;
-+
-+        //
-+        // Insert parameters into the symbol table.
-+        // If the parameter has no name, it's not an error, just don't insert it
-+        // (could be used for unused args).
-+        //
-+        // Also, accumulate the list of parameters into the HIL, so lower level code
-+        // knows where to find parameters.
-+        //
-+        TIntermAggregate* paramNodes = new TIntermAggregate;
-+        for (int i = 0; i < function->getParamCount(); i++) {
-+            const TParameter& param = function->getParam(i);
-+            if (param.name != 0) {
-+                TVariable *variable = new TVariable(param.name, *param.type);
-+                //
-+                // Insert the parameters with name in the symbol table.
-+                //
-+                if (! context->symbolTable.insert(*variable)) {
-+                    context->error((yyvsp[(1) - (1)].interm).line, "redefinition", variable->getName().c_str());
-+                    context->recover();
-+                    delete variable;
-+                }
-+
-+                //
-+                // Add the parameter to the HIL
-+                //
-+                paramNodes = context->intermediate.growAggregate(
-+                                               paramNodes,
-+                                               context->intermediate.addSymbol(variable->getUniqueId(),
-+                                                                       variable->getName(),
-+                                                                       variable->getType(), (yyvsp[(1) - (1)].interm).line),
-+                                               (yyvsp[(1) - (1)].interm).line);
-+            } else {
-+                paramNodes = context->intermediate.growAggregate(paramNodes, context->intermediate.addSymbol(0, "", *param.type, (yyvsp[(1) - (1)].interm).line), (yyvsp[(1) - (1)].interm).line);
-+            }
-+        }
-+        context->intermediate.setAggregateOperator(paramNodes, EOpParameters, (yyvsp[(1) - (1)].interm).line);
-+        (yyvsp[(1) - (1)].interm).intermAggregate = paramNodes;
-+        context->loopNestingLevel = 0;
-+    ;}
-+    break;
-+
-+  case 201:
-+
-+    {
-+        //?? Check that all paths return a value if return type != void ?
-+        //   May be best done as post process phase on intermediate code
-+        if (context->currentFunctionType->getBasicType() != EbtVoid && ! context->functionReturnsValue) {
-+            context->error((yyvsp[(1) - (3)].interm).line, "function does not return a value:", "", (yyvsp[(1) - (3)].interm).function->getName().c_str());
-+            context->recover();
-+        }
-+        
-+        (yyval.interm.intermNode) = context->intermediate.growAggregate((yyvsp[(1) - (3)].interm).intermAggregate, (yyvsp[(3) - (3)].interm.intermNode), 0);
-+        context->intermediate.setAggregateOperator((yyval.interm.intermNode), EOpFunction, (yyvsp[(1) - (3)].interm).line);
-+        (yyval.interm.intermNode)->getAsAggregate()->setName((yyvsp[(1) - (3)].interm).function->getMangledName().c_str());
-+        (yyval.interm.intermNode)->getAsAggregate()->setType((yyvsp[(1) - (3)].interm).function->getReturnType());
-+
-+        // store the pragma information for debug and optimize and other vendor specific
-+        // information. This information can be queried from the parse tree
-+        (yyval.interm.intermNode)->getAsAggregate()->setOptimize(context->pragma().optimize);
-+        (yyval.interm.intermNode)->getAsAggregate()->setDebug(context->pragma().debug);
-+
-+        if ((yyvsp[(3) - (3)].interm.intermNode) && (yyvsp[(3) - (3)].interm.intermNode)->getAsAggregate())
-+            (yyval.interm.intermNode)->getAsAggregate()->setEndLine((yyvsp[(3) - (3)].interm.intermNode)->getAsAggregate()->getEndLine());
-+
-+        context->symbolTable.pop();
-+    ;}
-+    break;
-+
-+
-+/* Line 1267 of yacc.c.  */
-+
-+      default: break;
-+    }
-+  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
-+
-+  YYPOPSTACK (yylen);
-+  yylen = 0;
-+  YY_STACK_PRINT (yyss, yyssp);
-+
-+  *++yyvsp = yyval;
-+
-+
-+  /* 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];
-+
-+  goto yynewstate;
-+
-+
-+/*------------------------------------.
-+| yyerrlab -- here on detecting error |
-+`------------------------------------*/
-+yyerrlab:
-+  /* If not already recovering from an error, report this error.  */
-+  if (!yyerrstatus)
-+    {
-+      ++yynerrs;
-+#if ! YYERROR_VERBOSE
-+      yyerror (context, YY_("syntax error"));
-+#else
-+      {
-+	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
-+	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
-+	  {
-+	    YYSIZE_T yyalloc = 2 * yysize;
-+	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
-+	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
-+	    if (yymsg != yymsgbuf)
-+	      YYSTACK_FREE (yymsg);
-+	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
-+	    if (yymsg)
-+	      yymsg_alloc = yyalloc;
-+	    else
-+	      {
-+		yymsg = yymsgbuf;
-+		yymsg_alloc = sizeof yymsgbuf;
-+	      }
-+	  }
-+
-+	if (0 < yysize && yysize <= yymsg_alloc)
-+	  {
-+	    (void) yysyntax_error (yymsg, yystate, yychar);
-+	    yyerror (context, yymsg);
-+	  }
-+	else
-+	  {
-+	    yyerror (context, YY_("syntax error"));
-+	    if (yysize != 0)
-+	      goto yyexhaustedlab;
-+	  }
-+      }
-+#endif
-+    }
-+
-+
-+
-+  if (yyerrstatus == 3)
-+    {
-+      /* If just tried and failed to reuse look-ahead token after an
-+	 error, discard it.  */
-+
-+      if (yychar <= YYEOF)
-+	{
-+	  /* Return failure if at end of input.  */
-+	  if (yychar == YYEOF)
-+	    YYABORT;
-+	}
-+      else
-+	{
-+	  yydestruct ("Error: discarding",
-+		      yytoken, &yylval, context);
-+	  yychar = YYEMPTY;
-+	}
-+    }
-+
-+  /* Else will try to reuse look-ahead token after shifting the error
-+     token.  */
-+  goto yyerrlab1;
-+
-+
-+/*---------------------------------------------------.
-+| 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;
-+
-+  /* Do not reclaim the symbols of the rule which action triggered
-+     this YYERROR.  */
-+  YYPOPSTACK (yylen);
-+  yylen = 0;
-+  YY_STACK_PRINT (yyss, yyssp);
-+  yystate = *yyssp;
-+  goto yyerrlab1;
-+
-+
-+/*-------------------------------------------------------------.
-+| yyerrlab1 -- common code for both syntax error and YYERROR.  |
-+`-------------------------------------------------------------*/
-+yyerrlab1:
-+  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
-+
-+  for (;;)
-+    {
-+      yyn = yypact[yystate];
-+      if (yyn != YYPACT_NINF)
-+	{
-+	  yyn += YYTERROR;
-+	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
-+	    {
-+	      yyn = yytable[yyn];
-+	      if (0 < yyn)
-+		break;
-+	    }
-+	}
-+
-+      /* Pop the current state because it cannot handle the error token.  */
-+      if (yyssp == yyss)
-+	YYABORT;
-+
-+
-+      yydestruct ("Error: popping",
-+		  yystos[yystate], yyvsp, context);
-+      YYPOPSTACK (1);
-+      yystate = *yyssp;
-+      YY_STACK_PRINT (yyss, yyssp);
-+    }
-+
-+  if (yyn == YYFINAL)
-+    YYACCEPT;
-+
-+  *++yyvsp = yylval;
-+
-+
-+  /* Shift the error token.  */
-+  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
-+
-+  yystate = yyn;
-+  goto yynewstate;
-+
-+
-+/*-------------------------------------.
-+| yyacceptlab -- YYACCEPT comes here.  |
-+`-------------------------------------*/
-+yyacceptlab:
-+  yyresult = 0;
-+  goto yyreturn;
-+
-+/*-----------------------------------.
-+| yyabortlab -- YYABORT comes here.  |
-+`-----------------------------------*/
-+yyabortlab:
-+  yyresult = 1;
-+  goto yyreturn;
-+
-+#ifndef yyoverflow
-+/*-------------------------------------------------.
-+| yyexhaustedlab -- memory exhaustion comes here.  |
-+`-------------------------------------------------*/
-+yyexhaustedlab:
-+  yyerror (context, YY_("memory exhausted"));
-+  yyresult = 2;
-+  /* Fall through.  */
-+#endif
-+
-+yyreturn:
-+  if (yychar != YYEOF && yychar != YYEMPTY)
-+     yydestruct ("Cleanup: discarding lookahead",
-+		 yytoken, &yylval, context);
-+  /* Do not reclaim the symbols of the rule which action triggered
-+     this YYABORT or YYACCEPT.  */
-+  YYPOPSTACK (yylen);
-+  YY_STACK_PRINT (yyss, yyssp);
-+  while (yyssp != yyss)
-+    {
-+      yydestruct ("Cleanup: popping",
-+		  yystos[*yyssp], yyvsp, context);
-+      YYPOPSTACK (1);
-+    }
-+#ifndef yyoverflow
-+  if (yyss != yyssa)
-+    YYSTACK_FREE (yyss);
-+#endif
-+#if YYERROR_VERBOSE
-+  if (yymsg != yymsgbuf)
-+    YYSTACK_FREE (yymsg);
-+#endif
-+  /* Make sure YYID is used.  */
-+  return YYID (yyresult);
-+}
-+
-+
-+
-+
-+
-+int glslang_parse(TParseContext* context) {
-+    return yyparse(context);
-+}
-+
-+
-diff --git a/Source/ThirdParty/ANGLE/src/compiler/glslang_tab.h b/Source/ThirdParty/ANGLE/src/compiler/glslang_tab.h
-new file mode 100644
-index 0000000..23945b8
---- /dev/null
-+++ b/Source/ThirdParty/ANGLE/src/compiler/glslang_tab.h
-@@ -0,0 +1,278 @@
-+/* A Bison parser, made by GNU Bison 2.3.  */
-+
-+/* Skeleton interface for Bison's Yacc-like parsers in C
-+
-+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-+   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
-+   the Free Software Foundation; either version 2, or (at your option)
-+   any later version.
-+
-+   This program is distributed in the hope that it will be useful,
-+   but WITHOUT ANY WARRANTY; without even the implied warranty of
-+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+   GNU General Public License for more details.
-+
-+   You should have received a copy of the GNU General Public License
-+   along with this program; if not, write to the Free Software
-+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
-+   Boston, MA 02110-1301, USA.  */
-+
-+/* As a special exception, you may create a larger work that contains
-+   part or all of the Bison parser skeleton and distribute that work
-+   under terms of your choice, so long as that work isn't itself a
-+   parser generator using the skeleton or a modified version thereof
-+   as a parser skeleton.  Alternatively, if you modify or redistribute
-+   the parser skeleton itself, you may (at your option) remove this
-+   special exception, which will cause the skeleton and the resulting
-+   Bison output files to be licensed under the GNU General Public
-+   License without this special exception.
-+
-+   This special exception was added by the Free Software Foundation in
-+   version 2.2 of Bison.  */
-+
-+/* Tokens.  */
-+#ifndef YYTOKENTYPE
-+# define YYTOKENTYPE
-+   /* Put the tokens into the symbol table, so that GDB and other debuggers
-+      know about them.  */
-+   enum yytokentype {
-+     INVARIANT = 258,
-+     HIGH_PRECISION = 259,
-+     MEDIUM_PRECISION = 260,
-+     LOW_PRECISION = 261,
-+     PRECISION = 262,
-+     ATTRIBUTE = 263,
-+     CONST_QUAL = 264,
-+     BOOL_TYPE = 265,
-+     FLOAT_TYPE = 266,
-+     INT_TYPE = 267,
-+     BREAK = 268,
-+     CONTINUE = 269,
-+     DO = 270,
-+     ELSE = 271,
-+     FOR = 272,
-+     IF = 273,
-+     DISCARD = 274,
-+     RETURN = 275,
-+     BVEC2 = 276,
-+     BVEC3 = 277,
-+     BVEC4 = 278,
-+     IVEC2 = 279,
-+     IVEC3 = 280,
-+     IVEC4 = 281,
-+     VEC2 = 282,
-+     VEC3 = 283,
-+     VEC4 = 284,
-+     MATRIX2 = 285,
-+     MATRIX3 = 286,
-+     MATRIX4 = 287,
-+     IN_QUAL = 288,
-+     OUT_QUAL = 289,
-+     INOUT_QUAL = 290,
-+     UNIFORM = 291,
-+     VARYING = 292,
-+     STRUCT = 293,
-+     VOID_TYPE = 294,
-+     WHILE = 295,
-+     SAMPLER2D = 296,
-+     SAMPLERCUBE = 297,
-+     SAMPLER_EXTERNAL_OES = 298,
-+     SAMPLER2DRECT = 299,
-+     IDENTIFIER = 300,
-+     TYPE_NAME = 301,
-+     FLOATCONSTANT = 302,
-+     INTCONSTANT = 303,
-+     BOOLCONSTANT = 304,
-+     FIELD_SELECTION = 305,
-+     LEFT_OP = 306,
-+     RIGHT_OP = 307,
-+     INC_OP = 308,
-+     DEC_OP = 309,
-+     LE_OP = 310,
-+     GE_OP = 311,
-+     EQ_OP = 312,
-+     NE_OP = 313,
-+     AND_OP = 314,
-+     OR_OP = 315,
-+     XOR_OP = 316,
-+     MUL_ASSIGN = 317,
-+     DIV_ASSIGN = 318,
-+     ADD_ASSIGN = 319,
-+     MOD_ASSIGN = 320,
-+     LEFT_ASSIGN = 321,
-+     RIGHT_ASSIGN = 322,
-+     AND_ASSIGN = 323,
-+     XOR_ASSIGN = 324,
-+     OR_ASSIGN = 325,
-+     SUB_ASSIGN = 326,
-+     LEFT_PAREN = 327,
-+     RIGHT_PAREN = 328,
-+     LEFT_BRACKET = 329,
-+     RIGHT_BRACKET = 330,
-+     LEFT_BRACE = 331,
-+     RIGHT_BRACE = 332,
-+     DOT = 333,
-+     COMMA = 334,
-+     COLON = 335,
-+     EQUAL = 336,
-+     SEMICOLON = 337,
-+     BANG = 338,
-+     DASH = 339,
-+     TILDE = 340,
-+     PLUS = 341,
-+     STAR = 342,
-+     SLASH = 343,
-+     PERCENT = 344,
-+     LEFT_ANGLE = 345,
-+     RIGHT_ANGLE = 346,
-+     VERTICAL_BAR = 347,
-+     CARET = 348,
-+     AMPERSAND = 349,
-+     QUESTION = 350
-+   };
-+#endif
-+/* Tokens.  */
-+#define INVARIANT 258
-+#define HIGH_PRECISION 259
-+#define MEDIUM_PRECISION 260
-+#define LOW_PRECISION 261
-+#define PRECISION 262
-+#define ATTRIBUTE 263
-+#define CONST_QUAL 264
-+#define BOOL_TYPE 265
-+#define FLOAT_TYPE 266
-+#define INT_TYPE 267
-+#define BREAK 268
-+#define CONTINUE 269
-+#define DO 270
-+#define ELSE 271
-+#define FOR 272
-+#define IF 273
-+#define DISCARD 274
-+#define RETURN 275
-+#define BVEC2 276
-+#define BVEC3 277
-+#define BVEC4 278
-+#define IVEC2 279
-+#define IVEC3 280
-+#define IVEC4 281
-+#define VEC2 282
-+#define VEC3 283
-+#define VEC4 284
-+#define MATRIX2 285
-+#define MATRIX3 286
-+#define MATRIX4 287
-+#define IN_QUAL 288
-+#define OUT_QUAL 289
-+#define INOUT_QUAL 290
-+#define UNIFORM 291
-+#define VARYING 292
-+#define STRUCT 293
-+#define VOID_TYPE 294
-+#define WHILE 295
-+#define SAMPLER2D 296
-+#define SAMPLERCUBE 297
-+#define SAMPLER_EXTERNAL_OES 298
-+#define SAMPLER2DRECT 299
-+#define IDENTIFIER 300
-+#define TYPE_NAME 301
-+#define FLOATCONSTANT 302
-+#define INTCONSTANT 303
-+#define BOOLCONSTANT 304
-+#define FIELD_SELECTION 305
-+#define LEFT_OP 306
-+#define RIGHT_OP 307
-+#define INC_OP 308
-+#define DEC_OP 309
-+#define LE_OP 310
-+#define GE_OP 311
-+#define EQ_OP 312
-+#define NE_OP 313
-+#define AND_OP 314
-+#define OR_OP 315
-+#define XOR_OP 316
-+#define MUL_ASSIGN 317
-+#define DIV_ASSIGN 318
-+#define ADD_ASSIGN 319
-+#define MOD_ASSIGN 320
-+#define LEFT_ASSIGN 321
-+#define RIGHT_ASSIGN 322
-+#define AND_ASSIGN 323
-+#define XOR_ASSIGN 324
-+#define OR_ASSIGN 325
-+#define SUB_ASSIGN 326
-+#define LEFT_PAREN 327
-+#define RIGHT_PAREN 328
-+#define LEFT_BRACKET 329
-+#define RIGHT_BRACKET 330
-+#define LEFT_BRACE 331
-+#define RIGHT_BRACE 332
-+#define DOT 333
-+#define COMMA 334
-+#define COLON 335
-+#define EQUAL 336
-+#define SEMICOLON 337
-+#define BANG 338
-+#define DASH 339
-+#define TILDE 340
-+#define PLUS 341
-+#define STAR 342
-+#define SLASH 343
-+#define PERCENT 344
-+#define LEFT_ANGLE 345
-+#define RIGHT_ANGLE 346
-+#define VERTICAL_BAR 347
-+#define CARET 348
-+#define AMPERSAND 349
-+#define QUESTION 350
-+
-+
-+
-+
-+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-+typedef union YYSTYPE
-+
-+{
-+    struct {
-+        TSourceLoc line;
-+        union {
-+            TString *string;
-+            float f;
-+            int i;
-+            bool b;
-+        };
-+        TSymbol* symbol;
-+    } lex;
-+    struct {
-+        TSourceLoc line;
-+        TOperator op;
-+        union {
-+            TIntermNode* intermNode;
-+            TIntermNodePair nodePair;
-+            TIntermTyped* intermTypedNode;
-+            TIntermAggregate* intermAggregate;
-+        };
-+        union {
-+            TPublicType type;
-+            TPrecision precision;
-+            TQualifier qualifier;
-+            TFunction* function;
-+            TParameter param;
-+            TTypeLine typeLine;
-+            TTypeList* typeList;
-+        };
-+    } interm;
-+}
-+/* Line 1529 of yacc.c.  */
-+
-+	YYSTYPE;
-+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-+# define YYSTYPE_IS_DECLARED 1
-+# define YYSTYPE_IS_TRIVIAL 1
-+#endif
-+
-+
-+
-diff --git a/Source/WebCore/GNUmakefile.am b/Source/WebCore/GNUmakefile.am
-index f31a472..4837b70 100644
---- a/Source/WebCore/GNUmakefile.am
-+++ b/Source/WebCore/GNUmakefile.am
-@@ -352,14 +352,6 @@ audio_DATA = $(WebCore)/platform/audio/resources/Composite.wav
- dist_audio_DATA = $(audio_DATA)
- endif  # END ENABLE_WEB_AUDIO
- 
--# ANGLE tokenizer & parser
--DerivedSources/ANGLE/glslang.cpp: Source/ThirdParty/ANGLE/src/compiler/glslang.l
--	$(AM_V_GEN)$(FLEX) --noline --nounistd --outfile="$@" "$<"
--
--DerivedSources/ANGLE/glslang_tab.cpp: Source/ThirdParty/ANGLE/src/compiler/glslang.y
--	$(AM_V_GEN)$(BISON) --no-lines --defines="DerivedSources/ANGLE/glslang_tab.h" --skeleton=yacc.c --output="$@" $<
--DerivedSources/ANGLE/glslang_tab.h: DerivedSources/ANGLE/glslang_tab.cpp
--
- IDL_PATH := \
-     $(WebCore)/Modules/filesystem \
-     $(WebCore)/Modules/gamepad \
-diff --git a/Source/WebCore/GNUmakefile.list.am b/Source/WebCore/GNUmakefile.list.am
-index a1c6841..19ee41b 100644
---- a/Source/WebCore/GNUmakefile.list.am
-+++ b/Source/WebCore/GNUmakefile.list.am
-@@ -6305,11 +6305,6 @@ endif
- # 3D canvas (WebGL) support
- # ---
- if ENABLE_WEBGL
--webcore_built_sources += \
--	DerivedSources/ANGLE/glslang.cpp \
--	DerivedSources/ANGLE/glslang_tab.cpp \
--	DerivedSources/ANGLE/glslang_tab.h
--
- webcore_sources += \
- 	Source/ThirdParty/ANGLE/include/EGL/egl.h \
- 	Source/ThirdParty/ANGLE/include/EGL/eglplatform.h \
-@@ -6346,6 +6341,9 @@ webcore_sources += \
- 	Source/ThirdParty/ANGLE/src/compiler/ForLoopUnroll.cpp \
- 	Source/ThirdParty/ANGLE/src/compiler/ForLoopUnroll.h \
- 	Source/ThirdParty/ANGLE/src/compiler/glslang.h \
-+	Source/ThirdParty/ANGLE/src/compiler/glslang_lex.cpp \
-+	Source/ThirdParty/ANGLE/src/compiler/glslang_tab.cpp \
-+	Source/ThirdParty/ANGLE/src/compiler/glslang_tab.h \
- 	Source/ThirdParty/ANGLE/src/compiler/HashNames.h \
- 	Source/ThirdParty/ANGLE/src/compiler/InfoSink.cpp \
- 	Source/ThirdParty/ANGLE/src/compiler/InfoSink.h \