static Val * randstruct(int depth) { Val *r, *p; int i, n; char buff[1024]; r = gcmalloc(sizeof(Val)); r->t = STRUCT; r->Cstruct.members = vec(); n = rand() % MAXSTRUCTM; for(i = 0; i < n; i++) vecappend(r->Cstruct.members, randval(depth + 1)); snprintf(buff, sizeof buff, "s%d", structcount++); r->Cstruct.name = gcstrdup(buff); printf("struct %s {\n", r->Cstruct.name); for(i = 0; i < r->Cstruct.members->len; i++) { p = vecget(r->Cstruct.members, i); printf("\t"); printvaltype(p); printf(" m%d;\n", i); } printf("};\n"); return r; }
void thThrow(char *name) { struct bgbgc_handler_s *ctx; if(dyex_handler_tls<0)dyex_handler_tls=thAllocTls(); ctx=thGetTlsValue(dyex_handler_tls); if(ctx->final_f) ctx->final_f(ctx->data); ctx->str=gcstrdup(name); longjmp(ctx->jmp, -1); }