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

# This file is part of the GDB testsuite.  It tests the mechanism
# of exposing types to Python.

load_lib gdb-python.exp

standard_testfile

if [get_compiler_info c++] {
    return -1;
}

# Build inferior to language specification.
proc build_inferior {exefile lang} {
  global srcdir subdir srcfile testfile hex

  if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${exefile}" executable "debug $lang"] != "" } {
      untested "Couldn't compile ${srcfile} in $lang mode"
      return -1
  }
}

# Restart GDB.
proc restart_gdb {exefile} { 
  global srcdir subdir srcfile testfile hex

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

  if ![runto_main ] then {
      perror "couldn't run to breakpoint"
      return
  }
}

# Set breakpoint and run to that breakpoint.
proc runto_bp {bp} {
  gdb_breakpoint [gdb_get_line_number $bp]
  gdb_continue_to_breakpoint $bp
}

proc test_fields {lang} {
  global gdb_prompt

  # .fields() of a typedef should still return the underlying field list
  gdb_test "python print len(gdb.parse_and_eval('ts').type.fields())" "2" \
      "$lang typedef field list"

  if {$lang == "c++"} {
      # Test usage with a class
      gdb_py_test_silent_cmd "print c" "print value" 1
      gdb_py_test_silent_cmd "python c = gdb.history (0)" "get value from history" 1
      gdb_py_test_silent_cmd "python fields = c.type.fields()" "get fields" 1
      gdb_test "python print len(fields)" "2" "Check number of fields"
      gdb_test "python print fields\[0\].name" "c" "Check class field c name"
      gdb_test "python print fields\[1\].name" "d" "Check class field d name"

      gdb_test "python print c.type == gdb.parse_and_eval('d').type" "False"
      gdb_test "python print c.type == gdb.parse_and_eval('d').type.fields()\[0\].type" \
	  "True"
  }

  # Test normal fields usage in structs.
  gdb_py_test_silent_cmd "print st" "print value" 1
  gdb_py_test_silent_cmd "python st = gdb.history (0)" "get value from history" 1
  gdb_py_test_silent_cmd "python fields = st.type.fields()" "get fields" 1
  gdb_test "python print len(fields)" "2" "Check number of fields"
  gdb_test "python print fields\[0\].name" "a" "Check structure field a name"
  gdb_test "python print fields\[1\].name" "b" "Check structure field b name"

  # Regression test for
  # http://sourceware.org/bugzilla/show_bug.cgi?id=12070.
  gdb_test "python print 'type' in dir(fields\[0\])" "True" \
    "Check that dir includes name"

  # Test Python mapping behavior of gdb.Type for structs/classes
  gdb_test "python print len(st.type)" "2" "Check number of fields"
  gdb_test "python print st.type\['a'\].name" "a" "Check fields lookup by name"
    gdb_test "python print \[v.bitpos for v in st.type.itervalues()\]" {\[0L, 32L\]} "Check fields iteration over values"
    gdb_test "python print \[(n, v.bitpos) for (n, v) in st.type.items()\]" {\[\('a', 0L\), \('b', 32L\)\]} "Check fields items list"
  gdb_test "python print 'a' in st.type" "True" "Check field name exists test"
  gdb_test "python print 'nosuch' in st.type" "False" "Check field name nonexists test"
  gdb_test "python print not not st.type" "True" "Check conversion to bool"

  # Test rejection of mapping operations on scalar types
  gdb_test "python print len (st.type\['a'\].type)" "TypeError: Type is not a structure, union, or enum type.*"
  gdb_test "python print st.type\['a'\].type.has_key ('x')" "TypeError: Type is not a structure, union, or enum type.*"
  gdb_test "python print st.type\['a'\].type.keys ()" "TypeError: Type is not a structure, union, or enum type.*"
  gdb_test "python print st.type\['a'\].type\['x'\]" "TypeError: Type is not a structure, union, or enum type.*"

  # Test conversion to bool on scalar types
  gdb_test "python print not not st.type\['a'\].type" "True"
  
  # Test regression PR python/10805
  gdb_py_test_silent_cmd "print ar" "print value" 1
  gdb_py_test_silent_cmd "python ar = gdb.history (0)" "get value from  history" 1
  gdb_test "python fields = ar.type.fields()"
  gdb_test "python print len(fields)" "1" "Check the number of fields"
  gdb_test "python print fields\[0\].type" "<range type>" "Check array field type"

  gdb_test "python print ar\[0\].cast(ar\[0\].type.array(1))" \
      ".1, 2." "cast to array with one argument"
  gdb_test "python print ar\[0\].cast(ar\[0\].type.array(0, 1))" \
      ".1, 2." "cast to array with two arguments"

  gdb_test "python print ar\[0\].type == ar\[0\].type" "True"
}

