]> granicus.if.org Git - postgis/commitdiff
Parse error on WKT for multi with empty elements (#1703)
authorPaul Ramsey <pramsey@cleverelephant.ca>
Thu, 22 Mar 2012 16:55:18 +0000 (16:55 +0000)
committerPaul Ramsey <pramsey@cleverelephant.ca>
Thu, 22 Mar 2012 16:55:18 +0000 (16:55 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@9530 b70326c6-7e19-0410-871a-916f4a2858ee

liblwgeom/lwin_wkt_parse.c
liblwgeom/lwin_wkt_parse.y
liblwgeom/lwout_wkt.c

index 5a982dfa70df32e365a0e8b656d51e2b00874e2b..efd1c377e4799c766cb0d95af6aa80a1d994c325 100644 (file)
@@ -1,24 +1,21 @@
-/* A Bison parser, made by GNU Bison 2.3.  */
+/* A Bison parser, made by GNU Bison 2.5.  */
 
-/* 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
+/* Bison implementation for Yacc-like parsers in C
+   
+      Copyright (C) 1984, 1989-1990, 2000-2011 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.
-
+   the Free Software Foundation, either version 3 of the License, 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.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* As a special exception, you may create a larger work that contains
    part or all of the Bison parser skeleton and distribute that work
@@ -29,7 +26,7 @@
    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.  */
 
@@ -47,7 +44,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.3"
+#define YYBISON_VERSION "2.5"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
 /* Pure parsers.  */
 #define YYPURE 0
 
+/* Push parsers.  */
+#define YYPUSH 0
+
+/* Pull parsers.  */
+#define YYPULL 1
+
 /* Using locations.  */
 #define YYLSP_NEEDED 1
 
 /* Substitute the variable and function names.  */
-#define yyparse wkt_yyparse
-#define yylex   wkt_yylex
-#define yyerror wkt_yyerror
-#define yylval  wkt_yylval
-#define yychar  wkt_yychar
-#define yydebug wkt_yydebug
-#define yynerrs wkt_yynerrs
-#define yylloc wkt_yylloc
-
-/* Tokens.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-     POINT_TOK = 258,
-     LINESTRING_TOK = 259,
-     POLYGON_TOK = 260,
-     MPOINT_TOK = 261,
-     MLINESTRING_TOK = 262,
-     MPOLYGON_TOK = 263,
-     MSURFACE_TOK = 264,
-     MCURVE_TOK = 265,
-     CURVEPOLYGON_TOK = 266,
-     COMPOUNDCURVE_TOK = 267,
-     CIRCULARSTRING_TOK = 268,
-     COLLECTION_TOK = 269,
-     RBRACKET_TOK = 270,
-     LBRACKET_TOK = 271,
-     COMMA_TOK = 272,
-     EMPTY_TOK = 273,
-     SEMICOLON_TOK = 274,
-     TRIANGLE_TOK = 275,
-     TIN_TOK = 276,
-     POLYHEDRALSURFACE_TOK = 277,
-     DOUBLE_TOK = 278,
-     DIMENSIONALITY_TOK = 279,
-     SRID_TOK = 280
-   };
-#endif
-/* Tokens.  */
-#define POINT_TOK 258
-#define LINESTRING_TOK 259
-#define POLYGON_TOK 260
-#define MPOINT_TOK 261
-#define MLINESTRING_TOK 262
-#define MPOLYGON_TOK 263
-#define MSURFACE_TOK 264
-#define MCURVE_TOK 265
-#define CURVEPOLYGON_TOK 266
-#define COMPOUNDCURVE_TOK 267
-#define CIRCULARSTRING_TOK 268
-#define COLLECTION_TOK 269
-#define RBRACKET_TOK 270
-#define LBRACKET_TOK 271
-#define COMMA_TOK 272
-#define EMPTY_TOK 273
-#define SEMICOLON_TOK 274
-#define TRIANGLE_TOK 275
-#define TIN_TOK 276
-#define POLYHEDRALSURFACE_TOK 277
-#define DOUBLE_TOK 278
-#define DIMENSIONALITY_TOK 279
-#define SRID_TOK 280
-
-
-
+#define yyparse         wkt_yyparse
+#define yylex           wkt_yylex
+#define yyerror         wkt_yyerror
+#define yylval          wkt_yylval
+#define yychar          wkt_yychar
+#define yydebug         wkt_yydebug
+#define yynerrs         wkt_yynerrs
+#define yylloc          wkt_yylloc
 
 /* Copy the first part of user declarations.  */
+
+/* Line 268 of yacc.c  */
 #line 1 "lwin_wkt_parse.y"
 
 
@@ -227,6 +173,9 @@ int lwgeom_parse_wkt(LWGEOM_PARSER_RESULT *parser_result, char *wktstr, int pars
 
 
 
+/* Line 268 of yacc.c  */
+#line 178 "y.tab.c"
+
 /* Enabling traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 0
@@ -245,23 +194,88 @@ int lwgeom_parse_wkt(LWGEOM_PARSER_RESULT *parser_result, char *wktstr, int pars
 # define YYTOKEN_TABLE 0
 #endif
 
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     POINT_TOK = 258,
+     LINESTRING_TOK = 259,
+     POLYGON_TOK = 260,
+     MPOINT_TOK = 261,
+     MLINESTRING_TOK = 262,
+     MPOLYGON_TOK = 263,
+     MSURFACE_TOK = 264,
+     MCURVE_TOK = 265,
+     CURVEPOLYGON_TOK = 266,
+     COMPOUNDCURVE_TOK = 267,
+     CIRCULARSTRING_TOK = 268,
+     COLLECTION_TOK = 269,
+     RBRACKET_TOK = 270,
+     LBRACKET_TOK = 271,
+     COMMA_TOK = 272,
+     EMPTY_TOK = 273,
+     SEMICOLON_TOK = 274,
+     TRIANGLE_TOK = 275,
+     TIN_TOK = 276,
+     POLYHEDRALSURFACE_TOK = 277,
+     DOUBLE_TOK = 278,
+     DIMENSIONALITY_TOK = 279,
+     SRID_TOK = 280
+   };
+#endif
+/* Tokens.  */
+#define POINT_TOK 258
+#define LINESTRING_TOK 259
+#define POLYGON_TOK 260
+#define MPOINT_TOK 261
+#define MLINESTRING_TOK 262
+#define MPOLYGON_TOK 263
+#define MSURFACE_TOK 264
+#define MCURVE_TOK 265
+#define CURVEPOLYGON_TOK 266
+#define COMPOUNDCURVE_TOK 267
+#define CIRCULARSTRING_TOK 268
+#define COLLECTION_TOK 269
+#define RBRACKET_TOK 270
+#define LBRACKET_TOK 271
+#define COMMA_TOK 272
+#define EMPTY_TOK 273
+#define SEMICOLON_TOK 274
+#define TRIANGLE_TOK 275
+#define TIN_TOK 276
+#define POLYHEDRALSURFACE_TOK 277
+#define DOUBLE_TOK 278
+#define DIMENSIONALITY_TOK 279
+#define SRID_TOK 280
+
+
+
+
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
-#line 102 "lwin_wkt_parse.y"
 {
+
+/* Line 293 of yacc.c  */
+#line 103 "lwin_wkt_parse.y"
+
        int integervalue;
        double doublevalue;
        char *stringvalue;
        LWGEOM *geometryvalue;
        POINT coordinatevalue;
        POINTARRAY *ptarrayvalue;
-}
-/* Line 193 of yacc.c.  */
-#line 260 "lwin_wkt_parse.c"
-       YYSTYPE;
+
+
+
+/* Line 293 of yacc.c  */
+#line 275 "y.tab.c"
+} YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
 #endif
 
 #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
@@ -281,8 +295,8 @@ typedef struct YYLTYPE
 /* Copy the second part of user declarations.  */
 
 
-/* Line 216 of yacc.c.  */
-#line 285 "lwin_wkt_parse.c"
+/* Line 343 of yacc.c  */
+#line 300 "y.tab.c"
 
 #ifdef short
 # undef short
@@ -357,14 +371,14 @@ typedef short int yytype_int16;
 #if (defined __STDC__ || defined __C99__FUNC__ \
      || defined __cplusplus || defined _MSC_VER)
 static int
-YYID (int i)
+YYID (int yyi)
 #else
 static int
-YYID (i)
-    int i;
+YYID (yyi)
+    int yyi;
 #endif
 {
-  return i;
+  return yyi;
 }
 #endif
 
@@ -385,11 +399,11 @@ YYID (i)
 #    define alloca _alloca
 #   else
 #    define YYSTACK_ALLOC alloca
-#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (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
+#     ifndef EXIT_SUCCESS
+#      define EXIT_SUCCESS 0
 #     endif
 #    endif
 #   endif
@@ -412,24 +426,24 @@ YYID (i)
 #  ifndef YYSTACK_ALLOC_MAXIMUM
 #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
 #  endif
-#  if (defined __cplusplus && ! defined _STDLIB_H \
+#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
        && ! ((defined YYMALLOC || defined malloc) \
             && (defined YYFREE || defined free)))
 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#   ifndef _STDLIB_H
-#    define _STDLIB_H 1
+#   ifndef EXIT_SUCCESS
+#    define EXIT_SUCCESS 0
 #   endif
 #  endif
 #  ifndef YYMALLOC
 #   define YYMALLOC malloc
-#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+#   if ! defined malloc && ! defined EXIT_SUCCESS && (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__ \
+#   if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
      || defined __cplusplus || defined _MSC_VER)
 void free (void *); /* INFRINGES ON USER NAME SPACE */
 #   endif
@@ -446,9 +460,9 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */
 /* A type that is properly aligned for any stack member.  */
 union yyalloc
 {
-  yytype_int16 yyss;
-  YYSTYPE yyvs;
-    YYLTYPE yyls;
+  yytype_int16 yyss_alloc;
+  YYSTYPE yyvs_alloc;
+  YYLTYPE yyls_alloc;
 };
 
 /* The size of the maximum gap between one aligned stack and the next.  */
@@ -460,6 +474,27 @@ union yyalloc
      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \
       + 2 * YYSTACK_GAP_MAXIMUM)
 
+# define YYCOPY_NEEDED 1
+
+/* 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_alloc, Stack)                          \
+    do                                                                 \
+      {                                                                        \
+       YYSIZE_T yynewbytes;                                            \
+       YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
+       Stack = &yyptr->Stack_alloc;                                    \
+       yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+       yyptr += yynewbytes / sizeof (*yyptr);                          \
+      }                                                                        \
+    while (YYID (0))
+
+#endif
+
+#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
 /* Copy COUNT objects from FROM to TO.  The source and destination do
    not overlap.  */
 # ifndef YYCOPY
@@ -477,38 +512,21 @@ union yyalloc
       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
+#endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  80
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   288
+#define YYLAST   294
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  26
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  40
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  133
+#define YYNRULES  136
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  261
+#define YYNSTATES  264
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -561,15 +579,15 @@ static const yytype_uint16 yyprhs[] =
       44,    50,    54,    57,    61,    63,    68,    74,    78,    81,
       85,    89,    93,    95,    97,    99,   104,   110,   114,   117,
      122,   128,   132,   135,   140,   146,   150,   153,   157,   159,
