Index: func_spec
===================================================================
--- func_spec	(Revision 2411)
+++ func_spec	(Arbeitskopie)
@@ -487,6 +487,7 @@
 
 object *caller_stack(int default: F_CONST0);
 int     caller_stack_depth();
+int     stack_depth();
 int     call_resolved(mixed &, null|object|string, string, ...);
 int     call_direct_resolved(mixed &, null|object|string, string, ...);
 object  previous_object(int);
Index: interpret.h
===================================================================
--- interpret.h	(Revision 2433)
+++ interpret.h	(Arbeitskopie)
@@ -214,6 +214,7 @@
 extern svalue_t *v_funcall (svalue_t *sp, int num_arg);
 extern svalue_t *v_call_direct_resolved (svalue_t *sp, int num_arg);
 extern svalue_t *v_call_resolved (svalue_t *sp, int num_arg);
+extern svalue_t *f_stack_depth (svalue_t *sp);
 extern svalue_t *f_caller_stack_depth (svalue_t *sp);
 extern svalue_t *f_caller_stack (svalue_t *sp);
 extern svalue_t *f_get_eval_cost (svalue_t *sp);
Index: interpret.c
===================================================================
--- interpret.c	(Revision 2433)
+++ interpret.c	(Arbeitskopie)
@@ -19537,6 +19537,24 @@
 #endif /* TRACE_CODE */
 
 /*-------------------------------------------------------------------------*/
+svalue_t *
+f_stack_depth (svalue_t *sp)
+/* EFUN stack_depth()
+ *
+ *   int stack_depth(void)
+ *
+ * Returns the number of frames on the control stack. Can be used to estimate
+ * the still available stack depth in recursive code.
+ */
+
+{
+    push_number(sp, (p_int)(csp - CONTROL_STACK) + 1);
+    
+    return sp;
+} /* f_stack_depth() */
+
+
+/*-------------------------------------------------------------------------*/
 static INLINE int
 caller_stack_depth(void)
 /* static helper function for f_caller_stack_depth() and f_caller_stack() for
