diff options
author | Michael Foord <michael@voidspace.org.uk> | 2012-03-25 17:16:26 (GMT) |
---|---|---|
committer | Michael Foord <michael@voidspace.org.uk> | 2012-03-25 17:16:26 (GMT) |
commit | a3eabb6f8eb0c8f9e5c3d2ecd6f60a96567624b3 (patch) | |
tree | 5fcf388089b00a6e1f72bbd2f295385080aa61b1 | |
parent | 313f85f0ca1adb198e1cf7c012f7f0d1692339ae (diff) | |
parent | fe17b2bc77851be1724f9ce2ea07112a06f413ab (diff) | |
download | cpython-a3eabb6f8eb0c8f9e5c3d2ecd6f60a96567624b3.zip cpython-a3eabb6f8eb0c8f9e5c3d2ecd6f60a96567624b3.tar.gz cpython-a3eabb6f8eb0c8f9e5c3d2ecd6f60a96567624b3.tar.bz2 |
Merge
-rw-r--r-- | Lib/test/test_decimal.py | 2 | ||||
-rw-r--r-- | Modules/_decimal/_decimal.c | 9 |
2 files changed, 9 insertions, 2 deletions
diff --git a/Lib/test/test_decimal.py b/Lib/test/test_decimal.py index 4a352e5..694b959 100644 --- a/Lib/test/test_decimal.py +++ b/Lib/test/test_decimal.py @@ -3837,7 +3837,7 @@ class CheckAttributes(unittest.TestCase): x = dir(C) y = [s for s in dir(P) if '__' in s or not s.startswith('_')] - self.assertEqual(set(x) - set(y), {'MallocError'}) + self.assertEqual(set(x) - set(y), set()) def test_context_attributes(self): diff --git a/Modules/_decimal/_decimal.c b/Modules/_decimal/_decimal.c index aa39de1..bb2df44 100644 --- a/Modules/_decimal/_decimal.c +++ b/Modules/_decimal/_decimal.c @@ -168,7 +168,9 @@ static DecCondMap cond_map[] = { {"DivisionImpossible", "decimal.DivisionImpossible", MPD_Division_impossible, NULL}, {"DivisionUndefined", "decimal.DivisionUndefined", MPD_Division_undefined, NULL}, {"InvalidContext", "decimal.InvalidContext", MPD_Invalid_context, NULL}, +#ifdef EXTRA_FUNCTIONALITY {"MallocError", "decimal.MallocError", MPD_Malloc_error, NULL}, +#endif {NULL} }; @@ -466,9 +468,14 @@ dec_addstatus(PyObject *context, uint32_t status) mpd_context_t *ctx = CTX(context); ctx->status |= status; - if (ctx->traps&status) { + if (status & (ctx->traps|MPD_Malloc_error)) { PyObject *ex, *siglist; + if (status & MPD_Malloc_error) { + PyErr_NoMemory(); + return 1; + } + ex = flags_as_exception(ctx->traps&status); if (ex == NULL) { return 1; /* GCOV_NOT_REACHED */ |