diff options
author | Neal Norwitz <nnorwitz@gmail.com> | 2005-12-18 05:32:41 (GMT) |
---|---|---|
committer | Neal Norwitz <nnorwitz@gmail.com> | 2005-12-18 05:32:41 (GMT) |
commit | 4e6bf49a5e76fdb11ab5f0b8ea1be76630c112ce (patch) | |
tree | 9be8623b1aded88469aea911d2c37680ef60b667 /Python/compile.c | |
parent | db83eb3170ebdf55bd1c1add94838a9aefa8c00b (diff) | |
download | cpython-4e6bf49a5e76fdb11ab5f0b8ea1be76630c112ce.zip cpython-4e6bf49a5e76fdb11ab5f0b8ea1be76630c112ce.tar.gz cpython-4e6bf49a5e76fdb11ab5f0b8ea1be76630c112ce.tar.bz2 |
Handle more error conditions with SystemError
Diffstat (limited to 'Python/compile.c')
-rw-r--r-- | Python/compile.c | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/Python/compile.c b/Python/compile.c index 84f52e6..606a446 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -2760,8 +2760,7 @@ inplace_binop(struct compiler *c, operator_ty op) return INPLACE_FLOOR_DIVIDE; } PyErr_Format(PyExc_SystemError, - "inplace binary op %d should not be possible", - op); + "inplace binary op %d should not be possible", op); return 0; } @@ -2809,6 +2808,9 @@ compiler_nameop(struct compiler *c, identifier name, expr_context_ty ctx) case GLOBAL_EXPLICIT: optype = OP_GLOBAL; break; + default: + /* scope can be 0 */ + break; } /* XXX Leave assert here, but handle __doc__ and the like better */ @@ -2830,6 +2832,7 @@ compiler_nameop(struct compiler *c, identifier name, expr_context_ty ctx) Py_DECREF(mangled); return 0; case Param: + default: PyErr_SetString(PyExc_SystemError, "param invalid for deref variable"); return 0; @@ -2844,6 +2847,7 @@ compiler_nameop(struct compiler *c, identifier name, expr_context_ty ctx) case AugStore: break; case Param: + default: PyErr_SetString(PyExc_SystemError, "param invalid for local variable"); return 0; @@ -2860,6 +2864,7 @@ compiler_nameop(struct compiler *c, identifier name, expr_context_ty ctx) case AugStore: break; case Param: + default: PyErr_SetString(PyExc_SystemError, "param invalid for global variable"); return 0; @@ -2874,6 +2879,7 @@ compiler_nameop(struct compiler *c, identifier name, expr_context_ty ctx) case AugStore: break; case Param: + default: PyErr_SetString(PyExc_SystemError, "param invalid for name variable"); return 0; @@ -3361,6 +3367,7 @@ compiler_visit_expr(struct compiler *c, expr_ty e) ADDOP_NAME(c, DELETE_ATTR, e->v.Attribute.attr, names); break; case Param: + default: PyErr_SetString(PyExc_SystemError, "param invalid in attribute expression"); return 0; @@ -3388,6 +3395,7 @@ compiler_visit_expr(struct compiler *c, expr_ty e) VISIT_SLICE(c, e->v.Subscript.slice, Del); break; case Param: + default: PyErr_SetString(PyExc_SystemError, "param invalid in subscript expression"); return 0; @@ -3441,8 +3449,9 @@ compiler_augassign(struct compiler *c, stmt_ty s) ADDOP(c, inplace_binop(c, s->v.AugAssign.op)); return compiler_nameop(c, e->v.Name.id, Store); default: - fprintf(stderr, - "invalid node type for augmented assignment\n"); + PyErr_Format(PyExc_SystemError, + "invalid node type (%d) for augmented assignment", + e->kind); return 0; } return 1; @@ -3514,9 +3523,9 @@ compiler_handle_subscr(struct compiler *c, const char *kind, case Store: op = STORE_SUBSCR; break; case Del: op = DELETE_SUBSCR; break; case Param: - fprintf(stderr, - "invalid %s kind %d in subscript\n", - kind, ctx); + PyErr_Format(PyExc_SystemError, + "invalid %s kind %d in subscript\n", + kind, ctx); return 0; } if (ctx == AugLoad) { @@ -3599,6 +3608,7 @@ compiler_simple_slice(struct compiler *c, slice_ty s, expr_context_ty ctx) case Store: op = STORE_SLICE; break; case Del: op = DELETE_SLICE; break; case Param: + default: PyErr_SetString(PyExc_SystemError, "param invalid in simple slice"); return 0; @@ -3618,11 +3628,11 @@ compiler_visit_nested_slice(struct compiler *c, slice_ty s, break; case Slice_kind: return compiler_slice(c, s, ctx); - break; case Index_kind: VISIT(c, expr, s->v.Index.value); break; case ExtSlice_kind: + default: PyErr_SetString(PyExc_SystemError, "extended slice invalid in nested slice"); return 0; @@ -3664,6 +3674,10 @@ compiler_visit_slice(struct compiler *c, slice_ty s, expr_context_ty ctx) if (ctx != AugStore) VISIT(c, expr, s->v.Index.value); return compiler_handle_subscr(c, "index", ctx); + default: + PyErr_Format(PyExc_SystemError, + "invalid slice %d", s->kind); + return 0; } return 1; } |