diff options
author | Tom Tromey <tromey@redhat.com> | 2009-09-22 17:39:54 +0000 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2009-09-22 17:39:54 +0000 |
commit | 329719ec1d3002c2e148acbf7287fee1dcd531c7 (patch) | |
tree | 6bd836db9acc4a8708ba39578e5ac0489e572e8d | |
parent | 074d710de74bfa99c9fb9ac2c3013508149d16e5 (diff) | |
download | gdb-329719ec1d3002c2e148acbf7287fee1dcd531c7.zip gdb-329719ec1d3002c2e148acbf7287fee1dcd531c7.tar.gz gdb-329719ec1d3002c2e148acbf7287fee1dcd531c7.tar.bz2 |
gdb
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.
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/eval.c | 15 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/py-function.exp | 13 |
4 files changed, 34 insertions, 4 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index f9e94b6..51cee9a 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -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. @@ -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")); } diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index ac6fbc2..b86f723 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -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 diff --git a/gdb/testsuite/gdb.python/py-function.exp b/gdb/testsuite/gdb.python/py-function.exp index 7feca2b..30fde7d 100644 --- a/gdb/testsuite/gdb.python/py-function.exp +++ b/gdb/testsuite/gdb.python/py-function.exp @@ -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 ||" |