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

# FIXME: Presumably skip_go_tests should be defined here,
# but for consistency with other languages it currently lives in gdb.exp.

# Auxiliary function to set the language to Go.
# The result is 1 (true) for success, 0 (false) for failure.

proc set_lang_go {} {
    if [gdb_test_no_output "set language go"] {
	return 0
    }
    if [gdb_test "show language" ".* source language is \"go\"." \
	   "set language to \"go\""] {
	return 0
    }
    return 1
}

# Go version of runto_main.

proc go_runto_main { } {
    return [runto main.main]
}
