]> granicus.if.org Git - postgis/commitdiff
Fix longstanding parser memory leak
authorPaul Ramsey <pramsey@cleverelephant.ca>
Mon, 29 Jun 2015 17:34:49 +0000 (17:34 +0000)
committerPaul Ramsey <pramsey@cleverelephant.ca>
Mon, 29 Jun 2015 17:34:49 +0000 (17:34 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@13747 b70326c6-7e19-0410-871a-916f4a2858ee

liblwgeom/lwin_wkt.h
liblwgeom/lwin_wkt_lex.c
liblwgeom/lwin_wkt_lex.l
liblwgeom/lwin_wkt_parse.c
liblwgeom/lwin_wkt_parse.h
liblwgeom/lwin_wkt_parse.y

index e60673e3c08dac19649136bbbe099ebc6b1699ae..cc621304d495c16ca6d0cb87b28914b234db53b9 100644 (file)
@@ -25,6 +25,7 @@ extern const char *parser_error_messages[];
 */
 extern void wkt_lexer_init(char *str);
 extern void wkt_lexer_close(void);
+extern int wkt_yylex_destroy(void);
 
 
 /*
index 0c3042aaabcbcac3bf2004f0042619881e4945f5..9ef57c358a9ba944b84e3d8e7da721818355aa36 100644 (file)
@@ -28,7 +28,7 @@
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
 #define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 35
+#define YY_FLEX_SUBMINOR_VERSION 37
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -161,15 +161,7 @@ typedef unsigned int flex_uint32_t;
 
 /* Size of default input buffer. */
 #ifndef YY_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k.
- * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
- * Ditto for the __ia64__ case accordingly.
- */
-#define YY_BUF_SIZE 32768
-#else
 #define YY_BUF_SIZE 16384
-#endif /* __ia64__ */
 #endif
 
 /* The state buf must be large enough to hold one state per character in the main buffer.
@@ -181,7 +173,12 @@ typedef unsigned int flex_uint32_t;
 typedef struct yy_buffer_state *YY_BUFFER_STATE;
 #endif
 
-extern int wkt_yyleng;
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+extern yy_size_t wkt_yyleng;
 
 extern FILE *wkt_yyin, *wkt_yyout;
 
@@ -207,11 +204,6 @@ extern FILE *wkt_yyin, *wkt_yyout;
 
 #define unput(c) yyunput( c, (yytext_ptr)  )
 
-#ifndef YY_TYPEDEF_YY_SIZE_T
-#define YY_TYPEDEF_YY_SIZE_T
-typedef size_t yy_size_t;
-#endif
-
 #ifndef YY_STRUCT_YY_BUFFER_STATE
 #define YY_STRUCT_YY_BUFFER_STATE
 struct yy_buffer_state
@@ -229,7 +221,7 @@ struct yy_buffer_state
        /* Number of characters read into yy_ch_buf, not including EOB
         * characters.
         */
-       int yy_n_chars;
+       yy_size_t yy_n_chars;
 
        /* Whether we "own" the buffer - i.e., we know we created it,
         * and can realloc() it to grow it, and should free() it to
@@ -299,8 +291,8 @@ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
 
 /* yy_hold_char holds the character lost when wkt_yytext is formed. */
 static char yy_hold_char;
-static int yy_n_chars;         /* number of characters read into yy_ch_buf */
-int wkt_yyleng;
+static yy_size_t yy_n_chars;           /* number of characters read into yy_ch_buf */
+yy_size_t wkt_yyleng;
 
 /* Points to current character in buffer. */
 static char *yy_c_buf_p = (char *) 0;
@@ -328,7 +320,7 @@ static void wkt_yy_init_buffer (YY_BUFFER_STATE b,FILE *file  );
 
 YY_BUFFER_STATE wkt_yy_scan_buffer (char *base,yy_size_t size  );
 YY_BUFFER_STATE wkt_yy_scan_string (yyconst char *yy_str  );
-YY_BUFFER_STATE wkt_yy_scan_bytes (yyconst char *bytes,int len  );
+YY_BUFFER_STATE wkt_yy_scan_bytes (yyconst char *bytes,yy_size_t len  );
 
 void *wkt_yyalloc (yy_size_t  );
 void *wkt_yyrealloc (void *,yy_size_t  );
@@ -360,7 +352,7 @@ void wkt_yyfree (void *  );
 
 /* Begin user sect3 */
 
-#define wkt_yywrap(n) 1
+#define wkt_yywrap() 1
 #define YY_SKIP_YYWRAP
 
 typedef unsigned char YY_CHAR;
@@ -682,7 +674,8 @@ static void wkt_lexer_unknown()
 
  
 #define YY_NO_INPUT 1
-#line 686 "lwin_wkt_lex.c"
+/* Suppress the default implementations. */
+#line 679 "lwin_wkt_lex.c"
 
 #define INITIAL 0
 
@@ -721,7 +714,7 @@ FILE *wkt_yyget_out (void );
 
 void wkt_yyset_out  (FILE * out_str  );
 
-int wkt_yyget_leng (void );
+yy_size_t wkt_yyget_leng (void );
 
 char *wkt_yyget_text (void );
 
@@ -761,12 +754,7 @@ static int input (void );
 
 /* Amount of stuff to slurp up with each read. */
 #ifndef YY_READ_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k */
-#define YY_READ_BUF_SIZE 16384
-#else
 #define YY_READ_BUF_SIZE 8192
-#endif /* __ia64__ */
 #endif
 
 /* Copy whatever the last rule matched to the standard output. */
@@ -867,10 +855,10 @@ YY_DECL
        register char *yy_cp, *yy_bp;
        register int yy_act;
     
-#line 65 "lwin_wkt_lex.l"
+#line 67 "lwin_wkt_lex.l"
 
 
-#line 874 "lwin_wkt_lex.c"
+#line 862 "lwin_wkt_lex.c"
 
        if ( !(yy_init) )
                {
@@ -951,7 +939,7 @@ do_action:  /* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 67 "lwin_wkt_lex.l"
+#line 69 "lwin_wkt_lex.l"
 {  
        LWDEBUG(5,"DOUBLE");
        wkt_yylval.doublevalue = atof(wkt_yytext); 
@@ -960,7 +948,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 73 "lwin_wkt_lex.l"
+#line 75 "lwin_wkt_lex.l"
 { 
        LWDEBUG(5,"SRID");
        wkt_yylval.integervalue = wkt_lexer_read_srid(wkt_yytext); 
@@ -969,87 +957,87 @@ YY_RULE_SETUP
        YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 79 "lwin_wkt_lex.l"
+#line 81 "lwin_wkt_lex.l"
 { return COLLECTION_TOK; }
        YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 80 "lwin_wkt_lex.l"
+#line 82 "lwin_wkt_lex.l"
 { return MSURFACE_TOK; }
        YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 81 "lwin_wkt_lex.l"
+#line 83 "lwin_wkt_lex.l"
 { return MPOLYGON_TOK; }
        YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 82 "lwin_wkt_lex.l"
+#line 84 "lwin_wkt_lex.l"
 { return MCURVE_TOK; }
        YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 83 "lwin_wkt_lex.l"
+#line 85 "lwin_wkt_lex.l"
 { return MLINESTRING_TOK; }
        YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 84 "lwin_wkt_lex.l"
+#line 86 "lwin_wkt_lex.l"
 { return MPOINT_TOK; }
        YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 85 "lwin_wkt_lex.l"
+#line 87 "lwin_wkt_lex.l"
 { return CURVEPOLYGON_TOK; }
        YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 86 "lwin_wkt_lex.l"
+#line 88 "lwin_wkt_lex.l"
 { return POLYGON_TOK; }
        YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 87 "lwin_wkt_lex.l"
+#line 89 "lwin_wkt_lex.l"
 { return COMPOUNDCURVE_TOK; }
        YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 88 "lwin_wkt_lex.l"
+#line 90 "lwin_wkt_lex.l"
 { return CIRCULARSTRING_TOK; }
        YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 89 "lwin_wkt_lex.l"
+#line 91 "lwin_wkt_lex.l"
 { return LINESTRING_TOK; }
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 90 "lwin_wkt_lex.l"
+#line 92 "lwin_wkt_lex.l"
 { return POLYHEDRALSURFACE_TOK; }
        YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 91 "lwin_wkt_lex.l"
+#line 93 "lwin_wkt_lex.l"
 { return TRIANGLE_TOK; }
        YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 92 "lwin_wkt_lex.l"
+#line 94 "lwin_wkt_lex.l"
 { return TIN_TOK; }
        YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 93 "lwin_wkt_lex.l"
+#line 95 "lwin_wkt_lex.l"
 { return POINT_TOK; }
        YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 94 "lwin_wkt_lex.l"
+#line 96 "lwin_wkt_lex.l"
 { return EMPTY_TOK; }
        YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 96 "lwin_wkt_lex.l"
+#line 98 "lwin_wkt_lex.l"
 { 
        LWDEBUG(5,"DIMENSIONALITY");
        wkt_yylval.stringvalue = wkt_yytext;
@@ -1058,33 +1046,33 @@ YY_RULE_SETUP
        YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 102 "lwin_wkt_lex.l"
+#line 104 "lwin_wkt_lex.l"
 { LWDEBUG(5,"LBRACKET"); return LBRACKET_TOK; }
        YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 103 "lwin_wkt_lex.l"
+#line 105 "lwin_wkt_lex.l"
 { LWDEBUG(5,"RBRACKET"); return RBRACKET_TOK; }
        YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 104 "lwin_wkt_lex.l"
+#line 106 "lwin_wkt_lex.l"
 { LWDEBUG(5,"COMMA"); return COMMA_TOK; }
        YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 105 "lwin_wkt_lex.l"
+#line 107 "lwin_wkt_lex.l"
 { LWDEBUG(5,"SEMICOLON"); return SEMICOLON_TOK; }
        YY_BREAK
 case 24:
 /* rule 24 can match eol */
 YY_RULE_SETUP
-#line 107 "lwin_wkt_lex.l"
+#line 109 "lwin_wkt_lex.l"
 { /* ignore whitespace */ LWDEBUG(5,"WHITESPACE"); }
        YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 109 "lwin_wkt_lex.l"
+#line 111 "lwin_wkt_lex.l"
 { /* Error out and stop parsing on unknown/unexpected characters */
        LWDEBUG(5,"UNKNOWN"); 
        wkt_lexer_unknown();
@@ -1093,10 +1081,10 @@ YY_RULE_SETUP
        YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 115 "lwin_wkt_lex.l"
+#line 117 "lwin_wkt_lex.l"
 ECHO;
        YY_BREAK
-#line 1100 "lwin_wkt_lex.c"
+#line 1088 "lwin_wkt_lex.c"
 case YY_STATE_EOF(INITIAL):
        yyterminate();
 
@@ -1283,21 +1271,21 @@ static int yy_get_next_buffer (void)
 
        else
                {
-                       int num_to_read =
+                       yy_size_t num_to_read =
                        YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
 
                while ( num_to_read <= 0 )
                        { /* Not enough room in the buffer - grow it. */
 
                        /* just a shorter name for the current buffer */
-                       YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
+                       YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;
 
                        int yy_c_buf_p_offset =
                                (int) ((yy_c_buf_p) - b->yy_ch_buf);
 
                        if ( b->yy_is_our_buffer )
                                {
-                               int new_size = b->yy_buf_size * 2;
+                               yy_size_t new_size = b->yy_buf_size * 2;
 
                                if ( new_size <= 0 )
                                        b->yy_buf_size += b->yy_buf_size / 8;
@@ -1328,7 +1316,7 @@ static int yy_get_next_buffer (void)
 
                /* Read in more data. */
                YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
-                       (yy_n_chars), (size_t) num_to_read );
+                       (yy_n_chars), num_to_read );
 
                YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
                }
@@ -1423,7 +1411,7 @@ static int yy_get_next_buffer (void)
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
        yy_is_jam = (yy_current_state == 171);
 
-       return yy_is_jam ? 0 : yy_current_state;
+               return yy_is_jam ? 0 : yy_current_state;
 }
 
 #ifndef YY_NO_INPUT
@@ -1450,7 +1438,7 @@ static int yy_get_next_buffer (void)
 
                else
                        { /* need more input */
-                       int offset = (yy_c_buf_p) - (yytext_ptr);
+                       yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
                        ++(yy_c_buf_p);
 
                        switch ( yy_get_next_buffer(  ) )
@@ -1722,7 +1710,7 @@ void wkt_yypop_buffer_state (void)
  */
 static void wkt_yyensure_buffer_stack (void)
 {
-       int num_to_alloc;
+       yy_size_t num_to_alloc;
     
        if (!(yy_buffer_stack)) {
 
@@ -1819,7 +1807,7 @@ YY_BUFFER_STATE wkt_yy_scan_string (yyconst char * yystr )
  * 
  * @return the newly allocated buffer state object.
  */
-YY_BUFFER_STATE wkt_yy_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
+YY_BUFFER_STATE wkt_yy_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
 {
        YY_BUFFER_STATE b;
        char *buf;
@@ -1906,7 +1894,7 @@ FILE *wkt_yyget_out  (void)
 /** Get the length of the current token.
  * 
  */
-int wkt_yyget_leng  (void)
+yy_size_t wkt_yyget_leng  (void)
 {
         return wkt_yyleng;
 }
@@ -2030,9 +2018,16 @@ static int yy_flex_strlen (yyconst char * s )
 }
 #endif
 
+#define YYTABLES_NAME "yytables"
+
+#line 117 "lwin_wkt_lex.l"
+
+
+
+
 void *wkt_yyalloc (yy_size_t  size )
 {
-       return (void *) malloc( size );
+       return (void *) lwalloc( size );
 }
 
 void *wkt_yyrealloc  (void * ptr, yy_size_t  size )
@@ -2044,17 +2039,10 @@ void *wkt_yyrealloc  (void * ptr, yy_size_t  size )
         * any pointer type to void*, and deal with argument conversions
         * as though doing an assignment.
         */
-       return (void *) realloc( (char *) ptr, size );
+       return (void *) lwrealloc( (char *) ptr, size );
 }
 
 void wkt_yyfree (void * ptr )
 {
-       free( (char *) ptr );   /* see wkt_yyrealloc() for (char *) cast */
+       lwfree( (char *) ptr ); /* see wkt_yyrealloc() for (char *) cast */
 }
-
-#define YYTABLES_NAME "yytables"
-
-#line 115 "lwin_wkt_lex.l"
-
-
-
index f4df22976c5ef601896b188d38f771583e92c6f3..188b5a02208cf77432eefc2a00c17faf05db430a 100644 (file)
@@ -61,6 +61,8 @@ static void wkt_lexer_unknown()
 %option never-interactive
 %option outfile="lwin_wkt_lex.c"
 %option noyywrap
+/* Suppress the default implementations. */
+%option noyyalloc noyyrealloc noyyfree
 
 %%
 
@@ -113,3 +115,18 @@ Z|M|ZM {
        }
 
 %%
+
+void *wkt_yyalloc (yy_size_t  size )
+{
+       return (void *) lwalloc( size );
+}
+
+void *wkt_yyrealloc  (void * ptr, yy_size_t  size )
+{
+       return (void *) lwrealloc( (char *) ptr, size );
+}
+
+void wkt_yyfree (void * ptr )
+{
+       lwfree( (char *) ptr ); /* see wkt_yyrealloc() for (char *) cast */
+}
\ No newline at end of file
index b1815676ee1f521d501fe1b4e0fb8ce41d8d8ea3..199eceee27b9ff9cbc91bb968a948bf99c17fbf2 100644 (file)
@@ -160,11 +160,13 @@ int lwgeom_parse_wkt(LWGEOM_PARSER_RESULT *parser_result, char *wktstr, int pars
                
                /* Copy the global values into the return pointer */
                *parser_result = global_parser_result;
+                wkt_yylex_destroy();
                return LW_FAILURE;
        }
        
        /* Copy the global value into the return pointer */
        *parser_result = global_parser_result;
+        wkt_yylex_destroy();
        return LW_SUCCESS;
 }
 
@@ -172,7 +174,7 @@ int lwgeom_parse_wkt(LWGEOM_PARSER_RESULT *parser_result, char *wktstr, int pars
 
 
 
-#line 176 "lwin_wkt_parse.c" /* yacc.c:339  */
+#line 178 "lwin_wkt_parse.c" /* yacc.c:339  */
 
 # ifndef YY_NULLPTR
 #  if defined __cplusplus && 201103L <= __cplusplus
@@ -262,7 +264,7 @@ extern int wkt_yydebug;
 
 union YYSTYPE
 {
-#line 106 "lwin_wkt_parse.y" /* yacc.c:355  */
+#line 108 "lwin_wkt_parse.y" /* yacc.c:355  */
 
        int integervalue;
        double doublevalue;
@@ -271,7 +273,7 @@ union YYSTYPE
        POINT coordinatevalue;
        POINTARRAY *ptarrayvalue;
 
-#line 275 "lwin_wkt_parse.c" /* yacc.c:355  */
+#line 277 "lwin_wkt_parse.c" /* yacc.c:355  */
 };
 
 typedef union YYSTYPE YYSTYPE;
@@ -302,7 +304,7 @@ int wkt_yyparse (void);
 
 /* Copy the second part of user declarations.  */
 
-#line 306 "lwin_wkt_parse.c" /* yacc.c:358  */
+#line 308 "lwin_wkt_parse.c" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -604,20 +606,20 @@ static const yytype_uint8 yytranslate[] =
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   210,   210,   212,   216,   217,   218,   219,   220,   221,
-     222,   223,   224,   225,   226,   227,   228,   229,   230,   233,
-     235,   237,   239,   243,   245,   249,   251,   253,   255,   259,
-     261,   263,   265,   267,   269,   273,   275,   277,   279,   283,
-     285,   287,   289,   293,   295,   297,   299,   303,   305,   309,
-     311,   315,   317,   319,   321,   325,   327,   331,   334,   336,
-     338,   340,   344,   346,   350,   351,   352,   353,   356,   358,
-     362,   364,   368,   371,   374,   376,   378,   380,   384,   386,
-     388,   390,   392,   394,   398,   400,   402,   404,   408,   410,
-     412,   414,   416,   418,   420,   422,   426,   428,   430,   432,
-     436,   438,   442,   444,   446,   448,   452,   454,   456,   458,
-     462,   464,   468,   470,   474,   476,   478,   480,   484,   488,
-     490,   492,   494,   498,   500,   504,   506,   508,   512,   514,
-     516,   518,   522,   524,   528,   530,   532
+       0,   212,   212,   214,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   235,
+     237,   239,   241,   245,   247,   251,   253,   255,   257,   261,
+     263,   265,   267,   269,   271,   275,   277,   279,   281,   285,
+     287,   289,   291,   295,   297,   299,   301,   305,   307,   311,
+     313,   317,   319,   321,   323,   327,   329,   333,   336,   338,
+     340,   342,   346,   348,   352,   353,   354,   355,   358,   360,
+     364,   366,   370,   373,   376,   378,   380,   382,   386,   388,
+     390,   392,   394,   396,   400,   402,   404,   406,   410,   412,
+     414,   416,   418,   420,   422,   424,   428,   430,   432,   434,
+     438,   440,   444,   446,   448,   450,   454,   456,   458,   460,
+     464,   466,   470,   472,   476,   478,   480,   482,   486,   490,
+     492,   494,   496,   500,   502,   506,   508,   510,   514,   516,
+     518,   520,   524,   526,   530,   532,   534
 };
 #endif
 
@@ -1383,219 +1385,219 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
   switch (yytype)
     {
           case 28: /* geometry_no_srid  */
-#line 188 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 190 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1389 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1391 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 29: /* geometrycollection  */
-#line 189 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 191 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1395 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1397 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 31: /* multisurface  */
-#line 196 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 198 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1401 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1403 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 32: /* surface_list  */
-#line 175 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 177 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1407 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1409 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 33: /* tin  */
-#line 203 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 205 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1413 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1415 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 34: /* polyhedralsurface  */
-#line 202 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 204 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1419 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1421 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 35: /* multipolygon  */
-#line 195 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 197 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1425 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1427 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 36: /* polygon_list  */
-#line 176 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 178 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1431 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1433 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 37: /* patch_list  */
-#line 177 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 179 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1437 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1439 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 38: /* polygon  */
-#line 199 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 201 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1443 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1445 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 39: /* polygon_untagged  */
-#line 201 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 203 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1449 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1451 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 40: /* patch  */
-#line 200 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 202 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1455 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1457 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 41: /* curvepolygon  */
-#line 186 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 188 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1461 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1463 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 42: /* curvering_list  */
-#line 173 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 175 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1467 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1469 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 43: /* curvering  */
-#line 187 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 189 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1473 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1475 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 44: /* patchring_list  */
-#line 183 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 185 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1479 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1481 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 45: /* ring_list  */
-#line 182 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 184 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1485 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1487 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 46: /* patchring  */
-#line 172 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 174 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { ptarray_free(((*yyvaluep).ptarrayvalue)); }
-#line 1491 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1493 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 47: /* ring  */
-#line 171 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 173 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { ptarray_free(((*yyvaluep).ptarrayvalue)); }
-#line 1497 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1499 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 48: /* compoundcurve  */
-#line 185 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 187 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1503 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1505 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 49: /* compound_list  */
-#line 181 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 183 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1509 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1511 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 50: /* multicurve  */
-#line 192 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 194 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1515 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1517 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 51: /* curve_list  */
-#line 180 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 182 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1521 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1523 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 52: /* multilinestring  */
-#line 193 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 195 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1527 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1529 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 53: /* linestring_list  */
-#line 179 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 181 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1533 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1535 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 54: /* circularstring  */
-#line 184 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 186 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1539 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1541 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 55: /* linestring  */
-#line 190 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 192 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1545 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1547 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 56: /* linestring_untagged  */
-#line 191 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 193 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1551 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1553 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 57: /* triangle_list  */
-#line 174 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 176 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1557 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1559 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 58: /* triangle  */
-#line 204 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 206 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1563 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1565 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 59: /* triangle_untagged  */
-#line 205 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 207 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1569 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1571 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 60: /* multipoint  */
-#line 194 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 196 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1575 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1577 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 61: /* point_list  */
-#line 178 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 180 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1581 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1583 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 62: /* point_untagged  */
-#line 198 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 200 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1587 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1589 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 63: /* point  */
-#line 197 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 199 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { lwgeom_free(((*yyvaluep).geometryvalue)); }
-#line 1593 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1595 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
     case 64: /* ptarray  */
-#line 170 "lwin_wkt_parse.y" /* yacc.c:1257  */
+#line 172 "lwin_wkt_parse.y" /* yacc.c:1257  */
       { ptarray_free(((*yyvaluep).ptarrayvalue)); }
-#line 1599 "lwin_wkt_parse.c" /* yacc.c:1257  */
+#line 1601 "lwin_wkt_parse.c" /* yacc.c:1257  */
         break;
 
 
@@ -1881,817 +1883,817 @@ yyreduce:
   switch (yyn)
     {
         case 2:
-#line 211 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 213 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { wkt_parser_geometry_new((yyvsp[0].geometryvalue), SRID_UNKNOWN); WKT_ERROR(); }
-#line 1887 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 1889 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 3:
-#line 213 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 215 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { wkt_parser_geometry_new((yyvsp[0].geometryvalue), (yyvsp[-2].integervalue)); WKT_ERROR(); }
-#line 1893 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 1895 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 4:
-#line 216 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 218 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); }
-#line 1899 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 1901 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 5:
-#line 217 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 219 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); }
-#line 1905 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 1907 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 6:
-#line 218 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 220 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); }
-#line 1911 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 1913 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 7:
-#line 219 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 221 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); }
-#line 1917 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 1919 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 8:
-#line 220 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 222 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); }
-#line 1923 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 1925 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 9:
-#line 221 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 223 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); }
-#line 1929 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 1931 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 10:
-#line 222 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 224 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); }
-#line 1935 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 1937 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 11:
-#line 223 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 225 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); }
-#line 1941 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 1943 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 12:
-#line 224 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 226 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); }
-#line 1947 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 1949 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 13:
-#line 225 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 227 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); }
-#line 1953 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 1955 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 14:
-#line 226 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 228 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); }
-#line 1959 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 1961 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 15:
-#line 227 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 229 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); }
-#line 1965 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 1967 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 16:
-#line 228 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 230 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); }
-#line 1971 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 1973 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 17:
-#line 229 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 231 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); }
-#line 1977 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 1979 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 18:
-#line 230 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 232 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); }
-#line 1983 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 1985 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 19:
-#line 234 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 236 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(COLLECTIONTYPE, (yyvsp[-1].geometryvalue), NULL); WKT_ERROR(); }
-#line 1989 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 1991 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 20:
-#line 236 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 238 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(COLLECTIONTYPE, (yyvsp[-1].geometryvalue), (yyvsp[-3].stringvalue)); WKT_ERROR(); }
-#line 1995 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 1997 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 21:
-#line 238 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 240 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(COLLECTIONTYPE, NULL, (yyvsp[-1].stringvalue)); WKT_ERROR(); }
-#line 2001 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2003 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 22:
-#line 240 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 242 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(COLLECTIONTYPE, NULL, NULL); WKT_ERROR(); }
-#line 2007 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2009 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 23:
-#line 244 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 246 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2013 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2015 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 24:
-#line 246 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 248 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2019 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2021 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 25:
-#line 250 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 252 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTISURFACETYPE, (yyvsp[-1].geometryvalue), NULL); WKT_ERROR(); }
-#line 2025 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2027 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 26:
-#line 252 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 254 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTISURFACETYPE, (yyvsp[-1].geometryvalue), (yyvsp[-3].stringvalue)); WKT_ERROR(); }
-#line 2031 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2033 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 27:
-#line 254 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 256 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTISURFACETYPE, NULL, (yyvsp[-1].stringvalue)); WKT_ERROR(); }
-#line 2037 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2039 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 28:
-#line 256 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 258 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTISURFACETYPE, NULL, NULL); WKT_ERROR(); }
-#line 2043 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2045 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 29:
-#line 260 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 262 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2049 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2051 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 30:
-#line 262 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 264 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2055 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2057 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 31:
-#line 264 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 266 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2061 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2063 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 32:
-#line 266 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 268 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2067 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2069 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 33:
-#line 268 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 270 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2073 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2075 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 34:
-#line 270 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 272 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2079 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2081 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 35:
-#line 274 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 276 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(TINTYPE, (yyvsp[-1].geometryvalue), NULL); WKT_ERROR(); }
-#line 2085 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2087 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 36:
-#line 276 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 278 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(TINTYPE, (yyvsp[-1].geometryvalue), (yyvsp[-3].stringvalue)); WKT_ERROR(); }
-#line 2091 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2093 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 37:
-#line 278 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 280 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(TINTYPE, NULL, (yyvsp[-1].stringvalue)); WKT_ERROR(); }
-#line 2097 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2099 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 38:
-#line 280 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 282 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(TINTYPE, NULL, NULL); WKT_ERROR(); }
-#line 2103 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2105 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 39:
-#line 284 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 286 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(POLYHEDRALSURFACETYPE, (yyvsp[-1].geometryvalue), NULL); WKT_ERROR(); }
-#line 2109 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2111 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 40:
-#line 286 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 288 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(POLYHEDRALSURFACETYPE, (yyvsp[-1].geometryvalue), (yyvsp[-3].stringvalue)); WKT_ERROR(); }
-#line 2115 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2117 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 41:
-#line 288 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 290 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(POLYHEDRALSURFACETYPE, NULL, (yyvsp[-1].stringvalue)); WKT_ERROR(); }
-#line 2121 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2123 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 42:
-#line 290 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 292 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(POLYHEDRALSURFACETYPE, NULL, NULL); WKT_ERROR(); }
-#line 2127 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2129 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 43:
-#line 294 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 296 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOLYGONTYPE, (yyvsp[-1].geometryvalue), NULL); WKT_ERROR(); }
-#line 2133 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2135 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 44:
-#line 296 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 298 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOLYGONTYPE, (yyvsp[-1].geometryvalue), (yyvsp[-3].stringvalue)); WKT_ERROR(); }
-#line 2139 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2141 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 45:
-#line 298 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 300 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOLYGONTYPE, NULL, (yyvsp[-1].stringvalue)); WKT_ERROR(); }
-#line 2145 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2147 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 46:
-#line 300 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 302 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOLYGONTYPE, NULL, NULL); WKT_ERROR(); }
-#line 2151 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2153 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 47:
-#line 304 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 306 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2157 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2159 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 48:
-#line 306 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 308 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2163 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2165 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 49:
-#line 310 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 312 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2169 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2171 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 50:
-#line 312 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 314 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2175 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2177 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 51:
-#line 316 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 318 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_polygon_finalize((yyvsp[-1].geometryvalue), NULL); WKT_ERROR(); }
-#line 2181 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2183 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 52:
-#line 318 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 320 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_polygon_finalize((yyvsp[-1].geometryvalue), (yyvsp[-3].stringvalue)); WKT_ERROR(); }
-#line 2187 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2189 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 53:
-#line 320 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 322 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_polygon_finalize(NULL, (yyvsp[-1].stringvalue)); WKT_ERROR(); }
-#line 2193 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2195 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 54:
-#line 322 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 324 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_polygon_finalize(NULL, NULL); WKT_ERROR(); }
-#line 2199 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2201 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 55:
-#line 326 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 328 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = (yyvsp[-1].geometryvalue); }
-#line 2205 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2207 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 56:
-#line 328 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 330 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_polygon_finalize(NULL, NULL); WKT_ERROR(); }
-#line 2211 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2213 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 57:
-#line 331 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 333 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = (yyvsp[-1].geometryvalue); }
-#line 2217 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2219 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 58:
-#line 335 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 337 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_curvepolygon_finalize((yyvsp[-1].geometryvalue), NULL); WKT_ERROR(); }
-#line 2223 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2225 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 59:
-#line 337 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 339 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_curvepolygon_finalize((yyvsp[-1].geometryvalue), (yyvsp[-3].stringvalue)); WKT_ERROR(); }
-#line 2229 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2231 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 60:
-#line 339 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 341 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_curvepolygon_finalize(NULL, (yyvsp[-1].stringvalue)); WKT_ERROR(); }
-#line 2235 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2237 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 61:
-#line 341 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 343 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_curvepolygon_finalize(NULL, NULL); WKT_ERROR(); }
-#line 2241 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2243 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 62:
-#line 345 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 347 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_curvepolygon_add_ring((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2247 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2249 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 63:
-#line 347 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 349 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_curvepolygon_new((yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2253 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2255 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 64:
-#line 350 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 352 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); }
-#line 2259 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2261 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 65:
-#line 351 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 353 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); }
-#line 2265 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2267 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 66:
-#line 352 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 354 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); }
-#line 2271 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2273 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 67:
-#line 353 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 355 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); }
-#line 2277 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2279 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 68:
-#line 357 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 359 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_polygon_add_ring((yyvsp[-2].geometryvalue),(yyvsp[0].ptarrayvalue),'Z'); WKT_ERROR(); }
-#line 2283 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2285 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 69:
-#line 359 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 361 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_polygon_new((yyvsp[0].ptarrayvalue),'Z'); WKT_ERROR(); }
-#line 2289 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2291 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 70:
-#line 363 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 365 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_polygon_add_ring((yyvsp[-2].geometryvalue),(yyvsp[0].ptarrayvalue),'2'); WKT_ERROR(); }
-#line 2295 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2297 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 71:
-#line 365 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 367 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_polygon_new((yyvsp[0].ptarrayvalue),'2'); WKT_ERROR(); }
-#line 2301 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2303 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 72:
-#line 368 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 370 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.ptarrayvalue) = (yyvsp[-1].ptarrayvalue); }
-#line 2307 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2309 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 73:
-#line 371 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 373 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.ptarrayvalue) = (yyvsp[-1].ptarrayvalue); }
-#line 2313 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2315 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 74:
-#line 375 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 377 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(COMPOUNDTYPE, (yyvsp[-1].geometryvalue), NULL); WKT_ERROR(); }
-#line 2319 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2321 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 75:
-#line 377 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 379 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(COMPOUNDTYPE, (yyvsp[-1].geometryvalue), (yyvsp[-3].stringvalue)); WKT_ERROR(); }
-#line 2325 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2327 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 76:
-#line 379 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 381 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(COMPOUNDTYPE, NULL, (yyvsp[-1].stringvalue)); WKT_ERROR(); }
-#line 2331 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2333 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 77:
-#line 381 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 383 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(COMPOUNDTYPE, NULL, NULL); WKT_ERROR(); }
-#line 2337 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2339 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 78:
-#line 385 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 387 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_compound_add_geom((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2343 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2345 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 79:
-#line 387 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 389 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_compound_add_geom((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2349 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2351 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 80:
-#line 389 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 391 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_compound_add_geom((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2355 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2357 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 81:
-#line 391 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 393 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_compound_new((yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2361 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2363 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 82:
-#line 393 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 395 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_compound_new((yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2367 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2369 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 83:
-#line 395 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 397 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_compound_new((yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2373 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2375 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 84:
-#line 399 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 401 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTICURVETYPE, (yyvsp[-1].geometryvalue), NULL); WKT_ERROR(); }
-#line 2379 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2381 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 85:
-#line 401 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 403 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTICURVETYPE, (yyvsp[-1].geometryvalue), (yyvsp[-3].stringvalue)); WKT_ERROR(); }
-#line 2385 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2387 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 86:
-#line 403 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 405 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTICURVETYPE, NULL, (yyvsp[-1].stringvalue)); WKT_ERROR(); }
-#line 2391 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2393 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 87:
-#line 405 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 407 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTICURVETYPE, NULL, NULL); WKT_ERROR(); }
-#line 2397 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2399 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 88:
-#line 409 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 411 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2403 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2405 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 89:
-#line 411 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 413 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2409 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2411 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 90:
-#line 413 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 415 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2415 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2417 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 91:
-#line 415 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 417 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2421 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2423 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 92:
-#line 417 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 419 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2427 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2429 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 93:
-#line 419 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 421 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2433 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2435 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 94:
-#line 421 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 423 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2439 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2441 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 95:
-#line 423 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 425 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2445 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2447 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 96:
-#line 427 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 429 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTILINETYPE, (yyvsp[-1].geometryvalue), NULL); WKT_ERROR(); }
-#line 2451 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2453 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 97:
-#line 429 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 431 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTILINETYPE, (yyvsp[-1].geometryvalue), (yyvsp[-3].stringvalue)); WKT_ERROR(); }
-#line 2457 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2459 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 98:
-#line 431 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 433 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTILINETYPE, NULL, (yyvsp[-1].stringvalue)); WKT_ERROR(); }
-#line 2463 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2465 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 99:
-#line 433 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 435 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTILINETYPE, NULL, NULL); WKT_ERROR(); }
-#line 2469 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2471 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 100:
-#line 437 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 439 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2475 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2477 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 101:
-#line 439 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 441 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2481 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2483 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 102:
-#line 443 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 445 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_circularstring_new((yyvsp[-1].ptarrayvalue), NULL); WKT_ERROR(); }
-#line 2487 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2489 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 103:
-#line 445 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 447 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_circularstring_new((yyvsp[-1].ptarrayvalue), (yyvsp[-3].stringvalue)); WKT_ERROR(); }
-#line 2493 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2495 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 104:
-#line 447 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 449 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_circularstring_new(NULL, (yyvsp[-1].stringvalue)); WKT_ERROR(); }
-#line 2499 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2501 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 105:
-#line 449 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 451 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_circularstring_new(NULL, NULL); WKT_ERROR(); }
-#line 2505 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2507 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 106:
-#line 453 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 455 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_linestring_new((yyvsp[-1].ptarrayvalue), NULL); WKT_ERROR(); }
-#line 2511 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2513 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 107:
-#line 455 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 457 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_linestring_new((yyvsp[-1].ptarrayvalue), (yyvsp[-3].stringvalue)); WKT_ERROR(); }
-#line 2517 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2519 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 108:
-#line 457 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 459 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_linestring_new(NULL, (yyvsp[-1].stringvalue)); WKT_ERROR(); }
-#line 2523 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2525 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 109:
-#line 459 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 461 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_linestring_new(NULL, NULL); WKT_ERROR(); }
-#line 2529 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2531 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 110:
-#line 463 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 465 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_linestring_new((yyvsp[-1].ptarrayvalue), NULL); WKT_ERROR(); }
-#line 2535 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2537 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 111:
-#line 465 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 467 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_linestring_new(NULL, NULL); WKT_ERROR(); }
-#line 2541 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2543 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 112:
-#line 469 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 471 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2547 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2549 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 113:
-#line 471 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 473 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2553 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2555 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 114:
-#line 475 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 477 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_triangle_new((yyvsp[-2].ptarrayvalue), NULL); WKT_ERROR(); }
-#line 2559 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2561 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 115:
-#line 477 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 479 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_triangle_new((yyvsp[-2].ptarrayvalue), (yyvsp[-5].stringvalue)); WKT_ERROR(); }
-#line 2565 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2567 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 116:
-#line 479 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 481 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_triangle_new(NULL, (yyvsp[-1].stringvalue)); WKT_ERROR(); }
-#line 2571 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2573 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 117:
-#line 481 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 483 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_triangle_new(NULL, NULL); WKT_ERROR(); }
-#line 2577 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2579 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 118:
-#line 485 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 487 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_triangle_new((yyvsp[-2].ptarrayvalue), NULL); WKT_ERROR(); }
-#line 2583 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2585 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 119:
-#line 489 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 491 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOINTTYPE, (yyvsp[-1].geometryvalue), NULL); WKT_ERROR(); }
-#line 2589 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2591 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 120:
-#line 491 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 493 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOINTTYPE, (yyvsp[-1].geometryvalue), (yyvsp[-3].stringvalue)); WKT_ERROR(); }
-#line 2595 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2597 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 121:
-#line 493 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 495 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOINTTYPE, NULL, (yyvsp[-1].stringvalue)); WKT_ERROR(); }
-#line 2601 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2603 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 122:
-#line 495 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 497 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOINTTYPE, NULL, NULL); WKT_ERROR(); }
-#line 2607 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2609 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 123:
-#line 499 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 501 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2613 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2615 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 124:
-#line 501 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 503 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[0].geometryvalue)); WKT_ERROR(); }
-#line 2619 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2621 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 125:
-#line 505 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 507 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_point_new(wkt_parser_ptarray_new((yyvsp[0].coordinatevalue)),NULL); WKT_ERROR(); }
-#line 2625 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2627 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 126:
-#line 507 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 509 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_point_new(wkt_parser_ptarray_new((yyvsp[-1].coordinatevalue)),NULL); WKT_ERROR(); }
-#line 2631 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2633 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 127:
-#line 509 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 511 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_point_new(NULL, NULL); WKT_ERROR(); }
-#line 2637 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2639 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 128:
-#line 513 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 515 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_point_new((yyvsp[-1].ptarrayvalue), NULL); WKT_ERROR(); }
-#line 2643 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2645 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 129:
-#line 515 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 517 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_point_new((yyvsp[-1].ptarrayvalue), (yyvsp[-3].stringvalue)); WKT_ERROR(); }
-#line 2649 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2651 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 130:
-#line 517 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 519 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_point_new(NULL, (yyvsp[-1].stringvalue)); WKT_ERROR(); }
-#line 2655 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2657 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 131:
-#line 519 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 521 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.geometryvalue) = wkt_parser_point_new(NULL,NULL); WKT_ERROR(); }
-#line 2661 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2663 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 132:
-#line 523 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 525 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.ptarrayvalue) = wkt_parser_ptarray_add_coord((yyvsp[-2].ptarrayvalue), (yyvsp[0].coordinatevalue)); WKT_ERROR(); }
-#line 2667 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2669 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 133:
-#line 525 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 527 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.ptarrayvalue) = wkt_parser_ptarray_new((yyvsp[0].coordinatevalue)); WKT_ERROR(); }
-#line 2673 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2675 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 134:
-#line 529 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 531 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.coordinatevalue) = wkt_parser_coord_2((yyvsp[-1].doublevalue), (yyvsp[0].doublevalue)); WKT_ERROR(); }
-#line 2679 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2681 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 135:
-#line 531 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 533 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.coordinatevalue) = wkt_parser_coord_3((yyvsp[-2].doublevalue), (yyvsp[-1].doublevalue), (yyvsp[0].doublevalue)); WKT_ERROR(); }
-#line 2685 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2687 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
   case 136:
-#line 533 "lwin_wkt_parse.y" /* yacc.c:1646  */
+#line 535 "lwin_wkt_parse.y" /* yacc.c:1646  */
     { (yyval.coordinatevalue) = wkt_parser_coord_4((yyvsp[-3].doublevalue), (yyvsp[-2].doublevalue), (yyvsp[-1].doublevalue), (yyvsp[0].doublevalue)); WKT_ERROR(); }
-#line 2691 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2693 "lwin_wkt_parse.c" /* yacc.c:1646  */
     break;
 
 
-#line 2695 "lwin_wkt_parse.c" /* yacc.c:1646  */
+#line 2697 "lwin_wkt_parse.c" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -2926,6 +2928,6 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 535 "lwin_wkt_parse.y" /* yacc.c:1906  */
+#line 537 "lwin_wkt_parse.y" /* yacc.c:1906  */
 
 
index 4a001390a935ad20d72cde3d3340b40be512c88a..acb25607f753108799c931c68be06ee68342fd19 100644 (file)
@@ -100,7 +100,7 @@ extern int wkt_yydebug;
 
 union YYSTYPE
 {
-#line 106 "lwin_wkt_parse.y" /* yacc.c:1909  */
+#line 108 "lwin_wkt_parse.y" /* yacc.c:1909  */
 
        int integervalue;
        double doublevalue;
index c03bbd56d79c6e3e7bf86045a4feb894dbf86c51..1ddb06c29d1e87ff463a52453d2e734442a1b388 100644 (file)
@@ -86,11 +86,13 @@ int lwgeom_parse_wkt(LWGEOM_PARSER_RESULT *parser_result, char *wktstr, int pars
                
                /* Copy the global values into the return pointer */
                *parser_result = global_parser_result;
+                wkt_yylex_destroy();
                return LW_FAILURE;
        }
        
        /* Copy the global value into the return pointer */
        *parser_result = global_parser_result;
+        wkt_yylex_destroy();
        return LW_SUCCESS;
 }