void *code_table[10];
int pc;
static void *label_table[3];
void
threaded()
{
int my_pc;
static const void *labels[] = {
&&L01,
&&L02,
&&L03,
};
if ( label_table[0] == 0 ) {
int i;
for( i = 0; i < sizeof(labels)/sizeof(void *); ++i ) {
label_table[i] = (void *)labels[i];
}
return;
}
my_pc = pc;
goto *code_table[my_pc++];
L01:
printf("L01\n");
goto *code_table[my_pc++];
L02:
printf("L02\n");
goto *code_table[my_pc++];
L03:
printf("L03\n");
pc = my_pc;
return;
}
int
main(int argc, char **argv)
{
threaded();
code_table[0] = label_table[0];
code_table[1] = label_table[1];
code_table[2] = label_table[0];
code_table[3] = label_table[1];
code_table[4] = label_table[2];
pc = 0;
threaded();
}