summaryrefslogtreecommitdiffstats
path: root/Lib/decimal.py
diff options
context:
space:
mode:
authorMark Dickinson <dickinsm@gmail.com>2010-07-08 21:22:54 (GMT)
committerMark Dickinson <dickinsm@gmail.com>2010-07-08 21:22:54 (GMT)
commit9b9e12530d976d2698c583eb3784e11b10270eb8 (patch)
treeec25dfec758386f81c4ae5af45c2309a95cb8dc7 /Lib/decimal.py
parente85aa739ab0d396665908c0a489cfdeb49c88674 (diff)
downloadcpython-9b9e12530d976d2698c583eb3784e11b10270eb8.zip
cpython-9b9e12530d976d2698c583eb3784e11b10270eb8.tar.gz
cpython-9b9e12530d976d2698c583eb3784e11b10270eb8.tar.bz2
Merged revisions 82654 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r82654 | mark.dickinson | 2010-07-08 22:15:36 +0100 (Thu, 08 Jul 2010) | 3 lines Issue #9136: Profiling Decimal gave 'dictionary changed size during iteration'. Remove the use of locals() that caused this error. ........
Diffstat (limited to 'Lib/decimal.py')
-rw-r--r--Lib/decimal.py46
1 files changed, 31 insertions, 15 deletions
diff --git a/Lib/decimal.py b/Lib/decimal.py
index 71aaa5c..feba3d7 100644
--- a/Lib/decimal.py
+++ b/Lib/decimal.py
@@ -3756,22 +3756,38 @@ class Context(object):
Emin=None, Emax=None,
capitals=None, _clamp=0,
_ignored_flags=None):
- if flags is None:
- flags = []
+ # Set defaults; for everything except flags and _ignored_flags,
+ # inherit from DefaultContext.
+ try:
+ dc = DefaultContext
+ except NameError:
+ pass
+
+ self.prec = prec if prec is not None else dc.prec
+ self.rounding = rounding if rounding is not None else dc.rounding
+ self.Emin = Emin if Emin is not None else dc.Emin
+ self.Emax = Emax if Emax is not None else dc.Emax
+ self.capitals = capitals if capitals is not None else dc.capitals
+ self._clamp = _clamp if _clamp is not None else dc._clamp
+
if _ignored_flags is None:
- _ignored_flags = []
- if not isinstance(flags, dict):
- flags = dict([(s, int(s in flags)) for s in _signals])
- del s
- if traps is not None and not isinstance(traps, dict):
- traps = dict([(s, int(s in traps)) for s in _signals])
- del s
- for name, val in locals().items():
- if val is None:
- setattr(self, name, _copy.copy(getattr(DefaultContext, name)))
- else:
- setattr(self, name, val)
- del self.self
+ self._ignored_flags = []
+ else:
+ self._ignored_flags = _ignored_flags
+
+ if traps is None:
+ self.traps = dc.traps.copy()
+ elif not isinstance(traps, dict):
+ self.traps = dict((s, int(s in traps)) for s in _signals)
+ else:
+ self.traps = traps
+
+ if flags is None:
+ self.flags = dict.fromkeys(_signals, 0)
+ elif not isinstance(flags, dict):
+ self.flags = dict((s, int(s in flags)) for s in _signals)
+ else:
+ self.flags = flags
def __repr__(self):
"""Show the current context."""