Skip to content

Commit 6cf86f4

Browse files
committed
Change internal integer representation of Value node
A Value node would store an integer as a long. This causes needless portability risks, as long can be of varying sizes. Change it to use int instead. All code using this was already careful to only store 32-bit values anyway. Reviewed-by: Michael Paquier <michael@paquier.xyz>
1 parent 377b5ac commit 6cf86f4

File tree

7 files changed

+17
-27
lines changed

7 files changed

+17
-27
lines changed

src/backend/nodes/outfuncs.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3235,7 +3235,7 @@ _outValue(StringInfo str, const Value *value)
32353235
switch (value->type)
32363236
{
32373237
case T_Integer:
3238-
appendStringInfo(str, "%ld", value->val.ival);
3238+
appendStringInfo(str, "%d", value->val.ival);
32393239
break;
32403240
case T_Float:
32413241

src/backend/nodes/read.c

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -224,13 +224,9 @@ nodeTokenType(char *token, int length)
224224

225225
errno = 0;
226226
val = strtol(token, &endptr, 10);
227-
(void) val; /* avoid compiler warning if unused */
228-
if (endptr != token + length || errno == ERANGE
229-
#ifdef HAVE_LONG_INT_64
230-
/* if long > 32 bits, check for overflow of int4 */
231-
|| val != (long) ((int32) val)
232-
#endif
233-
)
227+
if (endptr != token + length || errno == ERANGE ||
228+
/* check for overflow of int */
229+
val != (int) val)
234230
return T_Float;
235231
return T_Integer;
236232
}
@@ -387,9 +383,9 @@ nodeRead(char *token, int tok_len)
387383
case T_Integer:
388384

389385
/*
390-
* we know that the token terminates on a char atol will stop at
386+
* we know that the token terminates on a char atoi will stop at
391387
*/
392-
result = (Node *) makeInteger(atol(token));
388+
result = (Node *) makeInteger(atoi(token));
393389
break;
394390
case T_Float:
395391
{

src/backend/nodes/value.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
* makeInteger
2121
*/
2222
Value *
23-
makeInteger(long i)
23+
makeInteger(int i)
2424
{
2525
Value *v = makeNode(Value);
2626

src/backend/parser/scan.l

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1216,12 +1216,9 @@ process_integer_literal(const char *token, YYSTYPE *lval)
12161216

12171217
errno = 0;
12181218
val = strtol(token, &endptr, 10);
1219-
if (*endptr != '\0' || errno == ERANGE
1220-
#ifdef HAVE_LONG_INT_64
1221-
/* if long > 32 bits, check for overflow of int4 */
1222-
|| val != (long) ((int32) val)
1223-
#endif
1224-
)
1219+
if (*endptr != '\0' || errno == ERANGE ||
1220+
/* check for overflow of int */
1221+
val != (int) val)
12251222
{
12261223
/* integer too large, treat it as a float */
12271224
lval->str = pstrdup(token);

src/backend/utils/misc/guc.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6913,7 +6913,7 @@ flatten_set_variable_args(const char *name, List *args)
69136913
switch (nodeTag(&con->val))
69146914
{
69156915
case T_Integer:
6916-
appendStringInfo(&buf, "%ld", intVal(&con->val));
6916+
appendStringInfo(&buf, "%d", intVal(&con->val));
69176917
break;
69186918
case T_Float:
69196919
/* represented as a string, so just copy it */

src/include/nodes/value.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
* better to use the more general representation.)
3535
*
3636
* Note that an integer-looking string will get lexed as T_Float if
37-
* the value is too large to fit in a 'long'.
37+
* the value is too large to fit in an 'int'.
3838
*
3939
* Nulls, of course, don't need the value part at all.
4040
*----------------------
@@ -44,7 +44,7 @@ typedef struct Value
4444
NodeTag type; /* tag appropriately (eg. T_String) */
4545
union ValUnion
4646
{
47-
long ival; /* machine integer */
47+
int ival; /* machine integer */
4848
char *str; /* string */
4949
} val;
5050
} Value;
@@ -53,7 +53,7 @@ typedef struct Value
5353
#define floatVal(v) atof(((Value *)(v))->val.str)
5454
#define strVal(v) (((Value *)(v))->val.str)
5555

56-
extern Value *makeInteger(long i);
56+
extern Value *makeInteger(int i);
5757
extern Value *makeFloat(char *numericStr);
5858
extern Value *makeString(char *str);
5959
extern Value *makeBitString(char *str);

src/interfaces/ecpg/preproc/pgc.l

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -732,12 +732,9 @@ cppline {space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})((\/\*[^*/]*\*+
732732

733733
errno = 0;
734734
val = strtol((char *)yytext, &endptr,10);
735-
if (*endptr != '\0' || errno == ERANGE
736-
#ifdef HAVE_LONG_INT_64
737-
/* if long > 32 bits, check for overflow of int4 */
738-
|| val != (long) ((int32) val)
739-
#endif
740-
)
735+
if (*endptr != '\0' || errno == ERANGE ||
736+
/* check for overflow of int */
737+
val != (int) val)
741738
{
742739
errno = 0;
743740
base_yylval.str = mm_strdup(yytext);

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy