OSDN Git Service

gdb
authorTom Tromey <tromey@redhat.com>
Tue, 22 Sep 2009 17:38:28 +0000 (17:38 +0000)
committerTom Tromey <tromey@redhat.com>
Tue, 22 Sep 2009 17:38:28 +0000 (17:38 +0000)
PR python/10680:
* eval.c (evaluate_subexp_standard) <do_call_it>: Handle internal
functions in EVAL_AVOID_SIDE_EFFECTS case.
gdb/testsuite
* gdb.python/py-function.exp: Add regression tests.

gdb/ChangeLog
gdb/eval.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.python/py-function.exp

index 03e2114..fe5388a 100644 (file)
@@ -1,3 +1,9 @@
+2009-09-22  Tom Tromey  <tromey@redhat.com>
+
+       PR python/10680:
+       * eval.c (evaluate_subexp_standard) <do_call_it>: Handle internal
+       functions in EVAL_AVOID_SIDE_EFFECTS case.
+
 2009-09-21  Jason Orendorff  <jason.orendorff@gmail.com>
 
        PR python/10666:
index 7e41d39..2926465 100644 (file)
@@ -1513,11 +1513,18 @@ evaluate_subexp_standard (struct type *expect_type,
             gdb isn't asked for it's opinion (ie. through "whatis"),
             it won't offer it. */
 
-         struct type *ftype =
-         TYPE_TARGET_TYPE (value_type (argvec[0]));
+         struct type *ftype = value_type (argvec[0]);
 
-         if (ftype)
-           return allocate_value (TYPE_TARGET_TYPE (value_type (argvec[0])));
+         if (TYPE_CODE (ftype) == TYPE_CODE_INTERNAL_FUNCTION)
+           {
+             /* We don't know anything about what the internal
+                function might return, but we have to return
+                something.  */
+             return value_zero (builtin_type (exp->gdbarch)->builtin_int,
+                                not_lval);
+           }
+         else if (TYPE_TARGET_TYPE (ftype))
+           return allocate_value (TYPE_TARGET_TYPE (ftype));
          else
            error (_("Expression of type other than \"Function returning ...\" used as function"));
        }
index 4156b62..ea42859 100644 (file)
@@ -1,3 +1,7 @@
+2009-09-22  Tom Tromey  <tromey@redhat.com>
+
+       * gdb.python/py-function.exp: Add regression tests.
+
 2009-09-21  Phil Muldoon  <pmuldoon@redhat.com>
 
        PR python/10633
index 7feca2b..30fde7d 100644 (file)
@@ -77,3 +77,16 @@ gdb_py_test_multiple "input value-returning convenience function" \
   "end" ""
 
 gdb_test "print \$double (1)" "= 2" "call value-returning function"
+
+gdb_py_test_multiple "input int-returning function" \
+  "python" "" \
+  "class Yes(gdb.Function):" "" \
+  "    def __init__(self):" "" \
+  "        gdb.Function.__init__(self, 'yes')" "" \
+  "    def invoke(self):" "" \
+  "        return 1" "" \
+  "Yes ()" "" \
+  "end" ""
+
+gdb_test "print \$yes() && \$yes()" " = 1" "call yes with &&"
+gdb_test "print \$yes() || \$yes()" " = 1" "call yes with ||"