Erlang Central

Difference between revisions of "Adding my own BIF"

From ErlangCentral Wiki

(3 intermediate revisions by one user 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.
 +
===steps===
 
:1. run configure
 
:1. run configure
 
:2. add your bifs to erts/emulator/beam/bif.tab
 
:2. add your bifs to erts/emulator/beam/bif.tab
Line 22:Line 25:
 
</pre>
 
</pre>
 
:6. run make; make install
 
:6. run make; make install
 +
===notes===
 +
*steps 0-3 need only be done once.
  
steps 0-3 need only be done once.
+
*note that if you add
 
+
<pre>
note that if you add
+
<tt>
+
 
bif re:grep/2
 
bif re:grep/2
</tt>
+
</pre>
 
to bif.tab there should be a  
 
to bif.tab there should be a  
 
<tt>
 
<tt>
Line 34:Line 37:
 
</tt>
 
</tt>
 
that implements
 
that implements
<tt>
+
<pre>
 
BIF_RETTYPE re_grep_2(BIF_ALIST_2);
 
BIF_RETTYPE re_grep_2(BIF_ALIST_2);
</tt>
+
</pre>
 
[[Category:HowTo]]
 
[[Category:HowTo]]

Revision as of 17:13, 31 July 2006

caveat

unless you really know what you're doing, you'll be better off using a linked-in driver or a port.

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

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