- minor cleanup, removed bogus comments
- make method reload handle __private attrs correctly
- fixed whole word search
diff --git a/Mac/Tools/IDE/PyEdit.py b/Mac/Tools/IDE/PyEdit.py
index a58de1b..ac6cc0e 100644
--- a/Mac/Tools/IDE/PyEdit.py
+++ b/Mac/Tools/IDE/PyEdit.py
@@ -359,14 +359,15 @@
 		if self.editgroup.editor.changed:
 			import EasyDialogs
 			import Qd
-			Qd.InitCursor() # XXX should be done by dialog
-			save = EasyDialogs.AskYesNoCancel('Save window "%s" before closing?' % self.title, 1)
+			Qd.InitCursor()
+			save = EasyDialogs.AskYesNoCancel('Save window "%s" before closing?' % self.title,
+					default=1, no="Don\xd5t save")
 			if save > 0:
 				if self.domenu_save():
 					return 1
 			elif save < 0:
 				return 1
-		self.globals = None	    # XXX doesn't help... all globals leak :-(
+		self.globals = None
 		W.Window.close(self)
 	
 	def domenu_close(self, *args):
@@ -564,13 +565,12 @@
 			else:
 				raise W.AlertError, "Can't find a class."
 			if globals.has_key(classname):
-				locals = globals[classname].__dict__
+				klass = globals[classname]
 			else:
 				raise W.AlertError, "Can't find class \"%s\"." % classname
-			# dedent to top level
-			for i in range(len(lines)):
-				lines[i] = lines[i][1:]
-			pytext = string.join(lines, '\r')
+			# add class def
+			pytext = ("class %s:\n" % classname) + pytext
+			selfirstline = selfirstline - 1
 		elif indent > 0:
 			raise W.AlertError, "Can't run indented code."
 		
@@ -578,6 +578,10 @@
 		# now a traceback will give the right line number
 		pytext = selfirstline * '\r' + pytext
 		self.execstring(pytext, globals, locals, file, modname)
+		if indent == 1 and globals[classname] is not klass:
+			# update the class in place
+			klass.__dict__.update(globals[classname].__dict__)
+			globals[classname] = klass
 	
 	def setthreadstate(self, state):
 		oldstate = self._threadstate
@@ -786,7 +790,7 @@
 
 def _makewholewordpattern(word):
 	# first, escape special regex chars
-	for esc in "\\[].*^+$?":
+	for esc in "\\[]().*^+$?":
 		word = _escape(word, esc)
 	notwordcharspat = '[^' + _wordchars + ']'
 	pattern = '(' + word + ')'