Support for conditional breakpoints (Jim Fulton, with some changes).
diff --git a/Lib/pdb.py b/Lib/pdb.py
index 42080cc..ec6a2ab 100755
--- a/Lib/pdb.py
+++ b/Lib/pdb.py
@@ -96,27 +96,39 @@
 			print self.get_all_breaks() # XXX
 			return
 		# Try line number as argument
+		try:
+			arg = eval(arg, self.curframe.f_globals,
+				   self.curframe.f_locals)
+		except:
+			print '*** Could not eval argument:', arg
+			return
+
+		# Check for condition
+		try: arg, cond = arg
+		except: arg, cond = arg, None
+
 		try:	
-			lineno = int(eval(arg))
+			lineno = int(arg)
 			filename = self.curframe.f_code.co_filename
 		except:
 			# Try function name as the argument
 			import codehack
 			try:
-				func = eval(arg, self.curframe.f_globals,
-					    self.curframe.f_locals)
+				func = arg
 				if hasattr(func, 'im_func'):
 					func = func.im_func
 				code = func.func_code
 			except:
-				print '*** Could not eval argument:', arg
+				print '*** The specified object',
+				print 'is not a function', arg
 				return
 			lineno = codehack.getlineno(code)
 			filename = code.co_filename
 
 		# now set the break point
-		err = self.set_break(filename, lineno)
+		err = self.set_break(filename, lineno, cond)
 		if err: print '***', err
+
 	do_b = do_break
 	
 	def do_clear(self, arg):
@@ -352,10 +364,13 @@
 		self.help_b()
 
 	def help_b(self):
-		print """b(reak) [lineno | function]
+		print """b(reak) [lineno | function] [, "condition"]
 	With a line number argument, set a break there in the current
 	file.  With a function name, set a break at the entry of that
-	function.  Without argument, list all breaks."""
+	function.  Without argument, list all breaks.  If a second
+	argument is present, it is a string specifying an expression
+	which must evaluate to true before the breakpoint is honored.
+	"""
 
 	def help_clear(self):
 		self.help_cl()