-     163,   165,   170,   176,   180,   183,   187,   191,   196,   202,
-     206,   209,   213,   215,   217,   219,   221,   223,   227,   229,
-     233,   235,   239,   243,   248,   254,   258,   261,   265,   269,
-     273,   275,   277,   279,   284,   290,   294,   297,   301,   305,
-     309,   313,   315,   317,   319,   321,   326,   332,   336,   339,
-     343,   345,   350,   356,   360,   363,   368,   374,   378,   381,
-     385,   389,   391,   398,   406,   410,   413,   419,   424,   430,
-     434,   437,   441,   443,   445,   449,   454,   460,   464,   467,
-     471,   473,   476,   480
+     163,   165,   170,   176,   180,   183,   187,   189,   193,   198,
+     204,   208,   211,   215,   217,   219,   221,   223,   225,   229,
+     231,   235,   237,   241,   245,   250,   256,   260,   263,   267,
+     271,   275,   277,   279,   281,   286,   292,   296,   299,   303,
+     307,   311,   315,   317,   319,   321,   323,   328,   334,   338,
+     341,   345,   347,   352,   358,   362,   365,   370,   376,   380,
+     383,   387,   389,   393,   395,   402,   410,   414,   417,   423,
+     428,   434,   438,   441,   445,   447,   449,   453,   455,   460,
+     466,   470,   473,   477,   479,   482,   486
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
@@ -593,56 +611,57 @@ static const yytype_int8 yyrhs[] =
        8,    18,    -1,    36,    17,    39,    -1,    39,    -1,    37,
       17,    40,    -1,    40,    -1,     5,    16,    45,    15,    -1,
        5,    24,    16,    45,    15,    -1,     5,    24,    18,    -1,
-       5,    18,    -1,    16,    45,    15,    -1,    16,    44,    15,
-      -1,    11,    16,    42,    15,    -1,    11,    24,    16,    42,
-      15,    -1,    11,    24,    18,    -1,    11,    18,    -1,    42,
-      17,    43,    -1,    43,    -1,    56,    -1,    55,    -1,    48,
-      -1,    54,    -1,    44,    17,    46,    -1,    46,    -1,    45,
-      17,    47,    -1,    47,    -1,    16,    64,    15,    -1,    16,
-      64,    15,    -1,    12,    16,    49,    15,    -1,    12,    24,
-      16,    49,    15,    -1,    12,    24,    18,    -1,    12,    18,
-      -1,    49,    17,    54,    -1,    49,    17,    55,    -1,    49,
-      17,    56,    -1,    54,    -1,    55,    -1,    56,    -1,    10,
-      16,    51,    15,    -1,    10,    24,    16,    51,    15,    -1,
-      10,    24,    18,    -1,    10,    18,    -1,    51,    17,    54,
-      -1,    51,    17,    48,    -1,    51,    17,    55,    -1,    51,
-      17,    56,    -1,    54,    -1,    48,    -1,    55,    -1,    56,
-      -1,     7,    16,    53,    15,    -1,     7,    24,    16,    53,
-      15,    -1,     7,    24,    18,    -1,     7,    18,    -1,    53,
-      17,    56,    -1,    56,    -1,    13,    16,    64,    15,    -1,
-      13,    24,    16,    64,    15,    -1,    13,    24,    18,    -1,
-      13,    18,    -1,     4,    16,    64,    15,    -1,     4,    24,
-      16,    64,    15,    -1,     4,    24,    18,    -1,     4,    18,
-      -1,    16,    64,    15,    -1,    57,    17,    59,    -1,    59,
-      -1,    20,    16,    16,    64,    15,    15,    -1,    20,    24,
-      16,    16,    64,    15,    15,    -1,    20,    24,    18,    -1,
-      20,    18,    -1,    16,    16,    64,    15,    15,    -1,     6,
-      16,    61,    15,    -1,     6,    24,    16,    61,    15,    -1,
-       6,    24,    18,    -1,     6,    18,    -1,    61,    17,    62,
-      -1,    62,    -1,    65,    -1,    16,    65,    15,    -1,     3,
-      16,    64,    15,    -1,     3,    24,    16,    64,    15,    -1,
-       3,    24,    18,    -1,     3,    18,    -1,    64,    17,    65,
-      -1,    65,    -1,    23,    23,    -1,    23,    23,    23,    -1,
-      23,    23,    23,    23,    -1
+       5,    18,    -1,    16,    45,    15,    -1,    18,    -1,    16,
+      44,    15,    -1,    11,    16,    42,    15,    -1,    11,    24,
+      16,    42,    15,    -1,    11,    24,    18,    -1,    11,    18,
+      -1,    42,    17,    43,    -1,    43,    -1,    56,    -1,    55,
+      -1,    48,    -1,    54,    -1,    44,    17,    46,    -1,    46,
+      -1,    45,    17,    47,    -1,    47,    -1,    16,    64,    15,
+      -1,    16,    64,    15,    -1,    12,    16,    49,    15,    -1,
+      12,    24,    16,    49,    15,    -1,    12,    24,    18,    -1,
+      12,    18,    -1,    49,    17,    54,    -1,    49,    17,    55,
+      -1,    49,    17,    56,    -1,    54,    -1,    55,    -1,    56,
+      -1,    10,    16,    51,    15,    -1,    10,    24,    16,    51,
+      15,    -1,    10,    24,    18,    -1,    10,    18,    -1,    51,
+      17,    54,    -1,    51,    17,    48,    -1,    51,    17,    55,
+      -1,    51,    17,    56,    -1,    54,    -1,    48,    -1,    55,
+      -1,    56,    -1,     7,    16,    53,    15,    -1,     7,    24,
+      16,    53,    15,    -1,     7,    24,    18,    -1,     7,    18,
+      -1,    53,    17,    56,    -1,    56,    -1,    13,    16,    64,
+      15,    -1,    13,    24,    16,    64,    15,    -1,    13,    24,
+      18,    -1,    13,    18,    -1,     4,    16,    64,    15,    -1,
+       4,    24,    16,    64,    15,    -1,     4,    24,    18,    -1,
+       4,    18,    -1,    16,    64,    15,    -1,    18,    -1,    57,
+      17,    59,    -1,    59,    -1,    20,    16,    16,    64,    15,
+      15,    -1,    20,    24,    16,    16,    64,    15,    15,    -1,
+      20,    24,    18,    -1,    20,    18,    -1,    16,    16,    64,
+      15,    15,    -1,     6,    16,    61,    15,    -1,     6,    24,
+      16,    61,    15,    -1,     6,    24,    18,    -1,     6,    18,
+      -1,    61,    17,    62,    -1,    62,    -1,    65,    -1,    16,
+      65,    15,    -1,    18,    -1,     3,    16,    64,    15,    -1,
+       3,    24,    16,    64,    15,    -1,     3,    24,    18,    -1,
+       3,    18,    -1,    64,    17,    65,    -1,    65,    -1,    23,
+      23,    -1,    23,    23,    23,    -1,    23,    23,    23,    23,
+      -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   206,   206,   208,   212,   213,   214,   215,   216,   217,
-     218,   219,   220,   221,   222,   223,   224,   225,   226,   229,
-     231,   233,   235,   239,   241,   245,   247,   249,   251,   255,
-     257,   259,   261,   263,   265,   269,   271,   273,   275,   279,
-     281,   283,   285,   289,   291,   293,   295,   299,   301,   305,
-     307,   311,   313,   315,   317,   321,   324,   327,   329,   331,
-     333,   337,   339,   343,   344,   345,   346,   349,   351,   355,
-     357,   361,   364,   367,   369,   371,   373,   377,   379,   381,
-     383,   385,   387,   391,   393,   395,   397,   401,   403,   405,
-     407,   409,   411,   413,   415,   419,   421,   423,   425,   429,
-     431,   435,   437,   439,   441,   445,   447,   449,   451,   455,
-     459,   461,   465,   467,   469,   471,   475,   479,   481,   483,
-     485,   489,   491,   495,   497,   501,   503,   505,   507,   511,
-     513,   517,   519,   521
+       0,   207,   207,   209,   213,   214,   215,   216,   217,   218,
+     219,   220,   221,   222,   223,   224,   225,   226,   227,   230,
+     232,   234,   236,   240,   242,   246,   248,   250,   252,   256,
+     258,   260,   262,   264,   266,   270,   272,   274,   276,   280,
+     282,   284,   286,   290,   292,   294,   296,   300,   302,   306,
+     308,   312,   314,   316,   318,   322,   324,   328,   331,   333,
+     335,   337,   341,   343,   347,   348,   349,   350,   353,   355,
+     359,   361,   365,   368,   371,   373,   375,   377,   381,   383,
+     385,   387,   389,   391,   395,   397,   399,   401,   405,   407,
+     409,   411,   413,   415,   417,   419,   423,   425,   427,   429,
+     433,   435,   439,   441,   443,   445,   449,   451,   453,   455,
+     459,   461,   465,   467,   471,   473,   475,   477,   481,   485,
+     487,   489,   491,   495,   497,   501,   503,   505,   509,   511,
+     513,   515,   519,   521,   525,   527,   529
 };
 #endif
 
@@ -689,15 +708,15 @@ static const yytype_uint8 yyr1[] =
       29,    29,    29,    30,    30,    31,    31,    31,    31,    32,
       32,    32,    32,    32,    32,    33,    33,    33,    33,    34,
       34,    34,    34,    35,    35,    35,    35,    36,    36,    37,
-      37,    38,    38,    38,    38,    39,    40,    41,    41,    41,
-      41,    42,    42,    43,    43,    43,    43,    44,    44,    45,
-      45,    46,    47,    48,    48,    48,    48,    49,    49,    49,
-      49,    49,    49,    50,    50,    50,    50,    51,    51,    51,
-      51,    51,    51,    51,    51,    52,    52,    52,    52,    53,
-      53,    54,    54,    54,    54,    55,    55,    55,    55,    56,
-      57,    57,    58,    58,    58,    58,    59,    60,    60,    60,
-      60,    61,    61,    62,    62,    63,    63,    63,    63,    64,
-      64,    65,    65,    65
+      37,    38,    38,    38,    38,    39,    39,    40,    41,    41,
+      41,    41,    42,    42,    43,    43,    43,    43,    44,    44,
+      45,    45,    46,    47,    48,    48,    48,    48,    49,    49,
+      49,    49,    49,    49,    50,    50,    50,    50,    51,    51,
+      51,    51,    51,    51,    51,    51,    52,    52,    52,    52,
+      53,    53,    54,    54,    54,    54,    55,    55,    55,    55,
+      56,    56,    57,    57,    58,    58,    58,    58,    59,    60,
+      60,    60,    60,    61,    61,    62,    62,    62,    63,    63,
+      63,    63,    64,    64,    65,    65,    65
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -708,58 +727,58 @@ static const yytype_uint8 yyr2[] =
        5,     3,     2,     3,     1,     4,     5,     3,     2,     3,
        3,     3,     1,     1,     1,     4,     5,     3,     2,     4,
        5,     3,     2,     4,     5,     3,     2,     3,     1,     3,
-       1,     4,     5,     3,     2,     3,     3,     4,     5,     3,
-       2,     3,     1,     1,     1,     1,     1,     3,     1,     3,
-       1,     3,     3,     4,     5,     3,     2,     3,     3,     3,
-       1,     1,     1,     4,     5,     3,     2,     3,     3,     3,
-       3,     1,     1,     1,     1,     4,     5,     3,     2,     3,
-       1,     4,     5,     3,     2,     4,     5,     3,     2,     3,
-       3,     1,     6,     7,     3,     2,     5,     4,     5,     3,
-       2,     3,     1,     1,     3,     4,     5,     3,     2,     3,
-       1,     2,     3,     4
+       1,     4,     5,     3,     2,     3,     1,     3,     4,     5,
+       3,     2,     3,     1,     1,     1,     1,     1,     3,     1,
+       3,     1,     3,     3,     4,     5,     3,     2,     3,     3,
+       3,     1,     1,     1,     4,     5,     3,     2,     3,     3,
+       3,     3,     1,     1,     1,     1,     4,     5,     3,     2,
+       3,     1,     4,     5,     3,     2,     4,     5,     3,     2,
+       3,     1,     3,     1,     6,     7,     3,     2,     5,     4,
+       5,     3,     2,     3,     1,     1,     3,     1,     4,     5,
+       3,     2,     3,     1,     2,     3,     4
 };
 
-/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
-   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
+   Performed when YYTABLE doesn't specify something else to do.  Zero
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     2,    18,
       13,    15,    16,    12,     8,     9,     7,    14,    11,     6,
