Browse Source

Update draft for interning same symbol

pull/2/head
mtardy 4 years ago
parent
commit
01a1ae3919
2 changed files with 7 additions and 9 deletions
  1. +2
    -3
      .gitignore
  2. +5
    -6
      draft.c

+ 2
- 3
.gitignore View File

@ -1,11 +1,10 @@
# vscode settings # vscode settings
.vscode/ .vscode/
# dicho
dicho.c
# ignore generated parser # ignore generated parser
calc.c calc.c
# ignore compiled parser # ignore compiled parser
calc calc
a.out

+ 5
- 6
draft.c View File

@ -10,7 +10,6 @@ typedef struct symbol_t {
int value; int value;
} symbol_t; } symbol_t;
typedef struct table_t { typedef struct table_t {
symbol_t **array; symbol_t **array;
int size; int size;
@ -69,13 +68,13 @@ symbol_t *intern(char *ident, bool create)
bsearch_t res = binary_search(table.array, 0, table.size - 1, ident); bsearch_t res = binary_search(table.array, 0, table.size - 1, ident);
printf("pos:%d\n", res.pos); printf("pos:%d\n", res.pos);
if (create) { if (create) {
symbol_t *new_symbol = malloc(sizeof(symbol_t));
new_symbol->ident = strdup(ident);
new_symbol->defined = false;
symbol_t *new_symbol;
if (res.found) { if (res.found) {
free(table.array[res.pos]);
table.array[res.pos] = new_symbol;
new_symbol = table.array[res.pos];
} else { } else {
new_symbol = malloc(sizeof(symbol_t));
new_symbol->ident = strdup(ident);
new_symbol->defined = false;
printf("insert:%d\n", insert(&table, new_symbol, res.pos)); printf("insert:%d\n", insert(&table, new_symbol, res.pos));
} }
return new_symbol; return new_symbol;

Loading…
Cancel
Save