Ejemplo n.º 1
0
const upb_msgdef *upb_symtab_lookupmsg(const upb_symtab *s, const char *sym) {
  upb_rwlock_rdlock(&s->lock);
  upb_symtab_ent *e = upb_strtable_lookup(&s->symtab, sym);
  upb_msgdef *ret = NULL;
  if(e && e->def->type == UPB_DEF_MSG) {
    ret = upb_downcast_msgdef(e->def);
    upb_def_ref(UPB_UPCAST(ret));
  }
  upb_rwlock_unlock(&s->lock);
  return ret;
}
Ejemplo n.º 2
0
const upb_def *upb_symtab_lookup(const upb_symtab *s, const char *sym) {
  upb_rwlock_rdlock(&s->lock);
  upb_symtab_ent *e = upb_strtable_lookup(&s->symtab, sym);
  upb_def *ret = NULL;
  if(e) {
    ret = e->def;
    upb_def_ref(ret);
  }
  upb_rwlock_unlock(&s->lock);
  return ret;
}
Ejemplo n.º 3
0
const upb_def *upb_symtab_resolve(const upb_symtab *s, const char *base,
                                  const char *sym) {
  upb_rwlock_rdlock(&s->lock);
  upb_symtab_ent *e = upb_resolve(&s->symtab, base, sym);
  upb_def *ret = NULL;
  if(e) {
    ret = e->def;
    upb_def_ref(ret);
  }
  upb_rwlock_unlock(&s->lock);
  return ret;
}
Ejemplo n.º 4
0
Archivo: test_def.c Proyecto: atdt/upb
static void test_cycles() {
  bool ok;
  upb_symtab *s = load_test_proto(&s);
  const upb_msgdef *m;
  const upb_fielddef *f;
  const upb_def *def;
  const upb_def *def2;

  /* Test cycle detection by making a cyclic def's main refcount go to zero
   * and then be incremented to one again. */
  def = upb_symtab_lookup(s, "A");
  upb_def_ref(def, &def);
  ASSERT(def);
  ASSERT(upb_def_isfrozen(def));
  upb_symtab_unref(s, &s);

  /* Message A has only one subfield: "optional B b = 1". */
  m = upb_downcast_msgdef(def);
  f = upb_msgdef_itof(m, 1);
  ASSERT(f);
  ASSERT(upb_fielddef_hassubdef(f));
  ASSERT(upb_msgdef_ntofz(m, "b") == f);
  ASSERT(upb_msgdef_ntof(m, "b", 1) == f);
  def2 = upb_fielddef_subdef(f);
  ASSERT(upb_downcast_msgdef(def2));
  ok = strcmp(upb_def_fullname(def2), "B") == 0;
  ASSERT(ok);

  upb_def_ref(def2, &def2);
  upb_def_unref(def, &def);

  /* We know "def" is still alive because it's reachable from def2. */
  ok = strcmp(upb_def_fullname(def), "A") == 0;
  ASSERT(ok);
  upb_def_unref(def2, &def2);
}
Ejemplo n.º 5
0
Archivo: def.c Proyecto: Phuehvk/upb
void upb_msgdef_ref(const upb_msgdef *m, const void *owner) {
  upb_def_ref(upb_upcast(m), owner);
}
Ejemplo n.º 6
0
Archivo: def.c Proyecto: Phuehvk/upb
void upb_fielddef_ref(const upb_fielddef *f, const void *owner) {
  upb_def_ref(upb_upcast(f), owner);
}
Ejemplo n.º 7
0
Archivo: def.c Proyecto: Phuehvk/upb
void upb_enumdef_ref(const upb_enumdef *e, const void *owner) {
  upb_def_ref(upb_upcast(e), owner);
}
Ejemplo n.º 8
0
Archivo: def.c Proyecto: YauzZ/upb
void upb_fielddef_ref(const upb_fielddef *f, const void *owner) {
  upb_def_ref(UPB_UPCAST(f), owner);
}
Ejemplo n.º 9
0
Archivo: def.c Proyecto: YauzZ/upb
void upb_enumdef_ref(const upb_enumdef *e, const void *owner) {
  upb_def_ref(UPB_UPCAST(e), owner);
}
Ejemplo n.º 10
0
Archivo: def.c Proyecto: YauzZ/upb
void upb_msgdef_ref(const upb_msgdef *m, const void *owner) {
  upb_def_ref(UPB_UPCAST(m), owner);
}