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
This commit is contained in:
Phil Muldoon 2010-05-14 11:11:28 +00:00
parent af47dcbf0d
commit 88d4aea747
4 changed files with 40 additions and 1 deletions

View File

@ -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>

View File

@ -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*/

View File

@ -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.

View File

@ -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.