# Copyright (C) 2009-2021 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 "failed to compile in $lang mode"
      return -1
  }

  return 0
}

# 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} {
  with_test_prefix "test_fields" {
    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 (c)" 1
      gdb_py_test_silent_cmd "python c = gdb.history (0)" "get value (c) from history" 1
      gdb_py_test_silent_cmd "python fields = c.type.fields()" "get fields from c.type" 1
      gdb_test "python print (len(fields))" "2" "check number of fields (c)"
      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 fields of a method (its parameters)
      gdb_test "python print (len (gdb.parse_and_eval ('C::a_method').type.fields ()))" "3"
      gdb_test "python print (gdb.parse_and_eval ('C::a_method').type.fields ()\[0\].type)" "C \\* const"
      gdb_test "python print (gdb.parse_and_eval ('C::a_method').type.fields ()\[1\].type)" "int"
      gdb_test "python print (gdb.parse_and_eval ('C::a_method').type.fields ()\[2\].type)" "char"
      gdb_test "python print (gdb.parse_and_eval ('c')\['a_method'\].type.fields ()\[0\].type)" "C \\* const"

      gdb_test "python print (len (gdb.parse_and_eval ('C::a_const_method').type.fields ()))" "3"
      gdb_test "python print (gdb.parse_and_eval ('C::a_const_method').type.fields ()\[0\].type)" "const C \\* const"
      gdb_test "python print (gdb.parse_and_eval ('C::a_const_method').type.fields ()\[1\].type)" "int"
      gdb_test "python print (gdb.parse_and_eval ('C::a_const_method').type.fields ()\[2\].type)" "char"
      gdb_test "python print (gdb.parse_and_eval ('c')\['a_const_method'\].type.fields ()\[0\].type)" "const C \\* const"

      gdb_test "python print (len (gdb.parse_and_eval ('C::a_static_method').type.fields ()))" "2"
      gdb_test "python print (gdb.parse_and_eval ('C::a_static_method').type.fields ()\[0\].type)" "int"
      gdb_test "python print (gdb.parse_and_eval ('C::a_static_method').type.fields ()\[1\].type)" "char"
      gdb_test "python print (gdb.parse_and_eval ('c')\['a_static_method'\].type.fields ()\[0\].type)" "int"
    }

    # Test normal fields usage in structs.
    gdb_py_test_silent_cmd "print (st)" "print value (st)" 1
    gdb_py_test_silent_cmd "python st = gdb.history (0)" "get value (st) from history" 1
    gdb_py_test_silent_cmd "python fields = st.type.fields()" "get fields from st.type" 1
    gdb_test "python print (st.type.objfile.filename == gdb.current_progspace ().filename)" "True" \
      "check type.objfile"
    gdb_test "python print (len(fields))" "2" "check number of fields (st)"
    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"

    # Test that unamed fields have 'None' for name.
    gdb_py_test_silent_cmd "python ss = gdb.parse_and_eval('ss')" "init ss" 1
    gdb_py_test_silent_cmd "python ss_fields = ss.type.fields()" \
      "get fields from ss.type" 1
    gdb_test "python print(len(ss_fields))" "2" "check length of ss_fields"
    gdb_test "python print(ss_fields\[0\].name is None)" "True" \
      "Check ss_fields\[0\].name"
    gdb_test "python print(ss_fields\[1\].name is None)" "True" \
      "Check ss_fields\[1\].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 (st.type)"
    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, enum, or function type.*"
    gdb_test "python print (st.type\['a'\].type.has_key ('x'))" "TypeError: Type is not a structure, union, enum, or function type.*"
    gdb_test "python print (st.type\['a'\].type\['x'\])" "TypeError: Type is not a structure, union, enum, or function type.*"
    gdb_test "python print (st.type\['a'\].type.keys ())" "TypeError: Type is not a structure, union, enum, or function 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 (ar)" 1
    gdb_py_test_silent_cmd "python ar = gdb.history (0)" "get value (ar) 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"

    # Test gdb.Type.array.
    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"

    # Test gdb.Type.vector.
    # Note: vectors cast differently than arrays.  Here ar[0] is replicated
    # for the size of the vector.
    gdb_py_test_silent_cmd "print (vec_data_1)" "print value (vec_data_1)" 1
    gdb_py_test_silent_cmd "python vec_data_1 = gdb.history (0)" "get value (vec_data_1) from history" 1

    gdb_py_test_silent_cmd "print (vec_data_2)" "print value (vec_data_2)" 1
    gdb_py_test_silent_cmd "python vec_data_2 = gdb.history (0)" "get value (vec_data_2) from history" 1

    gdb_py_test_silent_cmd "python vec1 = vec_data_1.cast(ar\[0\].type.vector(1))" "set vec1" 1
    gdb_test "python print (vec1)" ".1, 1." "cast to vector with one argument"
    gdb_py_test_silent_cmd "python vec2 = vec_data_1.cast(ar\[0\].type.vector(0, 1))" "set vec2" 1
    gdb_test "python print (vec2)" ".1, 1." "cast to vector with two arguments"
    gdb_test "python print (vec1 == vec2)" "True"
    gdb_py_test_silent_cmd "python vec3 = vec_data_2.cast(ar\[0\].type.vector(1))" "set vec3" 1
    gdb_test "python print (vec1 == vec3)" "False"

    # Test fields of a function (its parameters)
    gdb_test "python print (len (gdb.parse_and_eval ('a_function').type.fields ()))" "2"
    gdb_test "python print (gdb.parse_and_eval ('a_function').type.fields ()\[0\].type)" "int"
    gdb_test "python print (gdb.parse_and_eval ('a_function').type.fields ()\[1\].type)" "char"

    # Test calling `fields` on a non-aggregate type.
    gdb_test "python gdb.lookup_type('int').fields()" "TypeError: Type is not a structure, union, enum, or function type.*"
  }
}

