[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] pick up symbols in enumerator-list more correctly
From: |
Hideki IWAMOTO |
Subject: |
[PATCH] pick up symbols in enumerator-list more correctly |
Date: |
Fri, 17 Feb 2012 23:42:22 +0900 |
Currently, all symbols in enumerator-list are picked up as definition.
This patch makes symbols in expression be picked up as "reference or
other symbol".
diffstat:
libparser/C.c | 142 ++++++++++++++++++++++++++++++++------------------------
libparser/Cpp.c | 141 +++++++++++++++++++++++++++++++------------------------
2 files changed, 163 insertions(+), 120 deletions(-)
=== example ===
$ cat -n a.c
1 #define FRUIT_BASE (1 << 16)
2 enum { APPLE = FRUIT_BASE };
3 typedef enum { APPLE = FRUIT_BASE } FOOD;
4 #define ENUM_BASE(x) ((x) << 16)
5 enum { FRUIT = 1 };
6 enum { APPLE = ENUM_BASE(FRUIT) };
7 typedef enum { APPLE = ENUM_BASE(FRUIT) } FOOD;
8 #define ENUM_BASE2(d, x) ((x) << 16)
9 enum { APPLE = ENUM_BASE2(0, FRUIT) };
10 typedef enum { APPLE = ENUM_BASE2(0, FRUIT) } FOOD;
[ current CVS version ]
$ global -f a.c
FRUIT_BASE 1 a.c #define FRUIT_BASE (1 << 16)
APPLE 2 a.c enum { APPLE = FRUIT_BASE };
FRUIT_BASE 2 a.c enum { APPLE = FRUIT_BASE };
APPLE 3 a.c typedef enum { APPLE = FRUIT_BASE } FOOD;
FRUIT_BASE 3 a.c typedef enum { APPLE = FRUIT_BASE } FOOD;
FOOD 3 a.c typedef enum { APPLE = FRUIT_BASE } FOOD;
ENUM_BASE 4 a.c #define ENUM_BASE(x) ((x) << 16)
FRUIT 5 a.c enum { FRUIT = 1 };
APPLE 6 a.c enum { APPLE = ENUM_BASE(FRUIT) };
ENUM_BASE 6 a.c enum { APPLE = ENUM_BASE(FRUIT) };
FRUIT 6 a.c enum { APPLE = ENUM_BASE(FRUIT) };
APPLE 7 a.c typedef enum { APPLE = ENUM_BASE(FRUIT)
} FOOD;
ENUM_BASE 7 a.c typedef enum { APPLE = ENUM_BASE(FRUIT)
} FOOD;
FRUIT 7 a.c typedef enum { APPLE = ENUM_BASE(FRUIT)
} FOOD;
FOOD 7 a.c typedef enum { APPLE = ENUM_BASE(FRUIT)
} FOOD;
ENUM_BASE2 8 a.c #define ENUM_BASE2(d, x) ((x) << 16)
APPLE 9 a.c enum { APPLE = ENUM_BASE2(0, FRUIT) };
ENUM_BASE2 9 a.c enum { APPLE = ENUM_BASE2(0, FRUIT) };
FRUIT 9 a.c enum { APPLE = ENUM_BASE2(0, FRUIT) };
APPLE 10 a.c typedef enum { APPLE = ENUM_BASE2(0,
FRUIT) } FOOD;
ENUM_BASE2 10 a.c typedef enum { APPLE = ENUM_BASE2(0,
FRUIT) } FOOD;
FRUIT 10 a.c typedef enum { APPLE = ENUM_BASE2(0,
FRUIT) } FOOD;
FOOD 10 a.c typedef enum { APPLE = ENUM_BASE2(0,
FRUIT) } FOOD;
$ global -frs a.c
x 4 a.c #define ENUM_BASE(x) ((x) << 16)
x 4 a.c #define ENUM_BASE(x) ((x) << 16)
d 8 a.c #define ENUM_BASE2(d, x) ((x) << 16)
x 8 a.c #define ENUM_BASE2(d, x) ((x) << 16)
x 8 a.c #define ENUM_BASE2(d, x) ((x) << 16)
[ patched version ]
$ global -f a.c
FRUIT_BASE 1 a.c #define FRUIT_BASE (1 << 16)
APPLE 2 a.c enum { APPLE = FRUIT_BASE };
APPLE 3 a.c typedef enum { APPLE = FRUIT_BASE } FOOD;
FOOD 3 a.c typedef enum { APPLE = FRUIT_BASE } FOOD;
ENUM_BASE 4 a.c #define ENUM_BASE(x) ((x) << 16)
FRUIT 5 a.c enum { FRUIT = 1 };
APPLE 6 a.c enum { APPLE = ENUM_BASE(FRUIT) };
APPLE 7 a.c typedef enum { APPLE = ENUM_BASE(FRUIT)
} FOOD;
FOOD 7 a.c typedef enum { APPLE = ENUM_BASE(FRUIT)
} FOOD;
ENUM_BASE2 8 a.c #define ENUM_BASE2(d, x) ((x) << 16)
APPLE 9 a.c enum { APPLE = ENUM_BASE2(0, FRUIT) };
APPLE 10 a.c typedef enum { APPLE = ENUM_BASE2(0,
FRUIT) } FOOD;
FOOD 10 a.c typedef enum { APPLE = ENUM_BASE2(0,
FRUIT) } FOOD;
$ global -frs a.c
FRUIT_BASE 2 a.c enum { APPLE = FRUIT_BASE };
FRUIT_BASE 3 a.c typedef enum { APPLE = FRUIT_BASE } FOOD;
x 4 a.c #define ENUM_BASE(x) ((x) << 16)
x 4 a.c #define ENUM_BASE(x) ((x) << 16)
ENUM_BASE 6 a.c enum { APPLE = ENUM_BASE(FRUIT) };
FRUIT 6 a.c enum { APPLE = ENUM_BASE(FRUIT) };
ENUM_BASE 7 a.c typedef enum { APPLE = ENUM_BASE(FRUIT)
} FOOD;
FRUIT 7 a.c typedef enum { APPLE = ENUM_BASE(FRUIT)
} FOOD;
d 8 a.c #define ENUM_BASE2(d, x) ((x) << 16)
x 8 a.c #define ENUM_BASE2(d, x) ((x) << 16)
x 8 a.c #define ENUM_BASE2(d, x) ((x) << 16)
ENUM_BASE2 9 a.c enum { APPLE = ENUM_BASE2(0, FRUIT) };
FRUIT 9 a.c enum { APPLE = ENUM_BASE2(0, FRUIT) };
ENUM_BASE2 10 a.c typedef enum { APPLE = ENUM_BASE2(0,
FRUIT) } FOOD;
FRUIT 10 a.c typedef enum { APPLE = ENUM_BASE2(0,
FRUIT) } FOOD;
--
Hideki IWAMOTO <address@hidden>
20120217-enumerator_list.patch
Description: Binary data
- [PATCH] pick up symbols in enumerator-list more correctly,
Hideki IWAMOTO <=