diff --git a/src/builtin_functions.c b/src/builtin_functions.c
index f6cb28426e13367fc03a3306b3259bdf58f8ac82..4a6948d3a46ba353b0d26952a5371ee59ddbb159 100644
--- a/src/builtin_functions.c
+++ b/src/builtin_functions.c
@@ -5,7 +5,7 @@
 \*/
 /**/
 #include "global.h"
-RCSID("$Id: builtin_functions.c,v 1.306 2000/08/29 13:40:13 mirar Exp $");
+RCSID("$Id: builtin_functions.c,v 1.307 2000/08/31 14:40:19 grubba Exp $");
 #include "interpret.h"
 #include "svalue.h"
 #include "pike_macros.h"
@@ -5795,9 +5795,9 @@ void init_builtin_efuns(void)
   ADD_EFUN("equal",f_equal,tFunc(tMix tMix,tInt),OPT_TRY_OPTIMIZE);
 
   /* function(array(0=mixed),int|void,int|void:array(0)) */
-  ADD_FUNCTION("everynth",f_everynth,
-	       tFunc(tArr(tSetvar(0,tMix)) tOr(tInt,tVoid) tOr(tInt,tVoid),
-		     tArr(tVar(0))), 0);
+  ADD_FUNCTION2("everynth",f_everynth,
+		tFunc(tArr(tSetvar(0,tMix)) tOr(tInt,tVoid) tOr(tInt,tVoid),
+		      tArr(tVar(0))), 0, OPT_TRY_OPTIMIZE);
   
 /* function(int:void) */
   ADD_EFUN("exit",f_exit,tFunc(tInt,tVoid),OPT_SIDE_EFFECT);
@@ -5969,12 +5969,14 @@ void init_builtin_efuns(void)
 	   tFuncV(tArr(tSetvar(0,tMix)),tArr(tMix),tArr(tVar(0))),
 	   OPT_SIDE_EFFECT);
   /* function(array(0=mixed)...:array(0)) */
-  ADD_FUNCTION("splice",f_splice,
-	       tFuncV(tNone,tArr(tSetvar(0,tMix)),tArr(tVar(0))), 0);
+  ADD_FUNCTION2("splice",f_splice,
+		tFuncV(tNone,tArr(tSetvar(0,tMix)),tArr(tVar(0))), 0,
+		OPT_TRY_OPTIMIZE);
 
   /* function(array:array) */
-  ADD_FUNCTION("uniq_array", f_uniq_array,
-	       tFunc(tArr(tSetvar(0,tMix)), tArr(tVar(0))), 0);
+  ADD_FUNCTION2("uniq_array", f_uniq_array,
+		tFunc(tArr(tSetvar(0,tMix)), tArr(tVar(0))), 0,
+		OPT_TRY_OPTIMIZE);
   
 /* function(mixed:int) */
   ADD_EFUN("stringp", f_stringp,tFunc(tMix,tInt),0);
@@ -5993,8 +5995,9 @@ void init_builtin_efuns(void)
 	   OPT_EXTERNAL_DEPEND);
   
   /* function(array(0=mixed):array(0)) */
-  ADD_FUNCTION("transpose",f_transpose,
-	       tFunc(tArr(tSetvar(0,tMix)),tArr(tVar(0))), 0);
+  ADD_FUNCTION2("transpose",f_transpose,
+		tFunc(tArr(tSetvar(0,tMix)),tArr(tVar(0))), 0,
+		OPT_TRY_OPTIMIZE);
   
 /* function(string:string) */
   ADD_EFUN("upper_case",f_upper_case,tFunc(tStr,tStr),0);
@@ -6106,34 +6109,35 @@ void init_builtin_efuns(void)
 	   tFunc(tObj tStr,tInt), OPT_EXTERNAL_DEPEND);
 
   /* function(array(mapping(int:mixed)):array(int)) */
-  ADD_FUNCTION("interleave_array",f_interleave_array,
-	       tFunc(tArr(tMap(tInt,tMix)),tArr(tInt)),OPT_TRY_OPTIMIZE);
+  ADD_FUNCTION2("interleave_array", f_interleave_array,
+		tFunc(tArr(tMap(tInt, tMix)), tArr(tInt)), 0,
+		OPT_TRY_OPTIMIZE);
   /* function(array(0=mixed),array(1=mixed):array(array(array(0)|array(1))) */
