X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=code.c;h=932bb9ab5d8766c3a43f508a43b5add5b27825ab;hb=69ef53984e88bb38a08ea7263f1832aea9ad2e6b;hp=2200d234dc8229f46172e576699f5499d56fb7d0;hpb=9b2589b98aaebf080ef327cbc572846937fe53c7;p=umpf.git diff --git a/code.c b/code.c index 2200d23..932bb9a 100644 --- a/code.c +++ b/code.c @@ -34,35 +34,34 @@ get_bucket_number(char* name) /* return var struct or NULL if not found */ struct variable* -get_var_struct(char* name, struct list* hash) +get_var_struct(char* name, enum var_type type, struct list* hash) { int n; struct variable *p; n = get_bucket_number(name); - int nocase = isupper(*name); LIST_FOREACH(p, hash + n) - if (!(nocase ? strcasecmp : strcmp)(p->name,name)) + if (!strcasecmp(p->name, name) && p->type == type) return p; return NULL; } int -find_var(char* name, struct list* hash) +find_var(char* name, enum var_type type, struct list* hash) { int n; struct variable *p; n = get_bucket_number(name); - int nocase = isupper(*name); LIST_FOREACH(p, hash + n) - if (!(nocase ? strcasecmp : strcmp)(p->name,name)) + if (!strcasecmp(p->name, name) && p->type == type) return p->varcode; p = xmalloc(sizeof(struct variable)); p->name = xstrdup(name); p->varcode = current_varcode++; + p->type = type; list_add_last(hash+n, &p->car); return p->varcode;