Skip to content

Commit

Permalink
Use hashmap for macro name lookup
Browse files Browse the repository at this point in the history
  • Loading branch information
rui314 committed Dec 7, 2020
1 parent 0aad326 commit 30520e5
Showing 1 changed file with 4 additions and 12 deletions.
16 changes: 4 additions & 12 deletions preprocess.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,11 @@ typedef Token *macro_handler_fn(Token *);

typedef struct Macro Macro;
struct Macro {
Macro *next;
char *name;
bool is_objlike; // Object-like or function-like
MacroParam *params;
char *va_args_name;
Token *body;
bool deleted;
macro_handler_fn *handler;
};

Expand All @@ -67,7 +65,7 @@ struct Hideset {
char *name;
};

static Macro *macros;
static HashMap macros;
static CondIncl *cond_incl;

static Token *preprocess2(Token *tok);
Expand Down Expand Up @@ -320,20 +318,15 @@ static CondIncl *push_cond_incl(Token *tok, bool included) {
static Macro *find_macro(Token *tok) {
if (tok->kind != TK_IDENT)
return NULL;

for (Macro *m = macros; m; m = m->next)
if (strlen(m->name) == tok->len && !strncmp(m->name, tok->loc, tok->len))
return m->deleted ? NULL : m;
return NULL;
return hashmap_get2(&macros, tok->loc, tok->len);
}

static Macro *add_macro(char *name, bool is_objlike, Token *body) {
Macro *m = calloc(1, sizeof(Macro));
m->next = macros;
m->name = name;
m->is_objlike = is_objlike;
m->body = body;
macros = m;
hashmap_put(&macros, name, m);
return m;
}

Expand Down Expand Up @@ -914,8 +907,7 @@ void define_macro(char *name, char *buf) {
}

void undef_macro(char *name) {
Macro *m = add_macro(name, true, NULL);
m->deleted = true;
hashmap_delete(&macros, name);
}

static Macro *add_builtin(char *name, macro_handler_fn *fn) {
Expand Down

0 comments on commit 30520e5

Please sign in to comment.