-       5,    17,    10,     4,     0,   128,     0,     0,   108,     0,
-       0,    54,     0,     0,   120,     0,     0,    98,     0,     0,
-      46,     0,     0,    28,     0,     0,    86,     0,     0,    60,
-       0,     0,    76,     0,     0,   104,     0,     0,    22,     0,
-       0,   115,     0,     0,    38,     0,     0,    42,     0,     0,
-       1,     0,     0,   130,     0,   127,     0,     0,   107,     0,
-       0,    70,     0,    53,     0,     0,   122,   123,     0,   119,
-       0,     0,   100,     0,    97,     0,     0,    48,     0,    45,
-       0,    32,    34,    33,     0,    27,    92,     0,    91,    93,
-      94,     0,    85,     0,    62,    65,    66,    64,    63,     0,
-      59,     0,    80,    81,    82,     0,    75,     0,     0,   103,
-      24,     0,     0,    21,     0,     0,   114,     0,     0,   111,
-       0,    37,     0,     0,    50,     0,    41,     3,   131,   125,
-       0,     0,   105,     0,     0,    51,     0,     0,     0,   117,
-       0,     0,     0,    95,     0,     0,     0,    43,     0,     0,
-      25,     0,     0,    83,     0,     0,    57,     0,     0,    73,
-       0,     0,   101,     0,    19,     0,     0,     0,     0,     0,
-      35,     0,     0,     0,     0,    68,    39,     0,     0,   132,
-     129,   126,   106,    72,    69,    52,   124,   121,   118,   109,
-      99,    96,    55,    47,    44,    29,    31,    30,    26,    88,
-      87,    89,    90,    84,    61,    58,    77,    78,    79,    74,
-     102,    23,    20,     0,     0,     0,   110,    36,     0,    56,
-       0,    49,    40,   133,   112,     0,     0,    71,    67,   113,
-     116
+       5,    17,    10,     4,     0,   131,     0,     0,   109,     0,
+       0,    54,     0,     0,   122,     0,     0,    99,     0,     0,
+      46,     0,     0,    28,     0,     0,    87,     0,     0,    61,
+       0,     0,    77,     0,     0,   105,     0,     0,    22,     0,
+       0,   117,     0,     0,    38,     0,     0,    42,     0,     0,
+       1,     0,     0,   133,     0,   130,     0,     0,   108,     0,
+       0,    71,     0,    53,     0,   127,     0,   124,   125,     0,
+     121,     0,   111,     0,   101,     0,    98,     0,    56,     0,
+      48,     0,    45,     0,    32,    34,    33,     0,    27,    93,
+       0,    92,    94,    95,     0,    86,     0,    63,    66,    67,
+      65,    64,     0,    60,     0,    81,    82,    83,     0,    76,
+       0,     0,   104,    24,     0,     0,    21,     0,     0,   116,
+       0,     0,   113,     0,    37,     0,     0,    50,     0,    41,
+       3,   134,   128,     0,     0,   106,     0,     0,    51,     0,
+       0,     0,   119,     0,     0,     0,    96,     0,     0,     0,
+      43,     0,     0,    25,     0,     0,    84,     0,     0,    58,
+       0,     0,    74,     0,     0,   102,     0,    19,     0,     0,
+       0,     0,     0,    35,     0,     0,     0,     0,    69,    39,
+       0,     0,   135,   132,   129,   107,    73,    70,    52,   126,
+     123,   120,   110,   100,    97,    55,    47,    44,    29,    31,
+      30,    26,    89,    88,    90,    91,    85,    62,    59,    78,
+      79,    80,    75,   103,    23,    20,     0,     0,     0,   112,
+      36,     0,    57,     0,    49,    40,   136,   114,     0,     0,
+      72,    68,   115,   118
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,    17,   140,    19,   141,    20,   110,    21,    22,    23,
-     106,   153,    24,   107,   154,    25,   123,   124,   204,    90,
-     205,    91,    26,   131,    27,   117,    28,   101,    29,    30,
-     128,   148,    31,   149,    32,    95,    96,    33,    82,    83
+      -1,    17,   143,    19,   144,    20,   113,    21,    22,    23,
+     109,   156,    24,   110,   157,    25,   126,   127,   207,    90,
+     208,    91,    26,   134,    27,   120,    28,   103,    29,    30,
+     131,   151,    31,   152,    32,    96,    97,    33,    82,    83
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
@@ -767,113 +786,120 @@ static const yytype_int16 yydefgoto[] =
 #define YYPACT_NINF -90
 static const yytype_int16 yypact[] =
 {
-     107,    20,    21,    31,    34,    38,    45,    50,    72,    76,
-      77,    81,   132,   136,   137,   164,     1,     8,   -90,   -90,
-     -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,
-     -90,   -90,   -90,   -90,     4,   -90,     7,     4,   -90,    24,
-      27,   -90,    55,     3,   -90,    88,    41,   -90,    91,    44,
-     -90,   106,    30,   -90,   148,    17,   -90,   173,    17,   -90,
-     174,    18,   -90,   178,     4,   -90,   181,   165,   -90,   182,
-      49,   -90,   185,    66,   -90,   186,    69,   -90,   189,   165,
-     -90,    75,   108,   -90,     4,   -90,   166,     4,   -90,     4,
-     191,   -90,    27,   -90,     4,   194,   -90,   -90,     3,   -90,
-       4,   195,   -90,    41,   -90,    27,   198,   -90,    44,   -90,
-     199,   -90,   -90,   -90,    30,   -90,   -90,   202,   -90,   -90,
-     -90,    17,   -90,   203,   -90,   -90,   -90,   -90,   -90,    17,
-     -90,   206,   -90,   -90,   -90,    18,   -90,   207,     4,   -90,
-     -90,   210,   165,   -90,     4,    87,   -90,   110,   211,   -90,
-      66,   -90,   121,   214,   -90,    69,   -90,   -90,   122,   -90,
-       4,   215,   -90,   218,   219,   -90,    27,   222,     9,   -90,
-       3,   223,   226,   -90,    41,   227,   230,   -90,    44,   231,
-     -90,    30,   234,   -90,    17,   235,   -90,    17,   238,   -90,
-      18,   239,   -90,   242,   -90,   165,   243,   246,     4,     4,
-     -90,    66,   247,     4,   250,   -90,   -90,    69,   251,   128,
+     109,    -2,    16,    23,    26,    36,    39,    40,    52,    53,
+      74,    79,    83,    84,   108,   137,     7,    46,   -90,   -90,
      -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,
+     -90,   -90,   -90,   -90,    43,   -90,    27,    43,   -90,    88,
+      33,   -90,   144,   140,   -90,   167,   175,   -90,   176,   179,
+     -90,   183,    20,   -90,   184,    11,   -90,   187,    11,   -90,
+     188,    17,   -90,   191,    43,   -90,   192,   168,   -90,   195,
+      51,   -90,   196,    56,   -90,   199,    70,   -90,   200,   168,
+     -90,    68,   110,   -90,    43,   -90,   169,    43,   -90,    43,
+     204,   -90,    33,   -90,    43,   -90,   205,   -90,   -90,   140,
+     -90,    43,   -90,   208,   -90,   175,   -90,    33,   -90,   209,
+     -90,   179,   -90,   212,   -90,   -90,   -90,    20,   -90,   -90,
+     213,   -90,   -90,   -90,    11,   -90,   216,   -90,   -90,   -90,
+     -90,   -90,    11,   -90,   217,   -90,   -90,   -90,    17,   -90,
+     220,    43,   -90,   -90,   221,   168,   -90,    43,    80,   -90,
+      93,   224,   -90,    56,   -90,    94,   225,   -90,    70,   -90,
+     -90,   105,   -90,    43,   228,   -90,   229,   232,   -90,    33,
+     233,    44,   -90,   140,   236,   237,   -90,   175,   240,   241,
+     -90,   179,   244,   -90,    20,   245,   -90,    11,   248,   -90,
+      11,   249,   -90,    17,   252,   -90,   253,   -90,   168,   256,
+     257,    43,    43,   -90,    56,   260,    43,   261,   -90,   -90,
+      70,   264,   112,   -90,   -90,   -90,   -90,   -90,   -90,   -90,
      -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,
      -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,
-     -90,   -90,   -90,   142,   254,   255,   -90,   -90,   258,   -90,
-     121,   -90,   -90,   -90,   -90,   143,   150,   -90,   -90,   -90,
-     -90
+     -90,   -90,   -90,   -90,   -90,   -90,    47,   265,   268,   -90,
+     -90,   269,   -90,    94,   -90,   -90,   -90,   -90,   131,   132,
+     -90,   -90,   -90,   -90
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-     -90,   -90,     0,   -90,    42,   -90,    79,   -90,   -90,   -90,
-     168,   119,   -39,   -47,    70,   -38,   149,    92,   -90,   -89,
-      32,   114,   -40,   146,   -90,   162,   -90,   183,   -51,   -49,
-     -44,   134,   -90,    84,   -90,   190,   117,   -90,   -36,   -11
+     -90,   -90,     0,   -90,     5,   -90,    37,   -90,   -90,   -90,
+      48,     6,   -39,   -33,   -42,   -32,    55,   -21,   -90,   -89,
+     -57,   118,   -50,   150,   -90,   165,   -90,   185,   -51,   -49,
+     -44,   138,   -90,    89,   -90,   193,   121,   -90,   -36,    -6
 };
 
 /* 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.  */
+   number is the opposite.  If YYTABLE_NINF, syntax error.  */
 #define YYTABLE_NINF -1
 static const yytype_uint16 yytable[] =
 {
-      18,    86,   102,   167,   118,   112,   119,   126,    80,   127,
-     132,   120,   133,   111,   113,   116,   176,   134,   125,    94,
-      79,     2,     2,    84,   216,    85,    81,    81,   137,    10,
-      11,    11,    97,   100,   100,     3,    34,    37,    35,    38,
-      87,     9,    88,    89,    36,    39,   105,    40,   161,    41,
-      43,   163,    44,   164,    46,    42,    47,   100,    45,   102,
-     105,    49,    48,    50,   172,   144,    52,   112,    53,    51,
-     118,    92,   119,    93,    54,   111,   113,   120,   126,   157,
-     127,   116,   147,   168,   132,   152,   133,    97,    55,   125,
-      56,   134,    58,    61,    59,    62,    57,    64,   158,    65,
-      60,    63,   193,   198,    98,    66,    99,   103,   197,   104,
-       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,   108,   159,   109,   160,   199,    13,    14,    15,
-     220,   223,    16,   230,   226,   231,   126,   203,   127,   236,
-     232,   237,   225,   227,   229,   209,   238,   125,    67,   210,
-      68,   253,    70,    73,    71,    74,    69,   254,   259,    97,
-      72,    75,   244,   245,   114,   260,   115,   248,     1,     2,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      76,   162,    77,   160,   196,    13,    14,    15,    78,   121,
-     129,   122,   130,   182,   135,   241,   136,   138,   142,   139,
-     143,   145,   150,   146,   151,   155,   165,   156,   166,   169,
-     173,   170,   174,   177,   180,   178,   181,   183,   186,   184,
-     187,   189,   192,   190,   160,   194,   200,   195,   201,   206,
-     211,   207,   160,   212,   213,   160,   160,   215,   218,   166,
-     170,   219,   221,   160,   174,   222,   224,   166,   178,   228,
-     233,   181,   184,   235,   239,   187,   190,   240,   242,   160,
-     195,   243,   247,   160,   201,   249,   252,   250,   207,   255,
-     256,   160,   160,   257,   208,   160,   179,   251,   188,   234,
-     214,   191,   258,   185,   202,   246,   175,   217,   171
+      18,    86,   104,   170,   121,   119,   122,   129,   128,   130,
+     135,   123,   136,   114,    34,     2,    35,   137,   179,   115,
+     116,     2,    36,    10,    11,     3,    79,   101,   140,   102,
+      11,     9,    37,   101,    38,   102,   107,    98,   108,    40,
+      39,    41,    43,    84,    44,    85,    80,    42,   164,    89,
+      45,   166,    46,   167,    47,    49,    52,    50,    53,   219,
+      48,   104,   257,    51,    54,   175,    81,   147,    55,    58,
+      56,    59,   150,   121,   119,   122,    57,    60,   114,   160,
+     123,   129,   128,   130,   115,   116,   155,   135,   171,   136,
+      61,   161,    62,    98,   137,    64,   201,    65,    63,    67,
+      70,    68,    71,    66,    87,   196,    88,    69,    72,   202,
+     206,   200,     1,     2,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    73,   162,    74,   163,   212,    13,
+      14,    15,    75,   223,    16,   256,   233,   232,   234,   129,
+     128,   130,   239,   235,   240,   228,   262,   263,   226,   241,
+     199,   229,   230,    76,   185,    77,    94,   213,    95,   182,
+      92,    78,    93,    81,   211,   247,   248,    98,   254,   237,
+     251,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    99,   165,   100,   163,   191,    13,    14,
+      15,   101,   105,   102,   106,   107,   261,   108,   244,   111,
+     117,   112,   118,   124,   132,   125,   133,   138,   141,   139,
+     142,   145,   148,   146,   149,   153,   158,   154,   159,   168,
+     172,   169,   173,   176,   180,   177,   181,   183,   186,   184,
+     187,   189,   192,   190,   193,   195,   197,   163,   198,   203,
+     209,   204,   210,   214,   215,   163,   163,   216,   218,   163,
+     169,   221,   222,   173,   163,   224,   225,   177,   169,   227,
+     231,   181,   184,   236,   238,   187,   190,   242,   243,   193,
+     163,   245,   246,   198,   163,   250,   252,   204,   253,   255,
+     258,   210,   163,   259,   260,   163,   163,   217,   194,   188,
+     178,   205,   174,   249,   220
 };
 
