67 lines
1.5 KiB
C
67 lines
1.5 KiB
C
|
/****************************************************************
|
||
|
* *
|
||
|
* Copyright 2001, 2009 Fidelity Information Services, Inc *
|
||
|
* *
|
||
|
* This source code contains the intellectual property *
|
||
|
* of its copyright holder(s), and is made available *
|
||
|
* under a license. If you do not know the terms of *
|
||
|
* the license, please stop and do not read further. *
|
||
|
* *
|
||
|
****************************************************************/
|
||
|
|
||
|
#include "mdef.h"
|
||
|
|
||
|
#include "gtm_string.h"
|
||
|
|
||
|
#include "compiler.h"
|
||
|
#include "mmemory.h"
|
||
|
#include "min_max.h"
|
||
|
#include "stringpool.h"
|
||
|
|
||
|
GBLREF mvar *mvartab;
|
||
|
GBLREF mvax *mvaxtab, *mvaxtab_end;
|
||
|
GBLREF int mvmax;
|
||
|
|
||
|
mvar *get_mvaddr(mident *var_name)
|
||
|
{
|
||
|
mvar **p;
|
||
|
mvax *px;
|
||
|
mstr vname;
|
||
|
int x;
|
||
|
|
||
|
p = &mvartab;
|
||
|
while (*p)
|
||
|
{
|
||
|
MIDENT_CMP(&(*p)->mvname, var_name, x);
|
||
|
if (x < 0)
|
||
|
p = &((*p)->rson);
|
||
|
else if (x > 0)
|
||
|
p = &((*p)->lson);
|
||
|
else
|
||
|
return *p;
|
||
|
}
|
||
|
/* variable doesn't exist - create a new mvar in mvartab */
|
||
|
vname.len = var_name->len;
|
||
|
vname.addr = var_name->addr;
|
||
|
s2pool_align(&vname);
|
||
|
*p = (mvar *)mcalloc(SIZEOF(mvar));
|
||
|
(*p)->mvname.len = vname.len;
|
||
|
(*p)->mvname.addr = vname.addr;
|
||
|
(*p)->mvidx = mvmax++;
|
||
|
(*p)->lson = (*p)->rson = NULL;
|
||
|
(*p)->last_fetch = NULL;
|
||
|
px = (mvax *)mcalloc(SIZEOF(mvax));
|
||
|
px->var = *p;
|
||
|
px->last = px->next = 0;
|
||
|
px->mvidx = (*p)->mvidx;
|
||
|
if (mvaxtab_end)
|
||
|
{
|
||
|
px->last = mvaxtab_end;
|
||
|
mvaxtab_end->next = px;
|
||
|
mvaxtab_end = px;
|
||
|
}
|
||
|
else
|
||
|
mvaxtab = mvaxtab_end = px;
|
||
|
return *p;
|
||
|
}
|