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

load_lib "ada.exp"

standard_ada_testfile foo

if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } {
  return -1
}

clean_restart ${testfile}

set bp_location [gdb_get_line_number "STOP1" ${testdir}/foo.adb]
runto "foo.adb:$bp_location"

# Print My_Object and My_Object.Ptr when Ptr is null...

gdb_test "print my_object" \
         "= \\(n => 3, ptr => 0x0, data => \\(3, 5, 8\\)\\)" \
         "print My_Object with null Ptr"

gdb_test "print my_object.ptr" \
         "= \\(foo.table_access\\) 0x0" \
         "print My_Object.Ptr when null"

# Same for My_P_Object...

gdb_test "print my_p_object" \
         "= \\(n => 3, ptr => 0x0, data => \\(3, 5, 8\\)\\)" \
         "print My_P_Object with null Ptr"

gdb_test "print my_p_object.ptr" \
         "\\(foo.p_table_access\\) 0x0" \
         "print My_P_Object.Ptr when null"

# Continue until the Ptr component of both objects get allocated.

set bp_location [gdb_get_line_number "STOP2" ${testdir}/foo.adb]

gdb_breakpoint "foo.adb:$bp_location"

gdb_test "continue" \
         "Breakpoint $decimal, foo \\(\\) at .*foo.adb:$decimal.*" \
         "continue to STOP2"

# Inspect My_Object again...

gdb_test "print my_object" \
         "= \\(n => 3, ptr => $hex, data => \\(3, 5, 8\\)\\)" \
         "print my_object after setting Ptr"

gdb_test "print my_object.ptr" \
         "\\(foo.table_access\\) $hex" \
         "print My_P_Object.Ptr when no longer null"

gdb_test "print my_object.ptr.all" \
         "= \\(13, 21, 34\\)"

# Same with My_P_Object...

gdb_test "print my_p_object" \
         "= \\(n => 3, ptr => $hex, data => \\(3, 5, 8\\)\\)" \
         "print my_p_object after setting Ptr"

gdb_test "print my_p_object.ptr" \
         "= \\(foo.p_table_access\\) $hex" \
         "print My_P_Object.Ptr when no longer null"

gdb_test "print my_p_object.ptr.all" \
         "\\(13, 21, 34\\)"

