mirror of
https://github.com/postgres/postgres.git
synced 2025-07-05 07:21:24 +03:00
Make sure a variable is no longer referenced when it is removed.
Fixed counting bug in parsing "->" operator. Removed that silly debugging function I accidently committed last night.
This commit is contained in:
@ -137,7 +137,7 @@ find_struct(char *name, char *next, char *end)
|
||||
/* restore the name, we will need it later */
|
||||
*next = c;
|
||||
|
||||
return find_struct_member(name, end, p->type->u.element->u.members, p->brace_level);
|
||||
return find_struct_member(name, ++end, p->type->u.element->u.members, p->brace_level);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -260,6 +260,37 @@ remove_variables(int brace_level)
|
||||
{
|
||||
if (p->brace_level >= brace_level)
|
||||
{
|
||||
/* is it still referenced by a cursor? */
|
||||
struct cursor *ptr;
|
||||
|
||||
for (ptr = cur; ptr != NULL; ptr = ptr->next)
|
||||
{
|
||||
struct arguments *varptr, *prevvar;
|
||||
|
||||
for (varptr = prevvar = ptr->argsinsert; varptr != NULL; varptr = varptr->next)
|
||||
{
|
||||
if (p == varptr->variable)
|
||||
{
|
||||
/* remove from list */
|
||||
if (varptr == ptr->argsinsert)
|
||||
ptr->argsinsert = varptr->next;
|
||||
else
|
||||
prevvar->next = varptr->next;
|
||||
}
|
||||
}
|
||||
for (varptr = ptr->argsresult; varptr != NULL; varptr = varptr->next)
|
||||
{
|
||||
if (p == varptr->variable)
|
||||
{
|
||||
/* remove from list */
|
||||
if (varptr == ptr->argsresult)
|
||||
ptr->argsresult = varptr->next;
|
||||
else
|
||||
prevvar->next = varptr->next;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* remove it */
|
||||
if (p == allvariables)
|
||||
prev = allvariables = p->next;
|
||||
|
Reference in New Issue
Block a user