bif lists_reverse_2

lists_reverse_2代码:


熟悉list的操作,例如
is_nil(list)
is_not_list(list)

list_val(list) 返回Eterm*
make_list(Eterm* hp) 返回Eterm list

CAR(Eterm*)
CDR(Eterm*)
CONS(Eterm* hp, Eterm* car, Eterm* cdr)

 

进程堆的操作:
HEAP_TOP(BIF_P)
HeapWordsLeft(BIF_P)

 

bif的操作:
BIF_ALIST_2
BIF_ARG_1
BIF_RET(BIF_ARG_2)
BIF_ERROR(BIF_P, BADARG)

 

让bif trap:
 BUMP_ALL_REDS(BIF_P);
 BIF_TRAP2(bif_export[BIF_lists_reverse_2], BIF_P, list, result);

 

bif.c中的send_2充分使用BIF_TRAP2和ERTS_BIF_YIELD2达到软实时:
ERTS_BIF_YIELD2(bif_export[BIF_send_2], p, to, msg)
yield其实就是:
    ERTS_VBUMP_ALL_REDS((P));      \
    BIF_TRAP2((TRP), (P), (A0), (A1)); 

 

你可能感兴趣的:(C++,c,C#,HP)