[gnumeric] Deriv: fix ln.



commit c07b5790ae17fd6cbb2a336293ad1dfc09dcacb0
Author: Morten Welinder <terra gnome org>
Date:   Sun May 27 22:14:14 2018 -0400

    Deriv: fix ln.

 plugins/fn-math/functions.c |  3 ++-
 src/expr-deriv.c            |  7 ++++--
 src/expr.c                  | 60 +++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 67 insertions(+), 3 deletions(-)
---
diff --git a/plugins/fn-math/functions.c b/plugins/fn-math/functions.c
index b26a6e130..b89626742 100644
--- a/plugins/fn-math/functions.c
+++ b/plugins/fn-math/functions.c
@@ -1315,7 +1315,8 @@ gnumeric_ln (GnmFuncEvalInfo *ei, GnmValue const * const *argv)
 }
 
 static GnmExpr const *
-gnumeric_ln_deriv (GnmExpr const *expr, GnmEvalPos const *ep,
+gnumeric_ln_deriv (GnmFunc *func,
+                  GnmExpr const *expr, GnmEvalPos const *ep,
                   GnmExprDeriv *info, gpointer data)
 {
        GnmExpr const *deriv =
diff --git a/src/expr-deriv.c b/src/expr-deriv.c
index a46af5edb..e7cb07886 100644
--- a/src/expr-deriv.c
+++ b/src/expr-deriv.c
@@ -89,12 +89,12 @@ gnm_expr_deriv_info_get_type (void)
        return t;
 }
 
-void
 /**
  * gnm_expr_deriv_info_set_var:
  * @deriv: #GnmExprDeriv
  * @var: (transfer none): location of variable
  */
+void
 gnm_expr_deriv_info_set_var (GnmExprDeriv *deriv, GnmEvalPos const *var)
 {
        deriv->var = *var;
@@ -567,8 +567,11 @@ gnm_expr_deriv (GnmExpr const *expr,
                                 gnm_expr_new_funcall1 (fln, gnm_expr_copy (a)), 0);
                        GnmExpr const *s = madd (t1, 0, t2, 0);
                        return mmul (expr, 1, s, 0);
-               } else
+               } else {
+                       gnm_expr_free (da);
+                       gnm_expr_free (db);
                        return NULL;
+               }
                COMMON_BINARY_END
        }
 
diff --git a/src/expr.c b/src/expr.c
index 75273409c..7719b7553 100644
--- a/src/expr.c
+++ b/src/expr.c
@@ -89,6 +89,14 @@ gnm_expr_new_constant (GnmValue *v)
 
 /***************************************************************************/
 
+/**
+ * gnm_expr_new_funcallv: (skip)
+ * @func: #GnmFunc
+ * @argc: argument count
+ * @argv: (array length=argc): transfers everything
+ *
+ * Returns: (transfer full): function call expression.
+ */
 static GnmExpr const *
 gnm_expr_new_funcallv (GnmFunc *func, int argc, GnmExprConstPtr *argv)
 {
@@ -106,6 +114,13 @@ gnm_expr_new_funcallv (GnmFunc *func, int argc, GnmExprConstPtr *argv)
        return (GnmExpr *)ans;
 }
 
+/**
+ * gnm_expr_new_funcall: (skip)
+ * @func: #GnmFunc
+ * @args: argument list -- transfers content, not container
+ *
+ * Returns: (transfer full): function call expression.
+ */
 GnmExpr const *
 gnm_expr_new_funcall (GnmFunc *func, GnmExprList *arg_list)
 {
@@ -121,6 +136,13 @@ gnm_expr_new_funcall (GnmFunc *func, GnmExprList *arg_list)
        return gnm_expr_new_funcallv (func, argc, argv);
 }
 
+/**
+ * gnm_expr_new_funcall1:
+ * @func: #GnmFunc
+ * @arg0: (transfer full): argument
+ *
+ * Returns: (transfer full): function call expression.
+ */
 GnmExpr const *
 gnm_expr_new_funcall1 (GnmFunc *func,
                       GnmExpr const *arg0)
@@ -130,6 +152,14 @@ gnm_expr_new_funcall1 (GnmFunc *func,
        return gnm_expr_new_funcallv (func, 1, argv);
 }
 
+/**
+ * gnm_expr_new_funcall2:
+ * @func: #GnmFunc
+ * @arg0: (transfer full): argument
+ * @arg1: (transfer full): argument
+ *
+ * Returns: (transfer full): function call expression.
+ */
 GnmExpr const *
 gnm_expr_new_funcall2 (GnmFunc *func,
                       GnmExpr const *arg0,
@@ -141,6 +171,15 @@ gnm_expr_new_funcall2 (GnmFunc *func,
        return gnm_expr_new_funcallv (func, 2, argv);
 }
 
+/**
+ * gnm_expr_new_funcall3:
+ * @func: #GnmFunc
+ * @arg0: (transfer full): argument
+ * @arg1: (transfer full): argument
+ * @arg2: (transfer full): argument
+ *
+ * Returns: (transfer full): function call expression.
+ */
 GnmExpr const *
 gnm_expr_new_funcall3 (GnmFunc *func,
                       GnmExpr const *arg0,
@@ -154,6 +193,16 @@ gnm_expr_new_funcall3 (GnmFunc *func,
        return gnm_expr_new_funcallv (func, 3, argv);
 }
 
+/**
+ * gnm_expr_new_funcall4:
+ * @func: #GnmFunc
+ * @arg0: (transfer full): argument
+ * @arg1: (transfer full): argument
+ * @arg2: (transfer full): argument
+ * @arg3: (transfer full): argument
+ *
+ * Returns: (transfer full): function call expression.
+ */
 GnmExpr const *
 gnm_expr_new_funcall4 (GnmFunc *func,
                       GnmExpr const *arg0,
@@ -169,6 +218,17 @@ gnm_expr_new_funcall4 (GnmFunc *func,
        return gnm_expr_new_funcallv (func, 4, argv);
 }
 
+/**
+ * gnm_expr_new_funcall5:
+ * @func: #GnmFunc
+ * @arg0: (transfer full): argument
+ * @arg1: (transfer full): argument
+ * @arg2: (transfer full): argument
+ * @arg3: (transfer full): argument
+ * @arg4: (transfer full): argument
+ *
+ * Returns: (transfer full): function call expression.
+ */
 GnmExpr const *
 gnm_expr_new_funcall5 (GnmFunc *func,
                       GnmExpr const *arg0,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]