Lines Matching refs:ctx

4524 #define CHK_OOM(x) if (!(x)) { upb_status_setoom(ctx->status); return false; }
4536 static char* strviewdup(const symtab_addctx *ctx, upb_strview view) {
4537 return upb_strdup2(view.data, view.size, ctx->alloc);
4548 static const char *makefullname(const symtab_addctx *ctx, const char *prefix,
4553 char *ret = upb_malloc(ctx->alloc, n + name.size + 2);
4561 return strviewdup(ctx, name);
4610 static bool symtab_add(const symtab_addctx *ctx, const char *name,
4613 if (upb_strtable_lookup(ctx->addtab, name, &tmp) ||
4614 upb_strtable_lookup(&ctx->symtab->syms, name, &tmp)) {
4615 upb_status_seterrf(ctx->status, "duplicate symbol '%s'", name);
4619 CHK_OOM(upb_strtable_insert3(ctx->addtab, name, strlen(name), v, ctx->tmp));
4657 const void *symtab_resolve(const symtab_addctx *ctx, const upb_fielddef *f,
4661 if (!resolvename(ctx->addtab, f, base, sym, type, ctx->status, &ret) &&
4662 !resolvename(&ctx->symtab->syms, f, base, sym, type, ctx->status, &ret)) {
4663 if (upb_ok(ctx->status)) {
4664 upb_status_seterrf(ctx->status, "couldn't resolve name '%s'", sym.data);
4672 const symtab_addctx *ctx, upb_msgdef *m,
4680 o->full_name = makefullname(ctx, m->full_name, name);
4683 CHK_OOM(symtab_add(ctx, o->full_name, v));
4684 CHK_OOM(upb_strtable_insert3(&m->ntof, name.data, name.size, v, ctx->alloc));
4686 CHK_OOM(upb_inttable_init2(&o->itof, UPB_CTYPE_CONSTPTR, ctx->alloc));
4687 CHK_OOM(upb_strtable_init2(&o->ntof, UPB_CTYPE_CONSTPTR, ctx->alloc));
4692 static bool parse_default(const symtab_addctx *ctx, const char *str, size_t len,
4775 f->defaultval.str = newstr(ctx->alloc, str, len);
4779 f->defaultval.str = newstr(ctx->alloc, str, len);
4788 static void set_default_default(const symtab_addctx *ctx, upb_fielddef *f) {
4805 f->defaultval.str = newstr(ctx->alloc, NULL, 0);
4816 const symtab_addctx *ctx, const char *prefix, upb_msgdef *m,
4818 upb_alloc *alloc = ctx->alloc;
4828 upb_status_seterrmsg(ctx->status, "field has no name");
4833 CHK(upb_isident(name, false, ctx->status));
4834 full_name = makefullname(ctx, prefix, name);
4839 ctx, google_protobuf_FieldDescriptorProto_json_name(field_proto));
4841 json_name = makejsonname(shortname, ctx->alloc);
4847 upb_status_seterrf(ctx->status, "invalid field number (%u)", field_number);
4861 upb_status_seterrf(ctx->status, "duplicate field name (%s)", shortname);
4866 upb_status_seterrf(ctx->status, "duplicate json_name (%s)", json_name);
4871 upb_status_seterrf(ctx->status, "duplicate field number (%u)",
4889 if (ctx->layouts) {
4905 f = (upb_fielddef*)&ctx->file->exts[ctx->file->ext_count++];
4907 CHK_OOM(symtab_add(ctx, full_name, pack_def(f, UPB_DEFTYPE_FIELD)));
4912 f->file = ctx->file;
4926 upb_status_seterrf(ctx->status, "proto3 fields cannot be required (%s)",
4938 upb_status_seterrf(ctx->status,
4945 upb_status_seterrf(ctx->status,
4952 upb_status_seterrf(ctx->status, "oneof_index out of range (%s)",
4987 const symtab_addctx *ctx, const char *prefix,
4995 CHK(upb_isident(name, false, ctx->status));
4997 e = (upb_enumdef*)&ctx->file->enums[ctx->file->enum_count++];
4998 e->full_name = makefullname(ctx, prefix, name);
4999 CHK_OOM(symtab_add(ctx, e->full_name, pack_def(e, UPB_DEFTYPE_ENUM)));
5001 CHK_OOM(upb_strtable_init2(&e->ntoi, UPB_CTYPE_INT32, ctx->alloc));
5002 CHK_OOM(upb_inttable_init2(&e->iton, UPB_CTYPE_CSTR, ctx->alloc));
5004 e->file = ctx->file;
5010 upb_status_seterrf(ctx->status,
5019 char *name2 = strviewdup(ctx, name);
5024 upb_status_seterrf(ctx->status,
5031 upb_status_seterrf(ctx->status, "duplicate enum label '%s'", name2);
5037 upb_strtable_insert3(&e->ntoi, name2, strlen(name2), v, ctx->alloc));
5041 CHK_OOM(upb_inttable_insert2(&e->iton, num, v, ctx->alloc));
5045 upb_inttable_compact2(&e->iton, ctx->alloc);
5050 static bool create_msgdef(symtab_addctx *ctx, const char *prefix,
5062 CHK(upb_isident(name, false, ctx->status));
5064 m = (upb_msgdef*)&ctx->file->msgs[ctx->file->msg_count++];
5065 m->full_name = makefullname(ctx, prefix, name);
5066 CHK_OOM(symtab_add(ctx, m->full_name, pack_def(m, UPB_DEFTYPE_MSG)));
5068 CHK_OOM(upb_inttable_init2(&m->itof, UPB_CTYPE_CONSTPTR, ctx->alloc));
5069 CHK_OOM(upb_strtable_init2(&m->ntof, UPB_CTYPE_CONSTPTR, ctx->alloc));
5071 m->file = ctx->file;
5080 if (ctx->layouts) {
5081 m->layout = *ctx->layouts;
5082 ctx->layouts++;
5085 m->layout = upb_malloc(ctx->alloc, sizeof(*m->layout));
5090 m->oneofs = upb_malloc(ctx->alloc, sizeof(*m->oneofs) * n);
5092 CHK(create_oneofdef(ctx, m, oneofs[i]));
5097 m->fields = upb_malloc(ctx->alloc, sizeof(*m->fields) * n);
5099 CHK(create_fielddef(ctx, m->full_name, m, fields[i]));
5102 CHK(assign_msg_indices(m, ctx->status));
5103 CHK(check_oneofs(m, ctx->status));
5105 upb_inttable_compact2(&m->itof, ctx->alloc);
5111 CHK(create_enumdef(ctx, m->full_name, enums[i]));
5116 CHK(create_msgdef(ctx, m->full_name, msgs[i]));
5165 static bool resolve_fielddef(const symtab_addctx *ctx, const char *prefix,
5172 upb_status_seterrf(ctx->status,
5179 f->msgdef = symtab_resolve(ctx, f, prefix, name, UPB_DEFTYPE_MSG);
5185 upb_status_seterrf(ctx->status, "field '%s' is missing type name",
5193 f->sub.msgdef = symtab_resolve(ctx, f, prefix, name, UPB_DEFTYPE_MSG);
5196 f->sub.enumdef = symtab_resolve(ctx, f, prefix, name, UPB_DEFTYPE_ENUM);
5207 upb_status_seterrf(ctx->status,
5214 upb_status_seterrf(ctx->status,
5220 if (!parse_default(ctx, defaultval.data, defaultval.size, f)) {
5221 upb_status_seterrf(ctx->status,
5228 set_default_default(ctx, f);
5235 symtab_addctx *ctx, upb_filedef *file,
5237 upb_alloc *alloc = ctx->alloc;
5262 upb_status_seterrmsg(ctx->status, "File has no name");
5267 strviewdup(ctx, google_protobuf_FileDescriptorProto_name(file_proto));
5274 CHK(upb_isident(package, true, ctx->status));
5275 file->package = strviewdup(ctx, package);
5289 upb_status_seterrf(ctx->status, "Invalid syntax '" UPB_STRVIEW_FORMAT "'",
5302 ctx,
5307 ctx, google_protobuf_FileOptions_php_namespace(file_options_proto));
5319 if (!upb_strtable_lookup2(&ctx->symtab->files, dep_name.data,
5321 upb_status_seterrf(ctx->status,
5333 CHK(create_msgdef(ctx, file->package, msgs[i]));
5339 CHK(create_enumdef(ctx, file->package, enums[i]));
5347 CHK(create_fielddef(ctx, file->package, NULL, exts[i]));
5352 CHK(resolve_fielddef(ctx, file->package, (upb_fielddef*)&file->exts[i]));
5359 CHK(resolve_fielddef(ctx, m->full_name, (upb_fielddef*)&m->fields[j]));
5363 if (!ctx->layouts) {
5366 make_layout(ctx->symtab, m);
5373 static bool upb_symtab_addtotabs(upb_symtab *s, symtab_addctx *ctx) {
5374 const upb_filedef *file = ctx->file;
5381 upb_strtable_begin(&iter, ctx->addtab);
5506 symtab_addctx ctx;
5508 ctx.file = file;
5509 ctx.symtab = s;
5510 ctx.alloc = alloc;
5511 ctx.tmp = upb_arena_alloc(tmparena);
5512 ctx.addtab = &addtab;
5513 ctx.layouts = layouts;
5514 ctx.status = status;
5516 ok = file && upb_strtable_init2(&addtab, UPB_CTYPE_CONSTPTR, ctx.tmp) &&
5517 build_filedef(&ctx, file, file_proto) && upb_symtab_addtotabs(s, &ctx);