# Copyright (C) 2012-2021 Free Software Foundation, Inc.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# This file is part of the GDB testsuite.  It tests the mechanism
# exposing values to Python.

if { [skip_cplus_tests] } { continue }

standard_testfile .cc

if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug c++}]} {
    return -1
}

# Skip all tests if Python scripting is not enabled.
if { [skip_python_tests] } { continue }

if ![runto_main] {
   return -1
}

gdb_breakpoint [gdb_get_line_number "Break here."]
gdb_continue_to_breakpoint "Break here" ".*Break here.*"

gdb_test "python print (str(gdb.parse_and_eval(\"a\").type))" "const A &"
gdb_test "python print (str(gdb.parse_and_eval(\"a\").referenced_value().type))" "const A"
gdb_test "python print (str(gdb.parse_and_eval(\"int_ref\").type))" "int &"
gdb_test "python print (str(gdb.parse_and_eval(\"int_ref\").referenced_value().type))" "int"
gdb_test "python print (str(gdb.parse_and_eval(\"int_ref\").referenced_value()))" "10"

gdb_test "python print (str(gdb.parse_and_eval(\"int_ptr_ref\").dereference().type))" "int"
gdb_test "python print (str(gdb.parse_and_eval(\"int_ptr_ref\").referenced_value().type))" "int_ptr"
gdb_test "python print (str(gdb.parse_and_eval(\"int_ptr_ref\").referenced_value().dereference()))" "10"
gdb_test "python print (str(gdb.parse_and_eval(\"int_ptr_ref\").referenced_value().referenced_value()))" "10"

# Tests for gdb.Value[gdb.Field]
gdb_test_no_output "python b = gdb.parse_and_eval('b')" "init b"
gdb_test_no_output "python b_fields = b.type.fields()" "init b_fields"
gdb_test_no_output "python b_obj = gdb.parse_and_eval('b_obj')" "init b_obj"
gdb_test_no_output "python b_ref = gdb.parse_and_eval('b_ref')" "init b_ref"
gdb_test_no_output "python b_td = gdb.parse_and_eval('b_td')" "init b_td"
gdb_test_no_output "python u = gdb.parse_and_eval('u')" "init u"
gdb_test_no_output "python u_fields = u.type.fields()" "init u_fields"
gdb_test_no_output "python x = gdb.parse_and_eval('x')" "init x"
gdb_test_no_output "python x_fields = x.type.fields()" "init x_fields"
gdb_test_no_output "python uu = gdb.parse_and_eval('uu')" "init uu"
gdb_test_no_output "python uu_fields = uu.type.fields()" "init uu_fields"
gdb_test_no_output "python x_ptr = gdb.parse_and_eval('x_ptr')" "init x_ptr"
gdb_test_no_output "python xtd = gdb.parse_and_eval('xtd')" "init xtd"

gdb_test "python print(b\[b_fields\[1\]\])" "97 'a'" "b.a via field"
gdb_test "python print(b\[b_fields\[0\]\].type)" "A" \
  "type of b's base class via field"
gdb_test "python print(b\[b_fields\[0\]\]\['a'\])" "10" "b.A::a via field"

gdb_test "python print(b_obj\[b_fields\[1\]\])" "98 'b'" "b_obj->a via field"
gdb_test "python print(b_obj\[b_fields\[0\]\].type.target())" "A" \
  "type of b_obj's base class via field"
gdb_test "python print(b_obj\[b_fields\[0\]\]\['a'\])" "100" \
  "b_obj->A::a via field"

gdb_test "python print(b_ref\[b_fields\[1\]\])" "98 'b'" "b_ref.a via field"
gdb_test "python print(b_ref\[b_fields\[0\]\].type.target())" "A" \
  "type of b_ref's base class via field"
gdb_test "python print(b_ref\[b_fields\[0\]\]\['a'\])" "100" \
  "b_ref.A::a via field"

gdb_test "python print(b_td\[b_fields\[1\]\])" "98 'b'" "b_td.a via field"
gdb_test "python print(b_td\[b_fields\[0\]\].type.target())" "A" \
  "type of b_td's base class via field"
gdb_test "python print(b_td\[b_fields\[0\]\]\['a'\])" "100" \
  "b_td.A::a via field"

gdb_test "python print(u\[u_fields\[0\]\])" "99.*" "u's first field via field"
gdb_test "python print(u\[u_fields\[1\]\])" "99.*" "u's second field via field"

gdb_test "python print(len(x_fields))" "2" "number for fields in u"
gdb_test "python print(x\[x_fields\[0\]\]\['x'\])" "101" "x.x via field"
gdb_test "python print(x\[x_fields\[1\]\]\['a'\])" "102" "x.a via field"
gdb_test "python print(x_ptr\[x_fields\[0\]\]\['x'\])" "101" "x_ptr->x via field"
gdb_test "python print(x_ptr\[x_fields\[1\]\]\['a'\])" "102" "x_ptr->a via field"
gdb_test "python print(xtd\[x_fields\[0\]\]\['x'\])" "101" "xtd->x via field"
gdb_test "python print(xtd\[x_fields\[1\]\]\['a'\])" "102" "xtd->a via field"

gdb_test "python print(len(uu_fields))" "2" "number of fields in uu"
gdb_test "python print(uu\[uu_fields\[0\]\]\['x'\])" "1000" "uu.x via field"
gdb_test "python print(uu\[uu_fields\[1\]\]\['a'\])" "1000" "uu.a via field"

# Test overloaded operators.
gdb_test_no_output "python a = gdb.parse_and_eval('a')" "init a"
gdb_test "python print(a + 5)" "10" "a + 5"
