# OBSOLETE # Copyright 1995, 1996, 1997 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 Wilfried Moser (moser@aut.alcatel.at)
# OBSOLETE #
# OBSOLETE 
# OBSOLETE if $tracelevel then {
# OBSOLETE         strace $tracelevel
# OBSOLETE }
# OBSOLETE 
# OBSOLETE if [skip_chill_tests] then { continue }
# OBSOLETE 
# OBSOLETE set testfile "gch1272"
# 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 # Set the current language to chill.  This counts as a test.  If it
# OBSOLETE # fails, then we skip the other tests.
# OBSOLETE 
# OBSOLETE proc set_lang_chill {} {
# OBSOLETE     global gdb_prompt
# OBSOLETE     global binfile objdir subdir
# OBSOLETE 
# OBSOLETE     verbose "loading file '$binfile'"
# OBSOLETE     gdb_load $binfile
# OBSOLETE 
# OBSOLETE     send_gdb "set language chill\n"
# OBSOLETE     gdb_expect {
# OBSOLETE         -re ".*$gdb_prompt $" {}
# OBSOLETE         timeout { fail "set language chill (timeout)" ; return 0 }
# OBSOLETE     }
# OBSOLETE 
# OBSOLETE     return [gdb_test "show language" ".* source language is \"chill\".*" \
# OBSOLETE         "set language to \"chill\""]
# OBSOLETE }
# 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 
# OBSOLETE gdb_test "set print sevenbit-strings" ".*"
# OBSOLETE 
# OBSOLETE if ![set_lang_chill] then {
# OBSOLETE     runto brrr
# OBSOLETE 
# OBSOLETE     # check foo
# OBSOLETE     gdb_test {print foo} { = \[\(0:99\): 222\]}
# OBSOLETE     gdb_test "set var foo := m_array\[\(\*\):44\]" ".*"
# OBSOLETE     gdb_test {print foo} { = \[\(0:99\): 44\]}
# OBSOLETE 
# OBSOLETE     # check bar
# OBSOLETE     gdb_test {print bar} { = \[\(-10:20\): \[.i: 0, .b: FALSE\]\]}
# OBSOLETE     gdb_test "set var bar := m_bar\[\(\*\): \[42, TRUE\]\]" ".*"
# OBSOLETE     gdb_test {print bar} { = \[\(-10:20\): \[.i: 42, .b: TRUE\]\]}
# OBSOLETE 
# OBSOLETE     # some failues
# OBSOLETE     gdb_test "set var foo := \[\(\*\):44\]" {\(\*\) only possible with modename in front of tuple \(mode\[\.\.\]\)}
# OBSOLETE     gdb_test "set var foo := m_xxx\[\(\*\):44\]" {Invalid cast\.}
# OBSOLETE     gdb_test "set var foo := m_struct\[\(\*\):44\]" {\(\*\) in invalid context}
# OBSOLETE     gdb_test "set var foo := m_ps\[\(\*\):44\]" {\(\*\) in invalid context}
# OBSOLETE }
