# Copyright (C) 1992-2024 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 was written by Fred Fish. (fnf@cygnus.com)


standard_testfile

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

proc test_convenience_variables {} {
    global gdb_prompt

    gdb_test_no_output "set \$foo = 101" \
	"Set a new convenience variable"

    gdb_test "print \$foo"		" = 101" \
	"Print contents of new convenience variable"

    gdb_test_no_output "set \$foo = 301" \
	"Set convenience variable to a new value"

    gdb_test "print \$foo"		" = 301" \
	"Print new contents of convenience variable"

    gdb_test_no_output "set \$_ = 11" \
	"Set convenience variable \$_"

    gdb_test "print \$_"		" = 11" \
	"Print contents of convenience variable \$_"

    gdb_test "print \$foo + 10"	" = 311" \
	"Use convenience variable in arithmetic expression"

    gdb_test "print (\$foo = 32) + 4"	" = 36" \
	"Use convenience variable assignment in arithmetic expression"

    gdb_test "print \$bar"		" = void" \
	"Print contents of uninitialized convenience variable"


    gdb_test "print \$str = \"some string\"" \
	" = \"some string\"" \
	"Set convenience variable to string value"
    gdb_test "print \$str = \"some other string\"" \
	" = \"some other string\"" \
	"Change convenience variable to different string value"

    gdb_test "print \$arr = {1, 2, 3}" \
	" = \\{1, 2, 3\\}" \
	"Set convenience variable to array value"
    gdb_test "print \$arr = {0, 1, 2, 3}" \
	" = \\{0, 1, 2, 3\\}" \
	"Set convenience variable to different array value"

    gdb_test "print \$ptr = (void *) 7" \
	" = \\(void \\*\\) 0x7" \
	"set convenience variable to pointer value"
    # This used to "succeed".
    gdb_test "print \$ptr + 23 = 97" \
	"Left operand of assignment is not an lvalue." \
	"reject invalid assignment"
}

proc test_convenience_functions {} {
    gdb_test "print \$_isvoid" " = <internal function _isvoid>" \
	"Print internal function \$_isvoid"

    gdb_test "print \$isvoid_foo" " = void" \
	"Print void convenience variable"

    gdb_test "print \$_isvoid (\$isvoid_foo)" " = 1" \
	"Check whether void convenience variable is void"

    gdb_test_no_output "set \$isvoid_foo = 1" \
	"Set void convenience variable to 1"

    gdb_test "print \$_isvoid (\$isvoid_foo)" " = 0" \
	"Check whether non-void convenience variable is void"

    # For the next test, we need the inferior to be running.
    if { ![runto_main] } {
	return -1
    }

    gdb_test "print \$_isvoid (foo_void ())" " = 1" \
	"Check whether void function is void"

    gdb_test "print \$_isvoid (foo_int ())" " = 0" \
	"Check whether non-void function is void"
}

proc test_value_history {} {
    global gdb_prompt

    gdb_test "print 101"	"\\\$1 = 101" \
	"Set value-history\[1\] using \$1"

    gdb_test "print 102" 	"\\\$2 = 102" \
	"Set value-history\[2\] using \$2"

    gdb_test "print 103"	"\\\$3 = 103" \
	"Set value-history\[3\] using \$3"

    gdb_test "print \$\$"	"\\\$4 = 102" \
	"Print value-history\[MAX-1\] using inplicit index \$\$"

    gdb_test "print \$\$"	"\\\$5 = 103" \
	"Print value-history\[MAX-1\] again using implicit index \$\$"

    gdb_test "print \$"	"\\\$6 = 103" \
	"Print value-history\[MAX\] using implicit index \$"

    gdb_test "print \$\$2"	"\\\$7 = 102" \
	"Print value-history\[MAX-2\] using explicit index \$\$2"

    gdb_test "print \$0"	"\\\$8 = 102" \
	"Print value-history\[MAX\] using explicit index \$0"

    gdb_test "print 108"	"\\\$9 = 108"

    gdb_test "print \$\$0"	"\\\$10 = 108" \
	"Print value-history\[MAX\] using explicit index \$\$0"

    gdb_test "print \$1"	"\\\$11 = 101" \
	"Print value-history\[1\] using explicit index \$1"

    gdb_test "print \$2"	"\\\$12 = 102" \
	"Print value-history\[2\] using explicit index \$2"

    gdb_test "print \$3"	"\\\$13 = 103" \
	"Print value-history\[3\] using explicit index \$3"

    gdb_test "print \$-3"	"\\\$14 = 100" \
	"Print (value-history\[MAX\] - 3) using implicit index \$"

    gdb_test "print \$1 + 3"	"\\\$15 = 104" \
	"Use value-history element in arithmetic expression"
}

proc test_with_program {} {
    global hex
    gdb_test_no_output "set \$prog_var = p" \
	"Set a new convenience variable to a program variable"
    gdb_test "print /x \$prog_var" " = $hex" \
	"Print contents of new convenience variable of program variable"

    # Test $_thread/$_inferior convenience variables in various commands.
    gdb_test "info threads \$_thread" "\\* 1 .* main.*"
    gdb_test "info inferiors \$_inferior" "\\* 1 .* process.*"
    gdb_test "break foo_int thread \$_thread" "Breakpoint \[0-9\]*.*"
}

gdb_test_no_output "set print sevenbit-strings"

test_value_history
test_convenience_variables
test_convenience_functions
test_with_program
