Ejemplo n.º 1
0
Archivo: upb.c Proyecto: chenbk85/upb
static upb_flow_t PyUpb_Message_AppendStringValue(
    void *a, upb_value fval, upb_value val) {
  (void)fval;
  PyObject **elem = upb_stdarray_append(a, sizeof(void*));
  *elem = PyString_FromStringAndSize(NULL, upb_value_getstrref(val)->len);
  upb_strref_read(upb_value_getstrref(val), PyString_AsString(*elem));
  return UPB_CONTINUE;
}
Ejemplo n.º 2
0
Archivo: upb.c Proyecto: chenbk85/upb
static upb_flow_t PyUpb_Message_StringValue(
    void *m, upb_value fval, upb_value val) {
  PyObject **str = PyUpb_Accessor_GetPtr(m, fval);
  if (*str) { Py_DECREF(*str); }
  *str = PyString_FromStringAndSize(NULL, upb_value_getstrref(val)->len);
  upb_strref_read(upb_value_getstrref(val), PyString_AsString(*str));
  upb_stdmsg_sethas(m, fval);
  return UPB_CONTINUE;
}
Ejemplo n.º 3
0
static bool upb_fielddef_resolve(upb_fielddef *f, upb_def *def, upb_status *s) {
  assert(upb_dyncast_unresolveddef(f->def));
  upb_def_unref(f->def);
  f->def = def;
  if (f->type == UPB_TYPE(ENUM) && f->default_is_symbolic) {
    // Resolve the enum's default from a string to an integer.
    upb_strref *str = (upb_strref*)upb_value_getstrref(f->defaultval);
    assert(str);  // Should point to either a real default or the empty string.
    upb_enumdef *e = upb_downcast_enumdef(f->def);
    int32_t val = 0;
    // Could do a sanity check that the default value does not have embedded
    // NULLs.
    if (str->ptr[0] == '\0') {
      upb_value_setint32(&f->defaultval, e->defaultval);
    } else {
      bool success = upb_enumdef_ntoi(e, str->ptr, &val);
      if (!success) {
        upb_status_seterrf(
            s, "Default enum value (%s) is not a member of the enum", str);
        return false;
      }
      upb_value_setint32(&f->defaultval, val);
    }
    upb_strref_free(str);
  }
  return true;
}
Ejemplo n.º 4
0
void upb_fielddef_setdefaultstr(upb_fielddef *f, const void *str, size_t len) {
  assert(upb_isstring(f) || f->type == UPB_TYPE(ENUM));
  const upb_strref *ref = upb_value_getstrref(f->defaultval);
  assert(ref);
  upb_strref_free((upb_strref*)ref);
  upb_value_setstrref(&f->defaultval, upb_strref_newl(str, len));
  f->default_is_symbolic = true;
}
Ejemplo n.º 5
0
static void upb_fielddef_uninit_default(upb_fielddef *f) {
  if (upb_isstring(f) || f->default_is_symbolic) {
    upb_strref_free((upb_strref*)upb_value_getstrref(f->defaultval));
  }
}