Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit85312d9

Browse files
committed
ecpg: put all string-valued tokens returned by pgc.l in local storage.
This didn't work earlier in the patch series (I think some ofthe strings were ending up in data-type-related structures),but apparently we're now clean enough for it. This considerablyreduces process-lifespan memory leakage.Discussion:https://postgr.es/m/2011420.1713493114@sss.pgh.pa.us
1 parent0e60607 commit85312d9

File tree

2 files changed

+24
-22
lines changed

2 files changed

+24
-22
lines changed

‎src/interfaces/ecpg/preproc/parser.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,9 @@ filtered_base_yylex(void)
203203
base_yytext=cur_yytext;
204204

205205
/* Combine 3 tokens into 1 */
206-
base_yylval.str=psprintf("%s UESCAPE %s",base_yylval.str,escstr);
206+
base_yylval.str=make3_str(base_yylval.str,
207+
" UESCAPE ",
208+
escstr);
207209
base_yylloc=loc_strdup(base_yylval.str);
208210

209211
/* Clear have_lookahead, thereby consuming all three tokens */

‎src/interfaces/ecpg/preproc/pgc.l

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -641,26 +641,26 @@ cppline{space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})((\/\*[^*/]*\*+
641641
case xb:
642642
if (literalbuf[strspn(literalbuf,"01")] !='\0')
643643
mmerror(PARSE_ERROR, ET_ERROR,"invalid bit string literal");
644-
base_yylval.str =psprintf("b'%s'", literalbuf);
644+
base_yylval.str =make3_str("b'", literalbuf,"'");
645645
return BCONST;
646646
case xh:
647647
if (literalbuf[strspn(literalbuf,"0123456789abcdefABCDEF")] !='\0')
648648
mmerror(PARSE_ERROR, ET_ERROR,"invalid hexadecimal string literal");
649-
base_yylval.str =psprintf("x'%s'", literalbuf);
649+
base_yylval.str =make3_str("x'", literalbuf,"'");
650650
return XCONST;
651651
case xq:
652652
/* fallthrough */
653653
case xqc:
654-
base_yylval.str =psprintf("'%s'", literalbuf);
654+
base_yylval.str =make3_str("'", literalbuf,"'");
655655
return SCONST;
656656
case xe:
657-
base_yylval.str =psprintf("E'%s'", literalbuf);
657+
base_yylval.str =make3_str("E'", literalbuf,"'");
658658
return SCONST;
659659
case xn:
660-
base_yylval.str =psprintf("N'%s'", literalbuf);
660+
base_yylval.str =make3_str("N'", literalbuf,"'");
661661
return SCONST;
662662
case xus:
663-
base_yylval.str =psprintf("U&'%s'", literalbuf);
663+
base_yylval.str =make3_str("U&'", literalbuf,"'");
664664
return USCONST;
665665
default:
666666
mmfatal(PARSE_ERROR,"unhandled previous state in xqs\n");
@@ -724,7 +724,7 @@ cppline{space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})((\/\*[^*/]*\*+
724724
free(dolqstart);
725725
dolqstart =NULL;
726726
BEGIN(SQL);
727-
base_yylval.str =mm_strdup(literalbuf);
727+
base_yylval.str =loc_strdup(literalbuf);
728728
return SCONST;
729729
}
730730
else
@@ -778,12 +778,12 @@ cppline{space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})((\/\*[^*/]*\*+
778778
* PREPARE and EXECUTE IMMEDIATE, which can certainly be
779779
* longer than NAMEDATALEN.
780780
*/
781-
base_yylval.str =mm_strdup(literalbuf);
781+
base_yylval.str =loc_strdup(literalbuf);
782782
return CSTRING;
783783
}
784784
<xdc>{xdstop}{
785785
BEGIN(state_before_str_start);
786-
base_yylval.str =mm_strdup(literalbuf);
786+
base_yylval.str =loc_strdup(literalbuf);
787787
return CSTRING;
788788
}
789789
<xui>{dquote}{
@@ -795,7 +795,7 @@ cppline{space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})((\/\*[^*/]*\*+
795795
* The backend will truncate the identifier here. We do
796796
* not as it does not change the result.
797797
*/
798-
base_yylval.str =psprintf("U&\"%s\"", literalbuf);
798+
base_yylval.str =make3_str("U&\"", literalbuf,"\"");
799799
return UIDENT;
800800
}
801801
<xd,xui>{xddouble} {
@@ -971,7 +971,7 @@ cppline{space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})((\/\*[^*/]*\*+
971971
}
972972
}
973973

974-
base_yylval.str =mm_strdup(yytext);
974+
base_yylval.str =loc_strdup(yytext);
975975
return Op;
976976
}
977977

@@ -990,7 +990,7 @@ cppline{space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})((\/\*[^*/]*\*+
990990
}
991991

992992
{ip}{
993-
base_yylval.str =mm_strdup(yytext);
993+
base_yylval.str =loc_strdup(yytext);
994994
return IP;
995995
}
996996
}/* <SQL> */
@@ -1003,7 +1003,7 @@ cppline{space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})((\/\*[^*/]*\*+
10031003
returnprocess_integer_literal(yytext, &base_yylval,16);
10041004
}
10051005
{numeric}{
1006-
base_yylval.str =mm_strdup(yytext);
1006+
base_yylval.str =loc_strdup(yytext);
10071007
return FCONST;
10081008
}
10091009
{numericfail}{
@@ -1012,7 +1012,7 @@ cppline{space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})((\/\*[^*/]*\*+
10121012
returnprocess_integer_literal(yytext, &base_yylval,10);
10131013
}
10141014
{real}{
1015-
base_yylval.str =mm_strdup(yytext);
1015+
base_yylval.str =loc_strdup(yytext);
10161016
return FCONST;
10171017
}
10181018
{realfail}{
@@ -1048,7 +1048,7 @@ cppline{space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})((\/\*[^*/]*\*+
10481048
}
10491049

10501050
:{identifier}((("->"|\.){identifier})|(\[{array}\]))*{
1051-
base_yylval.str =mm_strdup(yytext +1);
1051+
base_yylval.str =loc_strdup(yytext +1);
10521052
return CVARIABLE;
10531053
}
10541054

@@ -1085,7 +1085,7 @@ cppline{space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})((\/\*[^*/]*\*+
10851085
* to do so; that's just another way that ecpg could
10861086
* get out of step with the backend.
10871087
*/
1088-
base_yylval.str =mm_strdup(yytext);
1088+
base_yylval.str =loc_strdup(yytext);
10891089
return IDENT;
10901090
}
10911091
}
@@ -1124,7 +1124,7 @@ cppline{space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})((\/\*[^*/]*\*+
11241124
}
11251125
else
11261126
{
1127-
base_yylval.str =mm_strdup(yytext);
1127+
base_yylval.str =loc_strdup(yytext);
11281128
return CPP_LINE;
11291129
}
11301130
}
@@ -1136,12 +1136,12 @@ cppline{space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})((\/\*[^*/]*\*+
11361136
}
11371137
else
11381138
{
1139-
base_yylval.str =mm_strdup(yytext);
1139+
base_yylval.str =loc_strdup(yytext);
11401140
return CPP_LINE;
11411141
}
11421142
}
11431143
<C,SQL>{cppline} {
1144-
base_yylval.str =mm_strdup(yytext);
1144+
base_yylval.str =loc_strdup(yytext);
11451145
return CPP_LINE;
11461146
}
11471147
<C>{identifier}{
@@ -1167,7 +1167,7 @@ cppline{space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})((\/\*[^*/]*\*+
11671167
return kwvalue;
11681168
else
11691169
{
1170-
base_yylval.str =mm_strdup(yytext);
1170+
base_yylval.str =loc_strdup(yytext);
11711171
return IDENT;
11721172
}
11731173
}
@@ -1685,7 +1685,7 @@ process_integer_literal(const char *token, YYSTYPE *lval, int base)
16851685
if (*endptr !='\0' || errno == ERANGE)
16861686
{
16871687
/* integer too large (or contains decimal pt), treat it as a float */
1688-
lval->str =mm_strdup(token);
1688+
lval->str =loc_strdup(token);
16891689
return FCONST;
16901690
}
16911691
lval->ival = val;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp