Adding my own BIF
From Erlang Community
(Difference between revisions)
| Revision as of 15:45, 31 July 2006 (edit) Massemanet (Talk | contribs) ← Previous diff |
Current revision (17:13, 31 July 2006) (edit) (undo) Massemanet (Talk | contribs) |
||
| (7 intermediate revisions not shown.) | |||
| Line 1: | Line 1: | ||
| - | + | ===caveat=== | |
| - | + | unless you really know what you're doing, you'll be better off using a linked-in driver or a port. | |
| - | 1 | + | ===steps=== |
| - | + | :1. run configure | |
| - | + | :2. add your bifs to erts/emulator/beam/bif.tab | |
| + | <tt> | ||
| bif re:grep/2 | bif re:grep/2 | ||
| bif re:compile/1 | bif re:compile/1 | ||
| - | + | </tt> | |
| - | + | :3. create a C file | |
| - | + | <tt> | |
| - | + | ||
| erts/emulator/beam/erl_bif_re.c | erts/emulator/beam/erl_bif_re.c | ||
| - | + | </tt> | |
| - | + | :4. add your C file to erts/emulator/<arch>/Makefile | |
| - | + | <tt> | |
| - | + | ||
| RUN_OBJS = $(OBJDIR)/erl_bif_re.o \ | RUN_OBJS = $(OBJDIR)/erl_bif_re.o \ | ||
| - | + | </tt> | |
| - | + | :5. implement your bifs by stealing bits from existing erl_bif_*.c files | |
| - | + | <pre> | |
| - | + | ||
| BIF_RETTYPE re_grep_2(BIF_ALIST_2){ | BIF_RETTYPE re_grep_2(BIF_ALIST_2){ | ||
| - | + | Eterm result; | |
| - | + | result = magic_function(); | |
| - | + | BIF_RET(result); | |
| } | } | ||
| + | </pre> | ||
| + | :6. run make; make install | ||
| + | ===notes=== | ||
| + | *steps 0-3 need only be done once. | ||
| - | + | *note that if you add | |
| - | + | <pre> | |
| - | + | ||
| - | + | ||
| - | + | ||
| bif re:grep/2 | bif re:grep/2 | ||
| - | + | </pre> | |
| - | there should be a erl_bif_re.c | + | to bif.tab there should be a |
| - | + | <tt> | |
| + | erl_bif_re.c | ||
| + | </tt> | ||
| + | that implements | ||
| + | <pre> | ||
| BIF_RETTYPE re_grep_2(BIF_ALIST_2); | BIF_RETTYPE re_grep_2(BIF_ALIST_2); | ||
| + | </pre> | ||
| + | [[Category:HowTo]] | ||
Current revision
[edit] caveat
unless you really know what you're doing, you'll be better off using a linked-in driver or a port.
[edit] steps
- 1. run configure
- 2. add your bifs to erts/emulator/beam/bif.tab
bif re:grep/2 bif re:compile/1
- 3. create a C file
erts/emulator/beam/erl_bif_re.c
- 4. add your C file to erts/emulator/<arch>/Makefile
RUN_OBJS = $(OBJDIR)/erl_bif_re.o \
- 5. implement your bifs by stealing bits from existing erl_bif_*.c files
BIF_RETTYPE re_grep_2(BIF_ALIST_2){
Eterm result;
result = magic_function();
BIF_RET(result);
}
- 6. run make; make install
[edit] notes
- steps 0-3 need only be done once.
- note that if you add
bif re:grep/2
to bif.tab there should be a erl_bif_re.c that implements
BIF_RETTYPE re_grep_2(BIF_ALIST_2);

Digg It
Del.icio.us
Reddit
Facebook
Stumble Upon
Technorati

