make applicable smob calls cheaper, and fix a memory leak
[bpt/guile.git] / libguile / procprop.c
index 56bd389..8e234ed 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995,1996,1998,2000,2001,2003,2004, 2006, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+/* Copyright (C) 1995,1996,1998,2000,2001,2003,2004, 2006, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
  * 
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public License
@@ -72,7 +72,11 @@ scm_i_procedure_arity (SCM proc, int *req, int *opt, int *rest)
         {
           if (!SCM_SMOB_APPLICABLE_P (proc))
             return 0;
-          proc = scm_i_smob_apply_trampoline (proc);
+          if (scm_i_program_arity (SCM_SMOB_DESCRIPTOR (proc).apply_trampoline,
+                                   req, opt, rest))
+            /* The trampoline gets the smob too, which users don't
+               see.  */
+            *req -= 1;
         }
       else
         return 0;