proc test_enums {} {
  gdb_py_test_silent_cmd "print e" "print value" 1
  gdb_py_test_silent_cmd "python e = gdb.history (0)" "get value from  history" 1
  gdb_py_test_silent_cmd "python fields = e.type.fields()" "get value from history" 1
  gdb_test "python print len(fields)" "3" "Check the number of enum fields"
  gdb_test "python print fields\[0\].name" "v1" "Check enum field name"
  gdb_test "python print fields\[1\].name" "v2" "Check enum field name"

  # Ditto but by mapping operations
  gdb_test "python print len(e.type)" "3" "Check the number of enum fields"
  gdb_test "python print e.type\['v1'\].name" "v1" "Check enum field lookup by name"
  gdb_test "python print e.type\['v3'\].name" "v3" "Check enum field lookup by name"
    gdb_test "python print \[v.enumval for v in e.type.itervalues()\]" {\[0L, 1L, 2L\]} "Check num fields iteration over values"
    gdb_test "python print \[(n, v.enumval) for (n, v) in e.type.items()\]" {\[\('v1', 0L\), \('v2', 1L\), \('v3', 2L\)\]} "Check enum fields items list"
}
proc test_base_class {} {
  gdb_py_test_silent_cmd "print d" "print value" 1
  gdb_py_test_silent_cmd "python d = gdb.history (0)" "get value from  history" 1
  gdb_py_test_silent_cmd "python fields = d.type.fields()" "get value from history" 1
  gdb_test "python print len(fields)" "3" "Check the number of fields"
  gdb_test "python print fields\[0\].is_base_class" "True" "Check base class"
  gdb_test "python print fields\[1\].is_base_class" "False" "Check base class"
}

proc test_range {} {

  # Test a valid range request.
  gdb_py_test_silent_cmd "print ar" "print value" 1
  gdb_py_test_silent_cmd "python ar = gdb.history (0)" "get value from history" 1
  gdb_test "python print len(ar.type.range())" "2" "Check correct tuple length"
  gdb_test "python print ar.type.range()\[0\]" "0" "Check low range"
  gdb_test "python print ar.type.range()\[1\]" "1" "Check high range"

  # Test a range request on a ranged type.
  gdb_py_test_silent_cmd "print ar" "print value" 1
  gdb_py_test_silent_cmd "python ar = gdb.history (0)" "get value from  history" 1
  gdb_py_test_silent_cmd "python fields = ar.type.fields()" "get fields" 1
  gdb_test "python print fields\[0\].type.range()\[0\]" "0" "Check range type low bound"
  gdb_test "python print fields\[0\].type.range()\[1\]" "1" "Check range type high bound"

  # Test where a range does not exist.
  gdb_py_test_silent_cmd "print st" "print value" 1
  gdb_py_test_silent_cmd "python st = gdb.history (0)" "get value from history" 1
  gdb_test "python print st.type.range()" "RuntimeError: This type does not have a range.*" "Check range for non ranged type."
}

# Some tests of template arguments.
proc test_template {} {
    gdb_py_test_silent_cmd \
	"python ttype = gdb.parse_and_eval('temvar').type" \
	"get type of temvar" \
	1

    gdb_test "python print ttype.template_argument(0)" "D"
    gdb_test "python print isinstance(ttype.template_argument(0), gdb.Type)" \
	"True"

    # The next two tests require a GCC that emits DW_TAG_template_*.
    # GCC 4.4 does not emit it, 4.5 and 6 do emit it.
    set have_older_gcc 0
    if {[test_compiler_info {gcc-[0-3]-*}]
	|| [test_compiler_info {gcc-4-[0-4]-*}]} {
	set have_older_gcc 1
    }
    if $have_older_gcc { setup_xfail *-*-* }
    gdb_test "python print ttype.template_argument(1)" "23"
    if $have_older_gcc { setup_xfail *-*-* }
    gdb_test "python print isinstance(ttype.template_argument(1), gdb.Value)" \
	"True"

    if {[test_compiler_info {gcc-[0-3]-*}]
	|| [test_compiler_info {gcc-4-[0-5]-*}]} {
	setup_xfail "gcc/46955" *-*-*
    }
    gdb_test "python print ttype.template_argument(2)" "&C::c"
}

# Perform C Tests.
build_inferior "${binfile}" "c"
restart_gdb "${binfile}"

# Skip all tests if Python scripting is not enabled.
if { [skip_python_tests] } { continue }

runto_bp "break to inspect struct and array."
test_fields "c"
test_enums

# Perform C++ Tests.
build_inferior "${binfile}-cxx" "c++"
restart_gdb "${binfile}-cxx"
runto_bp "break to inspect struct and array."
test_fields "c++"
test_base_class
test_range
test_template
test_enums
