#! /bin/bash

# This little script parse a list of C files, and extract the TRY blocks of it.
# Martin Quinson, 2006. 
# Demerdierensiesich licence.

# It can reveal usefull when you have a segfault on exception throwing. This
# is often the symptom that something somewhere got out of a TRY block with
# return, goto, break or such. This is forbiden because some extra cleanups
# must be performed at the end of the block.

# So, if it happens to you, you may find this script usefull: let it extract
# all the TRY blocks of your project, and grep for the forbidden keywords
# given above.

# You obviously have to adapt it to your case. The proper solution would be
# to accept the extra -I pathes from the command line. 
# Patch welcome ;)

for file in `find -name '*.c'` ; do

base=`dirname $file`
cmd="cat $file \
      | cpp -I/home/mquinson/CVSIMPORT/gras/gras/include \
            -I/home/mquinson/CVSIMPORT/gras/gras/src \
	    -I/home/mquinson/CVSIMPORT/gras/gras/src/include \
	    -I$base \
	    -D__XBT_EX_H__ -D_XBT_LOG_H_ \
      | sed -n -e '/TRY/,/CATCH/p' \
      | sed -e 's/^.*TRY.*$/----------------/' -e '/CATCH/d'"

err=`eval $cmd 2>&1 >/dev/null`
if [ -n "$err" ] ; then
  echo "XXXXXXXXXX ERROR IN FILE $file"
  echo $err
fi

if [ -n "`eval $cmd 2>/dev/null`" ] ; then
  echo "XXX FILE $file"
  eval "$cmd" 2>/dev/null
fi

done
