# OBSOLETE # Copyright 1994, 1995 Free Software Foundation, Inc.
# OBSOLETE 
# OBSOLETE # This program is free software; you can redistribute it and/or modify
# OBSOLETE # it under the terms of the GNU General Public License as published by
# OBSOLETE # the Free Software Foundation; either version 2 of the License, or
# OBSOLETE # (at your option) any later version.
# OBSOLETE # 
# OBSOLETE # This program is distributed in the hope that it will be useful,
# OBSOLETE # but WITHOUT ANY WARRANTY; without even the implied warranty of
# OBSOLETE # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# OBSOLETE # GNU General Public License for more details.
# OBSOLETE # 
# OBSOLETE # You should have received a copy of the GNU General Public License
# OBSOLETE # along with this program; if not, write to the Free Software
# OBSOLETE # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
# OBSOLETE 
# OBSOLETE # Please email any bugs, comments, and/or additions to this file to:
# OBSOLETE # bug-gdb@prep.ai.mit.edu
# OBSOLETE 
# OBSOLETE # This file was written by Per Bothner. (bothner@cygnus.com)
# OBSOLETE 
# OBSOLETE if $tracelevel then {
# OBSOLETE 	strace $tracelevel
# OBSOLETE }
# OBSOLETE 
# OBSOLETE if [skip_chill_tests] then { continue }
# OBSOLETE 
# OBSOLETE set testfile "result"
# OBSOLETE set srcfile ${srcdir}/$subdir/${testfile}.ch
# OBSOLETE set binfile ${objdir}/${subdir}/${testfile}.exe
# OBSOLETE if  { [compile "${srcfile} -g -o ${binfile} ${CHILL_RT0} ${CHILL_LIB}"] != "" } {
# OBSOLETE     perror "Couldn't compile ${srcfile}"
# OBSOLETE     return -1
# OBSOLETE }
# OBSOLETE 
# OBSOLETE proc do_tests {} {
# OBSOLETE     global prms_id bug_id subdir objdir srcdir binfile gdb_prompt
# OBSOLETE 
# OBSOLETE     set prms_id 0
# OBSOLETE     set bug_id 0
# OBSOLETE 
# OBSOLETE     # Start with a fresh gdb.
# OBSOLETE 
# OBSOLETE     gdb_exit
# OBSOLETE     gdb_start
# OBSOLETE     gdb_reinitialize_dir $srcdir/$subdir
# OBSOLETE     gdb_load $binfile
# OBSOLETE 
# OBSOLETE     gdb_test "set language chill" ""
# OBSOLETE 
# OBSOLETE     gdb_test "set width 0" ""
# OBSOLETE     gdb_test "set print sevenbit-strings" ""
# OBSOLETE     gdb_test "set print address off" ""
# OBSOLETE 
# OBSOLETE     # simple function
# OBSOLETE     runto simple_func
# OBSOLETE     gdb_test "step 2" ""
# OBSOLETE     gdb_test "print j" "= 5"
# OBSOLETE     gdb_test "p RESULT" "= 10"
# OBSOLETE     gdb_test "continue" ""
# OBSOLETE     gdb_test "print i" "= 7"
# OBSOLETE     gdb_test "step 4" ""
# OBSOLETE     gdb_test "set RESULT := 50" ""
# OBSOLETE     gdb_test "finish" ""
# OBSOLETE     gdb_test "step" ""
# OBSOLETE     gdb_test "print i" "= 50"
# OBSOLETE 
# OBSOLETE     # returning a structure
# OBSOLETE     runto ret_struct
# OBSOLETE     gdb_test "step 2" ""
# OBSOLETE     gdb_test "p result" {\[.l: 33, .b: FALSE\]}
# OBSOLETE     gdb_test "set var result := \[383, TRUE\]" ""
# OBSOLETE     gdb_test "finish" ""
# OBSOLETE     gdb_test "p v_struct" {\[.l: 383, .b: TRUE\]}
# OBSOLETE }
# OBSOLETE 
# OBSOLETE do_tests
