Пример #1
0
D_Sym *
find_D_Sym_in_Scope(D_Scope *st, D_Scope *cur, char *name, char *end) {
  int len = end ? end - name : strlen(name);
  uint h = strhashl(name, len);
  D_Sym *s = find_D_Sym_in_Scope_internal(cur, name, len, h);
  if (s)
    return current_D_Sym(st, s);
  return NULL;
}
Пример #2
0
D_Sym *
find_global_D_Sym(D_Scope *st, char *name, char *end) {
  D_Sym *s;
  int len = end ? end - name : strlen(name);
  uint h = strhashl(name, len);
  D_Scope *cur = st;
  while (cur->up) cur = cur->search;
  s = find_D_Sym_internal(cur, name, len, h);
  if (s)
    return current_D_Sym(st, s);
  return NULL;
}
Пример #3
0
D_Sym *
new_D_Sym(D_Scope *st, char *name, char *end, int sizeof_D_Sym) {
    int len = end - name;
    D_Sym *s = MALLOC(sizeof_D_Sym);
    memset(s, 0, sizeof_D_Sym);
    s->name = name;
    s->len = len;
    s->hash = strhashl(name, len);
    if (st->hash) {
        symhash_add(st->hash, s);
    } else {
        s->next = st->ll;
        st->ll = s;
    }
    return s;
}
Пример #4
0
D_Sym *
new_D_Sym(D_Scope *st, char *name, char *end, int sizeof_D_Sym) {
  int len = end ? end - name : name ? strlen(name) : 0;
  D_Sym *s = reinterpret_cast<D_Sym*>(MALLOC(sizeof_D_Sym));
  memset(s, 0, sizeof_D_Sym);
  s->name = name;
  s->len = len;
  s->hash = strhashl(name, len);
  s->scope = st;
  if (st) {
    if (st->hash) {
      symhash_add(st->hash, s);
    } else {
      s->next = st->ll;
      st->ll = s;
    }
  }
  return s;
}
Пример #5
0
D_Sym *
find_D_Sym_in_Scope(D_Scope *st, char *name, char *end) {
    D_Sym *ll;
    int len = end - name;
    uint h = strhashl(name, len);
    for (; st ; st = st->search) {
        if (st->hash)
            ll = st->hash->syms.v[h % st->hash->syms.n];
        else
            ll = st->ll;
        while (ll) {
            if (ll->hash == h && ll->len == len && !strncmp(ll->name, name, len))
                return ll;
            ll = ll->next;
        }
        if (!st->search || st->search->up != st->up)
            break;
    }
    return NULL;
}
Пример #6
0
D_Sym *
find_D_Sym(D_Scope *st, char *name, char *end) {
    int len = end - name;
    uint h = strhashl(name, len);
    return find_sym_internal(st, st, name, len, h);
}