+#define yypact_value_is_default(yystate) \
+  ((yystate) == (-90))
+
+#define yytable_value_is_error(yytable_value) \
+  YYID (0)
+
 static const yytype_uint8 yycheck[] =
 {
-       0,    37,    46,    92,    55,    52,    55,    58,     0,    58,
-      61,    55,    61,    52,    52,    55,   105,    61,    58,    16,
-      19,     4,     4,    16,    15,    18,    23,    23,    64,    12,
-      13,    13,    43,    16,    16,     5,    16,    16,    18,    18,
-      16,    11,    18,    16,    24,    24,    16,    16,    84,    18,
-      16,    87,    18,    89,    16,    24,    18,    16,    24,   103,
-      16,    16,    24,    18,   100,    16,    16,   114,    18,    24,
-     121,    16,   121,    18,    24,   114,   114,   121,   129,    79,
-     129,   121,    16,    94,   135,    16,   135,    98,    16,   129,
-      18,   135,    16,    16,    18,    18,    24,    16,    23,    18,
-      24,    24,   138,    16,    16,    24,    18,    16,   144,    18,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    16,    15,    18,    17,    16,    20,    21,    22,
-     174,   178,    25,   184,   181,   184,   187,    16,   187,   190,
-     184,   190,   181,   181,   184,    23,   190,   187,    16,   160,
-      18,    23,    16,    16,    18,    18,    24,    15,    15,   170,
-      24,    24,   198,   199,    16,    15,    18,   203,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      16,    15,    18,    17,   142,    20,    21,    22,    24,    16,
-      16,    18,    18,   114,    16,   195,    18,    16,    16,    18,
-      18,    16,    16,    18,    18,    16,    15,    18,    17,    15,
+       0,    37,    46,    92,    55,    55,    55,    58,    58,    58,
+      61,    55,    61,    52,    16,     4,    18,    61,   107,    52,
+      52,     4,    24,    12,    13,     5,    19,    16,    64,    18,
+      13,    11,    16,    16,    18,    18,    16,    43,    18,    16,
+      24,    18,    16,    16,    18,    18,     0,    24,    84,    16,
+      24,    87,    16,    89,    18,    16,    16,    18,    18,    15,
+      24,   105,    15,    24,    24,   101,    23,    16,    16,    16,
+      18,    18,    16,   124,   124,   124,    24,    24,   117,    79,
+     124,   132,   132,   132,   117,   117,    16,   138,    94,   138,
+      16,    23,    18,    99,   138,    16,    16,    18,    24,    16,
+      16,    18,    18,    24,    16,   141,    18,    24,    24,    16,
+      16,   147,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    16,    15,    18,    17,    23,    20,
+      21,    22,    24,   177,    25,    23,   187,   187,   187,   190,
+     190,   190,   193,   187,   193,   184,    15,    15,   181,   193,
+     145,   184,   184,    16,   117,    18,    16,   163,    18,   111,
+      16,    24,    18,    23,   158,   201,   202,   173,   210,   190,
+     206,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    16,    15,    18,    17,   132,    20,    21,
+      22,    16,    16,    18,    18,    16,   253,    18,   198,    16,
+      16,    18,    18,    16,    16,    18,    18,    16,    16,    18,
+      18,    16,    16,    18,    18,    16,    16,    18,    18,    15,
       15,    17,    17,    15,    15,    17,    17,    15,    15,    17,
       17,    15,    15,    17,    17,    15,    15,    17,    17,    15,
       15,    17,    17,    15,    15,    17,    17,    15,    15,    17,
       17,    15,    15,    17,    17,    15,    15,    17,    17,    15,
       15,    17,    17,    15,    15,    17,    17,    15,    15,    17,
       17,    15,    15,    17,    17,    15,    15,    17,    17,    15,
-      15,    17,    17,    15,   155,    17,   108,   207,   129,   187,
-     166,   135,   250,   121,   150,   201,   103,   170,    98
+      15,    17,    17,    15,    15,    17,    17,   169,   138,   124,
+     105,   153,    99,   204,   173
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -889,24 +915,24 @@ static const yytype_uint8 yystos[] =
       24,    16,    18,    24,    16,    18,    24,    16,    18,    24,
       16,    18,    24,    16,    18,    24,    16,    18,    24,    19,
        0,    23,    64,    65,    16,    18,    64,    16,    18,    16,
-      45,    47,    16,    18,    16,    61,    62,    65,    16,    18,
-      16,    53,    56,    16,    18,    16,    36,    39,    16,    18,
-      32,    38,    39,    41,    16,    18,    48,    51,    54,    55,
-      56,    16,    18,    42,    43,    48,    54,    55,    56,    16,
-      18,    49,    54,    55,    56,    16,    18,    64,    16,    18,
-      28,    30,    16,    18,    16,    16,    18,    16,    57,    59,
-      16,    18,    16,    37,    40,    16,    18,    28,    23,    15,
-      17,    64,    15,    64,    64,    15,    17,    45,    65,    15,
-      17,    61,    64,    15,    17,    53,    45,    15,    17,    36,
-      15,    17,    32,    15,    17,    51,    15,    17,    42,    15,
-      17,    49,    15,    64,    15,    17,    30,    64,    16,    16,
-      15,    17,    57,    16,    44,    46,    15,    17,    37,    23,
-      65,    15,    15,    15,    47,    15,    15,    62,    15,    15,
-      56,    15,    15,    39,    15,    38,    39,    41,    15,    48,
-      54,    55,    56,    15,    43,    15,    54,    55,    56,    15,
-      15,    28,    15,    15,    64,    64,    59,    15,    64,    15,
-      17,    40,    15,    23,    15,    15,    15,    15,    46,    15,
-      15
+      45,    47,    16,    18,    16,    18,    61,    62,    65,    16,
+      18,    16,    18,    53,    56,    16,    18,    16,    18,    36,
+      39,    16,    18,    32,    38,    39,    41,    16,    18,    48,
+      51,    54,    55,    56,    16,    18,    42,    43,    48,    54,
+      55,    56,    16,    18,    49,    54,    55,    56,    16,    18,
+      64,    16,    18,    28,    30,    16,    18,    16,    16,    18,
+      16,    57,    59,    16,    18,    16,    37,    40,    16,    18,
+      28,    23,    15,    17,    64,    15,    64,    64,    15,    17,
+      45,    65,    15,    17,    61,    64,    15,    17,    53,    45,
+      15,    17,    36,    15,    17,    32,    15,    17,    51,    15,
+      17,    42,    15,    17,    49,    15,    64,    15,    17,    30,
+      64,    16,    16,    15,    17,    57,    16,    44,    46,    15,
+      17,    37,    23,    65,    15,    15,    15,    47,    15,    15,
+      62,    15,    15,    56,    15,    15,    39,    15,    38,    39,
+      41,    15,    48,    54,    55,    56,    15,    43,    15,    54,
+      55,    56,    15,    15,    28,    15,    15,    64,    64,    59,
+      15,    64,    15,    17,    40,    15,    23,    15,    15,    15,
+      15,    46,    15,    15
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -921,9 +947,18 @@ static const yytype_uint8 yystos[] =
 
 /* 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.  */
+   Once GCC version 2 has supplanted version 1, this can go.  However,
+   YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
+   in Bison 2.4.2's NEWS entry, where a plan to phase it out is
+   discussed.  */
 
 #define YYFAIL         goto yyerrlab
+#if defined YYFAIL
+  /* This is here to suppress warnings from the GCC cpp's
+     -Wunused-macros.  Normally we don't worry about that warning, but
+     some users do, and we want to make it easy for users to remove
+     YYFAIL uses, which will produce warnings from Bison 2.5.  */
+#endif
 
 #define YYRECOVERING()  (!!yyerrstatus)
 
@@ -933,7 +968,6 @@ do                                                          \
     {                                                          \
       yychar = (Token);                                                \
       yylval = (Value);                                                \
-      yytoken = YYTRANSLATE (yychar);                          \
       YYPOPSTACK (1);                                          \
       goto yybackup;                                           \
     }                                                          \
@@ -1096,17 +1130,20 @@ yy_symbol_print (yyoutput, yytype, yyvaluep, yylocationp)
 #if (defined __STDC__ || defined __C99__FUNC__ \
      || defined __cplusplus || defined _MSC_VER)
 static void
-yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
+yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
 #else
 static void
-yy_stack_print (bottom, top)
-    yytype_int16 *bottom;
-    yytype_int16 *top;
+yy_stack_print (yybottom, yytop)
+    yytype_int16 *yybottom;
+    yytype_int16 *yytop;
 #endif
 {
   YYFPRINTF (stderr, "Stack now");
-  for (; bottom <= top; ++bottom)
-    YYFPRINTF (stderr, " %d", *bottom);
+  for (; yybottom <= yytop; yybottom++)
+    {
+      int yybot = *yybottom;
+      YYFPRINTF (stderr, " %d", yybot);
+    }
   YYFPRINTF (stderr, "\n");
 }
 
@@ -1141,11 +1178,11 @@ yy_reduce_print (yyvsp, yylsp, yyrule)
   /* The symbols being reduced.  */
   for (yyi = 0; yyi < yynrhs; yyi++)
     {
-      fprintf (stderr, "   $%d = ", yyi + 1);
+      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
       yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
                       &(yyvsp[(yyi + 1) - (yynrhs)])
                       , &(yylsp[(yyi + 1) - (yynrhs)])                );
-      fprintf (stderr, "\n");
+      YYFPRINTF (stderr, "\n");
     }
 }
 
@@ -1182,7 +1219,6 @@ int yydebug;
 # define YYMAXDEPTH 10000
 #endif
 
-\f
 
 #if YYERROR_VERBOSE
 
@@ -1285,115 +1321,142 @@ yytnamerr (char *yyres, const char *yystr)
 }
 # 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];
+/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
+   about the unexpected token YYTOKEN for the state stack whose top is
+   YYSSP.
 
