From 92902eb87976914994b18cf46eadb9344af6a6d3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Ra=C3=BAl=20Mar=C3=ADn=20Rodr=C3=ADguez?= Date: Thu, 10 Oct 2019 13:01:09 +0000 Subject: [PATCH] Fix leak in WKT collection parser References #4537 git-svn-id: http://svn.osgeo.org/postgis/trunk@17900 b70326c6-7e19-0410-871a-916f4a2858ee --- NEWS | 1 + liblwgeom/cunit/cu_in_wkt.c | 14 +- liblwgeom/lwin_wkt_parse.c | 858 ++++++++++++++++++------------------ liblwgeom/lwin_wkt_parse.h | 12 +- liblwgeom/lwin_wkt_parse.y | 6 +- 5 files changed, 456 insertions(+), 435 deletions(-) diff --git a/NEWS b/NEWS index 2a5396d7a..fdca48380 100644 --- a/NEWS +++ b/NEWS @@ -9,6 +9,7 @@ Additional performance enhancements if running GEOS 3.8+ * Major highlights * - #4534, Fix leak in lwcurvepoly_from_wkb_state (Raúl Marín) - #4536, Fix leak in lwcollection_from_wkb_state (Raúl Marín) + - #4537, Fix leak in WKT collection parser (Raúl Marín) PostGIS 3.0.0rc1 2019/10/08 diff --git a/liblwgeom/cunit/cu_in_wkt.c b/liblwgeom/cunit/cu_in_wkt.c index d9996ac4d..04240613f 100644 --- a/liblwgeom/cunit/cu_in_wkt.c +++ b/liblwgeom/cunit/cu_in_wkt.c @@ -57,6 +57,7 @@ static char* cu_wkt_in(char *wkt, uint8_t variant) if (p.errcode) { CU_ASSERT_EQUAL(rv, LW_FAILURE); + CU_ASSERT(!p.geom); return strdup(p.message); } CU_ASSERT_EQUAL(rv, LW_SUCCESS); @@ -361,7 +362,9 @@ static void test_wkt_double(void) wkt = "LINESTRING(1.1.1, 2.2.2)"; lwgeom_parser_result_init(&p); rv = lwgeom_parse_wkt(&p, wkt, LW_PARSER_CHECK_ALL); - CU_ASSERT_EQUAL( rv, LW_FAILURE ); + CU_ASSERT( LW_FAILURE == rv ); + CU_ASSERT( p.errcode ); + CU_ASSERT( ! p.geom ); lwgeom_parser_result_free(&p); wkt = "LINESTRING(1.1 .1, 2.2 .2)"; @@ -389,6 +392,14 @@ static void test_wkt_double(void) lwgeom_parser_result_free(&p); } +static void test_wkt_leak(void) +{ + char *wkt = "TINEMPTY,"; + char *err = cu_wkt_in(wkt, WKT_EXTENDED); + CU_ASSERT_STRING_EQUAL(err, "parse error - invalid geometry"); + lwfree(err); +} + /* ** Used by test harness to register the tests in this file. */ @@ -412,4 +423,5 @@ void wkt_in_suite_setup(void) PG_ADD_TEST(suite, test_wkt_in_polyhedralsurface); PG_ADD_TEST(suite, test_wkt_in_errlocation); PG_ADD_TEST(suite, test_wkt_double); + PG_ADD_TEST(suite, test_wkt_leak); } diff --git a/liblwgeom/lwin_wkt_parse.c b/liblwgeom/lwin_wkt_parse.c index 4241e2986..7d89447b0 100644 --- a/liblwgeom/lwin_wkt_parse.c +++ b/liblwgeom/lwin_wkt_parse.c @@ -1,8 +1,9 @@ -/* A Bison parser, made by GNU Bison 3.2.2. */ +/* A Bison parser, made by GNU Bison 3.4. */ /* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 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 @@ -47,7 +48,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "3.2.2" +#define YYBISON_VERSION "3.4" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -74,7 +75,7 @@ #define yylloc wkt_yylloc /* First part of user prologue. */ -#line 1 "lwin_wkt_parse.y" /* yacc.c:338 */ +#line 1 "lwin_wkt_parse.y" /* WKT Parser */ @@ -155,11 +156,7 @@ int lwgeom_parse_wkt(LWGEOM_PARSER_RESULT *parser_result, char *wktstr, int pars global_parser_result.message = parser_error_messages[PARSER_ERROR_OTHER]; global_parser_result.errlocation = wkt_yylloc.last_column; } - - /* Got a completed object parsed, but errored out after... */ - /* Due to junk after the valid WKT, eg: "POINT(1 1) foobar" */ - /* https://trac.osgeo.org/postgis/ticket/4273 */ - if ( global_parser_result.errcode && ! parse_rv ) + else if (global_parser_result.geom) { lwgeom_free(global_parser_result.geom); global_parser_result.geom = NULL; @@ -186,7 +183,8 @@ int lwgeom_parse_wkt(LWGEOM_PARSER_RESULT *parser_result, char *wktstr, int pars -#line 190 "lwin_wkt_parse.c" /* yacc.c:338 */ +#line 187 "lwin_wkt_parse.c" + # ifndef YY_NULLPTR # if defined __cplusplus # if 201103L <= __cplusplus @@ -207,8 +205,8 @@ int lwgeom_parse_wkt(LWGEOM_PARSER_RESULT *parser_result, char *wktstr, int pars # define YYERROR_VERBOSE 1 #endif -/* In a future release of Bison, this section will be replaced - by #include "lwin_wkt_parse.h". */ +/* Use api.header.include to #include this header + instead of duplicating it here. */ #ifndef YY_WKT_YY_LWIN_WKT_PARSE_H_INCLUDED # define YY_WKT_YY_LWIN_WKT_PARSE_H_INCLUDED /* Debug traces. */ @@ -276,10 +274,9 @@ extern int wkt_yydebug; /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED - union YYSTYPE { -#line 116 "lwin_wkt_parse.y" /* yacc.c:353 */ +#line 112 "lwin_wkt_parse.y" int integervalue; double doublevalue; @@ -288,9 +285,9 @@ union YYSTYPE POINT coordinatevalue; POINTARRAY *ptarrayvalue; -#line 292 "lwin_wkt_parse.c" /* yacc.c:353 */ -}; +#line 289 "lwin_wkt_parse.c" +}; typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 @@ -419,6 +416,8 @@ typedef short yytype_int16; #endif +#define YY_ASSERT(E) ((void) (0 && (E))) + #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ @@ -563,16 +562,16 @@ union yyalloc /* YYNSTATES -- Number of states. */ #define YYNSTATES 264 -/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned - by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 280 +/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM + as returned by yylex, with out-of-bounds checking. */ #define YYTRANSLATE(YYX) \ ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM - as returned by yylex, without out-of-bounds checking. */ + as returned by yylex. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -610,20 +609,20 @@ static const yytype_uint8 yytranslate[] = /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 220, 220, 222, 226, 227, 228, 229, 230, 231, - 232, 233, 234, 235, 236, 237, 238, 239, 240, 243, - 245, 247, 249, 253, 255, 259, 261, 263, 265, 269, - 271, 273, 275, 277, 279, 283, 285, 287, 289, 293, - 295, 297, 299, 303, 305, 307, 309, 313, 315, 319, - 321, 325, 327, 329, 331, 335, 337, 341, 344, 346, - 348, 350, 354, 356, 360, 361, 362, 363, 366, 368, - 372, 374, 378, 381, 384, 386, 388, 390, 394, 396, - 398, 400, 402, 404, 408, 410, 412, 414, 418, 420, - 422, 424, 426, 428, 430, 432, 436, 438, 440, 442, - 446, 448, 452, 454, 456, 458, 462, 464, 466, 468, - 472, 474, 478, 480, 484, 486, 488, 490, 494, 498, - 500, 502, 504, 508, 510, 514, 516, 518, 522, 524, - 526, 528, 532, 534, 538, 540, 542 + 0, 216, 216, 218, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 239, + 241, 243, 245, 249, 251, 255, 257, 259, 261, 265, + 267, 269, 271, 273, 275, 279, 281, 283, 285, 289, + 291, 293, 295, 299, 301, 303, 305, 309, 311, 315, + 317, 321, 323, 325, 327, 331, 333, 337, 340, 342, + 344, 346, 350, 352, 356, 357, 358, 359, 362, 364, + 368, 370, 374, 377, 380, 382, 384, 386, 390, 392, + 394, 396, 398, 400, 404, 406, 408, 410, 414, 416, + 418, 420, 422, 424, 426, 428, 432, 434, 436, 438, + 442, 444, 448, 450, 452, 454, 458, 460, 462, 464, + 468, 470, 474, 476, 480, 482, 484, 486, 490, 494, + 496, 498, 500, 504, 506, 510, 512, 514, 518, 520, + 522, 524, 528, 530, 534, 536, 538 }; #endif @@ -912,22 +911,22 @@ static const yytype_uint8 yyr2[] = #define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (yylen); \ - yystate = *yyssp; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (0) +#define YYBACKUP(Token, Value) \ + do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ + while (0) /* Error token number */ #define YYTERROR 1 @@ -1110,7 +1109,7 @@ yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, YYLTYPE *yylsp, int yyrule YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yystos[yyssp[yyi + 1 - yynrhs]], - &(yyvsp[(yyi + 1) - (yynrhs)]) + &yyvsp[(yyi + 1) - (yynrhs)] , &(yylsp[(yyi + 1) - (yynrhs)]) ); YYFPRINTF (stderr, "\n"); } @@ -1214,7 +1213,10 @@ yytnamerr (char *yyres, const char *yystr) case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; - /* Fall through. */ + else + goto append; + + append: default: if (yyres) yyres[yyn] = *yyp; @@ -1310,10 +1312,10 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, yyarg[yycount++] = yytname[yyx]; { YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); - if (! (yysize <= yysize1 - && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) + yysize = yysize1; + else return 2; - yysize = yysize1; } } } @@ -1337,9 +1339,10 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, { YYSIZE_T yysize1 = yysize + yystrlen (yyformat); - if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) + yysize = yysize1; + else return 2; - yysize = yysize1; } if (*yymsg_alloc < yysize) @@ -1389,223 +1392,222 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN switch (yytype) { - case 28: /* geometry_no_srid */ -#line 198 "lwin_wkt_parse.y" /* yacc.c:1254 */ + case 28: /* geometry_no_srid */ +#line 194 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1396 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1399 "lwin_wkt_parse.c" break; case 29: /* geometrycollection */ -#line 199 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 195 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1402 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1405 "lwin_wkt_parse.c" break; case 31: /* multisurface */ -#line 206 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 202 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1408 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1411 "lwin_wkt_parse.c" break; case 32: /* surface_list */ -#line 185 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 181 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1414 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1417 "lwin_wkt_parse.c" break; case 33: /* tin */ -#line 213 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 209 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1420 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1423 "lwin_wkt_parse.c" break; case 34: /* polyhedralsurface */ -#line 212 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 208 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1426 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1429 "lwin_wkt_parse.c" break; case 35: /* multipolygon */ -#line 205 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 201 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1432 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1435 "lwin_wkt_parse.c" break; case 36: /* polygon_list */ -#line 186 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 182 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1438 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1441 "lwin_wkt_parse.c" break; case 37: /* patch_list */ -#line 187 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 183 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1444 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1447 "lwin_wkt_parse.c" break; case 38: /* polygon */ -#line 209 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 205 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1450 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1453 "lwin_wkt_parse.c" break; case 39: /* polygon_untagged */ -#line 211 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 207 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1456 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1459 "lwin_wkt_parse.c" break; case 40: /* patch */ -#line 210 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 206 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1462 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1465 "lwin_wkt_parse.c" break; case 41: /* curvepolygon */ -#line 196 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 192 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1468 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1471 "lwin_wkt_parse.c" break; case 42: /* curvering_list */ -#line 183 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 179 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1474 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1477 "lwin_wkt_parse.c" break; case 43: /* curvering */ -#line 197 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 193 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1480 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1483 "lwin_wkt_parse.c" break; case 44: /* patchring_list */ -#line 193 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 189 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1486 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1489 "lwin_wkt_parse.c" break; case 45: /* ring_list */ -#line 192 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 188 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1492 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1495 "lwin_wkt_parse.c" break; case 46: /* patchring */ -#line 182 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 178 "lwin_wkt_parse.y" { ptarray_free(((*yyvaluep).ptarrayvalue)); } -#line 1498 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1501 "lwin_wkt_parse.c" break; case 47: /* ring */ -#line 181 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 177 "lwin_wkt_parse.y" { ptarray_free(((*yyvaluep).ptarrayvalue)); } -#line 1504 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1507 "lwin_wkt_parse.c" break; case 48: /* compoundcurve */ -#line 195 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 191 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1510 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1513 "lwin_wkt_parse.c" break; case 49: /* compound_list */ -#line 191 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 187 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1516 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1519 "lwin_wkt_parse.c" break; case 50: /* multicurve */ -#line 202 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 198 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1522 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1525 "lwin_wkt_parse.c" break; case 51: /* curve_list */ -#line 190 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 186 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1528 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1531 "lwin_wkt_parse.c" break; case 52: /* multilinestring */ -#line 203 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 199 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1534 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1537 "lwin_wkt_parse.c" break; case 53: /* linestring_list */ -#line 189 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 185 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1540 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1543 "lwin_wkt_parse.c" break; case 54: /* circularstring */ -#line 194 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 190 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1546 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1549 "lwin_wkt_parse.c" break; case 55: /* linestring */ -#line 200 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 196 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1552 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1555 "lwin_wkt_parse.c" break; case 56: /* linestring_untagged */ -#line 201 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 197 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1558 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1561 "lwin_wkt_parse.c" break; case 57: /* triangle_list */ -#line 184 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 180 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1564 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1567 "lwin_wkt_parse.c" break; case 58: /* triangle */ -#line 214 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 210 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1570 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1573 "lwin_wkt_parse.c" break; case 59: /* triangle_untagged */ -#line 215 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 211 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1576 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1579 "lwin_wkt_parse.c" break; case 60: /* multipoint */ -#line 204 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 200 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1582 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1585 "lwin_wkt_parse.c" break; case 61: /* point_list */ -#line 188 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 184 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1588 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1591 "lwin_wkt_parse.c" break; case 62: /* point_untagged */ -#line 208 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 204 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1594 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1597 "lwin_wkt_parse.c" break; case 63: /* point */ -#line 207 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 203 "lwin_wkt_parse.y" { lwgeom_free(((*yyvaluep).geometryvalue)); } -#line 1600 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1603 "lwin_wkt_parse.c" break; case 64: /* ptarray */ -#line 180 "lwin_wkt_parse.y" /* yacc.c:1254 */ +#line 176 "lwin_wkt_parse.y" { ptarray_free(((*yyvaluep).ptarrayvalue)); } -#line 1606 "lwin_wkt_parse.c" /* yacc.c:1254 */ +#line 1609 "lwin_wkt_parse.c" break; - default: break; } @@ -1705,23 +1707,33 @@ yyparse (void) yylsp[0] = yylloc; goto yysetstate; + /*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | +| yynewstate -- push a new state, which is found in yystate. | `------------------------------------------------------------*/ - yynewstate: +yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; - yysetstate: + +/*--------------------------------------------------------------------. +| yynewstate -- set current state (the top of the stack) to yystate. | +`--------------------------------------------------------------------*/ +yysetstate: + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + YY_ASSERT (0 <= yystate && yystate < YYNSTATES); *yyssp = (yytype_int16) yystate; if (yyss + yystacksize - 1 <= yyssp) +#if !defined yyoverflow && !defined YYSTACK_RELOCATE + goto yyexhaustedlab; +#else { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = (YYSIZE_T) (yyssp - yyss + 1); -#ifdef yyoverflow +# if defined yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into @@ -1743,10 +1755,7 @@ yyparse (void) yyvs = yyvs1; yyls = yyls1; } -#else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyexhaustedlab; -# else +# else /* defined YYSTACK_RELOCATE */ /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; @@ -1763,12 +1772,11 @@ yyparse (void) YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); YYSTACK_RELOCATE (yyls_alloc, yyls); -# undef YYSTACK_RELOCATE +# undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif -#endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; @@ -1780,19 +1788,18 @@ yyparse (void) if (yyss + yystacksize - 1 <= yyssp) YYABORT; } - - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); +#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ if (yystate == YYFINAL) YYACCEPT; goto yybackup; + /*-----------. | yybackup. | `-----------*/ yybackup: - /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ @@ -1865,7 +1872,7 @@ yydefault: /*-----------------------------. -| yyreduce -- Do a reduction. | +| yyreduce -- do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ @@ -1887,818 +1894,819 @@ yyreduce: YY_REDUCE_PRINT (yyn); switch (yyn) { - case 2: -#line 221 "lwin_wkt_parse.y" /* yacc.c:1645 */ + case 2: +#line 217 "lwin_wkt_parse.y" { wkt_parser_geometry_new((yyvsp[0].geometryvalue), SRID_UNKNOWN); WKT_ERROR(); } -#line 1894 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 1901 "lwin_wkt_parse.c" break; case 3: -#line 223 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 219 "lwin_wkt_parse.y" { wkt_parser_geometry_new((yyvsp[0].geometryvalue), (yyvsp[-2].integervalue)); WKT_ERROR(); } -#line 1900 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 1907 "lwin_wkt_parse.c" break; case 4: -#line 226 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 222 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); } -#line 1906 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 1913 "lwin_wkt_parse.c" break; case 5: -#line 227 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 223 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); } -#line 1912 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 1919 "lwin_wkt_parse.c" break; case 6: -#line 228 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 224 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); } -#line 1918 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 1925 "lwin_wkt_parse.c" break; case 7: -#line 229 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 225 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); } -#line 1924 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 1931 "lwin_wkt_parse.c" break; case 8: -#line 230 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 226 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); } -#line 1930 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 1937 "lwin_wkt_parse.c" break; case 9: -#line 231 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 227 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); } -#line 1936 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 1943 "lwin_wkt_parse.c" break; case 10: -#line 232 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 228 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); } -#line 1942 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 1949 "lwin_wkt_parse.c" break; case 11: -#line 233 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 229 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); } -#line 1948 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 1955 "lwin_wkt_parse.c" break; case 12: -#line 234 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 230 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); } -#line 1954 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 1961 "lwin_wkt_parse.c" break; case 13: -#line 235 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 231 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); } -#line 1960 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 1967 "lwin_wkt_parse.c" break; case 14: -#line 236 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 232 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); } -#line 1966 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 1973 "lwin_wkt_parse.c" break; case 15: -#line 237 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 233 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); } -#line 1972 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 1979 "lwin_wkt_parse.c" break; case 16: -#line 238 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 234 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); } -#line 1978 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 1985 "lwin_wkt_parse.c" break; case 17: -#line 239 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 235 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); } -#line 1984 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 1991 "lwin_wkt_parse.c" break; case 18: -#line 240 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 236 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); } -#line 1990 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 1997 "lwin_wkt_parse.c" break; case 19: -#line 244 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 240 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(COLLECTIONTYPE, (yyvsp[-1].geometryvalue), NULL); WKT_ERROR(); } -#line 1996 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2003 "lwin_wkt_parse.c" break; case 20: -#line 246 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 242 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(COLLECTIONTYPE, (yyvsp[-1].geometryvalue), (yyvsp[-3].stringvalue)); WKT_ERROR(); } -#line 2002 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2009 "lwin_wkt_parse.c" break; case 21: -#line 248 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 244 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(COLLECTIONTYPE, NULL, (yyvsp[-1].stringvalue)); WKT_ERROR(); } -#line 2008 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2015 "lwin_wkt_parse.c" break; case 22: -#line 250 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 246 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(COLLECTIONTYPE, NULL, NULL); WKT_ERROR(); } -#line 2014 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2021 "lwin_wkt_parse.c" break; case 23: -#line 254 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 250 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2020 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2027 "lwin_wkt_parse.c" break; case 24: -#line 256 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 252 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2026 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2033 "lwin_wkt_parse.c" break; case 25: -#line 260 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 256 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTISURFACETYPE, (yyvsp[-1].geometryvalue), NULL); WKT_ERROR(); } -#line 2032 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2039 "lwin_wkt_parse.c" break; case 26: -#line 262 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 258 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTISURFACETYPE, (yyvsp[-1].geometryvalue), (yyvsp[-3].stringvalue)); WKT_ERROR(); } -#line 2038 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2045 "lwin_wkt_parse.c" break; case 27: -#line 264 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 260 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTISURFACETYPE, NULL, (yyvsp[-1].stringvalue)); WKT_ERROR(); } -#line 2044 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2051 "lwin_wkt_parse.c" break; case 28: -#line 266 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 262 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTISURFACETYPE, NULL, NULL); WKT_ERROR(); } -#line 2050 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2057 "lwin_wkt_parse.c" break; case 29: -#line 270 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 266 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2056 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2063 "lwin_wkt_parse.c" break; case 30: -#line 272 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 268 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2062 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2069 "lwin_wkt_parse.c" break; case 31: -#line 274 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 270 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2068 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2075 "lwin_wkt_parse.c" break; case 32: -#line 276 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 272 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2074 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2081 "lwin_wkt_parse.c" break; case 33: -#line 278 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 274 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2080 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2087 "lwin_wkt_parse.c" break; case 34: -#line 280 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 276 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2086 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2093 "lwin_wkt_parse.c" break; case 35: -#line 284 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 280 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(TINTYPE, (yyvsp[-1].geometryvalue), NULL); WKT_ERROR(); } -#line 2092 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2099 "lwin_wkt_parse.c" break; case 36: -#line 286 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 282 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(TINTYPE, (yyvsp[-1].geometryvalue), (yyvsp[-3].stringvalue)); WKT_ERROR(); } -#line 2098 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2105 "lwin_wkt_parse.c" break; case 37: -#line 288 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 284 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(TINTYPE, NULL, (yyvsp[-1].stringvalue)); WKT_ERROR(); } -#line 2104 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2111 "lwin_wkt_parse.c" break; case 38: -#line 290 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 286 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(TINTYPE, NULL, NULL); WKT_ERROR(); } -#line 2110 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2117 "lwin_wkt_parse.c" break; case 39: -#line 294 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 290 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(POLYHEDRALSURFACETYPE, (yyvsp[-1].geometryvalue), NULL); WKT_ERROR(); } -#line 2116 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2123 "lwin_wkt_parse.c" break; case 40: -#line 296 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 292 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(POLYHEDRALSURFACETYPE, (yyvsp[-1].geometryvalue), (yyvsp[-3].stringvalue)); WKT_ERROR(); } -#line 2122 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2129 "lwin_wkt_parse.c" break; case 41: -#line 298 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 294 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(POLYHEDRALSURFACETYPE, NULL, (yyvsp[-1].stringvalue)); WKT_ERROR(); } -#line 2128 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2135 "lwin_wkt_parse.c" break; case 42: -#line 300 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 296 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(POLYHEDRALSURFACETYPE, NULL, NULL); WKT_ERROR(); } -#line 2134 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2141 "lwin_wkt_parse.c" break; case 43: -#line 304 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 300 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOLYGONTYPE, (yyvsp[-1].geometryvalue), NULL); WKT_ERROR(); } -#line 2140 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2147 "lwin_wkt_parse.c" break; case 44: -#line 306 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 302 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOLYGONTYPE, (yyvsp[-1].geometryvalue), (yyvsp[-3].stringvalue)); WKT_ERROR(); } -#line 2146 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2153 "lwin_wkt_parse.c" break; case 45: -#line 308 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 304 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOLYGONTYPE, NULL, (yyvsp[-1].stringvalue)); WKT_ERROR(); } -#line 2152 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2159 "lwin_wkt_parse.c" break; case 46: -#line 310 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 306 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOLYGONTYPE, NULL, NULL); WKT_ERROR(); } -#line 2158 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2165 "lwin_wkt_parse.c" break; case 47: -#line 314 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 310 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2164 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2171 "lwin_wkt_parse.c" break; case 48: -#line 316 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 312 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2170 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2177 "lwin_wkt_parse.c" break; case 49: -#line 320 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 316 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2176 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2183 "lwin_wkt_parse.c" break; case 50: -#line 322 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 318 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2182 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2189 "lwin_wkt_parse.c" break; case 51: -#line 326 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 322 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_polygon_finalize((yyvsp[-1].geometryvalue), NULL); WKT_ERROR(); } -#line 2188 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2195 "lwin_wkt_parse.c" break; case 52: -#line 328 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 324 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_polygon_finalize((yyvsp[-1].geometryvalue), (yyvsp[-3].stringvalue)); WKT_ERROR(); } -#line 2194 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2201 "lwin_wkt_parse.c" break; case 53: -#line 330 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 326 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_polygon_finalize(NULL, (yyvsp[-1].stringvalue)); WKT_ERROR(); } -#line 2200 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2207 "lwin_wkt_parse.c" break; case 54: -#line 332 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 328 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_polygon_finalize(NULL, NULL); WKT_ERROR(); } -#line 2206 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2213 "lwin_wkt_parse.c" break; case 55: -#line 336 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 332 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[-1].geometryvalue); } -#line 2212 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2219 "lwin_wkt_parse.c" break; case 56: -#line 338 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 334 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_polygon_finalize(NULL, NULL); WKT_ERROR(); } -#line 2218 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2225 "lwin_wkt_parse.c" break; case 57: -#line 341 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 337 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[-1].geometryvalue); } -#line 2224 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2231 "lwin_wkt_parse.c" break; case 58: -#line 345 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 341 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_curvepolygon_finalize((yyvsp[-1].geometryvalue), NULL); WKT_ERROR(); } -#line 2230 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2237 "lwin_wkt_parse.c" break; case 59: -#line 347 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 343 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_curvepolygon_finalize((yyvsp[-1].geometryvalue), (yyvsp[-3].stringvalue)); WKT_ERROR(); } -#line 2236 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2243 "lwin_wkt_parse.c" break; case 60: -#line 349 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 345 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_curvepolygon_finalize(NULL, (yyvsp[-1].stringvalue)); WKT_ERROR(); } -#line 2242 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2249 "lwin_wkt_parse.c" break; case 61: -#line 351 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 347 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_curvepolygon_finalize(NULL, NULL); WKT_ERROR(); } -#line 2248 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2255 "lwin_wkt_parse.c" break; case 62: -#line 355 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 351 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_curvepolygon_add_ring((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2254 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2261 "lwin_wkt_parse.c" break; case 63: -#line 357 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 353 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_curvepolygon_new((yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2260 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2267 "lwin_wkt_parse.c" break; case 64: -#line 360 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 356 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); } -#line 2266 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2273 "lwin_wkt_parse.c" break; case 65: -#line 361 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 357 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); } -#line 2272 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2279 "lwin_wkt_parse.c" break; case 66: -#line 362 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 358 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); } -#line 2278 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2285 "lwin_wkt_parse.c" break; case 67: -#line 363 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 359 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[0].geometryvalue); } -#line 2284 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2291 "lwin_wkt_parse.c" break; case 68: -#line 367 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 363 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_polygon_add_ring((yyvsp[-2].geometryvalue),(yyvsp[0].ptarrayvalue),'Z'); WKT_ERROR(); } -#line 2290 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2297 "lwin_wkt_parse.c" break; case 69: -#line 369 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 365 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_polygon_new((yyvsp[0].ptarrayvalue),'Z'); WKT_ERROR(); } -#line 2296 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2303 "lwin_wkt_parse.c" break; case 70: -#line 373 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 369 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_polygon_add_ring((yyvsp[-2].geometryvalue),(yyvsp[0].ptarrayvalue),'2'); WKT_ERROR(); } -#line 2302 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2309 "lwin_wkt_parse.c" break; case 71: -#line 375 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 371 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_polygon_new((yyvsp[0].ptarrayvalue),'2'); WKT_ERROR(); } -#line 2308 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2315 "lwin_wkt_parse.c" break; case 72: -#line 378 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 374 "lwin_wkt_parse.y" { (yyval.ptarrayvalue) = (yyvsp[-1].ptarrayvalue); } -#line 2314 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2321 "lwin_wkt_parse.c" break; case 73: -#line 381 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 377 "lwin_wkt_parse.y" { (yyval.ptarrayvalue) = (yyvsp[-1].ptarrayvalue); } -#line 2320 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2327 "lwin_wkt_parse.c" break; case 74: -#line 385 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 381 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(COMPOUNDTYPE, (yyvsp[-1].geometryvalue), NULL); WKT_ERROR(); } -#line 2326 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2333 "lwin_wkt_parse.c" break; case 75: -#line 387 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 383 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(COMPOUNDTYPE, (yyvsp[-1].geometryvalue), (yyvsp[-3].stringvalue)); WKT_ERROR(); } -#line 2332 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2339 "lwin_wkt_parse.c" break; case 76: -#line 389 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 385 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(COMPOUNDTYPE, NULL, (yyvsp[-1].stringvalue)); WKT_ERROR(); } -#line 2338 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2345 "lwin_wkt_parse.c" break; case 77: -#line 391 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 387 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(COMPOUNDTYPE, NULL, NULL); WKT_ERROR(); } -#line 2344 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2351 "lwin_wkt_parse.c" break; case 78: -#line 395 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 391 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_compound_add_geom((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2350 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2357 "lwin_wkt_parse.c" break; case 79: -#line 397 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 393 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_compound_add_geom((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2356 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2363 "lwin_wkt_parse.c" break; case 80: -#line 399 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 395 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_compound_add_geom((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2362 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2369 "lwin_wkt_parse.c" break; case 81: -#line 401 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 397 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_compound_new((yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2368 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2375 "lwin_wkt_parse.c" break; case 82: -#line 403 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 399 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_compound_new((yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2374 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2381 "lwin_wkt_parse.c" break; case 83: -#line 405 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 401 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_compound_new((yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2380 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2387 "lwin_wkt_parse.c" break; case 84: -#line 409 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 405 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTICURVETYPE, (yyvsp[-1].geometryvalue), NULL); WKT_ERROR(); } -#line 2386 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2393 "lwin_wkt_parse.c" break; case 85: -#line 411 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 407 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTICURVETYPE, (yyvsp[-1].geometryvalue), (yyvsp[-3].stringvalue)); WKT_ERROR(); } -#line 2392 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2399 "lwin_wkt_parse.c" break; case 86: -#line 413 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 409 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTICURVETYPE, NULL, (yyvsp[-1].stringvalue)); WKT_ERROR(); } -#line 2398 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2405 "lwin_wkt_parse.c" break; case 87: -#line 415 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 411 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTICURVETYPE, NULL, NULL); WKT_ERROR(); } -#line 2404 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2411 "lwin_wkt_parse.c" break; case 88: -#line 419 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 415 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2410 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2417 "lwin_wkt_parse.c" break; case 89: -#line 421 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 417 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2416 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2423 "lwin_wkt_parse.c" break; case 90: -#line 423 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 419 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2422 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2429 "lwin_wkt_parse.c" break; case 91: -#line 425 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 421 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2428 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2435 "lwin_wkt_parse.c" break; case 92: -#line 427 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 423 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2434 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2441 "lwin_wkt_parse.c" break; case 93: -#line 429 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 425 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2440 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2447 "lwin_wkt_parse.c" break; case 94: -#line 431 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 427 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2446 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2453 "lwin_wkt_parse.c" break; case 95: -#line 433 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 429 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2452 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2459 "lwin_wkt_parse.c" break; case 96: -#line 437 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 433 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTILINETYPE, (yyvsp[-1].geometryvalue), NULL); WKT_ERROR(); } -#line 2458 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2465 "lwin_wkt_parse.c" break; case 97: -#line 439 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 435 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTILINETYPE, (yyvsp[-1].geometryvalue), (yyvsp[-3].stringvalue)); WKT_ERROR(); } -#line 2464 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2471 "lwin_wkt_parse.c" break; case 98: -#line 441 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 437 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTILINETYPE, NULL, (yyvsp[-1].stringvalue)); WKT_ERROR(); } -#line 2470 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2477 "lwin_wkt_parse.c" break; case 99: -#line 443 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 439 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTILINETYPE, NULL, NULL); WKT_ERROR(); } -#line 2476 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2483 "lwin_wkt_parse.c" break; case 100: -#line 447 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 443 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2482 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2489 "lwin_wkt_parse.c" break; case 101: -#line 449 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 445 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2488 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2495 "lwin_wkt_parse.c" break; case 102: -#line 453 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 449 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_circularstring_new((yyvsp[-1].ptarrayvalue), NULL); WKT_ERROR(); } -#line 2494 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2501 "lwin_wkt_parse.c" break; case 103: -#line 455 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 451 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_circularstring_new((yyvsp[-1].ptarrayvalue), (yyvsp[-3].stringvalue)); WKT_ERROR(); } -#line 2500 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2507 "lwin_wkt_parse.c" break; case 104: -#line 457 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 453 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_circularstring_new(NULL, (yyvsp[-1].stringvalue)); WKT_ERROR(); } -#line 2506 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2513 "lwin_wkt_parse.c" break; case 105: -#line 459 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 455 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_circularstring_new(NULL, NULL); WKT_ERROR(); } -#line 2512 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2519 "lwin_wkt_parse.c" break; case 106: -#line 463 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 459 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_linestring_new((yyvsp[-1].ptarrayvalue), NULL); WKT_ERROR(); } -#line 2518 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2525 "lwin_wkt_parse.c" break; case 107: -#line 465 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 461 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_linestring_new((yyvsp[-1].ptarrayvalue), (yyvsp[-3].stringvalue)); WKT_ERROR(); } -#line 2524 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2531 "lwin_wkt_parse.c" break; case 108: -#line 467 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 463 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_linestring_new(NULL, (yyvsp[-1].stringvalue)); WKT_ERROR(); } -#line 2530 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2537 "lwin_wkt_parse.c" break; case 109: -#line 469 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 465 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_linestring_new(NULL, NULL); WKT_ERROR(); } -#line 2536 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2543 "lwin_wkt_parse.c" break; case 110: -#line 473 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 469 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_linestring_new((yyvsp[-1].ptarrayvalue), NULL); WKT_ERROR(); } -#line 2542 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2549 "lwin_wkt_parse.c" break; case 111: -#line 475 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 471 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_linestring_new(NULL, NULL); WKT_ERROR(); } -#line 2548 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2555 "lwin_wkt_parse.c" break; case 112: -#line 479 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 475 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2554 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2561 "lwin_wkt_parse.c" break; case 113: -#line 481 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 477 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2560 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2567 "lwin_wkt_parse.c" break; case 114: -#line 485 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 481 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_triangle_new((yyvsp[-2].ptarrayvalue), NULL); WKT_ERROR(); } -#line 2566 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2573 "lwin_wkt_parse.c" break; case 115: -#line 487 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 483 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_triangle_new((yyvsp[-2].ptarrayvalue), (yyvsp[-5].stringvalue)); WKT_ERROR(); } -#line 2572 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2579 "lwin_wkt_parse.c" break; case 116: -#line 489 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 485 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_triangle_new(NULL, (yyvsp[-1].stringvalue)); WKT_ERROR(); } -#line 2578 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2585 "lwin_wkt_parse.c" break; case 117: -#line 491 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 487 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_triangle_new(NULL, NULL); WKT_ERROR(); } -#line 2584 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2591 "lwin_wkt_parse.c" break; case 118: -#line 495 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 491 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_triangle_new((yyvsp[-2].ptarrayvalue), NULL); WKT_ERROR(); } -#line 2590 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2597 "lwin_wkt_parse.c" break; case 119: -#line 499 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 495 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOINTTYPE, (yyvsp[-1].geometryvalue), NULL); WKT_ERROR(); } -#line 2596 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2603 "lwin_wkt_parse.c" break; case 120: -#line 501 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 497 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOINTTYPE, (yyvsp[-1].geometryvalue), (yyvsp[-3].stringvalue)); WKT_ERROR(); } -#line 2602 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2609 "lwin_wkt_parse.c" break; case 121: -#line 503 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 499 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOINTTYPE, NULL, (yyvsp[-1].stringvalue)); WKT_ERROR(); } -#line 2608 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2615 "lwin_wkt_parse.c" break; case 122: -#line 505 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 501 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOINTTYPE, NULL, NULL); WKT_ERROR(); } -#line 2614 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2621 "lwin_wkt_parse.c" break; case 123: -#line 509 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 505 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[-2].geometryvalue),(yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2620 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2627 "lwin_wkt_parse.c" break; case 124: -#line 511 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 507 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[0].geometryvalue)); WKT_ERROR(); } -#line 2626 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2633 "lwin_wkt_parse.c" break; case 125: -#line 515 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 511 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_point_new(wkt_parser_ptarray_new((yyvsp[0].coordinatevalue)),NULL); WKT_ERROR(); } -#line 2632 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2639 "lwin_wkt_parse.c" break; case 126: -#line 517 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 513 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_point_new(wkt_parser_ptarray_new((yyvsp[-1].coordinatevalue)),NULL); WKT_ERROR(); } -#line 2638 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2645 "lwin_wkt_parse.c" break; case 127: -#line 519 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 515 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_point_new(NULL, NULL); WKT_ERROR(); } -#line 2644 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2651 "lwin_wkt_parse.c" break; case 128: -#line 523 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 519 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_point_new((yyvsp[-1].ptarrayvalue), NULL); WKT_ERROR(); } -#line 2650 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2657 "lwin_wkt_parse.c" break; case 129: -#line 525 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 521 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_point_new((yyvsp[-1].ptarrayvalue), (yyvsp[-3].stringvalue)); WKT_ERROR(); } -#line 2656 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2663 "lwin_wkt_parse.c" break; case 130: -#line 527 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 523 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_point_new(NULL, (yyvsp[-1].stringvalue)); WKT_ERROR(); } -#line 2662 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2669 "lwin_wkt_parse.c" break; case 131: -#line 529 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 525 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_point_new(NULL,NULL); WKT_ERROR(); } -#line 2668 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2675 "lwin_wkt_parse.c" break; case 132: -#line 533 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 529 "lwin_wkt_parse.y" { (yyval.ptarrayvalue) = wkt_parser_ptarray_add_coord((yyvsp[-2].ptarrayvalue), (yyvsp[0].coordinatevalue)); WKT_ERROR(); } -#line 2674 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2681 "lwin_wkt_parse.c" break; case 133: -#line 535 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 531 "lwin_wkt_parse.y" { (yyval.ptarrayvalue) = wkt_parser_ptarray_new((yyvsp[0].coordinatevalue)); WKT_ERROR(); } -#line 2680 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2687 "lwin_wkt_parse.c" break; case 134: -#line 539 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 535 "lwin_wkt_parse.y" { (yyval.coordinatevalue) = wkt_parser_coord_2((yyvsp[-1].doublevalue), (yyvsp[0].doublevalue)); WKT_ERROR(); } -#line 2686 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2693 "lwin_wkt_parse.c" break; case 135: -#line 541 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 537 "lwin_wkt_parse.y" { (yyval.coordinatevalue) = wkt_parser_coord_3((yyvsp[-2].doublevalue), (yyvsp[-1].doublevalue), (yyvsp[0].doublevalue)); WKT_ERROR(); } -#line 2692 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2699 "lwin_wkt_parse.c" break; case 136: -#line 543 "lwin_wkt_parse.y" /* yacc.c:1645 */ +#line 539 "lwin_wkt_parse.y" { (yyval.coordinatevalue) = wkt_parser_coord_4((yyvsp[-3].doublevalue), (yyvsp[-2].doublevalue), (yyvsp[-1].doublevalue), (yyvsp[0].doublevalue)); WKT_ERROR(); } -#line 2698 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2705 "lwin_wkt_parse.c" break; -#line 2702 "lwin_wkt_parse.c" /* yacc.c:1645 */ +#line 2709 "lwin_wkt_parse.c" + default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -2813,12 +2821,10 @@ yyerrlab: | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: - - /* Pacify compilers like GCC when the user code never invokes - YYERROR and the label yyerrorlab therefore never appears in user - code. */ - if (/*CONSTCOND*/ 0) - goto yyerrorlab; + /* Pacify compilers when the user code never invokes YYERROR and the + label yyerrorlab therefore never appears in user code. */ + if (0) + YYERROR; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ @@ -2885,6 +2891,7 @@ yyacceptlab: yyresult = 0; goto yyreturn; + /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ @@ -2892,6 +2899,7 @@ yyabortlab: yyresult = 1; goto yyreturn; + #if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | @@ -2902,6 +2910,10 @@ yyexhaustedlab: /* Fall through. */ #endif + +/*-----------------------------------------------------. +| yyreturn -- parsing is finished, return the result. | +`-----------------------------------------------------*/ yyreturn: if (yychar != YYEMPTY) { @@ -2931,6 +2943,6 @@ yyreturn: #endif return yyresult; } -#line 545 "lwin_wkt_parse.y" /* yacc.c:1903 */ +#line 541 "lwin_wkt_parse.y" diff --git a/liblwgeom/lwin_wkt_parse.h b/liblwgeom/lwin_wkt_parse.h index f5683524e..e9c7e27a2 100644 --- a/liblwgeom/lwin_wkt_parse.h +++ b/liblwgeom/lwin_wkt_parse.h @@ -1,8 +1,9 @@ -/* A Bison parser, made by GNU Bison 3.2.2. */ +/* A Bison parser, made by GNU Bison 3.4. */ /* Bison interface for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 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 @@ -100,10 +101,9 @@ extern int wkt_yydebug; /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED - union YYSTYPE { -#line 116 "lwin_wkt_parse.y" /* yacc.c:1906 */ +#line 112 "lwin_wkt_parse.y" int integervalue; double doublevalue; @@ -112,9 +112,9 @@ union YYSTYPE POINT coordinatevalue; POINTARRAY *ptarrayvalue; -#line 116 "lwin_wkt_parse.h" /* yacc.c:1906 */ -}; +#line 116 "lwin_wkt_parse.h" +}; typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 diff --git a/liblwgeom/lwin_wkt_parse.y b/liblwgeom/lwin_wkt_parse.y index 400ed1272..080e15c1e 100644 --- a/liblwgeom/lwin_wkt_parse.y +++ b/liblwgeom/lwin_wkt_parse.y @@ -78,11 +78,7 @@ int lwgeom_parse_wkt(LWGEOM_PARSER_RESULT *parser_result, char *wktstr, int pars global_parser_result.message = parser_error_messages[PARSER_ERROR_OTHER]; global_parser_result.errlocation = wkt_yylloc.last_column; } - - /* Got a completed object parsed, but errored out after... */ - /* Due to junk after the valid WKT, eg: "POINT(1 1) foobar" */ - /* https://trac.osgeo.org/postgis/ticket/4273 */ - if ( global_parser_result.errcode && ! parse_rv ) + else if (global_parser_result.geom) { lwgeom_free(global_parser_result.geom); global_parser_result.geom = NULL; -- 2.49.0