jmp
命令で次の処理に移動する__code
で宣言する__code cbc_read(__code (*next)(int ret)){
struct file *f;
int n;
char *p;
if(argfd(0, 0, &f) < 0 || argint(2, &n) < 0 || argptr(1, &p, n) < 0) {
goto next(-1);
}
goto cbc_fileread(f, p, n, next);
}
read
システムコールの例goto
文で呼び出すvoid syscall(void)
{
int num;
int ret;
if((num >= NELEM(syscalls)) && (num <= NELEM(cbccodes)) && cbccodes[num]) {
proc->cbc_arg.cbc_console_arg.num = num;
goto (cbccodes[num])(cbc_ret);
}
プログラマから見るとCodeGearからCodeGearへの継続のみ
実際は1度contextを参照するMetaCodeGearに継続する