[surface] Reorder asserts to make no assumptions about error objects.

If the surface is in error, then we cannot assume anything about the
validity of its contents other than the error status (and reference
count). This is for the cases were the surface is replaced by a nil
surface, and in future where the error surface may be replaced by a tiny
error object.
This commit is contained in:
Chris Wilson 2008-10-17 10:35:38 +01:00
parent 644e78ca4e
commit 1ddf0b2a5c

View file

@ -606,11 +606,11 @@ _cairo_surface_set_font_options (cairo_surface_t *surface,
{
cairo_status_t status;
assert (! surface->is_snapshot);
if (surface->status)
return;
assert (! surface->is_snapshot);
if (surface->finished) {
status = _cairo_surface_set_error (surface,
CAIRO_STATUS_SURFACE_FINISHED);
@ -704,6 +704,9 @@ slim_hidden_def (cairo_surface_flush);
void
cairo_surface_mark_dirty (cairo_surface_t *surface)
{
if (surface->status)
return;
assert (! surface->is_snapshot);
cairo_surface_mark_dirty_rectangle (surface, 0, 0, -1, -1);
@ -734,11 +737,11 @@ cairo_surface_mark_dirty_rectangle (cairo_surface_t *surface,
{
cairo_status_t status;
assert (! surface->is_snapshot);
if (surface->status)
return;
assert (! surface->is_snapshot);
if (surface->finished) {
status = _cairo_surface_set_error (surface, CAIRO_STATUS_SURFACE_FINISHED);
return;
@ -792,11 +795,11 @@ _cairo_surface_set_device_scale (cairo_surface_t *surface,
{
cairo_status_t status;
assert (! surface->is_snapshot);
if (surface->status)
return;
assert (! surface->is_snapshot);
if (surface->finished) {
status = _cairo_surface_set_error (surface, CAIRO_STATUS_SURFACE_FINISHED);
return;
@ -838,11 +841,11 @@ cairo_surface_set_device_offset (cairo_surface_t *surface,
{
cairo_status_t status;
assert (! surface->is_snapshot);
if (surface->status)
return;
assert (! surface->is_snapshot);
if (surface->finished) {
status = _cairo_surface_set_error (surface, CAIRO_STATUS_SURFACE_FINISHED);
return;
@ -921,11 +924,11 @@ cairo_surface_set_fallback_resolution (cairo_surface_t *surface,
{
cairo_status_t status;
assert (! surface->is_snapshot);
if (surface->status)
return;
assert (! surface->is_snapshot);
if (surface->finished) {
status = _cairo_surface_set_error (surface, CAIRO_STATUS_SURFACE_FINISHED);
return;
@ -987,11 +990,11 @@ _cairo_surface_acquire_source_image (cairo_surface_t *surface,
cairo_image_surface_t **image_out,
void **image_extra)
{
assert (!surface->finished);
if (surface->status)
return surface->status;
assert (!surface->finished);
if (surface->backend->acquire_source_image == NULL)
return CAIRO_INT_STATUS_UNSUPPORTED;
@ -1056,11 +1059,11 @@ _cairo_surface_acquire_dest_image (cairo_surface_t *surface,
cairo_rectangle_int_t *image_rect,
void **image_extra)
{
assert (!surface->finished);
if (surface->status)
return surface->status;
assert (!surface->finished);
if (surface->backend->acquire_dest_image == NULL)
return CAIRO_INT_STATUS_UNSUPPORTED;
@ -1265,8 +1268,6 @@ _cairo_surface_composite (cairo_operator_t op,
{
cairo_int_status_t status;
assert (! dst->is_snapshot);
if (mask) {
/* These operators aren't interpreted the same way by the backends;
* they are implemented in terms of other operators in cairo-gstate.c
@ -1277,6 +1278,8 @@ _cairo_surface_composite (cairo_operator_t op,
if (dst->status)
return dst->status;
assert (! dst->is_snapshot);
if (dst->finished)
return _cairo_surface_set_error (dst, CAIRO_STATUS_SURFACE_FINISHED);
@ -1326,11 +1329,11 @@ _cairo_surface_fill_rectangle (cairo_surface_t *surface,
{
cairo_rectangle_int_t rect;
assert (! surface->is_snapshot);
if (surface->status)
return surface->status;
assert (! surface->is_snapshot);
if (surface->finished)
return _cairo_surface_set_error (surface,CAIRO_STATUS_SURFACE_FINISHED);
@ -1368,11 +1371,11 @@ _cairo_surface_fill_region (cairo_surface_t *surface,
cairo_status_t status;
int i;
assert (! surface->is_snapshot);
if (surface->status)
return surface->status;
assert (! surface->is_snapshot);
num_boxes = _cairo_region_num_boxes (region);
if (num_boxes == 0)
@ -1440,11 +1443,11 @@ _cairo_surface_fill_rectangles (cairo_surface_t *surface,
{
cairo_int_status_t status;
assert (! surface->is_snapshot);
if (surface->status)
return surface->status;
assert (! surface->is_snapshot);
if (surface->finished)
return _cairo_surface_set_error (surface,CAIRO_STATUS_SURFACE_FINISHED);
@ -1471,11 +1474,11 @@ _cairo_surface_paint (cairo_surface_t *surface,
cairo_status_t status;
cairo_pattern_t *dev_source;
assert (! surface->is_snapshot);
if (surface->status)
return surface->status;
assert (! surface->is_snapshot);
status = _cairo_surface_copy_pattern_for_destination (source, surface, &dev_source);
if (status)
return _cairo_surface_set_error (surface, status);
@ -1504,11 +1507,11 @@ _cairo_surface_mask (cairo_surface_t *surface,
cairo_pattern_t *dev_source;
cairo_pattern_t *dev_mask;
assert (! surface->is_snapshot);
if (surface->status)
return surface->status;
assert (! surface->is_snapshot);
status = _cairo_surface_copy_pattern_for_destination (source, surface, &dev_source);
if (status)
goto FINISH;
@ -1616,11 +1619,11 @@ _cairo_surface_stroke (cairo_surface_t *surface,
cairo_matrix_t dev_ctm = *ctm;
cairo_matrix_t dev_ctm_inverse = *ctm_inverse;
assert (! surface->is_snapshot);
if (surface->status)
return surface->status;
assert (! surface->is_snapshot);
status = _cairo_surface_copy_pattern_for_destination (source, surface, &dev_source);
if (status)
return _cairo_surface_set_error (surface, status);
@ -1660,11 +1663,11 @@ _cairo_surface_fill (cairo_surface_t *surface,
cairo_status_t status;
cairo_pattern_t *dev_source;
assert (! surface->is_snapshot);
if (surface->status)
return surface->status;
assert (! surface->is_snapshot);
status = _cairo_surface_copy_pattern_for_destination (source, surface, &dev_source);
if (status)
return _cairo_surface_set_error (surface, status);
@ -1704,8 +1707,6 @@ _cairo_surface_composite_trapezoids (cairo_operator_t op,
{
cairo_int_status_t status;
assert (! dst->is_snapshot);
/* These operators aren't interpreted the same way by the backends;
* they are implemented in terms of other operators in cairo-gstate.c
*/
@ -1714,6 +1715,8 @@ _cairo_surface_composite_trapezoids (cairo_operator_t op,
if (dst->status)
return dst->status;
assert (! dst->is_snapshot);
if (dst->finished)
return _cairo_surface_set_error (dst, CAIRO_STATUS_SURFACE_FINISHED);
@ -1757,11 +1760,11 @@ cairo_surface_copy_page (cairo_surface_t *surface)
{
cairo_status_t status_ignored;
assert (! surface->is_snapshot);
if (surface->status)
return;
assert (! surface->is_snapshot);
if (surface->finished) {
status_ignored = _cairo_surface_set_error (surface,
CAIRO_STATUS_SURFACE_FINISHED);
@ -1794,11 +1797,11 @@ cairo_surface_show_page (cairo_surface_t *surface)
{
cairo_status_t status_ignored;
assert (! surface->is_snapshot);
if (surface->status)
return;
assert (! surface->is_snapshot);
if (surface->finished) {
status_ignored = _cairo_surface_set_error (surface,
CAIRO_STATUS_SURFACE_FINISHED);
@ -1915,9 +1918,6 @@ _cairo_surface_set_clip_region (cairo_surface_t *surface,
if (surface->status)
return surface->status;
if (surface->finished)
return _cairo_surface_set_error (surface,CAIRO_STATUS_SURFACE_FINISHED);
assert (surface->backend->set_clip_region != NULL);
surface->current_clip_serial = serial;
@ -2232,11 +2232,11 @@ _cairo_surface_show_text_glyphs (cairo_surface_t *surface,
cairo_scaled_font_t *dev_scaled_font = scaled_font;
cairo_pattern_t *dev_source;
assert (! surface->is_snapshot);
if (surface->status)
return surface->status;
assert (! surface->is_snapshot);
if (!num_glyphs && !utf8_len)
return CAIRO_STATUS_SUCCESS;
@ -2359,11 +2359,11 @@ _cairo_surface_old_show_glyphs (cairo_scaled_font_t *scaled_font,
{
cairo_status_t status;
assert (! dst->is_snapshot);
if (dst->status)
return dst->status;
assert (! dst->is_snapshot);
if (dst->finished)
return _cairo_surface_set_error (dst, CAIRO_STATUS_SURFACE_FINISHED);
@ -2483,11 +2483,11 @@ _cairo_surface_composite_fixup_unbounded (cairo_surface_t *dst,
cairo_rectangle_int_t *src_rectangle = NULL;
cairo_rectangle_int_t *mask_rectangle = NULL;
assert (! dst->is_snapshot);
if (dst->status)
return dst->status;
assert (! dst->is_snapshot);
/* The RENDER/libpixman operators are clipped to the bounds of the untransformed,
* non-repeating sources and masks. Other sources and masks can be ignored.
*/
@ -2561,11 +2561,11 @@ _cairo_surface_composite_shape_fixup_unbounded (cairo_surface_t *dst,
cairo_rectangle_int_t *src_rectangle = NULL;
cairo_rectangle_int_t *mask_rectangle = NULL;
assert (! dst->is_snapshot);
if (dst->status)
return dst->status;
assert (! dst->is_snapshot);
/* The RENDER/libpixman operators are clipped to the bounds of the untransformed,
* non-repeating sources and masks. Other sources and masks can be ignored.
*/