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

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

gdb_exit
if [mi_gdb_start] {
    continue
}

# First, verify that the debugger correctly advertises support
# for the --language option.
mi_gdb_test "-list-features" \
            "\\^done,features=\\\[.*\"language-option\".*\\\]" \
            "-list-features should include \"language-option\""

mi_gdb_test "set lang ada" \
            ".*=cmd-param-changed,param=\"language\",value=\"ada\".*" \
            "set lang ada"

# Evaluate an expression that the Ada language is unable to parse.
mi_gdb_test "-data-evaluate-expression \"sizeof (void*)\"" \
            "\\^error,.*" \
            "sizeof expression using current language"

# Now, ask for the same expression to be parsed, but using the C
# language.
mi_gdb_test "-data-evaluate-expression --language c \"sizeof (void*)\"" \
            "\\^done,value=\"$decimal\"" \
            "sizeof expression using C language"

# Double-check that the current language has not changed.
mi_gdb_test "show lang ada" \
            ".*The current source language is \\\\\"ada\\\\\".*" \
            "set lang ada"

# Test what happens when specifying an invalid language name...
mi_gdb_test "-data-evaluate-expression --language invlang \"sizeof (void*)\"" \
            "\\^error,msg=\"Invalid --language argument: invlang\"" \
            "data-evaluate-expression with invalid language name"

# Make sure that "--language auto" is also rejected.
mi_gdb_test "-data-evaluate-expression --language auto \"sizeof (void*)\"" \
            "\\^error,msg=\"Invalid --language argument: auto\"" \
            "data-evaluate-expression with language auto"

# Make sure that "--language local" is also rejected.
mi_gdb_test "-data-evaluate-expression --language local \"sizeof (void*)\"" \
            "\\^error,msg=\"Invalid --language argument: local\"" \
            "data-evaluate-expression with language local"

# Make sure that "--language unknown" is also rejected.
mi_gdb_test "-data-evaluate-expression --language unknown \"sizeof (void*)\"" \
            "\\^error,msg=\"Invalid --language argument: unknown\"" \
            "data-evaluate-expression with language unknown"