proc test_enums {} {
  with_test_prefix "test_enum" {
    gdb_py_test_silent_cmd "print (e)" "print value (e)" 1
    gdb_py_test_silent_cmd "python (e) = gdb.history (0)" "get value (e) from history" 1
    gdb_py_test_silent_cmd "python fields = e.type.fields()" "extract type fields from e" 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\[0\] name"
    gdb_test "python print (fields\[1\].name)" "v2" "check enum field\[1\]name"

    # Ditto but by mapping operations
    gdb_test "python print (len(e.type))" "3" "check the number of type fields"
    gdb_test "python print (e.type\['v1'\].name)" "v1" "check enum field lookup by name (v1)"
    gdb_test "python print (e.type\['v3'\].name)" "v3" "check enum field lookup by name (v3)"
    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 {} {
  with_test_prefix "test_base_class" {
    gdb_py_test_silent_cmd "print (d)" "print value (d)" 1
    gdb_py_test_silent_cmd "python d = gdb.history (0)" "get value (d) from history" 1
    gdb_py_test_silent_cmd "python fields = d.type.fields()" "extract type fields from d" 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 (fields\[0\])"
    gdb_test "python print (fields\[1\].is_base_class)" "False" "check base class (fields\[1\])"
  }
}

proc test_range {} {
  with_test_prefix "test_range" {
    with_test_prefix "on ranged value" {
      # Test a valid range request.
      gdb_py_test_silent_cmd "print (ar)" "print value (ar)" 1
      gdb_py_test_silent_cmd "python ar = gdb.history (0)" "get value (ar) 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 range low bound"
      gdb_test "python print (ar.type.range()\[1\])" "1" "check range high bound"
    }

    with_test_prefix "on ranged type" {
      # Test a range request on a ranged type.
      gdb_py_test_silent_cmd "print (ar)" "print value (ar)" 1
      gdb_py_test_silent_cmd "python ar = gdb.history (0)" "get value (ar) 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 low bound"
      gdb_test "python print (fields\[0\].type.range()\[1\])" "1" "check range high bound"
    }

    with_test_prefix "on unranged value" {
      # Test where a range does not exist.
      gdb_py_test_silent_cmd "print (st)" "print value (st)" 1
      gdb_py_test_silent_cmd "python st = gdb.history (0)" "get value (st) 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.
if { [build_inferior "${binfile}" "c"] == 0 } {
  restart_gdb "${binfile}"

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

  gdb_test "python print (gdb.lookup_type ('char').objfile)" "None"

  gdb_test "python print(gdb.lookup_type('char').array(1, 0))" \
      "char \\\[0\\\]"

  gdb_test "python print(gdb.lookup_type('char').array(1, -1))" \
      "Array length must not be negative.*"

  gdb_test "python print(gdb.lookup_type('int').optimized_out())" \
      "<optimized out>"

  set sint [get_sizeof int 0]
  gdb_test "python print(gdb.parse_and_eval('aligncheck').type.alignof)" \
      $sint

  with_test_prefix "lang_c" {
      runto_bp "break to inspect struct and array."
      test_fields "c"
      test_enums
  }
}


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