# Copyright 2002 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 2 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  

# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu

#
# test gdb/701
#

load_lib mi-support.exp
set MIFLAGS "-i=mi"

gdb_exit
if [mi_gdb_start] {
    continue
}

set testfile gdb701
set srcfile "$testfile.c"
set binfile $objdir/$subdir/$testfile
if {[gdb_compile $srcdir/$subdir/$srcfile $binfile executable debug] != ""} {
  gdb_suppress_entire_file "Testcase compile failed, so all test in this file will automatically fail."
}

# When varobj reports the types of objects, it often isn't really reporting
# the type as GDB knows it. For example, in this testcase, we have a
# structure which has been typedefed. A varobj of this type would really have
# a type of "TYPE_CODE_TYPEDEF". It's target type is "TYPE_CODE_STRUCT". Varobj
# should skip over the TYPEDEF type when figuring out the varobj's children.
# If it doesn't, Bad Things Happen(TM).

# Run to main
mi_run_to_main

# Step over "foo = 0"
mi_next "step over \"foo = 0\""

# APPLE LOCAL: [var-create] TYPECODE, DYNAMIC_TYPE, IN_SCOPE fields added.
mi_gdb_test "-var-create fooPtr * foo" \
  "(&\".*\"\r\n)*\\^done,name=\"fooPtr\",numchild=\"3\",type=\"Foo \\*\",typecode=\"PTR\",dynamic_type=\"\",resolved_type=\"struct _foo \\*\",in_scope=\"true\",block_start_addr=\".*\",block_end_addr=\".*\"" \
  "create fooPtr"

mi_gdb_test "-var-list-children fooPtr" \
  "(&\".*\"\r\n)*\\^done,numchild=\"3\",.*" \
  "list children of fooPtr"

foreach i [list x y z] {
  mi_gdb_test "-var-list-children fooPtr.$i" \
    "(&\".*\"\r\n)*\\^done,numchild=\"0\"" \
    "list children of fooPtr.$i"
}

mi_gdb_exit
return 0
