gdb
authorTom Tromey <tromey@redhat.com>
Tue, 22 Sep 2009 17:39:54 +0000 (17:39 +0000)
committerTom Tromey <tromey@redhat.com>
Tue, 22 Sep 2009 17:39:54 +0000 (17:39 +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 f9e94b63acd6ccdc3c8d41e912627dc30a3f6272..51cee9a078d754cd821980fcbf5f08ab72f5b503 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-22  Jie Zhang  <jie.zhang@analog.com>
 
        * MAINTAINERS: Add myself under Write After Approval.
index 7e41d3962aa2ced59573f1c9c9ab99ebbe20ddba..2926465c418797f5f381fee85088277901ca70ae 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 ac6fbc296c50e40bbbd546e5bbfcb92307ae370a..b86f7233963df91f90346387ff029c49b4cd606d 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  Keith Seitz  <keiths@redhat.com>
 
        * gdb.cp/cplusfuncs.exp (do_tests): Add check for proper error message
index 7feca2b6aad75a7cb0e14c6e5903ed15d81bb178..30fde7dd41f26f5c37356b3bd8a3c8844fbef1d3 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 ||"