funcenum_t *funcenum_for_symbol(symbol *sym) { functag_t ft; memset(&ft, 0, sizeof(ft)); ft.ret_tag = sym->tag; ft.usage = uPUBLIC & (sym->usage & uRETVALUE); ft.argcount = 0; ft.ommittable = FALSE; for (arginfo *arg = sym->dim.arglist; arg->ident; arg++) { funcarg_t *dest = &ft.args[ft.argcount++]; dest->tagcount = arg->numtags; memcpy(dest->tags, arg->tags, arg->numtags * sizeof(int)); dest->dimcount = arg->numdim; memcpy(dest->dims, arg->dim, arg->numdim * sizeof(int)); dest->ident = arg->ident; dest->fconst = !!(arg->usage & uCONST); dest->ommittable = FALSE; } char name[METHOD_NAMEMAX+1]; UTIL_Format(name, sizeof(name), "::ft:%s:%d:%d", sym->name, sym->addr, sym->codeaddr); funcenum_t *fe = funcenums_add(name); functags_add(fe, &ft); return fe; }
funcenum_t *funcenum_for_symbol(symbol *sym) { auto ft = ke::MakeUnique<functag_t>(); ft->ret_tag = sym->tag; ft->usage = uPUBLIC & (sym->usage & uRETVALUE); ft->argcount = 0; ft->ommittable = FALSE; for (arginfo& arg : sym->function()->args) { if (!arg.ident) break; funcarg_t *dest = &ft->args[ft->argcount++]; dest->tagcount = 1; dest->tags[0] = arg.tag; dest->dimcount = arg.numdim; memcpy(dest->dims, arg.dim, arg.numdim * sizeof(int)); dest->ident = arg.ident; dest->fconst = !!(arg.usage & uCONST); dest->ommittable = FALSE; } char name[METHOD_NAMEMAX+1]; ke::SafeSprintf(name, sizeof(name), "::ft:%s:%d:%d", sym->name(), sym->addr(), sym->codeaddr); funcenum_t *fe = funcenums_add(name); functags_add(fe, ke::Move(ft)); return fe; }