# Copyright (C) 2009-2026 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.

load_lib gdb-python.exp

require allow_python_tests

standard_testfile

if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] } {
    return
}

# The following tests require execution.

if {![runto_main]} {
    return
}

gdb_breakpoint [gdb_get_line_number "Block break here."]
gdb_continue_to_breakpoint "Block break here."
gdb_py_test_silent_cmd "python bf1 = gdb.selected_frame ()" "get frame" 0

# Test Frame.__repr__() method for a valid Frame object.
gdb_test "python print (repr(bf1))" "<gdb\\.Frame level=0 frame-id=\\{\[^\r\n\]+\\}>" \
    "test __repr__ for gdb.Frame on a valid frame"

# Test Frame.architecture() method.
gdb_py_test_silent_cmd "python show_arch_str = gdb.execute(\"show architecture\", to_string=True)" "show arch" 0
gdb_test "python print (bf1.architecture().name() in show_arch_str)" "True" "test Frame.architecture()"

# First test that read_var is unaffected by PR 11036 changes.
gdb_test "python print (bf1.read_var(\"i\"))" "\"stuff\"" "test i"
gdb_test "python print (bf1.read_var(\"f\"))" "\"foo\"" "test f"
gdb_test "python print (bf1.read_var(\"b\"))" "\"bar\"" "test b"

# Check we can use a single named argument with read_var.
gdb_test "python print (bf1.read_var(variable = \"b\"))" "\"bar\"" \
    "test b using named arguments"

# Test the read_var function in another block other than the current
# block (in this case, the super block). Test thar read_var is reading
# the correct variables of i and f but they are the correct value and type.
gdb_py_test_silent_cmd "python sb = bf1.block().superblock" "get superblock" 0
gdb_test "python print (bf1.read_var(\"i\", sb))" "1.1.*" "test i = 1.1"
gdb_test "python print (bf1.read_var(\"i\", sb).type)" "double" "test double i"
gdb_test "python print (bf1.read_var(\"f\", sb))" "2.2.*" "test f = 2.2"
gdb_test "python print (bf1.read_var(\"f\", sb).type)" "double" "test double f"

# Now test read_var with a variable and block using named arguments.
gdb_test "python print (bf1.read_var(block = sb, variable = \"i\"))" "1.1.*" \
    "test i = 1.1 usign named arguments"
gdb_test "python print (bf1.read_var(block = sb, variable = \"f\"))" "2.2.*" \
    "test f = 2.2 using named arguments"

# And again test another outerblock, this time testing "i" is the
# correct value and type.
gdb_py_test_silent_cmd "python sb = sb.superblock" "get superblock" 0
gdb_test "python print (bf1.read_var(\"i\", sb))" "99" "test i = 99"
gdb_test "python print (bf1.read_var(\"i\", sb).type)" "int" "test int i"

# Test what happens when we provide a block of the wrong type.
gdb_test "python print (bf1.read_var(\"i\", \"some_block\"))" \
    [multi_line \
	 "TypeError.*: argument 2 must be gdb\\.Block, not str" \
	 "Error occurred in Python.*"] \
    "check invalid block type error"
gdb_test "python print (bf1.read_var(block = \"some_block\", variable = \"i\"))" \
    [multi_line \
	 "TypeError.*: argument 2 must be gdb\\.Block, not str" \
	 "Error occurred in Python.*"] \
    "check invalid block type error when named args are used"

# Test what happens when we provide a variable of the wrong type.
gdb_test "python print (bf1.read_var(None))" \
    [multi_line \
	 "TypeError.*: argument 1 must be gdb\\.Symbol or str, not NoneType" \
	 "Error occurred in Python.*"] \
    "check read_var error when variable is None"
gdb_test "python print (bf1.read_var(sb))" \
    [multi_line \
	 "TypeError.*: argument 1 must be gdb\\.Symbol or str, not gdb\\.Block" \
	 "Error occurred in Python.*"] \
    "check read_var error when variable is a gdb.Block"

gdb_breakpoint "f2"
gdb_continue_to_breakpoint "breakpoint at f2"
gdb_py_test_silent_cmd "python bframe = gdb.selected_frame()" \
    "get bottommost frame" 0
gdb_test "up" ".*" ""

# Test Frame.__repr__() method for an invalid Frame object.
gdb_test "python print (repr(bf1))" "<gdb\\.Frame \\(invalid\\)>" \
    "test __repr__ for gdb.Frame on an invalid frame"

gdb_py_test_silent_cmd "python f1 = gdb.selected_frame ()" "get second frame" 0
gdb_py_test_silent_cmd "python f0 = f1.newer ()" "get first frame" 0
gdb_py_test_silent_cmd "python f2 = f1.older ()" "get last frame" 0

# Check the Frame.level method.
gdb_test "python print ('bframe.level = %d' % bframe.level ())" \
    "bframe\\.level = 0"
