variable.c 997 Bytes
#include <stdio.h>
#include <malloc.h>

#include <ident.h>
#include <expValue.h>
#include <variable.h>
#include <identList.h>


	s_ident *
getVariable(s_identList * iList, char * id)
{
	return identListSeekKey(iList, id);
}

	s_ident *
getArray(s_ident * var, s_expVal * eVal)
{
	s_ident * ret = NULL;

	/* generate new idl if ident isn't, discard prev val */
	if (identGetType (var) != ID_TYP_IDL)
		identSetIdl (var, identListNew());

	/* now seek or generate the actual ident */
	switch (expValueGetType(eVal))
	{
		case EXP_TYP_INT:
			{
				int idx = expValueInt(eVal);

				ret = identListSeekIdx(identIdl(var), idx);

				if (ret == NULL)
					ret = identListPutVal(
							identIdl (var), identUndefNew (idx, NULL));

				break;
			}
		case EXP_TYP_STRING:
			{
				char * key = expValueString(eVal);

				ret = identListSeekKey(identIdl(var), key);

				if (ret == NULL)
					ret = identListPutVal(
							identIdl (var), identUndefNew (-1, key));

				free(key);
			}
	}

	return ret;
}