diff options
Diffstat (limited to 'sem3/osc/mm11/regn/symtab.c')
-rw-r--r-- | sem3/osc/mm11/regn/symtab.c | 63 |
1 files changed, 31 insertions, 32 deletions
diff --git a/sem3/osc/mm11/regn/symtab.c b/sem3/osc/mm11/regn/symtab.c index 35799a5..9edcf72 100644 --- a/sem3/osc/mm11/regn/symtab.c +++ b/sem3/osc/mm11/regn/symtab.c @@ -4,50 +4,49 @@ unsigned int hash(char *s) { - uint32_t hv = 0; - for ( int i = 0; s[i] != '\0'; i++ ) { - // take MSB 6 bits of hv and xors with LSB of s[i] - uint32_t v = ( hv >> 26 ) ^ (s[i] & 0x3f); - - // Push those back on hv - hv = (hv << 4) | v; - } - // Return appropriate size - return hv % HASHSIZE; + uint32_t hv = 0; + for (int i = 0; s[i] != '\0'; i++) { + // take MSB 6 bits of hv and xors with LSB of s[i] + uint32_t v = (hv >> 26) ^ (s[i] & 0x3f); + + // Push those back on hv + hv = (hv << 4) | v; + } + // Return appropriate size + return hv % HASHSIZE; } - symnode_t *sym_insert(char *var) { - unsigned int index = hash(var); + unsigned int index = hash(var); - // Save old value - symnode_t *oldSym = symbolarray[index]; + // Save old value + symnode_t *oldSym = symbolarray[index]; - // Make new - symbolarray[index] = malloc(sizeof(symnode_t)); - if ( symbolarray[index] == NULL ) { - // If malloc failed - symbolarray[index] = oldSym; - return NULL; - } + // Make new + symbolarray[index] = malloc(sizeof(symnode_t)); + if (symbolarray[index] == NULL) { + // If malloc failed + symbolarray[index] = oldSym; + return NULL; + } - // Link old one - symbolarray[index]->next = oldSym; - symbolarray[index]->name = var; + // Link old one + symbolarray[index]->next = oldSym; + symbolarray[index]->name = var; - return symbolarray[index]; + return symbolarray[index]; } symnode_t *sym_lookup(char *var) { - unsigned int index = hash(var); - symnode_t *n = symbolarray[index]; + unsigned int index = hash(var); + symnode_t *n = symbolarray[index]; - // Look trough list - while (n != NULL && strcmp(n->name, var) != 0) { - n = n->next; - } + // Look trough list + while (n != NULL && strcmp(n->name, var) != 0) { + n = n->next; + } - return n; + return n; } |