-  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
-    return 0;
-  else
+   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
+   not large enough to hold the message.  In that case, also set
+   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
+   required number of bytes is too large to store.  */
+static int
+yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+                yytype_int16 *yyssp, int yytoken)
+{
+  YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
+  YYSIZE_T yysize = yysize0;
+  YYSIZE_T yysize1;
+  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+  /* Internationalized format string. */
+  const char *yyformat = 0;
+  /* Arguments of yyformat. */
+  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+  /* Number of reported tokens (one for the "unexpected", one per
+     "expected"). */
+  int yycount = 0;
+
+  /* There are many possibilities here to consider:
+     - Assume YYFAIL is not used.  It's too flawed to consider.  See
+       <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
+       for details.  YYERROR is fine as it does not invoke this
+       function.
+     - If this state is a consistent state with a default action, then
+       the only way this function was invoked is if the default action
+       is an error action.  In that case, don't check for expected
+       tokens because there are none.
+     - The only way there can be no lookahead present (in yychar) is if
+       this state is a consistent state with a default action.  Thus,
+       detecting the absence of a lookahead is sufficient to determine
+       that there is no unexpected or expected token to report.  In that
+       case, just report a simple "syntax error".
+     - Don't assume there isn't a lookahead just because this state is a
+       consistent state with a default action.  There might have been a
+       previous inconsistent state, consistent state with a non-default
+       action, or user semantic action that manipulated yychar.
+     - Of course, the expected token list depends on states to have
+       correct lookahead information, and it depends on the parser not
+       to perform extra reductions after fetching a lookahead from the
+       scanner and before detecting a syntax error.  Thus, state merging
+       (from LALR or IELR) and default reductions corrupt the expected
+       token list.  However, the list is correct for canonical LR with
+       one exception: it will still contain any token that will not be
+       accepted due to an error action in a later state.
+  */
+  if (yytoken != YYEMPTY)
     {
-      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;
-         }
+      int yyn = yypact[*yyssp];
+      yyarg[yycount++] = yytname[yytoken];
+      if (!yypact_value_is_default (yyn))
+        {
+          /* Start YYX at -YYN if negative to avoid negative indexes in
+             YYCHECK.  In other words, skip the first -YYN actions for
+             this state because they are default actions.  */
+          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 yyx;
+
+          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
+                && !yytable_value_is_error (yytable[yyx + yyn]))
+              {
+                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+                  {
+                    yycount = 1;
+                    yysize = yysize0;
+                    break;
+                  }
+                yyarg[yycount++] = yytname[yyx];
+                yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+                if (! (yysize <= yysize1
+                       && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+                  return 2;
+                yysize = yysize1;
+              }
+        }
+    }
 
-      yyf = YY_(yyformat);
-      yysize1 = yysize + yystrlen (yyf);
-      yysize_overflow |= (yysize1 < yysize);
-      yysize = yysize1;
+  switch (yycount)
+    {
+# define YYCASE_(N, S)                      \
+      case N:                               \
+        yyformat = S;                       \
+      break
+      YYCASE_(0, YY_("syntax error"));
+      YYCASE_(1, YY_("syntax error, unexpected %s"));
+      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+# undef YYCASE_
+    }
 
-      if (yysize_overflow)
-       return YYSIZE_MAXIMUM;
+  yysize1 = yysize + yystrlen (yyformat);
+  if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+    return 2;
+  yysize = yysize1;
 
-      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;
+  if (*yymsg_alloc < yysize)
+    {
+      *yymsg_alloc = 2 * yysize;
+      if (! (yysize <= *yymsg_alloc
+             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
+        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
+      return 1;
     }
+
+  /* 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 = *yymsg;
+    int yyi = 0;
+    while ((*yyp = *yyformat) != '\0')
+      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
+        {
+          yyp += yytnamerr (yyp, yyarg[yyi++]);
+          yyformat += 2;
+        }
+      else
+        {
+          yyp++;
+          yyformat++;
+        }
+  }
+  return 0;
 }
 #endif /* YYERROR_VERBOSE */
-\f
 
 /*-----------------------------------------------.
 | Release the memory associated to this symbol.  |
@@ -1423,194 +1486,337 @@ yydestruct (yymsg, yytype, yyvaluep, yylocationp)
   switch (yytype)
     {
       case 28: /* "geometry_no_srid" */
-#line 184 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 185 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1428 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1496 "y.tab.c"
        break;
       case 29: /* "geometrycollection" */
-#line 185 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 186 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1433 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1505 "y.tab.c"
        break;
       case 31: /* "multisurface" */
-#line 192 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 193 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1438 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1514 "y.tab.c"
        break;
       case 32: /* "surface_list" */
-#line 171 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 172 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1443 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1523 "y.tab.c"
        break;
       case 33: /* "tin" */
-#line 199 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 200 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1448 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1532 "y.tab.c"
        break;
       case 34: /* "polyhedralsurface" */
-#line 198 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 199 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1453 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1541 "y.tab.c"
        break;
       case 35: /* "multipolygon" */
-#line 191 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 192 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1458 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1550 "y.tab.c"
        break;
       case 36: /* "polygon_list" */
-#line 172 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 173 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1463 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1559 "y.tab.c"
        break;
       case 37: /* "patch_list" */
-#line 173 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 174 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1468 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1568 "y.tab.c"
        break;
       case 38: /* "polygon" */
-#line 195 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 196 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1473 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1577 "y.tab.c"
        break;
       case 39: /* "polygon_untagged" */
-#line 197 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 198 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1478 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1586 "y.tab.c"
        break;
       case 40: /* "patch" */
-#line 196 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 197 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1483 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1595 "y.tab.c"
        break;
       case 41: /* "curvepolygon" */
-#line 182 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 183 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1488 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1604 "y.tab.c"
        break;
       case 42: /* "curvering_list" */
-#line 169 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 170 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1493 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1613 "y.tab.c"
        break;
       case 43: /* "curvering" */
-#line 183 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 184 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1498 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1622 "y.tab.c"
        break;
       case 44: /* "patchring_list" */
-#line 179 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 180 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1503 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1631 "y.tab.c"
        break;
       case 45: /* "ring_list" */
-#line 178 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 179 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1508 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1640 "y.tab.c"
        break;
       case 46: /* "patchring" */
-#line 168 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 169 "lwin_wkt_parse.y"
        { ptarray_free((yyvaluep->ptarrayvalue)); };
-#line 1513 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1649 "y.tab.c"
        break;
       case 47: /* "ring" */
-#line 167 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 168 "lwin_wkt_parse.y"
        { ptarray_free((yyvaluep->ptarrayvalue)); };
-#line 1518 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1658 "y.tab.c"
        break;
       case 48: /* "compoundcurve" */
-#line 181 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 182 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1523 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1667 "y.tab.c"
        break;
       case 49: /* "compound_list" */
-#line 177 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 178 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1528 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1676 "y.tab.c"
        break;
       case 50: /* "multicurve" */
-#line 188 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 189 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1533 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1685 "y.tab.c"
        break;
       case 51: /* "curve_list" */
-#line 176 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 177 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1538 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1694 "y.tab.c"
        break;
       case 52: /* "multilinestring" */
-#line 189 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 190 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1543 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1703 "y.tab.c"
        break;
       case 53: /* "linestring_list" */
-#line 175 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 176 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1548 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1712 "y.tab.c"
        break;
       case 54: /* "circularstring" */
-#line 180 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 181 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1553 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1721 "y.tab.c"
        break;
       case 55: /* "linestring" */
-#line 186 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 187 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1558 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1730 "y.tab.c"
        break;
       case 56: /* "linestring_untagged" */
-#line 187 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 188 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1563 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1739 "y.tab.c"
        break;
       case 57: /* "triangle_list" */
-#line 170 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 171 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1568 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1748 "y.tab.c"
        break;
       case 58: /* "triangle" */
-#line 200 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 201 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1573 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1757 "y.tab.c"
        break;
       case 59: /* "triangle_untagged" */
-#line 201 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 202 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1578 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1766 "y.tab.c"
        break;
       case 60: /* "multipoint" */
-#line 190 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 191 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1583 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1775 "y.tab.c"
        break;
       case 61: /* "point_list" */
-#line 174 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 175 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1588 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1784 "y.tab.c"
        break;
       case 62: /* "point_untagged" */
-#line 194 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 195 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1593 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1793 "y.tab.c"
        break;
       case 63: /* "point" */
-#line 193 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 194 "lwin_wkt_parse.y"
        { lwgeom_free((yyvaluep->geometryvalue)); };
-#line 1598 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1802 "y.tab.c"
        break;
       case 64: /* "ptarray" */
-#line 166 "lwin_wkt_parse.y"
+
+/* Line 1391 of yacc.c  */
+#line 167 "lwin_wkt_parse.y"
        { ptarray_free((yyvaluep->ptarrayvalue)); };
-#line 1603 "lwin_wkt_parse.c"
+
+/* Line 1391 of yacc.c  */
+#line 1811 "y.tab.c"
        break;
 
       default:
        break;
     }
 }
-\f
 
-/* Prevent warnings from -Wmissing-prototypes.  */
 
+/* Prevent warnings from -Wmissing-prototypes.  */
 #ifdef YYPARSE_PARAM
 #if defined __STDC__ || defined __cplusplus
 int yyparse (void *YYPARSE_PARAM);
@@ -1626,18 +1832,17 @@ int yyparse ();
 #endif /* ! YYPARSE_PARAM */
 
 
-
-/* The look-ahead symbol.  */
+/* The lookahead symbol.  */
 int yychar;
 
-/* The semantic value of the look-ahead symbol.  */
+/* The semantic value of the lookahead symbol.  */
 YYSTYPE yylval;
 
-/* Number of syntax errors so far.  */
-int yynerrs;
-/* Location data for the look-ahead symbol.  */
+/* Location data for the lookahead symbol.  */
 YYLTYPE yylloc;
 
+/* Number of syntax errors so far.  */
+int yynerrs;
 
 
 /*----------.
@@ -1666,14 +1871,47 @@ yyparse ()
 #endif
 #endif
 {
-  
-  int yystate;
+    int yystate;
+    /* Number of tokens to shift before error messages enabled.  */
+    int yyerrstatus;
+
+    /* The 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;
+    yytype_int16 *yyssp;
+
+    /* The semantic value stack.  */
+    YYSTYPE yyvsa[YYINITDEPTH];
+    YYSTYPE *yyvs;
+    YYSTYPE *yyvsp;
+
+    /* The location stack.  */
+    YYLTYPE yylsa[YYINITDEPTH];
+    YYLTYPE *yyls;
+    YYLTYPE *yylsp;
+
+    /* The locations where the error started and ended.  */
+    YYLTYPE yyerror_range[3];
+
+    YYSIZE_T yystacksize;
+
   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;
+  /* Lookahead token as an internal (translated) token number.  */
+  int yytoken;
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+  YYLTYPE yyloc;
+
 #if YYERROR_VERBOSE
   /* Buffer for error messages, and its allocated size.  */
   char yymsgbuf[128];
@@ -1681,63 +1919,37 @@ yyparse ()
   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;
-
-  /* The location stack.  */
-  YYLTYPE yylsa[YYINITDEPTH];
-  YYLTYPE *yyls = yylsa;
-  YYLTYPE *yylsp;
-  /* The locations where the error started and ended.  */
-  YYLTYPE yyerror_range[2];
-
 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N), yylsp -= (N))
 
-  YYSIZE_T yystacksize = YYINITDEPTH;
-
-  /* The variables used to return semantic value and location from the
-     action routines.  */
-  YYSTYPE yyval;
-  YYLTYPE yyloc;
-
   /* The number of symbols on the RHS of the reduced rule.
      Keep to zero when no symbol should be popped.  */
   int yylen = 0;
 
+  yytoken = 0;
+  yyss = yyssa;
+  yyvs = yyvsa;
+  yyls = yylsa;
+  yystacksize = YYINITDEPTH;
+
   YYDPRINTF ((stderr, "Starting parse\n"));
 
   yystate = 0;
   yyerrstatus = 0;
   yynerrs = 0;
-  yychar = YYEMPTY;            /* Cause a token to be read.  */
+  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;
   yylsp = yyls;
+
 #if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
   /* Initialize the default location before parsing starts.  */
   yylloc.first_line   = yylloc.last_line   = 1;
-  yylloc.first_column = yylloc.last_column = 0;
+  yylloc.first_column = yylloc.last_column = 1;
 #endif
 
   goto yysetstate;
