Exemple #1
0
/**
 *	Look up for a symbol name, otherwise insert it
 */
symbol * lookup(char * symbolName)
{
	//printf("SymbolName before: %s\n", symbolName);
	// % here means AVOID BUFFER OVERFLOW!!!
	symbol * sym = &(symbolTable[symbolHash(symbolName) % MAX_HASH]);
	//printf("SymbolName after: %s\n", sym->name);

	// Counter to track how many looked symbols
	//int scount = MAX_HASH;

	//while(--scount >= 0)
	//{
		// Check if already exists
		if(sym->name && !strcmp(sym->name, symbolName))
			return sym;

		// Ops, no name means empty set
		//if(!sym->name)
		//{
			sym->name = strdup(symbolName);
			sym->value = 0;
			sym->function = NULL;
			sym->symbols = NULL;
			return sym;
		//}

		// Let's try next hash table entry
		//if(++sym >= (symbolTable + MAX_HASH))
		//	sym = symbolTable; // OK, this line is useless!!!
	//}

	//yyerror("Symbol Table overflow! Watch out! \n");
	//abort();
}
Exemple #2
0
struct Symbol *lookUp( char *sym ){
    struct Symbol *sp = &symTable[ symbolHash(sym) % NHASH ];
    int scount = NHASH;

    while( --scount >= 0 ){
        if( sp->name && !strcmp( sp->name, sym )){
            return sp;
        }

        if( !sp->name){
            sp->name = strdup(sym);
            sp->value = 0;
            sp->func = NULL;
            sp->syms = NULL;

            return sp;
        }

        if( ++sp >= symTable + NHASH)
            sp = symTable;
    }
    
    yyerror("symbol table overflow\n");
    abort();
}