X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firedges.h;h=23c7a5d93ab18760f5ee98f453563371f849d890;hb=19f4dcc74aa67e5da2b4bea426f1b273cff26ac0;hp=90e618af3098cdd088954c0c836dab5f96f118cc;hpb=9e23e96c93cffaf51577ee32d796a80a2cceead8;p=libfirm diff --git a/ir/ir/iredges.h b/ir/ir/iredges.h index 90e618af3..23c7a5d93 100644 --- a/ir/ir/iredges.h +++ b/ir/ir/iredges.h @@ -47,6 +47,23 @@ const ir_edge_t *get_irn_out_edge_next(const ir_node *irn, #define foreach_out_edge(irn,edge) \ for(edge = get_irn_out_edge_first(irn); edge; edge = get_irn_out_edge_next(irn, edge)) +/** + * A convenience iteration macro over all out edges of a node, which is safe + * against alteration of the current edge. + * @param irn The node. + * @param edge An @c ir_edge_t pointer which shall be set to the current + * edge. + * @param ne The next edge, enables alteration safe erge processing. + */ +#define foreach_out_edge_safe(irn,edge,ne) \ + for( \ + (edge) = (get_irn_out_edge_first(irn)), \ + (ne) = ((edge) ? (get_irn_out_edge_next(irn, edge)) : NULL); \ + edge; \ + (edge) = (ne), (ne) = ((edge) ? (get_irn_out_edge_next(irn, edge)) : NULL) \ + ) + + /** * A convenience iteration macro for all control flow edges * leaving a block, and thus are cf successor edges.