@@ -1776,6 +1988,7 @@ yyparse ()
                    &yyvs1, yysize * sizeof (*yyvsp),
                    &yyls1, yysize * sizeof (*yylsp),
                    &yystacksize);
+
        yyls = yyls1;
        yyss = yyss1;
        yyvs = yyvs1;
@@ -1797,9 +2010,9 @@ yyparse ()
          (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
        if (! yyptr)
          goto yyexhaustedlab;
-       YYSTACK_RELOCATE (yyss);
-       YYSTACK_RELOCATE (yyvs);
-       YYSTACK_RELOCATE (yyls);
+       YYSTACK_RELOCATE (yyss_alloc, yyss);
+       YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+       YYSTACK_RELOCATE (yyls_alloc, yyls);
 #  undef YYSTACK_RELOCATE
        if (yyss1 != yyssa)
          YYSTACK_FREE (yyss1);
@@ -1820,6 +2033,9 @@ yyparse ()
 
   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
 
+  if (yystate == YYFINAL)
+    YYACCEPT;
+
   goto yybackup;
 
 /*-----------.
@@ -1828,16 +2044,16 @@ yyparse ()
 yybackup:
 
   /* Do appropriate processing given the current state.  Read a
-     look-ahead token if we need one and don't already have one.  */
+     lookahead token if we need one and don't already have one.  */
 
-  /* First try to decide what to do without reference to look-ahead token.  */
+  /* First try to decide what to do without reference to lookahead token.  */
   yyn = yypact[yystate];
-  if (yyn == YYPACT_NINF)
+  if (yypact_value_is_default (yyn))
     goto yydefault;
 
-  /* Not known => get a look-ahead token if don't already have one.  */
+  /* Not known => get a lookahead token if don't already have one.  */
 
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
   if (yychar == YYEMPTY)
     {
       YYDPRINTF ((stderr, "Reading a token: "));
@@ -1863,26 +2079,22 @@ yybackup:
   yyn = yytable[yyn];
   if (yyn <= 0)
     {
-      if (yyn == 0 || yyn == YYTABLE_NINF)
-       goto yyerrlab;
+      if (yytable_value_is_error (yyn))
+        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.  */
+  /* Shift the lookahead token.  */
   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
 
-  /* Discard the shifted token unless it is eof.  */
-  if (yychar != YYEOF)
-    yychar = YYEMPTY;
+  /* Discard the shifted token.  */
+  yychar = YYEMPTY;
 
   yystate = yyn;
   *++yyvsp = yylval;
@@ -1923,670 +2135,967 @@ yyreduce:
   switch (yyn)
     {
         case 2:
-#line 207 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 208 "lwin_wkt_parse.y"
     { wkt_parser_geometry_new((yyvsp[(1) - (1)].geometryvalue), SRID_UNKNOWN); WKT_ERROR(); }
     break;
 
   case 3:
-#line 209 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 210 "lwin_wkt_parse.y"
     { wkt_parser_geometry_new((yyvsp[(3) - (3)].geometryvalue), (yyvsp[(1) - (3)].integervalue)); WKT_ERROR(); }
     break;
 
   case 4:
-#line 212 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 213 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); }
     break;
 
   case 5:
-#line 213 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 214 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); }
     break;
 
   case 6:
-#line 214 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 215 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); }
     break;
 
   case 7:
-#line 215 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 216 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); }
     break;
 
   case 8:
-#line 216 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 217 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); }
     break;
 
   case 9:
-#line 217 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 218 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); }
     break;
 
   case 10:
-#line 218 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 219 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); }
     break;
 
   case 11:
-#line 219 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 220 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); }
     break;
 
   case 12:
-#line 220 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 221 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); }
     break;
 
   case 13:
-#line 221 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 222 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); }
     break;
 
   case 14:
-#line 222 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 223 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); }
     break;
 
   case 15:
-#line 223 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 224 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); }
     break;
 
   case 16:
-#line 224 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 225 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); }
     break;
 
   case 17:
-#line 225 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 226 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); }
     break;
 
   case 18:
-#line 226 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 227 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); }
     break;
 
   case 19:
-#line 230 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 231 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(COLLECTIONTYPE, (yyvsp[(3) - (4)].geometryvalue), NULL); WKT_ERROR(); }
     break;
 
   case 20:
-#line 232 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 233 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(COLLECTIONTYPE, (yyvsp[(4) - (5)].geometryvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); }
     break;
 
   case 21:
-#line 234 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 235 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(COLLECTIONTYPE, NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); }
     break;
 
   case 22:
-#line 236 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 237 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(COLLECTIONTYPE, NULL, NULL); WKT_ERROR(); }
     break;
 
   case 23:
-#line 240 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 241 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 24:
-#line 242 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 243 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 25:
-#line 246 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 247 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTISURFACETYPE, (yyvsp[(3) - (4)].geometryvalue), NULL); WKT_ERROR(); }
     break;
 
   case 26:
-#line 248 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 249 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTISURFACETYPE, (yyvsp[(4) - (5)].geometryvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); }
     break;
 
   case 27:
-#line 250 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 251 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTISURFACETYPE, NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); }
     break;
 
   case 28:
-#line 252 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 253 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTISURFACETYPE, NULL, NULL); WKT_ERROR(); }
     break;
 
   case 29:
-#line 256 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 257 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 30:
-#line 258 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 259 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 31:
-#line 260 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 261 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 32:
-#line 262 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 263 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 33:
-#line 264 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 265 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 34:
-#line 266 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 267 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 35:
-#line 270 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 271 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(TINTYPE, (yyvsp[(3) - (4)].geometryvalue), NULL); WKT_ERROR(); }
     break;
 
   case 36:
-#line 272 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 273 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(TINTYPE, (yyvsp[(4) - (5)].geometryvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); }
     break;
 
   case 37:
-#line 274 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 275 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(TINTYPE, NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); }
     break;
 
   case 38:
-#line 276 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 277 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(TINTYPE, NULL, NULL); WKT_ERROR(); }
     break;
 
   case 39:
-#line 280 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 281 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(POLYHEDRALSURFACETYPE, (yyvsp[(3) - (4)].geometryvalue), NULL); WKT_ERROR(); }
     break;
 
   case 40:
-#line 282 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 283 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(POLYHEDRALSURFACETYPE, (yyvsp[(4) - (5)].geometryvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); }
     break;
 
   case 41:
-#line 284 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 285 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(POLYHEDRALSURFACETYPE, NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); }
     break;
 
   case 42:
-#line 286 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 287 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(POLYHEDRALSURFACETYPE, NULL, NULL); WKT_ERROR(); }
     break;
 
   case 43:
-#line 290 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 291 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOLYGONTYPE, (yyvsp[(3) - (4)].geometryvalue), NULL); WKT_ERROR(); }
     break;
 
   case 44:
-#line 292 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 293 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOLYGONTYPE, (yyvsp[(4) - (5)].geometryvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); }
     break;
 
   case 45:
-#line 294 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 295 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOLYGONTYPE, NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); }
     break;
 
   case 46:
-#line 296 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 297 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOLYGONTYPE, NULL, NULL); WKT_ERROR(); }
     break;
 
   case 47:
-#line 300 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 301 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 48:
-#line 302 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 303 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 49:
-#line 306 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 307 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 50:
-#line 308 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 309 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 51:
-#line 312 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 313 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_polygon_finalize((yyvsp[(3) - (4)].geometryvalue), NULL); WKT_ERROR(); }
     break;
 
   case 52:
-#line 314 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 315 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_polygon_finalize((yyvsp[(4) - (5)].geometryvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); }
     break;
 
   case 53:
-#line 316 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 317 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_polygon_finalize(NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); }
     break;
 
   case 54:
-#line 318 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 319 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_polygon_finalize(NULL, NULL); WKT_ERROR(); }
     break;
 
   case 55:
-#line 321 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 323 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = (yyvsp[(2) - (3)].geometryvalue); }
     break;
 
   case 56:
-#line 324 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = (yyvsp[(2) - (3)].geometryvalue); }
+
+/* Line 1806 of yacc.c  */
+#line 325 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_polygon_finalize(NULL, NULL); WKT_ERROR(); }
     break;
 
   case 57:
+
+/* Line 1806 of yacc.c  */
 #line 328 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_curvepolygon_finalize((yyvsp[(3) - (4)].geometryvalue), NULL); WKT_ERROR(); }
+    { (yyval.geometryvalue) = (yyvsp[(2) - (3)].geometryvalue); }
     break;
 
   case 58:
-#line 330 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_curvepolygon_finalize((yyvsp[(4) - (5)].geometryvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); }
+
+/* Line 1806 of yacc.c  */
+#line 332 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_curvepolygon_finalize((yyvsp[(3) - (4)].geometryvalue), NULL); WKT_ERROR(); }
     break;
 
   case 59:
-#line 332 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_curvepolygon_finalize(NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); }
+
+/* Line 1806 of yacc.c  */
+#line 334 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_curvepolygon_finalize((yyvsp[(4) - (5)].geometryvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); }
     break;
 
   case 60:
-#line 334 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_curvepolygon_finalize(NULL, NULL); WKT_ERROR(); }
+
+/* Line 1806 of yacc.c  */
+#line 336 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_curvepolygon_finalize(NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); }
     break;
 
   case 61:
+
+/* Line 1806 of yacc.c  */
 #line 338 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_curvepolygon_add_ring((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); }
+    { (yyval.geometryvalue) = wkt_parser_curvepolygon_finalize(NULL, NULL); WKT_ERROR(); }
     break;
 
   case 62:
-#line 340 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_curvepolygon_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); }
+
+/* Line 1806 of yacc.c  */
+#line 342 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_curvepolygon_add_ring((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 63:
-#line 343 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); }
+
+/* Line 1806 of yacc.c  */
+#line 344 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_curvepolygon_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 64:
-#line 344 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 347 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); }
     break;
 
   case 65:
-#line 345 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 348 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); }
     break;
 
   case 66:
-#line 346 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 349 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); }
     break;
 
   case 67:
+
+/* Line 1806 of yacc.c  */
 #line 350 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_polygon_add_ring((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].ptarrayvalue),'Z'); WKT_ERROR(); }
+    { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); }
     break;
 
   case 68:
-#line 352 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_polygon_new((yyvsp[(1) - (1)].ptarrayvalue),'Z'); WKT_ERROR(); }
+
+/* Line 1806 of yacc.c  */
+#line 354 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_polygon_add_ring((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].ptarrayvalue),'Z'); WKT_ERROR(); }
     break;
 
   case 69:
+
+/* Line 1806 of yacc.c  */
 #line 356 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_polygon_add_ring((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].ptarrayvalue),'2'); WKT_ERROR(); }
+    { (yyval.geometryvalue) = wkt_parser_polygon_new((yyvsp[(1) - (1)].ptarrayvalue),'Z'); WKT_ERROR(); }
     break;
 
   case 70:
-#line 358 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_polygon_new((yyvsp[(1) - (1)].ptarrayvalue),'2'); WKT_ERROR(); }
+
+/* Line 1806 of yacc.c  */
+#line 360 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_polygon_add_ring((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].ptarrayvalue),'2'); WKT_ERROR(); }
     break;
 
   case 71:
-#line 361 "lwin_wkt_parse.y"
-    { (yyval.ptarrayvalue) = (yyvsp[(2) - (3)].ptarrayvalue); }
+
+/* Line 1806 of yacc.c  */
+#line 362 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_polygon_new((yyvsp[(1) - (1)].ptarrayvalue),'2'); WKT_ERROR(); }
     break;
 
   case 72:
-#line 364 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 365 "lwin_wkt_parse.y"
     { (yyval.ptarrayvalue) = (yyvsp[(2) - (3)].ptarrayvalue); }
     break;
 
   case 73:
+
+/* Line 1806 of yacc.c  */
 #line 368 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_collection_finalize(COMPOUNDTYPE, (yyvsp[(3) - (4)].geometryvalue), NULL); WKT_ERROR(); }
+    { (yyval.ptarrayvalue) = (yyvsp[(2) - (3)].ptarrayvalue); }
     break;
 
   case 74:
-#line 370 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_collection_finalize(COMPOUNDTYPE, (yyvsp[(4) - (5)].geometryvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); }
+
+/* Line 1806 of yacc.c  */
+#line 372 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_collection_finalize(COMPOUNDTYPE, (yyvsp[(3) - (4)].geometryvalue), NULL); WKT_ERROR(); }
     break;
 
   case 75:
-#line 372 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_collection_finalize(COMPOUNDTYPE, NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); }
+
+/* Line 1806 of yacc.c  */
+#line 374 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_collection_finalize(COMPOUNDTYPE, (yyvsp[(4) - (5)].geometryvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); }
     break;
 
   case 76:
-#line 374 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_collection_finalize(COMPOUNDTYPE, NULL, NULL); WKT_ERROR(); }
+
+/* Line 1806 of yacc.c  */
+#line 376 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_collection_finalize(COMPOUNDTYPE, NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); }
     break;
 
   case 77:
+
+/* Line 1806 of yacc.c  */
 #line 378 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_compound_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); }
+    { (yyval.geometryvalue) = wkt_parser_collection_finalize(COMPOUNDTYPE, NULL, NULL); WKT_ERROR(); }
     break;
 
   case 78:
-#line 380 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 382 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_compound_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 79:
-#line 382 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 384 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_compound_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 80:
-#line 384 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); }
+
+/* Line 1806 of yacc.c  */
+#line 386 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_compound_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 81:
-#line 386 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 388 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 82:
-#line 388 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 390 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 83:
+
+/* Line 1806 of yacc.c  */
 #line 392 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTICURVETYPE, (yyvsp[(3) - (4)].geometryvalue), NULL); WKT_ERROR(); }
+    { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 84:
-#line 394 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTICURVETYPE, (yyvsp[(4) - (5)].geometryvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); }
+
+/* Line 1806 of yacc.c  */
+#line 396 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTICURVETYPE, (yyvsp[(3) - (4)].geometryvalue), NULL); WKT_ERROR(); }
     break;
 
   case 85:
-#line 396 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTICURVETYPE, NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); }
+
+/* Line 1806 of yacc.c  */
+#line 398 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTICURVETYPE, (yyvsp[(4) - (5)].geometryvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); }
     break;
 
   case 86:
-#line 398 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTICURVETYPE, NULL, NULL); WKT_ERROR(); }
+
+/* Line 1806 of yacc.c  */
+#line 400 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTICURVETYPE, NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); }
     break;
 
   case 87:
+
+/* Line 1806 of yacc.c  */
 #line 402 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); }
+    { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTICURVETYPE, NULL, NULL); WKT_ERROR(); }
     break;
 
   case 88:
-#line 404 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 406 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 89:
-#line 406 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 408 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 90:
-#line 408 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 410 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 91:
-#line 410 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); }
+
+/* Line 1806 of yacc.c  */
+#line 412 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 92:
-#line 412 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 414 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 93:
-#line 414 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 416 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 94:
-#line 416 "lwin_wkt_parse.y"
+
+/* Line 1806 of yacc.c  */
+#line 418 "lwin_wkt_parse.y"
     { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 95:
+
+/* Line 1806 of yacc.c  */
 #line 420 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTILINETYPE, (yyvsp[(3) - (4)].geometryvalue), NULL); WKT_ERROR(); }
+    { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 96:
-#line 422 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTILINETYPE, (yyvsp[(4) - (5)].geometryvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); }
+
+/* Line 1806 of yacc.c  */
+#line 424 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTILINETYPE, (yyvsp[(3) - (4)].geometryvalue), NULL); WKT_ERROR(); }
     break;
 
   case 97:
-#line 424 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTILINETYPE, NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); }
+
+/* Line 1806 of yacc.c  */
+#line 426 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTILINETYPE, (yyvsp[(4) - (5)].geometryvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); }
     break;
 
   case 98:
-#line 426 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTILINETYPE, NULL, NULL); WKT_ERROR(); }
+
+/* Line 1806 of yacc.c  */
+#line 428 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTILINETYPE, NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); }
     break;
 
   case 99:
+
+/* Line 1806 of yacc.c  */
 #line 430 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); }
+    { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTILINETYPE, NULL, NULL); WKT_ERROR(); }
     break;
 
   case 100:
-#line 432 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); }
+
+/* Line 1806 of yacc.c  */
+#line 434 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 101:
+
+/* Line 1806 of yacc.c  */
 #line 436 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_circularstring_new((yyvsp[(3) - (4)].ptarrayvalue), NULL); WKT_ERROR(); }
+    { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 102:
-#line 438 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_circularstring_new((yyvsp[(4) - (5)].ptarrayvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); }
+
+/* Line 1806 of yacc.c  */
+#line 440 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_circularstring_new((yyvsp[(3) - (4)].ptarrayvalue), NULL); WKT_ERROR(); }
     break;
 
   case 103:
-#line 440 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_circularstring_new(NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); }
+
+/* Line 1806 of yacc.c  */
+#line 442 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_circularstring_new((yyvsp[(4) - (5)].ptarrayvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); }
     break;
 
   case 104:
-#line 442 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_circularstring_new(NULL, NULL); WKT_ERROR(); }
+
+/* Line 1806 of yacc.c  */
+#line 444 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_circularstring_new(NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); }
     break;
 
   case 105:
+
+/* Line 1806 of yacc.c  */
 #line 446 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_linestring_new((yyvsp[(3) - (4)].ptarrayvalue), NULL); WKT_ERROR(); }
+    { (yyval.geometryvalue) = wkt_parser_circularstring_new(NULL, NULL); WKT_ERROR(); }
     break;
 
   case 106:
-#line 448 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_linestring_new((yyvsp[(4) - (5)].ptarrayvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); }
+
+/* Line 1806 of yacc.c  */
+#line 450 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_linestring_new((yyvsp[(3) - (4)].ptarrayvalue), NULL); WKT_ERROR(); }
     break;
 
   case 107:
-#line 450 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_linestring_new(NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); }
+
+/* Line 1806 of yacc.c  */
+#line 452 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_linestring_new((yyvsp[(4) - (5)].ptarrayvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); }
     break;
 
   case 108:
-#line 452 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_linestring_new(NULL, NULL); WKT_ERROR(); }
+
+/* Line 1806 of yacc.c  */
+#line 454 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_linestring_new(NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); }
     break;
 
   case 109:
+
+/* Line 1806 of yacc.c  */
 #line 456 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_linestring_new((yyvsp[(2) - (3)].ptarrayvalue), NULL); WKT_ERROR(); }
+    { (yyval.geometryvalue) = wkt_parser_linestring_new(NULL, NULL); WKT_ERROR(); }
     break;
 
   case 110:
+
+/* Line 1806 of yacc.c  */
 #line 460 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); }
+    { (yyval.geometryvalue) = wkt_parser_linestring_new((yyvsp[(2) - (3)].ptarrayvalue), NULL); WKT_ERROR(); }
     break;
 
   case 111:
+
+/* Line 1806 of yacc.c  */
 #line 462 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); }
+    { (yyval.geometryvalue) = wkt_parser_linestring_new(NULL, NULL); WKT_ERROR(); }
     break;
 
   case 112:
+
+/* Line 1806 of yacc.c  */
 #line 466 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_triangle_new((yyvsp[(4) - (6)].ptarrayvalue), NULL); WKT_ERROR(); }
+    { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 113:
+
+/* Line 1806 of yacc.c  */
 #line 468 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_triangle_new((yyvsp[(5) - (7)].ptarrayvalue), (yyvsp[(2) - (7)].stringvalue)); WKT_ERROR(); }
+    { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 114:
-#line 470 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_triangle_new(NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); }
+
+/* Line 1806 of yacc.c  */
+#line 472 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_triangle_new((yyvsp[(4) - (6)].ptarrayvalue), NULL); WKT_ERROR(); }
     break;
 
   case 115:
-#line 472 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_triangle_new(NULL, NULL); WKT_ERROR(); }
+
+/* Line 1806 of yacc.c  */
+#line 474 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_triangle_new((yyvsp[(5) - (7)].ptarrayvalue), (yyvsp[(2) - (7)].stringvalue)); WKT_ERROR(); }
     break;
 
   case 116:
+
+/* Line 1806 of yacc.c  */
 #line 476 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_triangle_new((yyvsp[(3) - (5)].ptarrayvalue), NULL); WKT_ERROR(); }
+    { (yyval.geometryvalue) = wkt_parser_triangle_new(NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); }
     break;
 
   case 117:
-#line 480 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOINTTYPE, (yyvsp[(3) - (4)].geometryvalue), NULL); WKT_ERROR(); }
+
+/* Line 1806 of yacc.c  */
+#line 478 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_triangle_new(NULL, NULL); WKT_ERROR(); }
     break;
 
   case 118:
+
+/* Line 1806 of yacc.c  */
 #line 482 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOINTTYPE, (yyvsp[(4) - (5)].geometryvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); }
+    { (yyval.geometryvalue) = wkt_parser_triangle_new((yyvsp[(3) - (5)].ptarrayvalue), NULL); WKT_ERROR(); }
     break;
 
   case 119:
-#line 484 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOINTTYPE, NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); }
+
+/* Line 1806 of yacc.c  */
+#line 486 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOINTTYPE, (yyvsp[(3) - (4)].geometryvalue), NULL); WKT_ERROR(); }
     break;
 
   case 120:
-#line 486 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOINTTYPE, NULL, NULL); WKT_ERROR(); }
+
+/* Line 1806 of yacc.c  */
+#line 488 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOINTTYPE, (yyvsp[(4) - (5)].geometryvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); }
     break;
 
   case 121:
+
+/* Line 1806 of yacc.c  */
 #line 490 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); }
+    { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOINTTYPE, NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); }
     break;
 
   case 122:
+
+/* Line 1806 of yacc.c  */
 #line 492 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); }
+    { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOINTTYPE, NULL, NULL); WKT_ERROR(); }
     break;
 
   case 123:
+
+/* Line 1806 of yacc.c  */
 #line 496 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_point_new(wkt_parser_ptarray_new((yyvsp[(1) - (1)].coordinatevalue)),NULL); WKT_ERROR(); }
+    { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 124:
+
+/* Line 1806 of yacc.c  */
 #line 498 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_point_new(wkt_parser_ptarray_new((yyvsp[(2) - (3)].coordinatevalue)),NULL); WKT_ERROR(); }
+    { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); }
     break;
 
   case 125:
+
+/* Line 1806 of yacc.c  */
 #line 502 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_point_new((yyvsp[(3) - (4)].ptarrayvalue), NULL); WKT_ERROR(); }
+    { (yyval.geometryvalue) = wkt_parser_point_new(wkt_parser_ptarray_new((yyvsp[(1) - (1)].coordinatevalue)),NULL); WKT_ERROR(); }
     break;
 
   case 126:
+
+/* Line 1806 of yacc.c  */
 #line 504 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_point_new((yyvsp[(4) - (5)].ptarrayvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); }
+    { (yyval.geometryvalue) = wkt_parser_point_new(wkt_parser_ptarray_new((yyvsp[(2) - (3)].coordinatevalue)),NULL); WKT_ERROR(); }
     break;
 
   case 127:
+
+/* Line 1806 of yacc.c  */
 #line 506 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_point_new(NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); }
+    { (yyval.geometryvalue) = wkt_parser_point_new(NULL, NULL); WKT_ERROR(); }
     break;
 
   case 128:
-#line 508 "lwin_wkt_parse.y"
-    { (yyval.geometryvalue) = wkt_parser_point_new(NULL,NULL); WKT_ERROR(); }
+
+/* Line 1806 of yacc.c  */
+#line 510 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_point_new((yyvsp[(3) - (4)].ptarrayvalue), NULL); WKT_ERROR(); }
     break;
 
   case 129:
+
+/* Line 1806 of yacc.c  */
 #line 512 "lwin_wkt_parse.y"
-    { (yyval.ptarrayvalue) = wkt_parser_ptarray_add_coord((yyvsp[(1) - (3)].ptarrayvalue), (yyvsp[(3) - (3)].coordinatevalue)); WKT_ERROR(); }
+    { (yyval.geometryvalue) = wkt_parser_point_new((yyvsp[(4) - (5)].ptarrayvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); }
     break;
 
   case 130:
+
+/* Line 1806 of yacc.c  */
 #line 514 "lwin_wkt_parse.y"
-    { (yyval.ptarrayvalue) = wkt_parser_ptarray_new((yyvsp[(1) - (1)].coordinatevalue)); WKT_ERROR(); }
+    { (yyval.geometryvalue) = wkt_parser_point_new(NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); }
     break;
 
   case 131:
-#line 518 "lwin_wkt_parse.y"
-    { (yyval.coordinatevalue) = wkt_parser_coord_2((yyvsp[(1) - (2)].doublevalue), (yyvsp[(2) - (2)].doublevalue)); WKT_ERROR(); }
+
+/* Line 1806 of yacc.c  */
+#line 516 "lwin_wkt_parse.y"
+    { (yyval.geometryvalue) = wkt_parser_point_new(NULL,NULL); WKT_ERROR(); }
     break;
 
   case 132:
+
+/* Line 1806 of yacc.c  */
 #line 520 "lwin_wkt_parse.y"
-    { (yyval.coordinatevalue) = wkt_parser_coord_3((yyvsp[(1) - (3)].doublevalue), (yyvsp[(2) - (3)].doublevalue), (yyvsp[(3) - (3)].doublevalue)); WKT_ERROR(); }
+    { (yyval.ptarrayvalue) = wkt_parser_ptarray_add_coord((yyvsp[(1) - (3)].ptarrayvalue), (yyvsp[(3) - (3)].coordinatevalue)); WKT_ERROR(); }
     break;
 
   case 133:
+
+/* Line 1806 of yacc.c  */
 #line 522 "lwin_wkt_parse.y"
+    { (yyval.ptarrayvalue) = wkt_parser_ptarray_new((yyvsp[(1) - (1)].coordinatevalue)); WKT_ERROR(); }
+    break;
+
+  case 134:
+
+/* Line 1806 of yacc.c  */
+#line 526 "lwin_wkt_parse.y"
+    { (yyval.coordinatevalue) = wkt_parser_coord_2((yyvsp[(1) - (2)].doublevalue), (yyvsp[(2) - (2)].doublevalue)); WKT_ERROR(); }
+    break;
+
+  case 135:
+
+/* Line 1806 of yacc.c  */
+#line 528 "lwin_wkt_parse.y"
+    { (yyval.coordinatevalue) = wkt_parser_coord_3((yyvsp[(1) - (3)].doublevalue), (yyvsp[(2) - (3)].doublevalue), (yyvsp[(3) - (3)].doublevalue)); WKT_ERROR(); }
+    break;
+
+  case 136:
+
+/* Line 1806 of yacc.c  */
+#line 530 "lwin_wkt_parse.y"
     { (yyval.coordinatevalue) = wkt_parser_coord_4((yyvsp[(1) - (4)].doublevalue), (yyvsp[(2) - (4)].doublevalue), (yyvsp[(3) - (4)].doublevalue), (yyvsp[(4) - (4)].doublevalue)); WKT_ERROR(); }
     break;
 
 
-/* Line 1267 of yacc.c.  */
-#line 2587 "lwin_wkt_parse.c"
+
+/* Line 1806 of yacc.c  */
+#line 3086 "y.tab.c"
       default: break;
     }
+  /* User semantic actions sometimes alter yychar, and that requires
+     that yytoken be updated with the new translation.  We take the
+     approach of translating immediately before every use of yytoken.
+     One alternative is translating here after every semantic action,
+     but that translation would be missed if the semantic action invokes
+     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
+     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
+     incorrect destructor might then be invoked immediately.  In the
+     case of YYERROR or YYBACKUP, subsequent parser actions might lead
+     to an incorrect destructor call or verbose syntax error message
+     before the lookahead is translated.  */
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
 
   YYPOPSTACK (yylen);
@@ -2615,6 +3124,10 @@ yyreduce:
 | yyerrlab -- here on detecting error |
 `------------------------------------*/
 yyerrlab:
+  /* Make sure we have latest lookahead translation.  See comments at
+     user semantic actions for why this is necessary.  */
+  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
+
   /* If not already recovering from an error, report this error.  */
   if (!yyerrstatus)
     {
@@ -2622,45 +3135,44 @@ yyerrlab:
 #if ! YYERROR_VERBOSE
       yyerror (YY_("syntax error"));
 #else
+# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
+                                        yyssp, yytoken)
       {
-       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 (yymsg);
-         }
-       else
-         {
-           yyerror (YY_("syntax error"));
-           if (yysize != 0)
-             goto yyexhaustedlab;
-         }
+        char const *yymsgp = YY_("syntax error");
+        int yysyntax_error_status;
+        yysyntax_error_status = YYSYNTAX_ERROR;
+        if (yysyntax_error_status == 0)
+          yymsgp = yymsg;
+        else if (yysyntax_error_status == 1)
+          {
+            if (yymsg != yymsgbuf)
+              YYSTACK_FREE (yymsg);
+            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+            if (!yymsg)
+              {
+                yymsg = yymsgbuf;
+                yymsg_alloc = sizeof yymsgbuf;
+                yysyntax_error_status = 2;
+              }
+            else
+              {
+                yysyntax_error_status = YYSYNTAX_ERROR;
+                yymsgp = yymsg;
+              }
+          }
+        yyerror (yymsgp);
+        if (yysyntax_error_status == 2)
+          goto yyexhaustedlab;
       }
+# undef YYSYNTAX_ERROR
 #endif
     }
 
-  yyerror_range[0] = yylloc;
+  yyerror_range[1] = yylloc;
 
   if (yyerrstatus == 3)
     {
-      /* If just tried and failed to reuse look-ahead token after an
+      /* If just tried and failed to reuse lookahead token after an
         error, discard it.  */
 
       if (yychar <= YYEOF)
@@ -2677,7 +3189,7 @@ yyerrlab:
        }
     }
 
-  /* Else will try to reuse look-ahead token after shifting the error
+  /* Else will try to reuse lookahead token after shifting the error
      token.  */
   goto yyerrlab1;
 
@@ -2693,7 +3205,7 @@ yyerrorlab:
   if (/*CONSTCOND*/ 0)
      goto yyerrorlab;
 
-  yyerror_range[0] = yylsp[1-yylen];
+  yyerror_range[1] = yylsp[1-yylen];
   /* Do not reclaim the symbols of the rule which action triggered
      this YYERROR.  */
   YYPOPSTACK (yylen);
@@ -2712,7 +3224,7 @@ yyerrlab1:
   for (;;)
     {
       yyn = yypact[yystate];
-      if (yyn != YYPACT_NINF)
+      if (!yypact_value_is_default (yyn))
        {
          yyn += YYTERROR;
          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
@@ -2727,7 +3239,7 @@ yyerrlab1:
       if (yyssp == yyss)
        YYABORT;
 
-      yyerror_range[0] = *yylsp;
+      yyerror_range[1] = *yylsp;
       yydestruct ("Error: popping",
                  yystos[yystate], yyvsp, yylsp);
       YYPOPSTACK (1);
@@ -2735,15 +3247,12 @@ yyerrlab1:
       YY_STACK_PRINT (yyss, yyssp);
     }
 
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
   *++yyvsp = yylval;
 
-  yyerror_range[1] = yylloc;
+  yyerror_range[2] = yylloc;
   /* Using YYLLOC is tempting, but would change the location of
-     the look-ahead.  YYLOC is available though.  */
-  YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2);
+     the lookahead.  YYLOC is available though.  */
+  YYLLOC_DEFAULT (yyloc, yyerror_range, 2);
   *++yylsp = yyloc;
 
   /* Shift the error token.  */
@@ -2767,7 +3276,7 @@ yyabortlab:
   yyresult = 1;
   goto yyreturn;
 
-#ifndef yyoverflow
+#if !defined(yyoverflow) || YYERROR_VERBOSE
 /*-------------------------------------------------.
 | yyexhaustedlab -- memory exhaustion comes here.  |
 `-------------------------------------------------*/
@@ -2778,9 +3287,14 @@ yyexhaustedlab:
 #endif
 
 yyreturn:
-  if (yychar != YYEOF && yychar != YYEMPTY)
-     yydestruct ("Cleanup: discarding lookahead",
-                yytoken, &yylval, &yylloc);
+  if (yychar != YYEMPTY)
+    {
+      /* Make sure we have latest lookahead translation.  See comments at
+         user semantic actions for why this is necessary.  */
+      yytoken = YYTRANSLATE (yychar);
+      yydestruct ("Cleanup: discarding lookahead",
+                  yytoken, &yylval, &yylloc);
+    }
   /* Do not reclaim the symbols of the rule which action triggered
      this YYABORT or YYACCEPT.  */
   YYPOPSTACK (yylen);
@@ -2804,7 +3318,9 @@ yyreturn:
 }
 
 
-#line 524 "lwin_wkt_parse.y"
+
+/* Line 2067 of yacc.c  */
+#line 532 "lwin_wkt_parse.y"
 
 
 
index 89c0301a32f62e6482f78dbe2aaff47c10a0a5a0..2f41402fc4b85afc2d93dbadcbfca104b4469bcd 100644 (file)
@@ -319,7 +319,10 @@ polygon :
                { $$ = wkt_parser_polygon_finalize(NULL, NULL); WKT_ERROR(); } ;
 
 polygon_untagged : 
-       LBRACKET_TOK ring_list RBRACKET_TOK { $$ = $2; } ;
+       LBRACKET_TOK ring_list RBRACKET_TOK 
+               { $$ = $2; } |
+       EMPTY_TOK
+               { $$ = wkt_parser_polygon_finalize(NULL, NULL); WKT_ERROR(); };
 
 patch : 
        LBRACKET_TOK patchring_list RBRACKET_TOK { $$ = $2; } ;
@@ -454,7 +457,9 @@ linestring :
 
 linestring_untagged :
        LBRACKET_TOK ptarray RBRACKET_TOK 
-               { $$ = wkt_parser_linestring_new($2, NULL); WKT_ERROR(); } ;
+               { $$ = wkt_parser_linestring_new($2, NULL); WKT_ERROR(); } |
+       EMPTY_TOK
+               { $$ = wkt_parser_linestring_new(NULL, NULL); WKT_ERROR(); };
 
 triangle_list :
        triangle_list COMMA_TOK triangle_untagged 
@@ -496,7 +501,9 @@ point_untagged :
        coordinate 
                { $$ = wkt_parser_point_new(wkt_parser_ptarray_new($1),NULL); WKT_ERROR(); } |
        LBRACKET_TOK coordinate RBRACKET_TOK
-               { $$ = wkt_parser_point_new(wkt_parser_ptarray_new($2),NULL); WKT_ERROR(); } ;
+               { $$ = wkt_parser_point_new(wkt_parser_ptarray_new($2),NULL); WKT_ERROR(); } |
+       EMPTY_TOK
+               { $$ = wkt_parser_point_new(NULL, NULL); WKT_ERROR(); };
 
 point : 
        POINT_TOK LBRACKET_TOK ptarray RBRACKET_TOK 
index c42582b004d2d69d8aa71260b88e717118dafb57..7efb17da30f60642667cba016c4ae2be10502cb7 100644 (file)
@@ -54,7 +54,7 @@ static void dimension_qualifiers_to_wkt_sb(const LWGEOM *geom, stringbuffer_t *s
 */
 static void empty_to_wkt_sb(stringbuffer_t *sb)
 {
-       if ( stringbuffer_lastchar(sb) != ' ' ) /* "EMPTY" */
+       if ( ! strchr(" ,(", stringbuffer_lastchar(sb)) ) /* "EMPTY" */
        { 
                stringbuffer_append(sb, " "); 
        }