diff options
author | Michael Meskes <meskes@postgresql.org> | 2004-06-27 12:28:42 +0000 |
---|---|---|
committer | Michael Meskes <meskes@postgresql.org> | 2004-06-27 12:28:42 +0000 |
commit | 03ad5da8f89d7bc199a711e1c49b64c2b2832154 (patch) | |
tree | 830ee40d7f91a744419b6b3f49a3b130037515fc /src/interfaces/ecpg/preproc/variable.c | |
parent | 4eb5f0a8e2a8ef37751ad6086714afed9da31b48 (diff) | |
download | postgresql-03ad5da8f89d7bc199a711e1c49b64c2b2832154.tar.gz postgresql-03ad5da8f89d7bc199a711e1c49b64c2b2832154.zip |
- Only use typedefs inside their scope.
- Variables that are out of scope, were not removed all the time.
- Make a varchar NULL set everything to 0 when not using indicators.
- Synced parser.
Diffstat (limited to 'src/interfaces/ecpg/preproc/variable.c')
-rw-r--r-- | src/interfaces/ecpg/preproc/variable.c | 44 |
1 files changed, 42 insertions, 2 deletions
diff --git a/src/interfaces/ecpg/preproc/variable.c b/src/interfaces/ecpg/preproc/variable.c index 9663e29ef03..f13f7375cb0 100644 --- a/src/interfaces/ecpg/preproc/variable.c +++ b/src/interfaces/ecpg/preproc/variable.c @@ -276,12 +276,46 @@ find_variable(char *name) } void +remove_typedefs(int brace_level) +{ + struct typedefs *p, + *prev; + + for (p = prev = types; p;) + { + if (p->brace_level >= brace_level) + { + /* remove it */ + if (p == types) + prev = types = p->next; + else + prev->next = p->next; + + if (p->type->type_enum == ECPGt_struct || p->type->type_enum == ECPGt_union) + free(p->struct_member_list); + free(p->type); + free(p->name); + free(p); + if (prev == types) + p = types; + else + p = prev ? prev->next : NULL; + } + else + { + prev = p; + p = prev->next; + } + } +} + +void remove_variables(int brace_level) { struct variable *p, *prev; - for (p = prev = allvariables; p; p = p ? p->next : NULL) + for (p = prev = allvariables; p;) { if (p->brace_level >= brace_level) { @@ -326,10 +360,16 @@ remove_variables(int brace_level) ECPGfree_type(p->type); free(p->name); free(p); - p = prev; + if (prev == allvariables) + p = allvariables; + else + p = prev ? prev->next : NULL; } else + { prev = p; + p = prev->next; + } } } |