diff options
author | Phil Muldoon <pmuldoon@redhat.com> | 2010-05-14 11:11:28 +0000 |
---|---|---|
committer | Phil Muldoon <pmuldoon@redhat.com> | 2010-05-14 11:11:28 +0000 |
commit | 88d4aea7473bf93d98ba72a5f955f428cd365431 (patch) | |
tree | e69d248568991dfb44daad47c0c6ee6b8e8ea084 /gdb | |
parent | af47dcbf0d148aba27ced058d6bfb83fd282b5c9 (diff) | |
download | gdb-88d4aea7473bf93d98ba72a5f955f428cd365431.zip gdb-88d4aea7473bf93d98ba72a5f955f428cd365431.tar.gz gdb-88d4aea7473bf93d98ba72a5f955f428cd365431.tar.bz2 |
2010-05-14 Phil Muldoon <pmuldoon@redhat.com>
PR python/11482
* python/py-value.c (valpy_hash): New function.
(value_object_type): Register valpy_hash.
2010-05-14 Phil Muldoon <pmuldoon@redhat.com>
PR python/11482
* gdb.python/py-value.exp (test_value_hash): New function
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/python/py-value.c | 10 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/py-value.exp | 18 |
4 files changed, 40 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 48098a1..fe0581b 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2010-05-14 Phil Muldoon <pmuldoon@redhat.com> + + PR python/11482 + + * python/py-value.c (valpy_hash): New function. + (value_object_type): Register valpy_hash. + 2010-05-14 Hui Zhu <teawater@gmail.com> Michael Snyder <msnyder@vmware.com> diff --git a/gdb/python/py-value.c b/gdb/python/py-value.c index 173b3c9..abf50ff 100644 --- a/gdb/python/py-value.c +++ b/gdb/python/py-value.c @@ -432,6 +432,14 @@ valpy_get_is_optimized_out (PyObject *self, void *closure) Py_RETURN_FALSE; } +/* Calculate and return the address of the PyObject as the value of + the builtin __hash__ call. */ +static long +valpy_hash (PyObject *self) +{ + return (long) (intptr_t) self; +} + enum valpy_opcode { VALPY_ADD, @@ -1097,7 +1105,7 @@ PyTypeObject value_object_type = { &value_object_as_number, /*tp_as_number*/ 0, /*tp_as_sequence*/ &value_object_as_mapping, /*tp_as_mapping*/ - 0, /*tp_hash */ + valpy_hash, /*tp_hash*/ 0, /*tp_call*/ valpy_str, /*tp_str*/ 0, /*tp_getattro*/ diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index dd049b3..b6f36d7 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2010-05-14 Phil Muldoon <pmuldoon@redhat.com> + + PR python/11482 + + * gdb.python/py-value.exp (test_value_hash): New function. + 2010-05-11 Pierre Muller <muller@ics.u-strasbg.fr> PR exp/11530. diff --git a/gdb/testsuite/gdb.python/py-value.exp b/gdb/testsuite/gdb.python/py-value.exp index 3bfa173..67a2ff9 100644 --- a/gdb/testsuite/gdb.python/py-value.exp +++ b/gdb/testsuite/gdb.python/py-value.exp @@ -393,6 +393,23 @@ proc test_parse_and_eval {} { "parse_and_eval type test" } +# Test that values are hashable. +proc test_value_hash {} { + gdb_py_test_multiple "Simple Python value dictionary" \ + "python" "" \ + "one = gdb.Value(1)" "" \ + "two = gdb.Value(2)" "" \ + "three = gdb.Value(3)" "" \ + "vdict = {one:\"one str\",two:\"two str\",three:\"three str\"}" "" \ + "end" + gdb_test "python print vdict\[one\]" "one str" "Test dictionary hash" + gdb_test "python print vdict\[two\]" "two str" "Test dictionary hash" + gdb_test "python print vdict\[three\]" "three str" "Test dictionary hash" + gdb_test "python print one.__hash__() == hash(one)" "True" "Test inbuilt hash" + gdb_test "python print one.__hash__() == id(one)" "True" "Test inbuilt id" +} + + # Start with a fresh gdb. gdb_exit @@ -409,6 +426,7 @@ test_value_boolean test_value_compare test_objfiles test_parse_and_eval +test_value_hash # The following tests require execution. |