text: # Copyright (C) 2011-2015 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/>.
  
  # This file is part of the GDB testsuite.  It tests python Finish
  # Breakpoints.
                  
  class MyFinishBreakpoint (gdb.FinishBreakpoint):
          def __init__(self, val, frame):
                  gdb.FinishBreakpoint.__init__ (self, frame)
                  print ("MyFinishBreakpoint init")
                  self.val = val
                  
          def stop(self):
                  print ("MyFinishBreakpoint stop with %d" % int (self.val.dereference ()))
                  print ("return_value is: %d" % int (self.return_value))
                  gdb.execute ("where 1")
                  return True
          
          def out_of_scope(self):
                  print ("MyFinishBreakpoint out of scope")
  
  class TestBreakpoint(gdb.Breakpoint):
      def __init__(self):
          gdb.Breakpoint.__init__ (self, spec="test_1", internal=1)
          self.silent = True
          self.count = 0
          print ("TestBreakpoint init")
          
      def stop(self):
          self.count += 1
          try:
                  TestFinishBreakpoint (gdb.newest_frame (), self.count)
          except ValueError as e:
                  print (e)
          return False
  
  class TestFinishBreakpoint (gdb.FinishBreakpoint):
      def __init__ (self, frame, count):
          self.count = count
          gdb.FinishBreakpoint.__init__ (self, frame, internal=1)
          
          
      def stop(self):
          print ("-->", self.number)
          if (self.count == 3):
              print ("test stop: %d" % self.count)
              return True
          else:
              print ("test don't stop: %d" % self.count)
              return False 
          
      
      def out_of_scope(self):
          print ("test didn't finish: %d" % self.count)
  
  class TestExplicitBreakpoint(gdb.Breakpoint):
          def stop(self):
                  try:
                          SimpleFinishBreakpoint (gdb.newest_frame ())
                  except ValueError as e:
                          print (e)
                  return False
  
  class SimpleFinishBreakpoint(gdb.FinishBreakpoint):
          def __init__(self, frame):
                  gdb.FinishBreakpoint.__init__ (self, frame)
                  
                  print ("SimpleFinishBreakpoint init")
                  
          def stop(self):
                  print ("SimpleFinishBreakpoint stop" )
                  return True
          
          def out_of_scope(self):
                  print ("SimpleFinishBreakpoint out of scope")
  
  print ("Python script imported")
  