# Copyright 2008 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/>.

if $tracelevel then {
    strace $tracelevel
}

load_lib "ada.exp"

set testdir "homonym"
set testfile "${testdir}/homonym_main"
set srcfile ${srcdir}/${subdir}/${testfile}.adb
set binfile ${objdir}/${subdir}/${testfile}

file mkdir ${objdir}/${subdir}/${testdir}
if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } {
  return -1
}

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

set bp_location [gdb_get_line_number "BREAK_1" ${testdir}/homonym.adb]
runto "homonym.adb:$bp_location"

# Check the variables and types defined inside the current scope.
# There are some homonyms in a different scope, so we want to make
# sure that the debugger doesn't get mixed up.

gdb_test "ptype local_type" \
         "type = range -100 \\.\\. 100" \
         "ptype local_type at BREAK_1"

gdb_test "ptype local_type_subtype" \
         "type = range -100 \\.\\. 100" \
         "ptype local_type_subtype at BREAK_1"

gdb_test "ptype int_type" \
         "type = range -100 \\.\\. 100" \
         "ptype int_type at BREAK_1"

gdb_test "ptype lcl" \
         "type = range -100 \\.\\. 100" \
         "ptype lcl at BREAK_1"

gdb_test "print lcl" \
         "29" \
         "print lcl at BREAK_1"

# Now, continue until reaching BREAK_2, and do the same commands
# as above.  The result should be different since the definitions
# in the new scope are different.

set bp_location [gdb_get_line_number "BREAK_2" ${testdir}/homonym.adb]
gdb_test "break homonym.adb:$bp_location" \
         "Breakpoint \[0-9\]+ at 0x\[0-9a-fA-F\]+: file .*homonym\.adb, line \[0-9\]+\." \
         "break at BREAK_2"

gdb_test "continue" \
         ".*Breakpoint \[0-9\]+, homonym\\.get_value \\(\\) at .*homonym\\.adb:.*" \
         "continue until BREAK_2"

gdb_test "ptype local_type" \
         "type = range 1 \\.\\. 19740804" \
         "ptype local_type at BREAK_2"

gdb_test "ptype local_type_subtype" \
         "type = range 1 \\.\\. 19740804" \
         "ptype local_type_subtype at BREAK_2"

gdb_test "ptype lcl" \
         "type = range 1 \\.\\. 19740804" \
         "ptype lcl at BREAK_2"

gdb_test "print lcl" \
         "17" \
         "print lcl at BREAK_2"



