Erlang Central

Difference between revisions of "Adding my own BIF"

From ErlangCentral Wiki

Line 1:Line 1:
0) run configure
+
0) run configure
  
1) add your bifs to erts/emulator/beam/bif.tab
+
1) add your bifs to erts/emulator/beam/bif.tab
  
 
e.g.
 
e.g.
Line 7:Line 7:
 
bif re:compile/1
 
bif re:compile/1
  
2) create a C file
+
2) create a C file
  
 
e.g.
 
e.g.
 
erts/emulator/beam/erl_bif_re.c
 
erts/emulator/beam/erl_bif_re.c
  
3) add your C file to erts/emulator/<arch>/Makefile
+
3) add your C file to erts/emulator/<arch>/Makefile
  
 
e.g.
 
e.g.
 
RUN_OBJS = $(OBJDIR)/erl_bif_re.o \
 
RUN_OBJS = $(OBJDIR)/erl_bif_re.o \
  
4) implement your bifs by stealing bits from existing erl_bif_*.c files
+
4) implement your bifs by stealing bits from existing erl_bif_*.c files
  
 
e.g.
 
e.g.
 
BIF_RETTYPE re_grep_2(BIF_ALIST_2){
 
BIF_RETTYPE re_grep_2(BIF_ALIST_2){
Eterm result;
+
Eterm result;
result = magic_function();
+
result = magic_function();
BIF_RET(result);
+
BIF_RET(result);
 
}
 
}
  
5) run make; make install
+
5) run make; make install
  
  steps 0-3 need only be done once.
+
steps 0-3 need only be done once.
  
  note that if you add
+
note that if you add
 
bif re:grep/2
 
bif re:grep/2
  to bif.tab
+
 
there should be a erl_bif_re.c
+
to bif.tab there should be a  
  that implements
+
erl_bif_re.c
 +
 
 +
that implements
 
BIF_RETTYPE re_grep_2(BIF_ALIST_2);
 
BIF_RETTYPE re_grep_2(BIF_ALIST_2);

Revision as of 15:47, 31 July 2006

0) run configure
1) add your bifs to erts/emulator/beam/bif.tab

e.g. bif re:grep/2 bif re:compile/1

2) create a C file

e.g. erts/emulator/beam/erl_bif_re.c

3) add your C file to erts/emulator/<arch>/Makefile

e.g. RUN_OBJS = $(OBJDIR)/erl_bif_re.o \

4) implement your bifs by stealing bits from existing erl_bif_*.c files

e.g. BIF_RETTYPE re_grep_2(BIF_ALIST_2){ Eterm result; result = magic_function(); BIF_RET(result); }

5) run make; make install

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);