gdb_test "python print ('f0.level = %d' % f0.level ())" \
    "f0\\.level = 0"
gdb_test "python print ('f1.level = %d' % f1.level ())" \
    "f1\\.level = 1"
gdb_test "python print ('f2.level = %d' % f2.level ())" \
    "f2\\.level = 2"

gdb_test "python print (f1 == gdb.newest_frame())" False \
    "selected frame -vs- newest frame"
gdb_test "python print (bframe == gdb.newest_frame())" True \
    "newest frame -vs- newest frame"

gdb_test "python print ('result = %s' % (f0 == f1))" " = False" "test equality comparison, false"
gdb_test "python print ('result = %s' % (f0 == f0))" " = True" "test equality comparison, true"
gdb_test "python print ('result = %s' % (f0 != f1))" " = True" "test inequality comparison, true"
gdb_test "python print ('result = %s' % (f0 != f0))" " = False" "test inequality comparison, false"
gdb_test "python print ('result = %s' % f0.is_valid ())" " = True" "test Frame.is_valid"
gdb_test "python print ('result = %s' % f0.name ())" " = f2" "test Frame.name"
gdb_test "python print ('result = %s' % (f0.type () == gdb.NORMAL_FRAME))" " = True" "test Frame.type"
gdb_test "python print ('result = %s' % (f0.unwind_stop_reason () == gdb.FRAME_UNWIND_NO_REASON))" \
    " = True" "test Frame.unwind_stop_reason"
gdb_test "python print ('result = %s' % gdb.frame_stop_reason_string (gdb.FRAME_UNWIND_INNER_ID))" " = previous frame inner to this frame \\(corrupt stack\\?\\)" "test gdb.frame_stop_reason_string"
gdb_test "python print ('result = %s' % f0.pc ())" " = ${::decimal}" "test Frame.pc"
gdb_test "python print ('result = %s' % (f0.older () == f1))" " = True" "test Frame.older"
gdb_test "python print ('result = %s' % (f1.newer () == f0))" " = True" "test Frame.newer"
gdb_test "python print ('result = %s' % f0.read_var ('variable_which_surely_doesnt_exist'))" \
  "ValueError.*: Variable 'variable_which_surely_doesnt_exist' not found.*Error occurred in Python.*" \
  "test Frame.read_var - error"
gdb_test "python print ('result = %s' % f0.read_var ('a'))" " = 1" "test Frame.read_var - success"

gdb_test "python print ('result = %s' % (gdb.selected_frame () == f1))" " = True" "test gdb.selected_frame"

# Can read SP register.
gdb_test "python print ('result = %s' % (gdb.selected_frame ().read_register ('sp') == gdb.parse_and_eval ('\$sp')))" \
  " = True" \
  "test Frame.read_register(sp)"

# PC value obtained via read_register is as expected.
gdb_test "python print ('result = %s' % (f0.read_register('pc') == f0.pc()))" \
  " = True" \
  "test Frame.read_register(pc)"

# Repeat the previous test, but this time use named arguments for the
# read_register method call.
gdb_test "python print ('result = %s' % (f0.read_register(register = 'pc') == f0.pc()))" \
  " = True" \
  "test Frame.read_register() using named arguments"

# Test arch-specific register name.
set pc ""
if {[is_amd64_regs_target]} {
    set pc "rip"
} elseif {[is_x86_like_target]} {
    set pc "eip"
}
if { $pc != "" } {
    gdb_test "python print ('result = %s' % (f0.read_register('pc') == f0.read_register('$pc')))" \
	" = True" \
	"test Frame.read_register($pc)"
}

# Test language.
gdb_test "python print(gdb.selected_frame().language())" "c"
gdb_test "set language ada"
gdb_test "python print(gdb.selected_frame().language())" "c" \
    "frame language is not affected by global language"

# This previously caused a crash -- the implementation was missing the
# case where a register had an unexpected type.
gdb_test "python print(gdb.selected_frame().read_register(list()))" \
    ".*Invalid type for register.*" \
    "test Frame.read_register with list"

gdb_test_multiline "setup a bad object" \
    "python" "" \
    "class bad_type:" "" \
    "  def __init__ (self):" "" \
    "    pass" "" \
    "  @property" "" \
    "  def __class__(self):" "" \
    "    raise RuntimeError('error from __class in bad_type')" "" \
    "bad_object = bad_type()" "" \
    "end" ""

gdb_test "python print(gdb.selected_frame().read_register(bad_object))" \
    ".*Invalid type for register.*" \
    "test Frame.read_register with bad_type object"

# Compile again without debug info.
gdb_exit
if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} {}] } {
    return
}

if {![runto_main]} {
    return
}

# Test if Frame.static_link works for a frame without debug info.
gdb_test "python print(gdb.selected_frame().static_link())" "None" \
    "test Frame.static_link for a frame without debug info"
