[gs-cvs] rev 8079 - trunk/gs/src
leonardo at ghostscript.com
leonardo at ghostscript.com
Tue Jun 26 13:43:03 PDT 2007
Author: leonardo
Date: 2007-06-26 13:43:03 -0700 (Tue, 26 Jun 2007)
New Revision: 8079
Modified:
trunk/gs/src/gxcldev.h
trunk/gs/src/gxclimag.c
trunk/gs/src/gxclrect.c
Log:
Fix : Expanding gxcldev.h macros, part 2.
DETAILS :
This change is algorithmically equivalent.
The purpose is to eliminate gxcldev.h macros
to simplify the debugging of the clist writer methods.
This 2nd step replaces HANDLE_RECT_UNLESS
with macros that don't include goto or return statements.
Besides that, the pattern :
if (code < 0) {
band_code = code;
goto error_in_rect; /* ERROR_RECT(code); */
}
is replaced with the smaller one :
if (code < 0 && SET_BAND_CODE(code))
goto error_in_rect;
for a better readability.
Some compilers may claim unreferenced label error_in_rect.
To be fixed in the next step.
EXPECTED DIFFERENCES :
None.
Modified: trunk/gs/src/gxcldev.h
===================================================================
--- trunk/gs/src/gxcldev.h 2007-06-26 16:25:42 UTC (rev 8078)
+++ trunk/gs/src/gxcldev.h 2007-06-26 20:43:03 UTC (rev 8079)
@@ -576,17 +576,10 @@
height = min(band_end, yend) - y;\
retry_rect:\
;
-#define TRY_RECT\
- do
-#define HANDLE_RECT_UNLESS(codevar, unless_clause)\
- while (codevar < 0 &&\
- (codevar = clist_VMerror_recover(cdev, codevar)) >= 0\
- );\
- if (codevar < 0 && !(unless_clause))\
- BEGIN\
- band_code = (codevar);\
- goto error_in_rect;\
- END;
+
+#define RECT_RECOVER(codevar) (codevar < 0 && (codevar = clist_VMerror_recover(cdev, codevar)) >= 0)
+#define SET_BAND_CODE(codevar) (band_code = codevar)
+
#define END_RECTS_ON_ERROR(retry_cleanup, is_error, after_recovering)\
continue;\
error_in_rect:\
@@ -594,8 +587,7 @@
retry_cleanup;\
if ((is_error) &&\
cdev->driver_call_nesting == 0 &&\
- (band_code =\
- clist_VMerror_recover_flush(cdev, band_code)) >= 0 &&\
+ SET_BAND_CODE(clist_VMerror_recover_flush(cdev, band_code)) >= 0 &&\
(after_recovering)\
)\
goto retry_rect;\
Modified: trunk/gs/src/gxclimag.c
===================================================================
--- trunk/gs/src/gxclimag.c 2007-06-26 16:25:42 UTC (rev 8078)
+++ trunk/gs/src/gxclimag.c 2007-06-26 20:43:03 UTC (rev 8079)
@@ -108,28 +108,40 @@
int code;
ulong offset_temp;
- TRY_RECT {
+ do {
code = cmd_update_lop(cdev, pcls, lop);
- } HANDLE_RECT_UNLESS(code, 0);
+ } while (RECT_RECOVER(code));
+ /* HANDLE_RECT_UNLESS(code, 0); */
+ if (code < 0 && SET_BAND_CODE(code))
+ goto error_in_rect;
if (depth > 1 && !pcls->color_is_alpha) {
byte *dp;
- TRY_RECT {
+ do {
code =
set_cmd_put_op(dp, cdev, pcls, cmd_opv_set_copy_alpha, 1);
- } HANDLE_RECT_UNLESS(code, 0);
+ } while (RECT_RECOVER(code));
+ /* HANDLE_RECT_UNLESS(code, 0); */
+ if (code < 0 && SET_BAND_CODE(code))
+ goto error_in_rect;
pcls->color_is_alpha = 1;
}
- TRY_RECT {
+ do {
code = cmd_do_write_unknown(cdev, pcls, clip_path_known);
if (code >= 0)
code = cmd_do_enable_clip(cdev, pcls, pcpath != NULL);
- } HANDLE_RECT_UNLESS(code, 0);
- TRY_RECT {
+ } while (RECT_RECOVER(code));
+ /* HANDLE_RECT_UNLESS(code, 0); */
+ if (code < 0 && SET_BAND_CODE(code))
+ goto error_in_rect;
+ do {
code = cmd_put_drawing_color(cdev, pcls, pdcolor);
if (depth > 1 && code >= 0)
code = cmd_set_color1(cdev, pcls, pdcolor->colors.pure);
- } HANDLE_RECT_UNLESS(code, 0);
+ } while (RECT_RECOVER(code));
+ /* HANDLE_RECT_UNLESS(code, 0); */
+ if (code < 0 && SET_BAND_CODE(code))
+ goto error_in_rect;
pcls->colors_used.slow_rop |= slow_rop;
pcls->band_complexity.nontrivial_rops |= slow_rop;
pcls->band_complexity.uses_color |= (pdcolor->colors.pure != 0 && pdcolor->colors.pure != 0xffffff);
@@ -143,10 +155,12 @@
tile.size.y = tile.rep_height = orig_height;
tile.rep_shift = tile.shift = 0;
tile.id = id;
- TRY_RECT {
+ do {
code = clist_change_bits(cdev, pcls, &tile, depth);
- } HANDLE_RECT_UNLESS(code,
- (code != gs_error_VMerror || !cdev->error_is_retryable) );
+ } while (RECT_RECOVER(code));
+ /* HANDLE_RECT_UNLESS(code, (code != gs_error_VMerror || !cdev->error_is_retryable) ); */
+ if (code < 0 && !(code != gs_error_VMerror || !cdev->error_is_retryable) && SET_BAND_CODE(code))
+ goto error_in_rect;
if (code < 0) {
/* Something went wrong; just copy the bits. */
goto copy;
@@ -162,7 +176,7 @@
rect.x = orig_x, rect.y = y0;
rect.width = orig_width, rect.height = yend - y0;
rsize = 1 + cmd_sizexy(rect);
- TRY_RECT {
+ do {
code = (orig_data_x ?
cmd_put_set_data_x(cdev, pcls, orig_data_x) : 0);
if (code >= 0) {
@@ -182,7 +196,10 @@
cmd_putxy(rect, dp);
}
}
- } HANDLE_RECT_UNLESS(code, 0);
+ } while (RECT_RECOVER(code));
+ /* HANDLE_RECT_UNLESS(code, 0); */
+ if (code < 0 && SET_BAND_CODE(code))
+ goto error_in_rect;
pcls->rect = rect;
goto end;
}
@@ -656,7 +673,7 @@
byte image_op = cmd_opv_begin_image;
/* Make sure the imager state is up to date. */
- TRY_RECT {
+ do {
code = (pie->color_map_is_known ? 0 :
cmd_put_color_mapping(cdev, pie->pis));
pie->color_map_is_known = true;
@@ -673,11 +690,17 @@
code = cmd_do_enable_clip(cdev, pcls, pie->pcpath != NULL);
if (code >= 0)
code = cmd_update_lop(cdev, pcls, lop);
- } HANDLE_RECT_UNLESS(code, 0);
+ } while (RECT_RECOVER(code));
+ /* HANDLE_RECT_UNLESS(code, 0); */
+ if (code < 0 && SET_BAND_CODE(code))
+ goto error_in_rect;
if (pie->uses_color) {
- TRY_RECT {
+ do {
code = cmd_put_drawing_color(cdev, pcls, &pie->dcolor);
- } HANDLE_RECT_UNLESS(code, 0);
+ } while (RECT_RECOVER(code));
+ /* HANDLE_RECT_UNLESS(code, 0); */
+ if (code < 0 && SET_BAND_CODE(code))
+ goto error_in_rect;
}
if (entire_box.p.x != 0 || entire_box.p.y != 0 ||
entire_box.q.x != pie->image.Width ||
@@ -689,10 +712,13 @@
pie->image.Height - entire_box.q.y, bp);
}
len = bp - pie->begin_image_command;
- TRY_RECT {
+ do {
code =
set_cmd_put_op(dp, cdev, pcls, image_op, 1 + len);
- } HANDLE_RECT_UNLESS(code, 0);
+ } while (RECT_RECOVER(code));
+ /* HANDLE_RECT_UNLESS(code, 0); */
+ if (code < 0 && SET_BAND_CODE(code))
+ goto error_in_rect;
memcpy(dp + 1, pie->begin_image_command, len);
/* Mark band's begin_image as known */
@@ -743,18 +769,21 @@
}
for (iy = by0, ih = by1 - by0; ih > 0; iy += nrows, ih -= nrows) {
nrows = min(ih, rows_per_cmd);
- TRY_RECT {
+ do {
code = cmd_image_plane_data(cdev, pcls, planes, info,
bytes_per_plane, offsets,
xoff - xskip, nrows);
- } HANDLE_RECT_UNLESS(code, 0);
+ } while (RECT_RECOVER(code));
+ /* HANDLE_RECT_UNLESS(code, 0); */
+ if (code < 0 && SET_BAND_CODE(code))
+ goto error_in_rect;
for (i = 0; i < num_planes; ++i)
offsets[i] += planes[i].raster * nrows;
}
}
} END_RECTS_ON_ERROR(
code = clist_image_plane_data_retry_cleanup(dev, pie, yh_used, code),
- (code < 0 ? (band_code = code) : code) >= 0,
+ (code < 0 ? SET_BAND_CODE(code) : code) >= 0,
(cmd_clear_known(cdev,
clist_image_unknowns(dev, pie) | begin_image_known),
pie->color_map_is_known = false,
@@ -1438,10 +1467,13 @@
if (!(pcls->known & begin_image_known))
continue;
- TRY_RECT {
+ do {
if_debug1('L', "[L]image_end for band %d\n", band);
code = set_cmd_put_op(dp, cdev, pcls, cmd_opv_image_data, 2);
- } HANDLE_RECT_UNLESS(code, 0);
+ } while (RECT_RECOVER(code));
+ /* HANDLE_RECT_UNLESS(code, 0); */
+ if (code < 0 && SET_BAND_CODE(code))
+ goto error_in_rect;
dp[1] = 0; /* EOD */
pcls->known ^= begin_image_known;
} END_RECTS;
Modified: trunk/gs/src/gxclrect.c
===================================================================
--- trunk/gs/src/gxclrect.c 2007-06-26 16:25:42 UTC (rev 8078)
+++ trunk/gs/src/gxclrect.c 2007-06-26 20:43:03 UTC (rev 8079)
@@ -148,7 +148,7 @@
FOR_RECTS {
pcls->colors_used.or |= color;
pcls->band_complexity.uses_color |= ((color != 0xffffff) && (color != 0));
- TRY_RECT {
+ do {
code = cmd_disable_lop(cdev, pcls);
if (code >= 0 && color != pcls->colors[1])
code = cmd_put_color(cdev, pcls, &clist_select_color1,
@@ -156,7 +156,10 @@
if (code >= 0)
code = cmd_write_rect_cmd(cdev, pcls, cmd_op_fill_rect, x, y,
width, height);
- } HANDLE_RECT_UNLESS(code, 0);
+ } while (RECT_RECOVER(code));
+ /* HANDLE_RECT_UNLESS(code, 0); */
+ if (code < 0 && SET_BAND_CODE(code))
+ goto error_in_rect;
} END_RECTS;
return 0;
}
@@ -190,16 +193,21 @@
((color0 != gx_no_color_index) && (color0 != 0xffffff) && (color0 != 0)) ||
((color1 != gx_no_color_index) && (color1 != 0xffffff) && (color1 != 0));
- TRY_RECT {
+ do {
code = cmd_disable_lop(cdev, pcls);
- } HANDLE_RECT_UNLESS(code, 0);
+ } while (RECT_RECOVER(code));
+ /* HANDLE_RECT_UNLESS(code, 0); */
+ if (code < 0 && SET_BAND_CODE(code))
+ goto error_in_rect;
if (!cls_has_tile_id(cdev, pcls, tile->id, offset_temp)) {
code = 0;
if (tile->id != gx_no_bitmap_id) {
- TRY_RECT {
+ do {
code = clist_change_tile(cdev, pcls, tile, depth);
- } HANDLE_RECT_UNLESS(code,
- (code != gs_error_VMerror || !cdev->error_is_retryable));
+ } while (RECT_RECOVER(code));
+ /* HANDLE_RECT_UNLESS(code, (code != gs_error_VMerror || !cdev->error_is_retryable)); */
+ if (code < 0 && !(code != gs_error_VMerror || !cdev->error_is_retryable) && SET_BAND_CODE(code))
+ goto error_in_rect;
}
if (code < 0) {
/* ok if gx_default... does retries internally: */
@@ -208,14 +216,12 @@
x, y, width, height,
color0, color1,
px, py);
- if (code < 0) {
- band_code = code;
- goto error_in_rect; /* ERROR_RECT(code); */
- }
+ if (code < 0 && SET_BAND_CODE(code))
+ goto error_in_rect;
goto endr;
}
}
- TRY_RECT {
+ do {
code = 0;
if (color0 != pcls->tile_colors[0] || color1 != pcls->tile_colors[1])
code = cmd_set_tile_colors(cdev, pcls, color0, color1);
@@ -226,7 +232,10 @@
if (code >= 0)
code = cmd_write_rect_cmd(cdev, pcls, cmd_op_tile_rect, x, y,
width, height);
- } HANDLE_RECT_UNLESS(code, 0);
+ } while (RECT_RECOVER(code));
+ /* HANDLE_RECT_UNLESS(code, 0); */
+ if (code < 0 && SET_BAND_CODE(code))
+ goto error_in_rect;
endr:;
} END_RECTS;
return 0;
@@ -263,7 +272,7 @@
pcls->colors_used.or |= colors_used;
pcls->band_complexity.uses_color |= uses_color;
- TRY_RECT {
+ do {
code = cmd_disable_lop(cdev, pcls);
if (code >= 0)
code = cmd_disable_clip(cdev, pcls);
@@ -271,7 +280,10 @@
code = cmd_set_color0(cdev, pcls, color0);
if (color1 != pcls->colors[1] && code >= 0)
code = cmd_set_color1(cdev, pcls, color1);
- } HANDLE_RECT_UNLESS(code, 0);
+ } while (RECT_RECOVER(code));
+ /* HANDLE_RECT_UNLESS(code, 0); */
+ if (code < 0 && SET_BAND_CODE(code))
+ goto error_in_rect;
/* Don't bother to check for a possible cache hit: */
/* tile_rectangle and fill_mask handle those cases. */
copy:{
@@ -286,13 +298,16 @@
rect.x = x, rect.y = y;
rect.width = w1, rect.height = height;
rsize = (dx ? 3 : 1) + cmd_size_rect(&rect);
- TRY_RECT {
+ do {
code = cmd_put_bits(cdev, pcls, row, w1, height, raster,
rsize, (orig_id == gx_no_bitmap_id ?
1 << cmd_compress_rle :
cmd_mask_compress_any),
&dp, &csize);
- } HANDLE_RECT_UNLESS(code, code == gs_error_limitcheck);
+ } while (RECT_RECOVER(code));
+ /* HANDLE_RECT_UNLESS(code, code == gs_error_limitcheck); */
+ if (code < 0 && !(code == gs_error_limitcheck) && SET_BAND_CODE(code))
+ goto error_in_rect;
compress = (uint)code;
if (code < 0) {
/* The bitmap was too large; split up the transfer. */
@@ -319,10 +334,8 @@
w1 - w2, 1, color0, color1);
}
--cdev->driver_call_nesting; /* UNNEST_RECT */
- if (code < 0) {
- band_code = code;
- goto error_in_rect; /* ERROR_RECT(code); */
- }
+ if (code < 0 && SET_BAND_CODE(code))
+ goto error_in_rect;
continue;
}
}
@@ -367,18 +380,24 @@
pcls->colors_used.or |= colors_used;
pcls->band_complexity.uses_color = 1;
- TRY_RECT {
+ do {
code = cmd_disable_lop(cdev, pcls);
if (code >= 0)
code = cmd_disable_clip(cdev, pcls);
- } HANDLE_RECT_UNLESS(code, 0);
+ } while (RECT_RECOVER(code));
+ /* HANDLE_RECT_UNLESS(code, 0); */
+ if (code < 0 && SET_BAND_CODE(code))
+ goto error_in_rect;
if (pcls->color_is_alpha) {
byte *dp;
- TRY_RECT {
+ do {
code =
set_cmd_put_op(dp, cdev, pcls, cmd_opv_set_copy_color, 1);
- } HANDLE_RECT_UNLESS(code, 0);
+ } while (RECT_RECOVER(code));
+ /* HANDLE_RECT_UNLESS(code, 0); */
+ if (code < 0 && SET_BAND_CODE(code))
+ goto error_in_rect;
pcls->color_is_alpha = 0;
}
copy:{
@@ -392,11 +411,14 @@
rect.x = x, rect.y = y;
rect.width = w1, rect.height = height;
rsize = (dx ? 3 : 1) + cmd_size_rect(&rect);
- TRY_RECT {
+ do {
code = cmd_put_bits(cdev, pcls, row, w1 * depth,
height, raster, rsize,
1 << cmd_compress_rle, &dp, &csize);
- } HANDLE_RECT_UNLESS(code, code == gs_error_limitcheck);
+ } while (RECT_RECOVER(code));
+ /* HANDLE_RECT_UNLESS(code, code == gs_error_limitcheck); */
+ if (code < 0 && !(code == gs_error_limitcheck) && SET_BAND_CODE(code))
+ goto error_in_rect;
compress = (uint)code;
if (code < 0) {
/* The bitmap was too large; split up the transfer. */
@@ -421,10 +443,8 @@
x + w2, y, w1 - w2, 1);
}
--cdev->driver_call_nesting; /* UNNEST_RECT */
- if (code < 0) {
- band_code = code;
- goto error_in_rect; /* ERROR_RECT(code); */
- }
+ if (code < 0 && SET_BAND_CODE(code))
+ goto error_in_rect;
continue;
}
}
@@ -473,24 +493,33 @@
int code;
pcls->colors_used.or |= color;
- TRY_RECT {
+ do {
code = cmd_disable_lop(cdev, pcls);
if (code >= 0)
code = cmd_disable_clip(cdev, pcls);
- } HANDLE_RECT_UNLESS(code, 0);
+ } while (RECT_RECOVER(code));
+ /* HANDLE_RECT_UNLESS(code, 0); */
+ if (code < 0 && SET_BAND_CODE(code))
+ goto error_in_rect;
if (!pcls->color_is_alpha) {
byte *dp;
- TRY_RECT {
+ do {
code =
set_cmd_put_op(dp, cdev, pcls, cmd_opv_set_copy_alpha, 1);
- } HANDLE_RECT_UNLESS(code, 0);
+ } while (RECT_RECOVER(code));
+ /* HANDLE_RECT_UNLESS(code, 0); */
+ if (code < 0 && SET_BAND_CODE(code))
+ goto error_in_rect;
pcls->color_is_alpha = 1;
}
if (color != pcls->colors[1]) {
- TRY_RECT {
+ do {
code = cmd_set_color1(cdev, pcls, color);
- } HANDLE_RECT_UNLESS(code, 0);
+ } while (RECT_RECOVER(code));
+ /* HANDLE_RECT_UNLESS(code, 0); */
+ if (code < 0 && SET_BAND_CODE(code))
+ goto error_in_rect;
}
copy:{
gx_cmd_rect rect;
@@ -503,11 +532,14 @@
rect.x = x, rect.y = y;
rect.width = w1, rect.height = height;
rsize = (dx ? 4 : 2) + cmd_size_rect(&rect);
- TRY_RECT {
+ do {
code = cmd_put_bits(cdev, pcls, row, w1 << log2_depth,
height, raster, rsize,
1 << cmd_compress_rle, &dp, &csize);
- } HANDLE_RECT_UNLESS(code, code == gs_error_limitcheck);
+ } while (RECT_RECOVER(code));
+ /* HANDLE_RECT_UNLESS(code, code == gs_error_limitcheck); */
+ if (code < 0 && !(code == gs_error_limitcheck) && SET_BAND_CODE(code))
+ goto error_in_rect;
compress = (uint)code;
if (code < 0) {
/* The bitmap was too large; split up the transfer. */
@@ -533,10 +565,8 @@
color, depth);
}
--cdev->driver_call_nesting; /* UNNEST_RECT */
- if (code < 0) {
- band_code = code;
- goto error_in_rect; /* ERROR_RECT(code); */
- }
+ if (code < 0 && SET_BAND_CODE(code))
+ goto error_in_rect;
continue;
}
}
@@ -636,11 +666,14 @@
tile_with_id.id = gs_next_ids(dev->memory, 1);
tiles = &tile_with_id;
}
- TRY_RECT {
+ do {
code = clist_change_tile(cdev, pcls, tiles,
(tcolors != 0 ? 1 :
dev->color_info.depth));
- } HANDLE_RECT_UNLESS(code, code == gs_error_limitcheck);
+ } while (RECT_RECOVER(code));
+ /* HANDLE_RECT_UNLESS(code, code == gs_error_limitcheck); */
+ if (code < 0 && !(code == gs_error_limitcheck) && SET_BAND_CODE(code))
+ goto error_in_rect;
if (code < 0) {
/*
* The error is a limitcheck: we have a tile that
@@ -689,40 +722,46 @@
phase_x, pcls->tile_phase.y, lop);
}
--cdev->driver_call_nesting; /* UNNEST_RECT */
- if (code < 0) {
- band_code = code;
- goto error_in_rect; /* ERROR_RECT(code); */
- }
+ if (code < 0 && SET_BAND_CODE(code))
+ goto error_in_rect;
}
continue;
}
if (phase_x != pcls->tile_phase.x ||
phase_y != pcls->tile_phase.y
) {
- TRY_RECT {
+ do {
code = cmd_set_tile_phase(cdev, pcls, phase_x,
phase_y);
- } HANDLE_RECT_UNLESS(code, 0);
+ } while (RECT_RECOVER(code));
+ /* HANDLE_RECT_UNLESS(code, 0); */
+ if (code < 0 && SET_BAND_CODE(code))
+ goto error_in_rect;
}
}
}
/* Set the tile colors. */
- TRY_RECT {
+ do {
code =
(tcolors != 0 ?
cmd_set_tile_colors(cdev, pcls, tcolors[0], tcolors[1]) :
cmd_set_tile_colors(cdev, pcls, gx_no_color_index,
gx_no_color_index));
- } HANDLE_RECT_UNLESS(code, 0);
+ } while (RECT_RECOVER(code));
+ /* HANDLE_RECT_UNLESS(code, 0); */
+ if (code < 0 && SET_BAND_CODE(code))
+ goto error_in_rect;
}
- TRY_RECT {
+ do {
code = 0;
if (lop != pcls->lop)
code = cmd_set_lop(cdev, pcls, lop);
if (code >= 0)
code = cmd_enable_lop(cdev, pcls);
- } HANDLE_RECT_UNLESS(code, 0);
-
+ } while (RECT_RECOVER(code));
+ /* HANDLE_RECT_UNLESS(code, 0); */
+ if (code < 0 && SET_BAND_CODE(code))
+ goto error_in_rect;
/* Set lop_enabled to -1 so that fill_rectangle / copy_* */
/* won't attempt to set it to 0. */
pcls->lop_enabled = -1;
@@ -742,10 +781,8 @@
}
--cdev->driver_call_nesting; /* UNNEST_RECT */
pcls->lop_enabled = 1;
- if (code < 0) {
- band_code = code;
- goto error_in_rect; /* ERROR_RECT(code); */
- }
+ if (code < 0 && SET_BAND_CODE(code))
+ goto error_in_rect;
} END_RECTS;
return 0;
}
More information about the gs-cvs
mailing list