-  ADD_FUNCTION("diff",f_diff,
-	       tFunc(tArr(tSetvar(0,tMix)) tArr(tSetvar(1,tMix)),
-		     tArr(tArr(tOr(tArr(tVar(0)),tArr(tVar(1)))))),
-	       OPT_TRY_OPTIMIZE);
+  ADD_FUNCTION2("diff", f_diff,
+		tFunc(tArr(tSetvar(0,tMix)) tArr(tSetvar(1,tMix)),
+		      tArr(tArr(tOr(tArr(tVar(0)),tArr(tVar(1)))))), 0,
+		OPT_TRY_OPTIMIZE);
 
   /* Generate the n:th permutation of the array given as the first argument */
-  ADD_FUNCTION("permute", f_permute, tFunc(tArray tInt,tArray), 
-               OPT_TRY_OPTIMIZE);
+  ADD_FUNCTION2("permute", f_permute, tFunc(tArray tInt,tArray), 0,
+		OPT_TRY_OPTIMIZE);
 
   /* function(array,array:array(int)) */
-  ADD_FUNCTION("diff_longest_sequence",f_diff_longest_sequence,
-	       tFunc(tArray tArray,tArr(tInt)),OPT_TRY_OPTIMIZE);
+  ADD_FUNCTION2("diff_longest_sequence", f_diff_longest_sequence,
+		tFunc(tArray tArray,tArr(tInt)), 0, OPT_TRY_OPTIMIZE);
   /* function(array,array:array(int)) */
-  ADD_FUNCTION("diff_dyn_longest_sequence",f_diff_dyn_longest_sequence,
-	       tFunc(tArray tArray,tArr(tInt)),OPT_TRY_OPTIMIZE);
+  ADD_FUNCTION2("diff_dyn_longest_sequence", f_diff_dyn_longest_sequence,
+		tFunc(tArray tArray,tArr(tInt)), 0, OPT_TRY_OPTIMIZE);
   /* function(array,array:array(array)) */
-  ADD_FUNCTION("diff_compare_table",f_diff_compare_table,
-	       tFunc(tArray tArray,tArr(tArr(tInt))),OPT_TRY_OPTIMIZE);
+  ADD_FUNCTION2("diff_compare_table", f_diff_compare_table,
+		tFunc(tArray tArray, tArr(tArr(tInt))), 0, OPT_TRY_OPTIMIZE);
   /* function(array:array(int)) */
-  ADD_FUNCTION("longest_ordered_sequence",f_longest_ordered_sequence,
-	       tFunc(tArray,tArr(tInt)),0);
+  ADD_FUNCTION2("longest_ordered_sequence", f_longest_ordered_sequence,
+		tFunc(tArray,tArr(tInt)), 0, OPT_TRY_OPTIMIZE);
   /* function(array(0=mixed),array(mixed)...:array(0)) */
-  ADD_FUNCTION("sort",f_sort,
-	       tFuncV(tArr(tSetvar(0, tMix)),tArr(tMix),tArr(tVar(0))),
-	       OPT_SIDE_EFFECT);
+  ADD_FUNCTION2("sort", f_sort,
+		tFuncV(tArr(tSetvar(0, tMix)), tArr(tMix), tArr(tVar(0))),
+		0, OPT_SIDE_EFFECT);
 
 #define tMapStuff(IN,SUB,OUTFUN,OUTSET,OUTPROG,OUTMIX,OUTARR,OUTMAP) \
   tOr7( tFuncV(IN tFuncV(SUB,tMix,tSetvar(2,tAny)),tMix,OUTFUN), \
@@ -6212,9 +6216,10 @@ void init_builtin_efuns(void)
 		      tFuncV(tNone,tMix,tSetvar(1,tMix)),tArr(tVar(1)))),
 	   OPT_TRY_OPTIMIZE);
 		
-  ADD_FUNCTION("inherit_list",f_inherit_list,tFunc(tProgram,tArr(tProgram)),0);
-  ADD_FUNCTION("function_defined",f_function_defined,
-	       tFunc(tFunction,tString),0);
+  ADD_FUNCTION2("inherit_list", f_inherit_list,
+		tFunc(tProgram,tArr(tProgram)), 0, OPT_TRY_OPTIMIZE);
+  ADD_FUNCTION2("function_defined", f_function_defined,
+	       tFunc(tFunction,tString), 0, OPT_TRY_OPTIMIZE);
 
 #ifdef DEBUG_MALLOC