From cf320c25c29a51d51ef6ae9776888a66b281c289 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 25 Jan 2026 14:12:26 +0000 Subject: [PATCH 1/6] Initial plan From 86f15d02e9d1dadbb33f77cd72fcdbd87bb312e3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 25 Jan 2026 14:33:21 +0000 Subject: [PATCH 2/6] Implement reentrant IGRAPH_FINALLY API with local stack Co-authored-by: krlmlr <1741643+krlmlr@users.noreply.github.com> --- src/rinterface.c | 3124 ++++++++++------- src/rinterface.h | 55 + src/rinterface_extra.c | 376 +- .../py-stimulus/src/stimulus/generators/r.py | 6 +- tools/stimulus/types-RC.yaml | 232 +- 5 files changed, 2191 insertions(+), 1602 deletions(-) diff --git a/src/rinterface.c b/src/rinterface.c index 4147ceed5f8..ee5a7f69a1e 100644 --- a/src/rinterface.c +++ b/src/rinterface.c @@ -39,6 +39,7 @@ SEXP R_igraph_empty(SEXP n, SEXP directed) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; @@ -48,10 +49,10 @@ SEXP R_igraph_empty(SEXP n, SEXP directed) { IGRAPH_R_CHECK(igraph_empty(&c_graph, c_n, c_directed)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -68,20 +69,21 @@ SEXP R_igraph_add_edges(SEXP graph, SEXP edges) { SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph_copy(graph, &c_graph); - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); Rz_SEXP_to_vector_int_copy(edges, &c_edges); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edges); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edges); /* Call igraph */ IGRAPH_R_CHECK(igraph_add_edges(&c_graph, &c_edges, 0)); /* Convert output */ PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_edges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -100,6 +102,7 @@ SEXP R_igraph_empty_attrs(SEXP n, SEXP directed) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; @@ -109,10 +112,10 @@ SEXP R_igraph_empty_attrs(SEXP n, SEXP directed) { IGRAPH_R_CHECK(igraph_empty_attrs(&c_graph, c_n, c_directed, 0)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -129,9 +132,10 @@ SEXP R_igraph_add_vertices(SEXP graph, SEXP nv) { SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph_copy(graph, &c_graph); - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); IGRAPH_R_CHECK_INT(nv); c_nv = (igraph_integer_t) REAL(nv)[0]; /* Call igraph */ @@ -140,7 +144,7 @@ SEXP R_igraph_add_vertices(SEXP graph, SEXP nv) { /* Convert output */ PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -157,16 +161,17 @@ SEXP R_igraph_copy(SEXP from) { SEXP to; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(from, &c_from); /* Call igraph */ IGRAPH_R_CHECK(igraph_copy(&c_to, &c_from)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_to); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_to); PROTECT(to=Ry_igraph_to_SEXP(&c_to)); IGRAPH_I_DESTROY(&c_to); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = to; UNPROTECT(1); @@ -182,9 +187,10 @@ SEXP R_igraph_delete_edges(SEXP graph, SEXP edges) { igraph_es_t c_edges; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph_copy(graph, &c_graph); - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); igraph_vector_int_t c_edges_data; IGRAPH_R_CHECK(Rz_SEXP_to_igraph_es(edges, &c_graph, &c_edges, &c_edges_data)); /* Call igraph */ @@ -193,7 +199,7 @@ SEXP R_igraph_delete_edges(SEXP graph, SEXP edges) { /* Convert output */ PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_edges_data); igraph_es_destroy(&c_edges); r_result = graph; @@ -211,9 +217,10 @@ SEXP R_igraph_delete_vertices(SEXP graph, SEXP vertices) { igraph_vs_t c_vertices; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph_copy(graph, &c_graph); - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); igraph_vector_int_t c_vertices_data; Rz_SEXP_to_igraph_vs(vertices, &c_graph, &c_vertices, &c_vertices_data); /* Call igraph */ @@ -222,7 +229,7 @@ SEXP R_igraph_delete_vertices(SEXP graph, SEXP vertices) { /* Convert output */ PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vertices_data); igraph_vs_destroy(&c_vertices); r_result = graph; @@ -244,15 +251,16 @@ SEXP R_igraph_delete_vertices_idx(SEXP graph, SEXP vertices) { SEXP invidx; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph_copy(graph, &c_graph); - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); igraph_vector_int_t c_vertices_data; Rz_SEXP_to_igraph_vs(vertices, &c_graph, &c_vertices, &c_vertices_data); IGRAPH_R_CHECK(igraph_vector_int_init(&c_idx, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_idx); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_idx); IGRAPH_R_CHECK(igraph_vector_int_init(&c_invidx, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_invidx); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_invidx); /* Call igraph */ IGRAPH_R_CHECK(igraph_delete_vertices_idx(&c_graph, c_vertices, &c_idx, &c_invidx)); @@ -261,15 +269,15 @@ SEXP R_igraph_delete_vertices_idx(SEXP graph, SEXP vertices) { PROTECT(r_names=NEW_CHARACTER(3)); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vertices_data); igraph_vs_destroy(&c_vertices); PROTECT(idx=Ry_igraph_vector_int_to_SEXP(&c_idx)); igraph_vector_int_destroy(&c_idx); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(invidx=Ry_igraph_vector_int_to_SEXP(&c_invidx)); igraph_vector_int_destroy(&c_invidx); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, graph); SET_VECTOR_ELT(r_result, 1, idx); SET_VECTOR_ELT(r_result, 2, invidx); @@ -291,6 +299,7 @@ SEXP R_igraph_vcount(SEXP graph) { igraph_t c_graph; igraph_integer_t c_result; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ @@ -313,6 +322,7 @@ SEXP R_igraph_ecount(SEXP graph) { igraph_t c_graph; igraph_integer_t c_result; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ @@ -339,10 +349,11 @@ SEXP R_igraph_neighbors(SEXP graph, SEXP vid, SEXP mode) { SEXP neis; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_neis, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_neis); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_neis); c_vid = (igraph_integer_t) REAL(vid)[0]; c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ @@ -351,7 +362,7 @@ SEXP R_igraph_neighbors(SEXP graph, SEXP vid, SEXP mode) { /* Convert output */ PROTECT(neis=Ry_igraph_vector_int_to_SEXPp1(&c_neis)); igraph_vector_int_destroy(&c_neis); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = neis; UNPROTECT(1); @@ -366,6 +377,7 @@ SEXP R_igraph_is_directed(SEXP graph) { igraph_t c_graph; igraph_bool_t c_result; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ @@ -393,10 +405,11 @@ SEXP R_igraph_degree(SEXP graph, SEXP vids, SEXP mode, SEXP loops) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); c_mode = (igraph_neimode_t) Rf_asInteger(mode); @@ -408,7 +421,7 @@ SEXP R_igraph_degree(SEXP graph, SEXP vids, SEXP mode, SEXP loops) { /* Convert output */ PROTECT(res=Ry_igraph_vector_int_to_SEXP(&c_res)); igraph_vector_int_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vids_data); igraph_vs_destroy(&c_vids); r_result = res; @@ -430,6 +443,7 @@ SEXP R_igraph_edge(SEXP graph, SEXP eid) { SEXP to; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK_INT(eid); @@ -468,12 +482,13 @@ SEXP R_igraph_edges(SEXP graph, SEXP eids) { SEXP edges; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); igraph_vector_int_t c_eids_data; IGRAPH_R_CHECK(Rz_SEXP_to_igraph_es(eids, &c_graph, &c_eids, &c_eids_data)); IGRAPH_R_CHECK(igraph_vector_int_init(&c_edges, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edges); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edges); /* Call igraph */ IGRAPH_R_CHECK(igraph_edges(&c_graph, c_eids, &c_edges)); @@ -482,7 +497,7 @@ SEXP R_igraph_edges(SEXP graph, SEXP eids) { igraph_es_destroy(&c_eids); PROTECT(edges=Ry_igraph_vector_int_to_SEXPp1(&c_edges)); igraph_vector_int_destroy(&c_edges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = edges; UNPROTECT(1); @@ -502,12 +517,13 @@ SEXP R_igraph_get_eids(SEXP graph, SEXP pairs, SEXP directed, SEXP error) { SEXP eids; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_eids, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_eids); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_eids); Rz_SEXP_to_vector_int_copy(pairs, &c_pairs); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_pairs); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_pairs); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; IGRAPH_R_CHECK_BOOL(error); @@ -518,9 +534,9 @@ SEXP R_igraph_get_eids(SEXP graph, SEXP pairs, SEXP directed, SEXP error) { /* Convert output */ PROTECT(eids=Ry_igraph_vector_int_to_SEXPp1(&c_eids)); igraph_vector_int_destroy(&c_eids); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_pairs); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = eids; UNPROTECT(1); @@ -540,10 +556,11 @@ SEXP R_igraph_get_all_eids_between(SEXP graph, SEXP from, SEXP to, SEXP directed SEXP eids; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_eids, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_eids); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_eids); c_from = (igraph_integer_t) REAL(from)[0]; c_to = (igraph_integer_t) REAL(to)[0]; IGRAPH_R_CHECK_BOOL(directed); @@ -554,7 +571,7 @@ SEXP R_igraph_get_all_eids_between(SEXP graph, SEXP from, SEXP to, SEXP directed /* Convert output */ PROTECT(eids=Ry_igraph_vector_int_to_SEXPp1(&c_eids)); igraph_vector_int_destroy(&c_eids); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = eids; UNPROTECT(1); @@ -573,10 +590,11 @@ SEXP R_igraph_incident(SEXP graph, SEXP vid, SEXP mode) { SEXP eids; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_eids, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_eids); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_eids); c_vid = (igraph_integer_t) REAL(vid)[0]; c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ @@ -585,7 +603,7 @@ SEXP R_igraph_incident(SEXP graph, SEXP vid, SEXP mode) { /* Convert output */ PROTECT(eids=Ry_igraph_vector_int_to_SEXPp1(&c_eids)); igraph_vector_int_destroy(&c_eids); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = eids; UNPROTECT(1); @@ -603,6 +621,7 @@ SEXP R_igraph_is_same_graph(SEXP graph1, SEXP graph2) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph1, &c_graph1); Rz_SEXP_to_igraph(graph2, &c_graph2); @@ -630,9 +649,10 @@ SEXP R_igraph_create(SEXP edges, SEXP n, SEXP directed) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(edges, &c_edges)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edges); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edges); IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; IGRAPH_R_CHECK_BOOL(directed); @@ -641,12 +661,12 @@ SEXP R_igraph_create(SEXP edges, SEXP n, SEXP directed) { IGRAPH_R_CHECK(igraph_create(&c_graph, &c_edges, c_n, c_directed)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_edges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -665,6 +685,7 @@ SEXP R_igraph_adjacency(SEXP adjmatrix, SEXP mode, SEXP loops) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_matrix(adjmatrix, &c_adjmatrix); c_mode = (igraph_adjacency_t) Rf_asInteger(mode); @@ -673,10 +694,10 @@ SEXP R_igraph_adjacency(SEXP adjmatrix, SEXP mode, SEXP loops) { IGRAPH_R_CHECK(igraph_adjacency(&c_graph, &c_adjmatrix, c_mode, c_loops)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -695,21 +716,22 @@ SEXP R_igraph_sparse_adjacency(SEXP adjmatrix, SEXP mode, SEXP loops) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_sparsemat(adjmatrix, &c_adjmatrix); - IGRAPH_FINALLY(igraph_sparsemat_destroy, &c_adjmatrix); + IGRAPH_LOCAL_FINALLY(igraph_sparsemat_destroy, &c_adjmatrix); c_mode = (igraph_adjacency_t) Rf_asInteger(mode); c_loops = (igraph_loops_t) Rf_asInteger(loops); /* Call igraph */ IGRAPH_R_CHECK(igraph_sparse_adjacency(&c_graph, &c_adjmatrix, c_mode, c_loops)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_sparsemat_destroy(&c_adjmatrix); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -730,12 +752,13 @@ SEXP R_igraph_sparse_weighted_adjacency(SEXP adjmatrix, SEXP mode, SEXP loops) { SEXP weights; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_sparsemat(adjmatrix, &c_adjmatrix); - IGRAPH_FINALLY(igraph_sparsemat_destroy, &c_adjmatrix); + IGRAPH_LOCAL_FINALLY(igraph_sparsemat_destroy, &c_adjmatrix); c_mode = (igraph_adjacency_t) Rf_asInteger(mode); IGRAPH_R_CHECK(igraph_vector_init(&c_weights, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_weights); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_weights); weights=R_GlobalEnv; /* hack to have a non-NULL value */ c_loops = (igraph_loops_t) Rf_asInteger(loops); /* Call igraph */ @@ -744,15 +767,15 @@ SEXP R_igraph_sparse_weighted_adjacency(SEXP adjmatrix, SEXP mode, SEXP loops) { /* Convert output */ PROTECT(r_result=NEW_LIST(2)); PROTECT(r_names=NEW_CHARACTER(2)); - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_sparsemat_destroy(&c_adjmatrix); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(weights=Ry_igraph_0orvector_to_SEXP(&c_weights)); igraph_vector_destroy(&c_weights); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, graph); SET_VECTOR_ELT(r_result, 1, weights); SET_STRING_ELT(r_names, 0, Rf_mkChar("graph")); @@ -778,11 +801,12 @@ SEXP R_igraph_weighted_adjacency(SEXP adjmatrix, SEXP mode, SEXP loops) { SEXP weights; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_matrix(adjmatrix, &c_adjmatrix); c_mode = (igraph_adjacency_t) Rf_asInteger(mode); IGRAPH_R_CHECK(igraph_vector_init(&c_weights, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_weights); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_weights); weights=R_GlobalEnv; /* hack to have a non-NULL value */ c_loops = (igraph_loops_t) Rf_asInteger(loops); /* Call igraph */ @@ -791,13 +815,13 @@ SEXP R_igraph_weighted_adjacency(SEXP adjmatrix, SEXP mode, SEXP loops) { /* Convert output */ PROTECT(r_result=NEW_LIST(2)); PROTECT(r_names=NEW_CHARACTER(2)); - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(weights=Ry_igraph_0orvector_to_SEXP(&c_weights)); igraph_vector_destroy(&c_weights); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, graph); SET_VECTOR_ELT(r_result, 1, weights); SET_STRING_ELT(r_names, 0, Rf_mkChar("graph")); @@ -821,6 +845,7 @@ SEXP R_igraph_star(SEXP n, SEXP mode, SEXP center) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; @@ -831,10 +856,10 @@ SEXP R_igraph_star(SEXP n, SEXP mode, SEXP center) { IGRAPH_R_CHECK(igraph_star(&c_graph, c_n, c_mode, c_center)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -853,6 +878,7 @@ SEXP R_igraph_wheel(SEXP n, SEXP mode, SEXP center) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; @@ -863,10 +889,10 @@ SEXP R_igraph_wheel(SEXP n, SEXP mode, SEXP center) { IGRAPH_R_CHECK(igraph_wheel(&c_graph, c_n, c_mode, c_center)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -884,6 +910,7 @@ SEXP R_igraph_hypercube(SEXP n, SEXP directed) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; @@ -893,10 +920,10 @@ SEXP R_igraph_hypercube(SEXP n, SEXP directed) { IGRAPH_R_CHECK(igraph_hypercube(&c_graph, c_n, c_directed)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -917,9 +944,10 @@ SEXP R_igraph_square_lattice(SEXP dimvector, SEXP nei, SEXP directed, SEXP mutua SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(dimvector, &c_dimvector)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_dimvector); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_dimvector); IGRAPH_R_CHECK_INT(nei); c_nei = (igraph_integer_t) REAL(nei)[0]; IGRAPH_R_CHECK_BOOL(directed); @@ -933,12 +961,12 @@ SEXP R_igraph_square_lattice(SEXP dimvector, SEXP nei, SEXP directed, SEXP mutua IGRAPH_R_CHECK(igraph_square_lattice(&c_graph, &c_dimvector, c_nei, c_directed, c_mutual, (Rf_isNull(periodic) ? 0 : &c_periodic))); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_dimvector); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -957,9 +985,10 @@ SEXP R_igraph_triangular_lattice(SEXP dimvector, SEXP directed, SEXP mutual) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(dimvector, &c_dimvector)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_dimvector); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_dimvector); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; IGRAPH_R_CHECK_BOOL(mutual); @@ -968,12 +997,12 @@ SEXP R_igraph_triangular_lattice(SEXP dimvector, SEXP directed, SEXP mutual) { IGRAPH_R_CHECK(igraph_triangular_lattice(&c_graph, &c_dimvector, c_directed, c_mutual)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_dimvector); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -993,6 +1022,7 @@ SEXP R_igraph_ring(SEXP n, SEXP directed, SEXP mutual, SEXP circular) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; @@ -1006,10 +1036,10 @@ SEXP R_igraph_ring(SEXP n, SEXP directed, SEXP mutual, SEXP circular) { IGRAPH_R_CHECK(igraph_ring(&c_graph, c_n, c_directed, c_mutual, c_circular)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -1028,6 +1058,7 @@ SEXP R_igraph_path_graph(SEXP n, SEXP directed, SEXP mutual) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; @@ -1039,10 +1070,10 @@ SEXP R_igraph_path_graph(SEXP n, SEXP directed, SEXP mutual) { IGRAPH_R_CHECK(igraph_path_graph(&c_graph, c_n, c_directed, c_mutual)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -1061,6 +1092,7 @@ SEXP R_igraph_cycle_graph(SEXP n, SEXP directed, SEXP mutual) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; @@ -1072,10 +1104,10 @@ SEXP R_igraph_cycle_graph(SEXP n, SEXP directed, SEXP mutual) { IGRAPH_R_CHECK(igraph_cycle_graph(&c_graph, c_n, c_directed, c_mutual)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -1094,6 +1126,7 @@ SEXP R_igraph_kary_tree(SEXP n, SEXP children, SEXP type) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; @@ -1104,10 +1137,10 @@ SEXP R_igraph_kary_tree(SEXP n, SEXP children, SEXP type) { IGRAPH_R_CHECK(igraph_kary_tree(&c_graph, c_n, c_children, c_type)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -1125,20 +1158,21 @@ SEXP R_igraph_symmetric_tree(SEXP branches, SEXP type) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(branches, &c_branches)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_branches); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_branches); c_type = (igraph_tree_mode_t) Rf_asInteger(type); /* Call igraph */ IGRAPH_R_CHECK(igraph_symmetric_tree(&c_graph, &c_branches, c_type)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_branches); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -1157,6 +1191,7 @@ SEXP R_igraph_regular_tree(SEXP h, SEXP k, SEXP type) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(h); c_h = (igraph_integer_t) REAL(h)[0]; @@ -1167,10 +1202,10 @@ SEXP R_igraph_regular_tree(SEXP h, SEXP k, SEXP type) { IGRAPH_R_CHECK(igraph_regular_tree(&c_graph, c_h, c_k, c_type)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -1189,6 +1224,7 @@ SEXP R_igraph_full(SEXP n, SEXP directed, SEXP loops) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; @@ -1200,10 +1236,10 @@ SEXP R_igraph_full(SEXP n, SEXP directed, SEXP loops) { IGRAPH_R_CHECK(igraph_full(&c_graph, c_n, c_directed, c_loops)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -1221,6 +1257,7 @@ SEXP R_igraph_full_citation(SEXP n, SEXP directed) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; @@ -1230,10 +1267,10 @@ SEXP R_igraph_full_citation(SEXP n, SEXP directed) { IGRAPH_R_CHECK(igraph_full_citation(&c_graph, c_n, c_directed)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -1250,6 +1287,7 @@ SEXP R_igraph_atlas(SEXP number) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(number); c_number = (igraph_integer_t) REAL(number)[0]; @@ -1257,10 +1295,10 @@ SEXP R_igraph_atlas(SEXP number) { IGRAPH_R_CHECK(igraph_atlas(&c_graph, c_number)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -1279,23 +1317,24 @@ SEXP R_igraph_extended_chordal_ring(SEXP nodes, SEXP W, SEXP directed) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(nodes); c_nodes = (igraph_integer_t) REAL(nodes)[0]; Rz_SEXP_to_matrix_int(W, &c_W); - IGRAPH_FINALLY(igraph_matrix_int_destroy, &c_W); + IGRAPH_LOCAL_FINALLY(igraph_matrix_int_destroy, &c_W); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ IGRAPH_R_CHECK(igraph_extended_chordal_ring(&c_graph, c_nodes, &c_W, c_directed)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_matrix_int_destroy(&c_W); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -1312,9 +1351,10 @@ SEXP R_igraph_connect_neighborhood(SEXP graph, SEXP order, SEXP mode) { igraph_neimode_t c_mode; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph_copy(graph, &c_graph); - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); IGRAPH_R_CHECK_INT(order); c_order = (igraph_integer_t) REAL(order)[0]; c_mode = (igraph_neimode_t) Rf_asInteger(mode); @@ -1324,7 +1364,7 @@ SEXP R_igraph_connect_neighborhood(SEXP graph, SEXP order, SEXP mode) { /* Convert output */ PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -1343,6 +1383,7 @@ SEXP R_igraph_graph_power(SEXP graph, SEXP order, SEXP directed) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK_INT(order); @@ -1353,10 +1394,10 @@ SEXP R_igraph_graph_power(SEXP graph, SEXP order, SEXP directed) { IGRAPH_R_CHECK(igraph_graph_power(&c_graph, &c_res, c_order, c_directed)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_res); PROTECT(res=Ry_igraph_to_SEXP(&c_res)); IGRAPH_I_DESTROY(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -1373,16 +1414,17 @@ SEXP R_igraph_linegraph(SEXP graph) { SEXP linegraph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ IGRAPH_R_CHECK(igraph_linegraph(&c_graph, &c_linegraph)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_linegraph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_linegraph); PROTECT(linegraph=Ry_igraph_to_SEXP(&c_linegraph)); IGRAPH_I_DESTROY(&c_linegraph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = linegraph; UNPROTECT(1); @@ -1400,6 +1442,7 @@ SEXP R_igraph_de_bruijn(SEXP m, SEXP n) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(m); c_m = (igraph_integer_t) REAL(m)[0]; @@ -1409,10 +1452,10 @@ SEXP R_igraph_de_bruijn(SEXP m, SEXP n) { IGRAPH_R_CHECK(igraph_de_bruijn(&c_graph, c_m, c_n)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -1430,6 +1473,7 @@ SEXP R_igraph_kautz(SEXP m, SEXP n) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(m); c_m = (igraph_integer_t) REAL(m)[0]; @@ -1439,10 +1483,10 @@ SEXP R_igraph_kautz(SEXP m, SEXP n) { IGRAPH_R_CHECK(igraph_kautz(&c_graph, c_m, c_n)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -1459,16 +1503,17 @@ SEXP R_igraph_famous(SEXP name) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ c_name = Rf_translateCharUTF8(STRING_ELT(name, 0)); /* Call igraph */ IGRAPH_R_CHECK(igraph_famous(&c_graph, c_name)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -1487,23 +1532,24 @@ SEXP R_igraph_lcf_vector(SEXP n, SEXP shifts, SEXP repeats) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(shifts, &c_shifts)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_shifts); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_shifts); IGRAPH_R_CHECK_INT(repeats); c_repeats = (igraph_integer_t) REAL(repeats)[0]; /* Call igraph */ IGRAPH_R_CHECK(igraph_lcf_vector(&c_graph, c_n, &c_shifts, c_repeats)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_shifts); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -1520,6 +1566,7 @@ SEXP R_igraph_mycielski_graph(SEXP k) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(k); c_k = (igraph_integer_t) REAL(k)[0]; @@ -1527,10 +1574,10 @@ SEXP R_igraph_mycielski_graph(SEXP k) { IGRAPH_R_CHECK(igraph_mycielski_graph(&c_graph, c_k)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -1549,6 +1596,7 @@ SEXP R_igraph_adjlist(SEXP adjlist, SEXP mode, SEXP duplicate) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK(Rz_SEXP_to_igraph_adjlist(adjlist, &c_adjlist)); c_mode = (igraph_neimode_t) Rf_asInteger(mode); @@ -1558,10 +1606,10 @@ SEXP R_igraph_adjlist(SEXP adjlist, SEXP mode, SEXP duplicate) { IGRAPH_R_CHECK(igraph_adjlist(&c_graph, &c_adjlist, c_mode, c_duplicate)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_adjlist_destroy(&c_adjlist); r_result = graph; @@ -1584,9 +1632,10 @@ SEXP R_igraph_full_bipartite(SEXP n1, SEXP n2, SEXP directed, SEXP mode) { SEXP types; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK(igraph_vector_bool_init(&c_types, 0)); - IGRAPH_FINALLY(igraph_vector_bool_destroy, &c_types); + IGRAPH_LOCAL_FINALLY(igraph_vector_bool_destroy, &c_types); IGRAPH_R_CHECK_INT(n1); c_n1 = (igraph_integer_t) REAL(n1)[0]; IGRAPH_R_CHECK_INT(n2); @@ -1600,13 +1649,13 @@ SEXP R_igraph_full_bipartite(SEXP n1, SEXP n2, SEXP directed, SEXP mode) { /* Convert output */ PROTECT(r_result=NEW_LIST(2)); PROTECT(r_names=NEW_CHARACTER(2)); - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(types=Ry_igraph_vector_bool_to_SEXP(&c_types)); igraph_vector_bool_destroy(&c_types); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, graph); SET_VECTOR_ELT(r_result, 1, types); SET_STRING_ELT(r_names, 0, Rf_mkChar("graph")); @@ -1632,11 +1681,12 @@ SEXP R_igraph_full_multipartite(SEXP n, SEXP directed, SEXP mode) { SEXP types; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK(igraph_vector_int_init(&c_types, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_types); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_types); IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(n, &c_n)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_n); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_n); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; c_mode = (igraph_neimode_t) Rf_asInteger(mode); @@ -1646,15 +1696,15 @@ SEXP R_igraph_full_multipartite(SEXP n, SEXP directed, SEXP mode) { /* Convert output */ PROTECT(r_result=NEW_LIST(2)); PROTECT(r_names=NEW_CHARACTER(2)); - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(types=Ry_igraph_vector_int_to_SEXPp1(&c_types)); igraph_vector_int_destroy(&c_types); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_n); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, graph); SET_VECTOR_ELT(r_result, 1, types); SET_STRING_ELT(r_names, 0, Rf_mkChar("graph")); @@ -1679,15 +1729,16 @@ SEXP R_igraph_realize_degree_sequence(SEXP out_deg, SEXP in_deg, SEXP allowed_ed SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(out_deg, &c_out_deg)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_out_deg); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_out_deg); if (!Rf_isNull(in_deg)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(in_deg, &c_in_deg)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_in_deg); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_in_deg); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_in_deg, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_in_deg); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_in_deg); } c_allowed_edge_types = (igraph_edge_type_sw_t) Rf_asInteger(allowed_edge_types); c_method = (igraph_realize_degseq_t) Rf_asInteger(method); @@ -1695,14 +1746,14 @@ SEXP R_igraph_realize_degree_sequence(SEXP out_deg, SEXP in_deg, SEXP allowed_ed IGRAPH_R_CHECK(igraph_realize_degree_sequence(&c_graph, &c_out_deg, (Rf_isNull(in_deg) ? 0 : &c_in_deg), c_allowed_edge_types, c_method)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_out_deg); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_in_deg); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -1722,25 +1773,26 @@ SEXP R_igraph_realize_bipartite_degree_sequence(SEXP degrees1, SEXP degrees2, SE SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(degrees1, &c_degrees1)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_degrees1); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_degrees1); IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(degrees2, &c_degrees2)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_degrees2); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_degrees2); c_allowed_edge_types = (igraph_edge_type_sw_t) Rf_asInteger(allowed_edge_types); c_method = (igraph_realize_degseq_t) Rf_asInteger(method); /* Call igraph */ IGRAPH_R_CHECK(igraph_realize_bipartite_degree_sequence(&c_graph, &c_degrees1, &c_degrees2, c_allowed_edge_types, c_method)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_degrees1); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_degrees2); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -1759,23 +1811,24 @@ SEXP R_igraph_circulant(SEXP n, SEXP shifts, SEXP directed) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(shifts, &c_shifts)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_shifts); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_shifts); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ IGRAPH_R_CHECK(igraph_circulant(&c_graph, c_n, &c_shifts, c_directed)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_shifts); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -1793,6 +1846,7 @@ SEXP R_igraph_generalized_petersen(SEXP n, SEXP k) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; @@ -1802,10 +1856,10 @@ SEXP R_igraph_generalized_petersen(SEXP n, SEXP k) { IGRAPH_R_CHECK(igraph_generalized_petersen(&c_graph, c_n, c_k)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -1825,9 +1879,10 @@ SEXP R_igraph_turan(SEXP n, SEXP r) { SEXP types; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK(igraph_vector_int_init(&c_types, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_types); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_types); IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; IGRAPH_R_CHECK_INT(r); @@ -1838,13 +1893,13 @@ SEXP R_igraph_turan(SEXP n, SEXP r) { /* Convert output */ PROTECT(r_result=NEW_LIST(2)); PROTECT(r_names=NEW_CHARACTER(2)); - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(types=Ry_igraph_vector_int_to_SEXPp1(&c_types)); igraph_vector_int_destroy(&c_types); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, graph); SET_VECTOR_ELT(r_result, 1, types); SET_STRING_ELT(r_names, 0, Rf_mkChar("graph")); @@ -1869,9 +1924,10 @@ SEXP R_igraph_weighted_sparsemat(SEXP A, SEXP directed, SEXP attr, SEXP loops) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_sparsemat(A, &c_A); - IGRAPH_FINALLY(igraph_sparsemat_destroy, &c_A); + IGRAPH_LOCAL_FINALLY(igraph_sparsemat_destroy, &c_A); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; c_attr = Rf_translateCharUTF8(STRING_ELT(attr, 0)); @@ -1881,12 +1937,12 @@ SEXP R_igraph_weighted_sparsemat(SEXP A, SEXP directed, SEXP attr, SEXP loops) { IGRAPH_R_CHECK(igraph_weighted_sparsemat(&c_graph, &c_A, c_directed, c_attr, c_loops)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_sparsemat_destroy(&c_A); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -1911,6 +1967,7 @@ SEXP R_igraph_barabasi_game(SEXP n, SEXP power, SEXP m, SEXP outseq, SEXP outpre SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; @@ -1920,10 +1977,10 @@ SEXP R_igraph_barabasi_game(SEXP n, SEXP power, SEXP m, SEXP outseq, SEXP outpre c_m = (igraph_integer_t) REAL(m)[0]; if (!Rf_isNull(outseq)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(outseq, &c_outseq)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_outseq); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_outseq); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_outseq, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_outseq); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_outseq); } IGRAPH_R_CHECK_BOOL(outpref); c_outpref = LOGICAL(outpref)[0]; @@ -1939,12 +1996,12 @@ SEXP R_igraph_barabasi_game(SEXP n, SEXP power, SEXP m, SEXP outseq, SEXP outpre IGRAPH_R_CHECK(igraph_barabasi_game(&c_graph, c_n, c_power, c_m, (Rf_isNull(outseq) ? 0 : &c_outseq), c_outpref, c_A, c_directed, c_algo, (Rf_isNull(start_from) ? 0 : &c_start_from))); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_outseq); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -1964,6 +2021,7 @@ SEXP R_igraph_erdos_renyi_game_gnp(SEXP n, SEXP p, SEXP directed, SEXP loops) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; @@ -1977,10 +2035,10 @@ SEXP R_igraph_erdos_renyi_game_gnp(SEXP n, SEXP p, SEXP directed, SEXP loops) { IGRAPH_R_CHECK(igraph_erdos_renyi_game_gnp(&c_graph, c_n, c_p, c_directed, c_loops)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -2000,6 +2058,7 @@ SEXP R_igraph_erdos_renyi_game_gnm(SEXP n, SEXP m, SEXP directed, SEXP loops) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; @@ -2013,10 +2072,10 @@ SEXP R_igraph_erdos_renyi_game_gnm(SEXP n, SEXP m, SEXP directed, SEXP loops) { IGRAPH_R_CHECK(igraph_erdos_renyi_game_gnm(&c_graph, c_n, c_m, c_directed, c_loops)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -2035,29 +2094,30 @@ SEXP R_igraph_degree_sequence_game(SEXP out_deg, SEXP in_deg, SEXP method) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(out_deg, &c_out_deg)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_out_deg); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_out_deg); if (!Rf_isNull(in_deg)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(in_deg, &c_in_deg)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_in_deg); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_in_deg); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_in_deg, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_in_deg); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_in_deg); } c_method = (igraph_degseq_t) Rf_asInteger(method); /* Call igraph */ IGRAPH_R_CHECK(igraph_degree_sequence_game(&c_graph, &c_out_deg, (Rf_isNull(in_deg) ? 0 : &c_in_deg), c_method)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_out_deg); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_in_deg); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -2077,6 +2137,7 @@ SEXP R_igraph_growing_random_game(SEXP n, SEXP m, SEXP directed, SEXP citation) SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; @@ -2090,10 +2151,10 @@ SEXP R_igraph_growing_random_game(SEXP n, SEXP m, SEXP directed, SEXP citation) IGRAPH_R_CHECK(igraph_growing_random_game(&c_graph, c_n, c_m, c_directed, c_citation)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -2121,6 +2182,7 @@ SEXP R_igraph_barabasi_aging_game(SEXP nodes, SEXP m, SEXP outseq, SEXP outpref, SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(nodes); c_nodes = (igraph_integer_t) REAL(nodes)[0]; @@ -2128,10 +2190,10 @@ SEXP R_igraph_barabasi_aging_game(SEXP nodes, SEXP m, SEXP outseq, SEXP outpref, c_m = (igraph_integer_t) REAL(m)[0]; if (!Rf_isNull(outseq)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(outseq, &c_outseq)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_outseq); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_outseq); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_outseq, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_outseq); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_outseq); } IGRAPH_R_CHECK_BOOL(outpref); c_outpref = LOGICAL(outpref)[0]; @@ -2155,12 +2217,12 @@ SEXP R_igraph_barabasi_aging_game(SEXP nodes, SEXP m, SEXP outseq, SEXP outpref, IGRAPH_R_CHECK(igraph_barabasi_aging_game(&c_graph, c_nodes, c_m, (Rf_isNull(outseq) ? 0 : &c_outseq), c_outpref, c_pa_exp, c_aging_exp, c_aging_bin, c_zero_deg_appeal, c_zero_age_appeal, c_deg_coef, c_age_coef, c_directed)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_outseq); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -2184,6 +2246,7 @@ SEXP R_igraph_recent_degree_game(SEXP n, SEXP power, SEXP window, SEXP m, SEXP o SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; @@ -2195,10 +2258,10 @@ SEXP R_igraph_recent_degree_game(SEXP n, SEXP power, SEXP window, SEXP m, SEXP o c_m = (igraph_integer_t) REAL(m)[0]; if (!Rf_isNull(outseq)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(outseq, &c_outseq)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_outseq); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_outseq); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_outseq, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_outseq); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_outseq); } IGRAPH_R_CHECK_BOOL(outpref); c_outpref = LOGICAL(outpref)[0]; @@ -2210,12 +2273,12 @@ SEXP R_igraph_recent_degree_game(SEXP n, SEXP power, SEXP window, SEXP m, SEXP o IGRAPH_R_CHECK(igraph_recent_degree_game(&c_graph, c_n, c_power, c_window, c_m, (Rf_isNull(outseq) ? 0 : &c_outseq), c_outpref, c_zero_appeal, c_directed)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_outseq); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -2241,6 +2304,7 @@ SEXP R_igraph_recent_degree_aging_game(SEXP nodes, SEXP m, SEXP outseq, SEXP out SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(nodes); c_nodes = (igraph_integer_t) REAL(nodes)[0]; @@ -2248,10 +2312,10 @@ SEXP R_igraph_recent_degree_aging_game(SEXP nodes, SEXP m, SEXP outseq, SEXP out c_m = (igraph_integer_t) REAL(m)[0]; if (!Rf_isNull(outseq)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(outseq, &c_outseq)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_outseq); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_outseq); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_outseq, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_outseq); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_outseq); } IGRAPH_R_CHECK_BOOL(outpref); c_outpref = LOGICAL(outpref)[0]; @@ -2271,12 +2335,12 @@ SEXP R_igraph_recent_degree_aging_game(SEXP nodes, SEXP m, SEXP outseq, SEXP out IGRAPH_R_CHECK(igraph_recent_degree_aging_game(&c_graph, c_nodes, c_m, (Rf_isNull(outseq) ? 0 : &c_outseq), c_outpref, c_pa_exp, c_aging_exp, c_aging_bin, c_window, c_zero_appeal, c_directed)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_outseq); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -2300,6 +2364,7 @@ SEXP R_igraph_callaway_traits_game(SEXP nodes, SEXP types, SEXP edges_per_step, SEXP node_type_vec; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(nodes); c_nodes = (igraph_integer_t) REAL(nodes)[0]; @@ -2312,20 +2377,20 @@ SEXP R_igraph_callaway_traits_game(SEXP nodes, SEXP types, SEXP edges_per_step, IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; IGRAPH_R_CHECK(igraph_vector_int_init(&c_node_type_vec, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_node_type_vec); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_node_type_vec); /* Call igraph */ IGRAPH_R_CHECK(igraph_callaway_traits_game(&c_graph, c_nodes, c_types, c_edges_per_step, &c_type_dist, &c_pref_matrix, c_directed, &c_node_type_vec)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); PROTECT(r_names=NEW_CHARACTER(2)); - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(node_type_vec=Ry_igraph_vector_int_to_SEXP(&c_node_type_vec)); igraph_vector_int_destroy(&c_node_type_vec); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, graph); SET_VECTOR_ELT(r_result, 1, node_type_vec); SET_STRING_ELT(r_names, 0, Rf_mkChar("graph")); @@ -2354,6 +2419,7 @@ SEXP R_igraph_establishment_game(SEXP nodes, SEXP types, SEXP k, SEXP type_dist, SEXP node_type_vec; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(nodes); c_nodes = (igraph_integer_t) REAL(nodes)[0]; @@ -2366,20 +2432,20 @@ SEXP R_igraph_establishment_game(SEXP nodes, SEXP types, SEXP k, SEXP type_dist, IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; IGRAPH_R_CHECK(igraph_vector_int_init(&c_node_type_vec, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_node_type_vec); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_node_type_vec); /* Call igraph */ IGRAPH_R_CHECK(igraph_establishment_game(&c_graph, c_nodes, c_types, c_k, &c_type_dist, &c_pref_matrix, c_directed, &c_node_type_vec)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); PROTECT(r_names=NEW_CHARACTER(2)); - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(node_type_vec=Ry_igraph_vector_int_to_SEXP(&c_node_type_vec)); igraph_vector_int_destroy(&c_node_type_vec); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, graph); SET_VECTOR_ELT(r_result, 1, node_type_vec); SET_STRING_ELT(r_names, 0, Rf_mkChar("graph")); @@ -2407,6 +2473,7 @@ SEXP R_igraph_grg_game(SEXP nodes, SEXP radius, SEXP torus) { SEXP y; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(nodes); c_nodes = (igraph_integer_t) REAL(nodes)[0]; @@ -2415,25 +2482,25 @@ SEXP R_igraph_grg_game(SEXP nodes, SEXP radius, SEXP torus) { IGRAPH_R_CHECK_BOOL(torus); c_torus = LOGICAL(torus)[0]; IGRAPH_R_CHECK(igraph_vector_init(&c_x, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_x); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_x); IGRAPH_R_CHECK(igraph_vector_init(&c_y, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_y); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_y); /* Call igraph */ IGRAPH_R_CHECK(igraph_grg_game(&c_graph, c_nodes, c_radius, c_torus, &c_x, &c_y)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); PROTECT(r_names=NEW_CHARACTER(3)); - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(x=Ry_igraph_vector_to_SEXP(&c_x)); igraph_vector_destroy(&c_x); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(y=Ry_igraph_vector_to_SEXP(&c_y)); igraph_vector_destroy(&c_y); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, graph); SET_VECTOR_ELT(r_result, 1, x); SET_VECTOR_ELT(r_result, 2, y); @@ -2465,6 +2532,7 @@ SEXP R_igraph_preference_game(SEXP nodes, SEXP types, SEXP type_dist, SEXP fixed SEXP node_type_vec; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(nodes); c_nodes = (igraph_integer_t) REAL(nodes)[0]; @@ -2475,7 +2543,7 @@ SEXP R_igraph_preference_game(SEXP nodes, SEXP types, SEXP type_dist, SEXP fixed c_fixed_sizes = LOGICAL(fixed_sizes)[0]; Rz_SEXP_to_matrix(pref_matrix, &c_pref_matrix); IGRAPH_R_CHECK(igraph_vector_int_init(&c_node_type_vec, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_node_type_vec); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_node_type_vec); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; IGRAPH_R_CHECK_BOOL(loops); @@ -2486,13 +2554,13 @@ SEXP R_igraph_preference_game(SEXP nodes, SEXP types, SEXP type_dist, SEXP fixed /* Convert output */ PROTECT(r_result=NEW_LIST(2)); PROTECT(r_names=NEW_CHARACTER(2)); - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(node_type_vec=Ry_igraph_vector_int_to_SEXP(&c_node_type_vec)); igraph_vector_int_destroy(&c_node_type_vec); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, graph); SET_VECTOR_ELT(r_result, 1, node_type_vec); SET_STRING_ELT(r_names, 0, Rf_mkChar("graph")); @@ -2523,6 +2591,7 @@ SEXP R_igraph_asymmetric_preference_game(SEXP nodes, SEXP out_types, SEXP in_typ SEXP node_type_in_vec; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(nodes); c_nodes = (igraph_integer_t) REAL(nodes)[0]; @@ -2533,9 +2602,9 @@ SEXP R_igraph_asymmetric_preference_game(SEXP nodes, SEXP out_types, SEXP in_typ Rz_SEXP_to_matrix(type_dist_matrix, &c_type_dist_matrix); Rz_SEXP_to_matrix(pref_matrix, &c_pref_matrix); IGRAPH_R_CHECK(igraph_vector_int_init(&c_node_type_out_vec, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_node_type_out_vec); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_node_type_out_vec); IGRAPH_R_CHECK(igraph_vector_int_init(&c_node_type_in_vec, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_node_type_in_vec); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_node_type_in_vec); IGRAPH_R_CHECK_BOOL(loops); c_loops = LOGICAL(loops)[0]; /* Call igraph */ @@ -2544,16 +2613,16 @@ SEXP R_igraph_asymmetric_preference_game(SEXP nodes, SEXP out_types, SEXP in_typ /* Convert output */ PROTECT(r_result=NEW_LIST(3)); PROTECT(r_names=NEW_CHARACTER(3)); - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(node_type_out_vec=Ry_igraph_vector_int_to_SEXP(&c_node_type_out_vec)); igraph_vector_int_destroy(&c_node_type_out_vec); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(node_type_in_vec=Ry_igraph_vector_int_to_SEXP(&c_node_type_in_vec)); igraph_vector_int_destroy(&c_node_type_in_vec); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, graph); SET_VECTOR_ELT(r_result, 1, node_type_out_vec); SET_VECTOR_ELT(r_result, 2, node_type_in_vec); @@ -2578,9 +2647,10 @@ SEXP R_igraph_rewire_edges(SEXP graph, SEXP prob, SEXP loops, SEXP multiple) { igraph_bool_t c_multiple; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph_copy(graph, &c_graph); - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); IGRAPH_R_CHECK_REAL(prob); c_prob = REAL(prob)[0]; IGRAPH_R_CHECK_BOOL(loops); @@ -2593,7 +2663,7 @@ SEXP R_igraph_rewire_edges(SEXP graph, SEXP prob, SEXP loops, SEXP multiple) { /* Convert output */ PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -2611,9 +2681,10 @@ SEXP R_igraph_rewire_directed_edges(SEXP graph, SEXP prob, SEXP loops, SEXP mode igraph_neimode_t c_mode; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph_copy(graph, &c_graph); - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); IGRAPH_R_CHECK_REAL(prob); c_prob = REAL(prob)[0]; IGRAPH_R_CHECK_BOOL(loops); @@ -2625,7 +2696,7 @@ SEXP R_igraph_rewire_directed_edges(SEXP graph, SEXP prob, SEXP loops, SEXP mode /* Convert output */ PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -2647,6 +2718,7 @@ SEXP R_igraph_watts_strogatz_game(SEXP dim, SEXP size, SEXP nei, SEXP p, SEXP lo SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(dim); c_dim = (igraph_integer_t) REAL(dim)[0]; @@ -2664,10 +2736,10 @@ SEXP R_igraph_watts_strogatz_game(SEXP dim, SEXP size, SEXP nei, SEXP p, SEXP lo IGRAPH_R_CHECK(igraph_watts_strogatz_game(&c_graph, c_dim, c_size, c_nei, c_p, c_loops, c_multiple)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -2688,6 +2760,7 @@ SEXP R_igraph_lastcit_game(SEXP nodes, SEXP edges_per_node, SEXP agebins, SEXP p SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(nodes); c_nodes = (igraph_integer_t) REAL(nodes)[0]; @@ -2702,10 +2775,10 @@ SEXP R_igraph_lastcit_game(SEXP nodes, SEXP edges_per_node, SEXP agebins, SEXP p IGRAPH_R_CHECK(igraph_lastcit_game(&c_graph, c_nodes, c_edges_per_node, c_agebins, &c_preference, c_directed)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -2726,11 +2799,12 @@ SEXP R_igraph_cited_type_game(SEXP nodes, SEXP types, SEXP pref, SEXP edges_per_ SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(nodes); c_nodes = (igraph_integer_t) REAL(nodes)[0]; Rz_SEXP_to_vector_int_copy(types, &c_types); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_types); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_types); Rz_SEXP_to_vector(pref, &c_pref); IGRAPH_R_CHECK_INT(edges_per_step); c_edges_per_step = (igraph_integer_t) REAL(edges_per_step)[0]; @@ -2740,12 +2814,12 @@ SEXP R_igraph_cited_type_game(SEXP nodes, SEXP types, SEXP pref, SEXP edges_per_ IGRAPH_R_CHECK(igraph_cited_type_game(&c_graph, c_nodes, &c_types, &c_pref, c_edges_per_step, c_directed)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_types); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -2766,11 +2840,12 @@ SEXP R_igraph_citing_cited_type_game(SEXP nodes, SEXP types, SEXP pref, SEXP edg SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(nodes); c_nodes = (igraph_integer_t) REAL(nodes)[0]; Rz_SEXP_to_vector_int_copy(types, &c_types); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_types); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_types); Rz_SEXP_to_matrix(pref, &c_pref); IGRAPH_R_CHECK_INT(edges_per_step); c_edges_per_step = (igraph_integer_t) REAL(edges_per_step)[0]; @@ -2780,12 +2855,12 @@ SEXP R_igraph_citing_cited_type_game(SEXP nodes, SEXP types, SEXP pref, SEXP edg IGRAPH_R_CHECK(igraph_citing_cited_type_game(&c_graph, c_nodes, &c_types, &c_pref, c_edges_per_step, c_directed)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_types); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -2806,6 +2881,7 @@ SEXP R_igraph_forest_fire_game(SEXP nodes, SEXP fw_prob, SEXP bw_factor, SEXP am SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(nodes); c_nodes = (igraph_integer_t) REAL(nodes)[0]; @@ -2821,10 +2897,10 @@ SEXP R_igraph_forest_fire_game(SEXP nodes, SEXP fw_prob, SEXP bw_factor, SEXP am IGRAPH_R_CHECK(igraph_forest_fire_game(&c_graph, c_nodes, c_fw_prob, c_bw_factor, c_ambs, c_directed)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -2844,6 +2920,7 @@ SEXP R_igraph_simple_interconnected_islands_game(SEXP islands_n, SEXP islands_si SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(islands_n); c_islands_n = (igraph_integer_t) REAL(islands_n)[0]; @@ -2857,10 +2934,10 @@ SEXP R_igraph_simple_interconnected_islands_game(SEXP islands_n, SEXP islands_si IGRAPH_R_CHECK(igraph_simple_interconnected_islands_game(&c_graph, c_islands_n, c_islands_size, c_islands_pin, c_n_inter)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -2880,6 +2957,7 @@ SEXP R_igraph_chung_lu_game(SEXP out_weights, SEXP in_weights, SEXP loops, SEXP SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_vector(out_weights, &c_out_weights); if (!Rf_isNull(in_weights)) { @@ -2892,10 +2970,10 @@ SEXP R_igraph_chung_lu_game(SEXP out_weights, SEXP in_weights, SEXP loops, SEXP IGRAPH_R_CHECK(igraph_chung_lu_game(&c_graph, &c_out_weights, (Rf_isNull(in_weights) ? 0 : &c_in_weights), c_loops, c_variant)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -2916,6 +2994,7 @@ SEXP R_igraph_static_fitness_game(SEXP no_of_edges, SEXP fitness_out, SEXP fitne SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(no_of_edges); c_no_of_edges = (igraph_integer_t) REAL(no_of_edges)[0]; @@ -2931,10 +3010,10 @@ SEXP R_igraph_static_fitness_game(SEXP no_of_edges, SEXP fitness_out, SEXP fitne IGRAPH_R_CHECK(igraph_static_fitness_game(&c_graph, c_no_of_edges, &c_fitness_out, (Rf_isNull(fitness_in) ? 0 : &c_fitness_in), c_loops, c_multiple)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -2957,6 +3036,7 @@ SEXP R_igraph_static_power_law_game(SEXP no_of_nodes, SEXP no_of_edges, SEXP exp SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(no_of_nodes); c_no_of_nodes = (igraph_integer_t) REAL(no_of_nodes)[0]; @@ -2976,10 +3056,10 @@ SEXP R_igraph_static_power_law_game(SEXP no_of_nodes, SEXP no_of_edges, SEXP exp IGRAPH_R_CHECK(igraph_static_power_law_game(&c_graph, c_no_of_nodes, c_no_of_edges, c_exponent_out, c_exponent_in, c_loops, c_multiple, c_finite_size_correction)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -2999,6 +3079,7 @@ SEXP R_igraph_k_regular_game(SEXP no_of_nodes, SEXP k, SEXP directed, SEXP multi SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(no_of_nodes); c_no_of_nodes = (igraph_integer_t) REAL(no_of_nodes)[0]; @@ -3012,10 +3093,10 @@ SEXP R_igraph_k_regular_game(SEXP no_of_nodes, SEXP k, SEXP directed, SEXP multi IGRAPH_R_CHECK(igraph_k_regular_game(&c_graph, c_no_of_nodes, c_k, c_directed, c_multiple)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -3036,12 +3117,13 @@ SEXP R_igraph_sbm_game(SEXP n, SEXP pref_matrix, SEXP block_sizes, SEXP directed SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; Rz_SEXP_to_matrix(pref_matrix, &c_pref_matrix); IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(block_sizes, &c_block_sizes)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_block_sizes); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_block_sizes); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; IGRAPH_R_CHECK_BOOL(loops); @@ -3050,12 +3132,12 @@ SEXP R_igraph_sbm_game(SEXP n, SEXP pref_matrix, SEXP block_sizes, SEXP directed IGRAPH_R_CHECK(igraph_sbm_game(&c_graph, c_n, &c_pref_matrix, &c_block_sizes, c_directed, c_loops)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_block_sizes); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -3076,6 +3158,7 @@ SEXP R_igraph_hsbm_game(SEXP n, SEXP m, SEXP rho, SEXP C, SEXP p) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; @@ -3089,10 +3172,10 @@ SEXP R_igraph_hsbm_game(SEXP n, SEXP m, SEXP rho, SEXP C, SEXP p) { IGRAPH_R_CHECK(igraph_hsbm_game(&c_graph, c_n, c_m, &c_rho, &c_C, c_p)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -3113,11 +3196,12 @@ SEXP R_igraph_hsbm_list_game(SEXP n, SEXP mlist, SEXP rholist, SEXP Clist, SEXP SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(mlist, &c_mlist)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_mlist); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_mlist); Ry_igraph_SEXP_to_vector_list(rholist, &c_rholist); Ry_igraph_SEXP_to_matrixlist(Clist, &c_Clist); IGRAPH_R_CHECK_REAL(p); @@ -3126,12 +3210,12 @@ SEXP R_igraph_hsbm_list_game(SEXP n, SEXP mlist, SEXP rholist, SEXP Clist, SEXP IGRAPH_R_CHECK(igraph_hsbm_list_game(&c_graph, c_n, &c_mlist, &c_rholist, &c_Clist, c_p)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_mlist); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -3151,6 +3235,7 @@ SEXP R_igraph_correlated_game(SEXP old_graph, SEXP corr, SEXP p, SEXP permutatio SEXP new_graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(old_graph, &c_old_graph); IGRAPH_R_CHECK_REAL(corr); @@ -3159,21 +3244,21 @@ SEXP R_igraph_correlated_game(SEXP old_graph, SEXP corr, SEXP p, SEXP permutatio c_p = REAL(p)[0]; if (!Rf_isNull(permutation)) { Rz_SEXP_to_vector_int_copy(permutation, &c_permutation); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_permutation); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_permutation); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_permutation, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_permutation); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_permutation); } /* Call igraph */ IGRAPH_R_CHECK(igraph_correlated_game(&c_old_graph, &c_new_graph, c_corr, c_p, (Rf_isNull(permutation) ? 0 : &c_permutation))); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_new_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_new_graph); PROTECT(new_graph=Ry_igraph_to_SEXP(&c_new_graph)); IGRAPH_I_DESTROY(&c_new_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_permutation); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = new_graph; UNPROTECT(1); @@ -3196,6 +3281,7 @@ SEXP R_igraph_correlated_pair_game(SEXP n, SEXP corr, SEXP p, SEXP directed, SEX SEXP graph2; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; @@ -3207,10 +3293,10 @@ SEXP R_igraph_correlated_pair_game(SEXP n, SEXP corr, SEXP p, SEXP directed, SEX c_directed = LOGICAL(directed)[0]; if (!Rf_isNull(permutation)) { Rz_SEXP_to_vector_int_copy(permutation, &c_permutation); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_permutation); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_permutation); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_permutation, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_permutation); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_permutation); } /* Call igraph */ IGRAPH_R_CHECK(igraph_correlated_pair_game(&c_graph1, &c_graph2, c_n, c_corr, c_p, c_directed, (Rf_isNull(permutation) ? 0 : &c_permutation))); @@ -3218,16 +3304,16 @@ SEXP R_igraph_correlated_pair_game(SEXP n, SEXP corr, SEXP p, SEXP directed, SEX /* Convert output */ PROTECT(r_result=NEW_LIST(2)); PROTECT(r_names=NEW_CHARACTER(2)); - IGRAPH_FINALLY(igraph_destroy, &c_graph1); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph1); PROTECT(graph1=Ry_igraph_to_SEXP(&c_graph1)); IGRAPH_I_DESTROY(&c_graph1); - IGRAPH_FINALLY_CLEAN(1); - IGRAPH_FINALLY(igraph_destroy, &c_graph2); + IGRAPH_LOCAL_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph2); PROTECT(graph2=Ry_igraph_to_SEXP(&c_graph2)); IGRAPH_I_DESTROY(&c_graph2); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_permutation); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, graph1); SET_VECTOR_ELT(r_result, 1, graph2); SET_STRING_ELT(r_names, 0, Rf_mkChar("graph1")); @@ -3250,6 +3336,7 @@ SEXP R_igraph_dot_product_game(SEXP vecs, SEXP directed) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_matrix(vecs, &c_vecs); IGRAPH_R_CHECK_BOOL(directed); @@ -3258,10 +3345,10 @@ SEXP R_igraph_dot_product_game(SEXP vecs, SEXP directed) { IGRAPH_R_CHECK(igraph_dot_product_game(&c_graph, &c_vecs, c_directed)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -3281,6 +3368,7 @@ SEXP R_igraph_sample_sphere_surface(SEXP dim, SEXP n, SEXP radius, SEXP positive SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(dim); c_dim = (igraph_integer_t) REAL(dim)[0]; @@ -3291,14 +3379,14 @@ SEXP R_igraph_sample_sphere_surface(SEXP dim, SEXP n, SEXP radius, SEXP positive IGRAPH_R_CHECK_BOOL(positive); c_positive = LOGICAL(positive)[0]; IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); /* Call igraph */ IGRAPH_R_CHECK(igraph_sample_sphere_surface(c_dim, c_n, c_radius, c_positive, &c_res)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -3318,6 +3406,7 @@ SEXP R_igraph_sample_sphere_volume(SEXP dim, SEXP n, SEXP radius, SEXP positive) SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(dim); c_dim = (igraph_integer_t) REAL(dim)[0]; @@ -3328,14 +3417,14 @@ SEXP R_igraph_sample_sphere_volume(SEXP dim, SEXP n, SEXP radius, SEXP positive) IGRAPH_R_CHECK_BOOL(positive); c_positive = LOGICAL(positive)[0]; IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); /* Call igraph */ IGRAPH_R_CHECK(igraph_sample_sphere_volume(c_dim, c_n, c_radius, c_positive, &c_res)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -3353,19 +3442,20 @@ SEXP R_igraph_sample_dirichlet(SEXP n, SEXP alpha) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; Rz_SEXP_to_vector(alpha, &c_alpha); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); /* Call igraph */ IGRAPH_R_CHECK(igraph_sample_dirichlet(c_n, &c_alpha, &c_res)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -3384,6 +3474,7 @@ SEXP R_igraph_are_adjacent(SEXP graph, SEXP v1, SEXP v2) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_v1 = (igraph_integer_t) REAL(v1)[0]; @@ -3412,6 +3503,7 @@ SEXP R_igraph_are_connected(SEXP graph, SEXP v1, SEXP v2) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_v1 = (igraph_integer_t) REAL(v1)[0]; @@ -3448,14 +3540,15 @@ SEXP R_igraph_diameter(SEXP graph, SEXP directed, SEXP unconnected) { SEXP edge_path; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_from=0; c_to=0; IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_path, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vertex_path); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_path); IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_path, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edge_path); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_path); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; IGRAPH_R_CHECK_BOOL(unconnected); @@ -3474,10 +3567,10 @@ SEXP R_igraph_diameter(SEXP graph, SEXP directed, SEXP unconnected) { REAL(to)[0]=(double) c_to; PROTECT(vertex_path=Ry_igraph_vector_int_to_SEXP(&c_vertex_path)); igraph_vector_int_destroy(&c_vertex_path); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(edge_path=Ry_igraph_vector_int_to_SEXP(&c_edge_path)); igraph_vector_int_destroy(&c_edge_path); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, res); SET_VECTOR_ELT(r_result, 1, from); SET_VECTOR_ELT(r_result, 2, to); @@ -3516,6 +3609,7 @@ SEXP R_igraph_diameter_dijkstra(SEXP graph, SEXP weights, SEXP directed, SEXP un SEXP edge_path; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(weights)) { @@ -3524,9 +3618,9 @@ SEXP R_igraph_diameter_dijkstra(SEXP graph, SEXP weights, SEXP directed, SEXP un c_from=0; c_to=0; IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_path, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vertex_path); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_path); IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_path, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edge_path); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_path); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; IGRAPH_R_CHECK_BOOL(unconnected); @@ -3545,10 +3639,10 @@ SEXP R_igraph_diameter_dijkstra(SEXP graph, SEXP weights, SEXP directed, SEXP un REAL(to)[0]=(double) c_to; PROTECT(vertex_path=Ry_igraph_vector_int_to_SEXP(&c_vertex_path)); igraph_vector_int_destroy(&c_vertex_path); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(edge_path=Ry_igraph_vector_int_to_SEXP(&c_edge_path)); igraph_vector_int_destroy(&c_edge_path); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, res); SET_VECTOR_ELT(r_result, 1, from); SET_VECTOR_ELT(r_result, 2, to); @@ -3584,12 +3678,13 @@ SEXP R_igraph_closeness(SEXP graph, SEXP vids, SEXP mode, SEXP weights, SEXP nor SEXP all_reachable; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); IGRAPH_R_CHECK(igraph_vector_int_init(&c_reachable_count, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_reachable_count); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_reachable_count); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); c_mode = (igraph_neimode_t) Rf_asInteger(mode); @@ -3606,10 +3701,10 @@ SEXP R_igraph_closeness(SEXP graph, SEXP vids, SEXP mode, SEXP weights, SEXP nor PROTECT(r_names=NEW_CHARACTER(3)); PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(reachable_count=Ry_igraph_vector_int_to_SEXP(&c_reachable_count)); igraph_vector_int_destroy(&c_reachable_count); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(all_reachable=NEW_LOGICAL(1)); LOGICAL(all_reachable)[0]=c_all_reachable; igraph_vector_int_destroy(&c_vids_data); @@ -3646,12 +3741,13 @@ SEXP R_igraph_closeness_cutoff(SEXP graph, SEXP vids, SEXP mode, SEXP weights, S SEXP all_reachable; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); IGRAPH_R_CHECK(igraph_vector_int_init(&c_reachable_count, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_reachable_count); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_reachable_count); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); c_mode = (igraph_neimode_t) Rf_asInteger(mode); @@ -3670,10 +3766,10 @@ SEXP R_igraph_closeness_cutoff(SEXP graph, SEXP vids, SEXP mode, SEXP weights, S PROTECT(r_names=NEW_CHARACTER(3)); PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(reachable_count=Ry_igraph_vector_int_to_SEXP(&c_reachable_count)); igraph_vector_int_destroy(&c_reachable_count); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(all_reachable=NEW_LOGICAL(1)); LOGICAL(all_reachable)[0]=c_all_reachable; igraph_vector_int_destroy(&c_vids_data); @@ -3704,10 +3800,11 @@ SEXP R_igraph_distances(SEXP graph, SEXP from, SEXP to, SEXP mode) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); igraph_vector_int_t c_from_data; Rz_SEXP_to_igraph_vs(from, &c_graph, &c_from, &c_from_data); igraph_vector_int_t c_to_data; @@ -3719,7 +3816,7 @@ SEXP R_igraph_distances(SEXP graph, SEXP from, SEXP to, SEXP mode) { /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_from_data); igraph_vs_destroy(&c_from); igraph_vector_int_destroy(&c_to_data); @@ -3744,10 +3841,11 @@ SEXP R_igraph_distances_cutoff(SEXP graph, SEXP from, SEXP to, SEXP mode, SEXP c SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); igraph_vector_int_t c_from_data; Rz_SEXP_to_igraph_vs(from, &c_graph, &c_from, &c_from_data); igraph_vector_int_t c_to_data; @@ -3761,7 +3859,7 @@ SEXP R_igraph_distances_cutoff(SEXP graph, SEXP from, SEXP to, SEXP mode, SEXP c /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_from_data); igraph_vs_destroy(&c_from); igraph_vector_int_destroy(&c_to_data); @@ -3787,12 +3885,13 @@ SEXP R_igraph_get_shortest_path(SEXP graph, SEXP from, SEXP to, SEXP mode) { SEXP edges; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertices, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vertices); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertices); IGRAPH_R_CHECK(igraph_vector_int_init(&c_edges, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edges); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edges); c_from = (igraph_integer_t) REAL(from)[0]; c_to = (igraph_integer_t) REAL(to)[0]; c_mode = (igraph_neimode_t) Rf_asInteger(mode); @@ -3804,10 +3903,10 @@ SEXP R_igraph_get_shortest_path(SEXP graph, SEXP from, SEXP to, SEXP mode) { PROTECT(r_names=NEW_CHARACTER(2)); PROTECT(vertices=Ry_igraph_vector_int_to_SEXPp1(&c_vertices)); igraph_vector_int_destroy(&c_vertices); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(edges=Ry_igraph_vector_int_to_SEXPp1(&c_edges)); igraph_vector_int_destroy(&c_edges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, vertices); SET_VECTOR_ELT(r_result, 1, edges); SET_STRING_ELT(r_names, 0, Rf_mkChar("vertices")); @@ -3835,12 +3934,13 @@ SEXP R_igraph_get_shortest_path_bellman_ford(SEXP graph, SEXP from, SEXP to, SEX SEXP edges; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertices, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vertices); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertices); IGRAPH_R_CHECK(igraph_vector_int_init(&c_edges, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edges); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edges); c_from = (igraph_integer_t) REAL(from)[0]; c_to = (igraph_integer_t) REAL(to)[0]; if (!Rf_isNull(weights)) { @@ -3855,10 +3955,10 @@ SEXP R_igraph_get_shortest_path_bellman_ford(SEXP graph, SEXP from, SEXP to, SEX PROTECT(r_names=NEW_CHARACTER(2)); PROTECT(vertices=Ry_igraph_vector_int_to_SEXPp1(&c_vertices)); igraph_vector_int_destroy(&c_vertices); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(edges=Ry_igraph_vector_int_to_SEXPp1(&c_edges)); igraph_vector_int_destroy(&c_edges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, vertices); SET_VECTOR_ELT(r_result, 1, edges); SET_STRING_ELT(r_names, 0, Rf_mkChar("vertices")); @@ -3886,12 +3986,13 @@ SEXP R_igraph_get_shortest_path_dijkstra(SEXP graph, SEXP from, SEXP to, SEXP we SEXP edges; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertices, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vertices); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertices); IGRAPH_R_CHECK(igraph_vector_int_init(&c_edges, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edges); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edges); c_from = (igraph_integer_t) REAL(from)[0]; c_to = (igraph_integer_t) REAL(to)[0]; if (!Rf_isNull(weights)) { @@ -3906,10 +4007,10 @@ SEXP R_igraph_get_shortest_path_dijkstra(SEXP graph, SEXP from, SEXP to, SEXP we PROTECT(r_names=NEW_CHARACTER(2)); PROTECT(vertices=Ry_igraph_vector_int_to_SEXPp1(&c_vertices)); igraph_vector_int_destroy(&c_vertices); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(edges=Ry_igraph_vector_int_to_SEXPp1(&c_edges)); igraph_vector_int_destroy(&c_edges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, vertices); SET_VECTOR_ELT(r_result, 1, edges); SET_STRING_ELT(r_names, 0, Rf_mkChar("vertices")); @@ -3939,12 +4040,13 @@ SEXP R_igraph_get_shortest_path_astar(SEXP graph, SEXP from, SEXP to, SEXP weigh SEXP edges; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertices, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vertices); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertices); IGRAPH_R_CHECK(igraph_vector_int_init(&c_edges, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edges); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edges); c_from = (igraph_integer_t) REAL(from)[0]; c_to = (igraph_integer_t) REAL(to)[0]; if (!Rf_isNull(weights)) { @@ -3959,10 +4061,10 @@ SEXP R_igraph_get_shortest_path_astar(SEXP graph, SEXP from, SEXP to, SEXP weigh PROTECT(r_names=NEW_CHARACTER(2)); PROTECT(vertices=Ry_igraph_vector_int_to_SEXPp1(&c_vertices)); igraph_vector_int_destroy(&c_vertices); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(edges=Ry_igraph_vector_int_to_SEXPp1(&c_edges)); igraph_vector_int_destroy(&c_edges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, vertices); SET_VECTOR_ELT(r_result, 1, edges); SET_STRING_ELT(r_names, 0, Rf_mkChar("vertices")); @@ -3993,20 +4095,21 @@ SEXP R_igraph_get_shortest_paths(SEXP graph, SEXP from, SEXP to, SEXP mode) { SEXP inbound_edges; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_vertices, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_vertices); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_vertices); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_edges, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_edges); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_edges); c_from = (igraph_integer_t) REAL(from)[0]; igraph_vector_int_t c_to_data; Rz_SEXP_to_igraph_vs(to, &c_graph, &c_to, &c_to_data); c_mode = (igraph_neimode_t) Rf_asInteger(mode); IGRAPH_R_CHECK(igraph_vector_int_init(&c_parents, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_parents); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_parents); IGRAPH_R_CHECK(igraph_vector_int_init(&c_inbound_edges, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_inbound_edges); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_inbound_edges); /* Call igraph */ IGRAPH_R_CHECK(igraph_get_shortest_paths(&c_graph, &c_vertices, &c_edges, c_from, c_to, c_mode, &c_parents, &c_inbound_edges)); @@ -4015,18 +4118,18 @@ SEXP R_igraph_get_shortest_paths(SEXP graph, SEXP from, SEXP to, SEXP mode) { PROTECT(r_names=NEW_CHARACTER(4)); PROTECT(vertices=Ry_igraph_vector_int_list_to_SEXPp1(&c_vertices)); igraph_vector_int_list_destroy(&c_vertices); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(edges=Ry_igraph_vector_int_list_to_SEXPp1(&c_edges)); igraph_vector_int_list_destroy(&c_edges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_to_data); igraph_vs_destroy(&c_to); PROTECT(parents=Ry_igraph_vector_int_to_SEXP(&c_parents)); igraph_vector_int_destroy(&c_parents); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(inbound_edges=Ry_igraph_vector_int_to_SEXP(&c_inbound_edges)); igraph_vector_int_destroy(&c_inbound_edges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, vertices); SET_VECTOR_ELT(r_result, 1, edges); SET_VECTOR_ELT(r_result, 2, parents); @@ -4059,14 +4162,15 @@ SEXP R_igraph_get_all_shortest_paths(SEXP graph, SEXP from, SEXP to, SEXP mode) SEXP nrgeo; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_vertices, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_vertices); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_vertices); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_edges, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_edges); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_edges); IGRAPH_R_CHECK(igraph_vector_int_init(&c_nrgeo, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_nrgeo); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_nrgeo); c_from = (igraph_integer_t) REAL(from)[0]; igraph_vector_int_t c_to_data; Rz_SEXP_to_igraph_vs(to, &c_graph, &c_to, &c_to_data); @@ -4079,13 +4183,13 @@ SEXP R_igraph_get_all_shortest_paths(SEXP graph, SEXP from, SEXP to, SEXP mode) PROTECT(r_names=NEW_CHARACTER(3)); PROTECT(vertices=Ry_igraph_vector_int_list_to_SEXPp1(&c_vertices)); igraph_vector_int_list_destroy(&c_vertices); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(edges=Ry_igraph_vector_int_list_to_SEXPp1(&c_edges)); igraph_vector_int_list_destroy(&c_edges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(nrgeo=Ry_igraph_vector_int_to_SEXP(&c_nrgeo)); igraph_vector_int_destroy(&c_nrgeo); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_to_data); igraph_vs_destroy(&c_to); SET_VECTOR_ELT(r_result, 0, vertices); @@ -4115,10 +4219,11 @@ SEXP R_igraph_distances_dijkstra(SEXP graph, SEXP from, SEXP to, SEXP weights, S SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); igraph_vector_int_t c_from_data; Rz_SEXP_to_igraph_vs(from, &c_graph, &c_from, &c_from_data); igraph_vector_int_t c_to_data; @@ -4133,7 +4238,7 @@ SEXP R_igraph_distances_dijkstra(SEXP graph, SEXP from, SEXP to, SEXP weights, S /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_from_data); igraph_vs_destroy(&c_from); igraph_vector_int_destroy(&c_to_data); @@ -4159,10 +4264,11 @@ SEXP R_igraph_distances_dijkstra_cutoff(SEXP graph, SEXP from, SEXP to, SEXP wei SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); igraph_vector_int_t c_from_data; Rz_SEXP_to_igraph_vs(from, &c_graph, &c_from, &c_from_data); igraph_vector_int_t c_to_data; @@ -4179,7 +4285,7 @@ SEXP R_igraph_distances_dijkstra_cutoff(SEXP graph, SEXP from, SEXP to, SEXP wei /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_from_data); igraph_vs_destroy(&c_from); igraph_vector_int_destroy(&c_to_data); @@ -4210,12 +4316,13 @@ SEXP R_igraph_get_shortest_paths_dijkstra(SEXP graph, SEXP from, SEXP to, SEXP w SEXP inbound_edges; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_vertices, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_vertices); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_vertices); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_edges, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_edges); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_edges); c_from = (igraph_integer_t) REAL(from)[0]; igraph_vector_int_t c_to_data; Rz_SEXP_to_igraph_vs(to, &c_graph, &c_to, &c_to_data); @@ -4224,9 +4331,9 @@ SEXP R_igraph_get_shortest_paths_dijkstra(SEXP graph, SEXP from, SEXP to, SEXP w } c_mode = (igraph_neimode_t) Rf_asInteger(mode); IGRAPH_R_CHECK(igraph_vector_int_init(&c_parents, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_parents); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_parents); IGRAPH_R_CHECK(igraph_vector_int_init(&c_inbound_edges, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_inbound_edges); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_inbound_edges); /* Call igraph */ IGRAPH_R_CHECK(igraph_get_shortest_paths_dijkstra(&c_graph, &c_vertices, &c_edges, c_from, c_to, (Rf_isNull(weights) ? 0 : &c_weights), c_mode, &c_parents, &c_inbound_edges)); @@ -4235,18 +4342,18 @@ SEXP R_igraph_get_shortest_paths_dijkstra(SEXP graph, SEXP from, SEXP to, SEXP w PROTECT(r_names=NEW_CHARACTER(4)); PROTECT(vertices=Ry_igraph_vector_int_list_to_SEXPp1(&c_vertices)); igraph_vector_int_list_destroy(&c_vertices); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(edges=Ry_igraph_vector_int_list_to_SEXPp1(&c_edges)); igraph_vector_int_list_destroy(&c_edges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_to_data); igraph_vs_destroy(&c_to); PROTECT(parents=Ry_igraph_vector_int_to_SEXP(&c_parents)); igraph_vector_int_destroy(&c_parents); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(inbound_edges=Ry_igraph_vector_int_to_SEXP(&c_inbound_edges)); igraph_vector_int_destroy(&c_inbound_edges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, vertices); SET_VECTOR_ELT(r_result, 1, edges); SET_VECTOR_ELT(r_result, 2, parents); @@ -4282,12 +4389,13 @@ SEXP R_igraph_get_shortest_paths_bellman_ford(SEXP graph, SEXP from, SEXP to, SE SEXP inbound_edges; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_vertices, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_vertices); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_vertices); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_edges, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_edges); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_edges); c_from = (igraph_integer_t) REAL(from)[0]; igraph_vector_int_t c_to_data; Rz_SEXP_to_igraph_vs(to, &c_graph, &c_to, &c_to_data); @@ -4296,9 +4404,9 @@ SEXP R_igraph_get_shortest_paths_bellman_ford(SEXP graph, SEXP from, SEXP to, SE } c_mode = (igraph_neimode_t) Rf_asInteger(mode); IGRAPH_R_CHECK(igraph_vector_int_init(&c_parents, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_parents); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_parents); IGRAPH_R_CHECK(igraph_vector_int_init(&c_inbound_edges, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_inbound_edges); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_inbound_edges); /* Call igraph */ IGRAPH_R_CHECK(igraph_get_shortest_paths_bellman_ford(&c_graph, &c_vertices, &c_edges, c_from, c_to, (Rf_isNull(weights) ? 0 : &c_weights), c_mode, &c_parents, &c_inbound_edges)); @@ -4307,18 +4415,18 @@ SEXP R_igraph_get_shortest_paths_bellman_ford(SEXP graph, SEXP from, SEXP to, SE PROTECT(r_names=NEW_CHARACTER(4)); PROTECT(vertices=Ry_igraph_vector_int_list_to_SEXPp1(&c_vertices)); igraph_vector_int_list_destroy(&c_vertices); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(edges=Ry_igraph_vector_int_list_to_SEXPp1(&c_edges)); igraph_vector_int_list_destroy(&c_edges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_to_data); igraph_vs_destroy(&c_to); PROTECT(parents=Ry_igraph_vector_int_to_SEXP(&c_parents)); igraph_vector_int_destroy(&c_parents); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(inbound_edges=Ry_igraph_vector_int_to_SEXP(&c_inbound_edges)); igraph_vector_int_destroy(&c_inbound_edges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, vertices); SET_VECTOR_ELT(r_result, 1, edges); SET_VECTOR_ELT(r_result, 2, parents); @@ -4352,14 +4460,15 @@ SEXP R_igraph_get_all_shortest_paths_dijkstra(SEXP graph, SEXP from, SEXP to, SE SEXP nrgeo; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_vertices, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_vertices); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_vertices); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_edges, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_edges); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_edges); IGRAPH_R_CHECK(igraph_vector_int_init(&c_nrgeo, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_nrgeo); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_nrgeo); c_from = (igraph_integer_t) REAL(from)[0]; igraph_vector_int_t c_to_data; Rz_SEXP_to_igraph_vs(to, &c_graph, &c_to, &c_to_data); @@ -4375,13 +4484,13 @@ SEXP R_igraph_get_all_shortest_paths_dijkstra(SEXP graph, SEXP from, SEXP to, SE PROTECT(r_names=NEW_CHARACTER(3)); PROTECT(vertices=Ry_igraph_vector_int_list_to_SEXPp1(&c_vertices)); igraph_vector_int_list_destroy(&c_vertices); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(edges=Ry_igraph_vector_int_list_to_SEXPp1(&c_edges)); igraph_vector_int_list_destroy(&c_edges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(nrgeo=Ry_igraph_vector_int_to_SEXP(&c_nrgeo)); igraph_vector_int_destroy(&c_nrgeo); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_to_data); igraph_vs_destroy(&c_to); SET_VECTOR_ELT(r_result, 0, vertices); @@ -4411,10 +4520,11 @@ SEXP R_igraph_distances_bellman_ford(SEXP graph, SEXP from, SEXP to, SEXP weight SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); igraph_vector_int_t c_from_data; Rz_SEXP_to_igraph_vs(from, &c_graph, &c_from, &c_from_data); igraph_vector_int_t c_to_data; @@ -4429,7 +4539,7 @@ SEXP R_igraph_distances_bellman_ford(SEXP graph, SEXP from, SEXP to, SEXP weight /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_from_data); igraph_vs_destroy(&c_from); igraph_vector_int_destroy(&c_to_data); @@ -4453,10 +4563,11 @@ SEXP R_igraph_distances_johnson(SEXP graph, SEXP from, SEXP to, SEXP weights) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); igraph_vector_int_t c_from_data; Rz_SEXP_to_igraph_vs(from, &c_graph, &c_from, &c_from_data); igraph_vector_int_t c_to_data; @@ -4470,7 +4581,7 @@ SEXP R_igraph_distances_johnson(SEXP graph, SEXP from, SEXP to, SEXP weights) { /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_from_data); igraph_vs_destroy(&c_from); igraph_vector_int_destroy(&c_to_data); @@ -4496,10 +4607,11 @@ SEXP R_igraph_distances_floyd_warshall(SEXP graph, SEXP from, SEXP to, SEXP weig SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); igraph_vector_int_t c_from_data; Rz_SEXP_to_igraph_vs(from, &c_graph, &c_from, &c_from_data); igraph_vector_int_t c_to_data; @@ -4515,7 +4627,7 @@ SEXP R_igraph_distances_floyd_warshall(SEXP graph, SEXP from, SEXP to, SEXP weig /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_from_data); igraph_vs_destroy(&c_from); igraph_vector_int_destroy(&c_to_data); @@ -4542,14 +4654,15 @@ SEXP R_igraph_voronoi(SEXP graph, SEXP generators, SEXP weights, SEXP mode, SEXP SEXP distances; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_membership, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_membership); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); IGRAPH_R_CHECK(igraph_vector_init(&c_distances, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_distances); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_distances); Rz_SEXP_to_vector_int_copy(generators, &c_generators); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_generators); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_generators); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } @@ -4563,12 +4676,12 @@ SEXP R_igraph_voronoi(SEXP graph, SEXP generators, SEXP weights, SEXP mode, SEXP PROTECT(r_names=NEW_CHARACTER(2)); PROTECT(membership=Ry_igraph_vector_int_to_SEXP(&c_membership)); igraph_vector_int_destroy(&c_membership); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(distances=Ry_igraph_vector_to_SEXP(&c_distances)); igraph_vector_destroy(&c_distances); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_generators); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, membership); SET_VECTOR_ELT(r_result, 1, distances); SET_STRING_ELT(r_names, 0, Rf_mkChar("membership")); @@ -4594,10 +4707,11 @@ SEXP R_igraph_get_all_simple_paths(SEXP graph, SEXP from, SEXP to, SEXP cutoff, SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_res); c_from = (igraph_integer_t) REAL(from)[0]; igraph_vector_int_t c_to_data; Rz_SEXP_to_igraph_vs(to, &c_graph, &c_to, &c_to_data); @@ -4610,7 +4724,7 @@ SEXP R_igraph_get_all_simple_paths(SEXP graph, SEXP from, SEXP to, SEXP cutoff, /* Convert output */ PROTECT(res=Ry_igraph_vector_int_to_SEXPp1(&c_res)); igraph_vector_int_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_to_data); igraph_vs_destroy(&c_to); r_result = res; @@ -4636,15 +4750,16 @@ SEXP R_igraph_get_k_shortest_paths(SEXP graph, SEXP weights, SEXP k, SEXP from, SEXP edge_paths; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_vertex_paths, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_vertex_paths); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_vertex_paths); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_edge_paths, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_edge_paths); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_edge_paths); IGRAPH_R_CHECK_INT(k); c_k = (igraph_integer_t) REAL(k)[0]; c_from = (igraph_integer_t) REAL(from)[0]; @@ -4658,10 +4773,10 @@ SEXP R_igraph_get_k_shortest_paths(SEXP graph, SEXP weights, SEXP k, SEXP from, PROTECT(r_names=NEW_CHARACTER(2)); PROTECT(vertex_paths=Ry_igraph_vector_int_list_to_SEXPp1(&c_vertex_paths)); igraph_vector_int_list_destroy(&c_vertex_paths); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(edge_paths=Ry_igraph_vector_int_list_to_SEXPp1(&c_edge_paths)); igraph_vector_int_list_destroy(&c_edge_paths); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, vertex_paths); SET_VECTOR_ELT(r_result, 1, edge_paths); SET_STRING_ELT(r_names, 0, Rf_mkChar("vpaths")); @@ -4689,12 +4804,13 @@ SEXP R_igraph_get_widest_path(SEXP graph, SEXP from, SEXP to, SEXP weights, SEXP SEXP edges; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertices, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vertices); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertices); IGRAPH_R_CHECK(igraph_vector_int_init(&c_edges, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edges); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edges); c_from = (igraph_integer_t) REAL(from)[0]; c_to = (igraph_integer_t) REAL(to)[0]; Rz_SEXP_to_vector(weights, &c_weights); @@ -4707,10 +4823,10 @@ SEXP R_igraph_get_widest_path(SEXP graph, SEXP from, SEXP to, SEXP weights, SEXP PROTECT(r_names=NEW_CHARACTER(2)); PROTECT(vertices=Ry_igraph_vector_int_to_SEXPp1(&c_vertices)); igraph_vector_int_destroy(&c_vertices); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(edges=Ry_igraph_vector_int_to_SEXPp1(&c_edges)); igraph_vector_int_destroy(&c_edges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, vertices); SET_VECTOR_ELT(r_result, 1, edges); SET_STRING_ELT(r_names, 0, Rf_mkChar("vertices")); @@ -4742,21 +4858,22 @@ SEXP R_igraph_get_widest_paths(SEXP graph, SEXP from, SEXP to, SEXP weights, SEX SEXP inbound_edges; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_vertices, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_vertices); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_vertices); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_edges, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_edges); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_edges); c_from = (igraph_integer_t) REAL(from)[0]; igraph_vector_int_t c_to_data; Rz_SEXP_to_igraph_vs(to, &c_graph, &c_to, &c_to_data); Rz_SEXP_to_vector(weights, &c_weights); c_mode = (igraph_neimode_t) Rf_asInteger(mode); IGRAPH_R_CHECK(igraph_vector_int_init(&c_parents, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_parents); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_parents); IGRAPH_R_CHECK(igraph_vector_int_init(&c_inbound_edges, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_inbound_edges); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_inbound_edges); /* Call igraph */ IGRAPH_R_CHECK(igraph_get_widest_paths(&c_graph, &c_vertices, &c_edges, c_from, c_to, &c_weights, c_mode, &c_parents, &c_inbound_edges)); @@ -4765,18 +4882,18 @@ SEXP R_igraph_get_widest_paths(SEXP graph, SEXP from, SEXP to, SEXP weights, SEX PROTECT(r_names=NEW_CHARACTER(4)); PROTECT(vertices=Ry_igraph_vector_int_list_to_SEXPp1(&c_vertices)); igraph_vector_int_list_destroy(&c_vertices); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(edges=Ry_igraph_vector_int_list_to_SEXPp1(&c_edges)); igraph_vector_int_list_destroy(&c_edges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_to_data); igraph_vs_destroy(&c_to); PROTECT(parents=Ry_igraph_vector_int_to_SEXP(&c_parents)); igraph_vector_int_destroy(&c_parents); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(inbound_edges=Ry_igraph_vector_int_to_SEXP(&c_inbound_edges)); igraph_vector_int_destroy(&c_inbound_edges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, vertices); SET_VECTOR_ELT(r_result, 1, edges); SET_VECTOR_ELT(r_result, 2, parents); @@ -4806,10 +4923,11 @@ SEXP R_igraph_widest_path_widths_dijkstra(SEXP graph, SEXP from, SEXP to, SEXP w SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); igraph_vector_int_t c_from_data; Rz_SEXP_to_igraph_vs(from, &c_graph, &c_from, &c_from_data); igraph_vector_int_t c_to_data; @@ -4822,7 +4940,7 @@ SEXP R_igraph_widest_path_widths_dijkstra(SEXP graph, SEXP from, SEXP to, SEXP w /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_from_data); igraph_vs_destroy(&c_from); igraph_vector_int_destroy(&c_to_data); @@ -4847,10 +4965,11 @@ SEXP R_igraph_widest_path_widths_floyd_warshall(SEXP graph, SEXP from, SEXP to, SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); igraph_vector_int_t c_from_data; Rz_SEXP_to_igraph_vs(from, &c_graph, &c_from, &c_from_data); igraph_vector_int_t c_to_data; @@ -4863,7 +4982,7 @@ SEXP R_igraph_widest_path_widths_floyd_warshall(SEXP graph, SEXP from, SEXP to, /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_from_data); igraph_vs_destroy(&c_from); igraph_vector_int_destroy(&c_to_data); @@ -4886,10 +5005,11 @@ SEXP R_igraph_spanner(SEXP graph, SEXP stretch, SEXP weights) { SEXP spanner; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_spanner, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_spanner); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_spanner); IGRAPH_R_CHECK_REAL(stretch); c_stretch = REAL(stretch)[0]; if (!Rf_isNull(weights)) { @@ -4901,7 +5021,7 @@ SEXP R_igraph_spanner(SEXP graph, SEXP stretch, SEXP weights) { /* Convert output */ PROTECT(spanner=Ry_igraph_vector_int_to_SEXPp1(&c_spanner)); igraph_vector_int_destroy(&c_spanner); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = spanner; UNPROTECT(1); @@ -4920,10 +5040,11 @@ SEXP R_igraph_subcomponent(SEXP graph, SEXP vid, SEXP mode) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_res); c_vid = (igraph_integer_t) REAL(vid)[0]; c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ @@ -4932,7 +5053,7 @@ SEXP R_igraph_subcomponent(SEXP graph, SEXP vid, SEXP mode) { /* Convert output */ PROTECT(res=Ry_igraph_vector_int_to_SEXPp1(&c_res)); igraph_vector_int_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -4952,10 +5073,11 @@ SEXP R_igraph_betweenness(SEXP graph, SEXP vids, SEXP directed, SEXP weights) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); IGRAPH_R_CHECK_BOOL(directed); @@ -4969,7 +5091,7 @@ SEXP R_igraph_betweenness(SEXP graph, SEXP vids, SEXP directed, SEXP weights) { /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vids_data); igraph_vs_destroy(&c_vids); r_result = res; @@ -4992,10 +5114,11 @@ SEXP R_igraph_betweenness_cutoff(SEXP graph, SEXP vids, SEXP directed, SEXP weig SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); IGRAPH_R_CHECK_BOOL(directed); @@ -5011,7 +5134,7 @@ SEXP R_igraph_betweenness_cutoff(SEXP graph, SEXP vids, SEXP directed, SEXP weig /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vids_data); igraph_vs_destroy(&c_vids); r_result = res; @@ -5035,10 +5158,11 @@ SEXP R_igraph_betweenness_subset(SEXP graph, SEXP vids, SEXP directed, SEXP sour SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); IGRAPH_R_CHECK_BOOL(directed); @@ -5056,7 +5180,7 @@ SEXP R_igraph_betweenness_subset(SEXP graph, SEXP vids, SEXP directed, SEXP sour /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vids_data); igraph_vs_destroy(&c_vids); igraph_vector_int_destroy(&c_sources_data); @@ -5081,10 +5205,11 @@ SEXP R_igraph_edge_betweenness(SEXP graph, SEXP directed, SEXP weights) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; if (!Rf_isNull(weights)) { @@ -5096,7 +5221,7 @@ SEXP R_igraph_edge_betweenness(SEXP graph, SEXP directed, SEXP weights) { /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -5116,10 +5241,11 @@ SEXP R_igraph_edge_betweenness_cutoff(SEXP graph, SEXP directed, SEXP weights, S SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; if (!Rf_isNull(weights)) { @@ -5133,7 +5259,7 @@ SEXP R_igraph_edge_betweenness_cutoff(SEXP graph, SEXP directed, SEXP weights, S /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -5155,10 +5281,11 @@ SEXP R_igraph_edge_betweenness_subset(SEXP graph, SEXP eids, SEXP directed, SEXP SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_eids_data; IGRAPH_R_CHECK(Rz_SEXP_to_igraph_es(eids, &c_graph, &c_eids, &c_eids_data)); IGRAPH_R_CHECK_BOOL(directed); @@ -5176,7 +5303,7 @@ SEXP R_igraph_edge_betweenness_subset(SEXP graph, SEXP eids, SEXP directed, SEXP /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_eids_data); igraph_es_destroy(&c_eids); igraph_vector_int_destroy(&c_sources_data); @@ -5203,10 +5330,11 @@ SEXP R_igraph_harmonic_centrality(SEXP graph, SEXP vids, SEXP mode, SEXP weights SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); c_mode = (igraph_neimode_t) Rf_asInteger(mode); @@ -5221,7 +5349,7 @@ SEXP R_igraph_harmonic_centrality(SEXP graph, SEXP vids, SEXP mode, SEXP weights /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vids_data); igraph_vs_destroy(&c_vids); r_result = res; @@ -5245,10 +5373,11 @@ SEXP R_igraph_harmonic_centrality_cutoff(SEXP graph, SEXP vids, SEXP mode, SEXP SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); c_mode = (igraph_neimode_t) Rf_asInteger(mode); @@ -5265,7 +5394,7 @@ SEXP R_igraph_harmonic_centrality_cutoff(SEXP graph, SEXP vids, SEXP mode, SEXP /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vids_data); igraph_vs_destroy(&c_vids); r_result = res; @@ -5293,11 +5422,12 @@ SEXP R_igraph_pagerank(SEXP graph, SEXP algo, SEXP vids, SEXP directed, SEXP dam SEXP value; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_algo = (igraph_pagerank_algo_t) Rf_asInteger(algo); IGRAPH_R_CHECK(igraph_vector_init(&c_vector, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_vector); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_vector); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); IGRAPH_R_CHECK_BOOL(directed); @@ -5323,7 +5453,7 @@ SEXP R_igraph_pagerank(SEXP graph, SEXP algo, SEXP vids, SEXP directed, SEXP dam PROTECT(r_names=NEW_CHARACTER(3)); PROTECT(vector=Ry_igraph_vector_to_SEXP(&c_vector)); igraph_vector_destroy(&c_vector); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(value=NEW_NUMERIC(1)); REAL(value)[0]=c_value; igraph_vector_int_destroy(&c_vids_data); @@ -5366,11 +5496,12 @@ SEXP R_igraph_personalized_pagerank(SEXP graph, SEXP algo, SEXP vids, SEXP direc SEXP value; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_algo = (igraph_pagerank_algo_t) Rf_asInteger(algo); IGRAPH_R_CHECK(igraph_vector_init(&c_vector, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_vector); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_vector); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); IGRAPH_R_CHECK_BOOL(directed); @@ -5399,7 +5530,7 @@ SEXP R_igraph_personalized_pagerank(SEXP graph, SEXP algo, SEXP vids, SEXP direc PROTECT(r_names=NEW_CHARACTER(3)); PROTECT(vector=Ry_igraph_vector_to_SEXP(&c_vector)); igraph_vector_destroy(&c_vector); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(value=NEW_NUMERIC(1)); REAL(value)[0]=c_value; igraph_vector_int_destroy(&c_vids_data); @@ -5442,11 +5573,12 @@ SEXP R_igraph_personalized_pagerank_vs(SEXP graph, SEXP algo, SEXP vids, SEXP di SEXP value; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_algo = (igraph_pagerank_algo_t) Rf_asInteger(algo); IGRAPH_R_CHECK(igraph_vector_init(&c_vector, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_vector); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_vector); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); IGRAPH_R_CHECK_BOOL(directed); @@ -5474,7 +5606,7 @@ SEXP R_igraph_personalized_pagerank_vs(SEXP graph, SEXP algo, SEXP vids, SEXP di PROTECT(r_names=NEW_CHARACTER(3)); PROTECT(vector=Ry_igraph_vector_to_SEXP(&c_vector)); igraph_vector_destroy(&c_vector); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(value=NEW_NUMERIC(1)); REAL(value)[0]=c_value; igraph_vector_int_destroy(&c_vids_data); @@ -5509,9 +5641,10 @@ SEXP R_igraph_rewire(SEXP rewire, SEXP n, SEXP mode) { igraph_rewiring_t c_mode; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph_copy(rewire, &c_rewire); - IGRAPH_FINALLY(igraph_destroy, &c_rewire); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_rewire); IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; c_mode = (igraph_rewiring_t) Rf_asInteger(mode); @@ -5521,7 +5654,7 @@ SEXP R_igraph_rewire(SEXP rewire, SEXP n, SEXP mode) { /* Convert output */ PROTECT(rewire=Ry_igraph_to_SEXP(&c_rewire)); IGRAPH_I_DESTROY(&c_rewire); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = rewire; UNPROTECT(1); @@ -5540,6 +5673,7 @@ SEXP R_igraph_induced_subgraph(SEXP graph, SEXP vids, SEXP impl) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); igraph_vector_int_t c_vids_data; @@ -5549,10 +5683,10 @@ SEXP R_igraph_induced_subgraph(SEXP graph, SEXP vids, SEXP impl) { IGRAPH_R_CHECK(igraph_induced_subgraph(&c_graph, &c_res, c_vids, c_impl)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_res); PROTECT(res=Ry_igraph_to_SEXP(&c_res)); IGRAPH_I_DESTROY(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vids_data); igraph_vs_destroy(&c_vids); r_result = res; @@ -5573,6 +5707,7 @@ SEXP R_igraph_subgraph_from_edges(SEXP graph, SEXP eids, SEXP delete_vertices) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); igraph_vector_int_t c_eids_data; @@ -5583,10 +5718,10 @@ SEXP R_igraph_subgraph_from_edges(SEXP graph, SEXP eids, SEXP delete_vertices) { IGRAPH_R_CHECK(igraph_subgraph_from_edges(&c_graph, &c_res, c_eids, c_delete_vertices)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_res); PROTECT(res=Ry_igraph_to_SEXP(&c_res)); IGRAPH_I_DESTROY(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_eids_data); igraph_es_destroy(&c_eids); r_result = res; @@ -5604,9 +5739,10 @@ SEXP R_igraph_reverse_edges(SEXP graph, SEXP eids) { igraph_es_t c_eids; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph_copy(graph, &c_graph); - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); igraph_vector_int_t c_eids_data; IGRAPH_R_CHECK(Rz_SEXP_to_igraph_es(eids, &c_graph, &c_eids, &c_eids_data)); /* Call igraph */ @@ -5615,7 +5751,7 @@ SEXP R_igraph_reverse_edges(SEXP graph, SEXP eids) { /* Convert output */ PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_eids_data); igraph_es_destroy(&c_eids); r_result = graph; @@ -5638,6 +5774,7 @@ SEXP R_igraph_average_path_length(SEXP graph, SEXP directed, SEXP unconn) { SEXP unconn_pairs; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK_BOOL(directed); @@ -5680,6 +5817,7 @@ SEXP R_igraph_average_path_length_dijkstra(SEXP graph, SEXP weights, SEXP direct SEXP unconn_pairs; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(weights)) { @@ -5723,10 +5861,11 @@ SEXP R_igraph_path_length_hist(SEXP graph, SEXP directed) { SEXP unconnected; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ @@ -5737,7 +5876,7 @@ SEXP R_igraph_path_length_hist(SEXP graph, SEXP directed) { PROTECT(r_names=NEW_CHARACTER(2)); PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(unconnected=NEW_NUMERIC(1)); REAL(unconnected)[0]=c_unconnected; SET_VECTOR_ELT(r_result, 0, res); @@ -5762,24 +5901,25 @@ SEXP R_igraph_simplify(SEXP graph, SEXP remove_multiple, SEXP remove_loops, SEXP igraph_attribute_combination_t c_edge_attr_comb; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph_copy(graph, &c_graph); - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); IGRAPH_R_CHECK_BOOL(remove_multiple); c_remove_multiple = LOGICAL(remove_multiple)[0]; IGRAPH_R_CHECK_BOOL(remove_loops); c_remove_loops = LOGICAL(remove_loops)[0]; Rz_SEXP_to_attr_comb(edge_attr_comb, &c_edge_attr_comb); - IGRAPH_FINALLY(igraph_attribute_combination_destroy, &c_edge_attr_comb); + IGRAPH_LOCAL_FINALLY(igraph_attribute_combination_destroy, &c_edge_attr_comb); /* Call igraph */ IGRAPH_R_CHECK(igraph_simplify(&c_graph, c_remove_multiple, c_remove_loops, &c_edge_attr_comb)); /* Convert output */ PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_attribute_combination_destroy(&c_edge_attr_comb); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -5797,6 +5937,7 @@ SEXP R_igraph_transitivity_undirected(SEXP graph, SEXP mode) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_mode = (igraph_transitivity_mode_t) Rf_asInteger(mode); @@ -5824,10 +5965,11 @@ SEXP R_igraph_transitivity_local_undirected(SEXP graph, SEXP vids, SEXP mode) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); c_mode = (igraph_transitivity_mode_t) Rf_asInteger(mode); @@ -5837,7 +5979,7 @@ SEXP R_igraph_transitivity_local_undirected(SEXP graph, SEXP vids, SEXP mode) { /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vids_data); igraph_vs_destroy(&c_vids); r_result = res; @@ -5857,6 +5999,7 @@ SEXP R_igraph_transitivity_avglocal_undirected(SEXP graph, SEXP mode) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_mode = (igraph_transitivity_mode_t) Rf_asInteger(mode); @@ -5885,10 +6028,11 @@ SEXP R_igraph_transitivity_barrat(SEXP graph, SEXP vids, SEXP weights, SEXP mode SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); if (!Rf_isNull(weights)) { @@ -5901,7 +6045,7 @@ SEXP R_igraph_transitivity_barrat(SEXP graph, SEXP vids, SEXP weights, SEXP mode /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vids_data); igraph_vs_destroy(&c_vids); r_result = res; @@ -5924,10 +6068,11 @@ SEXP R_igraph_ecc(SEXP graph, SEXP eids, SEXP k, SEXP offset, SEXP normalize) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_eids_data; IGRAPH_R_CHECK(Rz_SEXP_to_igraph_es(eids, &c_graph, &c_eids, &c_eids_data)); IGRAPH_R_CHECK_INT(k); @@ -5942,7 +6087,7 @@ SEXP R_igraph_ecc(SEXP graph, SEXP eids, SEXP k, SEXP offset, SEXP normalize) { /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_eids_data); igraph_es_destroy(&c_eids); r_result = res; @@ -5963,6 +6108,7 @@ SEXP R_igraph_reciprocity(SEXP graph, SEXP ignore_loops, SEXP mode) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK_BOOL(ignore_loops); @@ -5992,10 +6138,11 @@ SEXP R_igraph_constraint(SEXP graph, SEXP vids, SEXP weights) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); if (!Rf_isNull(weights)) { @@ -6007,7 +6154,7 @@ SEXP R_igraph_constraint(SEXP graph, SEXP vids, SEXP weights) { /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vids_data); igraph_vs_destroy(&c_vids); r_result = res; @@ -6029,6 +6176,7 @@ SEXP R_igraph_maxdegree(SEXP graph, SEXP vids, SEXP mode, SEXP loops) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_res=0; @@ -6062,6 +6210,7 @@ SEXP R_igraph_density(SEXP graph, SEXP loops) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK_BOOL(loops); @@ -6089,6 +6238,7 @@ SEXP R_igraph_mean_degree(SEXP graph, SEXP loops) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK_BOOL(loops); @@ -6119,10 +6269,11 @@ SEXP R_igraph_neighborhood_size(SEXP graph, SEXP vids, SEXP order, SEXP mode, SE SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); IGRAPH_R_CHECK_INT(order); @@ -6136,7 +6287,7 @@ SEXP R_igraph_neighborhood_size(SEXP graph, SEXP vids, SEXP order, SEXP mode, SE /* Convert output */ PROTECT(res=Ry_igraph_vector_int_to_SEXP(&c_res)); igraph_vector_int_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vids_data); igraph_vs_destroy(&c_vids); r_result = res; @@ -6159,10 +6310,11 @@ SEXP R_igraph_neighborhood(SEXP graph, SEXP vids, SEXP order, SEXP mode, SEXP mi SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); IGRAPH_R_CHECK_INT(order); @@ -6176,7 +6328,7 @@ SEXP R_igraph_neighborhood(SEXP graph, SEXP vids, SEXP order, SEXP mode, SEXP mi /* Convert output */ PROTECT(res=Ry_igraph_vector_int_list_to_SEXPp1(&c_res)); igraph_vector_int_list_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vids_data); igraph_vs_destroy(&c_vids); r_result = res; @@ -6199,10 +6351,11 @@ SEXP R_igraph_neighborhood_graphs(SEXP graph, SEXP vids, SEXP order, SEXP mode, SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_graph_list_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_graph_list_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_graph_list_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); IGRAPH_R_CHECK_INT(order); @@ -6216,7 +6369,7 @@ SEXP R_igraph_neighborhood_graphs(SEXP graph, SEXP vids, SEXP order, SEXP mode, /* Convert output */ PROTECT(res=Ry_igraph_graphlist_to_SEXP(&c_res)); IGRAPH_FREE(c_res.stor_begin); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vids_data); igraph_vs_destroy(&c_vids); r_result = res; @@ -6236,10 +6389,11 @@ SEXP R_igraph_topological_sorting(SEXP graph, SEXP mode) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_res); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ IGRAPH_R_CHECK(igraph_topological_sorting(&c_graph, &c_res, c_mode)); @@ -6247,7 +6401,7 @@ SEXP R_igraph_topological_sorting(SEXP graph, SEXP mode) { /* Convert output */ PROTECT(res=Ry_igraph_vector_int_to_SEXPp1(&c_res)); igraph_vector_int_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -6266,10 +6420,11 @@ SEXP R_igraph_feedback_arc_set(SEXP graph, SEXP weights, SEXP algo) { SEXP result; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_result, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_result); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_result); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } @@ -6280,7 +6435,7 @@ SEXP R_igraph_feedback_arc_set(SEXP graph, SEXP weights, SEXP algo) { /* Convert output */ PROTECT(result=Ry_igraph_vector_int_to_SEXPp1(&c_result)); igraph_vector_int_destroy(&c_result); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = result; UNPROTECT(1); @@ -6299,10 +6454,11 @@ SEXP R_igraph_feedback_vertex_set(SEXP graph, SEXP weights, SEXP algo) { SEXP result; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_result, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_result); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_result); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } @@ -6313,7 +6469,7 @@ SEXP R_igraph_feedback_vertex_set(SEXP graph, SEXP weights, SEXP algo) { /* Convert output */ PROTECT(result=Ry_igraph_vector_int_to_SEXPp1(&c_result)); igraph_vector_int_destroy(&c_result); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = result; UNPROTECT(1); @@ -6331,10 +6487,11 @@ SEXP R_igraph_is_loop(SEXP graph, SEXP es) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_bool_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_bool_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_bool_destroy, &c_res); igraph_vector_int_t c_es_data; IGRAPH_R_CHECK(Rz_SEXP_to_igraph_es(es, &c_graph, &c_es, &c_es_data)); /* Call igraph */ @@ -6343,7 +6500,7 @@ SEXP R_igraph_is_loop(SEXP graph, SEXP es) { /* Convert output */ PROTECT(res=Ry_igraph_vector_bool_to_SEXP(&c_res)); igraph_vector_bool_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_es_data); igraph_es_destroy(&c_es); r_result = res; @@ -6362,6 +6519,7 @@ SEXP R_igraph_is_dag(SEXP graph) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ @@ -6386,6 +6544,7 @@ SEXP R_igraph_is_acyclic(SEXP graph) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ @@ -6410,6 +6569,7 @@ SEXP R_igraph_is_simple(SEXP graph) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ @@ -6435,10 +6595,11 @@ SEXP R_igraph_is_multiple(SEXP graph, SEXP es) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_bool_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_bool_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_bool_destroy, &c_res); igraph_vector_int_t c_es_data; IGRAPH_R_CHECK(Rz_SEXP_to_igraph_es(es, &c_graph, &c_es, &c_es_data)); /* Call igraph */ @@ -6447,7 +6608,7 @@ SEXP R_igraph_is_multiple(SEXP graph, SEXP es) { /* Convert output */ PROTECT(res=Ry_igraph_vector_bool_to_SEXP(&c_res)); igraph_vector_bool_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_es_data); igraph_es_destroy(&c_es); r_result = res; @@ -6466,6 +6627,7 @@ SEXP R_igraph_has_loop(SEXP graph) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ @@ -6490,6 +6652,7 @@ SEXP R_igraph_has_multiple(SEXP graph) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ @@ -6514,6 +6677,7 @@ SEXP R_igraph_count_loops(SEXP graph) { SEXP loop_count; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_loop_count=0; @@ -6540,10 +6704,11 @@ SEXP R_igraph_count_multiple(SEXP graph, SEXP es) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_res); igraph_vector_int_t c_es_data; IGRAPH_R_CHECK(Rz_SEXP_to_igraph_es(es, &c_graph, &c_es, &c_es_data)); /* Call igraph */ @@ -6552,7 +6717,7 @@ SEXP R_igraph_count_multiple(SEXP graph, SEXP es) { /* Convert output */ PROTECT(res=Ry_igraph_vector_int_to_SEXP(&c_res)); igraph_vector_int_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_es_data); igraph_es_destroy(&c_es); r_result = res; @@ -6573,10 +6738,11 @@ SEXP R_igraph_girth(SEXP graph) { SEXP circle; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_circle, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_circle); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_circle); /* Call igraph */ IGRAPH_R_CHECK(igraph_girth(&c_graph, &c_girth, &c_circle)); @@ -6587,7 +6753,7 @@ SEXP R_igraph_girth(SEXP graph) { REAL(girth)[0]=c_girth; PROTECT(circle=Ry_igraph_vector_int_to_SEXPp1(&c_circle)); igraph_vector_int_destroy(&c_circle); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, girth); SET_VECTOR_ELT(r_result, 1, circle); SET_STRING_ELT(r_names, 0, Rf_mkChar("girth")); @@ -6609,6 +6775,7 @@ SEXP R_igraph_is_perfect(SEXP graph) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ @@ -6633,9 +6800,10 @@ SEXP R_igraph_add_edge(SEXP graph, SEXP from, SEXP to) { igraph_integer_t c_to; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph_copy(graph, &c_graph); - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); IGRAPH_R_CHECK_INT(from); c_from = (igraph_integer_t) REAL(from)[0]; IGRAPH_R_CHECK_INT(to); @@ -6646,7 +6814,7 @@ SEXP R_igraph_add_edge(SEXP graph, SEXP from, SEXP to) { /* Convert output */ PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -6669,10 +6837,11 @@ SEXP R_igraph_eigenvector_centrality(SEXP graph, SEXP directed, SEXP scale, SEXP SEXP value; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_vector, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_vector); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_vector); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; IGRAPH_R_CHECK_BOOL(scale); @@ -6689,7 +6858,7 @@ SEXP R_igraph_eigenvector_centrality(SEXP graph, SEXP directed, SEXP scale, SEXP PROTECT(r_names=NEW_CHARACTER(3)); PROTECT(vector=Ry_igraph_vector_to_SEXP(&c_vector)); igraph_vector_destroy(&c_vector); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(value=NEW_NUMERIC(1)); REAL(value)[0]=c_value; PROTECT(options=Ry_igraph_arpack_options_to_SEXP(&c_options)); @@ -6721,10 +6890,11 @@ SEXP R_igraph_hub_score(SEXP graph, SEXP scale, SEXP weights, SEXP options) { SEXP value; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_vector, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_vector); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_vector); IGRAPH_R_CHECK_BOOL(scale); c_scale = LOGICAL(scale)[0]; if (!Rf_isNull(weights)) { @@ -6739,7 +6909,7 @@ SEXP R_igraph_hub_score(SEXP graph, SEXP scale, SEXP weights, SEXP options) { PROTECT(r_names=NEW_CHARACTER(3)); PROTECT(vector=Ry_igraph_vector_to_SEXP(&c_vector)); igraph_vector_destroy(&c_vector); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(value=NEW_NUMERIC(1)); REAL(value)[0]=c_value; PROTECT(options=Ry_igraph_arpack_options_to_SEXP(&c_options)); @@ -6771,10 +6941,11 @@ SEXP R_igraph_authority_score(SEXP graph, SEXP scale, SEXP weights, SEXP options SEXP value; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_vector, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_vector); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_vector); IGRAPH_R_CHECK_BOOL(scale); c_scale = LOGICAL(scale)[0]; if (!Rf_isNull(weights)) { @@ -6789,7 +6960,7 @@ SEXP R_igraph_authority_score(SEXP graph, SEXP scale, SEXP weights, SEXP options PROTECT(r_names=NEW_CHARACTER(3)); PROTECT(vector=Ry_igraph_vector_to_SEXP(&c_vector)); igraph_vector_destroy(&c_vector); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(value=NEW_NUMERIC(1)); REAL(value)[0]=c_value; PROTECT(options=Ry_igraph_arpack_options_to_SEXP(&c_options)); @@ -6823,12 +6994,13 @@ SEXP R_igraph_hub_and_authority_scores(SEXP graph, SEXP scale, SEXP weights, SEX SEXP value; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_hub, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_hub); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_hub); IGRAPH_R_CHECK(igraph_vector_init(&c_authority, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_authority); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_authority); IGRAPH_R_CHECK_BOOL(scale); c_scale = LOGICAL(scale)[0]; if (!Rf_isNull(weights)) { @@ -6843,10 +7015,10 @@ SEXP R_igraph_hub_and_authority_scores(SEXP graph, SEXP scale, SEXP weights, SEX PROTECT(r_names=NEW_CHARACTER(4)); PROTECT(hub=Ry_igraph_vector_to_SEXP(&c_hub)); igraph_vector_destroy(&c_hub); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(authority=Ry_igraph_vector_to_SEXP(&c_authority)); igraph_vector_destroy(&c_authority); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(value=NEW_NUMERIC(1)); REAL(value)[0]=c_value; PROTECT(options=Ry_igraph_arpack_options_to_SEXP(&c_options)); @@ -6879,28 +7051,29 @@ SEXP R_igraph_unfold_tree(SEXP graph, SEXP mode, SEXP roots) { SEXP vertex_index; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_mode = (igraph_neimode_t) Rf_asInteger(mode); IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(roots, &c_roots)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_roots); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_roots); IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_index, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vertex_index); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_index); /* Call igraph */ IGRAPH_R_CHECK(igraph_unfold_tree(&c_graph, &c_tree, c_mode, &c_roots, &c_vertex_index)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); PROTECT(r_names=NEW_CHARACTER(2)); - IGRAPH_FINALLY(igraph_destroy, &c_tree); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_tree); PROTECT(tree=Ry_igraph_to_SEXP(&c_tree)); IGRAPH_I_DESTROY(&c_tree); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_roots); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(vertex_index=Ry_igraph_vector_int_to_SEXPp1(&c_vertex_index)); igraph_vector_int_destroy(&c_vertex_index); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, tree); SET_VECTOR_ELT(r_result, 1, vertex_index); SET_STRING_ELT(r_names, 0, Rf_mkChar("tree")); @@ -6924,10 +7097,11 @@ SEXP R_igraph_is_mutual(SEXP graph, SEXP es, SEXP loops) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_bool_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_bool_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_bool_destroy, &c_res); igraph_vector_int_t c_es_data; IGRAPH_R_CHECK(Rz_SEXP_to_igraph_es(es, &c_graph, &c_es, &c_es_data)); IGRAPH_R_CHECK_BOOL(loops); @@ -6938,7 +7112,7 @@ SEXP R_igraph_is_mutual(SEXP graph, SEXP es, SEXP loops) { /* Convert output */ PROTECT(res=Ry_igraph_vector_bool_to_SEXP(&c_res)); igraph_vector_bool_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_es_data); igraph_es_destroy(&c_es); r_result = res; @@ -6958,6 +7132,7 @@ SEXP R_igraph_has_mutual(SEXP graph, SEXP loops) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK_BOOL(loops); @@ -6986,12 +7161,13 @@ SEXP R_igraph_maximum_cardinality_search(SEXP graph) { SEXP alpham1; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_alpha, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_alpha); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_alpha); IGRAPH_R_CHECK(igraph_vector_int_init(&c_alpham1, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_alpham1); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_alpham1); /* Call igraph */ IGRAPH_R_CHECK(igraph_maximum_cardinality_search(&c_graph, &c_alpha, &c_alpham1)); @@ -7000,10 +7176,10 @@ SEXP R_igraph_maximum_cardinality_search(SEXP graph) { PROTECT(r_names=NEW_CHARACTER(2)); PROTECT(alpha=Ry_igraph_vector_int_to_SEXPp1(&c_alpha)); igraph_vector_int_destroy(&c_alpha); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(alpham1=Ry_igraph_vector_int_to_SEXPp1(&c_alpham1)); igraph_vector_int_destroy(&c_alpham1); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, alpha); SET_VECTOR_ELT(r_result, 1, alpham1); SET_STRING_ELT(r_names, 0, Rf_mkChar("alpha")); @@ -7031,24 +7207,25 @@ SEXP R_igraph_is_chordal(SEXP graph, SEXP alpha, SEXP alpham1) { SEXP newgraph; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(alpha)) { Rz_SEXP_to_vector_int_copy(alpha, &c_alpha); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_alpha); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_alpha); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_alpha, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_alpha); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_alpha); } if (!Rf_isNull(alpham1)) { Rz_SEXP_to_vector_int_copy(alpham1, &c_alpham1); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_alpham1); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_alpham1); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_alpham1, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_alpham1); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_alpham1); } IGRAPH_R_CHECK(igraph_vector_int_init(&c_fillin, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_fillin); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_fillin); /* Call igraph */ IGRAPH_R_CHECK(igraph_is_chordal(&c_graph, (Rf_isNull(alpha) ? 0 : &c_alpha), (Rf_isNull(alpham1) ? 0 : &c_alpham1), &c_chordal, &c_fillin, &c_newgraph)); @@ -7056,18 +7233,18 @@ SEXP R_igraph_is_chordal(SEXP graph, SEXP alpha, SEXP alpham1) { PROTECT(r_result=NEW_LIST(3)); PROTECT(r_names=NEW_CHARACTER(3)); igraph_vector_int_destroy(&c_alpha); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_alpham1); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(chordal=NEW_LOGICAL(1)); LOGICAL(chordal)[0]=c_chordal; PROTECT(fillin=Ry_igraph_vector_int_to_SEXP(&c_fillin)); igraph_vector_int_destroy(&c_fillin); - IGRAPH_FINALLY_CLEAN(1); - IGRAPH_FINALLY(igraph_destroy, &c_newgraph); + IGRAPH_LOCAL_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_newgraph); PROTECT(newgraph=Ry_igraph_to_SEXP(&c_newgraph)); IGRAPH_I_DESTROY(&c_newgraph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, chordal); SET_VECTOR_ELT(r_result, 1, fillin); SET_VECTOR_ELT(r_result, 2, newgraph); @@ -7097,6 +7274,7 @@ SEXP R_igraph_avg_nearest_neighbor_degree(SEXP graph, SEXP vids, SEXP mode, SEXP SEXP knnk; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); igraph_vector_int_t c_vids_data; @@ -7104,9 +7282,9 @@ SEXP R_igraph_avg_nearest_neighbor_degree(SEXP graph, SEXP vids, SEXP mode, SEXP c_mode = (igraph_neimode_t) Rf_asInteger(mode); c_neighbor_degree_mode = (igraph_neimode_t) Rf_asInteger(neighbor_degree_mode); IGRAPH_R_CHECK(igraph_vector_init(&c_knn, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_knn); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_knn); IGRAPH_R_CHECK(igraph_vector_init(&c_knnk, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_knnk); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_knnk); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } @@ -7120,10 +7298,10 @@ SEXP R_igraph_avg_nearest_neighbor_degree(SEXP graph, SEXP vids, SEXP mode, SEXP igraph_vs_destroy(&c_vids); PROTECT(knn=Ry_igraph_vector_to_SEXP(&c_knn)); igraph_vector_destroy(&c_knn); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(knnk=Ry_igraph_vector_to_SEXP(&c_knnk)); igraph_vector_destroy(&c_knnk); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, knn); SET_VECTOR_ELT(r_result, 1, knnk); SET_STRING_ELT(r_names, 0, Rf_mkChar("knn")); @@ -7149,13 +7327,14 @@ SEXP R_igraph_degree_correlation_vector(SEXP graph, SEXP weights, SEXP from_mode SEXP knnk; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } IGRAPH_R_CHECK(igraph_vector_init(&c_knnk, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_knnk); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_knnk); c_from_mode = (igraph_neimode_t) Rf_asInteger(from_mode); c_to_mode = (igraph_neimode_t) Rf_asInteger(to_mode); IGRAPH_R_CHECK_BOOL(directed_neighbors); @@ -7166,7 +7345,7 @@ SEXP R_igraph_degree_correlation_vector(SEXP graph, SEXP weights, SEXP from_mode /* Convert output */ PROTECT(knnk=Ry_igraph_vector_to_SEXP(&c_knnk)); igraph_vector_destroy(&c_knnk); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = knnk; UNPROTECT(1); @@ -7188,15 +7367,16 @@ SEXP R_igraph_rich_club_sequence(SEXP graph, SEXP weights, SEXP vertex_order, SE SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); Rz_SEXP_to_vector_int_copy(vertex_order, &c_vertex_order); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vertex_order); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_order); IGRAPH_R_CHECK_BOOL(normalized); c_normalized = LOGICAL(normalized)[0]; IGRAPH_R_CHECK_BOOL(loops); @@ -7209,9 +7389,9 @@ SEXP R_igraph_rich_club_sequence(SEXP graph, SEXP weights, SEXP vertex_order, SE /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vertex_order); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -7232,10 +7412,11 @@ SEXP R_igraph_strength(SEXP graph, SEXP vids, SEXP mode, SEXP loops, SEXP weight SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); c_mode = (igraph_neimode_t) Rf_asInteger(mode); @@ -7250,7 +7431,7 @@ SEXP R_igraph_strength(SEXP graph, SEXP vids, SEXP mode, SEXP loops, SEXP weight /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vids_data); igraph_vs_destroy(&c_vids); r_result = res; @@ -7269,6 +7450,7 @@ SEXP R_igraph_centralization(SEXP scores, SEXP theoretical_max, SEXP normalized) igraph_bool_t c_normalized; igraph_real_t c_result; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_vector(scores, &c_scores); IGRAPH_R_CHECK_REAL(theoretical_max); @@ -7304,10 +7486,11 @@ SEXP R_igraph_centralization_degree(SEXP graph, SEXP mode, SEXP loops, SEXP norm SEXP theoretical_max; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); c_mode = (igraph_neimode_t) Rf_asInteger(mode); IGRAPH_R_CHECK_BOOL(loops); c_loops = LOGICAL(loops)[0]; @@ -7321,7 +7504,7 @@ SEXP R_igraph_centralization_degree(SEXP graph, SEXP mode, SEXP loops, SEXP norm PROTECT(r_names=NEW_CHARACTER(3)); PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(centralization=NEW_NUMERIC(1)); REAL(centralization)[0]=c_centralization; PROTECT(theoretical_max=NEW_NUMERIC(1)); @@ -7352,6 +7535,7 @@ SEXP R_igraph_centralization_degree_tmax(SEXP graph, SEXP nodes, SEXP mode, SEXP SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ if (!Rf_isNull(graph)) { Rz_SEXP_to_igraph(graph, &c_graph); @@ -7389,10 +7573,11 @@ SEXP R_igraph_centralization_betweenness(SEXP graph, SEXP directed, SEXP normali SEXP theoretical_max; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; IGRAPH_R_CHECK_BOOL(normalized); @@ -7405,7 +7590,7 @@ SEXP R_igraph_centralization_betweenness(SEXP graph, SEXP directed, SEXP normali PROTECT(r_names=NEW_CHARACTER(3)); PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(centralization=NEW_NUMERIC(1)); REAL(centralization)[0]=c_centralization; PROTECT(theoretical_max=NEW_NUMERIC(1)); @@ -7435,6 +7620,7 @@ SEXP R_igraph_centralization_betweenness_tmax(SEXP graph, SEXP nodes, SEXP direc SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ if (!Rf_isNull(graph)) { Rz_SEXP_to_igraph(graph, &c_graph); @@ -7471,10 +7657,11 @@ SEXP R_igraph_centralization_closeness(SEXP graph, SEXP mode, SEXP normalized) { SEXP theoretical_max; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); c_mode = (igraph_neimode_t) Rf_asInteger(mode); IGRAPH_R_CHECK_BOOL(normalized); c_normalized = LOGICAL(normalized)[0]; @@ -7486,7 +7673,7 @@ SEXP R_igraph_centralization_closeness(SEXP graph, SEXP mode, SEXP normalized) { PROTECT(r_names=NEW_CHARACTER(3)); PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(centralization=NEW_NUMERIC(1)); REAL(centralization)[0]=c_centralization; PROTECT(theoretical_max=NEW_NUMERIC(1)); @@ -7516,6 +7703,7 @@ SEXP R_igraph_centralization_closeness_tmax(SEXP graph, SEXP nodes, SEXP mode) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ if (!Rf_isNull(graph)) { Rz_SEXP_to_igraph(graph, &c_graph); @@ -7555,10 +7743,11 @@ SEXP R_igraph_centralization_eigenvector_centrality(SEXP graph, SEXP directed, S SEXP theoretical_max; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_vector, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_vector); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_vector); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; IGRAPH_R_CHECK_BOOL(scale); @@ -7574,7 +7763,7 @@ SEXP R_igraph_centralization_eigenvector_centrality(SEXP graph, SEXP directed, S PROTECT(r_names=NEW_CHARACTER(5)); PROTECT(vector=Ry_igraph_vector_to_SEXP(&c_vector)); igraph_vector_destroy(&c_vector); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(value=NEW_NUMERIC(1)); REAL(value)[0]=c_value; PROTECT(options=Ry_igraph_arpack_options_to_SEXP(&c_options)); @@ -7612,6 +7801,7 @@ SEXP R_igraph_centralization_eigenvector_centrality_tmax(SEXP graph, SEXP nodes, SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ if (!Rf_isNull(graph)) { Rz_SEXP_to_igraph(graph, &c_graph); @@ -7647,10 +7837,11 @@ SEXP R_igraph_assortativity_nominal(SEXP graph, SEXP types, SEXP directed, SEXP SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); Rz_SEXP_to_vector_int_copy(types, &c_types); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_types); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_types); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; IGRAPH_R_CHECK_BOOL(normalized); @@ -7660,7 +7851,7 @@ SEXP R_igraph_assortativity_nominal(SEXP graph, SEXP types, SEXP directed, SEXP /* Convert output */ igraph_vector_int_destroy(&c_types); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(res=NEW_NUMERIC(1)); REAL(res)[0]=c_res; r_result = res; @@ -7683,6 +7874,7 @@ SEXP R_igraph_assortativity(SEXP graph, SEXP values, SEXP values_in, SEXP direct SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); Rz_SEXP_to_vector(values, &c_values); @@ -7716,6 +7908,7 @@ SEXP R_igraph_assortativity_degree(SEXP graph, SEXP directed) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK_BOOL(directed); @@ -7745,13 +7938,14 @@ SEXP R_igraph_joint_degree_matrix(SEXP graph, SEXP weights, SEXP max_out_degree, SEXP jdm; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } IGRAPH_R_CHECK(igraph_matrix_init(&c_jdm, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_jdm); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_jdm); IGRAPH_R_CHECK_INT(max_out_degree); c_max_out_degree = (igraph_integer_t) REAL(max_out_degree)[0]; IGRAPH_R_CHECK_INT(max_in_degree); @@ -7762,7 +7956,7 @@ SEXP R_igraph_joint_degree_matrix(SEXP graph, SEXP weights, SEXP max_out_degree, /* Convert output */ PROTECT(jdm=Ry_igraph_matrix_to_SEXP(&c_jdm)); igraph_matrix_destroy(&c_jdm); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = jdm; UNPROTECT(1); @@ -7786,13 +7980,14 @@ SEXP R_igraph_joint_degree_distribution(SEXP graph, SEXP weights, SEXP from_mode SEXP p; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } IGRAPH_R_CHECK(igraph_matrix_init(&c_p, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_p); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_p); c_from_mode = (igraph_neimode_t) Rf_asInteger(from_mode); c_to_mode = (igraph_neimode_t) Rf_asInteger(to_mode); IGRAPH_R_CHECK_BOOL(directed_neighbors); @@ -7809,7 +8004,7 @@ SEXP R_igraph_joint_degree_distribution(SEXP graph, SEXP weights, SEXP from_mode /* Convert output */ PROTECT(p=Ry_igraph_matrix_to_SEXP(&c_p)); igraph_matrix_destroy(&c_p); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = p; UNPROTECT(1); @@ -7831,21 +8026,22 @@ SEXP R_igraph_joint_type_distribution(SEXP graph, SEXP weights, SEXP from_types, SEXP p; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } IGRAPH_R_CHECK(igraph_matrix_init(&c_p, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_p); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_p); Rz_SEXP_to_vector_int_copy(from_types, &c_from_types); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_from_types); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_from_types); if (!Rf_isNull(to_types)) { Rz_SEXP_to_vector_int_copy(to_types, &c_to_types); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_to_types); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_to_types); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_to_types, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_to_types); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_to_types); } IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; @@ -7857,11 +8053,11 @@ SEXP R_igraph_joint_type_distribution(SEXP graph, SEXP weights, SEXP from_types, /* Convert output */ PROTECT(p=Ry_igraph_matrix_to_SEXP(&c_p)); igraph_matrix_destroy(&c_p); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_from_types); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_to_types); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = p; UNPROTECT(1); @@ -7878,24 +8074,25 @@ SEXP R_igraph_contract_vertices(SEXP graph, SEXP mapping, SEXP vertex_attr_comb) igraph_attribute_combination_t c_vertex_attr_comb; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph_copy(graph, &c_graph); - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); Rz_SEXP_to_vector_int_copy(mapping, &c_mapping); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_mapping); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_mapping); Rz_SEXP_to_attr_comb(vertex_attr_comb, &c_vertex_attr_comb); - IGRAPH_FINALLY(igraph_attribute_combination_destroy, &c_vertex_attr_comb); + IGRAPH_LOCAL_FINALLY(igraph_attribute_combination_destroy, &c_vertex_attr_comb); /* Call igraph */ IGRAPH_R_CHECK(igraph_contract_vertices(&c_graph, &c_mapping, &c_vertex_attr_comb)); /* Convert output */ PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_mapping); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_attribute_combination_destroy(&c_vertex_attr_comb); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -7914,10 +8111,11 @@ SEXP R_igraph_eccentricity(SEXP graph, SEXP vids, SEXP mode) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); c_mode = (igraph_neimode_t) Rf_asInteger(mode); @@ -7927,7 +8125,7 @@ SEXP R_igraph_eccentricity(SEXP graph, SEXP vids, SEXP mode) { /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vids_data); igraph_vs_destroy(&c_vids); r_result = res; @@ -7949,13 +8147,14 @@ SEXP R_igraph_eccentricity_dijkstra(SEXP graph, SEXP weights, SEXP vids, SEXP mo SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); c_mode = (igraph_neimode_t) Rf_asInteger(mode); @@ -7965,7 +8164,7 @@ SEXP R_igraph_eccentricity_dijkstra(SEXP graph, SEXP weights, SEXP vids, SEXP mo /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vids_data); igraph_vs_destroy(&c_vids); r_result = res; @@ -7985,10 +8184,11 @@ SEXP R_igraph_graph_center(SEXP graph, SEXP mode) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_res); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ IGRAPH_R_CHECK(igraph_graph_center(&c_graph, &c_res, c_mode)); @@ -7996,7 +8196,7 @@ SEXP R_igraph_graph_center(SEXP graph, SEXP mode) { /* Convert output */ PROTECT(res=Ry_igraph_vector_int_to_SEXPp1(&c_res)); igraph_vector_int_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -8015,13 +8215,14 @@ SEXP R_igraph_graph_center_dijkstra(SEXP graph, SEXP weights, SEXP mode) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } IGRAPH_R_CHECK(igraph_vector_int_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_res); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ IGRAPH_R_CHECK(igraph_graph_center_dijkstra(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_res, c_mode)); @@ -8029,7 +8230,7 @@ SEXP R_igraph_graph_center_dijkstra(SEXP graph, SEXP weights, SEXP mode) { /* Convert output */ PROTECT(res=Ry_igraph_vector_int_to_SEXPp1(&c_res)); igraph_vector_int_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -8047,6 +8248,7 @@ SEXP R_igraph_radius(SEXP graph, SEXP mode) { SEXP radius; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_mode = (igraph_neimode_t) Rf_asInteger(mode); @@ -8074,6 +8276,7 @@ SEXP R_igraph_radius_dijkstra(SEXP graph, SEXP weights, SEXP mode) { SEXP radius; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(weights)) { @@ -8109,6 +8312,7 @@ SEXP R_igraph_pseudo_diameter(SEXP graph, SEXP start_vid, SEXP directed, SEXP un SEXP to; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_start_vid = (igraph_integer_t) REAL(start_vid)[0]; @@ -8161,6 +8365,7 @@ SEXP R_igraph_pseudo_diameter_dijkstra(SEXP graph, SEXP weights, SEXP start_vid, SEXP to; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(weights)) { @@ -8210,13 +8415,14 @@ SEXP R_igraph_diversity(SEXP graph, SEXP weights, SEXP vids) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); /* Call igraph */ @@ -8225,7 +8431,7 @@ SEXP R_igraph_diversity(SEXP graph, SEXP weights, SEXP vids) { /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vids_data); igraph_vs_destroy(&c_vids); r_result = res; @@ -8251,15 +8457,16 @@ SEXP R_igraph_random_walk(SEXP graph, SEXP weights, SEXP start, SEXP mode, SEXP SEXP edges; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertices, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vertices); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertices); IGRAPH_R_CHECK(igraph_vector_int_init(&c_edges, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edges); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edges); c_start = (igraph_integer_t) REAL(start)[0]; c_mode = (igraph_neimode_t) Rf_asInteger(mode); IGRAPH_R_CHECK_INT(steps); @@ -8273,10 +8480,10 @@ SEXP R_igraph_random_walk(SEXP graph, SEXP weights, SEXP start, SEXP mode, SEXP PROTECT(r_names=NEW_CHARACTER(2)); PROTECT(vertices=Ry_igraph_vector_int_to_SEXPp1(&c_vertices)); igraph_vector_int_destroy(&c_vertices); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(edges=Ry_igraph_vector_int_to_SEXPp1(&c_edges)); igraph_vector_int_destroy(&c_edges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, vertices); SET_VECTOR_ELT(r_result, 1, edges); SET_STRING_ELT(r_names, 0, Rf_mkChar("vertices")); @@ -8303,13 +8510,14 @@ SEXP R_igraph_random_edge_walk(SEXP graph, SEXP weights, SEXP start, SEXP mode, SEXP edgewalk; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } IGRAPH_R_CHECK(igraph_vector_int_init(&c_edgewalk, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edgewalk); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edgewalk); c_start = (igraph_integer_t) REAL(start)[0]; c_mode = (igraph_neimode_t) Rf_asInteger(mode); IGRAPH_R_CHECK_INT(steps); @@ -8321,7 +8529,7 @@ SEXP R_igraph_random_edge_walk(SEXP graph, SEXP weights, SEXP start, SEXP mode, /* Convert output */ PROTECT(edgewalk=Ry_igraph_vector_int_to_SEXPp1(&c_edgewalk)); igraph_vector_int_destroy(&c_edgewalk); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = edgewalk; UNPROTECT(1); @@ -8340,6 +8548,7 @@ SEXP R_igraph_global_efficiency(SEXP graph, SEXP weights, SEXP directed) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(weights)) { @@ -8373,10 +8582,11 @@ SEXP R_igraph_local_efficiency(SEXP graph, SEXP vids, SEXP weights, SEXP directe SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); if (!Rf_isNull(weights)) { @@ -8391,7 +8601,7 @@ SEXP R_igraph_local_efficiency(SEXP graph, SEXP vids, SEXP weights, SEXP directe /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vids_data); igraph_vs_destroy(&c_vids); r_result = res; @@ -8413,6 +8623,7 @@ SEXP R_igraph_average_local_efficiency(SEXP graph, SEXP weights, SEXP directed, SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(weights)) { @@ -8443,16 +8654,17 @@ SEXP R_igraph_transitive_closure_dag(SEXP graph) { SEXP closure; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ IGRAPH_R_CHECK(igraph_transitive_closure_dag(&c_graph, &c_closure)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_closure); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_closure); PROTECT(closure=Ry_igraph_to_SEXP(&c_closure)); IGRAPH_I_DESTROY(&c_closure); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = closure; UNPROTECT(1); @@ -8469,16 +8681,17 @@ SEXP R_igraph_transitive_closure(SEXP graph) { SEXP closure; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ IGRAPH_R_CHECK(igraph_transitive_closure(&c_graph, &c_closure)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_closure); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_closure); PROTECT(closure=Ry_igraph_to_SEXP(&c_closure)); IGRAPH_I_DESTROY(&c_closure); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = closure; UNPROTECT(1); @@ -8495,17 +8708,18 @@ SEXP R_igraph_trussness(SEXP graph) { SEXP trussness; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_trussness, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_trussness); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_trussness); /* Call igraph */ IGRAPH_R_CHECK(igraph_trussness(&c_graph, &c_trussness)); /* Convert output */ PROTECT(trussness=Ry_igraph_vector_int_to_SEXP(&c_trussness)); igraph_vector_int_destroy(&c_trussness); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = trussness; UNPROTECT(1); @@ -8524,20 +8738,21 @@ SEXP R_igraph_is_bigraphical(SEXP degrees1, SEXP degrees2, SEXP allowed_edge_typ SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(degrees1, &c_degrees1)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_degrees1); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_degrees1); IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(degrees2, &c_degrees2)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_degrees2); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_degrees2); c_allowed_edge_types = (igraph_edge_type_sw_t) Rf_asInteger(allowed_edge_types); /* Call igraph */ IGRAPH_R_CHECK(igraph_is_bigraphical(&c_degrees1, &c_degrees2, c_allowed_edge_types, &c_res)); /* Convert output */ igraph_vector_int_destroy(&c_degrees1); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_degrees2); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(res=NEW_LOGICAL(1)); LOGICAL(res)[0]=c_res; r_result = res; @@ -8558,15 +8773,16 @@ SEXP R_igraph_is_graphical(SEXP out_deg, SEXP in_deg, SEXP allowed_edge_types) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(out_deg, &c_out_deg)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_out_deg); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_out_deg); if (!Rf_isNull(in_deg)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(in_deg, &c_in_deg)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_in_deg); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_in_deg); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_in_deg, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_in_deg); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_in_deg); } c_allowed_edge_types = (igraph_edge_type_sw_t) Rf_asInteger(allowed_edge_types); /* Call igraph */ @@ -8574,9 +8790,9 @@ SEXP R_igraph_is_graphical(SEXP out_deg, SEXP in_deg, SEXP allowed_edge_types) { /* Convert output */ igraph_vector_int_destroy(&c_out_deg); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_in_deg); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(res=NEW_LOGICAL(1)); LOGICAL(res)[0]=c_res; r_result = res; @@ -8601,16 +8817,17 @@ SEXP R_igraph_bfs_simple(SEXP graph, SEXP root, SEXP mode) { SEXP parents; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_root = (igraph_integer_t) REAL(root)[0]; c_mode = (igraph_neimode_t) Rf_asInteger(mode); IGRAPH_R_CHECK(igraph_vector_int_init(&c_order, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_order); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_order); IGRAPH_R_CHECK(igraph_vector_int_init(&c_layers, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_layers); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_layers); IGRAPH_R_CHECK(igraph_vector_int_init(&c_parents, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_parents); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_parents); /* Call igraph */ IGRAPH_R_CHECK(igraph_bfs_simple(&c_graph, c_root, c_mode, &c_order, &c_layers, &c_parents)); @@ -8619,13 +8836,13 @@ SEXP R_igraph_bfs_simple(SEXP graph, SEXP root, SEXP mode) { PROTECT(r_names=NEW_CHARACTER(3)); PROTECT(order=Ry_igraph_vector_int_to_SEXPp1(&c_order)); igraph_vector_int_destroy(&c_order); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(layers=Ry_igraph_vector_int_to_SEXP(&c_layers)); igraph_vector_int_destroy(&c_layers); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(parents=Ry_igraph_vector_int_to_SEXP(&c_parents)); igraph_vector_int_destroy(&c_parents); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, order); SET_VECTOR_ELT(r_result, 1, layers); SET_VECTOR_ELT(r_result, 2, parents); @@ -8656,6 +8873,7 @@ SEXP R_igraph_bipartite_projection_size(SEXP graph, SEXP types) { SEXP ecount2; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); Rz_SEXP_to_vector_bool(types, &c_types); @@ -8710,13 +8928,14 @@ SEXP R_igraph_bipartite_projection(SEXP graph, SEXP types, SEXP probe1) { SEXP multiplicity2; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); Rz_SEXP_to_vector_bool(types, &c_types); IGRAPH_R_CHECK(igraph_vector_int_init(&c_multiplicity1, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_multiplicity1); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_multiplicity1); IGRAPH_R_CHECK(igraph_vector_int_init(&c_multiplicity2, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_multiplicity2); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_multiplicity2); IGRAPH_R_CHECK_INT(probe1); c_probe1 = (igraph_integer_t) REAL(probe1)[0]; /* Call igraph */ @@ -8725,20 +8944,20 @@ SEXP R_igraph_bipartite_projection(SEXP graph, SEXP types, SEXP probe1) { /* Convert output */ PROTECT(r_result=NEW_LIST(4)); PROTECT(r_names=NEW_CHARACTER(4)); - IGRAPH_FINALLY(igraph_destroy, &c_proj1); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_proj1); PROTECT(proj1=Ry_igraph_to_SEXP(&c_proj1)); IGRAPH_I_DESTROY(&c_proj1); - IGRAPH_FINALLY_CLEAN(1); - IGRAPH_FINALLY(igraph_destroy, &c_proj2); + IGRAPH_LOCAL_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_proj2); PROTECT(proj2=Ry_igraph_to_SEXP(&c_proj2)); IGRAPH_I_DESTROY(&c_proj2); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(multiplicity1=Ry_igraph_vector_int_to_SEXP(&c_multiplicity1)); igraph_vector_int_destroy(&c_multiplicity1); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(multiplicity2=Ry_igraph_vector_int_to_SEXP(&c_multiplicity2)); igraph_vector_int_destroy(&c_multiplicity2); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, proj1); SET_VECTOR_ELT(r_result, 1, proj2); SET_VECTOR_ELT(r_result, 2, multiplicity1); @@ -8766,22 +8985,23 @@ SEXP R_igraph_create_bipartite(SEXP types, SEXP edges, SEXP directed) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_vector_bool(types, &c_types); IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(edges, &c_edges)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edges); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edges); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ IGRAPH_R_CHECK(igraph_create_bipartite(&c_graph, &c_types, &c_edges, c_directed)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_edges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -8803,9 +9023,10 @@ SEXP R_igraph_biadjacency(SEXP incidence, SEXP directed, SEXP mode, SEXP multipl SEXP types; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK(igraph_vector_bool_init(&c_types, 0)); - IGRAPH_FINALLY(igraph_vector_bool_destroy, &c_types); + IGRAPH_LOCAL_FINALLY(igraph_vector_bool_destroy, &c_types); Rz_SEXP_to_matrix(incidence, &c_incidence); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; @@ -8818,13 +9039,13 @@ SEXP R_igraph_biadjacency(SEXP incidence, SEXP directed, SEXP mode, SEXP multipl /* Convert output */ PROTECT(r_result=NEW_LIST(2)); PROTECT(r_names=NEW_CHARACTER(2)); - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(types=Ry_igraph_vector_bool_to_SEXP(&c_types)); igraph_vector_bool_destroy(&c_types); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, graph); SET_VECTOR_ELT(r_result, 1, types); SET_STRING_ELT(r_names, 0, Rf_mkChar("graph")); @@ -8851,15 +9072,16 @@ SEXP R_igraph_get_biadjacency(SEXP graph, SEXP types) { SEXP col_ids; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); Rz_SEXP_to_vector_bool(types, &c_types); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); IGRAPH_R_CHECK(igraph_vector_int_init(&c_row_ids, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_row_ids); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_row_ids); IGRAPH_R_CHECK(igraph_vector_int_init(&c_col_ids, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_col_ids); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_col_ids); /* Call igraph */ IGRAPH_R_CHECK(igraph_get_biadjacency(&c_graph, &c_types, &c_res, &c_row_ids, &c_col_ids)); @@ -8868,13 +9090,13 @@ SEXP R_igraph_get_biadjacency(SEXP graph, SEXP types) { PROTECT(r_names=NEW_CHARACTER(3)); PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(row_ids=Ry_igraph_vector_int_to_SEXPp1(&c_row_ids)); igraph_vector_int_destroy(&c_row_ids); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(col_ids=Ry_igraph_vector_int_to_SEXPp1(&c_col_ids)); igraph_vector_int_destroy(&c_col_ids); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, res); SET_VECTOR_ELT(r_result, 1, row_ids); SET_VECTOR_ELT(r_result, 2, col_ids); @@ -8900,10 +9122,11 @@ SEXP R_igraph_is_bipartite(SEXP graph) { SEXP type; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_bool_init(&c_type, 0)); - IGRAPH_FINALLY(igraph_vector_bool_destroy, &c_type); + IGRAPH_LOCAL_FINALLY(igraph_vector_bool_destroy, &c_type); /* Call igraph */ IGRAPH_R_CHECK(igraph_is_bipartite(&c_graph, &c_res, &c_type)); @@ -8914,7 +9137,7 @@ SEXP R_igraph_is_bipartite(SEXP graph) { LOGICAL(res)[0]=c_res; PROTECT(type=Ry_igraph_vector_bool_to_SEXP(&c_type)); igraph_vector_bool_destroy(&c_type); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, res); SET_VECTOR_ELT(r_result, 1, type); SET_STRING_ELT(r_names, 0, Rf_mkChar("res")); @@ -8942,9 +9165,10 @@ SEXP R_igraph_bipartite_game_gnp(SEXP n1, SEXP n2, SEXP p, SEXP directed, SEXP m SEXP types; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK(igraph_vector_bool_init(&c_types, 0)); - IGRAPH_FINALLY(igraph_vector_bool_destroy, &c_types); + IGRAPH_LOCAL_FINALLY(igraph_vector_bool_destroy, &c_types); IGRAPH_R_CHECK_INT(n1); c_n1 = (igraph_integer_t) REAL(n1)[0]; IGRAPH_R_CHECK_INT(n2); @@ -8960,13 +9184,13 @@ SEXP R_igraph_bipartite_game_gnp(SEXP n1, SEXP n2, SEXP p, SEXP directed, SEXP m /* Convert output */ PROTECT(r_result=NEW_LIST(2)); PROTECT(r_names=NEW_CHARACTER(2)); - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(types=Ry_igraph_vector_bool_to_SEXP(&c_types)); igraph_vector_bool_destroy(&c_types); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, graph); SET_VECTOR_ELT(r_result, 1, types); SET_STRING_ELT(r_names, 0, Rf_mkChar("graph")); @@ -8994,9 +9218,10 @@ SEXP R_igraph_bipartite_game_gnm(SEXP n1, SEXP n2, SEXP m, SEXP directed, SEXP m SEXP types; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK(igraph_vector_bool_init(&c_types, 0)); - IGRAPH_FINALLY(igraph_vector_bool_destroy, &c_types); + IGRAPH_LOCAL_FINALLY(igraph_vector_bool_destroy, &c_types); IGRAPH_R_CHECK_INT(n1); c_n1 = (igraph_integer_t) REAL(n1)[0]; IGRAPH_R_CHECK_INT(n2); @@ -9012,13 +9237,13 @@ SEXP R_igraph_bipartite_game_gnm(SEXP n1, SEXP n2, SEXP m, SEXP directed, SEXP m /* Convert output */ PROTECT(r_result=NEW_LIST(2)); PROTECT(r_names=NEW_CHARACTER(2)); - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(types=Ry_igraph_vector_bool_to_SEXP(&c_types)); igraph_vector_bool_destroy(&c_types); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, graph); SET_VECTOR_ELT(r_result, 1, types); SET_STRING_ELT(r_names, 0, Rf_mkChar("graph")); @@ -9048,9 +9273,10 @@ SEXP R_igraph_bipartite_game(SEXP type, SEXP n1, SEXP n2, SEXP p, SEXP m, SEXP d SEXP types; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK(igraph_vector_bool_init(&c_types, 0)); - IGRAPH_FINALLY(igraph_vector_bool_destroy, &c_types); + IGRAPH_LOCAL_FINALLY(igraph_vector_bool_destroy, &c_types); c_type = (igraph_erdos_renyi_t) Rf_asInteger(type); IGRAPH_R_CHECK_INT(n1); c_n1 = (igraph_integer_t) REAL(n1)[0]; @@ -9069,13 +9295,13 @@ SEXP R_igraph_bipartite_game(SEXP type, SEXP n1, SEXP n2, SEXP p, SEXP m, SEXP d /* Convert output */ PROTECT(r_result=NEW_LIST(2)); PROTECT(r_names=NEW_CHARACTER(2)); - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(types=Ry_igraph_vector_bool_to_SEXP(&c_types)); igraph_vector_bool_destroy(&c_types); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, graph); SET_VECTOR_ELT(r_result, 1, types); SET_STRING_ELT(r_names, 0, Rf_mkChar("graph")); @@ -9100,10 +9326,11 @@ SEXP R_igraph_get_laplacian(SEXP graph, SEXP mode, SEXP normalization, SEXP weig SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); c_mode = (igraph_neimode_t) Rf_asInteger(mode); c_normalization = (igraph_laplacian_normalization_t) Rf_asInteger(normalization); if (!Rf_isNull(weights)) { @@ -9115,7 +9342,7 @@ SEXP R_igraph_get_laplacian(SEXP graph, SEXP mode, SEXP normalization, SEXP weig /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -9135,10 +9362,11 @@ SEXP R_igraph_get_laplacian_sparse(SEXP graph, SEXP mode, SEXP normalization, SE SEXP sparseres; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_sparsemat_init(&c_sparseres, 0, 0, 0)); - IGRAPH_FINALLY(igraph_sparsemat_destroy, &c_sparseres); + IGRAPH_LOCAL_FINALLY(igraph_sparsemat_destroy, &c_sparseres); c_mode = (igraph_neimode_t) Rf_asInteger(mode); c_normalization = (igraph_laplacian_normalization_t) Rf_asInteger(normalization); if (!Rf_isNull(weights)) { @@ -9150,7 +9378,7 @@ SEXP R_igraph_get_laplacian_sparse(SEXP graph, SEXP mode, SEXP normalization, SE /* Convert output */ PROTECT(sparseres=Ry_igraph_sparsemat_to_SEXP(&c_sparseres)); igraph_sparsemat_destroy(&c_sparseres); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = sparseres; UNPROTECT(1); @@ -9172,12 +9400,13 @@ SEXP R_igraph_connected_components(SEXP graph, SEXP mode) { SEXP no; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_membership, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_membership); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); IGRAPH_R_CHECK(igraph_vector_int_init(&c_csize, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_csize); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_csize); c_no=0; c_mode = (igraph_connectedness_t) Rf_asInteger(mode); /* Call igraph */ @@ -9188,10 +9417,10 @@ SEXP R_igraph_connected_components(SEXP graph, SEXP mode) { PROTECT(r_names=NEW_CHARACTER(3)); PROTECT(membership=Ry_igraph_vector_int_to_SEXP(&c_membership)); igraph_vector_int_destroy(&c_membership); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(csize=Ry_igraph_vector_int_to_SEXP(&c_csize)); igraph_vector_int_destroy(&c_csize); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(no=NEW_NUMERIC(1)); REAL(no)[0]=(double) c_no; SET_VECTOR_ELT(r_result, 0, membership); @@ -9218,6 +9447,7 @@ SEXP R_igraph_is_connected(SEXP graph, SEXP mode) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_mode = (igraph_connectedness_t) Rf_asInteger(mode); @@ -9246,10 +9476,11 @@ SEXP R_igraph_decompose(SEXP graph, SEXP mode, SEXP maxcompno, SEXP minelements) SEXP components; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_graph_list_init(&c_components, 0)); - IGRAPH_FINALLY(igraph_graph_list_destroy, &c_components); + IGRAPH_LOCAL_FINALLY(igraph_graph_list_destroy, &c_components); c_mode = (igraph_connectedness_t) Rf_asInteger(mode); IGRAPH_R_CHECK_INT(maxcompno); c_maxcompno = (igraph_integer_t) REAL(maxcompno)[0]; @@ -9261,7 +9492,7 @@ SEXP R_igraph_decompose(SEXP graph, SEXP mode, SEXP maxcompno, SEXP minelements) /* Convert output */ PROTECT(components=Ry_igraph_graphlist_to_SEXP(&c_components)); IGRAPH_FREE(c_components.stor_begin); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = components; UNPROTECT(1); @@ -9278,17 +9509,18 @@ SEXP R_igraph_articulation_points(SEXP graph) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_res); /* Call igraph */ IGRAPH_R_CHECK(igraph_articulation_points(&c_graph, &c_res)); /* Convert output */ PROTECT(res=Ry_igraph_vector_int_to_SEXPp1(&c_res)); igraph_vector_int_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -9313,17 +9545,18 @@ SEXP R_igraph_biconnected_components(SEXP graph) { SEXP articulation_points; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_no=0; IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_tree_edges, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_tree_edges); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_tree_edges); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_component_edges, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_component_edges); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_component_edges); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_components, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_components); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_components); IGRAPH_R_CHECK(igraph_vector_int_init(&c_articulation_points, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_articulation_points); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_articulation_points); /* Call igraph */ IGRAPH_R_CHECK(igraph_biconnected_components(&c_graph, &c_no, &c_tree_edges, &c_component_edges, &c_components, &c_articulation_points)); @@ -9334,16 +9567,16 @@ SEXP R_igraph_biconnected_components(SEXP graph) { REAL(no)[0]=(double) c_no; PROTECT(tree_edges=Ry_igraph_vector_int_list_to_SEXPp1(&c_tree_edges)); igraph_vector_int_list_destroy(&c_tree_edges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(component_edges=Ry_igraph_vector_int_list_to_SEXPp1(&c_component_edges)); igraph_vector_int_list_destroy(&c_component_edges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(components=Ry_igraph_vector_int_list_to_SEXPp1(&c_components)); igraph_vector_int_list_destroy(&c_components); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(articulation_points=Ry_igraph_vector_int_to_SEXPp1(&c_articulation_points)); igraph_vector_int_destroy(&c_articulation_points); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, no); SET_VECTOR_ELT(r_result, 1, tree_edges); SET_VECTOR_ELT(r_result, 2, component_edges); @@ -9371,17 +9604,18 @@ SEXP R_igraph_bridges(SEXP graph) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_res); /* Call igraph */ IGRAPH_R_CHECK(igraph_bridges(&c_graph, &c_res)); /* Convert output */ PROTECT(res=Ry_igraph_vector_int_to_SEXPp1(&c_res)); igraph_vector_int_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -9398,6 +9632,7 @@ SEXP R_igraph_is_biconnected(SEXP graph) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ @@ -9423,10 +9658,11 @@ SEXP R_igraph_count_reachable(SEXP graph, SEXP mode) { SEXP counts; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_counts, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_counts); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_counts); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ IGRAPH_R_CHECK(igraph_count_reachable(&c_graph, &c_counts, c_mode)); @@ -9434,7 +9670,7 @@ SEXP R_igraph_count_reachable(SEXP graph, SEXP mode) { /* Convert output */ PROTECT(counts=Ry_igraph_vector_int_to_SEXP(&c_counts)); igraph_vector_int_destroy(&c_counts); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = counts; UNPROTECT(1); @@ -9454,18 +9690,19 @@ SEXP R_igraph_bond_percolation(SEXP graph, SEXP edge_order) { SEXP vetex_count; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_giant_size, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_giant_size); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_giant_size); IGRAPH_R_CHECK(igraph_vector_int_init(&c_vetex_count, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vetex_count); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vetex_count); if (!Rf_isNull(edge_order)) { Rz_SEXP_to_vector_int_copy(edge_order, &c_edge_order); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edge_order); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_order); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_order, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edge_order); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_order); } /* Call igraph */ IGRAPH_R_CHECK(igraph_bond_percolation(&c_graph, &c_giant_size, &c_vetex_count, (Rf_isNull(edge_order) ? 0 : &c_edge_order))); @@ -9475,12 +9712,12 @@ SEXP R_igraph_bond_percolation(SEXP graph, SEXP edge_order) { PROTECT(r_names=NEW_CHARACTER(2)); PROTECT(giant_size=Ry_igraph_vector_int_to_SEXP(&c_giant_size)); igraph_vector_int_destroy(&c_giant_size); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(vetex_count=Ry_igraph_vector_int_to_SEXP(&c_vetex_count)); igraph_vector_int_destroy(&c_vetex_count); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_edge_order); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, giant_size); SET_VECTOR_ELT(r_result, 1, vetex_count); SET_STRING_ELT(r_names, 0, Rf_mkChar("giant_size")); @@ -9505,18 +9742,19 @@ SEXP R_igraph_site_percolation(SEXP graph, SEXP vertex_order) { SEXP edge_count; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_giant_size, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_giant_size); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_giant_size); IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_count, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edge_count); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_count); if (!Rf_isNull(vertex_order)) { Rz_SEXP_to_vector_int_copy(vertex_order, &c_vertex_order); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vertex_order); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_order); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_order, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vertex_order); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_order); } /* Call igraph */ IGRAPH_R_CHECK(igraph_site_percolation(&c_graph, &c_giant_size, &c_edge_count, (Rf_isNull(vertex_order) ? 0 : &c_vertex_order))); @@ -9526,12 +9764,12 @@ SEXP R_igraph_site_percolation(SEXP graph, SEXP vertex_order) { PROTECT(r_names=NEW_CHARACTER(2)); PROTECT(giant_size=Ry_igraph_vector_int_to_SEXP(&c_giant_size)); igraph_vector_int_destroy(&c_giant_size); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(edge_count=Ry_igraph_vector_int_to_SEXP(&c_edge_count)); igraph_vector_int_destroy(&c_edge_count); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vertex_order); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, giant_size); SET_VECTOR_ELT(r_result, 1, edge_count); SET_STRING_ELT(r_names, 0, Rf_mkChar("giant_size")); @@ -9555,13 +9793,14 @@ SEXP R_igraph_edgelist_percolation(SEXP edges) { SEXP vertex_count; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_vector_int_copy(edges, &c_edges); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edges); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edges); IGRAPH_R_CHECK(igraph_vector_int_init(&c_giant_size, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_giant_size); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_giant_size); IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_count, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vertex_count); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_count); /* Call igraph */ IGRAPH_R_CHECK(igraph_edgelist_percolation(&c_edges, &c_giant_size, &c_vertex_count)); @@ -9569,13 +9808,13 @@ SEXP R_igraph_edgelist_percolation(SEXP edges) { PROTECT(r_result=NEW_LIST(2)); PROTECT(r_names=NEW_CHARACTER(2)); igraph_vector_int_destroy(&c_edges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(giant_size=Ry_igraph_vector_int_to_SEXP(&c_giant_size)); igraph_vector_int_destroy(&c_giant_size); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(vertex_count=Ry_igraph_vector_int_to_SEXP(&c_vertex_count)); igraph_vector_int_destroy(&c_vertex_count); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, giant_size); SET_VECTOR_ELT(r_result, 1, vertex_count); SET_STRING_ELT(r_names, 0, Rf_mkChar("giant_size")); @@ -9599,6 +9838,7 @@ SEXP R_igraph_is_clique(SEXP graph, SEXP candidate, SEXP directed) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); igraph_vector_int_t c_candidate_data; @@ -9631,10 +9871,11 @@ SEXP R_igraph_cliques(SEXP graph, SEXP min_size, SEXP max_size) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_res); IGRAPH_R_CHECK_INT(min_size); c_min_size = (igraph_integer_t) REAL(min_size)[0]; IGRAPH_R_CHECK_INT(max_size); @@ -9645,7 +9886,7 @@ SEXP R_igraph_cliques(SEXP graph, SEXP min_size, SEXP max_size) { /* Convert output */ PROTECT(res=Ry_igraph_vector_int_list_to_SEXPp1(&c_res)); igraph_vector_int_list_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -9664,10 +9905,11 @@ SEXP R_igraph_clique_size_hist(SEXP graph, SEXP min_size, SEXP max_size) { SEXP hist; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_hist, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_hist); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_hist); IGRAPH_R_CHECK_INT(min_size); c_min_size = (igraph_integer_t) REAL(min_size)[0]; IGRAPH_R_CHECK_INT(max_size); @@ -9678,7 +9920,7 @@ SEXP R_igraph_clique_size_hist(SEXP graph, SEXP min_size, SEXP max_size) { /* Convert output */ PROTECT(hist=Ry_igraph_vector_to_SEXP(&c_hist)); igraph_vector_destroy(&c_hist); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = hist; UNPROTECT(1); @@ -9695,17 +9937,18 @@ SEXP R_igraph_largest_cliques(SEXP graph) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_res); /* Call igraph */ IGRAPH_R_CHECK(igraph_largest_cliques(&c_graph, &c_res)); /* Convert output */ PROTECT(res=Ry_igraph_vector_int_list_to_SEXPp1(&c_res)); igraph_vector_int_list_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -9724,10 +9967,11 @@ SEXP R_igraph_maximal_cliques(SEXP graph, SEXP min_size, SEXP max_size) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_res); IGRAPH_R_CHECK_INT(min_size); c_min_size = (igraph_integer_t) REAL(min_size)[0]; IGRAPH_R_CHECK_INT(max_size); @@ -9738,7 +9982,7 @@ SEXP R_igraph_maximal_cliques(SEXP graph, SEXP min_size, SEXP max_size) { /* Convert output */ PROTECT(res=Ry_igraph_vector_int_list_to_SEXPp1(&c_res)); igraph_vector_int_list_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -9761,16 +10005,17 @@ SEXP R_igraph_maximal_cliques_subset(SEXP graph, SEXP subset, SEXP outfile, SEXP SEXP no; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); Rz_SEXP_to_vector_int_copy(subset, &c_subset); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_subset); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_subset); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_res); c_no=0; if (!Rf_isNull(outfile)) { c_outfile = Ry_igraph_fopen_write(outfile); - IGRAPH_FINALLY(fclose, c_outfile); + IGRAPH_LOCAL_FINALLY(fclose, c_outfile); } IGRAPH_R_CHECK_INT(min_size); c_min_size = (igraph_integer_t) REAL(min_size)[0]; @@ -9783,10 +10028,10 @@ SEXP R_igraph_maximal_cliques_subset(SEXP graph, SEXP subset, SEXP outfile, SEXP PROTECT(r_result=NEW_LIST(2)); PROTECT(r_names=NEW_CHARACTER(2)); igraph_vector_int_destroy(&c_subset); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(res=Ry_igraph_vector_int_list_to_SEXPp1(&c_res)); igraph_vector_int_list_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(no=NEW_NUMERIC(1)); REAL(no)[0]=(double) c_no; SET_VECTOR_ELT(r_result, 0, res); @@ -9812,6 +10057,7 @@ SEXP R_igraph_maximal_cliques_count(SEXP graph, SEXP min_size, SEXP max_size) { SEXP no; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_no=0; @@ -9841,10 +10087,11 @@ SEXP R_igraph_maximal_cliques_file(SEXP graph, SEXP res, SEXP min_size, SEXP max igraph_integer_t c_min_size; igraph_integer_t c_max_size; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_res = Ry_igraph_fopen_write(res); - IGRAPH_FINALLY(fclose, c_res); + IGRAPH_LOCAL_FINALLY(fclose, c_res); IGRAPH_R_CHECK_INT(min_size); c_min_size = (igraph_integer_t) REAL(min_size)[0]; IGRAPH_R_CHECK_INT(max_size); @@ -9871,10 +10118,11 @@ SEXP R_igraph_maximal_cliques_hist(SEXP graph, SEXP min_size, SEXP max_size) { SEXP hist; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_hist, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_hist); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_hist); IGRAPH_R_CHECK_INT(min_size); c_min_size = (igraph_integer_t) REAL(min_size)[0]; IGRAPH_R_CHECK_INT(max_size); @@ -9885,7 +10133,7 @@ SEXP R_igraph_maximal_cliques_hist(SEXP graph, SEXP min_size, SEXP max_size) { /* Convert output */ PROTECT(hist=Ry_igraph_vector_to_SEXP(&c_hist)); igraph_vector_destroy(&c_hist); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = hist; UNPROTECT(1); @@ -9902,6 +10150,7 @@ SEXP R_igraph_clique_number(SEXP graph) { SEXP no; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_no=0; @@ -9931,13 +10180,14 @@ SEXP R_igraph_weighted_cliques(SEXP graph, SEXP vertex_weights, SEXP min_weight, SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(vertex_weights)) { Rz_SEXP_to_vector(vertex_weights, &c_vertex_weights); } IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_res); IGRAPH_R_CHECK_REAL(min_weight); c_min_weight = REAL(min_weight)[0]; IGRAPH_R_CHECK_REAL(max_weight); @@ -9950,7 +10200,7 @@ SEXP R_igraph_weighted_cliques(SEXP graph, SEXP vertex_weights, SEXP min_weight, /* Convert output */ PROTECT(res=Ry_igraph_vector_int_list_to_SEXPp1(&c_res)); igraph_vector_int_list_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -9968,20 +10218,21 @@ SEXP R_igraph_largest_weighted_cliques(SEXP graph, SEXP vertex_weights) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(vertex_weights)) { Rz_SEXP_to_vector(vertex_weights, &c_vertex_weights); } IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_res); /* Call igraph */ IGRAPH_R_CHECK(igraph_largest_weighted_cliques(&c_graph, (Rf_isNull(vertex_weights) ? 0 : &c_vertex_weights), &c_res)); /* Convert output */ PROTECT(res=Ry_igraph_vector_int_list_to_SEXPp1(&c_res)); igraph_vector_int_list_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -9999,6 +10250,7 @@ SEXP R_igraph_weighted_clique_number(SEXP graph, SEXP vertex_weights) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(vertex_weights)) { @@ -10027,6 +10279,7 @@ SEXP R_igraph_is_independent_vertex_set(SEXP graph, SEXP candidate) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); igraph_vector_int_t c_candidate_data; @@ -10057,10 +10310,11 @@ SEXP R_igraph_independent_vertex_sets(SEXP graph, SEXP min_size, SEXP max_size) SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_res); IGRAPH_R_CHECK_INT(min_size); c_min_size = (igraph_integer_t) REAL(min_size)[0]; IGRAPH_R_CHECK_INT(max_size); @@ -10071,7 +10325,7 @@ SEXP R_igraph_independent_vertex_sets(SEXP graph, SEXP min_size, SEXP max_size) /* Convert output */ PROTECT(res=Ry_igraph_vector_int_list_to_SEXPp1(&c_res)); igraph_vector_int_list_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -10088,17 +10342,18 @@ SEXP R_igraph_largest_independent_vertex_sets(SEXP graph) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_res); /* Call igraph */ IGRAPH_R_CHECK(igraph_largest_independent_vertex_sets(&c_graph, &c_res)); /* Convert output */ PROTECT(res=Ry_igraph_vector_int_list_to_SEXPp1(&c_res)); igraph_vector_int_list_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -10115,17 +10370,18 @@ SEXP R_igraph_maximal_independent_vertex_sets(SEXP graph) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_res); /* Call igraph */ IGRAPH_R_CHECK(igraph_maximal_independent_vertex_sets(&c_graph, &c_res)); /* Convert output */ PROTECT(res=Ry_igraph_vector_int_list_to_SEXPp1(&c_res)); igraph_vector_int_list_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -10142,6 +10398,7 @@ SEXP R_igraph_independence_number(SEXP graph) { SEXP no; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_no=0; @@ -10167,17 +10424,18 @@ SEXP R_igraph_layout_random(SEXP graph) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); /* Call igraph */ IGRAPH_R_CHECK(igraph_layout_random(&c_graph, &c_res)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -10195,10 +10453,11 @@ SEXP R_igraph_layout_circle(SEXP graph, SEXP order) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); igraph_vector_int_t c_order_data; Rz_SEXP_to_igraph_vs(order, &c_graph, &c_order, &c_order_data); /* Call igraph */ @@ -10207,7 +10466,7 @@ SEXP R_igraph_layout_circle(SEXP graph, SEXP order) { /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_order_data); igraph_vs_destroy(&c_order); r_result = res; @@ -10228,17 +10487,18 @@ SEXP R_igraph_layout_star(SEXP graph, SEXP center, SEXP order) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); c_center = (igraph_integer_t) REAL(center)[0]; if (!Rf_isNull(order)) { Rz_SEXP_to_vector_int_copy(order, &c_order); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_order); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_order); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_order, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_order); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_order); } /* Call igraph */ IGRAPH_R_CHECK(igraph_layout_star(&c_graph, &c_res, c_center, (Rf_isNull(order) ? 0 : &c_order))); @@ -10246,9 +10506,9 @@ SEXP R_igraph_layout_star(SEXP graph, SEXP center, SEXP order) { /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_order); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -10266,10 +10526,11 @@ SEXP R_igraph_layout_grid(SEXP graph, SEXP width) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); IGRAPH_R_CHECK_INT(width); c_width = (igraph_integer_t) REAL(width)[0]; /* Call igraph */ @@ -10278,7 +10539,7 @@ SEXP R_igraph_layout_grid(SEXP graph, SEXP width) { /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -10297,10 +10558,11 @@ SEXP R_igraph_layout_grid_3d(SEXP graph, SEXP width, SEXP height) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); IGRAPH_R_CHECK_INT(width); c_width = (igraph_integer_t) REAL(width)[0]; IGRAPH_R_CHECK_INT(height); @@ -10311,7 +10573,7 @@ SEXP R_igraph_layout_grid_3d(SEXP graph, SEXP width, SEXP height) { /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -10340,11 +10602,12 @@ SEXP R_igraph_layout_fruchterman_reingold(SEXP graph, SEXP coords, SEXP use_seed SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(coords)) { IGRAPH_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(coords, &c_coords)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_coords); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_coords); } IGRAPH_R_CHECK_BOOL(use_seed); c_use_seed = LOGICAL(use_seed)[0]; @@ -10374,7 +10637,7 @@ SEXP R_igraph_layout_fruchterman_reingold(SEXP graph, SEXP coords, SEXP use_seed /* Convert output */ PROTECT(coords=Ry_igraph_matrix_to_SEXP(&c_coords)); igraph_matrix_destroy(&c_coords); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = coords; UNPROTECT(1); @@ -10399,10 +10662,11 @@ SEXP R_igraph_layout_kamada_kawai(SEXP graph, SEXP coords, SEXP use_seed, SEXP m igraph_vector_t c_maxy; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(coords, &c_coords)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_coords); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_coords); IGRAPH_R_CHECK_BOOL(use_seed); c_use_seed = LOGICAL(use_seed)[0]; IGRAPH_R_CHECK_INT(maxiter); @@ -10432,7 +10696,7 @@ SEXP R_igraph_layout_kamada_kawai(SEXP graph, SEXP coords, SEXP use_seed, SEXP m /* Convert output */ PROTECT(coords=Ry_igraph_matrix_to_SEXP(&c_coords)); igraph_matrix_destroy(&c_coords); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = coords; UNPROTECT(1); @@ -10456,10 +10720,11 @@ SEXP R_igraph_layout_lgl(SEXP graph, SEXP maxiter, SEXP maxdelta, SEXP area, SEX SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); IGRAPH_R_CHECK_INT(maxiter); c_maxiter = (igraph_integer_t) REAL(maxiter)[0]; IGRAPH_R_CHECK_REAL(maxdelta); @@ -10480,7 +10745,7 @@ SEXP R_igraph_layout_lgl(SEXP graph, SEXP maxiter, SEXP maxdelta, SEXP area, SEX /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -10500,24 +10765,25 @@ SEXP R_igraph_layout_reingold_tilford(SEXP graph, SEXP mode, SEXP roots, SEXP ro SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); c_mode = (igraph_neimode_t) Rf_asInteger(mode); if (!Rf_isNull(roots)) { Rz_SEXP_to_vector_int_copy(roots, &c_roots); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_roots); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_roots); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_roots, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_roots); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_roots); } if (!Rf_isNull(rootlevel)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(rootlevel, &c_rootlevel)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_rootlevel); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_rootlevel); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_rootlevel, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_rootlevel); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_rootlevel); } /* Call igraph */ IGRAPH_R_CHECK(igraph_layout_reingold_tilford(&c_graph, &c_res, c_mode, (Rf_isNull(roots) ? 0 : &c_roots), (Rf_isNull(rootlevel) ? 0 : &c_rootlevel))); @@ -10525,11 +10791,11 @@ SEXP R_igraph_layout_reingold_tilford(SEXP graph, SEXP mode, SEXP roots, SEXP ro /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_roots); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_rootlevel); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -10549,24 +10815,25 @@ SEXP R_igraph_layout_reingold_tilford_circular(SEXP graph, SEXP mode, SEXP roots SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); c_mode = (igraph_neimode_t) Rf_asInteger(mode); if (!Rf_isNull(roots)) { Rz_SEXP_to_vector_int_copy(roots, &c_roots); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_roots); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_roots); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_roots, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_roots); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_roots); } if (!Rf_isNull(rootlevel)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(rootlevel, &c_rootlevel)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_rootlevel); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_rootlevel); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_rootlevel, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_rootlevel); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_rootlevel); } /* Call igraph */ IGRAPH_R_CHECK(igraph_layout_reingold_tilford_circular(&c_graph, &c_res, c_mode, (Rf_isNull(roots) ? 0 : &c_roots), (Rf_isNull(rootlevel) ? 0 : &c_rootlevel))); @@ -10574,11 +10841,11 @@ SEXP R_igraph_layout_reingold_tilford_circular(SEXP graph, SEXP mode, SEXP roots /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_roots); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_rootlevel); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -10597,11 +10864,12 @@ SEXP R_igraph_roots_for_tree_layout(SEXP graph, SEXP mode, SEXP heuristic) { SEXP roots; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_mode = (igraph_neimode_t) Rf_asInteger(mode); IGRAPH_R_CHECK(igraph_vector_int_init(&c_roots, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_roots); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_roots); c_heuristic = (igraph_root_choice_t) Rf_asInteger(heuristic); /* Call igraph */ IGRAPH_R_CHECK(igraph_roots_for_tree_layout(&c_graph, c_mode, &c_roots, c_heuristic)); @@ -10609,7 +10877,7 @@ SEXP R_igraph_roots_for_tree_layout(SEXP graph, SEXP mode, SEXP heuristic) { /* Convert output */ PROTECT(roots=Ry_igraph_vector_int_to_SEXPp1(&c_roots)); igraph_vector_int_destroy(&c_roots); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = roots; UNPROTECT(1); @@ -10626,17 +10894,18 @@ SEXP R_igraph_layout_random_3d(SEXP graph) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); /* Call igraph */ IGRAPH_R_CHECK(igraph_layout_random_3d(&c_graph, &c_res)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -10653,17 +10922,18 @@ SEXP R_igraph_layout_sphere(SEXP graph) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); /* Call igraph */ IGRAPH_R_CHECK(igraph_layout_sphere(&c_graph, &c_res)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -10693,11 +10963,12 @@ SEXP R_igraph_layout_fruchterman_reingold_3d(SEXP graph, SEXP coords, SEXP use_s SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(coords)) { IGRAPH_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(coords, &c_coords)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_coords); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_coords); } IGRAPH_R_CHECK_BOOL(use_seed); c_use_seed = LOGICAL(use_seed)[0]; @@ -10732,7 +11003,7 @@ SEXP R_igraph_layout_fruchterman_reingold_3d(SEXP graph, SEXP coords, SEXP use_s /* Convert output */ PROTECT(coords=Ry_igraph_matrix_to_SEXP(&c_coords)); igraph_matrix_destroy(&c_coords); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = coords; UNPROTECT(1); @@ -10759,10 +11030,11 @@ SEXP R_igraph_layout_kamada_kawai_3d(SEXP graph, SEXP coords, SEXP use_seed, SEX igraph_vector_t c_maxz; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(coords, &c_coords)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_coords); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_coords); IGRAPH_R_CHECK_BOOL(use_seed); c_use_seed = LOGICAL(use_seed)[0]; IGRAPH_R_CHECK_INT(maxiter); @@ -10798,7 +11070,7 @@ SEXP R_igraph_layout_kamada_kawai_3d(SEXP graph, SEXP coords, SEXP use_seed, SEX /* Convert output */ PROTECT(coords=Ry_igraph_matrix_to_SEXP(&c_coords)); igraph_matrix_destroy(&c_coords); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = coords; UNPROTECT(1); @@ -10821,10 +11093,11 @@ SEXP R_igraph_layout_graphopt(SEXP graph, SEXP res, SEXP niter, SEXP node_charge igraph_bool_t c_use_seed; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(res, &c_res)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); IGRAPH_R_CHECK_INT(niter); c_niter = (igraph_integer_t) REAL(niter)[0]; IGRAPH_R_CHECK_REAL(node_charge); @@ -10845,7 +11118,7 @@ SEXP R_igraph_layout_graphopt(SEXP graph, SEXP res, SEXP niter, SEXP node_charge /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -10864,10 +11137,11 @@ SEXP R_igraph_layout_drl(SEXP graph, SEXP res, SEXP use_seed, SEXP options, SEXP igraph_vector_t c_weights; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(res, &c_res)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); IGRAPH_R_CHECK_BOOL(use_seed); c_use_seed = LOGICAL(use_seed)[0]; Rz_SEXP_to_igraph_layout_drl_options(options, &c_options); @@ -10880,7 +11154,7 @@ SEXP R_igraph_layout_drl(SEXP graph, SEXP res, SEXP use_seed, SEXP options, SEXP /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -10899,10 +11173,11 @@ SEXP R_igraph_layout_drl_3d(SEXP graph, SEXP res, SEXP use_seed, SEXP options, S igraph_vector_t c_weights; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(res, &c_res)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); IGRAPH_R_CHECK_BOOL(use_seed); c_use_seed = LOGICAL(use_seed)[0]; Rz_SEXP_to_igraph_layout_drl_options(options, &c_options); @@ -10915,7 +11190,7 @@ SEXP R_igraph_layout_drl_3d(SEXP graph, SEXP res, SEXP use_seed, SEXP options, S /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -10933,22 +11208,23 @@ SEXP R_igraph_layout_merge_dla(SEXP graphs, SEXP coords) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ igraph_t *c_graphs_storage; IGRAPH_R_CHECK(Rz_SEXP_to_graph_ptr_list(graphs, &c_graphs, &c_graphs_storage)); - IGRAPH_FINALLY(igraph_vector_ptr_destroy, &c_graphs); + IGRAPH_LOCAL_FINALLY(igraph_vector_ptr_destroy, &c_graphs); Ry_igraph_SEXP_to_matrixlist(coords, &c_coords); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); /* Call igraph */ IGRAPH_R_CHECK(igraph_layout_merge_dla(&c_graphs, &c_coords, &c_res)); /* Convert output */ igraph_vector_ptr_destroy(&c_graphs); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -10974,18 +11250,19 @@ SEXP R_igraph_layout_sugiyama(SEXP graph, SEXP layers, SEXP hgap, SEXP vgap, SEX SEXP extd_to_orig_eids; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); IGRAPH_R_CHECK(igraph_vector_int_init(&c_extd_to_orig_eids, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_extd_to_orig_eids); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_extd_to_orig_eids); if (!Rf_isNull(layers)) { Rz_SEXP_to_vector_int_copy(layers, &c_layers); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_layers); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_layers); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_layers, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_layers); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_layers); } IGRAPH_R_CHECK_REAL(hgap); c_hgap = REAL(hgap)[0]; @@ -11004,16 +11281,16 @@ SEXP R_igraph_layout_sugiyama(SEXP graph, SEXP layers, SEXP hgap, SEXP vgap, SEX PROTECT(r_names=NEW_CHARACTER(3)); PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); - IGRAPH_FINALLY(igraph_destroy, &c_extd_graph); + IGRAPH_LOCAL_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_extd_graph); PROTECT(extd_graph=Ry_igraph_to_SEXP(&c_extd_graph)); IGRAPH_I_DESTROY(&c_extd_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(extd_to_orig_eids=Ry_igraph_vector_int_to_SEXPp1(&c_extd_to_orig_eids)); igraph_vector_int_destroy(&c_extd_to_orig_eids); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_layers); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, res); SET_VECTOR_ELT(r_result, 1, extd_graph); SET_VECTOR_ELT(r_result, 2, extd_to_orig_eids); @@ -11039,10 +11316,11 @@ SEXP R_igraph_layout_mds(SEXP graph, SEXP dist, SEXP dim) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); if (!Rf_isNull(dist)) { Rz_SEXP_to_matrix(dist, &c_dist); } @@ -11054,7 +11332,7 @@ SEXP R_igraph_layout_mds(SEXP graph, SEXP dist, SEXP dim) { /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -11075,11 +11353,12 @@ SEXP R_igraph_layout_bipartite(SEXP graph, SEXP types, SEXP hgap, SEXP vgap, SEX SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); Rz_SEXP_to_vector_bool(types, &c_types); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); IGRAPH_R_CHECK_REAL(hgap); c_hgap = REAL(hgap)[0]; IGRAPH_R_CHECK_REAL(vgap); @@ -11092,7 +11371,7 @@ SEXP R_igraph_layout_bipartite(SEXP graph, SEXP types, SEXP hgap, SEXP vgap, SEX /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -11113,10 +11392,11 @@ SEXP R_igraph_layout_gem(SEXP graph, SEXP res, SEXP use_seed, SEXP maxiter, SEXP igraph_real_t c_temp_init; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(res, &c_res)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); IGRAPH_R_CHECK_BOOL(use_seed); c_use_seed = LOGICAL(use_seed)[0]; IGRAPH_R_CHECK_INT(maxiter); @@ -11133,7 +11413,7 @@ SEXP R_igraph_layout_gem(SEXP graph, SEXP res, SEXP use_seed, SEXP maxiter, SEXP /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -11158,10 +11438,11 @@ SEXP R_igraph_layout_davidson_harel(SEXP graph, SEXP res, SEXP use_seed, SEXP ma igraph_real_t c_weight_node_edge_dist; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(res, &c_res)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); IGRAPH_R_CHECK_BOOL(use_seed); c_use_seed = LOGICAL(use_seed)[0]; IGRAPH_R_CHECK_INT(maxiter); @@ -11186,7 +11467,7 @@ SEXP R_igraph_layout_davidson_harel(SEXP graph, SEXP res, SEXP use_seed, SEXP ma /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -11207,10 +11488,11 @@ SEXP R_igraph_layout_umap(SEXP graph, SEXP res, SEXP use_seed, SEXP distances, S igraph_bool_t c_distances_are_weights; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(res, &c_res)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); IGRAPH_R_CHECK_BOOL(use_seed); c_use_seed = LOGICAL(use_seed)[0]; if (!Rf_isNull(distances)) { @@ -11228,7 +11510,7 @@ SEXP R_igraph_layout_umap(SEXP graph, SEXP res, SEXP use_seed, SEXP distances, S /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -11249,10 +11531,11 @@ SEXP R_igraph_layout_umap_3d(SEXP graph, SEXP res, SEXP use_seed, SEXP distances igraph_bool_t c_distances_are_weights; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(res, &c_res)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); IGRAPH_R_CHECK_BOOL(use_seed); c_use_seed = LOGICAL(use_seed)[0]; if (!Rf_isNull(distances)) { @@ -11270,7 +11553,7 @@ SEXP R_igraph_layout_umap_3d(SEXP graph, SEXP res, SEXP use_seed, SEXP distances /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -11287,18 +11570,19 @@ SEXP R_igraph_layout_umap_compute_weights(SEXP graph, SEXP distances, SEXP weigh igraph_vector_t c_weights; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); Rz_SEXP_to_vector(distances, &c_distances); IGRAPH_R_CHECK(Rz_SEXP_to_vector_copy(weights, &c_weights)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_weights); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_weights); /* Call igraph */ IGRAPH_R_CHECK(igraph_layout_umap_compute_weights(&c_graph, &c_distances, &c_weights)); /* Convert output */ PROTECT(weights=Ry_igraph_vector_to_SEXP(&c_weights)); igraph_vector_destroy(&c_weights); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = weights; UNPROTECT(1); @@ -11314,17 +11598,18 @@ SEXP R_igraph_layout_align(SEXP graph, SEXP layout) { igraph_matrix_t c_layout; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(layout, &c_layout)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_layout); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_layout); /* Call igraph */ IGRAPH_R_CHECK(igraph_layout_align(&c_graph, &c_layout)); /* Convert output */ PROTECT(layout=Ry_igraph_matrix_to_SEXP(&c_layout)); igraph_matrix_destroy(&c_layout); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = layout; UNPROTECT(1); @@ -11342,10 +11627,11 @@ SEXP R_igraph_cocitation(SEXP graph, SEXP vids) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); /* Call igraph */ @@ -11354,7 +11640,7 @@ SEXP R_igraph_cocitation(SEXP graph, SEXP vids) { /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vids_data); igraph_vs_destroy(&c_vids); r_result = res; @@ -11374,10 +11660,11 @@ SEXP R_igraph_bibcoupling(SEXP graph, SEXP vids) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); /* Call igraph */ @@ -11386,7 +11673,7 @@ SEXP R_igraph_bibcoupling(SEXP graph, SEXP vids) { /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vids_data); igraph_vs_destroy(&c_vids); r_result = res; @@ -11408,10 +11695,11 @@ SEXP R_igraph_similarity_dice(SEXP graph, SEXP vids, SEXP mode, SEXP loops) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); c_mode = (igraph_neimode_t) Rf_asInteger(mode); @@ -11423,7 +11711,7 @@ SEXP R_igraph_similarity_dice(SEXP graph, SEXP vids, SEXP mode, SEXP loops) { /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vids_data); igraph_vs_destroy(&c_vids); r_result = res; @@ -11445,10 +11733,11 @@ SEXP R_igraph_similarity_dice_es(SEXP graph, SEXP es, SEXP mode, SEXP loops) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_es_data; IGRAPH_R_CHECK(Rz_SEXP_to_igraph_es(es, &c_graph, &c_es, &c_es_data)); c_mode = (igraph_neimode_t) Rf_asInteger(mode); @@ -11460,7 +11749,7 @@ SEXP R_igraph_similarity_dice_es(SEXP graph, SEXP es, SEXP mode, SEXP loops) { /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_es_data); igraph_es_destroy(&c_es); r_result = res; @@ -11482,12 +11771,13 @@ SEXP R_igraph_similarity_dice_pairs(SEXP graph, SEXP pairs, SEXP mode, SEXP loop SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); Rz_SEXP_to_vector_int_copy(pairs, &c_pairs); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_pairs); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_pairs); c_mode = (igraph_neimode_t) Rf_asInteger(mode); IGRAPH_R_CHECK_BOOL(loops); c_loops = LOGICAL(loops)[0]; @@ -11497,9 +11787,9 @@ SEXP R_igraph_similarity_dice_pairs(SEXP graph, SEXP pairs, SEXP mode, SEXP loop /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_pairs); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -11518,10 +11808,11 @@ SEXP R_igraph_similarity_inverse_log_weighted(SEXP graph, SEXP vids, SEXP mode) SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); c_mode = (igraph_neimode_t) Rf_asInteger(mode); @@ -11531,7 +11822,7 @@ SEXP R_igraph_similarity_inverse_log_weighted(SEXP graph, SEXP vids, SEXP mode) /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vids_data); igraph_vs_destroy(&c_vids); r_result = res; @@ -11553,10 +11844,11 @@ SEXP R_igraph_similarity_jaccard(SEXP graph, SEXP vids, SEXP mode, SEXP loops) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); c_mode = (igraph_neimode_t) Rf_asInteger(mode); @@ -11568,7 +11860,7 @@ SEXP R_igraph_similarity_jaccard(SEXP graph, SEXP vids, SEXP mode, SEXP loops) { /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vids_data); igraph_vs_destroy(&c_vids); r_result = res; @@ -11590,10 +11882,11 @@ SEXP R_igraph_similarity_jaccard_es(SEXP graph, SEXP es, SEXP mode, SEXP loops) SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_es_data; IGRAPH_R_CHECK(Rz_SEXP_to_igraph_es(es, &c_graph, &c_es, &c_es_data)); c_mode = (igraph_neimode_t) Rf_asInteger(mode); @@ -11605,7 +11898,7 @@ SEXP R_igraph_similarity_jaccard_es(SEXP graph, SEXP es, SEXP mode, SEXP loops) /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_es_data); igraph_es_destroy(&c_es); r_result = res; @@ -11627,12 +11920,13 @@ SEXP R_igraph_similarity_jaccard_pairs(SEXP graph, SEXP pairs, SEXP mode, SEXP l SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); Rz_SEXP_to_vector_int_copy(pairs, &c_pairs); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_pairs); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_pairs); c_mode = (igraph_neimode_t) Rf_asInteger(mode); IGRAPH_R_CHECK_BOOL(loops); c_loops = LOGICAL(loops)[0]; @@ -11642,9 +11936,9 @@ SEXP R_igraph_similarity_jaccard_pairs(SEXP graph, SEXP pairs, SEXP mode, SEXP l /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_pairs); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -11663,20 +11957,21 @@ SEXP R_igraph_compare_communities(SEXP comm1, SEXP comm2, SEXP method) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(comm1, &c_comm1)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_comm1); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_comm1); IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(comm2, &c_comm2)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_comm2); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_comm2); c_method = (igraph_community_comparison_t) Rf_asInteger(method); /* Call igraph */ IGRAPH_R_CHECK(igraph_compare_communities(&c_comm1, &c_comm2, &c_res, c_method)); /* Convert output */ igraph_vector_int_destroy(&c_comm1); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_comm2); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(res=NEW_NUMERIC(1)); REAL(res)[0]=c_res; r_result = res; @@ -11711,15 +12006,16 @@ SEXP R_igraph_community_spinglass(SEXP graph, SEXP weights, SEXP spins, SEXP par SEXP csize; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } IGRAPH_R_CHECK(igraph_vector_int_init(&c_membership, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_membership); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); IGRAPH_R_CHECK(igraph_vector_int_init(&c_csize, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_csize); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_csize); IGRAPH_R_CHECK_INT(spins); c_spins = (igraph_integer_t) REAL(spins)[0]; IGRAPH_R_CHECK_BOOL(parupdate); @@ -11748,10 +12044,10 @@ SEXP R_igraph_community_spinglass(SEXP graph, SEXP weights, SEXP spins, SEXP par REAL(temperature)[0]=c_temperature; PROTECT(membership=Ry_igraph_vector_int_to_SEXP(&c_membership)); igraph_vector_int_destroy(&c_membership); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(csize=Ry_igraph_vector_int_to_SEXP(&c_csize)); igraph_vector_int_destroy(&c_csize); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, modularity); SET_VECTOR_ELT(r_result, 1, temperature); SET_VECTOR_ELT(r_result, 2, membership); @@ -11790,6 +12086,7 @@ SEXP R_igraph_community_spinglass_single(SEXP graph, SEXP weights, SEXP vertex, SEXP outer_links; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(weights)) { @@ -11798,7 +12095,7 @@ SEXP R_igraph_community_spinglass_single(SEXP graph, SEXP weights, SEXP vertex, IGRAPH_R_CHECK_INT(vertex); c_vertex = (igraph_integer_t) REAL(vertex)[0]; IGRAPH_R_CHECK(igraph_vector_int_init(&c_community, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_community); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_community); c_inner_links=0; c_outer_links=0; IGRAPH_R_CHECK_INT(spins); @@ -11814,7 +12111,7 @@ SEXP R_igraph_community_spinglass_single(SEXP graph, SEXP weights, SEXP vertex, PROTECT(r_names=NEW_CHARACTER(5)); PROTECT(community=Ry_igraph_vector_int_to_SEXP(&c_community)); igraph_vector_int_destroy(&c_community); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(cohesion=NEW_NUMERIC(1)); REAL(cohesion)[0]=c_cohesion; PROTECT(adhesion=NEW_NUMERIC(1)); @@ -11856,6 +12153,7 @@ SEXP R_igraph_community_walktrap(SEXP graph, SEXP weights, SEXP steps) { SEXP membership; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(weights)) { @@ -11864,11 +12162,11 @@ SEXP R_igraph_community_walktrap(SEXP graph, SEXP weights, SEXP steps) { IGRAPH_R_CHECK_INT(steps); c_steps = (igraph_integer_t) REAL(steps)[0]; IGRAPH_R_CHECK(igraph_matrix_int_init(&c_merges, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_int_destroy, &c_merges); + IGRAPH_LOCAL_FINALLY(igraph_matrix_int_destroy, &c_merges); IGRAPH_R_CHECK(igraph_vector_init(&c_modularity, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_modularity); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_modularity); IGRAPH_R_CHECK(igraph_vector_int_init(&c_membership, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_membership); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); /* Call igraph */ IGRAPH_R_CHECK(igraph_community_walktrap(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), c_steps, &c_merges, &c_modularity, &c_membership)); @@ -11877,13 +12175,13 @@ SEXP R_igraph_community_walktrap(SEXP graph, SEXP weights, SEXP steps) { PROTECT(r_names=NEW_CHARACTER(3)); PROTECT(merges=Ry_igraph_matrix_int_to_SEXP(&c_merges)); igraph_matrix_int_destroy(&c_merges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(modularity=Ry_igraph_vector_to_SEXP(&c_modularity)); igraph_vector_destroy(&c_modularity); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(membership=Ry_igraph_vector_int_to_SEXP(&c_membership)); igraph_vector_int_destroy(&c_membership); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, merges); SET_VECTOR_ELT(r_result, 1, modularity); SET_VECTOR_ELT(r_result, 2, membership); @@ -11919,20 +12217,21 @@ SEXP R_igraph_community_edge_betweenness(SEXP graph, SEXP directed, SEXP weights SEXP membership; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_removed_edges, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_removed_edges); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_removed_edges); IGRAPH_R_CHECK(igraph_vector_init(&c_edge_betweenness, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_edge_betweenness); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_edge_betweenness); IGRAPH_R_CHECK(igraph_matrix_int_init(&c_merges, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_int_destroy, &c_merges); + IGRAPH_LOCAL_FINALLY(igraph_matrix_int_destroy, &c_merges); IGRAPH_R_CHECK(igraph_vector_int_init(&c_bridges, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_bridges); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_bridges); IGRAPH_R_CHECK(igraph_vector_init(&c_modularity, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_modularity); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_modularity); IGRAPH_R_CHECK(igraph_vector_int_init(&c_membership, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_membership); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; if (!Rf_isNull(weights)) { @@ -11946,22 +12245,22 @@ SEXP R_igraph_community_edge_betweenness(SEXP graph, SEXP directed, SEXP weights PROTECT(r_names=NEW_CHARACTER(6)); PROTECT(removed_edges=Ry_igraph_vector_int_to_SEXP(&c_removed_edges)); igraph_vector_int_destroy(&c_removed_edges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(edge_betweenness=Ry_igraph_vector_to_SEXP(&c_edge_betweenness)); igraph_vector_destroy(&c_edge_betweenness); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(merges=Ry_igraph_matrix_int_to_SEXP(&c_merges)); igraph_matrix_int_destroy(&c_merges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(bridges=Ry_igraph_vector_int_to_SEXPp1(&c_bridges)); igraph_vector_int_destroy(&c_bridges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(modularity=Ry_igraph_vector_to_SEXP(&c_modularity)); igraph_vector_destroy(&c_modularity); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(membership=Ry_igraph_vector_int_to_SEXP(&c_membership)); igraph_vector_int_destroy(&c_membership); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, removed_edges); SET_VECTOR_ELT(r_result, 1, edge_betweenness); SET_VECTOR_ELT(r_result, 2, merges); @@ -12000,23 +12299,24 @@ SEXP R_igraph_community_eb_get_merges(SEXP graph, SEXP directed, SEXP edges, SEX SEXP membership; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; Rz_SEXP_to_vector_int_copy(edges, &c_edges); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edges); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edges); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } IGRAPH_R_CHECK(igraph_matrix_int_init(&c_merges, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_int_destroy, &c_merges); + IGRAPH_LOCAL_FINALLY(igraph_matrix_int_destroy, &c_merges); IGRAPH_R_CHECK(igraph_vector_int_init(&c_bridges, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_bridges); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_bridges); IGRAPH_R_CHECK(igraph_vector_init(&c_modularity, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_modularity); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_modularity); IGRAPH_R_CHECK(igraph_vector_int_init(&c_membership, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_membership); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); /* Call igraph */ IGRAPH_R_CHECK(igraph_community_eb_get_merges(&c_graph, c_directed, &c_edges, (Rf_isNull(weights) ? 0 : &c_weights), &c_merges, &c_bridges, &c_modularity, &c_membership)); @@ -12024,19 +12324,19 @@ SEXP R_igraph_community_eb_get_merges(SEXP graph, SEXP directed, SEXP edges, SEX PROTECT(r_result=NEW_LIST(4)); PROTECT(r_names=NEW_CHARACTER(4)); igraph_vector_int_destroy(&c_edges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(merges=Ry_igraph_matrix_int_to_SEXP(&c_merges)); igraph_matrix_int_destroy(&c_merges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(bridges=Ry_igraph_vector_int_to_SEXPp1(&c_bridges)); igraph_vector_int_destroy(&c_bridges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(modularity=Ry_igraph_vector_to_SEXP(&c_modularity)); igraph_vector_destroy(&c_modularity); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(membership=Ry_igraph_vector_int_to_SEXP(&c_membership)); igraph_vector_int_destroy(&c_membership); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, merges); SET_VECTOR_ELT(r_result, 1, bridges); SET_VECTOR_ELT(r_result, 2, modularity); @@ -12067,17 +12367,18 @@ SEXP R_igraph_community_fastgreedy(SEXP graph, SEXP weights) { SEXP membership; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } IGRAPH_R_CHECK(igraph_matrix_int_init(&c_merges, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_int_destroy, &c_merges); + IGRAPH_LOCAL_FINALLY(igraph_matrix_int_destroy, &c_merges); IGRAPH_R_CHECK(igraph_vector_init(&c_modularity, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_modularity); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_modularity); IGRAPH_R_CHECK(igraph_vector_int_init(&c_membership, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_membership); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); /* Call igraph */ IGRAPH_R_CHECK(igraph_community_fastgreedy(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_merges, &c_modularity, &c_membership)); @@ -12086,13 +12387,13 @@ SEXP R_igraph_community_fastgreedy(SEXP graph, SEXP weights) { PROTECT(r_names=NEW_CHARACTER(3)); PROTECT(merges=Ry_igraph_matrix_int_to_SEXP(&c_merges)); igraph_matrix_int_destroy(&c_merges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(modularity=Ry_igraph_vector_to_SEXP(&c_modularity)); igraph_vector_destroy(&c_modularity); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(membership=Ry_igraph_vector_int_to_SEXP(&c_membership)); igraph_vector_int_destroy(&c_membership); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, merges); SET_VECTOR_ELT(r_result, 1, modularity); SET_VECTOR_ELT(r_result, 2, membership); @@ -12120,17 +12421,18 @@ SEXP R_igraph_community_to_membership(SEXP merges, SEXP nodes, SEXP steps) { SEXP csize; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_matrix_int(merges, &c_merges); - IGRAPH_FINALLY(igraph_matrix_int_destroy, &c_merges); + IGRAPH_LOCAL_FINALLY(igraph_matrix_int_destroy, &c_merges); IGRAPH_R_CHECK_INT(nodes); c_nodes = (igraph_integer_t) REAL(nodes)[0]; IGRAPH_R_CHECK_INT(steps); c_steps = (igraph_integer_t) REAL(steps)[0]; IGRAPH_R_CHECK(igraph_vector_int_init(&c_membership, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_membership); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); IGRAPH_R_CHECK(igraph_vector_int_init(&c_csize, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_csize); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_csize); /* Call igraph */ IGRAPH_R_CHECK(igraph_community_to_membership(&c_merges, c_nodes, c_steps, &c_membership, &c_csize)); @@ -12138,13 +12440,13 @@ SEXP R_igraph_community_to_membership(SEXP merges, SEXP nodes, SEXP steps) { PROTECT(r_result=NEW_LIST(2)); PROTECT(r_names=NEW_CHARACTER(2)); igraph_matrix_int_destroy(&c_merges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(membership=Ry_igraph_vector_int_to_SEXP(&c_membership)); igraph_vector_int_destroy(&c_membership); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(csize=Ry_igraph_vector_int_to_SEXP(&c_csize)); igraph_vector_int_destroy(&c_csize); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, membership); SET_VECTOR_ELT(r_result, 1, csize); SET_STRING_ELT(r_names, 0, Rf_mkChar("membership")); @@ -12168,15 +12470,16 @@ SEXP R_igraph_le_community_to_membership(SEXP merges, SEXP steps, SEXP membershi SEXP csize; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_matrix_int(merges, &c_merges); - IGRAPH_FINALLY(igraph_matrix_int_destroy, &c_merges); + IGRAPH_LOCAL_FINALLY(igraph_matrix_int_destroy, &c_merges); IGRAPH_R_CHECK_INT(steps); c_steps = (igraph_integer_t) REAL(steps)[0]; IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(membership, &c_membership)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_membership); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); IGRAPH_R_CHECK(igraph_vector_int_init(&c_csize, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_csize); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_csize); /* Call igraph */ IGRAPH_R_CHECK(igraph_le_community_to_membership(&c_merges, c_steps, &c_membership, &c_csize)); @@ -12184,13 +12487,13 @@ SEXP R_igraph_le_community_to_membership(SEXP merges, SEXP steps, SEXP membershi PROTECT(r_result=NEW_LIST(2)); PROTECT(r_names=NEW_CHARACTER(2)); igraph_matrix_int_destroy(&c_merges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(membership=Ry_igraph_vector_int_to_SEXP(&c_membership)); igraph_vector_int_destroy(&c_membership); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(csize=Ry_igraph_vector_int_to_SEXP(&c_csize)); igraph_vector_int_destroy(&c_csize); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, membership); SET_VECTOR_ELT(r_result, 1, csize); SET_STRING_ELT(r_names, 0, Rf_mkChar("membership")); @@ -12216,10 +12519,11 @@ SEXP R_igraph_modularity(SEXP graph, SEXP membership, SEXP weights, SEXP resolut SEXP modularity; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(membership, &c_membership)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_membership); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } @@ -12232,7 +12536,7 @@ SEXP R_igraph_modularity(SEXP graph, SEXP membership, SEXP weights, SEXP resolut /* Convert output */ igraph_vector_int_destroy(&c_membership); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(modularity=NEW_NUMERIC(1)); REAL(modularity)[0]=c_modularity; r_result = modularity; @@ -12254,6 +12558,7 @@ SEXP R_igraph_modularity_matrix(SEXP graph, SEXP weights, SEXP resolution, SEXP SEXP modmat; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(weights)) { @@ -12262,7 +12567,7 @@ SEXP R_igraph_modularity_matrix(SEXP graph, SEXP weights, SEXP resolution, SEXP IGRAPH_R_CHECK_REAL(resolution); c_resolution = REAL(resolution)[0]; IGRAPH_R_CHECK(igraph_matrix_init(&c_modmat, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_modmat); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_modmat); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ @@ -12271,7 +12576,7 @@ SEXP R_igraph_modularity_matrix(SEXP graph, SEXP weights, SEXP resolution, SEXP /* Convert output */ PROTECT(modmat=Ry_igraph_matrix_to_SEXP(&c_modmat)); igraph_matrix_destroy(&c_modmat); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = modmat; UNPROTECT(1); @@ -12290,11 +12595,12 @@ SEXP R_igraph_reindex_membership(SEXP membership) { SEXP nb_clusters; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(membership, &c_membership)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_membership); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); IGRAPH_R_CHECK(igraph_vector_int_init(&c_new_to_old, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_new_to_old); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_new_to_old); c_nb_clusters=0; /* Call igraph */ IGRAPH_R_CHECK(igraph_reindex_membership(&c_membership, &c_new_to_old, &c_nb_clusters)); @@ -12304,10 +12610,10 @@ SEXP R_igraph_reindex_membership(SEXP membership) { PROTECT(r_names=NEW_CHARACTER(3)); PROTECT(membership=Ry_igraph_vector_int_to_SEXP(&c_membership)); igraph_vector_int_destroy(&c_membership); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(new_to_old=Ry_igraph_vector_int_to_SEXPp1(&c_new_to_old)); igraph_vector_int_destroy(&c_new_to_old); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(nb_clusters=NEW_NUMERIC(1)); REAL(nb_clusters)[0]=(double) c_nb_clusters; SET_VECTOR_ELT(r_result, 0, membership); @@ -12334,19 +12640,20 @@ SEXP R_igraph_community_fluid_communities(SEXP graph, SEXP no_of_communities) { SEXP membership; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK_INT(no_of_communities); c_no_of_communities = (igraph_integer_t) REAL(no_of_communities)[0]; IGRAPH_R_CHECK(igraph_vector_int_init(&c_membership, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_membership); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); /* Call igraph */ IGRAPH_R_CHECK(igraph_community_fluid_communities(&c_graph, c_no_of_communities, &c_membership)); /* Convert output */ PROTECT(membership=Ry_igraph_vector_int_to_SEXP(&c_membership)); igraph_vector_int_destroy(&c_membership); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = membership; UNPROTECT(1); @@ -12367,20 +12674,21 @@ SEXP R_igraph_community_label_propagation(SEXP graph, SEXP mode, SEXP weights, S SEXP membership; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_membership, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_membership); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); c_mode = (igraph_neimode_t) Rf_asInteger(mode); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } if (!Rf_isNull(initial)) { Rz_SEXP_to_vector_int_copy(initial, &c_initial); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_initial); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_initial); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_initial, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_initial); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_initial); } if (!Rf_isNull(fixed)) { Rz_SEXP_to_vector_bool(fixed, &c_fixed); @@ -12391,9 +12699,9 @@ SEXP R_igraph_community_label_propagation(SEXP graph, SEXP mode, SEXP weights, S /* Convert output */ PROTECT(membership=Ry_igraph_vector_int_to_SEXP(&c_membership)); igraph_vector_int_destroy(&c_membership); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_initial); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = membership; UNPROTECT(1); @@ -12416,6 +12724,7 @@ SEXP R_igraph_community_multilevel(SEXP graph, SEXP weights, SEXP resolution) { SEXP modularity; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(weights)) { @@ -12424,11 +12733,11 @@ SEXP R_igraph_community_multilevel(SEXP graph, SEXP weights, SEXP resolution) { IGRAPH_R_CHECK_REAL(resolution); c_resolution = REAL(resolution)[0]; IGRAPH_R_CHECK(igraph_vector_int_init(&c_membership, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_membership); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); IGRAPH_R_CHECK(igraph_matrix_int_init(&c_memberships, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_int_destroy, &c_memberships); + IGRAPH_LOCAL_FINALLY(igraph_matrix_int_destroy, &c_memberships); IGRAPH_R_CHECK(igraph_vector_init(&c_modularity, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_modularity); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_modularity); /* Call igraph */ IGRAPH_R_CHECK(igraph_community_multilevel(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), c_resolution, &c_membership, &c_memberships, &c_modularity)); @@ -12437,13 +12746,13 @@ SEXP R_igraph_community_multilevel(SEXP graph, SEXP weights, SEXP resolution) { PROTECT(r_names=NEW_CHARACTER(3)); PROTECT(membership=Ry_igraph_vector_int_to_SEXP(&c_membership)); igraph_vector_int_destroy(&c_membership); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(memberships=Ry_igraph_matrix_int_to_SEXP(&c_memberships)); igraph_matrix_int_destroy(&c_memberships); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(modularity=Ry_igraph_vector_to_SEXP(&c_modularity)); igraph_vector_destroy(&c_modularity); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, membership); SET_VECTOR_ELT(r_result, 1, memberships); SET_VECTOR_ELT(r_result, 2, modularity); @@ -12470,10 +12779,11 @@ SEXP R_igraph_community_optimal_modularity(SEXP graph, SEXP weights) { SEXP membership; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_membership, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_membership); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } @@ -12487,7 +12797,7 @@ SEXP R_igraph_community_optimal_modularity(SEXP graph, SEXP weights) { REAL(modularity)[0]=c_modularity; PROTECT(membership=Ry_igraph_vector_int_to_SEXP(&c_membership)); igraph_vector_int_destroy(&c_membership); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, modularity); SET_VECTOR_ELT(r_result, 1, membership); SET_STRING_ELT(r_names, 0, Rf_mkChar("modularity")); @@ -12518,6 +12828,7 @@ SEXP R_igraph_community_leiden(SEXP graph, SEXP weights, SEXP vertex_weights, SE SEXP quality; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(weights)) { @@ -12536,10 +12847,10 @@ SEXP R_igraph_community_leiden(SEXP graph, SEXP weights, SEXP vertex_weights, SE c_n_iterations = (igraph_integer_t) REAL(n_iterations)[0]; if (!Rf_isNull(membership)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(membership, &c_membership)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_membership); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_membership, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_membership); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); } c_nb_clusters=0; /* Call igraph */ @@ -12550,7 +12861,7 @@ SEXP R_igraph_community_leiden(SEXP graph, SEXP weights, SEXP vertex_weights, SE PROTECT(r_names=NEW_CHARACTER(3)); PROTECT(membership=Ry_igraph_vector_int_to_SEXP(&c_membership)); igraph_vector_int_destroy(&c_membership); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(nb_clusters=NEW_NUMERIC(1)); REAL(nb_clusters)[0]=(double) c_nb_clusters; PROTECT(quality=NEW_NUMERIC(1)); @@ -12581,11 +12892,12 @@ SEXP R_igraph_split_join_distance(SEXP comm1, SEXP comm2) { SEXP distance21; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(comm1, &c_comm1)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_comm1); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_comm1); IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(comm2, &c_comm2)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_comm2); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_comm2); c_distance12=0; c_distance21=0; /* Call igraph */ @@ -12595,9 +12907,9 @@ SEXP R_igraph_split_join_distance(SEXP comm1, SEXP comm2) { PROTECT(r_result=NEW_LIST(2)); PROTECT(r_names=NEW_CHARACTER(2)); igraph_vector_int_destroy(&c_comm1); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_comm2); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(distance12=NEW_NUMERIC(1)); REAL(distance12)[0]=(double) c_distance12; PROTECT(distance21=NEW_NUMERIC(1)); @@ -12628,6 +12940,7 @@ SEXP R_igraph_community_infomap(SEXP graph, SEXP e_weights, SEXP v_weights, SEXP SEXP codelength; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(e_weights)) { @@ -12639,7 +12952,7 @@ SEXP R_igraph_community_infomap(SEXP graph, SEXP e_weights, SEXP v_weights, SEXP IGRAPH_R_CHECK_INT(nb_trials); c_nb_trials = (igraph_integer_t) REAL(nb_trials)[0]; IGRAPH_R_CHECK(igraph_vector_int_init(&c_membership, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_membership); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); /* Call igraph */ IGRAPH_R_CHECK(igraph_community_infomap(&c_graph, (Rf_isNull(e_weights) ? 0 : &c_e_weights), (Rf_isNull(v_weights) ? 0 : &c_v_weights), c_nb_trials, &c_membership, &c_codelength)); @@ -12648,7 +12961,7 @@ SEXP R_igraph_community_infomap(SEXP graph, SEXP e_weights, SEXP v_weights, SEXP PROTECT(r_names=NEW_CHARACTER(2)); PROTECT(membership=Ry_igraph_vector_int_to_SEXP(&c_membership)); igraph_vector_int_destroy(&c_membership); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(codelength=NEW_NUMERIC(1)); REAL(codelength)[0]=c_codelength; SET_VECTOR_ELT(r_result, 0, membership); @@ -12676,15 +12989,16 @@ SEXP R_igraph_graphlets(SEXP graph, SEXP weights, SEXP niter) { SEXP Mu; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_cliques, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_cliques); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_cliques); IGRAPH_R_CHECK(igraph_vector_init(&c_Mu, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_Mu); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_Mu); IGRAPH_R_CHECK_INT(niter); c_niter = (igraph_integer_t) REAL(niter)[0]; /* Call igraph */ @@ -12695,10 +13009,10 @@ SEXP R_igraph_graphlets(SEXP graph, SEXP weights, SEXP niter) { PROTECT(r_names=NEW_CHARACTER(2)); PROTECT(cliques=Ry_igraph_vector_int_list_to_SEXPp1(&c_cliques)); igraph_vector_int_list_destroy(&c_cliques); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(Mu=Ry_igraph_vector_to_SEXP(&c_Mu)); igraph_vector_destroy(&c_Mu); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, cliques); SET_VECTOR_ELT(r_result, 1, Mu); SET_STRING_ELT(r_names, 0, Rf_mkChar("cliques")); @@ -12723,15 +13037,16 @@ SEXP R_igraph_graphlets_candidate_basis(SEXP graph, SEXP weights) { SEXP thresholds; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_cliques, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_cliques); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_cliques); IGRAPH_R_CHECK(igraph_vector_init(&c_thresholds, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_thresholds); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_thresholds); /* Call igraph */ IGRAPH_R_CHECK(igraph_graphlets_candidate_basis(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_cliques, &c_thresholds)); @@ -12740,10 +13055,10 @@ SEXP R_igraph_graphlets_candidate_basis(SEXP graph, SEXP weights) { PROTECT(r_names=NEW_CHARACTER(2)); PROTECT(cliques=Ry_igraph_vector_int_list_to_SEXPp1(&c_cliques)); igraph_vector_int_list_destroy(&c_cliques); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(thresholds=Ry_igraph_vector_to_SEXP(&c_thresholds)); igraph_vector_destroy(&c_thresholds); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, cliques); SET_VECTOR_ELT(r_result, 1, thresholds); SET_STRING_ELT(r_names, 0, Rf_mkChar("cliques")); @@ -12768,15 +13083,16 @@ SEXP R_igraph_graphlets_project(SEXP graph, SEXP weights, SEXP cliques, SEXP Muc igraph_integer_t c_niter; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } IGRAPH_R_CHECK(Ry_igraph_SEXP_to_vector_int_list(cliques, &c_cliques)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_cliques); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_cliques); IGRAPH_R_CHECK(Rz_SEXP_to_vector_copy(Muc, &c_Muc)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_Muc); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_Muc); IGRAPH_R_CHECK_BOOL(startMu); c_startMu = LOGICAL(startMu)[0]; IGRAPH_R_CHECK_INT(niter); @@ -12786,10 +13102,10 @@ SEXP R_igraph_graphlets_project(SEXP graph, SEXP weights, SEXP cliques, SEXP Muc /* Convert output */ igraph_vector_int_list_destroy(&c_cliques); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(Muc=Ry_igraph_vector_to_SEXP(&c_Muc)); igraph_vector_destroy(&c_Muc); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = Muc; UNPROTECT(1); @@ -12807,10 +13123,11 @@ SEXP R_igraph_hrg_fit(SEXP graph, SEXP hrg, SEXP start, SEXP steps) { igraph_integer_t c_steps; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(Rz_SEXP_to_hrg_copy(hrg, &c_hrg)); - IGRAPH_FINALLY(igraph_hrg_destroy, &c_hrg); + IGRAPH_LOCAL_FINALLY(igraph_hrg_destroy, &c_hrg); IGRAPH_R_CHECK_BOOL(start); c_start = LOGICAL(start)[0]; IGRAPH_R_CHECK_INT(steps); @@ -12821,7 +13138,7 @@ SEXP R_igraph_hrg_fit(SEXP graph, SEXP hrg, SEXP start, SEXP steps) { /* Convert output */ PROTECT(hrg=Ry_igraph_hrg_to_SEXP(&c_hrg)); igraph_hrg_destroy(&c_hrg); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = hrg; UNPROTECT(1); @@ -12838,19 +13155,20 @@ SEXP R_igraph_hrg_sample(SEXP hrg) { SEXP sample; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK(Rz_SEXP_to_hrg_copy(hrg, &c_hrg)); - IGRAPH_FINALLY(igraph_hrg_destroy, &c_hrg); + IGRAPH_LOCAL_FINALLY(igraph_hrg_destroy, &c_hrg); /* Call igraph */ IGRAPH_R_CHECK(igraph_hrg_sample(&c_hrg, &c_sample)); /* Convert output */ igraph_hrg_destroy(&c_hrg); - IGRAPH_FINALLY_CLEAN(1); - IGRAPH_FINALLY(igraph_destroy, &c_sample); + IGRAPH_LOCAL_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_sample); PROTECT(sample=Ry_igraph_to_SEXP(&c_sample)); IGRAPH_I_DESTROY(&c_sample); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = sample; UNPROTECT(1); @@ -12868,11 +13186,12 @@ SEXP R_igraph_hrg_sample_many(SEXP hrg, SEXP num_samples) { SEXP samples; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK(Rz_SEXP_to_hrg_copy(hrg, &c_hrg)); - IGRAPH_FINALLY(igraph_hrg_destroy, &c_hrg); + IGRAPH_LOCAL_FINALLY(igraph_hrg_destroy, &c_hrg); IGRAPH_R_CHECK(igraph_graph_list_init(&c_samples, 0)); - IGRAPH_FINALLY(igraph_graph_list_destroy, &c_samples); + IGRAPH_LOCAL_FINALLY(igraph_graph_list_destroy, &c_samples); IGRAPH_R_CHECK_INT(num_samples); c_num_samples = (igraph_integer_t) REAL(num_samples)[0]; /* Call igraph */ @@ -12880,10 +13199,10 @@ SEXP R_igraph_hrg_sample_many(SEXP hrg, SEXP num_samples) { /* Convert output */ igraph_hrg_destroy(&c_hrg); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(samples=Ry_igraph_graphlist_to_SEXP(&c_samples)); IGRAPH_FREE(c_samples.stor_begin); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = samples; UNPROTECT(1); @@ -12900,19 +13219,20 @@ SEXP R_igraph_hrg_game(SEXP hrg) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK(Rz_SEXP_to_hrg_copy(hrg, &c_hrg)); - IGRAPH_FINALLY(igraph_hrg_destroy, &c_hrg); + IGRAPH_LOCAL_FINALLY(igraph_hrg_destroy, &c_hrg); /* Call igraph */ IGRAPH_R_CHECK(igraph_hrg_game(&c_graph, &c_hrg)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_hrg_destroy(&c_hrg); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -12934,14 +13254,15 @@ SEXP R_igraph_hrg_consensus(SEXP graph, SEXP hrg, SEXP start, SEXP num_samples) SEXP weights; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_parents, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_parents); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_parents); IGRAPH_R_CHECK(igraph_vector_init(&c_weights, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_weights); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_weights); IGRAPH_R_CHECK(Rz_SEXP_to_hrg_copy(hrg, &c_hrg)); - IGRAPH_FINALLY(igraph_hrg_destroy, &c_hrg); + IGRAPH_LOCAL_FINALLY(igraph_hrg_destroy, &c_hrg); IGRAPH_R_CHECK_BOOL(start); c_start = LOGICAL(start)[0]; IGRAPH_R_CHECK_INT(num_samples); @@ -12954,13 +13275,13 @@ SEXP R_igraph_hrg_consensus(SEXP graph, SEXP hrg, SEXP start, SEXP num_samples) PROTECT(r_names=NEW_CHARACTER(3)); PROTECT(parents=Ry_igraph_vector_int_to_SEXP(&c_parents)); igraph_vector_int_destroy(&c_parents); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(weights=Ry_igraph_vector_to_SEXP(&c_weights)); igraph_vector_destroy(&c_weights); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(hrg=Ry_igraph_hrg_to_SEXP(&c_hrg)); igraph_hrg_destroy(&c_hrg); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, parents); SET_VECTOR_ELT(r_result, 1, weights); SET_VECTOR_ELT(r_result, 2, hrg); @@ -12990,14 +13311,15 @@ SEXP R_igraph_hrg_predict(SEXP graph, SEXP hrg, SEXP start, SEXP num_samples, SE SEXP prob; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_edges, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edges); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edges); IGRAPH_R_CHECK(igraph_vector_init(&c_prob, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_prob); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_prob); IGRAPH_R_CHECK(Rz_SEXP_to_hrg_copy(hrg, &c_hrg)); - IGRAPH_FINALLY(igraph_hrg_destroy, &c_hrg); + IGRAPH_LOCAL_FINALLY(igraph_hrg_destroy, &c_hrg); IGRAPH_R_CHECK_BOOL(start); c_start = LOGICAL(start)[0]; IGRAPH_R_CHECK_INT(num_samples); @@ -13012,13 +13334,13 @@ SEXP R_igraph_hrg_predict(SEXP graph, SEXP hrg, SEXP start, SEXP num_samples, SE PROTECT(r_names=NEW_CHARACTER(3)); PROTECT(edges=Ry_igraph_vector_int_to_SEXPp1(&c_edges)); igraph_vector_int_destroy(&c_edges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(prob=Ry_igraph_vector_to_SEXP(&c_prob)); igraph_vector_destroy(&c_prob); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(hrg=Ry_igraph_hrg_to_SEXP(&c_hrg)); igraph_hrg_destroy(&c_hrg); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, edges); SET_VECTOR_ELT(r_result, 1, prob); SET_VECTOR_ELT(r_result, 2, hrg); @@ -13043,9 +13365,10 @@ SEXP R_igraph_hrg_create(SEXP graph, SEXP prob) { SEXP hrg; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK(igraph_hrg_init(&c_hrg, 0)); - IGRAPH_FINALLY(igraph_hrg_destroy, &c_hrg); + IGRAPH_LOCAL_FINALLY(igraph_hrg_destroy, &c_hrg); Rz_SEXP_to_igraph(graph, &c_graph); Rz_SEXP_to_vector(prob, &c_prob); /* Call igraph */ @@ -13054,7 +13377,7 @@ SEXP R_igraph_hrg_create(SEXP graph, SEXP prob) { /* Convert output */ PROTECT(hrg=Ry_igraph_hrg_to_SEXP(&c_hrg)); igraph_hrg_destroy(&c_hrg); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = hrg; UNPROTECT(1); @@ -13070,9 +13393,10 @@ SEXP R_igraph_hrg_resize(SEXP hrg, SEXP newsize) { igraph_integer_t c_newsize; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK(Rz_SEXP_to_hrg_copy(hrg, &c_hrg)); - IGRAPH_FINALLY(igraph_hrg_destroy, &c_hrg); + IGRAPH_LOCAL_FINALLY(igraph_hrg_destroy, &c_hrg); IGRAPH_R_CHECK_INT(newsize); c_newsize = (igraph_integer_t) REAL(newsize)[0]; /* Call igraph */ @@ -13081,7 +13405,7 @@ SEXP R_igraph_hrg_resize(SEXP hrg, SEXP newsize) { /* Convert output */ PROTECT(hrg=Ry_igraph_hrg_to_SEXP(&c_hrg)); igraph_hrg_destroy(&c_hrg); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = hrg; UNPROTECT(1); @@ -13096,15 +13420,16 @@ SEXP R_igraph_hrg_size(SEXP hrg) { igraph_hrg_t c_hrg; igraph_integer_t c_result; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK(Rz_SEXP_to_hrg_copy(hrg, &c_hrg)); - IGRAPH_FINALLY(igraph_hrg_destroy, &c_hrg); + IGRAPH_LOCAL_FINALLY(igraph_hrg_destroy, &c_hrg); /* Call igraph */ c_result=igraph_hrg_size(&c_hrg); /* Convert output */ igraph_hrg_destroy(&c_hrg); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(r_result=NEW_NUMERIC(1)); REAL(r_result)[0]=(double) c_result; @@ -13124,26 +13449,27 @@ SEXP R_igraph_from_hrg_dendrogram(SEXP hrg) { SEXP prob; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK(Rz_SEXP_to_hrg_copy(hrg, &c_hrg)); - IGRAPH_FINALLY(igraph_hrg_destroy, &c_hrg); + IGRAPH_LOCAL_FINALLY(igraph_hrg_destroy, &c_hrg); IGRAPH_R_CHECK(igraph_vector_init(&c_prob, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_prob); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_prob); /* Call igraph */ IGRAPH_R_CHECK(igraph_from_hrg_dendrogram(&c_graph, &c_hrg, &c_prob)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); PROTECT(r_names=NEW_CHARACTER(2)); - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_hrg_destroy(&c_hrg); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(prob=Ry_igraph_vector_to_SEXP(&c_prob)); igraph_vector_destroy(&c_prob); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, graph); SET_VECTOR_ELT(r_result, 1, prob); SET_STRING_ELT(r_names, 0, Rf_mkChar("graph")); @@ -13168,10 +13494,11 @@ SEXP R_igraph_get_adjacency(SEXP graph, SEXP type, SEXP weights, SEXP loops) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); c_type = (igraph_get_adjacency_t) Rf_asInteger(type); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); @@ -13183,7 +13510,7 @@ SEXP R_igraph_get_adjacency(SEXP graph, SEXP type, SEXP weights, SEXP loops) { /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -13203,10 +13530,11 @@ SEXP R_igraph_get_adjacency_sparse(SEXP graph, SEXP type, SEXP weights, SEXP loo SEXP sparsemat; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_sparsemat_init(&c_sparsemat, 0, 0, 0)); - IGRAPH_FINALLY(igraph_sparsemat_destroy, &c_sparsemat); + IGRAPH_LOCAL_FINALLY(igraph_sparsemat_destroy, &c_sparsemat); c_type = (igraph_get_adjacency_t) Rf_asInteger(type); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); @@ -13218,7 +13546,7 @@ SEXP R_igraph_get_adjacency_sparse(SEXP graph, SEXP type, SEXP weights, SEXP loo /* Convert output */ PROTECT(sparsemat=Ry_igraph_sparsemat_to_SEXP(&c_sparsemat)); igraph_sparsemat_destroy(&c_sparsemat); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = sparsemat; UNPROTECT(1); @@ -13236,10 +13564,11 @@ SEXP R_igraph_get_edgelist(SEXP graph, SEXP bycol) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_res); IGRAPH_R_CHECK_BOOL(bycol); c_bycol = LOGICAL(bycol)[0]; /* Call igraph */ @@ -13248,7 +13577,7 @@ SEXP R_igraph_get_edgelist(SEXP graph, SEXP bycol) { /* Convert output */ PROTECT(res=Ry_igraph_vector_int_to_SEXP(&c_res)); igraph_vector_int_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -13267,10 +13596,11 @@ SEXP R_igraph_get_stochastic(SEXP graph, SEXP column_wise, SEXP weights) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); IGRAPH_R_CHECK_BOOL(column_wise); c_column_wise = LOGICAL(column_wise)[0]; if (!Rf_isNull(weights)) { @@ -13282,7 +13612,7 @@ SEXP R_igraph_get_stochastic(SEXP graph, SEXP column_wise, SEXP weights) { /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); igraph_matrix_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -13301,10 +13631,11 @@ SEXP R_igraph_get_stochastic_sparse(SEXP graph, SEXP column_wise, SEXP weights) SEXP sparsemat; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_sparsemat_init(&c_sparsemat, 0, 0, 0)); - IGRAPH_FINALLY(igraph_sparsemat_destroy, &c_sparsemat); + IGRAPH_LOCAL_FINALLY(igraph_sparsemat_destroy, &c_sparsemat); IGRAPH_R_CHECK_BOOL(column_wise); c_column_wise = LOGICAL(column_wise)[0]; if (!Rf_isNull(weights)) { @@ -13316,7 +13647,7 @@ SEXP R_igraph_get_stochastic_sparse(SEXP graph, SEXP column_wise, SEXP weights) /* Convert output */ PROTECT(sparsemat=Ry_igraph_sparsemat_to_SEXP(&c_sparsemat)); igraph_sparsemat_destroy(&c_sparsemat); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = sparsemat; UNPROTECT(1); @@ -13332,9 +13663,10 @@ SEXP R_igraph_to_directed(SEXP graph, SEXP mode) { igraph_to_directed_t c_mode; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph_copy(graph, &c_graph); - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); c_mode = (igraph_to_directed_t) Rf_asInteger(mode); /* Call igraph */ IGRAPH_R_CHECK(igraph_to_directed(&c_graph, c_mode)); @@ -13342,7 +13674,7 @@ SEXP R_igraph_to_directed(SEXP graph, SEXP mode) { /* Convert output */ PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -13359,21 +13691,22 @@ SEXP R_igraph_to_undirected(SEXP graph, SEXP mode, SEXP edge_attr_comb) { igraph_attribute_combination_t c_edge_attr_comb; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph_copy(graph, &c_graph); - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); c_mode = (igraph_to_undirected_t) Rf_asInteger(mode); Rz_SEXP_to_attr_comb(edge_attr_comb, &c_edge_attr_comb); - IGRAPH_FINALLY(igraph_attribute_combination_destroy, &c_edge_attr_comb); + IGRAPH_LOCAL_FINALLY(igraph_attribute_combination_destroy, &c_edge_attr_comb); /* Call igraph */ IGRAPH_R_CHECK(igraph_to_undirected(&c_graph, c_mode, &c_edge_attr_comb)); /* Convert output */ PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_attribute_combination_destroy(&c_edge_attr_comb); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -13392,9 +13725,10 @@ SEXP R_igraph_read_graph_edgelist(SEXP instream, SEXP n, SEXP directed) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ c_instream = Ry_igraph_fopen_read(instream); - IGRAPH_FINALLY(fclose, c_instream); + IGRAPH_LOCAL_FINALLY(fclose, c_instream); IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; IGRAPH_R_CHECK_BOOL(directed); @@ -13403,10 +13737,10 @@ SEXP R_igraph_read_graph_edgelist(SEXP instream, SEXP n, SEXP directed) { IGRAPH_R_CHECK(igraph_read_graph_edgelist(&c_graph, c_instream, c_n, c_directed)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -13427,9 +13761,10 @@ SEXP R_igraph_read_graph_ncol(SEXP instream, SEXP predefnames, SEXP names, SEXP SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ c_instream = Ry_igraph_fopen_read(instream); - IGRAPH_FINALLY(fclose, c_instream); + IGRAPH_LOCAL_FINALLY(fclose, c_instream); if (!Rf_isNull(predefnames)) { Rx_igraph_SEXP_to_strvector(predefnames, &c_predefnames); } @@ -13442,10 +13777,10 @@ SEXP R_igraph_read_graph_ncol(SEXP instream, SEXP predefnames, SEXP names, SEXP IGRAPH_R_CHECK(igraph_read_graph_ncol(&c_graph, c_instream, (Rf_isNull(predefnames) ? 0 : &c_predefnames), c_names, c_weights, c_directed)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -13465,9 +13800,10 @@ SEXP R_igraph_read_graph_lgl(SEXP instream, SEXP names, SEXP weights, SEXP direc SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ c_instream = Ry_igraph_fopen_read(instream); - IGRAPH_FINALLY(fclose, c_instream); + IGRAPH_LOCAL_FINALLY(fclose, c_instream); IGRAPH_R_CHECK_BOOL(names); c_names = LOGICAL(names)[0]; c_weights = (igraph_add_weights_t) Rf_asInteger(weights); @@ -13477,10 +13813,10 @@ SEXP R_igraph_read_graph_lgl(SEXP instream, SEXP names, SEXP weights, SEXP direc IGRAPH_R_CHECK(igraph_read_graph_lgl(&c_graph, c_instream, c_names, c_weights, c_directed)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -13497,17 +13833,18 @@ SEXP R_igraph_read_graph_pajek(SEXP instream) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ c_instream = Ry_igraph_fopen_read(instream); - IGRAPH_FINALLY(fclose, c_instream); + IGRAPH_LOCAL_FINALLY(fclose, c_instream); /* Call igraph */ IGRAPH_R_CHECK(igraph_read_graph_pajek(&c_graph, c_instream)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -13525,19 +13862,20 @@ SEXP R_igraph_read_graph_graphml(SEXP instream, SEXP index) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ c_instream = Ry_igraph_fopen_read(instream); - IGRAPH_FINALLY(fclose, c_instream); + IGRAPH_LOCAL_FINALLY(fclose, c_instream); IGRAPH_R_CHECK_INT(index); c_index = (igraph_integer_t) REAL(index)[0]; /* Call igraph */ IGRAPH_R_CHECK(igraph_read_graph_graphml(&c_graph, c_instream, c_index)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -13565,17 +13903,18 @@ SEXP R_igraph_read_graph_dimacs_flow(SEXP instream, SEXP directed) { SEXP capacity; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ c_instream = Ry_igraph_fopen_read(instream); - IGRAPH_FINALLY(fclose, c_instream); + IGRAPH_LOCAL_FINALLY(fclose, c_instream); IGRAPH_R_CHECK(igraph_strvector_init(&c_problem, 0)); - IGRAPH_FINALLY(igraph_strvector_destroy, &c_problem); + IGRAPH_LOCAL_FINALLY(igraph_strvector_destroy, &c_problem); IGRAPH_R_CHECK(igraph_vector_int_init(&c_label, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_label); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_label); c_source=0; c_target=0; IGRAPH_R_CHECK(igraph_vector_init(&c_capacity, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_capacity); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_capacity); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ @@ -13584,23 +13923,23 @@ SEXP R_igraph_read_graph_dimacs_flow(SEXP instream, SEXP directed) { /* Convert output */ PROTECT(r_result=NEW_LIST(6)); PROTECT(r_names=NEW_CHARACTER(6)); - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(problem=Rx_igraph_strvector_to_SEXP(&c_problem)); igraph_strvector_destroy(&c_problem); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(label=Ry_igraph_vector_int_to_SEXP(&c_label)); igraph_vector_int_destroy(&c_label); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(source=NEW_NUMERIC(1)); REAL(source)[0]=(double) c_source; PROTECT(target=NEW_NUMERIC(1)); REAL(target)[0]=(double) c_target; PROTECT(capacity=Ry_igraph_vector_to_SEXP(&c_capacity)); igraph_vector_destroy(&c_capacity); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, graph); SET_VECTOR_ELT(r_result, 1, problem); SET_VECTOR_ELT(r_result, 2, label); @@ -13631,19 +13970,20 @@ SEXP R_igraph_read_graph_graphdb(SEXP instream, SEXP directed) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ c_instream = Ry_igraph_fopen_read(instream); - IGRAPH_FINALLY(fclose, c_instream); + IGRAPH_LOCAL_FINALLY(fclose, c_instream); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ IGRAPH_R_CHECK(igraph_read_graph_graphdb(&c_graph, c_instream, c_directed)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -13660,17 +14000,18 @@ SEXP R_igraph_read_graph_gml(SEXP instream) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ c_instream = Ry_igraph_fopen_read(instream); - IGRAPH_FINALLY(fclose, c_instream); + IGRAPH_LOCAL_FINALLY(fclose, c_instream); /* Call igraph */ IGRAPH_R_CHECK(igraph_read_graph_gml(&c_graph, c_instream)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -13688,19 +14029,20 @@ SEXP R_igraph_read_graph_dl(SEXP instream, SEXP directed) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ c_instream = Ry_igraph_fopen_read(instream); - IGRAPH_FINALLY(fclose, c_instream); + IGRAPH_LOCAL_FINALLY(fclose, c_instream); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ IGRAPH_R_CHECK(igraph_read_graph_dl(&c_graph, c_instream, c_directed)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -13715,10 +14057,11 @@ SEXP R_igraph_write_graph_edgelist(SEXP graph, SEXP outstream) { igraph_t c_graph; FILE* c_outstream; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_outstream = Ry_igraph_fopen_write(outstream); - IGRAPH_FINALLY(fclose, c_outstream); + IGRAPH_LOCAL_FINALLY(fclose, c_outstream); /* Call igraph */ IGRAPH_R_CHECK(igraph_write_graph_edgelist(&c_graph, c_outstream)); @@ -13739,10 +14082,11 @@ SEXP R_igraph_write_graph_ncol(SEXP graph, SEXP outstream, SEXP names, SEXP weig const char* c_names; const char* c_weights; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_outstream = Ry_igraph_fopen_write(outstream); - IGRAPH_FINALLY(fclose, c_outstream); + IGRAPH_LOCAL_FINALLY(fclose, c_outstream); c_names = Rf_translateCharUTF8(STRING_ELT(names, 0)); c_weights = Rf_translateCharUTF8(STRING_ELT(weights, 0)); /* Call igraph */ @@ -13766,10 +14110,11 @@ SEXP R_igraph_write_graph_lgl(SEXP graph, SEXP outstream, SEXP names, SEXP weigh const char* c_weights; igraph_bool_t c_isolates; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_outstream = Ry_igraph_fopen_write(outstream); - IGRAPH_FINALLY(fclose, c_outstream); + IGRAPH_LOCAL_FINALLY(fclose, c_outstream); c_names = Rf_translateCharUTF8(STRING_ELT(names, 0)); c_weights = Rf_translateCharUTF8(STRING_ELT(weights, 0)); IGRAPH_R_CHECK_BOOL(isolates); @@ -13794,10 +14139,11 @@ SEXP R_igraph_write_graph_leda(SEXP graph, SEXP outstream, SEXP names, SEXP weig const char* c_names; const char* c_weights; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_outstream = Ry_igraph_fopen_write(outstream); - IGRAPH_FINALLY(fclose, c_outstream); + IGRAPH_LOCAL_FINALLY(fclose, c_outstream); c_names = Rf_translateCharUTF8(STRING_ELT(names, 0)); c_weights = Rf_translateCharUTF8(STRING_ELT(weights, 0)); /* Call igraph */ @@ -13819,10 +14165,11 @@ SEXP R_igraph_write_graph_graphml(SEXP graph, SEXP outstream, SEXP prefixattr) { FILE* c_outstream; igraph_bool_t c_prefixattr; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_outstream = Ry_igraph_fopen_write(outstream); - IGRAPH_FINALLY(fclose, c_outstream); + IGRAPH_LOCAL_FINALLY(fclose, c_outstream); IGRAPH_R_CHECK_BOOL(prefixattr); c_prefixattr = LOGICAL(prefixattr)[0]; /* Call igraph */ @@ -13843,10 +14190,11 @@ SEXP R_igraph_write_graph_pajek(SEXP graph, SEXP outstream) { igraph_t c_graph; FILE* c_outstream; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_outstream = Ry_igraph_fopen_write(outstream); - IGRAPH_FINALLY(fclose, c_outstream); + IGRAPH_LOCAL_FINALLY(fclose, c_outstream); /* Call igraph */ IGRAPH_R_CHECK(igraph_write_graph_pajek(&c_graph, c_outstream)); @@ -13869,11 +14217,12 @@ SEXP R_igraph_write_graph_dimacs_flow(SEXP graph, SEXP outstream, SEXP source, S igraph_vector_t c_capacity; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph_copy(graph, &c_graph); - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); c_outstream = Ry_igraph_fopen_write(outstream); - IGRAPH_FINALLY(fclose, c_outstream); + IGRAPH_LOCAL_FINALLY(fclose, c_outstream); c_source = (igraph_integer_t) REAL(source)[0]; c_target = (igraph_integer_t) REAL(target)[0]; Rz_SEXP_to_vector(capacity, &c_capacity); @@ -13883,7 +14232,7 @@ SEXP R_igraph_write_graph_dimacs_flow(SEXP graph, SEXP outstream, SEXP source, S /* Convert output */ PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -13901,10 +14250,11 @@ SEXP R_igraph_write_graph_gml(SEXP graph, SEXP outstream, SEXP options, SEXP id, igraph_vector_t c_id; const char* c_creator; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_outstream = Ry_igraph_fopen_write(outstream); - IGRAPH_FINALLY(fclose, c_outstream); + IGRAPH_LOCAL_FINALLY(fclose, c_outstream); c_options = (igraph_write_gml_sw_t) Rf_asInteger(options); Rz_SEXP_to_vector(id, &c_id); if (!Rf_isNull(creator)) { @@ -13928,10 +14278,11 @@ SEXP R_igraph_write_graph_dot(SEXP graph, SEXP outstream) { igraph_t c_graph; FILE* c_outstream; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_outstream = Ry_igraph_fopen_write(outstream); - IGRAPH_FINALLY(fclose, c_outstream); + IGRAPH_LOCAL_FINALLY(fclose, c_outstream); /* Call igraph */ IGRAPH_R_CHECK(igraph_write_graph_dot(&c_graph, c_outstream)); @@ -13954,10 +14305,11 @@ SEXP R_igraph_motifs_randesu(SEXP graph, SEXP size, SEXP cut_prob) { SEXP hist; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_hist, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_hist); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_hist); IGRAPH_R_CHECK_INT(size); c_size = (igraph_integer_t) REAL(size)[0]; if (!Rf_isNull(cut_prob)) { @@ -13969,7 +14321,7 @@ SEXP R_igraph_motifs_randesu(SEXP graph, SEXP size, SEXP cut_prob) { /* Convert output */ PROTECT(hist=Ry_igraph_vector_to_SEXP(&c_hist)); igraph_vector_destroy(&c_hist); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = hist; UNPROTECT(1); @@ -13990,6 +14342,7 @@ SEXP R_igraph_motifs_randesu_estimate(SEXP graph, SEXP size, SEXP cut_prob, SEXP SEXP est; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_est=0; @@ -14002,10 +14355,10 @@ SEXP R_igraph_motifs_randesu_estimate(SEXP graph, SEXP size, SEXP cut_prob, SEXP c_sample_size = (igraph_integer_t) REAL(sample_size)[0]; if (!Rf_isNull(sample)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(sample, &c_sample)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_sample); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_sample); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_sample, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_sample); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_sample); } /* Call igraph */ IGRAPH_R_CHECK(igraph_motifs_randesu_estimate(&c_graph, &c_est, c_size, (Rf_isNull(cut_prob) ? 0 : &c_cut_prob), c_sample_size, (Rf_isNull(sample) ? 0 : &c_sample))); @@ -14014,7 +14367,7 @@ SEXP R_igraph_motifs_randesu_estimate(SEXP graph, SEXP size, SEXP cut_prob, SEXP PROTECT(est=NEW_NUMERIC(1)); REAL(est)[0]=(double) c_est; igraph_vector_int_destroy(&c_sample); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = est; UNPROTECT(1); @@ -14033,6 +14386,7 @@ SEXP R_igraph_motifs_randesu_no(SEXP graph, SEXP size, SEXP cut_prob) { SEXP no; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_no=0; @@ -14067,6 +14421,7 @@ SEXP R_igraph_dyad_census(SEXP graph) { SEXP null; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ @@ -14104,17 +14459,18 @@ SEXP R_igraph_triad_census(SEXP graph) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); /* Call igraph */ IGRAPH_R_CHECK(igraph_triad_census(&c_graph, &c_res)); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -14132,10 +14488,11 @@ SEXP R_igraph_count_adjacent_triangles(SEXP graph, SEXP vids) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); /* Call igraph */ @@ -14144,7 +14501,7 @@ SEXP R_igraph_count_adjacent_triangles(SEXP graph, SEXP vids) { /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vids_data); igraph_vs_destroy(&c_vids); r_result = res; @@ -14163,6 +14520,7 @@ SEXP R_igraph_count_triangles(SEXP graph) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ @@ -14189,10 +14547,11 @@ SEXP R_igraph_local_scan_0(SEXP graph, SEXP weights, SEXP mode) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } @@ -14203,7 +14562,7 @@ SEXP R_igraph_local_scan_0(SEXP graph, SEXP weights, SEXP mode) { /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -14223,11 +14582,12 @@ SEXP R_igraph_local_scan_0_them(SEXP us, SEXP them, SEXP weights_them, SEXP mode SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(us, &c_us); Rz_SEXP_to_igraph(them, &c_them); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); if (!Rf_isNull(weights_them)) { Rz_SEXP_to_vector(weights_them, &c_weights_them); } @@ -14238,7 +14598,7 @@ SEXP R_igraph_local_scan_0_them(SEXP us, SEXP them, SEXP weights_them, SEXP mode /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -14257,10 +14617,11 @@ SEXP R_igraph_local_scan_1_ecount(SEXP graph, SEXP weights, SEXP mode) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } @@ -14271,7 +14632,7 @@ SEXP R_igraph_local_scan_1_ecount(SEXP graph, SEXP weights, SEXP mode) { /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -14291,11 +14652,12 @@ SEXP R_igraph_local_scan_1_ecount_them(SEXP us, SEXP them, SEXP weights_them, SE SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(us, &c_us); Rz_SEXP_to_igraph(them, &c_them); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); if (!Rf_isNull(weights_them)) { Rz_SEXP_to_vector(weights_them, &c_weights_them); } @@ -14306,7 +14668,7 @@ SEXP R_igraph_local_scan_1_ecount_them(SEXP us, SEXP them, SEXP weights_them, SE /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -14326,12 +14688,13 @@ SEXP R_igraph_local_scan_k_ecount(SEXP graph, SEXP k, SEXP weights, SEXP mode) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK_INT(k); c_k = (igraph_integer_t) REAL(k)[0]; IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } @@ -14342,7 +14705,7 @@ SEXP R_igraph_local_scan_k_ecount(SEXP graph, SEXP k, SEXP weights, SEXP mode) { /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -14363,13 +14726,14 @@ SEXP R_igraph_local_scan_k_ecount_them(SEXP us, SEXP them, SEXP k, SEXP weights_ SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(us, &c_us); Rz_SEXP_to_igraph(them, &c_them); IGRAPH_R_CHECK_INT(k); c_k = (igraph_integer_t) REAL(k)[0]; IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); if (!Rf_isNull(weights_them)) { Rz_SEXP_to_vector(weights_them, &c_weights_them); } @@ -14380,7 +14744,7 @@ SEXP R_igraph_local_scan_k_ecount_them(SEXP us, SEXP them, SEXP k, SEXP weights_ /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -14399,24 +14763,25 @@ SEXP R_igraph_local_scan_neighborhood_ecount(SEXP graph, SEXP weights, SEXP neig SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } IGRAPH_R_CHECK(Ry_igraph_SEXP_to_vector_int_list(neighborhoods, &c_neighborhoods)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_neighborhoods); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_neighborhoods); /* Call igraph */ IGRAPH_R_CHECK(igraph_local_scan_neighborhood_ecount(&c_graph, &c_res, (Rf_isNull(weights) ? 0 : &c_weights), &c_neighborhoods)); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_list_destroy(&c_neighborhoods); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -14435,24 +14800,25 @@ SEXP R_igraph_local_scan_subset_ecount(SEXP graph, SEXP weights, SEXP subsets) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } IGRAPH_R_CHECK(Ry_igraph_SEXP_to_vector_int_list(subsets, &c_subsets)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_subsets); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_subsets); /* Call igraph */ IGRAPH_R_CHECK(igraph_local_scan_subset_ecount(&c_graph, &c_res, (Rf_isNull(weights) ? 0 : &c_weights), &c_subsets)); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_list_destroy(&c_subsets); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -14469,17 +14835,18 @@ SEXP R_igraph_list_triangles(SEXP graph) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_res); /* Call igraph */ IGRAPH_R_CHECK(igraph_list_triangles(&c_graph, &c_res)); /* Convert output */ PROTECT(res=Ry_igraph_vector_int_to_SEXPp1(&c_res)); igraph_vector_int_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -14497,6 +14864,7 @@ SEXP R_igraph_disjoint_union(SEXP left, SEXP right) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(left, &c_left); Rz_SEXP_to_igraph(right, &c_right); @@ -14504,10 +14872,10 @@ SEXP R_igraph_disjoint_union(SEXP left, SEXP right) { IGRAPH_R_CHECK(igraph_disjoint_union(&c_res, &c_left, &c_right)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_res); PROTECT(res=Ry_igraph_to_SEXP(&c_res)); IGRAPH_I_DESTROY(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -14524,20 +14892,21 @@ SEXP R_igraph_disjoint_union_many(SEXP graphs) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ igraph_t *c_graphs_storage; IGRAPH_R_CHECK(Rz_SEXP_to_graph_ptr_list(graphs, &c_graphs, &c_graphs_storage)); - IGRAPH_FINALLY(igraph_vector_ptr_destroy, &c_graphs); + IGRAPH_LOCAL_FINALLY(igraph_vector_ptr_destroy, &c_graphs); /* Call igraph */ IGRAPH_R_CHECK(igraph_disjoint_union_many(&c_res, &c_graphs)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_res); PROTECT(res=Ry_igraph_to_SEXP(&c_res)); IGRAPH_I_DESTROY(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_ptr_destroy(&c_graphs); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -14555,6 +14924,7 @@ SEXP R_igraph_join(SEXP left, SEXP right) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(left, &c_left); Rz_SEXP_to_igraph(right, &c_right); @@ -14562,10 +14932,10 @@ SEXP R_igraph_join(SEXP left, SEXP right) { IGRAPH_R_CHECK(igraph_join(&c_res, &c_left, &c_right)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_res); PROTECT(res=Ry_igraph_to_SEXP(&c_res)); IGRAPH_I_DESTROY(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -14587,29 +14957,30 @@ SEXP R_igraph_union(SEXP left, SEXP right) { SEXP edge_map_right; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(left, &c_left); Rz_SEXP_to_igraph(right, &c_right); IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_map_left, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edge_map_left); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_map_left); IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_map_right, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edge_map_right); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_map_right); /* Call igraph */ IGRAPH_R_CHECK(igraph_union(&c_res, &c_left, &c_right, &c_edge_map_left, &c_edge_map_right)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); PROTECT(r_names=NEW_CHARACTER(3)); - IGRAPH_FINALLY(igraph_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_res); PROTECT(res=Ry_igraph_to_SEXP(&c_res)); IGRAPH_I_DESTROY(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(edge_map_left=Ry_igraph_vector_int_to_SEXPp1(&c_edge_map_left)); igraph_vector_int_destroy(&c_edge_map_left); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(edge_map_right=Ry_igraph_vector_int_to_SEXPp1(&c_edge_map_right)); igraph_vector_int_destroy(&c_edge_map_right); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, res); SET_VECTOR_ELT(r_result, 1, edge_map_left); SET_VECTOR_ELT(r_result, 2, edge_map_right); @@ -14635,27 +15006,28 @@ SEXP R_igraph_union_many(SEXP graphs) { SEXP edgemaps; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ igraph_t *c_graphs_storage; IGRAPH_R_CHECK(Rz_SEXP_to_graph_ptr_list(graphs, &c_graphs, &c_graphs_storage)); - IGRAPH_FINALLY(igraph_vector_ptr_destroy, &c_graphs); + IGRAPH_LOCAL_FINALLY(igraph_vector_ptr_destroy, &c_graphs); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_edgemaps, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_edgemaps); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_edgemaps); /* Call igraph */ IGRAPH_R_CHECK(igraph_union_many(&c_res, &c_graphs, &c_edgemaps)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); PROTECT(r_names=NEW_CHARACTER(2)); - IGRAPH_FINALLY(igraph_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_res); PROTECT(res=Ry_igraph_to_SEXP(&c_res)); IGRAPH_I_DESTROY(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_ptr_destroy(&c_graphs); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(edgemaps=Ry_igraph_vector_int_list_to_SEXP(&c_edgemaps)); igraph_vector_int_list_destroy(&c_edgemaps); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, res); SET_VECTOR_ELT(r_result, 1, edgemaps); SET_STRING_ELT(r_names, 0, Rf_mkChar("res")); @@ -14682,29 +15054,30 @@ SEXP R_igraph_intersection(SEXP left, SEXP right) { SEXP edge_map_right; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(left, &c_left); Rz_SEXP_to_igraph(right, &c_right); IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_map_left, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edge_map_left); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_map_left); IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_map_right, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edge_map_right); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_map_right); /* Call igraph */ IGRAPH_R_CHECK(igraph_intersection(&c_res, &c_left, &c_right, &c_edge_map_left, &c_edge_map_right)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); PROTECT(r_names=NEW_CHARACTER(3)); - IGRAPH_FINALLY(igraph_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_res); PROTECT(res=Ry_igraph_to_SEXP(&c_res)); IGRAPH_I_DESTROY(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(edge_map_left=Ry_igraph_vector_int_to_SEXPp1(&c_edge_map_left)); igraph_vector_int_destroy(&c_edge_map_left); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(edge_map_right=Ry_igraph_vector_int_to_SEXPp1(&c_edge_map_right)); igraph_vector_int_destroy(&c_edge_map_right); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, res); SET_VECTOR_ELT(r_result, 1, edge_map_left); SET_VECTOR_ELT(r_result, 2, edge_map_right); @@ -14730,27 +15103,28 @@ SEXP R_igraph_intersection_many(SEXP graphs) { SEXP edgemaps; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ igraph_t *c_graphs_storage; IGRAPH_R_CHECK(Rz_SEXP_to_graph_ptr_list(graphs, &c_graphs, &c_graphs_storage)); - IGRAPH_FINALLY(igraph_vector_ptr_destroy, &c_graphs); + IGRAPH_LOCAL_FINALLY(igraph_vector_ptr_destroy, &c_graphs); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_edgemaps, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_edgemaps); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_edgemaps); /* Call igraph */ IGRAPH_R_CHECK(igraph_intersection_many(&c_res, &c_graphs, &c_edgemaps)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); PROTECT(r_names=NEW_CHARACTER(2)); - IGRAPH_FINALLY(igraph_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_res); PROTECT(res=Ry_igraph_to_SEXP(&c_res)); IGRAPH_I_DESTROY(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_ptr_destroy(&c_graphs); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(edgemaps=Ry_igraph_vector_int_list_to_SEXP(&c_edgemaps)); igraph_vector_int_list_destroy(&c_edgemaps); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, res); SET_VECTOR_ELT(r_result, 1, edgemaps); SET_STRING_ELT(r_names, 0, Rf_mkChar("res")); @@ -14773,6 +15147,7 @@ SEXP R_igraph_difference(SEXP orig, SEXP sub) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(orig, &c_orig); Rz_SEXP_to_igraph(sub, &c_sub); @@ -14780,10 +15155,10 @@ SEXP R_igraph_difference(SEXP orig, SEXP sub) { IGRAPH_R_CHECK(igraph_difference(&c_res, &c_orig, &c_sub)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_res); PROTECT(res=Ry_igraph_to_SEXP(&c_res)); IGRAPH_I_DESTROY(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -14801,6 +15176,7 @@ SEXP R_igraph_complementer(SEXP graph, SEXP loops) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK_BOOL(loops); @@ -14809,10 +15185,10 @@ SEXP R_igraph_complementer(SEXP graph, SEXP loops) { IGRAPH_R_CHECK(igraph_complementer(&c_res, &c_graph, c_loops)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_res); PROTECT(res=Ry_igraph_to_SEXP(&c_res)); IGRAPH_I_DESTROY(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -14834,29 +15210,30 @@ SEXP R_igraph_compose(SEXP g1, SEXP g2) { SEXP edge_map2; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(g1, &c_g1); Rz_SEXP_to_igraph(g2, &c_g2); IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_map1, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edge_map1); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_map1); IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_map2, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edge_map2); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_map2); /* Call igraph */ IGRAPH_R_CHECK(igraph_compose(&c_res, &c_g1, &c_g2, &c_edge_map1, &c_edge_map2)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); PROTECT(r_names=NEW_CHARACTER(3)); - IGRAPH_FINALLY(igraph_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_res); PROTECT(res=Ry_igraph_to_SEXP(&c_res)); IGRAPH_I_DESTROY(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(edge_map1=Ry_igraph_vector_int_to_SEXPp1(&c_edge_map1)); igraph_vector_int_destroy(&c_edge_map1); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(edge_map2=Ry_igraph_vector_int_to_SEXPp1(&c_edge_map2)); igraph_vector_int_destroy(&c_edge_map2); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, res); SET_VECTOR_ELT(r_result, 1, edge_map1); SET_VECTOR_ELT(r_result, 2, edge_map2); @@ -14886,33 +15263,34 @@ SEXP R_igraph_induced_subgraph_map(SEXP graph, SEXP vids, SEXP impl) { SEXP invmap; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); c_impl = (igraph_subgraph_implementation_t) Rf_asInteger(impl); IGRAPH_R_CHECK(igraph_vector_int_init(&c_map, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_map); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_map); IGRAPH_R_CHECK(igraph_vector_int_init(&c_invmap, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_invmap); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_invmap); /* Call igraph */ IGRAPH_R_CHECK(igraph_induced_subgraph_map(&c_graph, &c_res, c_vids, c_impl, &c_map, &c_invmap)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); PROTECT(r_names=NEW_CHARACTER(3)); - IGRAPH_FINALLY(igraph_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_res); PROTECT(res=Ry_igraph_to_SEXP(&c_res)); IGRAPH_I_DESTROY(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vids_data); igraph_vs_destroy(&c_vids); PROTECT(map=Ry_igraph_vector_int_to_SEXPp1(&c_map)); igraph_vector_int_destroy(&c_map); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(invmap=Ry_igraph_vector_int_to_SEXPp1(&c_invmap)); igraph_vector_int_destroy(&c_invmap); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, res); SET_VECTOR_ELT(r_result, 1, map); SET_VECTOR_ELT(r_result, 2, invmap); @@ -14937,6 +15315,7 @@ SEXP R_igraph_mycielskian(SEXP graph, SEXP k) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK_INT(k); @@ -14945,10 +15324,10 @@ SEXP R_igraph_mycielskian(SEXP graph, SEXP k) { IGRAPH_R_CHECK(igraph_mycielskian(&c_graph, &c_res, c_k)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_res); PROTECT(res=Ry_igraph_to_SEXP(&c_res)); IGRAPH_I_DESTROY(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -14967,6 +15346,7 @@ SEXP R_igraph_product(SEXP g1, SEXP g2, SEXP type) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(g1, &c_g1); Rz_SEXP_to_igraph(g2, &c_g2); @@ -14975,10 +15355,10 @@ SEXP R_igraph_product(SEXP g1, SEXP g2, SEXP type) { IGRAPH_R_CHECK(igraph_product(&c_res, &c_g1, &c_g2, c_type)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_res); PROTECT(res=Ry_igraph_to_SEXP(&c_res)); IGRAPH_I_DESTROY(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -14997,6 +15377,7 @@ SEXP R_igraph_rooted_product(SEXP g1, SEXP g2, SEXP root) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(g1, &c_g1); Rz_SEXP_to_igraph(g2, &c_g2); @@ -15005,10 +15386,10 @@ SEXP R_igraph_rooted_product(SEXP g1, SEXP g2, SEXP root) { IGRAPH_R_CHECK(igraph_rooted_product(&c_res, &c_g1, &c_g2, c_root)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_res); PROTECT(res=Ry_igraph_to_SEXP(&c_res)); IGRAPH_I_DESTROY(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -15028,10 +15409,11 @@ SEXP R_igraph_gomory_hu_tree(SEXP graph, SEXP capacity) { SEXP flows; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_flows, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_flows); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_flows); if (!Rf_isNull(capacity)) { Rz_SEXP_to_vector(capacity, &c_capacity); } @@ -15041,13 +15423,13 @@ SEXP R_igraph_gomory_hu_tree(SEXP graph, SEXP capacity) { /* Convert output */ PROTECT(r_result=NEW_LIST(2)); PROTECT(r_names=NEW_CHARACTER(2)); - IGRAPH_FINALLY(igraph_destroy, &c_tree); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_tree); PROTECT(tree=Ry_igraph_to_SEXP(&c_tree)); IGRAPH_I_DESTROY(&c_tree); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(flows=Ry_igraph_vector_to_SEXP(&c_flows)); igraph_vector_destroy(&c_flows); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, tree); SET_VECTOR_ELT(r_result, 1, flows); SET_STRING_ELT(r_names, 0, Rf_mkChar("tree")); @@ -15082,16 +15464,17 @@ SEXP R_igraph_maxflow(SEXP graph, SEXP source, SEXP target, SEXP capacity) { SEXP stats; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_flow, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_flow); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_flow); IGRAPH_R_CHECK(igraph_vector_int_init(&c_cut, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_cut); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_cut); IGRAPH_R_CHECK(igraph_vector_int_init(&c_partition1, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_partition1); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_partition1); IGRAPH_R_CHECK(igraph_vector_int_init(&c_partition2, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_partition2); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_partition2); c_source = (igraph_integer_t) REAL(source)[0]; c_target = (igraph_integer_t) REAL(target)[0]; if (!Rf_isNull(capacity)) { @@ -15107,16 +15490,16 @@ SEXP R_igraph_maxflow(SEXP graph, SEXP source, SEXP target, SEXP capacity) { REAL(value)[0]=c_value; PROTECT(flow=Ry_igraph_vector_to_SEXP(&c_flow)); igraph_vector_destroy(&c_flow); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(cut=Ry_igraph_vector_int_to_SEXPp1(&c_cut)); igraph_vector_int_destroy(&c_cut); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(partition1=Ry_igraph_vector_int_to_SEXPp1(&c_partition1)); igraph_vector_int_destroy(&c_partition1); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(partition2=Ry_igraph_vector_int_to_SEXPp1(&c_partition2)); igraph_vector_int_destroy(&c_partition2); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(stats=Ry_igraph_maxflow_stats_to_SEXP(&c_stats)); SET_VECTOR_ELT(r_result, 0, value); SET_VECTOR_ELT(r_result, 1, flow); @@ -15152,6 +15535,7 @@ SEXP R_igraph_maxflow_value(SEXP graph, SEXP source, SEXP target, SEXP capacity) SEXP stats; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_source = (igraph_integer_t) REAL(source)[0]; @@ -15196,14 +15580,15 @@ SEXP R_igraph_mincut(SEXP graph, SEXP capacity) { SEXP cut; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_partition1, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_partition1); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_partition1); IGRAPH_R_CHECK(igraph_vector_int_init(&c_partition2, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_partition2); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_partition2); IGRAPH_R_CHECK(igraph_vector_int_init(&c_cut, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_cut); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_cut); if (!Rf_isNull(capacity)) { Rz_SEXP_to_vector(capacity, &c_capacity); } @@ -15217,13 +15602,13 @@ SEXP R_igraph_mincut(SEXP graph, SEXP capacity) { REAL(value)[0]=c_value; PROTECT(partition1=Ry_igraph_vector_int_to_SEXPp1(&c_partition1)); igraph_vector_int_destroy(&c_partition1); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(partition2=Ry_igraph_vector_int_to_SEXPp1(&c_partition2)); igraph_vector_int_destroy(&c_partition2); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(cut=Ry_igraph_vector_int_to_SEXPp1(&c_cut)); igraph_vector_int_destroy(&c_cut); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, value); SET_VECTOR_ELT(r_result, 1, partition1); SET_VECTOR_ELT(r_result, 2, partition2); @@ -15250,6 +15635,7 @@ SEXP R_igraph_mincut_value(SEXP graph, SEXP capacity) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(capacity)) { @@ -15281,11 +15667,12 @@ SEXP R_igraph_residual_graph(SEXP graph, SEXP capacity, SEXP flow) { SEXP residual_capacity; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); Rz_SEXP_to_vector(capacity, &c_capacity); IGRAPH_R_CHECK(igraph_vector_init(&c_residual_capacity, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_residual_capacity); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_residual_capacity); residual_capacity=R_GlobalEnv; /* hack to have a non-NULL value */ Rz_SEXP_to_vector(flow, &c_flow); /* Call igraph */ @@ -15294,13 +15681,13 @@ SEXP R_igraph_residual_graph(SEXP graph, SEXP capacity, SEXP flow) { /* Convert output */ PROTECT(r_result=NEW_LIST(2)); PROTECT(r_names=NEW_CHARACTER(2)); - IGRAPH_FINALLY(igraph_destroy, &c_residual); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_residual); PROTECT(residual=Ry_igraph_to_SEXP(&c_residual)); IGRAPH_I_DESTROY(&c_residual); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(residual_capacity=Ry_igraph_0orvector_to_SEXP(&c_residual_capacity)); igraph_vector_destroy(&c_residual_capacity); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, residual); SET_VECTOR_ELT(r_result, 1, residual_capacity); SET_STRING_ELT(r_names, 0, Rf_mkChar("residual")); @@ -15324,6 +15711,7 @@ SEXP R_igraph_reverse_residual_graph(SEXP graph, SEXP capacity, SEXP flow) { SEXP residual; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); Rz_SEXP_to_vector(capacity, &c_capacity); @@ -15332,10 +15720,10 @@ SEXP R_igraph_reverse_residual_graph(SEXP graph, SEXP capacity, SEXP flow) { IGRAPH_R_CHECK(igraph_reverse_residual_graph(&c_graph, &c_capacity, &c_residual, &c_flow)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_residual); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_residual); PROTECT(residual=Ry_igraph_to_SEXP(&c_residual)); IGRAPH_I_DESTROY(&c_residual); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = residual; UNPROTECT(1); @@ -15361,14 +15749,15 @@ SEXP R_igraph_st_mincut(SEXP graph, SEXP source, SEXP target, SEXP capacity) { SEXP partition2; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_cut, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_cut); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_cut); IGRAPH_R_CHECK(igraph_vector_int_init(&c_partition1, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_partition1); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_partition1); IGRAPH_R_CHECK(igraph_vector_int_init(&c_partition2, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_partition2); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_partition2); c_source = (igraph_integer_t) REAL(source)[0]; c_target = (igraph_integer_t) REAL(target)[0]; if (!Rf_isNull(capacity)) { @@ -15384,13 +15773,13 @@ SEXP R_igraph_st_mincut(SEXP graph, SEXP source, SEXP target, SEXP capacity) { REAL(value)[0]=c_value; PROTECT(cut=Ry_igraph_vector_int_to_SEXPp1(&c_cut)); igraph_vector_int_destroy(&c_cut); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(partition1=Ry_igraph_vector_int_to_SEXPp1(&c_partition1)); igraph_vector_int_destroy(&c_partition1); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(partition2=Ry_igraph_vector_int_to_SEXPp1(&c_partition2)); igraph_vector_int_destroy(&c_partition2); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, value); SET_VECTOR_ELT(r_result, 1, cut); SET_VECTOR_ELT(r_result, 2, partition1); @@ -15419,6 +15808,7 @@ SEXP R_igraph_st_mincut_value(SEXP graph, SEXP source, SEXP target, SEXP capacit SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_source = (igraph_integer_t) REAL(source)[0]; @@ -15451,6 +15841,7 @@ SEXP R_igraph_st_vertex_connectivity(SEXP graph, SEXP source, SEXP target, SEXP SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_res=0; @@ -15480,6 +15871,7 @@ SEXP R_igraph_vertex_connectivity(SEXP graph, SEXP checks) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_res=0; @@ -15509,6 +15901,7 @@ SEXP R_igraph_st_edge_connectivity(SEXP graph, SEXP source, SEXP target) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_res=0; @@ -15537,6 +15930,7 @@ SEXP R_igraph_edge_connectivity(SEXP graph, SEXP checks) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_res=0; @@ -15566,6 +15960,7 @@ SEXP R_igraph_edge_disjoint_paths(SEXP graph, SEXP source, SEXP target) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_res=0; @@ -15595,6 +15990,7 @@ SEXP R_igraph_vertex_disjoint_paths(SEXP graph, SEXP source, SEXP target) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_res=0; @@ -15623,6 +16019,7 @@ SEXP R_igraph_adhesion(SEXP graph, SEXP checks) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_res=0; @@ -15651,6 +16048,7 @@ SEXP R_igraph_cohesion(SEXP graph, SEXP checks) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_res=0; @@ -15684,13 +16082,14 @@ SEXP R_igraph_dominator_tree(SEXP graph, SEXP root, SEXP mode) { SEXP leftout; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_root = (igraph_integer_t) REAL(root)[0]; IGRAPH_R_CHECK(igraph_vector_int_init(&c_dom, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_dom); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_dom); IGRAPH_R_CHECK(igraph_vector_int_init(&c_leftout, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_leftout); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_leftout); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ IGRAPH_R_CHECK(igraph_dominator_tree(&c_graph, c_root, &c_dom, &c_domtree, &c_leftout, c_mode)); @@ -15700,14 +16099,14 @@ SEXP R_igraph_dominator_tree(SEXP graph, SEXP root, SEXP mode) { PROTECT(r_names=NEW_CHARACTER(3)); PROTECT(dom=Ry_igraph_vector_int_to_SEXPp1(&c_dom)); igraph_vector_int_destroy(&c_dom); - IGRAPH_FINALLY_CLEAN(1); - IGRAPH_FINALLY(igraph_destroy, &c_domtree); + IGRAPH_LOCAL_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_domtree); PROTECT(domtree=Ry_igraph_to_SEXP(&c_domtree)); IGRAPH_I_DESTROY(&c_domtree); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(leftout=Ry_igraph_vector_int_to_SEXPp1(&c_leftout)); igraph_vector_int_destroy(&c_leftout); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, dom); SET_VECTOR_ELT(r_result, 1, domtree); SET_VECTOR_ELT(r_result, 2, leftout); @@ -15735,12 +16134,13 @@ SEXP R_igraph_all_st_cuts(SEXP graph, SEXP source, SEXP target) { SEXP partition1s; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_cuts, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_cuts); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_cuts); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_partition1s, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_partition1s); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_partition1s); c_source = (igraph_integer_t) REAL(source)[0]; c_target = (igraph_integer_t) REAL(target)[0]; /* Call igraph */ @@ -15751,10 +16151,10 @@ SEXP R_igraph_all_st_cuts(SEXP graph, SEXP source, SEXP target) { PROTECT(r_names=NEW_CHARACTER(2)); PROTECT(cuts=Ry_igraph_vector_int_list_to_SEXPp1(&c_cuts)); igraph_vector_int_list_destroy(&c_cuts); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(partition1s=Ry_igraph_vector_int_list_to_SEXPp1(&c_partition1s)); igraph_vector_int_list_destroy(&c_partition1s); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, cuts); SET_VECTOR_ELT(r_result, 1, partition1s); SET_STRING_ELT(r_names, 0, Rf_mkChar("cuts")); @@ -15783,12 +16183,13 @@ SEXP R_igraph_all_st_mincuts(SEXP graph, SEXP source, SEXP target, SEXP capacity SEXP partition1s; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_cuts, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_cuts); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_cuts); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_partition1s, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_partition1s); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_partition1s); c_source = (igraph_integer_t) REAL(source)[0]; c_target = (igraph_integer_t) REAL(target)[0]; if (!Rf_isNull(capacity)) { @@ -15804,10 +16205,10 @@ SEXP R_igraph_all_st_mincuts(SEXP graph, SEXP source, SEXP target, SEXP capacity REAL(value)[0]=c_value; PROTECT(cuts=Ry_igraph_vector_int_list_to_SEXPp1(&c_cuts)); igraph_vector_int_list_destroy(&c_cuts); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(partition1s=Ry_igraph_vector_int_list_to_SEXPp1(&c_partition1s)); igraph_vector_int_list_destroy(&c_partition1s); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, value); SET_VECTOR_ELT(r_result, 1, cuts); SET_VECTOR_ELT(r_result, 2, partition1s); @@ -15833,10 +16234,11 @@ SEXP R_igraph_even_tarjan_reduction(SEXP graph) { SEXP capacity; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_capacity, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_capacity); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_capacity); capacity=R_GlobalEnv; /* hack to have a non-NULL value */ /* Call igraph */ IGRAPH_R_CHECK(igraph_even_tarjan_reduction(&c_graph, &c_graphbar, &c_capacity)); @@ -15844,13 +16246,13 @@ SEXP R_igraph_even_tarjan_reduction(SEXP graph) { /* Convert output */ PROTECT(r_result=NEW_LIST(2)); PROTECT(r_names=NEW_CHARACTER(2)); - IGRAPH_FINALLY(igraph_destroy, &c_graphbar); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graphbar); PROTECT(graphbar=Ry_igraph_to_SEXP(&c_graphbar)); IGRAPH_I_DESTROY(&c_graphbar); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(capacity=Ry_igraph_0orvector_to_SEXP(&c_capacity)); igraph_vector_destroy(&c_capacity); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, graphbar); SET_VECTOR_ELT(r_result, 1, capacity); SET_STRING_ELT(r_names, 0, Rf_mkChar("graphbar")); @@ -15873,6 +16275,7 @@ SEXP R_igraph_is_separator(SEXP graph, SEXP candidate) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); igraph_vector_int_t c_candidate_data; @@ -15902,6 +16305,7 @@ SEXP R_igraph_is_minimal_separator(SEXP graph, SEXP candidate) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); igraph_vector_int_t c_candidate_data; @@ -15930,17 +16334,18 @@ SEXP R_igraph_all_minimal_st_separators(SEXP graph) { SEXP separators; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_separators, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_separators); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_separators); /* Call igraph */ IGRAPH_R_CHECK(igraph_all_minimal_st_separators(&c_graph, &c_separators)); /* Convert output */ PROTECT(separators=Ry_igraph_vector_int_list_to_SEXPp1(&c_separators)); igraph_vector_int_list_destroy(&c_separators); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = separators; UNPROTECT(1); @@ -15957,17 +16362,18 @@ SEXP R_igraph_minimum_size_separators(SEXP graph) { SEXP separators; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_separators, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_separators); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_separators); /* Call igraph */ IGRAPH_R_CHECK(igraph_minimum_size_separators(&c_graph, &c_separators)); /* Convert output */ PROTECT(separators=Ry_igraph_vector_int_list_to_SEXPp1(&c_separators)); igraph_vector_int_list_destroy(&c_separators); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = separators; UNPROTECT(1); @@ -15990,14 +16396,15 @@ SEXP R_igraph_cohesive_blocks(SEXP graph) { SEXP blockTree; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_blocks, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_blocks); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_blocks); IGRAPH_R_CHECK(igraph_vector_int_init(&c_cohesion, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_cohesion); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_cohesion); IGRAPH_R_CHECK(igraph_vector_int_init(&c_parent, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_parent); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_parent); /* Call igraph */ IGRAPH_R_CHECK(igraph_cohesive_blocks(&c_graph, &c_blocks, &c_cohesion, &c_parent, &c_blockTree)); @@ -16006,17 +16413,17 @@ SEXP R_igraph_cohesive_blocks(SEXP graph) { PROTECT(r_names=NEW_CHARACTER(4)); PROTECT(blocks=Ry_igraph_vector_int_list_to_SEXPp1(&c_blocks)); igraph_vector_int_list_destroy(&c_blocks); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(cohesion=Ry_igraph_vector_int_to_SEXP(&c_cohesion)); igraph_vector_int_destroy(&c_cohesion); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(parent=Ry_igraph_vector_int_to_SEXPp1(&c_parent)); igraph_vector_int_destroy(&c_parent); - IGRAPH_FINALLY_CLEAN(1); - IGRAPH_FINALLY(igraph_destroy, &c_blockTree); + IGRAPH_LOCAL_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_blockTree); PROTECT(blockTree=Ry_igraph_to_SEXP(&c_blockTree)); IGRAPH_I_DESTROY(&c_blockTree); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, blocks); SET_VECTOR_ELT(r_result, 1, cohesion); SET_VECTOR_ELT(r_result, 2, parent); @@ -16043,10 +16450,11 @@ SEXP R_igraph_coreness(SEXP graph, SEXP mode) { SEXP cores; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_cores, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_cores); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_cores); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ IGRAPH_R_CHECK(igraph_coreness(&c_graph, &c_cores, c_mode)); @@ -16054,7 +16462,7 @@ SEXP R_igraph_coreness(SEXP graph, SEXP mode) { /* Convert output */ PROTECT(cores=Ry_igraph_vector_int_to_SEXP(&c_cores)); igraph_vector_int_destroy(&c_cores); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = cores; UNPROTECT(1); @@ -16071,6 +16479,7 @@ SEXP R_igraph_isoclass(SEXP graph) { SEXP isoclass; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_isoclass=0; @@ -16097,6 +16506,7 @@ SEXP R_igraph_isomorphic(SEXP graph1, SEXP graph2) { SEXP iso; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph1, &c_graph1); Rz_SEXP_to_igraph(graph2, &c_graph2); @@ -16123,17 +16533,18 @@ SEXP R_igraph_isoclass_subgraph(SEXP graph, SEXP vids) { SEXP isoclass; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(vids, &c_vids)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vids); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vids); c_isoclass=0; /* Call igraph */ IGRAPH_R_CHECK(igraph_isoclass_subgraph(&c_graph, &c_vids, &c_isoclass)); /* Convert output */ igraph_vector_int_destroy(&c_vids); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(isoclass=NEW_NUMERIC(1)); REAL(isoclass)[0]=(double) c_isoclass; r_result = isoclass; @@ -16154,6 +16565,7 @@ SEXP R_igraph_isoclass_create(SEXP size, SEXP number, SEXP directed) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(size); c_size = (igraph_integer_t) REAL(size)[0]; @@ -16165,10 +16577,10 @@ SEXP R_igraph_isoclass_create(SEXP size, SEXP number, SEXP directed) { IGRAPH_R_CHECK(igraph_isoclass_create(&c_graph, c_size, c_number, c_directed)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -16197,6 +16609,7 @@ SEXP R_igraph_isomorphic_vf2(SEXP graph1, SEXP graph2, SEXP vertex_color1, SEXP SEXP map21; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph1, &c_graph1); Rz_SEXP_to_igraph(graph2, &c_graph2); @@ -16205,29 +16618,29 @@ SEXP R_igraph_isomorphic_vf2(SEXP graph1, SEXP graph2, SEXP vertex_color1, SEXP } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_color1, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vertex_color1); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_color1); if (!Rf_isNull(vertex_color2)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color2, &c_vertex_color2)); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_color2, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vertex_color2); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_color2); if (!Rf_isNull(edge_color1)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color1, &c_edge_color1)); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_color1, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edge_color1); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_color1); if (!Rf_isNull(edge_color2)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color2, &c_edge_color2)); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_color2, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edge_color2); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_color2); IGRAPH_R_CHECK(igraph_vector_int_init(&c_map12, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_map12); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_map12); IGRAPH_R_CHECK(igraph_vector_int_init(&c_map21, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_map21); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_map21); /* Call igraph */ IGRAPH_R_CHECK(igraph_isomorphic_vf2(&c_graph1, &c_graph2, (Rf_isNull(vertex_color1) ? 0 : &c_vertex_color1), (Rf_isNull(vertex_color2) ? 0 : &c_vertex_color2), (Rf_isNull(edge_color1) ? 0 : &c_edge_color1), (Rf_isNull(edge_color2) ? 0 : &c_edge_color2), &c_iso, &c_map12, &c_map21, 0, 0, 0)); @@ -16235,21 +16648,21 @@ SEXP R_igraph_isomorphic_vf2(SEXP graph1, SEXP graph2, SEXP vertex_color1, SEXP PROTECT(r_result=NEW_LIST(3)); PROTECT(r_names=NEW_CHARACTER(3)); igraph_vector_int_destroy(&c_vertex_color1); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vertex_color2); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_edge_color1); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_edge_color2); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(iso=NEW_LOGICAL(1)); LOGICAL(iso)[0]=c_iso; PROTECT(map12=Ry_igraph_vector_int_to_SEXPp1(&c_map12)); igraph_vector_int_destroy(&c_map12); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(map21=Ry_igraph_vector_int_to_SEXPp1(&c_map21)); igraph_vector_int_destroy(&c_map21); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, iso); SET_VECTOR_ELT(r_result, 1, map12); SET_VECTOR_ELT(r_result, 2, map21); @@ -16284,6 +16697,7 @@ SEXP R_igraph_get_isomorphisms_vf2_callback(SEXP graph1, SEXP graph2, SEXP verte SEXP map21; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph1, &c_graph1); Rz_SEXP_to_igraph(graph2, &c_graph2); @@ -16292,29 +16706,29 @@ SEXP R_igraph_get_isomorphisms_vf2_callback(SEXP graph1, SEXP graph2, SEXP verte } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_color1, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vertex_color1); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_color1); if (!Rf_isNull(vertex_color2)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color2, &c_vertex_color2)); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_color2, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vertex_color2); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_color2); if (!Rf_isNull(edge_color1)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color1, &c_edge_color1)); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_color1, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edge_color1); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_color1); if (!Rf_isNull(edge_color2)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color2, &c_edge_color2)); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_color2, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edge_color2); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_color2); IGRAPH_R_CHECK(igraph_vector_int_init(&c_map12, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_map12); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_map12); IGRAPH_R_CHECK(igraph_vector_int_init(&c_map21, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_map21); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_map21); /* Call igraph */ IGRAPH_R_CHECK(igraph_get_isomorphisms_vf2_callback(&c_graph1, &c_graph2, (Rf_isNull(vertex_color1) ? 0 : &c_vertex_color1), (Rf_isNull(vertex_color2) ? 0 : &c_vertex_color2), (Rf_isNull(edge_color1) ? 0 : &c_edge_color1), (Rf_isNull(edge_color2) ? 0 : &c_edge_color2), &c_map12, &c_map21, 0, 0, 0, 0)); @@ -16322,19 +16736,19 @@ SEXP R_igraph_get_isomorphisms_vf2_callback(SEXP graph1, SEXP graph2, SEXP verte PROTECT(r_result=NEW_LIST(2)); PROTECT(r_names=NEW_CHARACTER(2)); igraph_vector_int_destroy(&c_vertex_color1); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vertex_color2); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_edge_color1); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_edge_color2); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(map12=Ry_igraph_vector_int_to_SEXPp1(&c_map12)); igraph_vector_int_destroy(&c_map12); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(map21=Ry_igraph_vector_int_to_SEXPp1(&c_map21)); igraph_vector_int_destroy(&c_map21); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, map12); SET_VECTOR_ELT(r_result, 1, map21); SET_STRING_ELT(r_names, 0, Rf_mkChar("map12")); @@ -16364,6 +16778,7 @@ SEXP R_igraph_count_isomorphisms_vf2(SEXP graph1, SEXP graph2, SEXP vertex_color SEXP count; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph1, &c_graph1); Rz_SEXP_to_igraph(graph2, &c_graph2); @@ -16372,38 +16787,38 @@ SEXP R_igraph_count_isomorphisms_vf2(SEXP graph1, SEXP graph2, SEXP vertex_color } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_color1, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vertex_color1); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_color1); if (!Rf_isNull(vertex_color2)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color2, &c_vertex_color2)); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_color2, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vertex_color2); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_color2); if (!Rf_isNull(edge_color1)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color1, &c_edge_color1)); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_color1, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edge_color1); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_color1); if (!Rf_isNull(edge_color2)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color2, &c_edge_color2)); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_color2, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edge_color2); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_color2); c_count=0; /* Call igraph */ IGRAPH_R_CHECK(igraph_count_isomorphisms_vf2(&c_graph1, &c_graph2, (Rf_isNull(vertex_color1) ? 0 : &c_vertex_color1), (Rf_isNull(vertex_color2) ? 0 : &c_vertex_color2), (Rf_isNull(edge_color1) ? 0 : &c_edge_color1), (Rf_isNull(edge_color2) ? 0 : &c_edge_color2), &c_count, 0, 0, 0)); /* Convert output */ igraph_vector_int_destroy(&c_vertex_color1); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vertex_color2); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_edge_color1); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_edge_color2); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(count=NEW_NUMERIC(1)); REAL(count)[0]=(double) c_count; r_result = count; @@ -16430,6 +16845,7 @@ SEXP R_igraph_get_isomorphisms_vf2(SEXP graph1, SEXP graph2, SEXP vertex_color1, SEXP maps; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph1, &c_graph1); Rz_SEXP_to_igraph(graph2, &c_graph2); @@ -16438,42 +16854,42 @@ SEXP R_igraph_get_isomorphisms_vf2(SEXP graph1, SEXP graph2, SEXP vertex_color1, } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_color1, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vertex_color1); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_color1); if (!Rf_isNull(vertex_color2)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color2, &c_vertex_color2)); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_color2, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vertex_color2); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_color2); if (!Rf_isNull(edge_color1)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color1, &c_edge_color1)); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_color1, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edge_color1); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_color1); if (!Rf_isNull(edge_color2)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color2, &c_edge_color2)); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_color2, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edge_color2); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_color2); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_maps, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_maps); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_maps); /* Call igraph */ IGRAPH_R_CHECK(igraph_get_isomorphisms_vf2(&c_graph1, &c_graph2, (Rf_isNull(vertex_color1) ? 0 : &c_vertex_color1), (Rf_isNull(vertex_color2) ? 0 : &c_vertex_color2), (Rf_isNull(edge_color1) ? 0 : &c_edge_color1), (Rf_isNull(edge_color2) ? 0 : &c_edge_color2), &c_maps, 0, 0, 0)); /* Convert output */ igraph_vector_int_destroy(&c_vertex_color1); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vertex_color2); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_edge_color1); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_edge_color2); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(maps=Ry_igraph_vector_int_list_to_SEXP(&c_maps)); igraph_vector_int_list_destroy(&c_maps); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = maps; UNPROTECT(1); @@ -16491,6 +16907,7 @@ SEXP R_igraph_subisomorphic(SEXP graph1, SEXP graph2) { SEXP iso; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph1, &c_graph1); Rz_SEXP_to_igraph(graph2, &c_graph2); @@ -16528,6 +16945,7 @@ SEXP R_igraph_subisomorphic_vf2(SEXP graph1, SEXP graph2, SEXP vertex_color1, SE SEXP map21; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph1, &c_graph1); Rz_SEXP_to_igraph(graph2, &c_graph2); @@ -16536,29 +16954,29 @@ SEXP R_igraph_subisomorphic_vf2(SEXP graph1, SEXP graph2, SEXP vertex_color1, SE } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_color1, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vertex_color1); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_color1); if (!Rf_isNull(vertex_color2)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color2, &c_vertex_color2)); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_color2, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vertex_color2); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_color2); if (!Rf_isNull(edge_color1)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color1, &c_edge_color1)); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_color1, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edge_color1); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_color1); if (!Rf_isNull(edge_color2)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color2, &c_edge_color2)); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_color2, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edge_color2); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_color2); IGRAPH_R_CHECK(igraph_vector_int_init(&c_map12, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_map12); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_map12); IGRAPH_R_CHECK(igraph_vector_int_init(&c_map21, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_map21); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_map21); /* Call igraph */ IGRAPH_R_CHECK(igraph_subisomorphic_vf2(&c_graph1, &c_graph2, (Rf_isNull(vertex_color1) ? 0 : &c_vertex_color1), (Rf_isNull(vertex_color2) ? 0 : &c_vertex_color2), (Rf_isNull(edge_color1) ? 0 : &c_edge_color1), (Rf_isNull(edge_color2) ? 0 : &c_edge_color2), &c_iso, &c_map12, &c_map21, 0, 0, 0)); @@ -16566,21 +16984,21 @@ SEXP R_igraph_subisomorphic_vf2(SEXP graph1, SEXP graph2, SEXP vertex_color1, SE PROTECT(r_result=NEW_LIST(3)); PROTECT(r_names=NEW_CHARACTER(3)); igraph_vector_int_destroy(&c_vertex_color1); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vertex_color2); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_edge_color1); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_edge_color2); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(iso=NEW_LOGICAL(1)); LOGICAL(iso)[0]=c_iso; PROTECT(map12=Ry_igraph_vector_int_to_SEXPp1(&c_map12)); igraph_vector_int_destroy(&c_map12); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(map21=Ry_igraph_vector_int_to_SEXPp1(&c_map21)); igraph_vector_int_destroy(&c_map21); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, iso); SET_VECTOR_ELT(r_result, 1, map12); SET_VECTOR_ELT(r_result, 2, map21); @@ -16612,6 +17030,7 @@ SEXP R_igraph_count_subisomorphisms_vf2(SEXP graph1, SEXP graph2, SEXP vertex_co SEXP count; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph1, &c_graph1); Rz_SEXP_to_igraph(graph2, &c_graph2); @@ -16620,38 +17039,38 @@ SEXP R_igraph_count_subisomorphisms_vf2(SEXP graph1, SEXP graph2, SEXP vertex_co } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_color1, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vertex_color1); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_color1); if (!Rf_isNull(vertex_color2)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color2, &c_vertex_color2)); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_color2, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vertex_color2); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_color2); if (!Rf_isNull(edge_color1)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color1, &c_edge_color1)); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_color1, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edge_color1); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_color1); if (!Rf_isNull(edge_color2)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color2, &c_edge_color2)); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_color2, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edge_color2); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_color2); c_count=0; /* Call igraph */ IGRAPH_R_CHECK(igraph_count_subisomorphisms_vf2(&c_graph1, &c_graph2, (Rf_isNull(vertex_color1) ? 0 : &c_vertex_color1), (Rf_isNull(vertex_color2) ? 0 : &c_vertex_color2), (Rf_isNull(edge_color1) ? 0 : &c_edge_color1), (Rf_isNull(edge_color2) ? 0 : &c_edge_color2), &c_count, 0, 0, 0)); /* Convert output */ igraph_vector_int_destroy(&c_vertex_color1); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vertex_color2); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_edge_color1); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_edge_color2); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(count=NEW_NUMERIC(1)); REAL(count)[0]=(double) c_count; r_result = count; @@ -16678,6 +17097,7 @@ SEXP R_igraph_get_subisomorphisms_vf2(SEXP graph1, SEXP graph2, SEXP vertex_colo SEXP maps; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph1, &c_graph1); Rz_SEXP_to_igraph(graph2, &c_graph2); @@ -16686,42 +17106,42 @@ SEXP R_igraph_get_subisomorphisms_vf2(SEXP graph1, SEXP graph2, SEXP vertex_colo } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_color1, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vertex_color1); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_color1); if (!Rf_isNull(vertex_color2)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color2, &c_vertex_color2)); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_color2, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vertex_color2); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_color2); if (!Rf_isNull(edge_color1)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color1, &c_edge_color1)); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_color1, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edge_color1); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_color1); if (!Rf_isNull(edge_color2)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color2, &c_edge_color2)); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_color2, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edge_color2); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_color2); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_maps, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_maps); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_maps); /* Call igraph */ IGRAPH_R_CHECK(igraph_get_subisomorphisms_vf2(&c_graph1, &c_graph2, (Rf_isNull(vertex_color1) ? 0 : &c_vertex_color1), (Rf_isNull(vertex_color2) ? 0 : &c_vertex_color2), (Rf_isNull(edge_color1) ? 0 : &c_edge_color1), (Rf_isNull(edge_color2) ? 0 : &c_edge_color2), &c_maps, 0, 0, 0)); /* Convert output */ igraph_vector_int_destroy(&c_vertex_color1); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_vertex_color2); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_edge_color1); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_edge_color2); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(maps=Ry_igraph_vector_int_list_to_SEXP(&c_maps)); igraph_vector_int_list_destroy(&c_maps); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = maps; UNPROTECT(1); @@ -16742,6 +17162,7 @@ SEXP R_igraph_canonical_permutation(SEXP graph, SEXP colors, SEXP sh) { SEXP info; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(colors)) { @@ -16749,9 +17170,9 @@ SEXP R_igraph_canonical_permutation(SEXP graph, SEXP colors, SEXP sh) { } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_colors, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_colors); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_colors); IGRAPH_R_CHECK(igraph_vector_int_init(&c_labeling, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_labeling); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_labeling); c_sh = (igraph_bliss_sh_t) Rf_asInteger(sh); /* Call igraph */ IGRAPH_R_CHECK(igraph_canonical_permutation(&c_graph, (Rf_isNull(colors) ? 0 : &c_colors), &c_labeling, c_sh, &c_info)); @@ -16760,10 +17181,10 @@ SEXP R_igraph_canonical_permutation(SEXP graph, SEXP colors, SEXP sh) { PROTECT(r_result=NEW_LIST(2)); PROTECT(r_names=NEW_CHARACTER(2)); igraph_vector_int_destroy(&c_colors); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(labeling=Ry_igraph_vector_int_to_SEXPp1(&c_labeling)); igraph_vector_int_destroy(&c_labeling); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(info=Ry_igraph_bliss_info_to_SEXP(&c_info)); if (c_info.group_size) { free(c_info.group_size); } SET_VECTOR_ELT(r_result, 0, labeling); @@ -16788,20 +17209,21 @@ SEXP R_igraph_permute_vertices(SEXP graph, SEXP permutation) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); Rz_SEXP_to_vector_int_copy(permutation, &c_permutation); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_permutation); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_permutation); /* Call igraph */ IGRAPH_R_CHECK(igraph_permute_vertices(&c_graph, &c_res, &c_permutation)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_res); PROTECT(res=Ry_igraph_to_SEXP(&c_res)); IGRAPH_I_DESTROY(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_permutation); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -16830,6 +17252,7 @@ SEXP R_igraph_isomorphic_bliss(SEXP graph1, SEXP graph2, SEXP colors1, SEXP colo SEXP info2; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph1, &c_graph1); Rz_SEXP_to_igraph(graph2, &c_graph2); @@ -16838,17 +17261,17 @@ SEXP R_igraph_isomorphic_bliss(SEXP graph1, SEXP graph2, SEXP colors1, SEXP colo } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_colors1, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_colors1); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_colors1); if (!Rf_isNull(colors2)) { IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(colors2, &c_colors2)); } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_colors2, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_colors2); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_colors2); IGRAPH_R_CHECK(igraph_vector_int_init(&c_map12, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_map12); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_map12); IGRAPH_R_CHECK(igraph_vector_int_init(&c_map21, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_map21); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_map21); c_sh = (igraph_bliss_sh_t) Rf_asInteger(sh); /* Call igraph */ IGRAPH_R_CHECK(igraph_isomorphic_bliss(&c_graph1, &c_graph2, (Rf_isNull(colors1) ? 0 : &c_colors1), (Rf_isNull(colors2) ? 0 : &c_colors2), &c_iso, &c_map12, &c_map21, c_sh, &c_info1, &c_info2)); @@ -16857,17 +17280,17 @@ SEXP R_igraph_isomorphic_bliss(SEXP graph1, SEXP graph2, SEXP colors1, SEXP colo PROTECT(r_result=NEW_LIST(5)); PROTECT(r_names=NEW_CHARACTER(5)); igraph_vector_int_destroy(&c_colors1); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_colors2); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(iso=NEW_LOGICAL(1)); LOGICAL(iso)[0]=c_iso; PROTECT(map12=Ry_igraph_vector_int_to_SEXPp1(&c_map12)); igraph_vector_int_destroy(&c_map12); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(map21=Ry_igraph_vector_int_to_SEXPp1(&c_map21)); igraph_vector_int_destroy(&c_map21); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(info1=Ry_igraph_bliss_info_to_SEXP(&c_info1)); if (c_info1.group_size) { free(c_info1.group_size); } PROTECT(info2=Ry_igraph_bliss_info_to_SEXP(&c_info2)); @@ -16901,6 +17324,7 @@ SEXP R_igraph_count_automorphisms(SEXP graph, SEXP colors, SEXP sh) { SEXP info; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(colors)) { @@ -16908,14 +17332,14 @@ SEXP R_igraph_count_automorphisms(SEXP graph, SEXP colors, SEXP sh) { } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_colors, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_colors); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_colors); c_sh = (igraph_bliss_sh_t) Rf_asInteger(sh); /* Call igraph */ IGRAPH_R_CHECK(igraph_count_automorphisms(&c_graph, (Rf_isNull(colors) ? 0 : &c_colors), c_sh, &c_info)); /* Convert output */ igraph_vector_int_destroy(&c_colors); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(info=Ry_igraph_bliss_info_to_SEXP(&c_info)); if (c_info.group_size) { free(c_info.group_size); } r_result = info; @@ -16938,6 +17362,7 @@ SEXP R_igraph_automorphism_group(SEXP graph, SEXP colors, SEXP sh) { SEXP info; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(colors)) { @@ -16945,9 +17370,9 @@ SEXP R_igraph_automorphism_group(SEXP graph, SEXP colors, SEXP sh) { } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_colors, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_colors); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_colors); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_generators, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_generators); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_generators); c_sh = (igraph_bliss_sh_t) Rf_asInteger(sh); /* Call igraph */ IGRAPH_R_CHECK(igraph_automorphism_group(&c_graph, (Rf_isNull(colors) ? 0 : &c_colors), &c_generators, c_sh, &c_info)); @@ -16956,10 +17381,10 @@ SEXP R_igraph_automorphism_group(SEXP graph, SEXP colors, SEXP sh) { PROTECT(r_result=NEW_LIST(2)); PROTECT(r_names=NEW_CHARACTER(2)); igraph_vector_int_destroy(&c_colors); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(generators=Ry_igraph_vector_int_list_to_SEXPp1(&c_generators)); igraph_vector_int_list_destroy(&c_generators); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(info=Ry_igraph_bliss_info_to_SEXP(&c_info)); if (c_info.group_size) { free(c_info.group_size); } SET_VECTOR_ELT(r_result, 0, generators); @@ -16987,28 +17412,29 @@ SEXP R_igraph_simplify_and_colorize(SEXP graph) { SEXP edge_color; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_color, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vertex_color); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_color); IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_color, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edge_color); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_color); /* Call igraph */ IGRAPH_R_CHECK(igraph_simplify_and_colorize(&c_graph, &c_res, &c_vertex_color, &c_edge_color)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); PROTECT(r_names=NEW_CHARACTER(3)); - IGRAPH_FINALLY(igraph_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_res); PROTECT(res=Ry_igraph_to_SEXP(&c_res)); IGRAPH_I_DESTROY(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(vertex_color=Ry_igraph_vector_int_to_SEXP(&c_vertex_color)); igraph_vector_int_destroy(&c_vertex_color); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(edge_color=Ry_igraph_vector_int_to_SEXP(&c_edge_color)); igraph_vector_int_destroy(&c_edge_color); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, res); SET_VECTOR_ELT(r_result, 1, vertex_color); SET_VECTOR_ELT(r_result, 2, edge_color); @@ -17033,6 +17459,7 @@ SEXP R_igraph_graph_count(SEXP n, SEXP directed) { SEXP count; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; @@ -17063,19 +17490,20 @@ SEXP R_igraph_is_matching(SEXP graph, SEXP types, SEXP matching) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(types)) { Rz_SEXP_to_vector_bool(types, &c_types); } Rz_SEXP_to_vector_int_copy(matching, &c_matching); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_matching); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_matching); /* Call igraph */ IGRAPH_R_CHECK(igraph_is_matching(&c_graph, (Rf_isNull(types) ? 0 : &c_types), &c_matching, &c_res)); /* Convert output */ igraph_vector_int_destroy(&c_matching); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(res=NEW_LOGICAL(1)); LOGICAL(res)[0]=c_res; r_result = res; @@ -17096,19 +17524,20 @@ SEXP R_igraph_is_maximal_matching(SEXP graph, SEXP types, SEXP matching) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(types)) { Rz_SEXP_to_vector_bool(types, &c_types); } Rz_SEXP_to_vector_int_copy(matching, &c_matching); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_matching); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_matching); /* Call igraph */ IGRAPH_R_CHECK(igraph_is_maximal_matching(&c_graph, (Rf_isNull(types) ? 0 : &c_types), &c_matching, &c_res)); /* Convert output */ igraph_vector_int_destroy(&c_matching); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(res=NEW_LOGICAL(1)); LOGICAL(res)[0]=c_res; r_result = res; @@ -17134,12 +17563,13 @@ SEXP R_igraph_maximum_bipartite_matching(SEXP graph, SEXP types, SEXP weights, S SEXP matching; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); Rz_SEXP_to_vector_bool(types, &c_types); c_matching_size=0; IGRAPH_R_CHECK(igraph_vector_int_init(&c_matching, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_matching); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_matching); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } @@ -17157,7 +17587,7 @@ SEXP R_igraph_maximum_bipartite_matching(SEXP graph, SEXP types, SEXP weights, S REAL(matching_weight)[0]=c_matching_weight; PROTECT(matching=Ry_igraph_vector_int_to_SEXPp1(&c_matching)); igraph_vector_int_destroy(&c_matching); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, matching_size); SET_VECTOR_ELT(r_result, 1, matching_weight); SET_VECTOR_ELT(r_result, 2, matching); @@ -17191,6 +17621,7 @@ SEXP R_igraph_adjacency_spectral_embedding(SEXP graph, SEXP no, SEXP weights, SE SEXP D; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK_INT(no); @@ -17202,11 +17633,11 @@ SEXP R_igraph_adjacency_spectral_embedding(SEXP graph, SEXP no, SEXP weights, SE IGRAPH_R_CHECK_BOOL(scaled); c_scaled = LOGICAL(scaled)[0]; IGRAPH_R_CHECK(igraph_matrix_init(&c_X, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_X); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_X); IGRAPH_R_CHECK(igraph_matrix_init(&c_Y, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_Y); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_Y); IGRAPH_R_CHECK(igraph_vector_init(&c_D, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_D); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_D); Rz_SEXP_to_vector(cvec, &c_cvec); Rz_SEXP_to_igraph_arpack_options(options, &c_options); /* Call igraph */ @@ -17217,13 +17648,13 @@ SEXP R_igraph_adjacency_spectral_embedding(SEXP graph, SEXP no, SEXP weights, SE PROTECT(r_names=NEW_CHARACTER(4)); PROTECT(X=Ry_igraph_matrix_to_SEXP(&c_X)); igraph_matrix_destroy(&c_X); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(Y=Ry_igraph_matrix_to_SEXP(&c_Y)); igraph_matrix_destroy(&c_Y); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(D=Ry_igraph_vector_to_SEXP(&c_D)); igraph_vector_destroy(&c_D); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(options=Ry_igraph_arpack_options_to_SEXP(&c_options)); SET_VECTOR_ELT(r_result, 0, X); SET_VECTOR_ELT(r_result, 1, Y); @@ -17260,6 +17691,7 @@ SEXP R_igraph_laplacian_spectral_embedding(SEXP graph, SEXP no, SEXP weights, SE SEXP D; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK_INT(no); @@ -17272,11 +17704,11 @@ SEXP R_igraph_laplacian_spectral_embedding(SEXP graph, SEXP no, SEXP weights, SE IGRAPH_R_CHECK_BOOL(scaled); c_scaled = LOGICAL(scaled)[0]; IGRAPH_R_CHECK(igraph_matrix_init(&c_X, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_X); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_X); IGRAPH_R_CHECK(igraph_matrix_init(&c_Y, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_Y); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_Y); IGRAPH_R_CHECK(igraph_vector_init(&c_D, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_D); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_D); Rz_SEXP_to_igraph_arpack_options(options, &c_options); /* Call igraph */ IGRAPH_R_CHECK(igraph_laplacian_spectral_embedding(&c_graph, c_no, (Rf_isNull(weights) ? 0 : &c_weights), c_which, c_type, c_scaled, &c_X, &c_Y, &c_D, &c_options)); @@ -17286,13 +17718,13 @@ SEXP R_igraph_laplacian_spectral_embedding(SEXP graph, SEXP no, SEXP weights, SE PROTECT(r_names=NEW_CHARACTER(4)); PROTECT(X=Ry_igraph_matrix_to_SEXP(&c_X)); igraph_matrix_destroy(&c_X); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(Y=Ry_igraph_matrix_to_SEXP(&c_Y)); igraph_matrix_destroy(&c_Y); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(D=Ry_igraph_vector_to_SEXP(&c_D)); igraph_vector_destroy(&c_D); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(options=Ry_igraph_arpack_options_to_SEXP(&c_options)); SET_VECTOR_ELT(r_result, 0, X); SET_VECTOR_ELT(r_result, 1, Y); @@ -17329,20 +17761,21 @@ SEXP R_igraph_eigen_adjacency(SEXP graph, SEXP algorithm, SEXP which, SEXP optio SEXP cmplxvectors; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_algorithm = (igraph_eigen_algorithm_t) Rf_asInteger(algorithm); Rz_SEXP_to_igraph_eigen_which(which, &c_which); Rz_SEXP_to_igraph_arpack_options(options, &c_options); IGRAPH_R_CHECK(igraph_vector_init(&c_values, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_values); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_values); IGRAPH_R_CHECK(igraph_matrix_init(&c_vectors, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_vectors); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_vectors); IGRAPH_R_CHECK(igraph_vector_complex_init(&c_cmplxvalues, 0)); - IGRAPH_FINALLY(igraph_vector_complex_destroy, &c_cmplxvalues); + IGRAPH_LOCAL_FINALLY(igraph_vector_complex_destroy, &c_cmplxvalues); cmplxvalues=R_GlobalEnv; /* hack to have a non-NULL value */ IGRAPH_R_CHECK(igraph_matrix_complex_init(&c_cmplxvectors, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_complex_destroy, &c_cmplxvectors); + IGRAPH_LOCAL_FINALLY(igraph_matrix_complex_destroy, &c_cmplxvectors); cmplxvectors=R_GlobalEnv; /* hack to have a non-NULL value */ /* Call igraph */ IGRAPH_R_CHECK(igraph_eigen_adjacency(&c_graph, c_algorithm, &c_which, &c_options, 0, &c_values, &c_vectors, (Rf_isNull(cmplxvalues) ? NULL : &c_cmplxvalues), (Rf_isNull(cmplxvectors) ? NULL : &c_cmplxvectors))); @@ -17353,16 +17786,16 @@ SEXP R_igraph_eigen_adjacency(SEXP graph, SEXP algorithm, SEXP which, SEXP optio PROTECT(options=Ry_igraph_arpack_options_to_SEXP(&c_options)); PROTECT(values=Ry_igraph_vector_to_SEXP(&c_values)); igraph_vector_destroy(&c_values); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(vectors=Ry_igraph_matrix_to_SEXP(&c_vectors)); igraph_matrix_destroy(&c_vectors); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(cmplxvalues=Ry_igraph_0orvector_complex_to_SEXP(&c_cmplxvalues)); igraph_vector_complex_destroy(&c_cmplxvalues); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(cmplxvectors=Ry_igraph_0ormatrix_complex_to_SEXP(&c_cmplxvectors)); igraph_matrix_complex_destroy(&c_cmplxvectors); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, options); SET_VECTOR_ELT(r_result, 1, values); SET_VECTOR_ELT(r_result, 2, vectors); @@ -17392,6 +17825,7 @@ SEXP R_igraph_power_law_fit(SEXP data, SEXP xmin, SEXP force_continuous) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_vector(data, &c_data); IGRAPH_R_CHECK_REAL(xmin); @@ -17422,6 +17856,7 @@ SEXP R_igraph_sir(SEXP graph, SEXP beta, SEXP gamma, SEXP no_sim) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK_REAL(beta); @@ -17431,14 +17866,14 @@ SEXP R_igraph_sir(SEXP graph, SEXP beta, SEXP gamma, SEXP no_sim) { IGRAPH_R_CHECK_INT(no_sim); c_no_sim = (igraph_integer_t) REAL(no_sim)[0]; IGRAPH_R_CHECK(igraph_vector_ptr_init(&c_res, 0)); - IGRAPH_FINALLY(Ry_igraph_sirlist_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(Ry_igraph_sirlist_destroy, &c_res); /* Call igraph */ IGRAPH_R_CHECK(igraph_sir(&c_graph, c_beta, c_gamma, c_no_sim, &c_res)); /* Convert output */ PROTECT(res=Ry_igraph_sirlist_to_SEXP(&c_res)); Ry_igraph_sirlist_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -17456,10 +17891,11 @@ SEXP R_igraph_running_mean(SEXP data, SEXP binwidth) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_vector(data, &c_data); IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); IGRAPH_R_CHECK_INT(binwidth); c_binwidth = (igraph_integer_t) REAL(binwidth)[0]; /* Call igraph */ @@ -17468,7 +17904,7 @@ SEXP R_igraph_running_mean(SEXP data, SEXP binwidth) { /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); igraph_vector_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -17487,9 +17923,10 @@ SEXP R_igraph_random_sample(SEXP l, SEXP h, SEXP length) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK(igraph_vector_int_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_res); IGRAPH_R_CHECK_INT(l); c_l = (igraph_integer_t) REAL(l)[0]; IGRAPH_R_CHECK_INT(h); @@ -17502,7 +17939,7 @@ SEXP R_igraph_random_sample(SEXP l, SEXP h, SEXP length) { /* Convert output */ PROTECT(res=Ry_igraph_vector_int_to_SEXP(&c_res)); igraph_vector_int_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -17521,12 +17958,13 @@ SEXP R_igraph_convex_hull_2d(SEXP data) { SEXP rescoords; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_matrix(data, &c_data); IGRAPH_R_CHECK(igraph_vector_int_init(&c_resverts, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_resverts); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_resverts); IGRAPH_R_CHECK(igraph_matrix_init(&c_rescoords, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &c_rescoords); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_rescoords); /* Call igraph */ IGRAPH_R_CHECK(igraph_convex_hull_2d(&c_data, &c_resverts, &c_rescoords)); @@ -17535,10 +17973,10 @@ SEXP R_igraph_convex_hull_2d(SEXP data) { PROTECT(r_names=NEW_CHARACTER(2)); PROTECT(resverts=Ry_igraph_vector_int_to_SEXPp1(&c_resverts)); igraph_vector_int_destroy(&c_resverts); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(rescoords=Ry_igraph_matrix_to_SEXP(&c_rescoords)); igraph_matrix_destroy(&c_rescoords); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, resverts); SET_VECTOR_ELT(r_result, 1, rescoords); SET_STRING_ELT(r_names, 0, Rf_mkChar("resverts")); @@ -17560,6 +17998,7 @@ SEXP R_igraph_dim_select(SEXP sv) { SEXP dim; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_vector(sv, &c_sv); c_dim=0; @@ -17585,6 +18024,7 @@ SEXP R_igraph_almost_equals(SEXP a, SEXP b, SEXP eps) { double c_eps; igraph_bool_t c_result; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_REAL(a); c_a = REAL(a)[0]; @@ -17614,6 +18054,7 @@ SEXP R_igraph_cmp_epsilon(SEXP a, SEXP b, SEXP eps) { double c_eps; int c_result; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_REAL(a); c_a = REAL(a)[0]; @@ -17644,19 +18085,20 @@ SEXP R_igraph_solve_lsap(SEXP c, SEXP n) { SEXP p; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_matrix(c, &c_c); IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; IGRAPH_R_CHECK(igraph_vector_int_init(&c_p, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_p); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_p); /* Call igraph */ IGRAPH_R_CHECK(igraph_solve_lsap(&c_c, c_n, &c_p)); /* Convert output */ PROTECT(p=Ry_igraph_vector_int_to_SEXP(&c_p)); igraph_vector_int_destroy(&c_p); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = p; UNPROTECT(1); @@ -17676,12 +18118,13 @@ SEXP R_igraph_find_cycle(SEXP graph, SEXP mode) { SEXP edges; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertices, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vertices); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertices); IGRAPH_R_CHECK(igraph_vector_int_init(&c_edges, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edges); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edges); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ IGRAPH_R_CHECK(igraph_find_cycle(&c_graph, &c_vertices, &c_edges, c_mode)); @@ -17691,10 +18134,10 @@ SEXP R_igraph_find_cycle(SEXP graph, SEXP mode) { PROTECT(r_names=NEW_CHARACTER(2)); PROTECT(vertices=Ry_igraph_vector_int_to_SEXPp1(&c_vertices)); igraph_vector_int_destroy(&c_vertices); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(edges=Ry_igraph_vector_int_to_SEXPp1(&c_edges)); igraph_vector_int_destroy(&c_edges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, vertices); SET_VECTOR_ELT(r_result, 1, edges); SET_STRING_ELT(r_names, 0, Rf_mkChar("vertices")); @@ -17721,12 +18164,13 @@ SEXP R_igraph_simple_cycles(SEXP graph, SEXP mode, SEXP min_cycle_length, SEXP m SEXP edges; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_vertices, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_vertices); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_vertices); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_edges, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_edges); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_edges); c_mode = (igraph_neimode_t) Rf_asInteger(mode); IGRAPH_R_CHECK_INT(min_cycle_length); c_min_cycle_length = (igraph_integer_t) REAL(min_cycle_length)[0]; @@ -17740,10 +18184,10 @@ SEXP R_igraph_simple_cycles(SEXP graph, SEXP mode, SEXP min_cycle_length, SEXP m PROTECT(r_names=NEW_CHARACTER(2)); PROTECT(vertices=Ry_igraph_vector_int_list_to_SEXPp1(&c_vertices)); igraph_vector_int_list_destroy(&c_vertices); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(edges=Ry_igraph_vector_int_list_to_SEXPp1(&c_edges)); igraph_vector_int_list_destroy(&c_edges); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, vertices); SET_VECTOR_ELT(r_result, 1, edges); SET_STRING_ELT(r_names, 0, Rf_mkChar("vertices")); @@ -17767,6 +18211,7 @@ SEXP R_igraph_is_eulerian(SEXP graph) { SEXP has_cycle; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ @@ -17802,12 +18247,13 @@ SEXP R_igraph_eulerian_path(SEXP graph) { SEXP vertex_res; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_res, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edge_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_res); IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_res, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vertex_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_res); /* Call igraph */ IGRAPH_R_CHECK(igraph_eulerian_path(&c_graph, &c_edge_res, &c_vertex_res)); @@ -17816,10 +18262,10 @@ SEXP R_igraph_eulerian_path(SEXP graph) { PROTECT(r_names=NEW_CHARACTER(2)); PROTECT(edge_res=Ry_igraph_vector_int_to_SEXPp1(&c_edge_res)); igraph_vector_int_destroy(&c_edge_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(vertex_res=Ry_igraph_vector_int_to_SEXPp1(&c_vertex_res)); igraph_vector_int_destroy(&c_vertex_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, edge_res); SET_VECTOR_ELT(r_result, 1, vertex_res); SET_STRING_ELT(r_names, 0, Rf_mkChar("epath")); @@ -17843,12 +18289,13 @@ SEXP R_igraph_eulerian_cycle(SEXP graph) { SEXP vertex_res; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_res, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edge_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_res); IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_res, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vertex_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_res); /* Call igraph */ IGRAPH_R_CHECK(igraph_eulerian_cycle(&c_graph, &c_edge_res, &c_vertex_res)); @@ -17857,10 +18304,10 @@ SEXP R_igraph_eulerian_cycle(SEXP graph) { PROTECT(r_names=NEW_CHARACTER(2)); PROTECT(edge_res=Ry_igraph_vector_int_to_SEXPp1(&c_edge_res)); igraph_vector_int_destroy(&c_edge_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(vertex_res=Ry_igraph_vector_int_to_SEXPp1(&c_vertex_res)); igraph_vector_int_destroy(&c_vertex_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, edge_res); SET_VECTOR_ELT(r_result, 1, vertex_res); SET_STRING_ELT(r_names, 0, Rf_mkChar("epath")); @@ -17885,10 +18332,11 @@ SEXP R_igraph_fundamental_cycles(SEXP graph, SEXP start, SEXP bfs_cutoff, SEXP w SEXP basis; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_basis, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_basis); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_basis); if (!Rf_isNull(start)) { c_start = (igraph_integer_t) REAL(start)[0]; } @@ -17903,7 +18351,7 @@ SEXP R_igraph_fundamental_cycles(SEXP graph, SEXP start, SEXP bfs_cutoff, SEXP w /* Convert output */ PROTECT(basis=Ry_igraph_vector_int_list_to_SEXPp1(&c_basis)); igraph_vector_int_list_destroy(&c_basis); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = basis; UNPROTECT(1); @@ -17924,10 +18372,11 @@ SEXP R_igraph_minimum_cycle_basis(SEXP graph, SEXP bfs_cutoff, SEXP complete, SE SEXP basis; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_basis, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &c_basis); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_basis); IGRAPH_R_CHECK_INT(bfs_cutoff); c_bfs_cutoff = (igraph_integer_t) REAL(bfs_cutoff)[0]; IGRAPH_R_CHECK_BOOL(complete); @@ -17943,7 +18392,7 @@ SEXP R_igraph_minimum_cycle_basis(SEXP graph, SEXP bfs_cutoff, SEXP complete, SE /* Convert output */ PROTECT(basis=Ry_igraph_vector_int_list_to_SEXPp1(&c_basis)); igraph_vector_int_list_destroy(&c_basis); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = basis; UNPROTECT(1); @@ -17963,6 +18412,7 @@ SEXP R_igraph_is_tree(SEXP graph, SEXP mode) { SEXP root; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_root = -1; @@ -18001,10 +18451,11 @@ SEXP R_igraph_is_forest(SEXP graph, SEXP mode) { SEXP roots; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_roots, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_roots); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_roots); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ IGRAPH_R_CHECK(igraph_is_forest(&c_graph, &c_res, &c_roots, c_mode)); @@ -18016,7 +18467,7 @@ SEXP R_igraph_is_forest(SEXP graph, SEXP mode) { LOGICAL(res)[0]=c_res; PROTECT(roots=Ry_igraph_vector_int_to_SEXPp1(&c_roots)); igraph_vector_int_destroy(&c_roots); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, res); SET_VECTOR_ELT(r_result, 1, roots); SET_STRING_ELT(r_names, 0, Rf_mkChar("res")); @@ -18038,19 +18489,20 @@ SEXP R_igraph_from_prufer(SEXP prufer) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_vector_int_copy(prufer, &c_prufer); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_prufer); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_prufer); /* Call igraph */ IGRAPH_R_CHECK(igraph_from_prufer(&c_graph, &c_prufer)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_prufer); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -18067,17 +18519,18 @@ SEXP R_igraph_to_prufer(SEXP graph) { SEXP prufer; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_prufer, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_prufer); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_prufer); /* Call igraph */ IGRAPH_R_CHECK(igraph_to_prufer(&c_graph, &c_prufer)); /* Convert output */ PROTECT(prufer=Ry_igraph_vector_int_to_SEXPp1(&c_prufer)); igraph_vector_int_destroy(&c_prufer); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = prufer; UNPROTECT(1); @@ -18095,20 +18548,21 @@ SEXP R_igraph_tree_from_parent_vector(SEXP parents, SEXP type) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_vector_int_copy(parents, &c_parents); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_parents); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_parents); c_type = (igraph_tree_mode_t) Rf_asInteger(type); /* Call igraph */ IGRAPH_R_CHECK(igraph_tree_from_parent_vector(&c_graph, &c_parents, c_type)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); igraph_vector_int_destroy(&c_parents); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -18125,6 +18579,7 @@ SEXP R_igraph_is_complete(SEXP graph) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ @@ -18150,10 +18605,11 @@ SEXP R_igraph_minimum_spanning_tree(SEXP graph, SEXP weights) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_res); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } @@ -18163,7 +18619,7 @@ SEXP R_igraph_minimum_spanning_tree(SEXP graph, SEXP weights) { /* Convert output */ PROTECT(res=Ry_igraph_vector_int_to_SEXPp1(&c_res)); igraph_vector_int_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -18180,16 +18636,17 @@ SEXP R_igraph_minimum_spanning_tree_unweighted(SEXP graph) { SEXP mst; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ IGRAPH_R_CHECK(igraph_minimum_spanning_tree_unweighted(&c_graph, &c_mst)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_mst); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_mst); PROTECT(mst=Ry_igraph_to_SEXP(&c_mst)); IGRAPH_I_DESTROY(&c_mst); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = mst; UNPROTECT(1); @@ -18207,6 +18664,7 @@ SEXP R_igraph_minimum_spanning_tree_prim(SEXP graph, SEXP weights) { SEXP mst; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); Rz_SEXP_to_vector(weights, &c_weights); @@ -18214,10 +18672,10 @@ SEXP R_igraph_minimum_spanning_tree_prim(SEXP graph, SEXP weights) { IGRAPH_R_CHECK(igraph_minimum_spanning_tree_prim(&c_graph, &c_mst, &c_weights)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_mst); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_mst); PROTECT(mst=Ry_igraph_to_SEXP(&c_mst)); IGRAPH_I_DESTROY(&c_mst); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = mst; UNPROTECT(1); @@ -18235,10 +18693,11 @@ SEXP R_igraph_random_spanning_tree(SEXP graph, SEXP vid) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_res, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_res); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_res); if (!Rf_isNull(vid)) { c_vid = (igraph_integer_t) REAL(vid)[0]; } @@ -18248,7 +18707,7 @@ SEXP R_igraph_random_spanning_tree(SEXP graph, SEXP vid) { /* Convert output */ PROTECT(res=Ry_igraph_vector_int_to_SEXPp1(&c_res)); igraph_vector_int_destroy(&c_res); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = res; UNPROTECT(1); @@ -18267,6 +18726,7 @@ SEXP R_igraph_tree_game(SEXP n, SEXP directed, SEXP method) { SEXP graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; @@ -18277,10 +18737,10 @@ SEXP R_igraph_tree_game(SEXP n, SEXP directed, SEXP method) { IGRAPH_R_CHECK(igraph_tree_game(&c_graph, c_n, c_directed, c_method)); /* Convert output */ - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -18298,10 +18758,11 @@ SEXP R_igraph_vertex_coloring_greedy(SEXP graph, SEXP heuristic) { SEXP colors; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_int_init(&c_colors, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_colors); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_colors); c_heuristic = (igraph_coloring_greedy_t) Rf_asInteger(heuristic); /* Call igraph */ IGRAPH_R_CHECK(igraph_vertex_coloring_greedy(&c_graph, &c_colors, c_heuristic)); @@ -18309,7 +18770,7 @@ SEXP R_igraph_vertex_coloring_greedy(SEXP graph, SEXP heuristic) { /* Convert output */ PROTECT(colors=Ry_igraph_vector_int_to_SEXP(&c_colors)); igraph_vector_int_destroy(&c_colors); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = colors; UNPROTECT(1); @@ -18327,6 +18788,7 @@ SEXP R_igraph_is_vertex_coloring(SEXP graph, SEXP types) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(types)) { @@ -18334,13 +18796,13 @@ SEXP R_igraph_is_vertex_coloring(SEXP graph, SEXP types) { } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_types, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_types); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_types); /* Call igraph */ IGRAPH_R_CHECK(igraph_is_vertex_coloring(&c_graph, &c_types, &c_res)); /* Convert output */ igraph_vector_int_destroy(&c_types); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(res=NEW_LOGICAL(1)); LOGICAL(res)[0]=c_res; r_result = res; @@ -18362,6 +18824,7 @@ SEXP R_igraph_is_bipartite_coloring(SEXP graph, SEXP types) { SEXP mode; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); Rz_SEXP_to_vector_bool(types, &c_types); @@ -18388,6 +18851,7 @@ SEXP R_igraph_is_edge_coloring(SEXP graph, SEXP types) { SEXP res; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(types)) { @@ -18395,13 +18859,13 @@ SEXP R_igraph_is_edge_coloring(SEXP graph, SEXP types) { } else { IGRAPH_R_CHECK(igraph_vector_int_init(&c_types, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_types); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_types); /* Call igraph */ IGRAPH_R_CHECK(igraph_is_edge_coloring(&c_graph, &c_types, &c_res)); /* Convert output */ igraph_vector_int_destroy(&c_types); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(res=NEW_LOGICAL(1)); LOGICAL(res)[0]=c_res; r_result = res; @@ -18423,13 +18887,14 @@ SEXP R_igraph_deterministic_optimal_imitation(SEXP graph, SEXP vid, SEXP optimal igraph_neimode_t c_mode; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_vid = (igraph_integer_t) REAL(vid)[0]; c_optimality = (igraph_optimal_t) Rf_asInteger(optimality); Rz_SEXP_to_vector(quantities, &c_quantities); IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(strategies, &c_strategies)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_strategies); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_strategies); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ IGRAPH_R_CHECK(igraph_deterministic_optimal_imitation(&c_graph, c_vid, c_optimality, &c_quantities, &c_strategies, c_mode)); @@ -18437,7 +18902,7 @@ SEXP R_igraph_deterministic_optimal_imitation(SEXP graph, SEXP vid, SEXP optimal /* Convert output */ PROTECT(strategies=Ry_igraph_vector_int_to_SEXP(&c_strategies)); igraph_vector_int_destroy(&c_strategies); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = strategies; UNPROTECT(1); @@ -18456,15 +18921,16 @@ SEXP R_igraph_moran_process(SEXP graph, SEXP weights, SEXP quantities, SEXP stra igraph_neimode_t c_mode; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } IGRAPH_R_CHECK(Rz_SEXP_to_vector_copy(quantities, &c_quantities)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_quantities); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_quantities); IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(strategies, &c_strategies)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_strategies); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_strategies); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ IGRAPH_R_CHECK(igraph_moran_process(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_quantities, &c_strategies, c_mode)); @@ -18474,10 +18940,10 @@ SEXP R_igraph_moran_process(SEXP graph, SEXP weights, SEXP quantities, SEXP stra PROTECT(r_names=NEW_CHARACTER(2)); PROTECT(quantities=Ry_igraph_vector_to_SEXP(&c_quantities)); igraph_vector_destroy(&c_quantities); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(strategies=Ry_igraph_vector_int_to_SEXP(&c_strategies)); igraph_vector_int_destroy(&c_strategies); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, quantities); SET_VECTOR_ELT(r_result, 1, strategies); SET_STRING_ELT(r_names, 0, Rf_mkChar("quantities")); @@ -18502,6 +18968,7 @@ SEXP R_igraph_roulette_wheel_imitation(SEXP graph, SEXP vid, SEXP is_local, SEXP igraph_neimode_t c_mode; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_vid = (igraph_integer_t) REAL(vid)[0]; @@ -18509,7 +18976,7 @@ SEXP R_igraph_roulette_wheel_imitation(SEXP graph, SEXP vid, SEXP is_local, SEXP c_is_local = LOGICAL(is_local)[0]; Rz_SEXP_to_vector(quantities, &c_quantities); IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(strategies, &c_strategies)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_strategies); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_strategies); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ IGRAPH_R_CHECK(igraph_roulette_wheel_imitation(&c_graph, c_vid, c_is_local, &c_quantities, &c_strategies, c_mode)); @@ -18517,7 +18984,7 @@ SEXP R_igraph_roulette_wheel_imitation(SEXP graph, SEXP vid, SEXP is_local, SEXP /* Convert output */ PROTECT(strategies=Ry_igraph_vector_int_to_SEXP(&c_strategies)); igraph_vector_int_destroy(&c_strategies); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = strategies; UNPROTECT(1); @@ -18537,13 +19004,14 @@ SEXP R_igraph_stochastic_imitation(SEXP graph, SEXP vid, SEXP algo, SEXP quantit igraph_neimode_t c_mode; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_vid = (igraph_integer_t) REAL(vid)[0]; c_algo = (igraph_imitate_algorithm_t) Rf_asInteger(algo); Rz_SEXP_to_vector(quantities, &c_quantities); IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(strategies, &c_strategies)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_strategies); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_strategies); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ IGRAPH_R_CHECK(igraph_stochastic_imitation(&c_graph, c_vid, c_algo, &c_quantities, &c_strategies, c_mode)); @@ -18551,7 +19019,7 @@ SEXP R_igraph_stochastic_imitation(SEXP graph, SEXP vid, SEXP algo, SEXP quantit /* Convert output */ PROTECT(strategies=Ry_igraph_vector_int_to_SEXP(&c_strategies)); igraph_vector_int_destroy(&c_strategies); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = strategies; UNPROTECT(1); @@ -18572,14 +19040,15 @@ SEXP R_igraph_convergence_degree(SEXP graph) { SEXP out; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK(igraph_vector_init(&c_result, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_result); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_result); IGRAPH_R_CHECK(igraph_vector_init(&c_in, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_in); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_in); IGRAPH_R_CHECK(igraph_vector_init(&c_out, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &c_out); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_out); /* Call igraph */ IGRAPH_R_CHECK(igraph_convergence_degree(&c_graph, &c_result, &c_in, &c_out)); @@ -18588,13 +19057,13 @@ SEXP R_igraph_convergence_degree(SEXP graph) { PROTECT(r_names=NEW_CHARACTER(3)); PROTECT(result=Ry_igraph_vector_to_SEXP(&c_result)); igraph_vector_destroy(&c_result); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(in=Ry_igraph_vector_to_SEXP(&c_in)); igraph_vector_destroy(&c_in); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(out=Ry_igraph_vector_to_SEXP(&c_out)); igraph_vector_destroy(&c_out); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, result); SET_VECTOR_ELT(r_result, 1, in); SET_VECTOR_ELT(r_result, 2, out); @@ -18615,6 +19084,7 @@ SEXP R_igraph_has_attribute_table(void) { /* Declarations */ igraph_bool_t c_result; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ /* Call igraph */ @@ -18638,6 +19108,7 @@ SEXP R_igraph_progress(SEXP message, SEXP percent) { igraph_real_t c_percent; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ c_message = Rf_translateCharUTF8(STRING_ELT(message, 0)); IGRAPH_R_CHECK_REAL(percent); @@ -18660,6 +19131,7 @@ SEXP R_igraph_status(SEXP message) { const char* c_message; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ c_message = Rf_translateCharUTF8(STRING_ELT(message, 0)); /* Call igraph */ @@ -18680,6 +19152,7 @@ SEXP R_igraph_strerror(SEXP igraph_errno) { igraph_error_t c_igraph_errno; const char* c_result; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ IGRAPH_R_CHECK_INT(igraph_errno); c_igraph_errno = (igraph_error_t) REAL(igraph_errno)[0]; @@ -18702,16 +19175,17 @@ SEXP R_igraph_expand_path_to_pairs(SEXP path) { igraph_vector_int_t c_path; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_vector_int_copy(path, &c_path); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_path); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_path); /* Call igraph */ IGRAPH_R_CHECK(igraph_expand_path_to_pairs(&c_path)); /* Convert output */ PROTECT(path=Ry_igraph_vector_int_to_SEXPp1(&c_path)); igraph_vector_int_destroy(&c_path); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = path; UNPROTECT(1); @@ -18726,16 +19200,17 @@ SEXP R_igraph_invalidate_cache(SEXP graph) { igraph_t c_graph; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph_copy(graph, &c_graph); - IGRAPH_FINALLY(igraph_destroy, &c_graph); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); /* Call igraph */ igraph_invalidate_cache(&c_graph); /* Convert output */ PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); IGRAPH_I_DESTROY(&c_graph); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = graph; UNPROTECT(1); @@ -18755,25 +19230,26 @@ SEXP R_igraph_vertex_path_from_edge_path(SEXP graph, SEXP start, SEXP edge_path, SEXP vertex_path; SEXP r_result; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(start)) { c_start = (igraph_integer_t) REAL(start)[0]; } Rz_SEXP_to_vector_int_copy(edge_path, &c_edge_path); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_edge_path); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_path); IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_path, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &c_vertex_path); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_path); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ IGRAPH_R_CHECK(igraph_vertex_path_from_edge_path(&c_graph, (Rf_isNull(start) ? 0 : c_start), &c_edge_path, &c_vertex_path, c_mode)); /* Convert output */ igraph_vector_int_destroy(&c_edge_path); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(vertex_path=Ry_igraph_vector_int_to_SEXPp1(&c_vertex_path)); igraph_vector_int_destroy(&c_vertex_path); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); r_result = vertex_path; UNPROTECT(1); @@ -18795,6 +19271,7 @@ SEXP R_igraph_version(void) { SEXP subminor; SEXP r_result, r_names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ /* Call igraph */ @@ -18835,6 +19312,7 @@ SEXP R_igraph_motifs_randesu_callback_closure(SEXP graph, SEXP size, SEXP cut_pr igraph_vector_t c_cut_prob; SEXP c_callback; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK_INT(size); diff --git a/src/rinterface.h b/src/rinterface.h index b29243a411a..e53c980211c 100644 --- a/src/rinterface.h +++ b/src/rinterface.h @@ -141,6 +141,61 @@ void igraph_vector_int_destroy_pv(void *pv_ptr); void igraph_vector_bool_destroy_pv(void *pv_ptr); void igraph_vector_int_list_destroy_pv(void *pv_ptr); +/* Local finally stack for reentrant variants of IGRAPH_FINALLY* API */ + +// Declare a local finally stack. +// This should be placed at the beginning of a function. +#define IGRAPH_LOCAL_FINALLY_STACK \ + struct igraph_i_protectedPtr igraph_i_local_finally_stack[100]; \ + int igraph_i_local_finally_stack_size = 0 + +// Add a destructor to the local finally stack +#define IGRAPH_LOCAL_FINALLY_REAL(func, ptr) \ + do { \ + int no = igraph_i_local_finally_stack_size; \ + if (no >= 100) { \ + IGRAPH_FATALF("Local finally stack too large: it contains %d elements.", no); \ + } \ + igraph_i_local_finally_stack[no].ptr = (ptr); \ + igraph_i_local_finally_stack[no].func = (func); \ + igraph_i_local_finally_stack[no].level = 0; \ + igraph_i_local_finally_stack_size++; \ + } while (0) + +// Remove items from the local finally stack without calling their destructors +#define IGRAPH_LOCAL_FINALLY_CLEAN(minus) \ + do { \ + igraph_i_local_finally_stack_size -= (minus); \ + if (igraph_i_local_finally_stack_size < 0) { \ + int left = igraph_i_local_finally_stack_size + (minus); \ + igraph_i_local_finally_stack_size = 0; \ + IGRAPH_FATALF("Corrupt local finally stack: trying to pop %d element(s) when only %d left.", (minus), left); \ + } \ + } while (0) + +// Call all destructors in the local finally stack and empty it +#define IGRAPH_LOCAL_FINALLY_FREE() \ + do { \ + for (; igraph_i_local_finally_stack_size > 0; igraph_i_local_finally_stack_size--) { \ + int p = igraph_i_local_finally_stack_size - 1; \ + igraph_i_local_finally_stack[p].func(igraph_i_local_finally_stack[p].ptr); \ + } \ + } while (0) + +// Variant of IGRAPH_FINALLY for the local stack +#define IGRAPH_LOCAL_FINALLY(func, ptr) \ + do { \ + if (0) { func(ptr); } \ + IGRAPH_LOCAL_FINALLY_REAL((igraph_finally_func_t*)(func), (ptr)); \ + } while (0) + +// Variant of IGRAPH_FINALLY_PV for the local stack (satisfies UBSAN checks) +#define IGRAPH_LOCAL_FINALLY_PV(func, ptr) \ + do { \ + if (0) { func(ptr); } \ + IGRAPH_LOCAL_FINALLY_REAL((func##_pv), (ptr)); \ + } while (0) + #define IGRAPH_R_CHECK_INT(v) R_check_int_scalar(v) #define IGRAPH_R_CHECK_REAL(v) R_check_real_scalar(v) #define IGRAPH_R_CHECK_BOOL(v) R_check_bool_scalar(v) diff --git a/src/rinterface_extra.c b/src/rinterface_extra.c index bcd58b688e9..15e498dcdf1 100644 --- a/src/rinterface_extra.c +++ b/src/rinterface_extra.c @@ -264,16 +264,18 @@ SEXP Rx_igraph_safe_eval_in_env(SEXP expr_call, SEXP rho, Rx_igraph_safe_eval_re } SEXP Rx_igraph_handle_safe_eval_result_in_env(SEXP result, SEXP rho) { + IGRAPH_LOCAL_FINALLY_STACK; + switch (Rx_igraph_safe_eval_classify_result(result)) { case SAFEEVAL_OK: return result; case SAFEEVAL_ERROR: - /* extract the error message, call IGRAPH_FINALLY_FREE() and then throw + /* extract the error message, call IGRAPH_LOCAL_FINALLY_FREE() and then throw * the error. We cannot raise the error directly because that would * longjmp() and could potentially overwrite stack-allocated data structures * that are also in the "finally" stack */ - IGRAPH_FINALLY_FREE(); + IGRAPH_LOCAL_FINALLY_FREE(); SEXP condition_message = PROTECT(Rf_install("conditionMessage")); SEXP condition_message_call = PROTECT(Rf_lang2(condition_message, result)); @@ -283,7 +285,7 @@ SEXP Rx_igraph_handle_safe_eval_result_in_env(SEXP result, SEXP rho) { return R_NilValue; case SAFEEVAL_INTERRUPTION: - IGRAPH_FINALLY_FREE(); + IGRAPH_LOCAL_FINALLY_FREE(); Rf_error("Interrupted by user"); return R_NilValue; @@ -333,10 +335,11 @@ SEXP Rx_igraph_get_attr_mode(SEXP graph, SEXP pwhich) { } igraph_error_t Rz_SEXP_to_attr_comb(SEXP input, igraph_attribute_combination_t *comb) { + IGRAPH_LOCAL_FINALLY_STACK; igraph_integer_t n = Rf_xlength(input); IGRAPH_CHECK(igraph_attribute_combination_init(comb)); - IGRAPH_FINALLY(igraph_attribute_combination_destroy, comb); + IGRAPH_LOCAL_FINALLY(igraph_attribute_combination_destroy, comb); for (igraph_integer_t i=0; iattr; SEXP val, rep=0, names, newnames; igraph_vector_int_t news; @@ -637,7 +641,7 @@ igraph_error_t Rx_igraph_attribute_add_vertices(igraph_t *graph, igraph_integer_ /* First add the new attributes, if any */ newattrs=0; if (igraph_vector_int_init(&news, 0)) Rf_error("Out of memory"); - IGRAPH_FINALLY_PV(igraph_vector_int_destroy, &news); + IGRAPH_LOCAL_FINALLY_PV(igraph_vector_int_destroy, &news); for (igraph_integer_t i=0; iname; @@ -672,7 +676,7 @@ igraph_error_t Rx_igraph_attribute_add_vertices(igraph_t *graph, igraph_integer_ UNPROTECT(9); } igraph_vector_int_destroy(&news); - IGRAPH_FINALLY_CLEAN(1); /* news */ + IGRAPH_LOCAL_FINALLY_CLEAN(1); /* news */ /* Now append the new values */ Rx_igraph_attribute_add_vertices_append(val, nv, nattr); @@ -949,6 +953,7 @@ void Rx_igraph_attribute_add_edges_append(SEXP eal, igraph_error_t Rx_igraph_attribute_add_edges(igraph_t *graph, const igraph_vector_int_t *edges, igraph_vector_ptr_t *nattr) { + IGRAPH_LOCAL_FINALLY_STACK; SEXP attr=graph->attr; SEXP eal, names, newnames; igraph_vector_int_t news; @@ -957,7 +962,7 @@ igraph_error_t Rx_igraph_attribute_add_edges(igraph_t *graph, const igraph_vecto int px = 0; if (igraph_vector_int_init(&news, 0)) Rf_error("Out of memory"); - IGRAPH_FINALLY_PV(igraph_vector_int_destroy, &news); + IGRAPH_LOCAL_FINALLY_PV(igraph_vector_int_destroy, &news); SEXP newattr = PROTECT(Rx_igraph_attribute_add_edges_dup(attr)); px++; attr=graph->attr=newattr; @@ -1009,7 +1014,7 @@ igraph_error_t Rx_igraph_attribute_add_edges(igraph_t *graph, const igraph_vecto UNPROTECT(9); } igraph_vector_int_destroy(&news); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); /* Now append the new values */ Rx_igraph_attribute_add_edges_append(eal, edges, nattr); @@ -1319,6 +1324,7 @@ igraph_error_t Rx_igraph_attribute_get_numeric_vertex_attr(const igraph_t *graph const char *name, igraph_vs_t vs, igraph_vector_t *value) { + IGRAPH_LOCAL_FINALLY_STACK; /* TODO: serialization */ SEXP val=VECTOR_ELT(graph->attr, 2); SEXP va=Rx_igraph_getListElement(val, name); @@ -1339,7 +1345,7 @@ igraph_error_t Rx_igraph_attribute_get_numeric_vertex_attr(const igraph_t *graph igraph_vit_t it; igraph_integer_t i=0; IGRAPH_CHECK(igraph_vit_create(graph, vs, &it)); - IGRAPH_FINALLY(igraph_vit_destroy, &it); + IGRAPH_LOCAL_FINALLY(igraph_vit_destroy, &it); IGRAPH_CHECK(igraph_vector_resize(value, IGRAPH_VIT_SIZE(it))); if (IS_NUMERIC(va)) { while (!IGRAPH_VIT_END(it)) { @@ -1357,7 +1363,7 @@ igraph_error_t Rx_igraph_attribute_get_numeric_vertex_attr(const igraph_t *graph } } igraph_vit_destroy(&it); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); } return 0; @@ -1367,6 +1373,7 @@ igraph_error_t Rx_igraph_attribute_get_bool_vertex_attr(const igraph_t *graph, const char *name, igraph_vs_t vs, igraph_vector_bool_t *value) { + IGRAPH_LOCAL_FINALLY_STACK; /* TODO: serialization */ SEXP val=VECTOR_ELT(graph->attr, 2); SEXP va=Rx_igraph_getListElement(val, name); @@ -1387,7 +1394,7 @@ igraph_error_t Rx_igraph_attribute_get_bool_vertex_attr(const igraph_t *graph, igraph_vit_t it; igraph_integer_t i=0; IGRAPH_CHECK(igraph_vit_create(graph, vs, &it)); - IGRAPH_FINALLY(igraph_vit_destroy, &it); + IGRAPH_LOCAL_FINALLY(igraph_vit_destroy, &it); IGRAPH_CHECK(igraph_vector_bool_resize(value, IGRAPH_VIT_SIZE(it))); while (!IGRAPH_VIT_END(it)) { igraph_integer_t v=IGRAPH_VIT_GET(it); @@ -1396,7 +1403,7 @@ igraph_error_t Rx_igraph_attribute_get_bool_vertex_attr(const igraph_t *graph, i++; } igraph_vit_destroy(&it); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); } return 0; @@ -1406,6 +1413,7 @@ igraph_error_t Rx_igraph_attribute_get_string_vertex_attr(const igraph_t *graph, const char *name, igraph_vs_t vs, igraph_strvector_t *value) { + IGRAPH_LOCAL_FINALLY_STACK; /* TODO: serialization */ SEXP val, va; @@ -1424,7 +1432,7 @@ igraph_error_t Rx_igraph_attribute_get_string_vertex_attr(const igraph_t *graph, igraph_vit_t it; igraph_integer_t i=0; IGRAPH_CHECK(igraph_vit_create(graph, vs, &it)); - IGRAPH_FINALLY(igraph_vit_destroy, &it); + IGRAPH_LOCAL_FINALLY(igraph_vit_destroy, &it); IGRAPH_CHECK(igraph_strvector_resize(value, IGRAPH_VIT_SIZE(it))); while (!IGRAPH_VIT_END(it)) { igraph_integer_t v=IGRAPH_VIT_GET(it); @@ -1434,7 +1442,7 @@ igraph_error_t Rx_igraph_attribute_get_string_vertex_attr(const igraph_t *graph, i++; } igraph_vit_destroy(&it); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); } return 0; @@ -1444,6 +1452,7 @@ igraph_error_t Rx_igraph_attribute_get_numeric_edge_attr(const igraph_t *graph, const char *name, igraph_es_t es, igraph_vector_t *value) { + IGRAPH_LOCAL_FINALLY_STACK; /* TODO: serialization */ SEXP eal=VECTOR_ELT(graph->attr, 3); SEXP ea=Rx_igraph_getListElement(eal, name); @@ -1464,7 +1473,7 @@ igraph_error_t Rx_igraph_attribute_get_numeric_edge_attr(const igraph_t *graph, igraph_eit_t it; igraph_integer_t i=0; IGRAPH_CHECK(igraph_eit_create(graph, es, &it)); - IGRAPH_FINALLY(igraph_eit_destroy, &it); + IGRAPH_LOCAL_FINALLY(igraph_eit_destroy, &it); IGRAPH_CHECK(igraph_vector_resize(value, IGRAPH_EIT_SIZE(it))); if (IS_NUMERIC(ea)) { while (!IGRAPH_EIT_END(it)) { @@ -1482,7 +1491,7 @@ igraph_error_t Rx_igraph_attribute_get_numeric_edge_attr(const igraph_t *graph, } } igraph_eit_destroy(&it); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); } return 0; @@ -1492,6 +1501,7 @@ igraph_error_t Rx_igraph_attribute_get_bool_edge_attr(const igraph_t *graph, const char *name, igraph_es_t es, igraph_vector_bool_t *value) { + IGRAPH_LOCAL_FINALLY_STACK; /* TODO: serialization */ SEXP eal=VECTOR_ELT(graph->attr, 3); SEXP ea=Rx_igraph_getListElement(eal, name); @@ -1512,7 +1522,7 @@ igraph_error_t Rx_igraph_attribute_get_bool_edge_attr(const igraph_t *graph, igraph_eit_t it; igraph_integer_t i=0; IGRAPH_CHECK(igraph_eit_create(graph, es, &it)); - IGRAPH_FINALLY(igraph_eit_destroy, &it); + IGRAPH_LOCAL_FINALLY(igraph_eit_destroy, &it); IGRAPH_CHECK(igraph_vector_bool_resize(value, IGRAPH_EIT_SIZE(it))); while (!IGRAPH_EIT_END(it)) { igraph_integer_t e=IGRAPH_EIT_GET(it); @@ -1521,7 +1531,7 @@ igraph_error_t Rx_igraph_attribute_get_bool_edge_attr(const igraph_t *graph, i++; } igraph_eit_destroy(&it); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); } return 0; @@ -1531,6 +1541,7 @@ igraph_error_t Rx_igraph_attribute_get_string_edge_attr(const igraph_t *graph, const char *name, igraph_es_t es, igraph_strvector_t *value) { + IGRAPH_LOCAL_FINALLY_STACK; /* TODO: serialization */ SEXP eal=VECTOR_ELT(graph->attr, 3); SEXP ea=Rx_igraph_getListElement(eal, name); @@ -1548,7 +1559,7 @@ igraph_error_t Rx_igraph_attribute_get_string_edge_attr(const igraph_t *graph, igraph_eit_t it; igraph_integer_t i=0; IGRAPH_CHECK(igraph_eit_create(graph, es, &it)); - IGRAPH_FINALLY(igraph_eit_destroy, &it); + IGRAPH_LOCAL_FINALLY(igraph_eit_destroy, &it); IGRAPH_CHECK(igraph_strvector_resize(value, IGRAPH_EIT_SIZE(it))); while (!IGRAPH_EIT_END(it)) { igraph_integer_t e=IGRAPH_EIT_GET(it); @@ -1558,7 +1569,7 @@ igraph_error_t Rx_igraph_attribute_get_string_edge_attr(const igraph_t *graph, i++; } igraph_eit_destroy(&it); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); } return 0; @@ -1909,7 +1920,7 @@ igraph_error_t Rx_igraph_attribute_combine_vertices(const igraph_t *graph, igraph_t *newgraph, const igraph_vector_int_list_t *merges, const igraph_attribute_combination_t *comb) { - + IGRAPH_LOCAL_FINALLY_STACK; SEXP attr=graph->attr; SEXP toattr=newgraph->attr; SEXP val=VECTOR_ELT(attr, 2); @@ -1929,14 +1940,14 @@ igraph_error_t Rx_igraph_attribute_combine_vertices(const igraph_t *graph, IGRAPH_ERROR("Cannot combine edge attributes", IGRAPH_ENOMEM); } - IGRAPH_FINALLY(igraph_free, TODO); + IGRAPH_LOCAL_FINALLY(igraph_free, TODO); funcs=IGRAPH_CALLOC(valno, igraph_function_pointer_t); if (!funcs) { UNPROTECT(px); IGRAPH_ERROR("Cannot combine edge attributes", IGRAPH_ENOMEM); } - IGRAPH_FINALLY(igraph_free, funcs); + IGRAPH_LOCAL_FINALLY(igraph_free, funcs); for (igraph_integer_t i=0; iattr; SEXP toattr=newgraph->attr; SEXP eal=VECTOR_ELT(attr, 3); @@ -2096,14 +2107,14 @@ igraph_error_t Rx_igraph_attribute_combine_edges(const igraph_t *graph, IGRAPH_ERROR("Cannot combine edge attributes", IGRAPH_ENOMEM); } - IGRAPH_FINALLY(igraph_free, TODO); + IGRAPH_LOCAL_FINALLY(igraph_free, TODO); funcs=igraph_Calloc(ealno, igraph_function_pointer_t); if (!funcs) { UNPROTECT(px); IGRAPH_ERROR("Cannot combine edge attributes", IGRAPH_ENOMEM); } - IGRAPH_FINALLY(igraph_free, funcs); + IGRAPH_LOCAL_FINALLY(igraph_free, funcs); for (igraph_integer_t i=0; ileft)); - IGRAPH_FINALLY_PV(igraph_vector_int_destroy, &hrg->left); + IGRAPH_LOCAL_FINALLY_PV(igraph_vector_int_destroy, &hrg->left); IGRAPH_CHECK(Rz_SEXP_to_vector_int_copy(VECTOR_ELT(shrg, 1), &hrg->right)); - IGRAPH_FINALLY_PV(igraph_vector_int_destroy, &hrg->right); + IGRAPH_LOCAL_FINALLY_PV(igraph_vector_int_destroy, &hrg->right); IGRAPH_CHECK(Rz_SEXP_to_vector_copy(VECTOR_ELT(shrg, 2), &hrg->prob)); - IGRAPH_FINALLY_PV(igraph_vector_destroy, &hrg->prob); + IGRAPH_LOCAL_FINALLY_PV(igraph_vector_destroy, &hrg->prob); IGRAPH_CHECK(Rz_SEXP_to_vector_int_copy(VECTOR_ELT(shrg, 3), &hrg->edges)); - IGRAPH_FINALLY_PV(igraph_vector_int_destroy, &hrg->edges); + IGRAPH_LOCAL_FINALLY_PV(igraph_vector_int_destroy, &hrg->edges); IGRAPH_CHECK(Rz_SEXP_to_vector_int_copy(VECTOR_ELT(shrg, 4), &hrg->vertices)); - IGRAPH_FINALLY_PV(igraph_vector_int_destroy, &hrg->vertices); + IGRAPH_LOCAL_FINALLY_PV(igraph_vector_int_destroy, &hrg->vertices); - IGRAPH_FINALLY_CLEAN(5); + IGRAPH_LOCAL_FINALLY_CLEAN(5); return IGRAPH_SUCCESS; } @@ -3178,6 +3199,7 @@ SEXP Ry_igraph_maxflow_stats_to_SEXP(const igraph_maxflow_stats_t *st) { } SEXP Rx_igraph_arpack_unpack_complex(SEXP vectors, SEXP values, SEXP nev) { + IGRAPH_LOCAL_FINALLY_STACK; /* Declarations */ igraph_matrix_t c_vectors; igraph_matrix_t c_values; @@ -3188,11 +3210,11 @@ SEXP Rx_igraph_arpack_unpack_complex(SEXP vectors, SEXP values, SEXP nev) { if (0 != Rz_SEXP_to_igraph_matrix_copy(vectors, &c_vectors)) { igraph_error("", __FILE__, __LINE__, IGRAPH_ENOMEM); } - IGRAPH_FINALLY_PV(igraph_matrix_destroy, &c_vectors); + IGRAPH_LOCAL_FINALLY_PV(igraph_matrix_destroy, &c_vectors); if (0 != Rz_SEXP_to_igraph_matrix_copy(values, &c_values)) { igraph_error("", __FILE__, __LINE__, IGRAPH_ENOMEM); } - IGRAPH_FINALLY_PV(igraph_matrix_destroy, &c_values); + IGRAPH_LOCAL_FINALLY_PV(igraph_matrix_destroy, &c_values); c_nev=REAL(nev)[0]; /* Call igraph */ IGRAPH_R_CHECK(igraph_arpack_unpack_complex(&c_vectors, &c_values, c_nev)); @@ -3202,10 +3224,10 @@ SEXP Rx_igraph_arpack_unpack_complex(SEXP vectors, SEXP values, SEXP nev) { PROTECT(r_names=NEW_CHARACTER(2)); PROTECT(vectors=Ry_igraph_matrix_to_SEXP(&c_vectors)); igraph_matrix_destroy(&c_vectors); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PROTECT(values=Ry_igraph_matrix_to_SEXP(&c_values)); igraph_matrix_destroy(&c_values); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SET_VECTOR_ELT(r_result, 0, vectors); SET_VECTOR_ELT(r_result, 1, values); SET_STRING_ELT(r_names, 0, Rf_mkChar("vectors")); @@ -3260,6 +3282,7 @@ void Ry_igraph_sirlist_destroy(igraph_vector_ptr_t *sl) { } SEXP Ry_igraph_sparsemat_to_SEXP_triplet(const igraph_sparsemat_t *sp) { + IGRAPH_LOCAL_FINALLY_STACK; SEXP res, names; int nz=igraph_sparsemat_nonzero_storage(sp); @@ -3275,13 +3298,13 @@ SEXP Ry_igraph_sparsemat_to_SEXP_triplet(const igraph_sparsemat_t *sp) { igraph_vector_int_t i, j; igraph_vector_t x; igraph_vector_int_init(&i, nz); - IGRAPH_FINALLY_PV(igraph_vector_int_destroy, &i); + IGRAPH_LOCAL_FINALLY_PV(igraph_vector_int_destroy, &i); igraph_vector_int_init(&j, nz); - IGRAPH_FINALLY_PV(igraph_vector_int_destroy, &j); + IGRAPH_LOCAL_FINALLY_PV(igraph_vector_int_destroy, &j); igraph_vector_init(&x, nz); - IGRAPH_FINALLY_PV(igraph_vector_destroy, &x); + IGRAPH_LOCAL_FINALLY_PV(igraph_vector_destroy, &x); igraph_sparsemat_getelements(sp, &j, &i, &x); SET_VECTOR_ELT(res, 2, Ry_igraph_vector_int_to_SEXP(&i)); @@ -3291,7 +3314,7 @@ SEXP Ry_igraph_sparsemat_to_SEXP_triplet(const igraph_sparsemat_t *sp) { igraph_vector_int_destroy(&i); igraph_vector_int_destroy(&j); igraph_vector_destroy(&x); - IGRAPH_FINALLY_CLEAN(3); + IGRAPH_LOCAL_FINALLY_CLEAN(3); } PROTECT(names=NEW_CHARACTER(5)); @@ -3409,8 +3432,9 @@ void Rz_SEXP_to_sparsemat(SEXP sm, igraph_sparsemat_t *sp) { igraph_error_t Rz_SEXP_to_igraph_adjlist(SEXP vectorlist, igraph_adjlist_t *ptr) { igraph_integer_t length = Rf_xlength(vectorlist); + IGRAPH_LOCAL_FINALLY_STACK; IGRAPH_CHECK(igraph_adjlist_init_empty(ptr, length)); - IGRAPH_FINALLY(igraph_adjlist_destroy, ptr); + IGRAPH_LOCAL_FINALLY(igraph_adjlist_destroy, ptr); for (igraph_integer_t i=0; i str: res = "\n".join(inout + out + [retdecl] + ["SEXP r_result;"]) else: res = "\n".join(inout + out + [retdecl] + ["SEXP r_result, r_names;"]) + + # Add local finally stack declaration + res += "\nIGRAPH_LOCAL_FINALLY_STACK;" + return indent(res) def chunk_inconv(self, desc: FunctionDescriptor) -> str: diff --git a/tools/stimulus/types-RC.yaml b/tools/stimulus/types-RC.yaml index 54fdac30418..d4b8bdb5141 100644 --- a/tools/stimulus/types-RC.yaml +++ b/tools/stimulus/types-RC.yaml @@ -5,17 +5,17 @@ GRAPH: IN: Rz_SEXP_to_igraph(%I%, &%C%); INOUT: |- Rz_SEXP_to_igraph_copy(%I%, &%C%); - IGRAPH_FINALLY(igraph_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &%C%); OUTCONV: INOUT: |- PROTECT(%I%=Ry_igraph_to_SEXP(&%C%)); IGRAPH_I_DESTROY(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); OUT: |- - IGRAPH_FINALLY(igraph_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_destroy, &%C%); PROTECT(%I%=Ry_igraph_to_SEXP(&%C%)); IGRAPH_I_DESTROY(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); GRAPH_LIST: CALL: '&%C%' @@ -23,12 +23,12 @@ GRAPH_LIST: INCONV: OUT: |- IGRAPH_R_CHECK(igraph_graph_list_init(&%C%, 0)); - IGRAPH_FINALLY(igraph_graph_list_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_graph_list_destroy, &%C%); OUTCONV: OUT: |- PROTECT(%I%=Ry_igraph_graphlist_to_SEXP(&%C%)); IGRAPH_FREE(%C%.stor_begin); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); GRAPH_PTR_LIST: CALL: '&%C%' @@ -37,18 +37,18 @@ GRAPH_PTR_LIST: IN: |- igraph_t *%C%_storage; IGRAPH_R_CHECK(Rz_SEXP_to_graph_ptr_list(%I%, &%C%, &%C%_storage)); - IGRAPH_FINALLY(igraph_vector_ptr_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_ptr_destroy, &%C%); OUT: |- IGRAPH_R_CHECK(igraph_vector_ptr_init(&%C%, 0)); - IGRAPH_FINALLY(igraph_vector_ptr_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_ptr_destroy, &%C%); OUTCONV: IN: |- igraph_vector_ptr_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); OUT: |- PROTECT(%I%=Ry_igraph_graph_ptr_list_to_SEXP(&%C%)); igraph_vector_ptr_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); INTEGER: CTYPE: igraph_integer_t @@ -101,7 +101,7 @@ INFILE: INCONV: IN: |- %C% = Ry_igraph_fopen_read(%I%); - IGRAPH_FINALLY(fclose, %C%); + IGRAPH_LOCAL_FINALLY(fclose, %C%); OUTFILE: CTYPE: FILE* @@ -110,7 +110,7 @@ OUTFILE: INCONV: IN: |- %C% = Ry_igraph_fopen_write(%I%); - IGRAPH_FINALLY(fclose, %C%); + IGRAPH_LOCAL_FINALLY(fclose, %C%); REAL: CTYPE: igraph_real_t @@ -180,18 +180,18 @@ INDEX_VECTOR: INCONV: IN: |- Rz_SEXP_to_vector_int_copy(%I%, &%C%); - IGRAPH_FINALLY(igraph_vector_int_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &%C%); OUT: |- IGRAPH_R_CHECK(igraph_vector_int_init(&%C%, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &%C%); OUTCONV: IN: |- igraph_vector_int_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); OUT: |- PROTECT(%I%=Ry_igraph_vector_int_to_SEXPp1(&%C%)); igraph_vector_int_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); VECTOR: CALL: '&%C%' @@ -200,15 +200,15 @@ VECTOR: IN: Rz_SEXP_to_vector(%I%, &%C%); INOUT: |- IGRAPH_R_CHECK(Rz_SEXP_to_vector_copy(%I%, &%C%)); - IGRAPH_FINALLY(igraph_vector_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &%C%); OUT: |- IGRAPH_R_CHECK(igraph_vector_init(&%C%, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &%C%); OUTCONV: OUT: |- PROTECT(%I%=Ry_igraph_vector_to_SEXP(&%C%)); igraph_vector_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); VECTOR_BOOL: CALL: '&%C%' @@ -217,15 +217,15 @@ VECTOR_BOOL: IN: Rz_SEXP_to_vector_bool(%I%, &%C%); INOUT: |- IGRAPH_R_CHECK(Rz_SEXP_to_vector_bool_copy(%I%, &%C%)); - IGRAPH_FINALLY(igraph_vector_bool_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_bool_destroy, &%C%); OUT: |- IGRAPH_R_CHECK(igraph_vector_bool_init(&%C%, 0)); - IGRAPH_FINALLY(igraph_vector_bool_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_bool_destroy, &%C%); OUTCONV: OUT: |- PROTECT(%I%=Ry_igraph_vector_bool_to_SEXP(&%C%)); igraph_vector_bool_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); VECTOR_INT: CALL: '&%C%' @@ -233,18 +233,18 @@ VECTOR_INT: INCONV: IN: |- IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(%I%, &%C%)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &%C%); OUT: |- IGRAPH_R_CHECK(igraph_vector_int_init(&%C%, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &%C%); OUTCONV: IN: |- igraph_vector_int_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); OUT: |- PROTECT(%I%=Ry_igraph_vector_int_to_SEXP(&%C%)); igraph_vector_int_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); MATRIX_LIST: CALL: '&%C%' @@ -254,12 +254,12 @@ MATRIX_LIST: Ry_igraph_SEXP_to_matrixlist(%I%, &%C%); OUT: |- IGRAPH_R_CHECK(igraph_matrix_list_init(&%C%, 0)); - IGRAPH_FINALLY(igraph_matrix_list_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_matrix_list_destroy, &%C%); OUTCONV: OUT: |- PROTECT(%I%=Rx_igraph_matrixlist_to_SEXP(&%C%)); igraph_matrix_list_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); VECTOR_LIST: CALL: '&%C%' @@ -268,12 +268,12 @@ VECTOR_LIST: IN: Ry_igraph_SEXP_to_vector_list(%I%, &%C%); OUT: |- IGRAPH_R_CHECK(igraph_vector_list_init(&%C%, 0)); - IGRAPH_FINALLY(igraph_vector_list_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_list_destroy, &%C%); OUTCONV: OUT: |- PROTECT(%I%=Rx_igraph_vectorlist_to_SEXP(&%C%)); igraph_vector_list_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); VECTOR_INT_LIST: CALL: '&%C%' @@ -282,12 +282,12 @@ VECTOR_INT_LIST: IN: if (!Rf_isNull(%I%)) { IGRAPH_R_CHECK(Ry_igraph_SEXP_to_vector_int_list(%I%, &%C%)); } OUT: |- IGRAPH_R_CHECK(igraph_vector_int_list_init(&%C%, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &%C%); OUTCONV: OUT: |- PROTECT(%I%=Ry_igraph_vector_int_list_to_SEXP(&%C%)); igraph_vector_int_list_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); VERTEXSET_LIST: CALL: '&%C%' @@ -295,18 +295,18 @@ VERTEXSET_LIST: INCONV: IN: |- IGRAPH_R_CHECK(Ry_igraph_SEXP_to_vector_int_list(%I%, &%C%)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &%C%); OUT: |- IGRAPH_R_CHECK(igraph_vector_int_list_init(&%C%, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &%C%); OUTCONV: IN: |- igraph_vector_int_list_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); OUT: |- PROTECT(%I%=Ry_igraph_vector_int_list_to_SEXPp1(&%C%)); igraph_vector_int_list_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); EDGESET_LIST: CALL: '&%C%' @@ -316,12 +316,12 @@ EDGESET_LIST: if (!Rf_isNull(%I%)) { IGRAPH_R_CHECK(Ry_igraph_SEXP_to_vector_int_list(%I%, &%C%)); } OUT: |- IGRAPH_R_CHECK(igraph_vector_int_list_init(&%C%, 0)); - IGRAPH_FINALLY(igraph_vector_int_list_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &%C%); OUTCONV: OUT: |- PROTECT(%I%=Ry_igraph_vector_int_list_to_SEXPp1(&%C%)); igraph_vector_int_list_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); EDGE_SELECTOR: CALL: @@ -336,7 +336,7 @@ EDGE_SELECTOR: IGRAPH_R_CHECK(Rz_SEXP_to_igraph_es(%I%, &%C1%, &%C%, &%C%_data)); OUT: |- IGRAPH_R_CHECK(igraph_vector_init(&%C%, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &%C%); OUTCONV: IN: |- igraph_vector_int_destroy(&%C%_data); @@ -344,7 +344,7 @@ EDGE_SELECTOR: OUT: |- PROTECT(%I%=Ry_igraph_vector_to_SEXPp1(&%C%)); igraph_vector_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); ADJLIST: CALL: '&%C%' @@ -362,13 +362,13 @@ EDGEWEIGHTS: IN: Rz_SEXP_to_vector(%I%, &%C%); OUT: |- IGRAPH_R_CHECK(igraph_vector_init(&%C%, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &%C%); %I%=R_GlobalEnv; /* hack to have a non-NULL value */ OUTCONV: OUT: |- PROTECT(%I%=Ry_igraph_0orvector_to_SEXP(&%C%)); igraph_vector_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); VERTEXWEIGHTS: CALL: '&%C%' @@ -377,13 +377,13 @@ VERTEXWEIGHTS: IN: Rz_SEXP_to_vector(%I%, &%C%); OUT: |- IGRAPH_R_CHECK(igraph_vector_init(&%C%, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &%C%); %I%=R_GlobalEnv; /* hack to have a non-NULL value */ OUTCONV: OUT: |- PROTECT(%I%=Ry_igraph_0orvector_to_SEXP(&%C%)); igraph_vector_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); EDGE_CAPACITY: CALL: '&%C%' @@ -392,13 +392,13 @@ EDGE_CAPACITY: IN: Rz_SEXP_to_vector(%I%, &%C%); OUT: |- IGRAPH_R_CHECK(igraph_vector_init(&%C%, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &%C%); %I%=R_GlobalEnv; /* hack to have a non-NULL value */ OUTCONV: OUT: |- PROTECT(%I%=Ry_igraph_0orvector_to_SEXP(&%C%)); igraph_vector_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); MATRIX: CALL: '&%C%' @@ -407,15 +407,15 @@ MATRIX: IN: Rz_SEXP_to_matrix(%I%, &%C%); INOUT: |- IGRAPH_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(%I%, &%C%)); - IGRAPH_FINALLY(igraph_matrix_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &%C%); OUT: |- IGRAPH_R_CHECK(igraph_matrix_init(&%C%, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &%C%); OUTCONV: OUT: |- PROTECT(%I%=Ry_igraph_matrix_to_SEXP(&%C%)); igraph_matrix_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); MATRIX_INT: CALL: '&%C%' @@ -423,21 +423,21 @@ MATRIX_INT: INCONV: IN: |- Rz_SEXP_to_matrix_int(%I%, &%C%); - IGRAPH_FINALLY(igraph_matrix_int_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_matrix_int_destroy, &%C%); INOUT: |- IGRAPH_R_CHECK(Rz_SEXP_to_igraph_matrix_int_copy(%I%, &%C%)); - IGRAPH_FINALLY(igraph_matrix_int_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_matrix_int_destroy, &%C%); OUT: |- IGRAPH_R_CHECK(igraph_matrix_int_init(&%C%, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_int_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_matrix_int_destroy, &%C%); OUTCONV: IN: |- igraph_matrix_int_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); OUT: |- PROTECT(%I%=Ry_igraph_matrix_int_to_SEXP(&%C%)); igraph_matrix_int_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); VERTEX: CALL: @@ -476,15 +476,15 @@ VERTEX_QTY: IN: Rz_SEXP_to_vector(%I%, &%C%); INOUT: |- IGRAPH_R_CHECK(Rz_SEXP_to_vector_copy(%I%, &%C%)); - IGRAPH_FINALLY(igraph_vector_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &%C%); OUT: |- IGRAPH_R_CHECK(igraph_vector_init(&%C%, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &%C%); OUTCONV: OUT: |- PROTECT(%I%=Ry_igraph_vector_to_SEXP(&%C%)); igraph_vector_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); ALL_VERTEX_QTY: CALL: '&%C%' @@ -493,15 +493,15 @@ ALL_VERTEX_QTY: IN: Rz_SEXP_to_vector(%I%, &%C%); INOUT: |- IGRAPH_R_CHECK(Rz_SEXP_to_vector_copy(%I%, &%C%)); - IGRAPH_FINALLY(igraph_vector_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &%C%); OUT: |- IGRAPH_R_CHECK(igraph_vector_init(&%C%, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &%C%); OUTCONV: OUT: |- PROTECT(%I%=Ry_igraph_vector_to_SEXP(&%C%)); igraph_vector_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); NEIMODE: CALL: @@ -522,7 +522,7 @@ VERTEX_SELECTOR: Rz_SEXP_to_igraph_vs(%I%, &%C1%, &%C%, &%C%_data); OUT: |- IGRAPH_R_CHECK(igraph_vector_init(&%C%, 0)); - IGRAPH_FINALLY(igraph_vector_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &%C%); OUTCONV: IN: |- igraph_vector_int_destroy(&%C%_data); @@ -530,7 +530,7 @@ VERTEX_SELECTOR: OUT: |- PROTECT(%I%=Ry_igraph_vector_to_SEXPp1(&%C%)); igraph_vector_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); VERTEX_INDICES: CALL: '&%C%' @@ -538,18 +538,18 @@ VERTEX_INDICES: INCONV: IN: |- Rz_SEXP_to_vector_int_copy(%I%, &%C%); - IGRAPH_FINALLY(igraph_vector_int_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &%C%); OUT: |- IGRAPH_R_CHECK(igraph_vector_int_init(&%C%, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &%C%); OUTCONV: IN: |- igraph_vector_int_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); OUT: |- PROTECT(%I%=Ry_igraph_vector_int_to_SEXPp1(&%C%)); igraph_vector_int_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); VERTEX_INDICES_PV: CALL: '&%C%' @@ -557,20 +557,20 @@ VERTEX_INDICES_PV: INCONV: IN: |- Rz_SEXP_to_vector_int_copy(%I%, &%C%); - IGRAPH_FINALLY_PV(igraph_vector_int_destroy, &%C%); + IGRAPH_LOCAL_FINALLY_PV(igraph_vector_int_destroy, &%C%); OUT: |- if (0 != igraph_vector_int_init(&%C%, 0)) { igraph_error("", __FILE__, __LINE__, IGRAPH_ENOMEM); } - IGRAPH_FINALLY_PV(igraph_vector_int_destroy, &%C%); + IGRAPH_LOCAL_FINALLY_PV(igraph_vector_int_destroy, &%C%); OUTCONV: IN: |- igraph_vector_int_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); OUT: |- PROTECT(%I%=Ry_igraph_vector_int_to_SEXPp1(&%C%)); igraph_vector_int_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); VERTEX_INDEX_PAIRS: CALL: '&%C%' @@ -578,18 +578,18 @@ VERTEX_INDEX_PAIRS: INCONV: IN: |- Rz_SEXP_to_vector_int_copy(%I%, &%C%); - IGRAPH_FINALLY(igraph_vector_int_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &%C%); OUT: |- IGRAPH_R_CHECK(igraph_vector_int_init(&%C%, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &%C%); OUTCONV: IN: |- igraph_vector_int_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); OUT: |- PROTECT(%I%=Ry_igraph_vector_int_to_SEXP(&%C%)); igraph_vector_int_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); EDGE_INDICES: CALL: '&%C%' @@ -597,18 +597,18 @@ EDGE_INDICES: INCONV: IN: |- Rz_SEXP_to_vector_int_copy(%I%, &%C%); - IGRAPH_FINALLY(igraph_vector_int_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &%C%); OUT: |- IGRAPH_R_CHECK(igraph_vector_int_init(&%C%, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &%C%); OUTCONV: IN: |- igraph_vector_int_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); OUT: |- PROTECT(%I%=Ry_igraph_vector_int_to_SEXPp1(&%C%)); igraph_vector_int_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); 'NULL': CALL: '0' @@ -681,12 +681,12 @@ VECTOR_STR: IN: Rx_igraph_SEXP_to_strvector(%I%, &%C%); OUT: |- IGRAPH_R_CHECK(igraph_strvector_init(&%C%, 0)); - IGRAPH_FINALLY(igraph_strvector_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_strvector_destroy, &%C%); OUTCONV: OUT: |- PROTECT(%I%=Rx_igraph_strvector_to_SEXP(&%C%)); igraph_strvector_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); BIPARTITE_TYPES: CALL: @@ -697,12 +697,12 @@ BIPARTITE_TYPES: IN: Rz_SEXP_to_vector_bool(%I%, &%C%); OUT: |- IGRAPH_R_CHECK(igraph_vector_bool_init(&%C%, 0)); - IGRAPH_FINALLY(igraph_vector_bool_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_bool_destroy, &%C%); OUTCONV: OUT: |- PROTECT(%I%=Ry_igraph_vector_bool_to_SEXP(&%C%)); igraph_vector_bool_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); ALL_BIPARTITE_TYPES: CALL: @@ -713,12 +713,12 @@ ALL_BIPARTITE_TYPES: IN: Rz_SEXP_to_vector_bool(%I%, &%C%); OUT: |- IGRAPH_R_CHECK(igraph_vector_bool_init(&%C%, 0)); - IGRAPH_FINALLY(igraph_vector_bool_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_bool_destroy, &%C%); OUTCONV: OUT: |- PROTECT(%I%=Ry_igraph_vector_bool_to_SEXP(&%C%)); igraph_vector_bool_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); BIPARTITE_TYPES_UNNAMED: CALL: @@ -727,12 +727,12 @@ BIPARTITE_TYPES_UNNAMED: INCONV: OUT: |- IGRAPH_R_CHECK(igraph_vector_bool_init(&%C%, 0)); - IGRAPH_FINALLY(igraph_vector_bool_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_bool_destroy, &%C%); OUTCONV: OUT: |- PROTECT(%I%=Ry_igraph_vector_bool_to_SEXP(&%C%)); igraph_vector_bool_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); VERTEX_COLOR: CALL: @@ -746,18 +746,18 @@ VERTEX_COLOR: } else { IGRAPH_R_CHECK(igraph_vector_int_init(&%C%, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &%C%); OUT: |- IGRAPH_R_CHECK(igraph_vector_int_init(&%C%, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &%C%); OUTCONV: IN: |- igraph_vector_int_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); OUT: |- PROTECT(%I%=Ry_igraph_vector_int_to_SEXP(&%C%)); igraph_vector_int_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); EDGE_COLOR: CALL: @@ -771,18 +771,18 @@ EDGE_COLOR: } else { IGRAPH_R_CHECK(igraph_vector_int_init(&%C%, 0)); } - IGRAPH_FINALLY(igraph_vector_int_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &%C%); OUT: |- IGRAPH_R_CHECK(graph_vector_int_init(&%C%, 0)); - IGRAPH_FINALLY(igraph_vector_int_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &%C%); OUTCONV: IN: |- igraph_vector_int_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); OUT: |- PROTECT(%I%=Ry_igraph_vector_int_to_SEXP(&%C%)); igraph_vector_int_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); VERTEX_ATTRIBUTE_COMBINATION: CALL: '&%C%' @@ -790,11 +790,11 @@ VERTEX_ATTRIBUTE_COMBINATION: INCONV: IN: |- Rz_SEXP_to_attr_comb(%I%, &%C%); - IGRAPH_FINALLY(igraph_attribute_combination_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_attribute_combination_destroy, &%C%); OUTCONV: IN: |- igraph_attribute_combination_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); EDGE_ATTRIBUTE_COMBINATION: CALL: '&%C%' @@ -802,36 +802,36 @@ EDGE_ATTRIBUTE_COMBINATION: INCONV: IN: |- Rz_SEXP_to_attr_comb(%I%, &%C%); - IGRAPH_FINALLY(igraph_attribute_combination_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_attribute_combination_destroy, &%C%); OUTCONV: IN: |- igraph_attribute_combination_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); HRG: CALL: '&%C%' INCONV: IN: |- IGRAPH_R_CHECK(Rz_SEXP_to_hrg_copy(%I%, &%C%)); - IGRAPH_FINALLY(igraph_hrg_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_hrg_destroy, &%C%); INOUT: |- IGRAPH_R_CHECK(Rz_SEXP_to_hrg_copy(%I%, &%C%)); - IGRAPH_FINALLY(igraph_hrg_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_hrg_destroy, &%C%); OUT: |- IGRAPH_R_CHECK(igraph_hrg_init(&%C%, 0)); - IGRAPH_FINALLY(igraph_hrg_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_hrg_destroy, &%C%); OUTCONV: IN: |- igraph_hrg_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); INOUT: |- PROTECT(%I%=Ry_igraph_hrg_to_SEXP(&%C%)); igraph_hrg_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); OUT: |- PROTECT(%I%=Ry_igraph_hrg_to_SEXP(&%C%)); igraph_hrg_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); SPARSEMAT: CALL: '&%C%' @@ -839,18 +839,18 @@ SPARSEMAT: INCONV: IN: |- Rz_SEXP_to_sparsemat(%I%, &%C%); - IGRAPH_FINALLY(igraph_sparsemat_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_sparsemat_destroy, &%C%); OUT: |- IGRAPH_R_CHECK(igraph_sparsemat_init(&%C%, 0, 0, 0)); - IGRAPH_FINALLY(igraph_sparsemat_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_sparsemat_destroy, &%C%); OUTCONV: IN: |- igraph_sparsemat_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); OUT: |- PROTECT(%I%=Ry_igraph_sparsemat_to_SEXP(&%C%)); igraph_sparsemat_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); VECTOR_COMPLEX: CALL: '(Rf_isNull(%I%) ? NULL : &%C%)' @@ -863,17 +863,17 @@ VECTOR_COMPLEX: } else { IGRAPH_R_CHECK(igraph_vector_complex_init(&%C%, 0)); } - IGRAPH_FINALLY(igraph_vector_complex_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_complex_destroy, &%C%); %I%=NEW_NUMERIC(0); OUT: |- IGRAPH_R_CHECK(igraph_vector_complex_init(&%C%, 0)); - IGRAPH_FINALLY(igraph_vector_complex_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_vector_complex_destroy, &%C%); %I%=R_GlobalEnv; /* hack to have a non-NULL value */ OUTCONV: OUT: |- PROTECT(%I%=Ry_igraph_0orvector_complex_to_SEXP(&%C%)); igraph_vector_complex_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); MATRIX_COMPLEX: CALL: '(Rf_isNull(%I%) ? NULL : &%C%)' @@ -886,17 +886,17 @@ MATRIX_COMPLEX: } else { IGRAPH_R_CHECK(igraph_matrix_complex_init(&%C%, 0, 0)); } - IGRAPH_FINALLY(igraph_matrix_complex_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_matrix_complex_destroy, &%C%); %I%=NEW_NUMERIC(0); OUT: |- IGRAPH_R_CHECK(igraph_matrix_complex_init(&%C%, 0, 0)); - IGRAPH_FINALLY(igraph_matrix_complex_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(igraph_matrix_complex_destroy, &%C%); %I%=R_GlobalEnv; /* hack to have a non-NULL value */ OUTCONV: OUT: |- PROTECT(%I%=Ry_igraph_0ormatrix_complex_to_SEXP(&%C%)); igraph_matrix_complex_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PLFIT: CALL: '&%C%' @@ -924,12 +924,12 @@ SIR_LIST: INCONV: OUT: |- IGRAPH_R_CHECK(igraph_vector_ptr_init(&%C%, 0)); - IGRAPH_FINALLY(Ry_igraph_sirlist_destroy, &%C%); + IGRAPH_LOCAL_FINALLY(Ry_igraph_sirlist_destroy, &%C%); OUTCONV: OUT: |- PROTECT(%I%=Ry_igraph_sirlist_to_SEXP(&%C%)); Ry_igraph_sirlist_destroy(&%C%); - IGRAPH_FINALLY_CLEAN(1); + IGRAPH_LOCAL_FINALLY_CLEAN(1); PAGERANKOPT: CTYPE: |- From be55b48d79e1f40c4ad8d2cec71ecbafa58383cf Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 25 Jan 2026 14:37:52 +0000 Subject: [PATCH 3/6] Fix missing local finally stack declarations Co-authored-by: krlmlr <1741643+krlmlr@users.noreply.github.com> --- src/rinterface.h | 6 +++--- src/rinterface_extra.c | 13 ++++++++++++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/rinterface.h b/src/rinterface.h index e53c980211c..c0d215b30dd 100644 --- a/src/rinterface.h +++ b/src/rinterface.h @@ -150,14 +150,14 @@ void igraph_vector_int_list_destroy_pv(void *pv_ptr); int igraph_i_local_finally_stack_size = 0 // Add a destructor to the local finally stack -#define IGRAPH_LOCAL_FINALLY_REAL(func, ptr) \ +#define IGRAPH_LOCAL_FINALLY_REAL(func_arg, ptr_arg) \ do { \ int no = igraph_i_local_finally_stack_size; \ if (no >= 100) { \ IGRAPH_FATALF("Local finally stack too large: it contains %d elements.", no); \ } \ - igraph_i_local_finally_stack[no].ptr = (ptr); \ - igraph_i_local_finally_stack[no].func = (func); \ + igraph_i_local_finally_stack[no].ptr = (ptr_arg); \ + igraph_i_local_finally_stack[no].func = (func_arg); \ igraph_i_local_finally_stack[no].level = 0; \ igraph_i_local_finally_stack_size++; \ } while (0) diff --git a/src/rinterface_extra.c b/src/rinterface_extra.c index 15e498dcdf1..8fd440d22f5 100644 --- a/src/rinterface_extra.c +++ b/src/rinterface_extra.c @@ -2548,7 +2548,7 @@ SEXP R_igraph_finalizer(void) { } SEXP Rx_igraph_check_finally_stack(void) { - if (!(igraph_i_local_finally_stack_size == 0)) { + if (!IGRAPH_FINALLY_STACK_EMPTY) { Rf_error("igraph callbacks cannot call igraph functions"); } return R_NilValue; @@ -4746,6 +4746,7 @@ SEXP Rx_igraph_degree_sequence_game(SEXP pout_seq, SEXP pin_seq, igraph_vector_int_t inseq; igraph_integer_t method=(igraph_integer_t) REAL(pmethod)[0]; SEXP result; + IGRAPH_LOCAL_FINALLY_STACK; IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(pout_seq, &outseq)); IGRAPH_LOCAL_FINALLY_PV(igraph_vector_int_destroy, &outseq); @@ -5161,6 +5162,7 @@ SEXP Rx_igraph_compose(SEXP pleft, SEXP pright, SEXP pedgemaps) { igraph_bool_t edgemaps=LOGICAL(pedgemaps)[0]; igraph_vector_int_t v_edgemap1, *my_edgemap1=edgemaps ? &v_edgemap1 : 0; igraph_vector_int_t v_edgemap2, *my_edgemap2=edgemaps ? &v_edgemap2 : 0; + IGRAPH_LOCAL_FINALLY_STACK; Rz_SEXP_to_igraph(pleft, &left); Rz_SEXP_to_igraph(pright, &right); @@ -6323,6 +6325,7 @@ SEXP Rx_igraph_community_to_membership2(SEXP pmerges, SEXP pvcount, igraph_integer_t steps=(igraph_integer_t) REAL(psteps)[0]; igraph_vector_int_t membership; SEXP result; + IGRAPH_LOCAL_FINALLY_STACK; IGRAPH_R_CHECK(Rz_SEXP_to_matrix_int(pmerges, &merges)); IGRAPH_LOCAL_FINALLY(igraph_matrix_int_destroy, &merges); @@ -6446,6 +6449,7 @@ SEXP Rx_igraph_arpack(SEXP function, SEXP extra, SEXP options, SEXP rho, Rx_igraph_i_arpack_data_t data; igraph_arpack_options_t c_options; SEXP result, names; + IGRAPH_LOCAL_FINALLY_STACK; if (0 != igraph_matrix_init(&vectors, 0, 0)) { igraph_error("Cannot run ARPACK", __FILE__, __LINE__, IGRAPH_ENOMEM); @@ -6515,6 +6519,7 @@ SEXP Rx_igraph_is_chordal(SEXP graph, SEXP alpha, SEXP alpham1, SEXP fillin; SEXP newgraph; SEXP result, names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(alpha)) { Rz_SEXP_to_vector_int_copy(alpha, &c_alpha); } @@ -7053,6 +7058,7 @@ SEXP Rx_igraph_subisomorphic_lad(SEXP pattern, SEXP target, SEXP domains, SEXP maps; SEXP result, names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(pattern, &c_pattern); Rz_SEXP_to_igraph(target, &c_target); @@ -7139,6 +7145,7 @@ SEXP Rx_igraph_graphlets(SEXP graph, SEXP weights, SEXP niter) { SEXP cliques; SEXP Mu; SEXP result, names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); @@ -7281,6 +7288,7 @@ SEXP Rx_igraph_laplacian_spectral_embedding(SEXP graph, SEXP no, igraph_bool_t directed; SEXP result, names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); directed=igraph_is_directed(&c_graph); @@ -7359,6 +7367,7 @@ SEXP Rx_igraph_bipartite_projection(SEXP graph, SEXP types, SEXP probe1, SEXP multiplicity2; SEXP result, names; + IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(types)) { Rz_SEXP_to_vector_bool(types, &c_types); } @@ -7427,6 +7436,7 @@ SEXP Rx_igraph_adjacent_vertices(SEXP pgraph, SEXP pv, SEXP pmode) { SEXP result; size_t i, n; igraph_lazy_adjlist_t adjlist; + IGRAPH_LOCAL_FINALLY_STACK; Rz_SEXP_to_igraph(pgraph, &graph); Rz_SEXP_to_igraph_vs(pv, &graph, &vs, &vs_data); @@ -7474,6 +7484,7 @@ SEXP Rx_igraph_incident_edges(SEXP pgraph, SEXP pe, SEXP pmode) { SEXP result; size_t i, n; igraph_lazy_inclist_t adjlist; + IGRAPH_LOCAL_FINALLY_STACK; Rz_SEXP_to_igraph(pgraph, &graph); Rz_SEXP_to_igraph_vs(pe, &graph, &vs, &vs_data); From 6eeee88e29ed6e534201d7fe10b83c6a5a89130b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 25 Jan 2026 14:40:49 +0000 Subject: [PATCH 4/6] Address code review feedback - use named constant for stack size Co-authored-by: krlmlr <1741643+krlmlr@users.noreply.github.com> --- src/rinterface.h | 7 +- tests/testthat/_snaps/make.new.md | 175 ++++++++++++++++++++++++++++++ tools/stimulus/types-RC.yaml | 2 +- 3 files changed, 181 insertions(+), 3 deletions(-) create mode 100644 tests/testthat/_snaps/make.new.md diff --git a/src/rinterface.h b/src/rinterface.h index c0d215b30dd..4cde9f44635 100644 --- a/src/rinterface.h +++ b/src/rinterface.h @@ -143,17 +143,20 @@ void igraph_vector_int_list_destroy_pv(void *pv_ptr); /* Local finally stack for reentrant variants of IGRAPH_FINALLY* API */ +// Maximum number of elements in a local finally stack +#define IGRAPH_LOCAL_FINALLY_STACK_SIZE 100 + // Declare a local finally stack. // This should be placed at the beginning of a function. #define IGRAPH_LOCAL_FINALLY_STACK \ - struct igraph_i_protectedPtr igraph_i_local_finally_stack[100]; \ + struct igraph_i_protectedPtr igraph_i_local_finally_stack[IGRAPH_LOCAL_FINALLY_STACK_SIZE]; \ int igraph_i_local_finally_stack_size = 0 // Add a destructor to the local finally stack #define IGRAPH_LOCAL_FINALLY_REAL(func_arg, ptr_arg) \ do { \ int no = igraph_i_local_finally_stack_size; \ - if (no >= 100) { \ + if (no >= IGRAPH_LOCAL_FINALLY_STACK_SIZE) { \ IGRAPH_FATALF("Local finally stack too large: it contains %d elements.", no); \ } \ igraph_i_local_finally_stack[no].ptr = (ptr_arg); \ diff --git a/tests/testthat/_snaps/make.new.md b/tests/testthat/_snaps/make.new.md new file mode 100644 index 00000000000..b92f78d7708 --- /dev/null +++ b/tests/testthat/_snaps/make.new.md @@ -0,0 +1,175 @@ +# error messages are proper + + Code + make_() + Condition + Error in `.extract_constructor_and_modifiers()`: + ! Don't know how to make_, nothing given + Code + make_(1:10) + Condition + Error in `.extract_constructor_and_modifiers()`: + ! Don't know how to make_, nothing given + Code + graph_() + Condition + Error in `.extract_constructor_and_modifiers()`: + ! Don't know how to graph_, nothing given + Code + graph_(1:10) + Condition + Error in `.extract_constructor_and_modifiers()`: + ! Don't know how to graph_, nothing given + Code + graph_(directed_graph(), directed_graph()) + Condition + Error in `.extract_constructor_and_modifiers()`: + ! Don't know how to graph_, multiple constructors given + Code + sample_() + Condition + Error in `.extract_constructor_and_modifiers()`: + ! Don't know how to sample_, nothing given + Code + sample_(1:10) + Condition + Error in `.extract_constructor_and_modifiers()`: + ! Don't know how to sample_, nothing given + Code + sample_(directed_graph(), directed_graph()) + Condition + Error in `.extract_constructor_and_modifiers()`: + ! Don't know how to sample_, multiple constructors given + +# graph_from_literal() and simple undirected graphs + + Code + graph_from_literal(A - B) + Output + IGRAPH UN-- 2 1 -- + + attr: name (v/c) + + edge (vertex names): + [1] A--B + Code + graph_from_literal(A - B - C) + Output + IGRAPH UN-- 3 2 -- + + attr: name (v/c) + + edges (vertex names): + [1] A--B B--C + Code + graph_from_literal(A - B - C - A) + Output + IGRAPH UN-- 3 3 -- + + attr: name (v/c) + + edges (vertex names): + [1] A--B A--C B--C + +# graph_from_literal() and undirected explosion + + Code + graph_from_literal(A:B:C - D:E, B:D - C:E) + Output + IGRAPH c7b5eec UN-- 5 8 -- + + attr: name (v/c) + + edges from c7b5eec (vertex names): + [1] A--D A--E B--C B--D B--E C--D C--E D--E + Code + graph_from_literal(A:B:C - D:E - F:G:H - I - J:K:L:M) + Output + IGRAPH a850fdc UN-- 13 19 -- + + attr: name (v/c) + + edges from a850fdc (vertex names): + [1] A--D A--E B--D B--E C--D C--E D--F D--G D--H E--F E--G E--H F--I G--I H--I + [16] I--J I--K I--L I--M + +# graph_from_literal() and simple directed graphs + + Code + graph_from_literal(A - +B) + Output + IGRAPH d2b891b DN-- 2 1 -- + + attr: name (v/c) + + edge from d2b891b (vertex names): + [1] A->B + Code + graph_from_literal(A - +B - +C) + Output + IGRAPH f2169c8 DN-- 3 2 -- + + attr: name (v/c) + + edges from f2169c8 (vertex names): + [1] A->B B->C + Code + graph_from_literal(A - +B - +C - +A) + Output + IGRAPH 2037dfb DN-- 3 3 -- + + attr: name (v/c) + + edges from 2037dfb (vertex names): + [1] A->B B->C C->A + Code + graph_from_literal(A - +B + -C - +A) + Output + IGRAPH 9726188 DN-- 3 3 -- + + attr: name (v/c) + + edges from 9726188 (vertex names): + [1] A->B C->A C->B + +# graph_from_literal() and directed explosion + + Code + graph_from_literal(A:B:C - +D:E, B:D + -C:E) + Output + IGRAPH 040ffac DN-- 5 9 -- + + attr: name (v/c) + + edges from 040ffac (vertex names): + [1] A->D A->E B->D B->E C->B C->D C->E E->B E->D + Code + graph_from_literal(A:B:C - +D:E + -F:G:H - +I + -J:K:L:M) + Output + IGRAPH 6cf3e84 DN-- 13 19 -- + + attr: name (v/c) + + edges from 6cf3e84 (vertex names): + [1] A->D A->E B->D B->E C->D C->E F->D F->E F->I G->D G->E G->I H->D H->E H->I + [16] J->I K->I L->I M->I + +# graph_from_literal(simplify = FALSE) + + Code + graph_from_literal(1 - 1, 1 - 2, 1 - 2) + Output + IGRAPH 63b8ad0 UN-- 2 1 -- + + attr: name (v/c) + + edge from 63b8ad0 (vertex names): + [1] 1--2 + Code + graph_from_literal(1 - 1, 1 - 2, 1 - 2, simplify = FALSE) + Output + IGRAPH 474c8a9 UN-- 2 3 -- + + attr: name (v/c) + + edges from 474c8a9 (vertex names): + [1] 1--1 1--2 1--2 + +# make_empty_graph gives an error for invalid arguments + + Code + make_empty_graph(NULL) + Condition + Error in `make_empty_graph()`: + ! `n` must be numeric, not NULL. + +--- + + Code + make_empty_graph("spam") + Condition + Error in `make_empty_graph()`: + ! `n` must be numeric, not a string. + +--- + + Code + make_empty_graph(10, "spam") + Condition + Error in `make_empty_graph()`: + ! `directed` must be a logical, not a string. + diff --git a/tools/stimulus/types-RC.yaml b/tools/stimulus/types-RC.yaml index d4b8bdb5141..b2889615563 100644 --- a/tools/stimulus/types-RC.yaml +++ b/tools/stimulus/types-RC.yaml @@ -773,7 +773,7 @@ EDGE_COLOR: } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &%C%); OUT: |- - IGRAPH_R_CHECK(graph_vector_int_init(&%C%, 0)); + IGRAPH_R_CHECK(igraph_vector_int_init(&%C%, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &%C%); OUTCONV: IN: |- From 0b33aadc35818b1d28174c65e4cf4ee37223c6dc Mon Sep 17 00:00:00 2001 From: Copilot Date: Sun, 25 Jan 2026 14:56:51 +0000 Subject: [PATCH 5/6] chore: Auto-update from GitHub Actions Run: https://github.com/igraph/rigraph/actions/runs/21334342041 --- tests/testthat/_snaps/aaa-auto.md | 33 +----- tests/testthat/_snaps/make.new.md | 175 ------------------------------ 2 files changed, 1 insertion(+), 207 deletions(-) delete mode 100644 tests/testthat/_snaps/make.new.md diff --git a/tests/testthat/_snaps/aaa-auto.md b/tests/testthat/_snaps/aaa-auto.md index dff6c9d78ab..73b4697ee30 100644 --- a/tests/testthat/_snaps/aaa-auto.md +++ b/tests/testthat/_snaps/aaa-auto.md @@ -6433,22 +6433,6 @@ Error in `ensure_igraph()`: ! Must provide a graph object (provided `NULL`). -# local_scan_neighborhood_ecount_impl basic - - Code - local_scan_neighborhood_ecount_impl(graph = g, neighborhoods = list(1:2, 2:3, 2: - 4, 2)) - Output - [1] 1 1 2 0 - ---- - - Code - local_scan_neighborhood_ecount_impl(graph = g, weights = c(1, 2, 3), - neighborhoods = list(1:2, 1:3, 2:4, 1)) - Output - [1] 1 3 5 0 - # local_scan_neighborhood_ecount_impl errors Code @@ -6457,21 +6441,6 @@ Error in `ensure_igraph()`: ! Must provide a graph object (provided `NULL`). -# local_scan_subset_ecount_impl basic - - Code - local_scan_subset_ecount_impl(graph = g, subsets = list(c(1, 2), c(2, 3))) - Output - [1] 1 1 - ---- - - Code - local_scan_subset_ecount_impl(graph = g, weights = c(1, 2, 3), subsets = list(c( - 1, 2), c(2, 3))) - Output - [1] 1 2 - # local_scan_subset_ecount_impl errors Code @@ -11163,7 +11132,7 @@ Code content Output - [1] "0 1" "0 2" "1 2" + character(0) # read_graph_edgelist_impl basic diff --git a/tests/testthat/_snaps/make.new.md b/tests/testthat/_snaps/make.new.md deleted file mode 100644 index b92f78d7708..00000000000 --- a/tests/testthat/_snaps/make.new.md +++ /dev/null @@ -1,175 +0,0 @@ -# error messages are proper - - Code - make_() - Condition - Error in `.extract_constructor_and_modifiers()`: - ! Don't know how to make_, nothing given - Code - make_(1:10) - Condition - Error in `.extract_constructor_and_modifiers()`: - ! Don't know how to make_, nothing given - Code - graph_() - Condition - Error in `.extract_constructor_and_modifiers()`: - ! Don't know how to graph_, nothing given - Code - graph_(1:10) - Condition - Error in `.extract_constructor_and_modifiers()`: - ! Don't know how to graph_, nothing given - Code - graph_(directed_graph(), directed_graph()) - Condition - Error in `.extract_constructor_and_modifiers()`: - ! Don't know how to graph_, multiple constructors given - Code - sample_() - Condition - Error in `.extract_constructor_and_modifiers()`: - ! Don't know how to sample_, nothing given - Code - sample_(1:10) - Condition - Error in `.extract_constructor_and_modifiers()`: - ! Don't know how to sample_, nothing given - Code - sample_(directed_graph(), directed_graph()) - Condition - Error in `.extract_constructor_and_modifiers()`: - ! Don't know how to sample_, multiple constructors given - -# graph_from_literal() and simple undirected graphs - - Code - graph_from_literal(A - B) - Output - IGRAPH UN-- 2 1 -- - + attr: name (v/c) - + edge (vertex names): - [1] A--B - Code - graph_from_literal(A - B - C) - Output - IGRAPH UN-- 3 2 -- - + attr: name (v/c) - + edges (vertex names): - [1] A--B B--C - Code - graph_from_literal(A - B - C - A) - Output - IGRAPH UN-- 3 3 -- - + attr: name (v/c) - + edges (vertex names): - [1] A--B A--C B--C - -# graph_from_literal() and undirected explosion - - Code - graph_from_literal(A:B:C - D:E, B:D - C:E) - Output - IGRAPH c7b5eec UN-- 5 8 -- - + attr: name (v/c) - + edges from c7b5eec (vertex names): - [1] A--D A--E B--C B--D B--E C--D C--E D--E - Code - graph_from_literal(A:B:C - D:E - F:G:H - I - J:K:L:M) - Output - IGRAPH a850fdc UN-- 13 19 -- - + attr: name (v/c) - + edges from a850fdc (vertex names): - [1] A--D A--E B--D B--E C--D C--E D--F D--G D--H E--F E--G E--H F--I G--I H--I - [16] I--J I--K I--L I--M - -# graph_from_literal() and simple directed graphs - - Code - graph_from_literal(A - +B) - Output - IGRAPH d2b891b DN-- 2 1 -- - + attr: name (v/c) - + edge from d2b891b (vertex names): - [1] A->B - Code - graph_from_literal(A - +B - +C) - Output - IGRAPH f2169c8 DN-- 3 2 -- - + attr: name (v/c) - + edges from f2169c8 (vertex names): - [1] A->B B->C - Code - graph_from_literal(A - +B - +C - +A) - Output - IGRAPH 2037dfb DN-- 3 3 -- - + attr: name (v/c) - + edges from 2037dfb (vertex names): - [1] A->B B->C C->A - Code - graph_from_literal(A - +B + -C - +A) - Output - IGRAPH 9726188 DN-- 3 3 -- - + attr: name (v/c) - + edges from 9726188 (vertex names): - [1] A->B C->A C->B - -# graph_from_literal() and directed explosion - - Code - graph_from_literal(A:B:C - +D:E, B:D + -C:E) - Output - IGRAPH 040ffac DN-- 5 9 -- - + attr: name (v/c) - + edges from 040ffac (vertex names): - [1] A->D A->E B->D B->E C->B C->D C->E E->B E->D - Code - graph_from_literal(A:B:C - +D:E + -F:G:H - +I + -J:K:L:M) - Output - IGRAPH 6cf3e84 DN-- 13 19 -- - + attr: name (v/c) - + edges from 6cf3e84 (vertex names): - [1] A->D A->E B->D B->E C->D C->E F->D F->E F->I G->D G->E G->I H->D H->E H->I - [16] J->I K->I L->I M->I - -# graph_from_literal(simplify = FALSE) - - Code - graph_from_literal(1 - 1, 1 - 2, 1 - 2) - Output - IGRAPH 63b8ad0 UN-- 2 1 -- - + attr: name (v/c) - + edge from 63b8ad0 (vertex names): - [1] 1--2 - Code - graph_from_literal(1 - 1, 1 - 2, 1 - 2, simplify = FALSE) - Output - IGRAPH 474c8a9 UN-- 2 3 -- - + attr: name (v/c) - + edges from 474c8a9 (vertex names): - [1] 1--1 1--2 1--2 - -# make_empty_graph gives an error for invalid arguments - - Code - make_empty_graph(NULL) - Condition - Error in `make_empty_graph()`: - ! `n` must be numeric, not NULL. - ---- - - Code - make_empty_graph("spam") - Condition - Error in `make_empty_graph()`: - ! `n` must be numeric, not a string. - ---- - - Code - make_empty_graph(10, "spam") - Condition - Error in `make_empty_graph()`: - ! `directed` must be a logical, not a string. - From e63239d9c51d002ef7c2ffe8b2856c22d6a85065 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 25 Jan 2026 15:00:02 +0000 Subject: [PATCH 6/6] Adapt IGRAPH_R_CHECK to clean up local finally stack on error - Add IGRAPH_LOCAL_R_CHECK macro that cleans up local stack before calling error handlers - Replace IGRAPH_R_CHECK with IGRAPH_LOCAL_R_CHECK in functions with local stacks - Update Stimulus generator to emit IGRAPH_LOCAL_R_CHECK - Update types-RC.yaml to use IGRAPH_LOCAL_R_CHECK Co-authored-by: krlmlr <1741643+krlmlr@users.noreply.github.com> --- src/rinterface.c | 1992 ++++++++--------- src/rinterface.h | 20 + src/rinterface_extra.c | 14 +- .../py-stimulus/src/stimulus/generators/r.py | 6 +- tools/stimulus/types-RC.yaml | 116 +- 5 files changed, 1084 insertions(+), 1064 deletions(-) diff --git a/src/rinterface.c b/src/rinterface.c index ee5a7f69a1e..89525da5540 100644 --- a/src/rinterface.c +++ b/src/rinterface.c @@ -46,7 +46,7 @@ SEXP R_igraph_empty(SEXP n, SEXP directed) { IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_empty(&c_graph, c_n, c_directed)); + IGRAPH_LOCAL_R_CHECK(igraph_empty(&c_graph, c_n, c_directed)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -76,7 +76,7 @@ SEXP R_igraph_add_edges(SEXP graph, SEXP edges) { Rz_SEXP_to_vector_int_copy(edges, &c_edges); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edges); /* Call igraph */ - IGRAPH_R_CHECK(igraph_add_edges(&c_graph, &c_edges, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_add_edges(&c_graph, &c_edges, 0)); /* Convert output */ PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); @@ -109,7 +109,7 @@ SEXP R_igraph_empty_attrs(SEXP n, SEXP directed) { IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_empty_attrs(&c_graph, c_n, c_directed, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_empty_attrs(&c_graph, c_n, c_directed, 0)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -139,7 +139,7 @@ SEXP R_igraph_add_vertices(SEXP graph, SEXP nv) { IGRAPH_R_CHECK_INT(nv); c_nv = (igraph_integer_t) REAL(nv)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_add_vertices(&c_graph, c_nv, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_add_vertices(&c_graph, c_nv, 0)); /* Convert output */ PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); @@ -165,7 +165,7 @@ SEXP R_igraph_copy(SEXP from) { /* Convert input */ Rz_SEXP_to_igraph(from, &c_from); /* Call igraph */ - IGRAPH_R_CHECK(igraph_copy(&c_to, &c_from)); + IGRAPH_LOCAL_R_CHECK(igraph_copy(&c_to, &c_from)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_to); @@ -192,9 +192,9 @@ SEXP R_igraph_delete_edges(SEXP graph, SEXP edges) { Rz_SEXP_to_igraph_copy(graph, &c_graph); IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); igraph_vector_int_t c_edges_data; - IGRAPH_R_CHECK(Rz_SEXP_to_igraph_es(edges, &c_graph, &c_edges, &c_edges_data)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_igraph_es(edges, &c_graph, &c_edges, &c_edges_data)); /* Call igraph */ - IGRAPH_R_CHECK(igraph_delete_edges(&c_graph, c_edges)); + IGRAPH_LOCAL_R_CHECK(igraph_delete_edges(&c_graph, c_edges)); /* Convert output */ PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); @@ -224,7 +224,7 @@ SEXP R_igraph_delete_vertices(SEXP graph, SEXP vertices) { igraph_vector_int_t c_vertices_data; Rz_SEXP_to_igraph_vs(vertices, &c_graph, &c_vertices, &c_vertices_data); /* Call igraph */ - IGRAPH_R_CHECK(igraph_delete_vertices(&c_graph, c_vertices)); + IGRAPH_LOCAL_R_CHECK(igraph_delete_vertices(&c_graph, c_vertices)); /* Convert output */ PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); @@ -257,12 +257,12 @@ SEXP R_igraph_delete_vertices_idx(SEXP graph, SEXP vertices) { IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); igraph_vector_int_t c_vertices_data; Rz_SEXP_to_igraph_vs(vertices, &c_graph, &c_vertices, &c_vertices_data); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_idx, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_idx, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_idx); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_invidx, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_invidx, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_invidx); /* Call igraph */ - IGRAPH_R_CHECK(igraph_delete_vertices_idx(&c_graph, c_vertices, &c_idx, &c_invidx)); + IGRAPH_LOCAL_R_CHECK(igraph_delete_vertices_idx(&c_graph, c_vertices, &c_idx, &c_invidx)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -352,12 +352,12 @@ SEXP R_igraph_neighbors(SEXP graph, SEXP vid, SEXP mode) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_neis, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_neis, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_neis); c_vid = (igraph_integer_t) REAL(vid)[0]; c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_neighbors(&c_graph, &c_neis, c_vid, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_neighbors(&c_graph, &c_neis, c_vid, c_mode)); /* Convert output */ PROTECT(neis=Ry_igraph_vector_int_to_SEXPp1(&c_neis)); @@ -408,7 +408,7 @@ SEXP R_igraph_degree(SEXP graph, SEXP vids, SEXP mode, SEXP loops) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); @@ -416,7 +416,7 @@ SEXP R_igraph_degree(SEXP graph, SEXP vids, SEXP mode, SEXP loops) { IGRAPH_R_CHECK_BOOL(loops); c_loops = LOGICAL(loops)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_degree(&c_graph, &c_res, c_vids, c_mode, c_loops)); + IGRAPH_LOCAL_R_CHECK(igraph_degree(&c_graph, &c_res, c_vids, c_mode, c_loops)); /* Convert output */ PROTECT(res=Ry_igraph_vector_int_to_SEXP(&c_res)); @@ -451,7 +451,7 @@ SEXP R_igraph_edge(SEXP graph, SEXP eid) { c_from=0; c_to=0; /* Call igraph */ - IGRAPH_R_CHECK(igraph_edge(&c_graph, c_eid, &c_from, &c_to)); + IGRAPH_LOCAL_R_CHECK(igraph_edge(&c_graph, c_eid, &c_from, &c_to)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -486,11 +486,11 @@ SEXP R_igraph_edges(SEXP graph, SEXP eids) { /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); igraph_vector_int_t c_eids_data; - IGRAPH_R_CHECK(Rz_SEXP_to_igraph_es(eids, &c_graph, &c_eids, &c_eids_data)); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edges, 0)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_igraph_es(eids, &c_graph, &c_eids, &c_eids_data)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edges, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edges); /* Call igraph */ - IGRAPH_R_CHECK(igraph_edges(&c_graph, c_eids, &c_edges)); + IGRAPH_LOCAL_R_CHECK(igraph_edges(&c_graph, c_eids, &c_edges)); /* Convert output */ igraph_vector_int_destroy(&c_eids_data); @@ -520,7 +520,7 @@ SEXP R_igraph_get_eids(SEXP graph, SEXP pairs, SEXP directed, SEXP error) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_eids, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_eids, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_eids); Rz_SEXP_to_vector_int_copy(pairs, &c_pairs); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_pairs); @@ -529,7 +529,7 @@ SEXP R_igraph_get_eids(SEXP graph, SEXP pairs, SEXP directed, SEXP error) { IGRAPH_R_CHECK_BOOL(error); c_error = LOGICAL(error)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_get_eids(&c_graph, &c_eids, &c_pairs, c_directed, c_error)); + IGRAPH_LOCAL_R_CHECK(igraph_get_eids(&c_graph, &c_eids, &c_pairs, c_directed, c_error)); /* Convert output */ PROTECT(eids=Ry_igraph_vector_int_to_SEXPp1(&c_eids)); @@ -559,14 +559,14 @@ SEXP R_igraph_get_all_eids_between(SEXP graph, SEXP from, SEXP to, SEXP directed IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_eids, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_eids, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_eids); c_from = (igraph_integer_t) REAL(from)[0]; c_to = (igraph_integer_t) REAL(to)[0]; IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_get_all_eids_between(&c_graph, &c_eids, c_from, c_to, c_directed)); + IGRAPH_LOCAL_R_CHECK(igraph_get_all_eids_between(&c_graph, &c_eids, c_from, c_to, c_directed)); /* Convert output */ PROTECT(eids=Ry_igraph_vector_int_to_SEXPp1(&c_eids)); @@ -593,12 +593,12 @@ SEXP R_igraph_incident(SEXP graph, SEXP vid, SEXP mode) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_eids, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_eids, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_eids); c_vid = (igraph_integer_t) REAL(vid)[0]; c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_incident(&c_graph, &c_eids, c_vid, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_incident(&c_graph, &c_eids, c_vid, c_mode)); /* Convert output */ PROTECT(eids=Ry_igraph_vector_int_to_SEXPp1(&c_eids)); @@ -626,7 +626,7 @@ SEXP R_igraph_is_same_graph(SEXP graph1, SEXP graph2) { Rz_SEXP_to_igraph(graph1, &c_graph1); Rz_SEXP_to_igraph(graph2, &c_graph2); /* Call igraph */ - IGRAPH_R_CHECK(igraph_is_same_graph(&c_graph1, &c_graph2, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_is_same_graph(&c_graph1, &c_graph2, &c_res)); /* Convert output */ PROTECT(res=NEW_LOGICAL(1)); @@ -651,14 +651,14 @@ SEXP R_igraph_create(SEXP edges, SEXP n, SEXP directed) { SEXP r_result; IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(edges, &c_edges)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(edges, &c_edges)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edges); IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_create(&c_graph, &c_edges, c_n, c_directed)); + IGRAPH_LOCAL_R_CHECK(igraph_create(&c_graph, &c_edges, c_n, c_directed)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -691,7 +691,7 @@ SEXP R_igraph_adjacency(SEXP adjmatrix, SEXP mode, SEXP loops) { c_mode = (igraph_adjacency_t) Rf_asInteger(mode); c_loops = (igraph_loops_t) Rf_asInteger(loops); /* Call igraph */ - IGRAPH_R_CHECK(igraph_adjacency(&c_graph, &c_adjmatrix, c_mode, c_loops)); + IGRAPH_LOCAL_R_CHECK(igraph_adjacency(&c_graph, &c_adjmatrix, c_mode, c_loops)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -723,7 +723,7 @@ SEXP R_igraph_sparse_adjacency(SEXP adjmatrix, SEXP mode, SEXP loops) { c_mode = (igraph_adjacency_t) Rf_asInteger(mode); c_loops = (igraph_loops_t) Rf_asInteger(loops); /* Call igraph */ - IGRAPH_R_CHECK(igraph_sparse_adjacency(&c_graph, &c_adjmatrix, c_mode, c_loops)); + IGRAPH_LOCAL_R_CHECK(igraph_sparse_adjacency(&c_graph, &c_adjmatrix, c_mode, c_loops)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -757,12 +757,12 @@ SEXP R_igraph_sparse_weighted_adjacency(SEXP adjmatrix, SEXP mode, SEXP loops) { Rz_SEXP_to_sparsemat(adjmatrix, &c_adjmatrix); IGRAPH_LOCAL_FINALLY(igraph_sparsemat_destroy, &c_adjmatrix); c_mode = (igraph_adjacency_t) Rf_asInteger(mode); - IGRAPH_R_CHECK(igraph_vector_init(&c_weights, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_weights, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_weights); weights=R_GlobalEnv; /* hack to have a non-NULL value */ c_loops = (igraph_loops_t) Rf_asInteger(loops); /* Call igraph */ - IGRAPH_R_CHECK(igraph_sparse_weighted_adjacency(&c_graph, &c_adjmatrix, c_mode, &c_weights, c_loops)); + IGRAPH_LOCAL_R_CHECK(igraph_sparse_weighted_adjacency(&c_graph, &c_adjmatrix, c_mode, &c_weights, c_loops)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -805,12 +805,12 @@ SEXP R_igraph_weighted_adjacency(SEXP adjmatrix, SEXP mode, SEXP loops) { /* Convert input */ Rz_SEXP_to_matrix(adjmatrix, &c_adjmatrix); c_mode = (igraph_adjacency_t) Rf_asInteger(mode); - IGRAPH_R_CHECK(igraph_vector_init(&c_weights, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_weights, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_weights); weights=R_GlobalEnv; /* hack to have a non-NULL value */ c_loops = (igraph_loops_t) Rf_asInteger(loops); /* Call igraph */ - IGRAPH_R_CHECK(igraph_weighted_adjacency(&c_graph, &c_adjmatrix, c_mode, &c_weights, c_loops)); + IGRAPH_LOCAL_R_CHECK(igraph_weighted_adjacency(&c_graph, &c_adjmatrix, c_mode, &c_weights, c_loops)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -853,7 +853,7 @@ SEXP R_igraph_star(SEXP n, SEXP mode, SEXP center) { IGRAPH_R_CHECK_INT(center); c_center = (igraph_integer_t) REAL(center)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_star(&c_graph, c_n, c_mode, c_center)); + IGRAPH_LOCAL_R_CHECK(igraph_star(&c_graph, c_n, c_mode, c_center)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -886,7 +886,7 @@ SEXP R_igraph_wheel(SEXP n, SEXP mode, SEXP center) { IGRAPH_R_CHECK_INT(center); c_center = (igraph_integer_t) REAL(center)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_wheel(&c_graph, c_n, c_mode, c_center)); + IGRAPH_LOCAL_R_CHECK(igraph_wheel(&c_graph, c_n, c_mode, c_center)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -917,7 +917,7 @@ SEXP R_igraph_hypercube(SEXP n, SEXP directed) { IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_hypercube(&c_graph, c_n, c_directed)); + IGRAPH_LOCAL_R_CHECK(igraph_hypercube(&c_graph, c_n, c_directed)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -946,7 +946,7 @@ SEXP R_igraph_square_lattice(SEXP dimvector, SEXP nei, SEXP directed, SEXP mutua SEXP r_result; IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(dimvector, &c_dimvector)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(dimvector, &c_dimvector)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_dimvector); IGRAPH_R_CHECK_INT(nei); c_nei = (igraph_integer_t) REAL(nei)[0]; @@ -958,7 +958,7 @@ SEXP R_igraph_square_lattice(SEXP dimvector, SEXP nei, SEXP directed, SEXP mutua Rz_SEXP_to_vector_bool(periodic, &c_periodic); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_square_lattice(&c_graph, &c_dimvector, c_nei, c_directed, c_mutual, (Rf_isNull(periodic) ? 0 : &c_periodic))); + IGRAPH_LOCAL_R_CHECK(igraph_square_lattice(&c_graph, &c_dimvector, c_nei, c_directed, c_mutual, (Rf_isNull(periodic) ? 0 : &c_periodic))); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -987,14 +987,14 @@ SEXP R_igraph_triangular_lattice(SEXP dimvector, SEXP directed, SEXP mutual) { SEXP r_result; IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(dimvector, &c_dimvector)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(dimvector, &c_dimvector)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_dimvector); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; IGRAPH_R_CHECK_BOOL(mutual); c_mutual = LOGICAL(mutual)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_triangular_lattice(&c_graph, &c_dimvector, c_directed, c_mutual)); + IGRAPH_LOCAL_R_CHECK(igraph_triangular_lattice(&c_graph, &c_dimvector, c_directed, c_mutual)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -1033,7 +1033,7 @@ SEXP R_igraph_ring(SEXP n, SEXP directed, SEXP mutual, SEXP circular) { IGRAPH_R_CHECK_BOOL(circular); c_circular = LOGICAL(circular)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_ring(&c_graph, c_n, c_directed, c_mutual, c_circular)); + IGRAPH_LOCAL_R_CHECK(igraph_ring(&c_graph, c_n, c_directed, c_mutual, c_circular)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -1067,7 +1067,7 @@ SEXP R_igraph_path_graph(SEXP n, SEXP directed, SEXP mutual) { IGRAPH_R_CHECK_BOOL(mutual); c_mutual = LOGICAL(mutual)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_path_graph(&c_graph, c_n, c_directed, c_mutual)); + IGRAPH_LOCAL_R_CHECK(igraph_path_graph(&c_graph, c_n, c_directed, c_mutual)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -1101,7 +1101,7 @@ SEXP R_igraph_cycle_graph(SEXP n, SEXP directed, SEXP mutual) { IGRAPH_R_CHECK_BOOL(mutual); c_mutual = LOGICAL(mutual)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_cycle_graph(&c_graph, c_n, c_directed, c_mutual)); + IGRAPH_LOCAL_R_CHECK(igraph_cycle_graph(&c_graph, c_n, c_directed, c_mutual)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -1134,7 +1134,7 @@ SEXP R_igraph_kary_tree(SEXP n, SEXP children, SEXP type) { c_children = (igraph_integer_t) REAL(children)[0]; c_type = (igraph_tree_mode_t) Rf_asInteger(type); /* Call igraph */ - IGRAPH_R_CHECK(igraph_kary_tree(&c_graph, c_n, c_children, c_type)); + IGRAPH_LOCAL_R_CHECK(igraph_kary_tree(&c_graph, c_n, c_children, c_type)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -1160,11 +1160,11 @@ SEXP R_igraph_symmetric_tree(SEXP branches, SEXP type) { SEXP r_result; IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(branches, &c_branches)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(branches, &c_branches)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_branches); c_type = (igraph_tree_mode_t) Rf_asInteger(type); /* Call igraph */ - IGRAPH_R_CHECK(igraph_symmetric_tree(&c_graph, &c_branches, c_type)); + IGRAPH_LOCAL_R_CHECK(igraph_symmetric_tree(&c_graph, &c_branches, c_type)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -1199,7 +1199,7 @@ SEXP R_igraph_regular_tree(SEXP h, SEXP k, SEXP type) { c_k = (igraph_integer_t) REAL(k)[0]; c_type = (igraph_tree_mode_t) Rf_asInteger(type); /* Call igraph */ - IGRAPH_R_CHECK(igraph_regular_tree(&c_graph, c_h, c_k, c_type)); + IGRAPH_LOCAL_R_CHECK(igraph_regular_tree(&c_graph, c_h, c_k, c_type)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -1233,7 +1233,7 @@ SEXP R_igraph_full(SEXP n, SEXP directed, SEXP loops) { IGRAPH_R_CHECK_BOOL(loops); c_loops = LOGICAL(loops)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_full(&c_graph, c_n, c_directed, c_loops)); + IGRAPH_LOCAL_R_CHECK(igraph_full(&c_graph, c_n, c_directed, c_loops)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -1264,7 +1264,7 @@ SEXP R_igraph_full_citation(SEXP n, SEXP directed) { IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_full_citation(&c_graph, c_n, c_directed)); + IGRAPH_LOCAL_R_CHECK(igraph_full_citation(&c_graph, c_n, c_directed)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -1292,7 +1292,7 @@ SEXP R_igraph_atlas(SEXP number) { IGRAPH_R_CHECK_INT(number); c_number = (igraph_integer_t) REAL(number)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_atlas(&c_graph, c_number)); + IGRAPH_LOCAL_R_CHECK(igraph_atlas(&c_graph, c_number)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -1326,7 +1326,7 @@ SEXP R_igraph_extended_chordal_ring(SEXP nodes, SEXP W, SEXP directed) { IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_extended_chordal_ring(&c_graph, c_nodes, &c_W, c_directed)); + IGRAPH_LOCAL_R_CHECK(igraph_extended_chordal_ring(&c_graph, c_nodes, &c_W, c_directed)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -1359,7 +1359,7 @@ SEXP R_igraph_connect_neighborhood(SEXP graph, SEXP order, SEXP mode) { c_order = (igraph_integer_t) REAL(order)[0]; c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_connect_neighborhood(&c_graph, c_order, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_connect_neighborhood(&c_graph, c_order, c_mode)); /* Convert output */ PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); @@ -1391,7 +1391,7 @@ SEXP R_igraph_graph_power(SEXP graph, SEXP order, SEXP directed) { IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_graph_power(&c_graph, &c_res, c_order, c_directed)); + IGRAPH_LOCAL_R_CHECK(igraph_graph_power(&c_graph, &c_res, c_order, c_directed)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_res); @@ -1418,7 +1418,7 @@ SEXP R_igraph_linegraph(SEXP graph) { /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ - IGRAPH_R_CHECK(igraph_linegraph(&c_graph, &c_linegraph)); + IGRAPH_LOCAL_R_CHECK(igraph_linegraph(&c_graph, &c_linegraph)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_linegraph); @@ -1449,7 +1449,7 @@ SEXP R_igraph_de_bruijn(SEXP m, SEXP n) { IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_de_bruijn(&c_graph, c_m, c_n)); + IGRAPH_LOCAL_R_CHECK(igraph_de_bruijn(&c_graph, c_m, c_n)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -1480,7 +1480,7 @@ SEXP R_igraph_kautz(SEXP m, SEXP n) { IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_kautz(&c_graph, c_m, c_n)); + IGRAPH_LOCAL_R_CHECK(igraph_kautz(&c_graph, c_m, c_n)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -1507,7 +1507,7 @@ SEXP R_igraph_famous(SEXP name) { /* Convert input */ c_name = Rf_translateCharUTF8(STRING_ELT(name, 0)); /* Call igraph */ - IGRAPH_R_CHECK(igraph_famous(&c_graph, c_name)); + IGRAPH_LOCAL_R_CHECK(igraph_famous(&c_graph, c_name)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -1536,12 +1536,12 @@ SEXP R_igraph_lcf_vector(SEXP n, SEXP shifts, SEXP repeats) { /* Convert input */ IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(shifts, &c_shifts)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(shifts, &c_shifts)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_shifts); IGRAPH_R_CHECK_INT(repeats); c_repeats = (igraph_integer_t) REAL(repeats)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_lcf_vector(&c_graph, c_n, &c_shifts, c_repeats)); + IGRAPH_LOCAL_R_CHECK(igraph_lcf_vector(&c_graph, c_n, &c_shifts, c_repeats)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -1571,7 +1571,7 @@ SEXP R_igraph_mycielski_graph(SEXP k) { IGRAPH_R_CHECK_INT(k); c_k = (igraph_integer_t) REAL(k)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_mycielski_graph(&c_graph, c_k)); + IGRAPH_LOCAL_R_CHECK(igraph_mycielski_graph(&c_graph, c_k)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -1598,12 +1598,12 @@ SEXP R_igraph_adjlist(SEXP adjlist, SEXP mode, SEXP duplicate) { SEXP r_result; IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ - IGRAPH_R_CHECK(Rz_SEXP_to_igraph_adjlist(adjlist, &c_adjlist)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_igraph_adjlist(adjlist, &c_adjlist)); c_mode = (igraph_neimode_t) Rf_asInteger(mode); IGRAPH_R_CHECK_BOOL(duplicate); c_duplicate = LOGICAL(duplicate)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_adjlist(&c_graph, &c_adjlist, c_mode, c_duplicate)); + IGRAPH_LOCAL_R_CHECK(igraph_adjlist(&c_graph, &c_adjlist, c_mode, c_duplicate)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -1634,7 +1634,7 @@ SEXP R_igraph_full_bipartite(SEXP n1, SEXP n2, SEXP directed, SEXP mode) { SEXP r_result, r_names; IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ - IGRAPH_R_CHECK(igraph_vector_bool_init(&c_types, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_bool_init(&c_types, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_bool_destroy, &c_types); IGRAPH_R_CHECK_INT(n1); c_n1 = (igraph_integer_t) REAL(n1)[0]; @@ -1644,7 +1644,7 @@ SEXP R_igraph_full_bipartite(SEXP n1, SEXP n2, SEXP directed, SEXP mode) { c_directed = LOGICAL(directed)[0]; c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_full_bipartite(&c_graph, &c_types, c_n1, c_n2, c_directed, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_full_bipartite(&c_graph, &c_types, c_n1, c_n2, c_directed, c_mode)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -1683,15 +1683,15 @@ SEXP R_igraph_full_multipartite(SEXP n, SEXP directed, SEXP mode) { SEXP r_result, r_names; IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ - IGRAPH_R_CHECK(igraph_vector_int_init(&c_types, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_types, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_types); - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(n, &c_n)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(n, &c_n)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_n); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_full_multipartite(&c_graph, &c_types, &c_n, c_directed, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_full_multipartite(&c_graph, &c_types, &c_n, c_directed, c_mode)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -1731,19 +1731,19 @@ SEXP R_igraph_realize_degree_sequence(SEXP out_deg, SEXP in_deg, SEXP allowed_ed SEXP r_result; IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(out_deg, &c_out_deg)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(out_deg, &c_out_deg)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_out_deg); if (!Rf_isNull(in_deg)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(in_deg, &c_in_deg)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(in_deg, &c_in_deg)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_in_deg); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_in_deg, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_in_deg, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_in_deg); } c_allowed_edge_types = (igraph_edge_type_sw_t) Rf_asInteger(allowed_edge_types); c_method = (igraph_realize_degseq_t) Rf_asInteger(method); /* Call igraph */ - IGRAPH_R_CHECK(igraph_realize_degree_sequence(&c_graph, &c_out_deg, (Rf_isNull(in_deg) ? 0 : &c_in_deg), c_allowed_edge_types, c_method)); + IGRAPH_LOCAL_R_CHECK(igraph_realize_degree_sequence(&c_graph, &c_out_deg, (Rf_isNull(in_deg) ? 0 : &c_in_deg), c_allowed_edge_types, c_method)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -1775,14 +1775,14 @@ SEXP R_igraph_realize_bipartite_degree_sequence(SEXP degrees1, SEXP degrees2, SE SEXP r_result; IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(degrees1, &c_degrees1)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(degrees1, &c_degrees1)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_degrees1); - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(degrees2, &c_degrees2)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(degrees2, &c_degrees2)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_degrees2); c_allowed_edge_types = (igraph_edge_type_sw_t) Rf_asInteger(allowed_edge_types); c_method = (igraph_realize_degseq_t) Rf_asInteger(method); /* Call igraph */ - IGRAPH_R_CHECK(igraph_realize_bipartite_degree_sequence(&c_graph, &c_degrees1, &c_degrees2, c_allowed_edge_types, c_method)); + IGRAPH_LOCAL_R_CHECK(igraph_realize_bipartite_degree_sequence(&c_graph, &c_degrees1, &c_degrees2, c_allowed_edge_types, c_method)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -1815,12 +1815,12 @@ SEXP R_igraph_circulant(SEXP n, SEXP shifts, SEXP directed) { /* Convert input */ IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(shifts, &c_shifts)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(shifts, &c_shifts)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_shifts); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_circulant(&c_graph, c_n, &c_shifts, c_directed)); + IGRAPH_LOCAL_R_CHECK(igraph_circulant(&c_graph, c_n, &c_shifts, c_directed)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -1853,7 +1853,7 @@ SEXP R_igraph_generalized_petersen(SEXP n, SEXP k) { IGRAPH_R_CHECK_INT(k); c_k = (igraph_integer_t) REAL(k)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_generalized_petersen(&c_graph, c_n, c_k)); + IGRAPH_LOCAL_R_CHECK(igraph_generalized_petersen(&c_graph, c_n, c_k)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -1881,14 +1881,14 @@ SEXP R_igraph_turan(SEXP n, SEXP r) { SEXP r_result, r_names; IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ - IGRAPH_R_CHECK(igraph_vector_int_init(&c_types, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_types, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_types); IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; IGRAPH_R_CHECK_INT(r); c_r = (igraph_integer_t) REAL(r)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_turan(&c_graph, &c_types, c_n, c_r)); + IGRAPH_LOCAL_R_CHECK(igraph_turan(&c_graph, &c_types, c_n, c_r)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -1934,7 +1934,7 @@ SEXP R_igraph_weighted_sparsemat(SEXP A, SEXP directed, SEXP attr, SEXP loops) { IGRAPH_R_CHECK_BOOL(loops); c_loops = LOGICAL(loops)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_weighted_sparsemat(&c_graph, &c_A, c_directed, c_attr, c_loops)); + IGRAPH_LOCAL_R_CHECK(igraph_weighted_sparsemat(&c_graph, &c_A, c_directed, c_attr, c_loops)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -1976,10 +1976,10 @@ SEXP R_igraph_barabasi_game(SEXP n, SEXP power, SEXP m, SEXP outseq, SEXP outpre IGRAPH_R_CHECK_INT(m); c_m = (igraph_integer_t) REAL(m)[0]; if (!Rf_isNull(outseq)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(outseq, &c_outseq)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(outseq, &c_outseq)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_outseq); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_outseq, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_outseq, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_outseq); } IGRAPH_R_CHECK_BOOL(outpref); @@ -1993,7 +1993,7 @@ SEXP R_igraph_barabasi_game(SEXP n, SEXP power, SEXP m, SEXP outseq, SEXP outpre Rz_SEXP_to_igraph(start_from, &c_start_from); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_barabasi_game(&c_graph, c_n, c_power, c_m, (Rf_isNull(outseq) ? 0 : &c_outseq), c_outpref, c_A, c_directed, c_algo, (Rf_isNull(start_from) ? 0 : &c_start_from))); + IGRAPH_LOCAL_R_CHECK(igraph_barabasi_game(&c_graph, c_n, c_power, c_m, (Rf_isNull(outseq) ? 0 : &c_outseq), c_outpref, c_A, c_directed, c_algo, (Rf_isNull(start_from) ? 0 : &c_start_from))); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -2032,7 +2032,7 @@ SEXP R_igraph_erdos_renyi_game_gnp(SEXP n, SEXP p, SEXP directed, SEXP loops) { IGRAPH_R_CHECK_BOOL(loops); c_loops = LOGICAL(loops)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_erdos_renyi_game_gnp(&c_graph, c_n, c_p, c_directed, c_loops)); + IGRAPH_LOCAL_R_CHECK(igraph_erdos_renyi_game_gnp(&c_graph, c_n, c_p, c_directed, c_loops)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -2069,7 +2069,7 @@ SEXP R_igraph_erdos_renyi_game_gnm(SEXP n, SEXP m, SEXP directed, SEXP loops) { IGRAPH_R_CHECK_BOOL(loops); c_loops = LOGICAL(loops)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_erdos_renyi_game_gnm(&c_graph, c_n, c_m, c_directed, c_loops)); + IGRAPH_LOCAL_R_CHECK(igraph_erdos_renyi_game_gnm(&c_graph, c_n, c_m, c_directed, c_loops)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -2096,18 +2096,18 @@ SEXP R_igraph_degree_sequence_game(SEXP out_deg, SEXP in_deg, SEXP method) { SEXP r_result; IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(out_deg, &c_out_deg)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(out_deg, &c_out_deg)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_out_deg); if (!Rf_isNull(in_deg)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(in_deg, &c_in_deg)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(in_deg, &c_in_deg)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_in_deg); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_in_deg, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_in_deg, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_in_deg); } c_method = (igraph_degseq_t) Rf_asInteger(method); /* Call igraph */ - IGRAPH_R_CHECK(igraph_degree_sequence_game(&c_graph, &c_out_deg, (Rf_isNull(in_deg) ? 0 : &c_in_deg), c_method)); + IGRAPH_LOCAL_R_CHECK(igraph_degree_sequence_game(&c_graph, &c_out_deg, (Rf_isNull(in_deg) ? 0 : &c_in_deg), c_method)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -2148,7 +2148,7 @@ SEXP R_igraph_growing_random_game(SEXP n, SEXP m, SEXP directed, SEXP citation) IGRAPH_R_CHECK_BOOL(citation); c_citation = LOGICAL(citation)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_growing_random_game(&c_graph, c_n, c_m, c_directed, c_citation)); + IGRAPH_LOCAL_R_CHECK(igraph_growing_random_game(&c_graph, c_n, c_m, c_directed, c_citation)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -2189,10 +2189,10 @@ SEXP R_igraph_barabasi_aging_game(SEXP nodes, SEXP m, SEXP outseq, SEXP outpref, IGRAPH_R_CHECK_INT(m); c_m = (igraph_integer_t) REAL(m)[0]; if (!Rf_isNull(outseq)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(outseq, &c_outseq)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(outseq, &c_outseq)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_outseq); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_outseq, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_outseq, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_outseq); } IGRAPH_R_CHECK_BOOL(outpref); @@ -2214,7 +2214,7 @@ SEXP R_igraph_barabasi_aging_game(SEXP nodes, SEXP m, SEXP outseq, SEXP outpref, IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_barabasi_aging_game(&c_graph, c_nodes, c_m, (Rf_isNull(outseq) ? 0 : &c_outseq), c_outpref, c_pa_exp, c_aging_exp, c_aging_bin, c_zero_deg_appeal, c_zero_age_appeal, c_deg_coef, c_age_coef, c_directed)); + IGRAPH_LOCAL_R_CHECK(igraph_barabasi_aging_game(&c_graph, c_nodes, c_m, (Rf_isNull(outseq) ? 0 : &c_outseq), c_outpref, c_pa_exp, c_aging_exp, c_aging_bin, c_zero_deg_appeal, c_zero_age_appeal, c_deg_coef, c_age_coef, c_directed)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -2257,10 +2257,10 @@ SEXP R_igraph_recent_degree_game(SEXP n, SEXP power, SEXP window, SEXP m, SEXP o IGRAPH_R_CHECK_INT(m); c_m = (igraph_integer_t) REAL(m)[0]; if (!Rf_isNull(outseq)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(outseq, &c_outseq)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(outseq, &c_outseq)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_outseq); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_outseq, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_outseq, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_outseq); } IGRAPH_R_CHECK_BOOL(outpref); @@ -2270,7 +2270,7 @@ SEXP R_igraph_recent_degree_game(SEXP n, SEXP power, SEXP window, SEXP m, SEXP o IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_recent_degree_game(&c_graph, c_n, c_power, c_window, c_m, (Rf_isNull(outseq) ? 0 : &c_outseq), c_outpref, c_zero_appeal, c_directed)); + IGRAPH_LOCAL_R_CHECK(igraph_recent_degree_game(&c_graph, c_n, c_power, c_window, c_m, (Rf_isNull(outseq) ? 0 : &c_outseq), c_outpref, c_zero_appeal, c_directed)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -2311,10 +2311,10 @@ SEXP R_igraph_recent_degree_aging_game(SEXP nodes, SEXP m, SEXP outseq, SEXP out IGRAPH_R_CHECK_INT(m); c_m = (igraph_integer_t) REAL(m)[0]; if (!Rf_isNull(outseq)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(outseq, &c_outseq)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(outseq, &c_outseq)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_outseq); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_outseq, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_outseq, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_outseq); } IGRAPH_R_CHECK_BOOL(outpref); @@ -2332,7 +2332,7 @@ SEXP R_igraph_recent_degree_aging_game(SEXP nodes, SEXP m, SEXP outseq, SEXP out IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_recent_degree_aging_game(&c_graph, c_nodes, c_m, (Rf_isNull(outseq) ? 0 : &c_outseq), c_outpref, c_pa_exp, c_aging_exp, c_aging_bin, c_window, c_zero_appeal, c_directed)); + IGRAPH_LOCAL_R_CHECK(igraph_recent_degree_aging_game(&c_graph, c_nodes, c_m, (Rf_isNull(outseq) ? 0 : &c_outseq), c_outpref, c_pa_exp, c_aging_exp, c_aging_bin, c_window, c_zero_appeal, c_directed)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -2376,10 +2376,10 @@ SEXP R_igraph_callaway_traits_game(SEXP nodes, SEXP types, SEXP edges_per_step, Rz_SEXP_to_matrix(pref_matrix, &c_pref_matrix); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; - IGRAPH_R_CHECK(igraph_vector_int_init(&c_node_type_vec, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_node_type_vec, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_node_type_vec); /* Call igraph */ - IGRAPH_R_CHECK(igraph_callaway_traits_game(&c_graph, c_nodes, c_types, c_edges_per_step, &c_type_dist, &c_pref_matrix, c_directed, &c_node_type_vec)); + IGRAPH_LOCAL_R_CHECK(igraph_callaway_traits_game(&c_graph, c_nodes, c_types, c_edges_per_step, &c_type_dist, &c_pref_matrix, c_directed, &c_node_type_vec)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -2431,10 +2431,10 @@ SEXP R_igraph_establishment_game(SEXP nodes, SEXP types, SEXP k, SEXP type_dist, Rz_SEXP_to_matrix(pref_matrix, &c_pref_matrix); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; - IGRAPH_R_CHECK(igraph_vector_int_init(&c_node_type_vec, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_node_type_vec, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_node_type_vec); /* Call igraph */ - IGRAPH_R_CHECK(igraph_establishment_game(&c_graph, c_nodes, c_types, c_k, &c_type_dist, &c_pref_matrix, c_directed, &c_node_type_vec)); + IGRAPH_LOCAL_R_CHECK(igraph_establishment_game(&c_graph, c_nodes, c_types, c_k, &c_type_dist, &c_pref_matrix, c_directed, &c_node_type_vec)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -2481,12 +2481,12 @@ SEXP R_igraph_grg_game(SEXP nodes, SEXP radius, SEXP torus) { c_radius = REAL(radius)[0]; IGRAPH_R_CHECK_BOOL(torus); c_torus = LOGICAL(torus)[0]; - IGRAPH_R_CHECK(igraph_vector_init(&c_x, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_x, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_x); - IGRAPH_R_CHECK(igraph_vector_init(&c_y, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_y, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_y); /* Call igraph */ - IGRAPH_R_CHECK(igraph_grg_game(&c_graph, c_nodes, c_radius, c_torus, &c_x, &c_y)); + IGRAPH_LOCAL_R_CHECK(igraph_grg_game(&c_graph, c_nodes, c_radius, c_torus, &c_x, &c_y)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -2542,14 +2542,14 @@ SEXP R_igraph_preference_game(SEXP nodes, SEXP types, SEXP type_dist, SEXP fixed IGRAPH_R_CHECK_BOOL(fixed_sizes); c_fixed_sizes = LOGICAL(fixed_sizes)[0]; Rz_SEXP_to_matrix(pref_matrix, &c_pref_matrix); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_node_type_vec, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_node_type_vec, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_node_type_vec); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; IGRAPH_R_CHECK_BOOL(loops); c_loops = LOGICAL(loops)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_preference_game(&c_graph, c_nodes, c_types, &c_type_dist, c_fixed_sizes, &c_pref_matrix, &c_node_type_vec, c_directed, c_loops)); + IGRAPH_LOCAL_R_CHECK(igraph_preference_game(&c_graph, c_nodes, c_types, &c_type_dist, c_fixed_sizes, &c_pref_matrix, &c_node_type_vec, c_directed, c_loops)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -2601,14 +2601,14 @@ SEXP R_igraph_asymmetric_preference_game(SEXP nodes, SEXP out_types, SEXP in_typ c_in_types = (igraph_integer_t) REAL(in_types)[0]; Rz_SEXP_to_matrix(type_dist_matrix, &c_type_dist_matrix); Rz_SEXP_to_matrix(pref_matrix, &c_pref_matrix); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_node_type_out_vec, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_node_type_out_vec, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_node_type_out_vec); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_node_type_in_vec, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_node_type_in_vec, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_node_type_in_vec); IGRAPH_R_CHECK_BOOL(loops); c_loops = LOGICAL(loops)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_asymmetric_preference_game(&c_graph, c_nodes, c_out_types, c_in_types, &c_type_dist_matrix, &c_pref_matrix, &c_node_type_out_vec, &c_node_type_in_vec, c_loops)); + IGRAPH_LOCAL_R_CHECK(igraph_asymmetric_preference_game(&c_graph, c_nodes, c_out_types, c_in_types, &c_type_dist_matrix, &c_pref_matrix, &c_node_type_out_vec, &c_node_type_in_vec, c_loops)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -2658,7 +2658,7 @@ SEXP R_igraph_rewire_edges(SEXP graph, SEXP prob, SEXP loops, SEXP multiple) { IGRAPH_R_CHECK_BOOL(multiple); c_multiple = LOGICAL(multiple)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_rewire_edges(&c_graph, c_prob, c_loops, c_multiple)); + IGRAPH_LOCAL_R_CHECK(igraph_rewire_edges(&c_graph, c_prob, c_loops, c_multiple)); /* Convert output */ PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); @@ -2691,7 +2691,7 @@ SEXP R_igraph_rewire_directed_edges(SEXP graph, SEXP prob, SEXP loops, SEXP mode c_loops = LOGICAL(loops)[0]; c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_rewire_directed_edges(&c_graph, c_prob, c_loops, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_rewire_directed_edges(&c_graph, c_prob, c_loops, c_mode)); /* Convert output */ PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); @@ -2733,7 +2733,7 @@ SEXP R_igraph_watts_strogatz_game(SEXP dim, SEXP size, SEXP nei, SEXP p, SEXP lo IGRAPH_R_CHECK_BOOL(multiple); c_multiple = LOGICAL(multiple)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_watts_strogatz_game(&c_graph, c_dim, c_size, c_nei, c_p, c_loops, c_multiple)); + IGRAPH_LOCAL_R_CHECK(igraph_watts_strogatz_game(&c_graph, c_dim, c_size, c_nei, c_p, c_loops, c_multiple)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -2772,7 +2772,7 @@ SEXP R_igraph_lastcit_game(SEXP nodes, SEXP edges_per_node, SEXP agebins, SEXP p IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_lastcit_game(&c_graph, c_nodes, c_edges_per_node, c_agebins, &c_preference, c_directed)); + IGRAPH_LOCAL_R_CHECK(igraph_lastcit_game(&c_graph, c_nodes, c_edges_per_node, c_agebins, &c_preference, c_directed)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -2811,7 +2811,7 @@ SEXP R_igraph_cited_type_game(SEXP nodes, SEXP types, SEXP pref, SEXP edges_per_ IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_cited_type_game(&c_graph, c_nodes, &c_types, &c_pref, c_edges_per_step, c_directed)); + IGRAPH_LOCAL_R_CHECK(igraph_cited_type_game(&c_graph, c_nodes, &c_types, &c_pref, c_edges_per_step, c_directed)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -2852,7 +2852,7 @@ SEXP R_igraph_citing_cited_type_game(SEXP nodes, SEXP types, SEXP pref, SEXP edg IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_citing_cited_type_game(&c_graph, c_nodes, &c_types, &c_pref, c_edges_per_step, c_directed)); + IGRAPH_LOCAL_R_CHECK(igraph_citing_cited_type_game(&c_graph, c_nodes, &c_types, &c_pref, c_edges_per_step, c_directed)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -2894,7 +2894,7 @@ SEXP R_igraph_forest_fire_game(SEXP nodes, SEXP fw_prob, SEXP bw_factor, SEXP am IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_forest_fire_game(&c_graph, c_nodes, c_fw_prob, c_bw_factor, c_ambs, c_directed)); + IGRAPH_LOCAL_R_CHECK(igraph_forest_fire_game(&c_graph, c_nodes, c_fw_prob, c_bw_factor, c_ambs, c_directed)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -2931,7 +2931,7 @@ SEXP R_igraph_simple_interconnected_islands_game(SEXP islands_n, SEXP islands_si IGRAPH_R_CHECK_INT(n_inter); c_n_inter = (igraph_integer_t) REAL(n_inter)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_simple_interconnected_islands_game(&c_graph, c_islands_n, c_islands_size, c_islands_pin, c_n_inter)); + IGRAPH_LOCAL_R_CHECK(igraph_simple_interconnected_islands_game(&c_graph, c_islands_n, c_islands_size, c_islands_pin, c_n_inter)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -2967,7 +2967,7 @@ SEXP R_igraph_chung_lu_game(SEXP out_weights, SEXP in_weights, SEXP loops, SEXP c_loops = LOGICAL(loops)[0]; c_variant = (igraph_chung_lu_t) Rf_asInteger(variant); /* Call igraph */ - IGRAPH_R_CHECK(igraph_chung_lu_game(&c_graph, &c_out_weights, (Rf_isNull(in_weights) ? 0 : &c_in_weights), c_loops, c_variant)); + IGRAPH_LOCAL_R_CHECK(igraph_chung_lu_game(&c_graph, &c_out_weights, (Rf_isNull(in_weights) ? 0 : &c_in_weights), c_loops, c_variant)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -3007,7 +3007,7 @@ SEXP R_igraph_static_fitness_game(SEXP no_of_edges, SEXP fitness_out, SEXP fitne IGRAPH_R_CHECK_BOOL(multiple); c_multiple = LOGICAL(multiple)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_static_fitness_game(&c_graph, c_no_of_edges, &c_fitness_out, (Rf_isNull(fitness_in) ? 0 : &c_fitness_in), c_loops, c_multiple)); + IGRAPH_LOCAL_R_CHECK(igraph_static_fitness_game(&c_graph, c_no_of_edges, &c_fitness_out, (Rf_isNull(fitness_in) ? 0 : &c_fitness_in), c_loops, c_multiple)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -3053,7 +3053,7 @@ SEXP R_igraph_static_power_law_game(SEXP no_of_nodes, SEXP no_of_edges, SEXP exp IGRAPH_R_CHECK_BOOL(finite_size_correction); c_finite_size_correction = LOGICAL(finite_size_correction)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_static_power_law_game(&c_graph, c_no_of_nodes, c_no_of_edges, c_exponent_out, c_exponent_in, c_loops, c_multiple, c_finite_size_correction)); + IGRAPH_LOCAL_R_CHECK(igraph_static_power_law_game(&c_graph, c_no_of_nodes, c_no_of_edges, c_exponent_out, c_exponent_in, c_loops, c_multiple, c_finite_size_correction)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -3090,7 +3090,7 @@ SEXP R_igraph_k_regular_game(SEXP no_of_nodes, SEXP k, SEXP directed, SEXP multi IGRAPH_R_CHECK_BOOL(multiple); c_multiple = LOGICAL(multiple)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_k_regular_game(&c_graph, c_no_of_nodes, c_k, c_directed, c_multiple)); + IGRAPH_LOCAL_R_CHECK(igraph_k_regular_game(&c_graph, c_no_of_nodes, c_k, c_directed, c_multiple)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -3122,14 +3122,14 @@ SEXP R_igraph_sbm_game(SEXP n, SEXP pref_matrix, SEXP block_sizes, SEXP directed IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; Rz_SEXP_to_matrix(pref_matrix, &c_pref_matrix); - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(block_sizes, &c_block_sizes)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(block_sizes, &c_block_sizes)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_block_sizes); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; IGRAPH_R_CHECK_BOOL(loops); c_loops = LOGICAL(loops)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_sbm_game(&c_graph, c_n, &c_pref_matrix, &c_block_sizes, c_directed, c_loops)); + IGRAPH_LOCAL_R_CHECK(igraph_sbm_game(&c_graph, c_n, &c_pref_matrix, &c_block_sizes, c_directed, c_loops)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -3169,7 +3169,7 @@ SEXP R_igraph_hsbm_game(SEXP n, SEXP m, SEXP rho, SEXP C, SEXP p) { IGRAPH_R_CHECK_REAL(p); c_p = REAL(p)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_hsbm_game(&c_graph, c_n, c_m, &c_rho, &c_C, c_p)); + IGRAPH_LOCAL_R_CHECK(igraph_hsbm_game(&c_graph, c_n, c_m, &c_rho, &c_C, c_p)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -3200,14 +3200,14 @@ SEXP R_igraph_hsbm_list_game(SEXP n, SEXP mlist, SEXP rholist, SEXP Clist, SEXP /* Convert input */ IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(mlist, &c_mlist)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(mlist, &c_mlist)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_mlist); Ry_igraph_SEXP_to_vector_list(rholist, &c_rholist); Ry_igraph_SEXP_to_matrixlist(Clist, &c_Clist); IGRAPH_R_CHECK_REAL(p); c_p = REAL(p)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_hsbm_list_game(&c_graph, c_n, &c_mlist, &c_rholist, &c_Clist, c_p)); + IGRAPH_LOCAL_R_CHECK(igraph_hsbm_list_game(&c_graph, c_n, &c_mlist, &c_rholist, &c_Clist, c_p)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -3246,11 +3246,11 @@ SEXP R_igraph_correlated_game(SEXP old_graph, SEXP corr, SEXP p, SEXP permutatio Rz_SEXP_to_vector_int_copy(permutation, &c_permutation); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_permutation); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_permutation, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_permutation, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_permutation); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_correlated_game(&c_old_graph, &c_new_graph, c_corr, c_p, (Rf_isNull(permutation) ? 0 : &c_permutation))); + IGRAPH_LOCAL_R_CHECK(igraph_correlated_game(&c_old_graph, &c_new_graph, c_corr, c_p, (Rf_isNull(permutation) ? 0 : &c_permutation))); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_new_graph); @@ -3295,11 +3295,11 @@ SEXP R_igraph_correlated_pair_game(SEXP n, SEXP corr, SEXP p, SEXP directed, SEX Rz_SEXP_to_vector_int_copy(permutation, &c_permutation); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_permutation); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_permutation, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_permutation, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_permutation); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_correlated_pair_game(&c_graph1, &c_graph2, c_n, c_corr, c_p, c_directed, (Rf_isNull(permutation) ? 0 : &c_permutation))); + IGRAPH_LOCAL_R_CHECK(igraph_correlated_pair_game(&c_graph1, &c_graph2, c_n, c_corr, c_p, c_directed, (Rf_isNull(permutation) ? 0 : &c_permutation))); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -3342,7 +3342,7 @@ SEXP R_igraph_dot_product_game(SEXP vecs, SEXP directed) { IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_dot_product_game(&c_graph, &c_vecs, c_directed)); + IGRAPH_LOCAL_R_CHECK(igraph_dot_product_game(&c_graph, &c_vecs, c_directed)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -3378,10 +3378,10 @@ SEXP R_igraph_sample_sphere_surface(SEXP dim, SEXP n, SEXP radius, SEXP positive c_radius = REAL(radius)[0]; IGRAPH_R_CHECK_BOOL(positive); c_positive = LOGICAL(positive)[0]; - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); /* Call igraph */ - IGRAPH_R_CHECK(igraph_sample_sphere_surface(c_dim, c_n, c_radius, c_positive, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_sample_sphere_surface(c_dim, c_n, c_radius, c_positive, &c_res)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -3416,10 +3416,10 @@ SEXP R_igraph_sample_sphere_volume(SEXP dim, SEXP n, SEXP radius, SEXP positive) c_radius = REAL(radius)[0]; IGRAPH_R_CHECK_BOOL(positive); c_positive = LOGICAL(positive)[0]; - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); /* Call igraph */ - IGRAPH_R_CHECK(igraph_sample_sphere_volume(c_dim, c_n, c_radius, c_positive, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_sample_sphere_volume(c_dim, c_n, c_radius, c_positive, &c_res)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -3447,10 +3447,10 @@ SEXP R_igraph_sample_dirichlet(SEXP n, SEXP alpha) { IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; Rz_SEXP_to_vector(alpha, &c_alpha); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); /* Call igraph */ - IGRAPH_R_CHECK(igraph_sample_dirichlet(c_n, &c_alpha, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_sample_dirichlet(c_n, &c_alpha, &c_res)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -3480,7 +3480,7 @@ SEXP R_igraph_are_adjacent(SEXP graph, SEXP v1, SEXP v2) { c_v1 = (igraph_integer_t) REAL(v1)[0]; c_v2 = (igraph_integer_t) REAL(v2)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_are_adjacent(&c_graph, c_v1, c_v2, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_are_adjacent(&c_graph, c_v1, c_v2, &c_res)); /* Convert output */ PROTECT(res=NEW_LOGICAL(1)); @@ -3509,7 +3509,7 @@ SEXP R_igraph_are_connected(SEXP graph, SEXP v1, SEXP v2) { c_v1 = (igraph_integer_t) REAL(v1)[0]; c_v2 = (igraph_integer_t) REAL(v2)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_are_connected(&c_graph, c_v1, c_v2, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_are_connected(&c_graph, c_v1, c_v2, &c_res)); /* Convert output */ PROTECT(res=NEW_LOGICAL(1)); @@ -3545,16 +3545,16 @@ SEXP R_igraph_diameter(SEXP graph, SEXP directed, SEXP unconnected) { Rz_SEXP_to_igraph(graph, &c_graph); c_from=0; c_to=0; - IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_path, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_vertex_path, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_path); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_path, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edge_path, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_path); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; IGRAPH_R_CHECK_BOOL(unconnected); c_unconnected = LOGICAL(unconnected)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_diameter(&c_graph, &c_res, &c_from, &c_to, &c_vertex_path, &c_edge_path, c_directed, c_unconnected)); + IGRAPH_LOCAL_R_CHECK(igraph_diameter(&c_graph, &c_res, &c_from, &c_to, &c_vertex_path, &c_edge_path, c_directed, c_unconnected)); /* Convert output */ PROTECT(r_result=NEW_LIST(5)); @@ -3617,16 +3617,16 @@ SEXP R_igraph_diameter_dijkstra(SEXP graph, SEXP weights, SEXP directed, SEXP un } c_from=0; c_to=0; - IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_path, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_vertex_path, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_path); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_path, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edge_path, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_path); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; IGRAPH_R_CHECK_BOOL(unconnected); c_unconnected = LOGICAL(unconnected)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_diameter_dijkstra(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_res, &c_from, &c_to, &c_vertex_path, &c_edge_path, c_directed, c_unconnected)); + IGRAPH_LOCAL_R_CHECK(igraph_diameter_dijkstra(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_res, &c_from, &c_to, &c_vertex_path, &c_edge_path, c_directed, c_unconnected)); /* Convert output */ PROTECT(r_result=NEW_LIST(5)); @@ -3681,9 +3681,9 @@ SEXP R_igraph_closeness(SEXP graph, SEXP vids, SEXP mode, SEXP weights, SEXP nor IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_reachable_count, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_reachable_count, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_reachable_count); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); @@ -3694,7 +3694,7 @@ SEXP R_igraph_closeness(SEXP graph, SEXP vids, SEXP mode, SEXP weights, SEXP nor IGRAPH_R_CHECK_BOOL(normalized); c_normalized = LOGICAL(normalized)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_closeness(&c_graph, &c_res, &c_reachable_count, &c_all_reachable, c_vids, c_mode, (Rf_isNull(weights) ? 0 : &c_weights), c_normalized)); + IGRAPH_LOCAL_R_CHECK(igraph_closeness(&c_graph, &c_res, &c_reachable_count, &c_all_reachable, c_vids, c_mode, (Rf_isNull(weights) ? 0 : &c_weights), c_normalized)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -3744,9 +3744,9 @@ SEXP R_igraph_closeness_cutoff(SEXP graph, SEXP vids, SEXP mode, SEXP weights, S IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_reachable_count, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_reachable_count, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_reachable_count); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); @@ -3759,7 +3759,7 @@ SEXP R_igraph_closeness_cutoff(SEXP graph, SEXP vids, SEXP mode, SEXP weights, S IGRAPH_R_CHECK_REAL(cutoff); c_cutoff = REAL(cutoff)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_closeness_cutoff(&c_graph, &c_res, &c_reachable_count, &c_all_reachable, c_vids, c_mode, (Rf_isNull(weights) ? 0 : &c_weights), c_normalized, c_cutoff)); + IGRAPH_LOCAL_R_CHECK(igraph_closeness_cutoff(&c_graph, &c_res, &c_reachable_count, &c_all_reachable, c_vids, c_mode, (Rf_isNull(weights) ? 0 : &c_weights), c_normalized, c_cutoff)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -3803,7 +3803,7 @@ SEXP R_igraph_distances(SEXP graph, SEXP from, SEXP to, SEXP mode) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); igraph_vector_int_t c_from_data; Rz_SEXP_to_igraph_vs(from, &c_graph, &c_from, &c_from_data); @@ -3811,7 +3811,7 @@ SEXP R_igraph_distances(SEXP graph, SEXP from, SEXP to, SEXP mode) { Rz_SEXP_to_igraph_vs(to, &c_graph, &c_to, &c_to_data); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_distances(&c_graph, &c_res, c_from, c_to, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_distances(&c_graph, &c_res, c_from, c_to, c_mode)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -3844,7 +3844,7 @@ SEXP R_igraph_distances_cutoff(SEXP graph, SEXP from, SEXP to, SEXP mode, SEXP c IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); igraph_vector_int_t c_from_data; Rz_SEXP_to_igraph_vs(from, &c_graph, &c_from, &c_from_data); @@ -3854,7 +3854,7 @@ SEXP R_igraph_distances_cutoff(SEXP graph, SEXP from, SEXP to, SEXP mode, SEXP c IGRAPH_R_CHECK_REAL(cutoff); c_cutoff = REAL(cutoff)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_distances_cutoff(&c_graph, &c_res, c_from, c_to, c_mode, c_cutoff)); + IGRAPH_LOCAL_R_CHECK(igraph_distances_cutoff(&c_graph, &c_res, c_from, c_to, c_mode, c_cutoff)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -3888,15 +3888,15 @@ SEXP R_igraph_get_shortest_path(SEXP graph, SEXP from, SEXP to, SEXP mode) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertices, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_vertices, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertices); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edges, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edges, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edges); c_from = (igraph_integer_t) REAL(from)[0]; c_to = (igraph_integer_t) REAL(to)[0]; c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_get_shortest_path(&c_graph, &c_vertices, &c_edges, c_from, c_to, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_get_shortest_path(&c_graph, &c_vertices, &c_edges, c_from, c_to, c_mode)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -3937,9 +3937,9 @@ SEXP R_igraph_get_shortest_path_bellman_ford(SEXP graph, SEXP from, SEXP to, SEX IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertices, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_vertices, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertices); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edges, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edges, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edges); c_from = (igraph_integer_t) REAL(from)[0]; c_to = (igraph_integer_t) REAL(to)[0]; @@ -3948,7 +3948,7 @@ SEXP R_igraph_get_shortest_path_bellman_ford(SEXP graph, SEXP from, SEXP to, SEX } c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_get_shortest_path_bellman_ford(&c_graph, &c_vertices, &c_edges, c_from, c_to, (Rf_isNull(weights) ? 0 : &c_weights), c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_get_shortest_path_bellman_ford(&c_graph, &c_vertices, &c_edges, c_from, c_to, (Rf_isNull(weights) ? 0 : &c_weights), c_mode)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -3989,9 +3989,9 @@ SEXP R_igraph_get_shortest_path_dijkstra(SEXP graph, SEXP from, SEXP to, SEXP we IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertices, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_vertices, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertices); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edges, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edges, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edges); c_from = (igraph_integer_t) REAL(from)[0]; c_to = (igraph_integer_t) REAL(to)[0]; @@ -4000,7 +4000,7 @@ SEXP R_igraph_get_shortest_path_dijkstra(SEXP graph, SEXP from, SEXP to, SEXP we } c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_get_shortest_path_dijkstra(&c_graph, &c_vertices, &c_edges, c_from, c_to, (Rf_isNull(weights) ? 0 : &c_weights), c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_get_shortest_path_dijkstra(&c_graph, &c_vertices, &c_edges, c_from, c_to, (Rf_isNull(weights) ? 0 : &c_weights), c_mode)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -4043,9 +4043,9 @@ SEXP R_igraph_get_shortest_path_astar(SEXP graph, SEXP from, SEXP to, SEXP weigh IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertices, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_vertices, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertices); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edges, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edges, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edges); c_from = (igraph_integer_t) REAL(from)[0]; c_to = (igraph_integer_t) REAL(to)[0]; @@ -4054,7 +4054,7 @@ SEXP R_igraph_get_shortest_path_astar(SEXP graph, SEXP from, SEXP to, SEXP weigh } c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_get_shortest_path_astar(&c_graph, &c_vertices, &c_edges, c_from, c_to, (Rf_isNull(weights) ? 0 : &c_weights), c_mode, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_get_shortest_path_astar(&c_graph, &c_vertices, &c_edges, c_from, c_to, (Rf_isNull(weights) ? 0 : &c_weights), c_mode, 0, 0)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -4098,20 +4098,20 @@ SEXP R_igraph_get_shortest_paths(SEXP graph, SEXP from, SEXP to, SEXP mode) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_vertices, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_vertices, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_vertices); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_edges, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_edges, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_edges); c_from = (igraph_integer_t) REAL(from)[0]; igraph_vector_int_t c_to_data; Rz_SEXP_to_igraph_vs(to, &c_graph, &c_to, &c_to_data); c_mode = (igraph_neimode_t) Rf_asInteger(mode); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_parents, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_parents, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_parents); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_inbound_edges, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_inbound_edges, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_inbound_edges); /* Call igraph */ - IGRAPH_R_CHECK(igraph_get_shortest_paths(&c_graph, &c_vertices, &c_edges, c_from, c_to, c_mode, &c_parents, &c_inbound_edges)); + IGRAPH_LOCAL_R_CHECK(igraph_get_shortest_paths(&c_graph, &c_vertices, &c_edges, c_from, c_to, c_mode, &c_parents, &c_inbound_edges)); /* Convert output */ PROTECT(r_result=NEW_LIST(4)); @@ -4165,18 +4165,18 @@ SEXP R_igraph_get_all_shortest_paths(SEXP graph, SEXP from, SEXP to, SEXP mode) IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_vertices, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_vertices, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_vertices); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_edges, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_edges, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_edges); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_nrgeo, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_nrgeo, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_nrgeo); c_from = (igraph_integer_t) REAL(from)[0]; igraph_vector_int_t c_to_data; Rz_SEXP_to_igraph_vs(to, &c_graph, &c_to, &c_to_data); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_get_all_shortest_paths(&c_graph, &c_vertices, &c_edges, &c_nrgeo, c_from, c_to, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_get_all_shortest_paths(&c_graph, &c_vertices, &c_edges, &c_nrgeo, c_from, c_to, c_mode)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -4222,7 +4222,7 @@ SEXP R_igraph_distances_dijkstra(SEXP graph, SEXP from, SEXP to, SEXP weights, S IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); igraph_vector_int_t c_from_data; Rz_SEXP_to_igraph_vs(from, &c_graph, &c_from, &c_from_data); @@ -4233,7 +4233,7 @@ SEXP R_igraph_distances_dijkstra(SEXP graph, SEXP from, SEXP to, SEXP weights, S } c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_distances_dijkstra(&c_graph, &c_res, c_from, c_to, (Rf_isNull(weights) ? 0 : &c_weights), c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_distances_dijkstra(&c_graph, &c_res, c_from, c_to, (Rf_isNull(weights) ? 0 : &c_weights), c_mode)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -4267,7 +4267,7 @@ SEXP R_igraph_distances_dijkstra_cutoff(SEXP graph, SEXP from, SEXP to, SEXP wei IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); igraph_vector_int_t c_from_data; Rz_SEXP_to_igraph_vs(from, &c_graph, &c_from, &c_from_data); @@ -4280,7 +4280,7 @@ SEXP R_igraph_distances_dijkstra_cutoff(SEXP graph, SEXP from, SEXP to, SEXP wei IGRAPH_R_CHECK_REAL(cutoff); c_cutoff = REAL(cutoff)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_distances_dijkstra_cutoff(&c_graph, &c_res, c_from, c_to, (Rf_isNull(weights) ? 0 : &c_weights), c_mode, c_cutoff)); + IGRAPH_LOCAL_R_CHECK(igraph_distances_dijkstra_cutoff(&c_graph, &c_res, c_from, c_to, (Rf_isNull(weights) ? 0 : &c_weights), c_mode, c_cutoff)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -4319,9 +4319,9 @@ SEXP R_igraph_get_shortest_paths_dijkstra(SEXP graph, SEXP from, SEXP to, SEXP w IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_vertices, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_vertices, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_vertices); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_edges, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_edges, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_edges); c_from = (igraph_integer_t) REAL(from)[0]; igraph_vector_int_t c_to_data; @@ -4330,12 +4330,12 @@ SEXP R_igraph_get_shortest_paths_dijkstra(SEXP graph, SEXP from, SEXP to, SEXP w Rz_SEXP_to_vector(weights, &c_weights); } c_mode = (igraph_neimode_t) Rf_asInteger(mode); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_parents, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_parents, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_parents); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_inbound_edges, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_inbound_edges, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_inbound_edges); /* Call igraph */ - IGRAPH_R_CHECK(igraph_get_shortest_paths_dijkstra(&c_graph, &c_vertices, &c_edges, c_from, c_to, (Rf_isNull(weights) ? 0 : &c_weights), c_mode, &c_parents, &c_inbound_edges)); + IGRAPH_LOCAL_R_CHECK(igraph_get_shortest_paths_dijkstra(&c_graph, &c_vertices, &c_edges, c_from, c_to, (Rf_isNull(weights) ? 0 : &c_weights), c_mode, &c_parents, &c_inbound_edges)); /* Convert output */ PROTECT(r_result=NEW_LIST(4)); @@ -4392,9 +4392,9 @@ SEXP R_igraph_get_shortest_paths_bellman_ford(SEXP graph, SEXP from, SEXP to, SE IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_vertices, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_vertices, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_vertices); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_edges, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_edges, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_edges); c_from = (igraph_integer_t) REAL(from)[0]; igraph_vector_int_t c_to_data; @@ -4403,12 +4403,12 @@ SEXP R_igraph_get_shortest_paths_bellman_ford(SEXP graph, SEXP from, SEXP to, SE Rz_SEXP_to_vector(weights, &c_weights); } c_mode = (igraph_neimode_t) Rf_asInteger(mode); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_parents, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_parents, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_parents); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_inbound_edges, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_inbound_edges, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_inbound_edges); /* Call igraph */ - IGRAPH_R_CHECK(igraph_get_shortest_paths_bellman_ford(&c_graph, &c_vertices, &c_edges, c_from, c_to, (Rf_isNull(weights) ? 0 : &c_weights), c_mode, &c_parents, &c_inbound_edges)); + IGRAPH_LOCAL_R_CHECK(igraph_get_shortest_paths_bellman_ford(&c_graph, &c_vertices, &c_edges, c_from, c_to, (Rf_isNull(weights) ? 0 : &c_weights), c_mode, &c_parents, &c_inbound_edges)); /* Convert output */ PROTECT(r_result=NEW_LIST(4)); @@ -4463,11 +4463,11 @@ SEXP R_igraph_get_all_shortest_paths_dijkstra(SEXP graph, SEXP from, SEXP to, SE IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_vertices, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_vertices, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_vertices); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_edges, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_edges, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_edges); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_nrgeo, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_nrgeo, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_nrgeo); c_from = (igraph_integer_t) REAL(from)[0]; igraph_vector_int_t c_to_data; @@ -4477,7 +4477,7 @@ SEXP R_igraph_get_all_shortest_paths_dijkstra(SEXP graph, SEXP from, SEXP to, SE } c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_get_all_shortest_paths_dijkstra(&c_graph, &c_vertices, &c_edges, &c_nrgeo, c_from, c_to, (Rf_isNull(weights) ? 0 : &c_weights), c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_get_all_shortest_paths_dijkstra(&c_graph, &c_vertices, &c_edges, &c_nrgeo, c_from, c_to, (Rf_isNull(weights) ? 0 : &c_weights), c_mode)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -4523,7 +4523,7 @@ SEXP R_igraph_distances_bellman_ford(SEXP graph, SEXP from, SEXP to, SEXP weight IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); igraph_vector_int_t c_from_data; Rz_SEXP_to_igraph_vs(from, &c_graph, &c_from, &c_from_data); @@ -4534,7 +4534,7 @@ SEXP R_igraph_distances_bellman_ford(SEXP graph, SEXP from, SEXP to, SEXP weight } c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_distances_bellman_ford(&c_graph, &c_res, c_from, c_to, (Rf_isNull(weights) ? 0 : &c_weights), c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_distances_bellman_ford(&c_graph, &c_res, c_from, c_to, (Rf_isNull(weights) ? 0 : &c_weights), c_mode)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -4566,7 +4566,7 @@ SEXP R_igraph_distances_johnson(SEXP graph, SEXP from, SEXP to, SEXP weights) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); igraph_vector_int_t c_from_data; Rz_SEXP_to_igraph_vs(from, &c_graph, &c_from, &c_from_data); @@ -4576,7 +4576,7 @@ SEXP R_igraph_distances_johnson(SEXP graph, SEXP from, SEXP to, SEXP weights) { Rz_SEXP_to_vector(weights, &c_weights); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_distances_johnson(&c_graph, &c_res, c_from, c_to, (Rf_isNull(weights) ? 0 : &c_weights))); + IGRAPH_LOCAL_R_CHECK(igraph_distances_johnson(&c_graph, &c_res, c_from, c_to, (Rf_isNull(weights) ? 0 : &c_weights))); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -4610,7 +4610,7 @@ SEXP R_igraph_distances_floyd_warshall(SEXP graph, SEXP from, SEXP to, SEXP weig IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); igraph_vector_int_t c_from_data; Rz_SEXP_to_igraph_vs(from, &c_graph, &c_from, &c_from_data); @@ -4622,7 +4622,7 @@ SEXP R_igraph_distances_floyd_warshall(SEXP graph, SEXP from, SEXP to, SEXP weig c_mode = (igraph_neimode_t) Rf_asInteger(mode); c_method = (igraph_floyd_warshall_algorithm_t) Rf_asInteger(method); /* Call igraph */ - IGRAPH_R_CHECK(igraph_distances_floyd_warshall(&c_graph, &c_res, c_from, c_to, (Rf_isNull(weights) ? 0 : &c_weights), c_mode, c_method)); + IGRAPH_LOCAL_R_CHECK(igraph_distances_floyd_warshall(&c_graph, &c_res, c_from, c_to, (Rf_isNull(weights) ? 0 : &c_weights), c_mode, c_method)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -4657,9 +4657,9 @@ SEXP R_igraph_voronoi(SEXP graph, SEXP generators, SEXP weights, SEXP mode, SEXP IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_membership, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_membership, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); - IGRAPH_R_CHECK(igraph_vector_init(&c_distances, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_distances, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_distances); Rz_SEXP_to_vector_int_copy(generators, &c_generators); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_generators); @@ -4669,7 +4669,7 @@ SEXP R_igraph_voronoi(SEXP graph, SEXP generators, SEXP weights, SEXP mode, SEXP c_mode = (igraph_neimode_t) Rf_asInteger(mode); c_tiebreaker = (igraph_voronoi_tiebreaker_t) Rf_asInteger(tiebreaker); /* Call igraph */ - IGRAPH_R_CHECK(igraph_voronoi(&c_graph, &c_membership, &c_distances, &c_generators, (Rf_isNull(weights) ? 0 : &c_weights), c_mode, c_tiebreaker)); + IGRAPH_LOCAL_R_CHECK(igraph_voronoi(&c_graph, &c_membership, &c_distances, &c_generators, (Rf_isNull(weights) ? 0 : &c_weights), c_mode, c_tiebreaker)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -4710,7 +4710,7 @@ SEXP R_igraph_get_all_simple_paths(SEXP graph, SEXP from, SEXP to, SEXP cutoff, IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_res); c_from = (igraph_integer_t) REAL(from)[0]; igraph_vector_int_t c_to_data; @@ -4719,7 +4719,7 @@ SEXP R_igraph_get_all_simple_paths(SEXP graph, SEXP from, SEXP to, SEXP cutoff, c_cutoff = (igraph_integer_t) REAL(cutoff)[0]; c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_get_all_simple_paths(&c_graph, &c_res, c_from, c_to, c_cutoff, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_get_all_simple_paths(&c_graph, &c_res, c_from, c_to, c_cutoff, c_mode)); /* Convert output */ PROTECT(res=Ry_igraph_vector_int_to_SEXPp1(&c_res)); @@ -4756,9 +4756,9 @@ SEXP R_igraph_get_k_shortest_paths(SEXP graph, SEXP weights, SEXP k, SEXP from, if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_vertex_paths, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_vertex_paths, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_vertex_paths); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_edge_paths, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_edge_paths, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_edge_paths); IGRAPH_R_CHECK_INT(k); c_k = (igraph_integer_t) REAL(k)[0]; @@ -4766,7 +4766,7 @@ SEXP R_igraph_get_k_shortest_paths(SEXP graph, SEXP weights, SEXP k, SEXP from, c_to = (igraph_integer_t) REAL(to)[0]; c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_get_k_shortest_paths(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_vertex_paths, &c_edge_paths, c_k, c_from, c_to, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_get_k_shortest_paths(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_vertex_paths, &c_edge_paths, c_k, c_from, c_to, c_mode)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -4807,16 +4807,16 @@ SEXP R_igraph_get_widest_path(SEXP graph, SEXP from, SEXP to, SEXP weights, SEXP IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertices, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_vertices, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertices); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edges, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edges, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edges); c_from = (igraph_integer_t) REAL(from)[0]; c_to = (igraph_integer_t) REAL(to)[0]; Rz_SEXP_to_vector(weights, &c_weights); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_get_widest_path(&c_graph, &c_vertices, &c_edges, c_from, c_to, &c_weights, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_get_widest_path(&c_graph, &c_vertices, &c_edges, c_from, c_to, &c_weights, c_mode)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -4861,21 +4861,21 @@ SEXP R_igraph_get_widest_paths(SEXP graph, SEXP from, SEXP to, SEXP weights, SEX IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_vertices, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_vertices, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_vertices); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_edges, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_edges, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_edges); c_from = (igraph_integer_t) REAL(from)[0]; igraph_vector_int_t c_to_data; Rz_SEXP_to_igraph_vs(to, &c_graph, &c_to, &c_to_data); Rz_SEXP_to_vector(weights, &c_weights); c_mode = (igraph_neimode_t) Rf_asInteger(mode); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_parents, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_parents, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_parents); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_inbound_edges, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_inbound_edges, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_inbound_edges); /* Call igraph */ - IGRAPH_R_CHECK(igraph_get_widest_paths(&c_graph, &c_vertices, &c_edges, c_from, c_to, &c_weights, c_mode, &c_parents, &c_inbound_edges)); + IGRAPH_LOCAL_R_CHECK(igraph_get_widest_paths(&c_graph, &c_vertices, &c_edges, c_from, c_to, &c_weights, c_mode, &c_parents, &c_inbound_edges)); /* Convert output */ PROTECT(r_result=NEW_LIST(4)); @@ -4926,7 +4926,7 @@ SEXP R_igraph_widest_path_widths_dijkstra(SEXP graph, SEXP from, SEXP to, SEXP w IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); igraph_vector_int_t c_from_data; Rz_SEXP_to_igraph_vs(from, &c_graph, &c_from, &c_from_data); @@ -4935,7 +4935,7 @@ SEXP R_igraph_widest_path_widths_dijkstra(SEXP graph, SEXP from, SEXP to, SEXP w Rz_SEXP_to_vector(weights, &c_weights); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_widest_path_widths_dijkstra(&c_graph, &c_res, c_from, c_to, &c_weights, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_widest_path_widths_dijkstra(&c_graph, &c_res, c_from, c_to, &c_weights, c_mode)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -4968,7 +4968,7 @@ SEXP R_igraph_widest_path_widths_floyd_warshall(SEXP graph, SEXP from, SEXP to, IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); igraph_vector_int_t c_from_data; Rz_SEXP_to_igraph_vs(from, &c_graph, &c_from, &c_from_data); @@ -4977,7 +4977,7 @@ SEXP R_igraph_widest_path_widths_floyd_warshall(SEXP graph, SEXP from, SEXP to, Rz_SEXP_to_vector(weights, &c_weights); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_widest_path_widths_floyd_warshall(&c_graph, &c_res, c_from, c_to, &c_weights, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_widest_path_widths_floyd_warshall(&c_graph, &c_res, c_from, c_to, &c_weights, c_mode)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -5008,7 +5008,7 @@ SEXP R_igraph_spanner(SEXP graph, SEXP stretch, SEXP weights) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_spanner, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_spanner, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_spanner); IGRAPH_R_CHECK_REAL(stretch); c_stretch = REAL(stretch)[0]; @@ -5016,7 +5016,7 @@ SEXP R_igraph_spanner(SEXP graph, SEXP stretch, SEXP weights) { Rz_SEXP_to_vector(weights, &c_weights); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_spanner(&c_graph, &c_spanner, c_stretch, (Rf_isNull(weights) ? 0 : &c_weights))); + IGRAPH_LOCAL_R_CHECK(igraph_spanner(&c_graph, &c_spanner, c_stretch, (Rf_isNull(weights) ? 0 : &c_weights))); /* Convert output */ PROTECT(spanner=Ry_igraph_vector_int_to_SEXPp1(&c_spanner)); @@ -5043,12 +5043,12 @@ SEXP R_igraph_subcomponent(SEXP graph, SEXP vid, SEXP mode) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_res); c_vid = (igraph_integer_t) REAL(vid)[0]; c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_subcomponent(&c_graph, &c_res, c_vid, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_subcomponent(&c_graph, &c_res, c_vid, c_mode)); /* Convert output */ PROTECT(res=Ry_igraph_vector_int_to_SEXPp1(&c_res)); @@ -5076,7 +5076,7 @@ SEXP R_igraph_betweenness(SEXP graph, SEXP vids, SEXP directed, SEXP weights) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); @@ -5086,7 +5086,7 @@ SEXP R_igraph_betweenness(SEXP graph, SEXP vids, SEXP directed, SEXP weights) { Rz_SEXP_to_vector(weights, &c_weights); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_betweenness(&c_graph, &c_res, c_vids, c_directed, (Rf_isNull(weights) ? 0 : &c_weights))); + IGRAPH_LOCAL_R_CHECK(igraph_betweenness(&c_graph, &c_res, c_vids, c_directed, (Rf_isNull(weights) ? 0 : &c_weights))); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -5117,7 +5117,7 @@ SEXP R_igraph_betweenness_cutoff(SEXP graph, SEXP vids, SEXP directed, SEXP weig IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); @@ -5129,7 +5129,7 @@ SEXP R_igraph_betweenness_cutoff(SEXP graph, SEXP vids, SEXP directed, SEXP weig IGRAPH_R_CHECK_REAL(cutoff); c_cutoff = REAL(cutoff)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_betweenness_cutoff(&c_graph, &c_res, c_vids, c_directed, (Rf_isNull(weights) ? 0 : &c_weights), c_cutoff)); + IGRAPH_LOCAL_R_CHECK(igraph_betweenness_cutoff(&c_graph, &c_res, c_vids, c_directed, (Rf_isNull(weights) ? 0 : &c_weights), c_cutoff)); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -5161,7 +5161,7 @@ SEXP R_igraph_betweenness_subset(SEXP graph, SEXP vids, SEXP directed, SEXP sour IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); @@ -5175,7 +5175,7 @@ SEXP R_igraph_betweenness_subset(SEXP graph, SEXP vids, SEXP directed, SEXP sour Rz_SEXP_to_vector(weights, &c_weights); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_betweenness_subset(&c_graph, &c_res, c_vids, c_directed, c_sources, c_targets, (Rf_isNull(weights) ? 0 : &c_weights))); + IGRAPH_LOCAL_R_CHECK(igraph_betweenness_subset(&c_graph, &c_res, c_vids, c_directed, c_sources, c_targets, (Rf_isNull(weights) ? 0 : &c_weights))); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -5208,7 +5208,7 @@ SEXP R_igraph_edge_betweenness(SEXP graph, SEXP directed, SEXP weights) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; @@ -5216,7 +5216,7 @@ SEXP R_igraph_edge_betweenness(SEXP graph, SEXP directed, SEXP weights) { Rz_SEXP_to_vector(weights, &c_weights); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_edge_betweenness(&c_graph, &c_res, c_directed, (Rf_isNull(weights) ? 0 : &c_weights))); + IGRAPH_LOCAL_R_CHECK(igraph_edge_betweenness(&c_graph, &c_res, c_directed, (Rf_isNull(weights) ? 0 : &c_weights))); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -5244,7 +5244,7 @@ SEXP R_igraph_edge_betweenness_cutoff(SEXP graph, SEXP directed, SEXP weights, S IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; @@ -5254,7 +5254,7 @@ SEXP R_igraph_edge_betweenness_cutoff(SEXP graph, SEXP directed, SEXP weights, S IGRAPH_R_CHECK_REAL(cutoff); c_cutoff = REAL(cutoff)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_edge_betweenness_cutoff(&c_graph, &c_res, c_directed, (Rf_isNull(weights) ? 0 : &c_weights), c_cutoff)); + IGRAPH_LOCAL_R_CHECK(igraph_edge_betweenness_cutoff(&c_graph, &c_res, c_directed, (Rf_isNull(weights) ? 0 : &c_weights), c_cutoff)); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -5284,10 +5284,10 @@ SEXP R_igraph_edge_betweenness_subset(SEXP graph, SEXP eids, SEXP directed, SEXP IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_eids_data; - IGRAPH_R_CHECK(Rz_SEXP_to_igraph_es(eids, &c_graph, &c_eids, &c_eids_data)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_igraph_es(eids, &c_graph, &c_eids, &c_eids_data)); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; igraph_vector_int_t c_sources_data; @@ -5298,7 +5298,7 @@ SEXP R_igraph_edge_betweenness_subset(SEXP graph, SEXP eids, SEXP directed, SEXP Rz_SEXP_to_vector(weights, &c_weights); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_edge_betweenness_subset(&c_graph, &c_res, c_eids, c_directed, c_sources, c_targets, (Rf_isNull(weights) ? 0 : &c_weights))); + IGRAPH_LOCAL_R_CHECK(igraph_edge_betweenness_subset(&c_graph, &c_res, c_eids, c_directed, c_sources, c_targets, (Rf_isNull(weights) ? 0 : &c_weights))); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -5333,7 +5333,7 @@ SEXP R_igraph_harmonic_centrality(SEXP graph, SEXP vids, SEXP mode, SEXP weights IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); @@ -5344,7 +5344,7 @@ SEXP R_igraph_harmonic_centrality(SEXP graph, SEXP vids, SEXP mode, SEXP weights IGRAPH_R_CHECK_BOOL(normalized); c_normalized = LOGICAL(normalized)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_harmonic_centrality(&c_graph, &c_res, c_vids, c_mode, (Rf_isNull(weights) ? 0 : &c_weights), c_normalized)); + IGRAPH_LOCAL_R_CHECK(igraph_harmonic_centrality(&c_graph, &c_res, c_vids, c_mode, (Rf_isNull(weights) ? 0 : &c_weights), c_normalized)); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -5376,7 +5376,7 @@ SEXP R_igraph_harmonic_centrality_cutoff(SEXP graph, SEXP vids, SEXP mode, SEXP IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); @@ -5389,7 +5389,7 @@ SEXP R_igraph_harmonic_centrality_cutoff(SEXP graph, SEXP vids, SEXP mode, SEXP IGRAPH_R_CHECK_REAL(cutoff); c_cutoff = REAL(cutoff)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_harmonic_centrality_cutoff(&c_graph, &c_res, c_vids, c_mode, (Rf_isNull(weights) ? 0 : &c_weights), c_normalized, c_cutoff)); + IGRAPH_LOCAL_R_CHECK(igraph_harmonic_centrality_cutoff(&c_graph, &c_res, c_vids, c_mode, (Rf_isNull(weights) ? 0 : &c_weights), c_normalized, c_cutoff)); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -5426,7 +5426,7 @@ SEXP R_igraph_pagerank(SEXP graph, SEXP algo, SEXP vids, SEXP directed, SEXP dam /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_algo = (igraph_pagerank_algo_t) Rf_asInteger(algo); - IGRAPH_R_CHECK(igraph_vector_init(&c_vector, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_vector, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_vector); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); @@ -5446,7 +5446,7 @@ SEXP R_igraph_pagerank(SEXP graph, SEXP algo, SEXP vids, SEXP directed, SEXP dam } } /* Call igraph */ - IGRAPH_R_CHECK(igraph_pagerank(&c_graph, c_algo, &c_vector, &c_value, c_vids, c_directed, c_damping, (Rf_isNull(weights) ? 0 : &c_weights), c_options)); + IGRAPH_LOCAL_R_CHECK(igraph_pagerank(&c_graph, c_algo, &c_vector, &c_value, c_vids, c_directed, c_damping, (Rf_isNull(weights) ? 0 : &c_weights), c_options)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -5500,7 +5500,7 @@ SEXP R_igraph_personalized_pagerank(SEXP graph, SEXP algo, SEXP vids, SEXP direc /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_algo = (igraph_pagerank_algo_t) Rf_asInteger(algo); - IGRAPH_R_CHECK(igraph_vector_init(&c_vector, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_vector, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_vector); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); @@ -5523,7 +5523,7 @@ SEXP R_igraph_personalized_pagerank(SEXP graph, SEXP algo, SEXP vids, SEXP direc } } /* Call igraph */ - IGRAPH_R_CHECK(igraph_personalized_pagerank(&c_graph, c_algo, &c_vector, &c_value, c_vids, c_directed, c_damping, (Rf_isNull(personalized) ? 0 : &c_personalized), (Rf_isNull(weights) ? 0 : &c_weights), c_options)); + IGRAPH_LOCAL_R_CHECK(igraph_personalized_pagerank(&c_graph, c_algo, &c_vector, &c_value, c_vids, c_directed, c_damping, (Rf_isNull(personalized) ? 0 : &c_personalized), (Rf_isNull(weights) ? 0 : &c_weights), c_options)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -5577,7 +5577,7 @@ SEXP R_igraph_personalized_pagerank_vs(SEXP graph, SEXP algo, SEXP vids, SEXP di /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_algo = (igraph_pagerank_algo_t) Rf_asInteger(algo); - IGRAPH_R_CHECK(igraph_vector_init(&c_vector, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_vector, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_vector); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); @@ -5599,7 +5599,7 @@ SEXP R_igraph_personalized_pagerank_vs(SEXP graph, SEXP algo, SEXP vids, SEXP di } } /* Call igraph */ - IGRAPH_R_CHECK(igraph_personalized_pagerank_vs(&c_graph, c_algo, &c_vector, &c_value, c_vids, c_directed, c_damping, c_reset_vids, (Rf_isNull(weights) ? 0 : &c_weights), c_options)); + IGRAPH_LOCAL_R_CHECK(igraph_personalized_pagerank_vs(&c_graph, c_algo, &c_vector, &c_value, c_vids, c_directed, c_damping, c_reset_vids, (Rf_isNull(weights) ? 0 : &c_weights), c_options)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -5649,7 +5649,7 @@ SEXP R_igraph_rewire(SEXP rewire, SEXP n, SEXP mode) { c_n = (igraph_integer_t) REAL(n)[0]; c_mode = (igraph_rewiring_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_rewire(&c_rewire, c_n, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_rewire(&c_rewire, c_n, c_mode)); /* Convert output */ PROTECT(rewire=Ry_igraph_to_SEXP(&c_rewire)); @@ -5680,7 +5680,7 @@ SEXP R_igraph_induced_subgraph(SEXP graph, SEXP vids, SEXP impl) { Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); c_impl = (igraph_subgraph_implementation_t) Rf_asInteger(impl); /* Call igraph */ - IGRAPH_R_CHECK(igraph_induced_subgraph(&c_graph, &c_res, c_vids, c_impl)); + IGRAPH_LOCAL_R_CHECK(igraph_induced_subgraph(&c_graph, &c_res, c_vids, c_impl)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_res); @@ -5711,11 +5711,11 @@ SEXP R_igraph_subgraph_from_edges(SEXP graph, SEXP eids, SEXP delete_vertices) { /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); igraph_vector_int_t c_eids_data; - IGRAPH_R_CHECK(Rz_SEXP_to_igraph_es(eids, &c_graph, &c_eids, &c_eids_data)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_igraph_es(eids, &c_graph, &c_eids, &c_eids_data)); IGRAPH_R_CHECK_BOOL(delete_vertices); c_delete_vertices = LOGICAL(delete_vertices)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_subgraph_from_edges(&c_graph, &c_res, c_eids, c_delete_vertices)); + IGRAPH_LOCAL_R_CHECK(igraph_subgraph_from_edges(&c_graph, &c_res, c_eids, c_delete_vertices)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_res); @@ -5744,9 +5744,9 @@ SEXP R_igraph_reverse_edges(SEXP graph, SEXP eids) { Rz_SEXP_to_igraph_copy(graph, &c_graph); IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); igraph_vector_int_t c_eids_data; - IGRAPH_R_CHECK(Rz_SEXP_to_igraph_es(eids, &c_graph, &c_eids, &c_eids_data)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_igraph_es(eids, &c_graph, &c_eids, &c_eids_data)); /* Call igraph */ - IGRAPH_R_CHECK(igraph_reverse_edges(&c_graph, c_eids)); + IGRAPH_LOCAL_R_CHECK(igraph_reverse_edges(&c_graph, c_eids)); /* Convert output */ PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); @@ -5782,7 +5782,7 @@ SEXP R_igraph_average_path_length(SEXP graph, SEXP directed, SEXP unconn) { IGRAPH_R_CHECK_BOOL(unconn); c_unconn = LOGICAL(unconn)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_average_path_length(&c_graph, &c_res, &c_unconn_pairs, c_directed, c_unconn)); + IGRAPH_LOCAL_R_CHECK(igraph_average_path_length(&c_graph, &c_res, &c_unconn_pairs, c_directed, c_unconn)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -5828,7 +5828,7 @@ SEXP R_igraph_average_path_length_dijkstra(SEXP graph, SEXP weights, SEXP direct IGRAPH_R_CHECK_BOOL(unconn); c_unconn = LOGICAL(unconn)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_average_path_length_dijkstra(&c_graph, &c_res, &c_unconn_pairs, (Rf_isNull(weights) ? 0 : &c_weights), c_directed, c_unconn)); + IGRAPH_LOCAL_R_CHECK(igraph_average_path_length_dijkstra(&c_graph, &c_res, &c_unconn_pairs, (Rf_isNull(weights) ? 0 : &c_weights), c_directed, c_unconn)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -5864,12 +5864,12 @@ SEXP R_igraph_path_length_hist(SEXP graph, SEXP directed) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_path_length_hist(&c_graph, &c_res, &c_unconnected, c_directed)); + IGRAPH_LOCAL_R_CHECK(igraph_path_length_hist(&c_graph, &c_res, &c_unconnected, c_directed)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -5912,7 +5912,7 @@ SEXP R_igraph_simplify(SEXP graph, SEXP remove_multiple, SEXP remove_loops, SEXP Rz_SEXP_to_attr_comb(edge_attr_comb, &c_edge_attr_comb); IGRAPH_LOCAL_FINALLY(igraph_attribute_combination_destroy, &c_edge_attr_comb); /* Call igraph */ - IGRAPH_R_CHECK(igraph_simplify(&c_graph, c_remove_multiple, c_remove_loops, &c_edge_attr_comb)); + IGRAPH_LOCAL_R_CHECK(igraph_simplify(&c_graph, c_remove_multiple, c_remove_loops, &c_edge_attr_comb)); /* Convert output */ PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); @@ -5942,7 +5942,7 @@ SEXP R_igraph_transitivity_undirected(SEXP graph, SEXP mode) { Rz_SEXP_to_igraph(graph, &c_graph); c_mode = (igraph_transitivity_mode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_transitivity_undirected(&c_graph, &c_res, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_transitivity_undirected(&c_graph, &c_res, c_mode)); /* Convert output */ PROTECT(res=NEW_NUMERIC(1)); @@ -5968,13 +5968,13 @@ SEXP R_igraph_transitivity_local_undirected(SEXP graph, SEXP vids, SEXP mode) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); c_mode = (igraph_transitivity_mode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_transitivity_local_undirected(&c_graph, &c_res, c_vids, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_transitivity_local_undirected(&c_graph, &c_res, c_vids, c_mode)); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -6004,7 +6004,7 @@ SEXP R_igraph_transitivity_avglocal_undirected(SEXP graph, SEXP mode) { Rz_SEXP_to_igraph(graph, &c_graph); c_mode = (igraph_transitivity_mode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_transitivity_avglocal_undirected(&c_graph, &c_res, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_transitivity_avglocal_undirected(&c_graph, &c_res, c_mode)); /* Convert output */ PROTECT(res=NEW_NUMERIC(1)); @@ -6031,7 +6031,7 @@ SEXP R_igraph_transitivity_barrat(SEXP graph, SEXP vids, SEXP weights, SEXP mode IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); @@ -6040,7 +6040,7 @@ SEXP R_igraph_transitivity_barrat(SEXP graph, SEXP vids, SEXP weights, SEXP mode } c_mode = (igraph_transitivity_mode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_transitivity_barrat(&c_graph, &c_res, c_vids, (Rf_isNull(weights) ? 0 : &c_weights), c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_transitivity_barrat(&c_graph, &c_res, c_vids, (Rf_isNull(weights) ? 0 : &c_weights), c_mode)); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -6071,10 +6071,10 @@ SEXP R_igraph_ecc(SEXP graph, SEXP eids, SEXP k, SEXP offset, SEXP normalize) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_eids_data; - IGRAPH_R_CHECK(Rz_SEXP_to_igraph_es(eids, &c_graph, &c_eids, &c_eids_data)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_igraph_es(eids, &c_graph, &c_eids, &c_eids_data)); IGRAPH_R_CHECK_INT(k); c_k = (igraph_integer_t) REAL(k)[0]; IGRAPH_R_CHECK_BOOL(offset); @@ -6082,7 +6082,7 @@ SEXP R_igraph_ecc(SEXP graph, SEXP eids, SEXP k, SEXP offset, SEXP normalize) { IGRAPH_R_CHECK_BOOL(normalize); c_normalize = LOGICAL(normalize)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_ecc(&c_graph, &c_res, c_eids, c_k, c_offset, c_normalize)); + IGRAPH_LOCAL_R_CHECK(igraph_ecc(&c_graph, &c_res, c_eids, c_k, c_offset, c_normalize)); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -6115,7 +6115,7 @@ SEXP R_igraph_reciprocity(SEXP graph, SEXP ignore_loops, SEXP mode) { c_ignore_loops = LOGICAL(ignore_loops)[0]; c_mode = (igraph_reciprocity_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_reciprocity(&c_graph, &c_res, c_ignore_loops, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_reciprocity(&c_graph, &c_res, c_ignore_loops, c_mode)); /* Convert output */ PROTECT(res=NEW_NUMERIC(1)); @@ -6141,7 +6141,7 @@ SEXP R_igraph_constraint(SEXP graph, SEXP vids, SEXP weights) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); @@ -6149,7 +6149,7 @@ SEXP R_igraph_constraint(SEXP graph, SEXP vids, SEXP weights) { Rz_SEXP_to_vector(weights, &c_weights); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_constraint(&c_graph, &c_res, c_vids, (Rf_isNull(weights) ? 0 : &c_weights))); + IGRAPH_LOCAL_R_CHECK(igraph_constraint(&c_graph, &c_res, c_vids, (Rf_isNull(weights) ? 0 : &c_weights))); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -6186,7 +6186,7 @@ SEXP R_igraph_maxdegree(SEXP graph, SEXP vids, SEXP mode, SEXP loops) { IGRAPH_R_CHECK_BOOL(loops); c_loops = LOGICAL(loops)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_maxdegree(&c_graph, &c_res, c_vids, c_mode, c_loops)); + IGRAPH_LOCAL_R_CHECK(igraph_maxdegree(&c_graph, &c_res, c_vids, c_mode, c_loops)); /* Convert output */ PROTECT(res=NEW_NUMERIC(1)); @@ -6216,7 +6216,7 @@ SEXP R_igraph_density(SEXP graph, SEXP loops) { IGRAPH_R_CHECK_BOOL(loops); c_loops = LOGICAL(loops)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_density(&c_graph, &c_res, c_loops)); + IGRAPH_LOCAL_R_CHECK(igraph_density(&c_graph, &c_res, c_loops)); /* Convert output */ PROTECT(res=NEW_NUMERIC(1)); @@ -6244,7 +6244,7 @@ SEXP R_igraph_mean_degree(SEXP graph, SEXP loops) { IGRAPH_R_CHECK_BOOL(loops); c_loops = LOGICAL(loops)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_mean_degree(&c_graph, &c_res, c_loops)); + IGRAPH_LOCAL_R_CHECK(igraph_mean_degree(&c_graph, &c_res, c_loops)); /* Convert output */ PROTECT(res=NEW_NUMERIC(1)); @@ -6272,7 +6272,7 @@ SEXP R_igraph_neighborhood_size(SEXP graph, SEXP vids, SEXP order, SEXP mode, SE IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); @@ -6282,7 +6282,7 @@ SEXP R_igraph_neighborhood_size(SEXP graph, SEXP vids, SEXP order, SEXP mode, SE IGRAPH_R_CHECK_INT(mindist); c_mindist = (igraph_integer_t) REAL(mindist)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_neighborhood_size(&c_graph, &c_res, c_vids, c_order, c_mode, c_mindist)); + IGRAPH_LOCAL_R_CHECK(igraph_neighborhood_size(&c_graph, &c_res, c_vids, c_order, c_mode, c_mindist)); /* Convert output */ PROTECT(res=Ry_igraph_vector_int_to_SEXP(&c_res)); @@ -6313,7 +6313,7 @@ SEXP R_igraph_neighborhood(SEXP graph, SEXP vids, SEXP order, SEXP mode, SEXP mi IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); @@ -6323,7 +6323,7 @@ SEXP R_igraph_neighborhood(SEXP graph, SEXP vids, SEXP order, SEXP mode, SEXP mi IGRAPH_R_CHECK_INT(mindist); c_mindist = (igraph_integer_t) REAL(mindist)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_neighborhood(&c_graph, &c_res, c_vids, c_order, c_mode, c_mindist)); + IGRAPH_LOCAL_R_CHECK(igraph_neighborhood(&c_graph, &c_res, c_vids, c_order, c_mode, c_mindist)); /* Convert output */ PROTECT(res=Ry_igraph_vector_int_list_to_SEXPp1(&c_res)); @@ -6354,7 +6354,7 @@ SEXP R_igraph_neighborhood_graphs(SEXP graph, SEXP vids, SEXP order, SEXP mode, IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_graph_list_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_graph_list_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_graph_list_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); @@ -6364,7 +6364,7 @@ SEXP R_igraph_neighborhood_graphs(SEXP graph, SEXP vids, SEXP order, SEXP mode, IGRAPH_R_CHECK_INT(mindist); c_mindist = (igraph_integer_t) REAL(mindist)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_neighborhood_graphs(&c_graph, &c_res, c_vids, c_order, c_mode, c_mindist)); + IGRAPH_LOCAL_R_CHECK(igraph_neighborhood_graphs(&c_graph, &c_res, c_vids, c_order, c_mode, c_mindist)); /* Convert output */ PROTECT(res=Ry_igraph_graphlist_to_SEXP(&c_res)); @@ -6392,11 +6392,11 @@ SEXP R_igraph_topological_sorting(SEXP graph, SEXP mode) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_res); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_topological_sorting(&c_graph, &c_res, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_topological_sorting(&c_graph, &c_res, c_mode)); /* Convert output */ PROTECT(res=Ry_igraph_vector_int_to_SEXPp1(&c_res)); @@ -6423,14 +6423,14 @@ SEXP R_igraph_feedback_arc_set(SEXP graph, SEXP weights, SEXP algo) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_result, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_result, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_result); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } c_algo = (igraph_fas_algorithm_t) Rf_asInteger(algo); /* Call igraph */ - IGRAPH_R_CHECK(igraph_feedback_arc_set(&c_graph, &c_result, (Rf_isNull(weights) ? 0 : &c_weights), c_algo)); + IGRAPH_LOCAL_R_CHECK(igraph_feedback_arc_set(&c_graph, &c_result, (Rf_isNull(weights) ? 0 : &c_weights), c_algo)); /* Convert output */ PROTECT(result=Ry_igraph_vector_int_to_SEXPp1(&c_result)); @@ -6457,14 +6457,14 @@ SEXP R_igraph_feedback_vertex_set(SEXP graph, SEXP weights, SEXP algo) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_result, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_result, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_result); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } c_algo = (igraph_fvs_algorithm_t) Rf_asInteger(algo); /* Call igraph */ - IGRAPH_R_CHECK(igraph_feedback_vertex_set(&c_graph, &c_result, (Rf_isNull(weights) ? 0 : &c_weights), c_algo)); + IGRAPH_LOCAL_R_CHECK(igraph_feedback_vertex_set(&c_graph, &c_result, (Rf_isNull(weights) ? 0 : &c_weights), c_algo)); /* Convert output */ PROTECT(result=Ry_igraph_vector_int_to_SEXPp1(&c_result)); @@ -6490,12 +6490,12 @@ SEXP R_igraph_is_loop(SEXP graph, SEXP es) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_bool_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_bool_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_bool_destroy, &c_res); igraph_vector_int_t c_es_data; - IGRAPH_R_CHECK(Rz_SEXP_to_igraph_es(es, &c_graph, &c_es, &c_es_data)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_igraph_es(es, &c_graph, &c_es, &c_es_data)); /* Call igraph */ - IGRAPH_R_CHECK(igraph_is_loop(&c_graph, &c_res, c_es)); + IGRAPH_LOCAL_R_CHECK(igraph_is_loop(&c_graph, &c_res, c_es)); /* Convert output */ PROTECT(res=Ry_igraph_vector_bool_to_SEXP(&c_res)); @@ -6523,7 +6523,7 @@ SEXP R_igraph_is_dag(SEXP graph) { /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ - IGRAPH_R_CHECK(igraph_is_dag(&c_graph, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_is_dag(&c_graph, &c_res)); /* Convert output */ PROTECT(res=NEW_LOGICAL(1)); @@ -6548,7 +6548,7 @@ SEXP R_igraph_is_acyclic(SEXP graph) { /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ - IGRAPH_R_CHECK(igraph_is_acyclic(&c_graph, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_is_acyclic(&c_graph, &c_res)); /* Convert output */ PROTECT(res=NEW_LOGICAL(1)); @@ -6573,7 +6573,7 @@ SEXP R_igraph_is_simple(SEXP graph) { /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ - IGRAPH_R_CHECK(igraph_is_simple(&c_graph, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_is_simple(&c_graph, &c_res)); /* Convert output */ PROTECT(res=NEW_LOGICAL(1)); @@ -6598,12 +6598,12 @@ SEXP R_igraph_is_multiple(SEXP graph, SEXP es) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_bool_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_bool_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_bool_destroy, &c_res); igraph_vector_int_t c_es_data; - IGRAPH_R_CHECK(Rz_SEXP_to_igraph_es(es, &c_graph, &c_es, &c_es_data)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_igraph_es(es, &c_graph, &c_es, &c_es_data)); /* Call igraph */ - IGRAPH_R_CHECK(igraph_is_multiple(&c_graph, &c_res, c_es)); + IGRAPH_LOCAL_R_CHECK(igraph_is_multiple(&c_graph, &c_res, c_es)); /* Convert output */ PROTECT(res=Ry_igraph_vector_bool_to_SEXP(&c_res)); @@ -6631,7 +6631,7 @@ SEXP R_igraph_has_loop(SEXP graph) { /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ - IGRAPH_R_CHECK(igraph_has_loop(&c_graph, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_has_loop(&c_graph, &c_res)); /* Convert output */ PROTECT(res=NEW_LOGICAL(1)); @@ -6656,7 +6656,7 @@ SEXP R_igraph_has_multiple(SEXP graph) { /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ - IGRAPH_R_CHECK(igraph_has_multiple(&c_graph, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_has_multiple(&c_graph, &c_res)); /* Convert output */ PROTECT(res=NEW_LOGICAL(1)); @@ -6682,7 +6682,7 @@ SEXP R_igraph_count_loops(SEXP graph) { Rz_SEXP_to_igraph(graph, &c_graph); c_loop_count=0; /* Call igraph */ - IGRAPH_R_CHECK(igraph_count_loops(&c_graph, &c_loop_count)); + IGRAPH_LOCAL_R_CHECK(igraph_count_loops(&c_graph, &c_loop_count)); /* Convert output */ PROTECT(loop_count=NEW_NUMERIC(1)); @@ -6707,12 +6707,12 @@ SEXP R_igraph_count_multiple(SEXP graph, SEXP es) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_res); igraph_vector_int_t c_es_data; - IGRAPH_R_CHECK(Rz_SEXP_to_igraph_es(es, &c_graph, &c_es, &c_es_data)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_igraph_es(es, &c_graph, &c_es, &c_es_data)); /* Call igraph */ - IGRAPH_R_CHECK(igraph_count_multiple(&c_graph, &c_res, c_es)); + IGRAPH_LOCAL_R_CHECK(igraph_count_multiple(&c_graph, &c_res, c_es)); /* Convert output */ PROTECT(res=Ry_igraph_vector_int_to_SEXP(&c_res)); @@ -6741,10 +6741,10 @@ SEXP R_igraph_girth(SEXP graph) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_circle, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_circle, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_circle); /* Call igraph */ - IGRAPH_R_CHECK(igraph_girth(&c_graph, &c_girth, &c_circle)); + IGRAPH_LOCAL_R_CHECK(igraph_girth(&c_graph, &c_girth, &c_circle)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -6779,7 +6779,7 @@ SEXP R_igraph_is_perfect(SEXP graph) { /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ - IGRAPH_R_CHECK(igraph_is_perfect(&c_graph, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_is_perfect(&c_graph, &c_res)); /* Convert output */ PROTECT(res=NEW_LOGICAL(1)); @@ -6809,7 +6809,7 @@ SEXP R_igraph_add_edge(SEXP graph, SEXP from, SEXP to) { IGRAPH_R_CHECK_INT(to); c_to = (igraph_integer_t) REAL(to)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_add_edge(&c_graph, c_from, c_to)); + IGRAPH_LOCAL_R_CHECK(igraph_add_edge(&c_graph, c_from, c_to)); /* Convert output */ PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); @@ -6840,7 +6840,7 @@ SEXP R_igraph_eigenvector_centrality(SEXP graph, SEXP directed, SEXP scale, SEXP IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_vector, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_vector, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_vector); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; @@ -6851,7 +6851,7 @@ SEXP R_igraph_eigenvector_centrality(SEXP graph, SEXP directed, SEXP scale, SEXP } Rz_SEXP_to_igraph_arpack_options(options, &c_options); /* Call igraph */ - IGRAPH_R_CHECK(igraph_eigenvector_centrality(&c_graph, &c_vector, &c_value, c_directed, c_scale, (Rf_isNull(weights) ? 0 : &c_weights), &c_options)); + IGRAPH_LOCAL_R_CHECK(igraph_eigenvector_centrality(&c_graph, &c_vector, &c_value, c_directed, c_scale, (Rf_isNull(weights) ? 0 : &c_weights), &c_options)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -6893,7 +6893,7 @@ SEXP R_igraph_hub_score(SEXP graph, SEXP scale, SEXP weights, SEXP options) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_vector, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_vector, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_vector); IGRAPH_R_CHECK_BOOL(scale); c_scale = LOGICAL(scale)[0]; @@ -6902,7 +6902,7 @@ SEXP R_igraph_hub_score(SEXP graph, SEXP scale, SEXP weights, SEXP options) { } Rz_SEXP_to_igraph_arpack_options(options, &c_options); /* Call igraph */ - IGRAPH_R_CHECK(igraph_hub_score(&c_graph, &c_vector, &c_value, c_scale, (Rf_isNull(weights) ? 0 : &c_weights), &c_options)); + IGRAPH_LOCAL_R_CHECK(igraph_hub_score(&c_graph, &c_vector, &c_value, c_scale, (Rf_isNull(weights) ? 0 : &c_weights), &c_options)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -6944,7 +6944,7 @@ SEXP R_igraph_authority_score(SEXP graph, SEXP scale, SEXP weights, SEXP options IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_vector, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_vector, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_vector); IGRAPH_R_CHECK_BOOL(scale); c_scale = LOGICAL(scale)[0]; @@ -6953,7 +6953,7 @@ SEXP R_igraph_authority_score(SEXP graph, SEXP scale, SEXP weights, SEXP options } Rz_SEXP_to_igraph_arpack_options(options, &c_options); /* Call igraph */ - IGRAPH_R_CHECK(igraph_authority_score(&c_graph, &c_vector, &c_value, c_scale, (Rf_isNull(weights) ? 0 : &c_weights), &c_options)); + IGRAPH_LOCAL_R_CHECK(igraph_authority_score(&c_graph, &c_vector, &c_value, c_scale, (Rf_isNull(weights) ? 0 : &c_weights), &c_options)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -6997,9 +6997,9 @@ SEXP R_igraph_hub_and_authority_scores(SEXP graph, SEXP scale, SEXP weights, SEX IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_hub, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_hub, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_hub); - IGRAPH_R_CHECK(igraph_vector_init(&c_authority, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_authority, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_authority); IGRAPH_R_CHECK_BOOL(scale); c_scale = LOGICAL(scale)[0]; @@ -7008,7 +7008,7 @@ SEXP R_igraph_hub_and_authority_scores(SEXP graph, SEXP scale, SEXP weights, SEX } Rz_SEXP_to_igraph_arpack_options(options, &c_options); /* Call igraph */ - IGRAPH_R_CHECK(igraph_hub_and_authority_scores(&c_graph, &c_hub, &c_authority, &c_value, c_scale, (Rf_isNull(weights) ? 0 : &c_weights), &c_options)); + IGRAPH_LOCAL_R_CHECK(igraph_hub_and_authority_scores(&c_graph, &c_hub, &c_authority, &c_value, c_scale, (Rf_isNull(weights) ? 0 : &c_weights), &c_options)); /* Convert output */ PROTECT(r_result=NEW_LIST(4)); @@ -7055,12 +7055,12 @@ SEXP R_igraph_unfold_tree(SEXP graph, SEXP mode, SEXP roots) { /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_mode = (igraph_neimode_t) Rf_asInteger(mode); - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(roots, &c_roots)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(roots, &c_roots)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_roots); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_index, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_vertex_index, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_index); /* Call igraph */ - IGRAPH_R_CHECK(igraph_unfold_tree(&c_graph, &c_tree, c_mode, &c_roots, &c_vertex_index)); + IGRAPH_LOCAL_R_CHECK(igraph_unfold_tree(&c_graph, &c_tree, c_mode, &c_roots, &c_vertex_index)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -7100,14 +7100,14 @@ SEXP R_igraph_is_mutual(SEXP graph, SEXP es, SEXP loops) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_bool_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_bool_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_bool_destroy, &c_res); igraph_vector_int_t c_es_data; - IGRAPH_R_CHECK(Rz_SEXP_to_igraph_es(es, &c_graph, &c_es, &c_es_data)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_igraph_es(es, &c_graph, &c_es, &c_es_data)); IGRAPH_R_CHECK_BOOL(loops); c_loops = LOGICAL(loops)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_is_mutual(&c_graph, &c_res, c_es, c_loops)); + IGRAPH_LOCAL_R_CHECK(igraph_is_mutual(&c_graph, &c_res, c_es, c_loops)); /* Convert output */ PROTECT(res=Ry_igraph_vector_bool_to_SEXP(&c_res)); @@ -7138,7 +7138,7 @@ SEXP R_igraph_has_mutual(SEXP graph, SEXP loops) { IGRAPH_R_CHECK_BOOL(loops); c_loops = LOGICAL(loops)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_has_mutual(&c_graph, &c_res, c_loops)); + IGRAPH_LOCAL_R_CHECK(igraph_has_mutual(&c_graph, &c_res, c_loops)); /* Convert output */ PROTECT(res=NEW_LOGICAL(1)); @@ -7164,12 +7164,12 @@ SEXP R_igraph_maximum_cardinality_search(SEXP graph) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_alpha, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_alpha, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_alpha); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_alpham1, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_alpham1, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_alpham1); /* Call igraph */ - IGRAPH_R_CHECK(igraph_maximum_cardinality_search(&c_graph, &c_alpha, &c_alpham1)); + IGRAPH_LOCAL_R_CHECK(igraph_maximum_cardinality_search(&c_graph, &c_alpha, &c_alpham1)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -7214,20 +7214,20 @@ SEXP R_igraph_is_chordal(SEXP graph, SEXP alpha, SEXP alpham1) { Rz_SEXP_to_vector_int_copy(alpha, &c_alpha); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_alpha); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_alpha, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_alpha, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_alpha); } if (!Rf_isNull(alpham1)) { Rz_SEXP_to_vector_int_copy(alpham1, &c_alpham1); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_alpham1); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_alpham1, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_alpham1, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_alpham1); } - IGRAPH_R_CHECK(igraph_vector_int_init(&c_fillin, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_fillin, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_fillin); /* Call igraph */ - IGRAPH_R_CHECK(igraph_is_chordal(&c_graph, (Rf_isNull(alpha) ? 0 : &c_alpha), (Rf_isNull(alpham1) ? 0 : &c_alpham1), &c_chordal, &c_fillin, &c_newgraph)); + IGRAPH_LOCAL_R_CHECK(igraph_is_chordal(&c_graph, (Rf_isNull(alpha) ? 0 : &c_alpha), (Rf_isNull(alpham1) ? 0 : &c_alpham1), &c_chordal, &c_fillin, &c_newgraph)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -7281,15 +7281,15 @@ SEXP R_igraph_avg_nearest_neighbor_degree(SEXP graph, SEXP vids, SEXP mode, SEXP Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); c_mode = (igraph_neimode_t) Rf_asInteger(mode); c_neighbor_degree_mode = (igraph_neimode_t) Rf_asInteger(neighbor_degree_mode); - IGRAPH_R_CHECK(igraph_vector_init(&c_knn, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_knn, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_knn); - IGRAPH_R_CHECK(igraph_vector_init(&c_knnk, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_knnk, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_knnk); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_avg_nearest_neighbor_degree(&c_graph, c_vids, c_mode, c_neighbor_degree_mode, &c_knn, &c_knnk, (Rf_isNull(weights) ? 0 : &c_weights))); + IGRAPH_LOCAL_R_CHECK(igraph_avg_nearest_neighbor_degree(&c_graph, c_vids, c_mode, c_neighbor_degree_mode, &c_knn, &c_knnk, (Rf_isNull(weights) ? 0 : &c_weights))); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -7333,14 +7333,14 @@ SEXP R_igraph_degree_correlation_vector(SEXP graph, SEXP weights, SEXP from_mode if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } - IGRAPH_R_CHECK(igraph_vector_init(&c_knnk, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_knnk, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_knnk); c_from_mode = (igraph_neimode_t) Rf_asInteger(from_mode); c_to_mode = (igraph_neimode_t) Rf_asInteger(to_mode); IGRAPH_R_CHECK_BOOL(directed_neighbors); c_directed_neighbors = LOGICAL(directed_neighbors)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_degree_correlation_vector(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_knnk, c_from_mode, c_to_mode, c_directed_neighbors)); + IGRAPH_LOCAL_R_CHECK(igraph_degree_correlation_vector(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_knnk, c_from_mode, c_to_mode, c_directed_neighbors)); /* Convert output */ PROTECT(knnk=Ry_igraph_vector_to_SEXP(&c_knnk)); @@ -7373,7 +7373,7 @@ SEXP R_igraph_rich_club_sequence(SEXP graph, SEXP weights, SEXP vertex_order, SE if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); Rz_SEXP_to_vector_int_copy(vertex_order, &c_vertex_order); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_order); @@ -7384,7 +7384,7 @@ SEXP R_igraph_rich_club_sequence(SEXP graph, SEXP weights, SEXP vertex_order, SE IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_rich_club_sequence(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_res, &c_vertex_order, c_normalized, c_loops, c_directed)); + IGRAPH_LOCAL_R_CHECK(igraph_rich_club_sequence(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_res, &c_vertex_order, c_normalized, c_loops, c_directed)); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -7415,7 +7415,7 @@ SEXP R_igraph_strength(SEXP graph, SEXP vids, SEXP mode, SEXP loops, SEXP weight IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); @@ -7426,7 +7426,7 @@ SEXP R_igraph_strength(SEXP graph, SEXP vids, SEXP mode, SEXP loops, SEXP weight Rz_SEXP_to_vector(weights, &c_weights); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_strength(&c_graph, &c_res, c_vids, c_mode, c_loops, (Rf_isNull(weights) ? 0 : &c_weights))); + IGRAPH_LOCAL_R_CHECK(igraph_strength(&c_graph, &c_res, c_vids, c_mode, c_loops, (Rf_isNull(weights) ? 0 : &c_weights))); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -7489,7 +7489,7 @@ SEXP R_igraph_centralization_degree(SEXP graph, SEXP mode, SEXP loops, SEXP norm IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); c_mode = (igraph_neimode_t) Rf_asInteger(mode); IGRAPH_R_CHECK_BOOL(loops); @@ -7497,7 +7497,7 @@ SEXP R_igraph_centralization_degree(SEXP graph, SEXP mode, SEXP loops, SEXP norm IGRAPH_R_CHECK_BOOL(normalized); c_normalized = LOGICAL(normalized)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_centralization_degree(&c_graph, &c_res, c_mode, c_loops, &c_centralization, &c_theoretical_max, c_normalized)); + IGRAPH_LOCAL_R_CHECK(igraph_centralization_degree(&c_graph, &c_res, c_mode, c_loops, &c_centralization, &c_theoretical_max, c_normalized)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -7546,7 +7546,7 @@ SEXP R_igraph_centralization_degree_tmax(SEXP graph, SEXP nodes, SEXP mode, SEXP IGRAPH_R_CHECK_BOOL(loops); c_loops = LOGICAL(loops)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_centralization_degree_tmax((Rf_isNull(graph) ? 0 : &c_graph), c_nodes, c_mode, c_loops, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_centralization_degree_tmax((Rf_isNull(graph) ? 0 : &c_graph), c_nodes, c_mode, c_loops, &c_res)); /* Convert output */ PROTECT(res=NEW_NUMERIC(1)); @@ -7576,14 +7576,14 @@ SEXP R_igraph_centralization_betweenness(SEXP graph, SEXP directed, SEXP normali IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; IGRAPH_R_CHECK_BOOL(normalized); c_normalized = LOGICAL(normalized)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_centralization_betweenness(&c_graph, &c_res, c_directed, &c_centralization, &c_theoretical_max, c_normalized)); + IGRAPH_LOCAL_R_CHECK(igraph_centralization_betweenness(&c_graph, &c_res, c_directed, &c_centralization, &c_theoretical_max, c_normalized)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -7630,7 +7630,7 @@ SEXP R_igraph_centralization_betweenness_tmax(SEXP graph, SEXP nodes, SEXP direc IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_centralization_betweenness_tmax((Rf_isNull(graph) ? 0 : &c_graph), c_nodes, c_directed, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_centralization_betweenness_tmax((Rf_isNull(graph) ? 0 : &c_graph), c_nodes, c_directed, &c_res)); /* Convert output */ PROTECT(res=NEW_NUMERIC(1)); @@ -7660,13 +7660,13 @@ SEXP R_igraph_centralization_closeness(SEXP graph, SEXP mode, SEXP normalized) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); c_mode = (igraph_neimode_t) Rf_asInteger(mode); IGRAPH_R_CHECK_BOOL(normalized); c_normalized = LOGICAL(normalized)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_centralization_closeness(&c_graph, &c_res, c_mode, &c_centralization, &c_theoretical_max, c_normalized)); + IGRAPH_LOCAL_R_CHECK(igraph_centralization_closeness(&c_graph, &c_res, c_mode, &c_centralization, &c_theoretical_max, c_normalized)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -7712,7 +7712,7 @@ SEXP R_igraph_centralization_closeness_tmax(SEXP graph, SEXP nodes, SEXP mode) { c_nodes = (igraph_integer_t) REAL(nodes)[0]; c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_centralization_closeness_tmax((Rf_isNull(graph) ? 0 : &c_graph), c_nodes, c_mode, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_centralization_closeness_tmax((Rf_isNull(graph) ? 0 : &c_graph), c_nodes, c_mode, &c_res)); /* Convert output */ PROTECT(res=NEW_NUMERIC(1)); @@ -7746,7 +7746,7 @@ SEXP R_igraph_centralization_eigenvector_centrality(SEXP graph, SEXP directed, S IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_vector, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_vector, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_vector); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; @@ -7756,7 +7756,7 @@ SEXP R_igraph_centralization_eigenvector_centrality(SEXP graph, SEXP directed, S IGRAPH_R_CHECK_BOOL(normalized); c_normalized = LOGICAL(normalized)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_centralization_eigenvector_centrality(&c_graph, &c_vector, &c_value, c_directed, c_scale, &c_options, &c_centralization, &c_theoretical_max, c_normalized)); + IGRAPH_LOCAL_R_CHECK(igraph_centralization_eigenvector_centrality(&c_graph, &c_vector, &c_value, c_directed, c_scale, &c_options, &c_centralization, &c_theoretical_max, c_normalized)); /* Convert output */ PROTECT(r_result=NEW_LIST(5)); @@ -7813,7 +7813,7 @@ SEXP R_igraph_centralization_eigenvector_centrality_tmax(SEXP graph, SEXP nodes, IGRAPH_R_CHECK_BOOL(scale); c_scale = LOGICAL(scale)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_centralization_eigenvector_centrality_tmax((Rf_isNull(graph) ? 0 : &c_graph), c_nodes, c_directed, c_scale, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_centralization_eigenvector_centrality_tmax((Rf_isNull(graph) ? 0 : &c_graph), c_nodes, c_directed, c_scale, &c_res)); /* Convert output */ PROTECT(res=NEW_NUMERIC(1)); @@ -7847,7 +7847,7 @@ SEXP R_igraph_assortativity_nominal(SEXP graph, SEXP types, SEXP directed, SEXP IGRAPH_R_CHECK_BOOL(normalized); c_normalized = LOGICAL(normalized)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_assortativity_nominal(&c_graph, &c_types, &c_res, c_directed, c_normalized)); + IGRAPH_LOCAL_R_CHECK(igraph_assortativity_nominal(&c_graph, &c_types, &c_res, c_directed, c_normalized)); /* Convert output */ igraph_vector_int_destroy(&c_types); @@ -7886,7 +7886,7 @@ SEXP R_igraph_assortativity(SEXP graph, SEXP values, SEXP values_in, SEXP direct IGRAPH_R_CHECK_BOOL(normalized); c_normalized = LOGICAL(normalized)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_assortativity(&c_graph, &c_values, (Rf_isNull(values_in) ? 0 : &c_values_in), &c_res, c_directed, c_normalized)); + IGRAPH_LOCAL_R_CHECK(igraph_assortativity(&c_graph, &c_values, (Rf_isNull(values_in) ? 0 : &c_values_in), &c_res, c_directed, c_normalized)); /* Convert output */ PROTECT(res=NEW_NUMERIC(1)); @@ -7914,7 +7914,7 @@ SEXP R_igraph_assortativity_degree(SEXP graph, SEXP directed) { IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_assortativity_degree(&c_graph, &c_res, c_directed)); + IGRAPH_LOCAL_R_CHECK(igraph_assortativity_degree(&c_graph, &c_res, c_directed)); /* Convert output */ PROTECT(res=NEW_NUMERIC(1)); @@ -7944,14 +7944,14 @@ SEXP R_igraph_joint_degree_matrix(SEXP graph, SEXP weights, SEXP max_out_degree, if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } - IGRAPH_R_CHECK(igraph_matrix_init(&c_jdm, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_jdm, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_jdm); IGRAPH_R_CHECK_INT(max_out_degree); c_max_out_degree = (igraph_integer_t) REAL(max_out_degree)[0]; IGRAPH_R_CHECK_INT(max_in_degree); c_max_in_degree = (igraph_integer_t) REAL(max_in_degree)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_joint_degree_matrix(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_jdm, c_max_out_degree, c_max_in_degree)); + IGRAPH_LOCAL_R_CHECK(igraph_joint_degree_matrix(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_jdm, c_max_out_degree, c_max_in_degree)); /* Convert output */ PROTECT(jdm=Ry_igraph_matrix_to_SEXP(&c_jdm)); @@ -7986,7 +7986,7 @@ SEXP R_igraph_joint_degree_distribution(SEXP graph, SEXP weights, SEXP from_mode if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } - IGRAPH_R_CHECK(igraph_matrix_init(&c_p, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_p, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_p); c_from_mode = (igraph_neimode_t) Rf_asInteger(from_mode); c_to_mode = (igraph_neimode_t) Rf_asInteger(to_mode); @@ -7999,7 +7999,7 @@ SEXP R_igraph_joint_degree_distribution(SEXP graph, SEXP weights, SEXP from_mode IGRAPH_R_CHECK_INT(max_to_degree); c_max_to_degree = (igraph_integer_t) REAL(max_to_degree)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_joint_degree_distribution(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_p, c_from_mode, c_to_mode, c_directed_neighbors, c_normalized, c_max_from_degree, c_max_to_degree)); + IGRAPH_LOCAL_R_CHECK(igraph_joint_degree_distribution(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_p, c_from_mode, c_to_mode, c_directed_neighbors, c_normalized, c_max_from_degree, c_max_to_degree)); /* Convert output */ PROTECT(p=Ry_igraph_matrix_to_SEXP(&c_p)); @@ -8032,7 +8032,7 @@ SEXP R_igraph_joint_type_distribution(SEXP graph, SEXP weights, SEXP from_types, if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } - IGRAPH_R_CHECK(igraph_matrix_init(&c_p, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_p, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_p); Rz_SEXP_to_vector_int_copy(from_types, &c_from_types); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_from_types); @@ -8040,7 +8040,7 @@ SEXP R_igraph_joint_type_distribution(SEXP graph, SEXP weights, SEXP from_types, Rz_SEXP_to_vector_int_copy(to_types, &c_to_types); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_to_types); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_to_types, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_to_types, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_to_types); } IGRAPH_R_CHECK_BOOL(directed); @@ -8048,7 +8048,7 @@ SEXP R_igraph_joint_type_distribution(SEXP graph, SEXP weights, SEXP from_types, IGRAPH_R_CHECK_BOOL(normalized); c_normalized = LOGICAL(normalized)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_joint_type_distribution(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_p, &c_from_types, (Rf_isNull(to_types) ? 0 : &c_to_types), c_directed, c_normalized)); + IGRAPH_LOCAL_R_CHECK(igraph_joint_type_distribution(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_p, &c_from_types, (Rf_isNull(to_types) ? 0 : &c_to_types), c_directed, c_normalized)); /* Convert output */ PROTECT(p=Ry_igraph_matrix_to_SEXP(&c_p)); @@ -8083,7 +8083,7 @@ SEXP R_igraph_contract_vertices(SEXP graph, SEXP mapping, SEXP vertex_attr_comb) Rz_SEXP_to_attr_comb(vertex_attr_comb, &c_vertex_attr_comb); IGRAPH_LOCAL_FINALLY(igraph_attribute_combination_destroy, &c_vertex_attr_comb); /* Call igraph */ - IGRAPH_R_CHECK(igraph_contract_vertices(&c_graph, &c_mapping, &c_vertex_attr_comb)); + IGRAPH_LOCAL_R_CHECK(igraph_contract_vertices(&c_graph, &c_mapping, &c_vertex_attr_comb)); /* Convert output */ PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); @@ -8114,13 +8114,13 @@ SEXP R_igraph_eccentricity(SEXP graph, SEXP vids, SEXP mode) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_eccentricity(&c_graph, &c_res, c_vids, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_eccentricity(&c_graph, &c_res, c_vids, c_mode)); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -8153,13 +8153,13 @@ SEXP R_igraph_eccentricity_dijkstra(SEXP graph, SEXP weights, SEXP vids, SEXP mo if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_eccentricity_dijkstra(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_res, c_vids, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_eccentricity_dijkstra(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_res, c_vids, c_mode)); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -8187,11 +8187,11 @@ SEXP R_igraph_graph_center(SEXP graph, SEXP mode) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_res); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_graph_center(&c_graph, &c_res, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_graph_center(&c_graph, &c_res, c_mode)); /* Convert output */ PROTECT(res=Ry_igraph_vector_int_to_SEXPp1(&c_res)); @@ -8221,11 +8221,11 @@ SEXP R_igraph_graph_center_dijkstra(SEXP graph, SEXP weights, SEXP mode) { if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } - IGRAPH_R_CHECK(igraph_vector_int_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_res); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_graph_center_dijkstra(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_res, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_graph_center_dijkstra(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_res, c_mode)); /* Convert output */ PROTECT(res=Ry_igraph_vector_int_to_SEXPp1(&c_res)); @@ -8253,7 +8253,7 @@ SEXP R_igraph_radius(SEXP graph, SEXP mode) { Rz_SEXP_to_igraph(graph, &c_graph); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_radius(&c_graph, &c_radius, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_radius(&c_graph, &c_radius, c_mode)); /* Convert output */ PROTECT(radius=NEW_NUMERIC(1)); @@ -8284,7 +8284,7 @@ SEXP R_igraph_radius_dijkstra(SEXP graph, SEXP weights, SEXP mode) { } c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_radius_dijkstra(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_radius, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_radius_dijkstra(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_radius, c_mode)); /* Convert output */ PROTECT(radius=NEW_NUMERIC(1)); @@ -8323,7 +8323,7 @@ SEXP R_igraph_pseudo_diameter(SEXP graph, SEXP start_vid, SEXP directed, SEXP un IGRAPH_R_CHECK_BOOL(unconnected); c_unconnected = LOGICAL(unconnected)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_pseudo_diameter(&c_graph, &c_diameter, c_start_vid, &c_from, &c_to, c_directed, c_unconnected)); + IGRAPH_LOCAL_R_CHECK(igraph_pseudo_diameter(&c_graph, &c_diameter, c_start_vid, &c_from, &c_to, c_directed, c_unconnected)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -8379,7 +8379,7 @@ SEXP R_igraph_pseudo_diameter_dijkstra(SEXP graph, SEXP weights, SEXP start_vid, IGRAPH_R_CHECK_BOOL(unconnected); c_unconnected = LOGICAL(unconnected)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_pseudo_diameter_dijkstra(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_diameter, c_start_vid, &c_from, &c_to, c_directed, c_unconnected)); + IGRAPH_LOCAL_R_CHECK(igraph_pseudo_diameter_dijkstra(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_diameter, c_start_vid, &c_from, &c_to, c_directed, c_unconnected)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -8421,12 +8421,12 @@ SEXP R_igraph_diversity(SEXP graph, SEXP weights, SEXP vids) { if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); /* Call igraph */ - IGRAPH_R_CHECK(igraph_diversity(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_res, c_vids)); + IGRAPH_LOCAL_R_CHECK(igraph_diversity(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_res, c_vids)); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -8463,9 +8463,9 @@ SEXP R_igraph_random_walk(SEXP graph, SEXP weights, SEXP start, SEXP mode, SEXP if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } - IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertices, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_vertices, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertices); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edges, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edges, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edges); c_start = (igraph_integer_t) REAL(start)[0]; c_mode = (igraph_neimode_t) Rf_asInteger(mode); @@ -8473,7 +8473,7 @@ SEXP R_igraph_random_walk(SEXP graph, SEXP weights, SEXP start, SEXP mode, SEXP c_steps = (igraph_integer_t) REAL(steps)[0]; c_stuck = (igraph_random_walk_stuck_t) Rf_asInteger(stuck); /* Call igraph */ - IGRAPH_R_CHECK(igraph_random_walk(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_vertices, &c_edges, c_start, c_mode, c_steps, c_stuck)); + IGRAPH_LOCAL_R_CHECK(igraph_random_walk(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_vertices, &c_edges, c_start, c_mode, c_steps, c_stuck)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -8516,7 +8516,7 @@ SEXP R_igraph_random_edge_walk(SEXP graph, SEXP weights, SEXP start, SEXP mode, if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edgewalk, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edgewalk, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edgewalk); c_start = (igraph_integer_t) REAL(start)[0]; c_mode = (igraph_neimode_t) Rf_asInteger(mode); @@ -8524,7 +8524,7 @@ SEXP R_igraph_random_edge_walk(SEXP graph, SEXP weights, SEXP start, SEXP mode, c_steps = (igraph_integer_t) REAL(steps)[0]; c_stuck = (igraph_random_walk_stuck_t) Rf_asInteger(stuck); /* Call igraph */ - IGRAPH_R_CHECK(igraph_random_edge_walk(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_edgewalk, c_start, c_mode, c_steps, c_stuck)); + IGRAPH_LOCAL_R_CHECK(igraph_random_edge_walk(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_edgewalk, c_start, c_mode, c_steps, c_stuck)); /* Convert output */ PROTECT(edgewalk=Ry_igraph_vector_int_to_SEXPp1(&c_edgewalk)); @@ -8557,7 +8557,7 @@ SEXP R_igraph_global_efficiency(SEXP graph, SEXP weights, SEXP directed) { IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_global_efficiency(&c_graph, &c_res, (Rf_isNull(weights) ? 0 : &c_weights), c_directed)); + IGRAPH_LOCAL_R_CHECK(igraph_global_efficiency(&c_graph, &c_res, (Rf_isNull(weights) ? 0 : &c_weights), c_directed)); /* Convert output */ PROTECT(res=NEW_NUMERIC(1)); @@ -8585,7 +8585,7 @@ SEXP R_igraph_local_efficiency(SEXP graph, SEXP vids, SEXP weights, SEXP directe IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); @@ -8596,7 +8596,7 @@ SEXP R_igraph_local_efficiency(SEXP graph, SEXP vids, SEXP weights, SEXP directe c_directed = LOGICAL(directed)[0]; c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_local_efficiency(&c_graph, &c_res, c_vids, (Rf_isNull(weights) ? 0 : &c_weights), c_directed, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_local_efficiency(&c_graph, &c_res, c_vids, (Rf_isNull(weights) ? 0 : &c_weights), c_directed, c_mode)); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -8633,7 +8633,7 @@ SEXP R_igraph_average_local_efficiency(SEXP graph, SEXP weights, SEXP directed, c_directed = LOGICAL(directed)[0]; c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_average_local_efficiency(&c_graph, &c_res, (Rf_isNull(weights) ? 0 : &c_weights), c_directed, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_average_local_efficiency(&c_graph, &c_res, (Rf_isNull(weights) ? 0 : &c_weights), c_directed, c_mode)); /* Convert output */ PROTECT(res=NEW_NUMERIC(1)); @@ -8658,7 +8658,7 @@ SEXP R_igraph_transitive_closure_dag(SEXP graph) { /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ - IGRAPH_R_CHECK(igraph_transitive_closure_dag(&c_graph, &c_closure)); + IGRAPH_LOCAL_R_CHECK(igraph_transitive_closure_dag(&c_graph, &c_closure)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_closure); @@ -8685,7 +8685,7 @@ SEXP R_igraph_transitive_closure(SEXP graph) { /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ - IGRAPH_R_CHECK(igraph_transitive_closure(&c_graph, &c_closure)); + IGRAPH_LOCAL_R_CHECK(igraph_transitive_closure(&c_graph, &c_closure)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_closure); @@ -8711,10 +8711,10 @@ SEXP R_igraph_trussness(SEXP graph) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_trussness, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_trussness, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_trussness); /* Call igraph */ - IGRAPH_R_CHECK(igraph_trussness(&c_graph, &c_trussness)); + IGRAPH_LOCAL_R_CHECK(igraph_trussness(&c_graph, &c_trussness)); /* Convert output */ PROTECT(trussness=Ry_igraph_vector_int_to_SEXP(&c_trussness)); @@ -8740,13 +8740,13 @@ SEXP R_igraph_is_bigraphical(SEXP degrees1, SEXP degrees2, SEXP allowed_edge_typ SEXP r_result; IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(degrees1, &c_degrees1)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(degrees1, &c_degrees1)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_degrees1); - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(degrees2, &c_degrees2)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(degrees2, &c_degrees2)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_degrees2); c_allowed_edge_types = (igraph_edge_type_sw_t) Rf_asInteger(allowed_edge_types); /* Call igraph */ - IGRAPH_R_CHECK(igraph_is_bigraphical(&c_degrees1, &c_degrees2, c_allowed_edge_types, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_is_bigraphical(&c_degrees1, &c_degrees2, c_allowed_edge_types, &c_res)); /* Convert output */ igraph_vector_int_destroy(&c_degrees1); @@ -8775,18 +8775,18 @@ SEXP R_igraph_is_graphical(SEXP out_deg, SEXP in_deg, SEXP allowed_edge_types) { SEXP r_result; IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(out_deg, &c_out_deg)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(out_deg, &c_out_deg)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_out_deg); if (!Rf_isNull(in_deg)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(in_deg, &c_in_deg)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(in_deg, &c_in_deg)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_in_deg); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_in_deg, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_in_deg, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_in_deg); } c_allowed_edge_types = (igraph_edge_type_sw_t) Rf_asInteger(allowed_edge_types); /* Call igraph */ - IGRAPH_R_CHECK(igraph_is_graphical(&c_out_deg, (Rf_isNull(in_deg) ? 0 : &c_in_deg), c_allowed_edge_types, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_is_graphical(&c_out_deg, (Rf_isNull(in_deg) ? 0 : &c_in_deg), c_allowed_edge_types, &c_res)); /* Convert output */ igraph_vector_int_destroy(&c_out_deg); @@ -8822,14 +8822,14 @@ SEXP R_igraph_bfs_simple(SEXP graph, SEXP root, SEXP mode) { Rz_SEXP_to_igraph(graph, &c_graph); c_root = (igraph_integer_t) REAL(root)[0]; c_mode = (igraph_neimode_t) Rf_asInteger(mode); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_order, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_order, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_order); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_layers, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_layers, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_layers); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_parents, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_parents, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_parents); /* Call igraph */ - IGRAPH_R_CHECK(igraph_bfs_simple(&c_graph, c_root, c_mode, &c_order, &c_layers, &c_parents)); + IGRAPH_LOCAL_R_CHECK(igraph_bfs_simple(&c_graph, c_root, c_mode, &c_order, &c_layers, &c_parents)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -8882,7 +8882,7 @@ SEXP R_igraph_bipartite_projection_size(SEXP graph, SEXP types) { c_vcount2=0; c_ecount2=0; /* Call igraph */ - IGRAPH_R_CHECK(igraph_bipartite_projection_size(&c_graph, &c_types, &c_vcount1, &c_ecount1, &c_vcount2, &c_ecount2)); + IGRAPH_LOCAL_R_CHECK(igraph_bipartite_projection_size(&c_graph, &c_types, &c_vcount1, &c_ecount1, &c_vcount2, &c_ecount2)); /* Convert output */ PROTECT(r_result=NEW_LIST(4)); @@ -8932,14 +8932,14 @@ SEXP R_igraph_bipartite_projection(SEXP graph, SEXP types, SEXP probe1) { /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); Rz_SEXP_to_vector_bool(types, &c_types); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_multiplicity1, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_multiplicity1, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_multiplicity1); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_multiplicity2, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_multiplicity2, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_multiplicity2); IGRAPH_R_CHECK_INT(probe1); c_probe1 = (igraph_integer_t) REAL(probe1)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_bipartite_projection(&c_graph, &c_types, &c_proj1, &c_proj2, &c_multiplicity1, &c_multiplicity2, c_probe1)); + IGRAPH_LOCAL_R_CHECK(igraph_bipartite_projection(&c_graph, &c_types, &c_proj1, &c_proj2, &c_multiplicity1, &c_multiplicity2, c_probe1)); /* Convert output */ PROTECT(r_result=NEW_LIST(4)); @@ -8988,12 +8988,12 @@ SEXP R_igraph_create_bipartite(SEXP types, SEXP edges, SEXP directed) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_vector_bool(types, &c_types); - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(edges, &c_edges)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(edges, &c_edges)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edges); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_create_bipartite(&c_graph, &c_types, &c_edges, c_directed)); + IGRAPH_LOCAL_R_CHECK(igraph_create_bipartite(&c_graph, &c_types, &c_edges, c_directed)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -9025,7 +9025,7 @@ SEXP R_igraph_biadjacency(SEXP incidence, SEXP directed, SEXP mode, SEXP multipl SEXP r_result, r_names; IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ - IGRAPH_R_CHECK(igraph_vector_bool_init(&c_types, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_bool_init(&c_types, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_bool_destroy, &c_types); Rz_SEXP_to_matrix(incidence, &c_incidence); IGRAPH_R_CHECK_BOOL(directed); @@ -9034,7 +9034,7 @@ SEXP R_igraph_biadjacency(SEXP incidence, SEXP directed, SEXP mode, SEXP multipl IGRAPH_R_CHECK_BOOL(multiple); c_multiple = LOGICAL(multiple)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_biadjacency(&c_graph, &c_types, &c_incidence, c_directed, c_mode, c_multiple)); + IGRAPH_LOCAL_R_CHECK(igraph_biadjacency(&c_graph, &c_types, &c_incidence, c_directed, c_mode, c_multiple)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -9076,14 +9076,14 @@ SEXP R_igraph_get_biadjacency(SEXP graph, SEXP types) { /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); Rz_SEXP_to_vector_bool(types, &c_types); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_row_ids, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_row_ids, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_row_ids); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_col_ids, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_col_ids, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_col_ids); /* Call igraph */ - IGRAPH_R_CHECK(igraph_get_biadjacency(&c_graph, &c_types, &c_res, &c_row_ids, &c_col_ids)); + IGRAPH_LOCAL_R_CHECK(igraph_get_biadjacency(&c_graph, &c_types, &c_res, &c_row_ids, &c_col_ids)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -9125,10 +9125,10 @@ SEXP R_igraph_is_bipartite(SEXP graph) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_bool_init(&c_type, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_bool_init(&c_type, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_bool_destroy, &c_type); /* Call igraph */ - IGRAPH_R_CHECK(igraph_is_bipartite(&c_graph, &c_res, &c_type)); + IGRAPH_LOCAL_R_CHECK(igraph_is_bipartite(&c_graph, &c_res, &c_type)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -9167,7 +9167,7 @@ SEXP R_igraph_bipartite_game_gnp(SEXP n1, SEXP n2, SEXP p, SEXP directed, SEXP m SEXP r_result, r_names; IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ - IGRAPH_R_CHECK(igraph_vector_bool_init(&c_types, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_bool_init(&c_types, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_bool_destroy, &c_types); IGRAPH_R_CHECK_INT(n1); c_n1 = (igraph_integer_t) REAL(n1)[0]; @@ -9179,7 +9179,7 @@ SEXP R_igraph_bipartite_game_gnp(SEXP n1, SEXP n2, SEXP p, SEXP directed, SEXP m c_directed = LOGICAL(directed)[0]; c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_bipartite_game_gnp(&c_graph, &c_types, c_n1, c_n2, c_p, c_directed, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_bipartite_game_gnp(&c_graph, &c_types, c_n1, c_n2, c_p, c_directed, c_mode)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -9220,7 +9220,7 @@ SEXP R_igraph_bipartite_game_gnm(SEXP n1, SEXP n2, SEXP m, SEXP directed, SEXP m SEXP r_result, r_names; IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ - IGRAPH_R_CHECK(igraph_vector_bool_init(&c_types, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_bool_init(&c_types, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_bool_destroy, &c_types); IGRAPH_R_CHECK_INT(n1); c_n1 = (igraph_integer_t) REAL(n1)[0]; @@ -9232,7 +9232,7 @@ SEXP R_igraph_bipartite_game_gnm(SEXP n1, SEXP n2, SEXP m, SEXP directed, SEXP m c_directed = LOGICAL(directed)[0]; c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_bipartite_game_gnm(&c_graph, &c_types, c_n1, c_n2, c_m, c_directed, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_bipartite_game_gnm(&c_graph, &c_types, c_n1, c_n2, c_m, c_directed, c_mode)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -9275,7 +9275,7 @@ SEXP R_igraph_bipartite_game(SEXP type, SEXP n1, SEXP n2, SEXP p, SEXP m, SEXP d SEXP r_result, r_names; IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ - IGRAPH_R_CHECK(igraph_vector_bool_init(&c_types, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_bool_init(&c_types, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_bool_destroy, &c_types); c_type = (igraph_erdos_renyi_t) Rf_asInteger(type); IGRAPH_R_CHECK_INT(n1); @@ -9290,7 +9290,7 @@ SEXP R_igraph_bipartite_game(SEXP type, SEXP n1, SEXP n2, SEXP p, SEXP m, SEXP d c_directed = LOGICAL(directed)[0]; c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_bipartite_game(&c_graph, &c_types, c_type, c_n1, c_n2, c_p, c_m, c_directed, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_bipartite_game(&c_graph, &c_types, c_type, c_n1, c_n2, c_p, c_m, c_directed, c_mode)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -9329,7 +9329,7 @@ SEXP R_igraph_get_laplacian(SEXP graph, SEXP mode, SEXP normalization, SEXP weig IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); c_mode = (igraph_neimode_t) Rf_asInteger(mode); c_normalization = (igraph_laplacian_normalization_t) Rf_asInteger(normalization); @@ -9337,7 +9337,7 @@ SEXP R_igraph_get_laplacian(SEXP graph, SEXP mode, SEXP normalization, SEXP weig Rz_SEXP_to_vector(weights, &c_weights); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_get_laplacian(&c_graph, &c_res, c_mode, c_normalization, (Rf_isNull(weights) ? 0 : &c_weights))); + IGRAPH_LOCAL_R_CHECK(igraph_get_laplacian(&c_graph, &c_res, c_mode, c_normalization, (Rf_isNull(weights) ? 0 : &c_weights))); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -9365,7 +9365,7 @@ SEXP R_igraph_get_laplacian_sparse(SEXP graph, SEXP mode, SEXP normalization, SE IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_sparsemat_init(&c_sparseres, 0, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_sparsemat_init(&c_sparseres, 0, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_sparsemat_destroy, &c_sparseres); c_mode = (igraph_neimode_t) Rf_asInteger(mode); c_normalization = (igraph_laplacian_normalization_t) Rf_asInteger(normalization); @@ -9373,7 +9373,7 @@ SEXP R_igraph_get_laplacian_sparse(SEXP graph, SEXP mode, SEXP normalization, SE Rz_SEXP_to_vector(weights, &c_weights); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_get_laplacian_sparse(&c_graph, &c_sparseres, c_mode, c_normalization, (Rf_isNull(weights) ? 0 : &c_weights))); + IGRAPH_LOCAL_R_CHECK(igraph_get_laplacian_sparse(&c_graph, &c_sparseres, c_mode, c_normalization, (Rf_isNull(weights) ? 0 : &c_weights))); /* Convert output */ PROTECT(sparseres=Ry_igraph_sparsemat_to_SEXP(&c_sparseres)); @@ -9403,14 +9403,14 @@ SEXP R_igraph_connected_components(SEXP graph, SEXP mode) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_membership, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_membership, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_csize, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_csize, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_csize); c_no=0; c_mode = (igraph_connectedness_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_connected_components(&c_graph, &c_membership, &c_csize, &c_no, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_connected_components(&c_graph, &c_membership, &c_csize, &c_no, c_mode)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -9452,7 +9452,7 @@ SEXP R_igraph_is_connected(SEXP graph, SEXP mode) { Rz_SEXP_to_igraph(graph, &c_graph); c_mode = (igraph_connectedness_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_is_connected(&c_graph, &c_res, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_is_connected(&c_graph, &c_res, c_mode)); /* Convert output */ PROTECT(res=NEW_LOGICAL(1)); @@ -9479,7 +9479,7 @@ SEXP R_igraph_decompose(SEXP graph, SEXP mode, SEXP maxcompno, SEXP minelements) IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_graph_list_init(&c_components, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_graph_list_init(&c_components, 0)); IGRAPH_LOCAL_FINALLY(igraph_graph_list_destroy, &c_components); c_mode = (igraph_connectedness_t) Rf_asInteger(mode); IGRAPH_R_CHECK_INT(maxcompno); @@ -9487,7 +9487,7 @@ SEXP R_igraph_decompose(SEXP graph, SEXP mode, SEXP maxcompno, SEXP minelements) IGRAPH_R_CHECK_INT(minelements); c_minelements = (igraph_integer_t) REAL(minelements)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_decompose(&c_graph, &c_components, c_mode, c_maxcompno, c_minelements)); + IGRAPH_LOCAL_R_CHECK(igraph_decompose(&c_graph, &c_components, c_mode, c_maxcompno, c_minelements)); /* Convert output */ PROTECT(components=Ry_igraph_graphlist_to_SEXP(&c_components)); @@ -9512,10 +9512,10 @@ SEXP R_igraph_articulation_points(SEXP graph) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_res); /* Call igraph */ - IGRAPH_R_CHECK(igraph_articulation_points(&c_graph, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_articulation_points(&c_graph, &c_res)); /* Convert output */ PROTECT(res=Ry_igraph_vector_int_to_SEXPp1(&c_res)); @@ -9549,16 +9549,16 @@ SEXP R_igraph_biconnected_components(SEXP graph) { /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_no=0; - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_tree_edges, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_tree_edges, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_tree_edges); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_component_edges, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_component_edges, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_component_edges); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_components, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_components, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_components); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_articulation_points, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_articulation_points, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_articulation_points); /* Call igraph */ - IGRAPH_R_CHECK(igraph_biconnected_components(&c_graph, &c_no, &c_tree_edges, &c_component_edges, &c_components, &c_articulation_points)); + IGRAPH_LOCAL_R_CHECK(igraph_biconnected_components(&c_graph, &c_no, &c_tree_edges, &c_component_edges, &c_components, &c_articulation_points)); /* Convert output */ PROTECT(r_result=NEW_LIST(5)); @@ -9607,10 +9607,10 @@ SEXP R_igraph_bridges(SEXP graph) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_res); /* Call igraph */ - IGRAPH_R_CHECK(igraph_bridges(&c_graph, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_bridges(&c_graph, &c_res)); /* Convert output */ PROTECT(res=Ry_igraph_vector_int_to_SEXPp1(&c_res)); @@ -9636,7 +9636,7 @@ SEXP R_igraph_is_biconnected(SEXP graph) { /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ - IGRAPH_R_CHECK(igraph_is_biconnected(&c_graph, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_is_biconnected(&c_graph, &c_res)); /* Convert output */ PROTECT(res=NEW_LOGICAL(1)); @@ -9661,11 +9661,11 @@ SEXP R_igraph_count_reachable(SEXP graph, SEXP mode) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_counts, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_counts, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_counts); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_count_reachable(&c_graph, &c_counts, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_count_reachable(&c_graph, &c_counts, c_mode)); /* Convert output */ PROTECT(counts=Ry_igraph_vector_int_to_SEXP(&c_counts)); @@ -9693,19 +9693,19 @@ SEXP R_igraph_bond_percolation(SEXP graph, SEXP edge_order) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_giant_size, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_giant_size, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_giant_size); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_vetex_count, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_vetex_count, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vetex_count); if (!Rf_isNull(edge_order)) { Rz_SEXP_to_vector_int_copy(edge_order, &c_edge_order); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_order); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_order, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edge_order, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_order); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_bond_percolation(&c_graph, &c_giant_size, &c_vetex_count, (Rf_isNull(edge_order) ? 0 : &c_edge_order))); + IGRAPH_LOCAL_R_CHECK(igraph_bond_percolation(&c_graph, &c_giant_size, &c_vetex_count, (Rf_isNull(edge_order) ? 0 : &c_edge_order))); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -9745,19 +9745,19 @@ SEXP R_igraph_site_percolation(SEXP graph, SEXP vertex_order) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_giant_size, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_giant_size, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_giant_size); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_count, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edge_count, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_count); if (!Rf_isNull(vertex_order)) { Rz_SEXP_to_vector_int_copy(vertex_order, &c_vertex_order); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_order); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_order, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_vertex_order, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_order); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_site_percolation(&c_graph, &c_giant_size, &c_edge_count, (Rf_isNull(vertex_order) ? 0 : &c_vertex_order))); + IGRAPH_LOCAL_R_CHECK(igraph_site_percolation(&c_graph, &c_giant_size, &c_edge_count, (Rf_isNull(vertex_order) ? 0 : &c_vertex_order))); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -9797,12 +9797,12 @@ SEXP R_igraph_edgelist_percolation(SEXP edges) { /* Convert input */ Rz_SEXP_to_vector_int_copy(edges, &c_edges); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edges); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_giant_size, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_giant_size, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_giant_size); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_count, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_vertex_count, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_count); /* Call igraph */ - IGRAPH_R_CHECK(igraph_edgelist_percolation(&c_edges, &c_giant_size, &c_vertex_count)); + IGRAPH_LOCAL_R_CHECK(igraph_edgelist_percolation(&c_edges, &c_giant_size, &c_vertex_count)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -9846,7 +9846,7 @@ SEXP R_igraph_is_clique(SEXP graph, SEXP candidate, SEXP directed) { IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_is_clique(&c_graph, c_candidate, c_directed, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_is_clique(&c_graph, c_candidate, c_directed, &c_res)); /* Convert output */ igraph_vector_int_destroy(&c_candidate_data); @@ -9874,14 +9874,14 @@ SEXP R_igraph_cliques(SEXP graph, SEXP min_size, SEXP max_size) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_res); IGRAPH_R_CHECK_INT(min_size); c_min_size = (igraph_integer_t) REAL(min_size)[0]; IGRAPH_R_CHECK_INT(max_size); c_max_size = (igraph_integer_t) REAL(max_size)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_cliques(&c_graph, &c_res, c_min_size, c_max_size)); + IGRAPH_LOCAL_R_CHECK(igraph_cliques(&c_graph, &c_res, c_min_size, c_max_size)); /* Convert output */ PROTECT(res=Ry_igraph_vector_int_list_to_SEXPp1(&c_res)); @@ -9908,14 +9908,14 @@ SEXP R_igraph_clique_size_hist(SEXP graph, SEXP min_size, SEXP max_size) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_hist, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_hist, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_hist); IGRAPH_R_CHECK_INT(min_size); c_min_size = (igraph_integer_t) REAL(min_size)[0]; IGRAPH_R_CHECK_INT(max_size); c_max_size = (igraph_integer_t) REAL(max_size)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_clique_size_hist(&c_graph, &c_hist, c_min_size, c_max_size)); + IGRAPH_LOCAL_R_CHECK(igraph_clique_size_hist(&c_graph, &c_hist, c_min_size, c_max_size)); /* Convert output */ PROTECT(hist=Ry_igraph_vector_to_SEXP(&c_hist)); @@ -9940,10 +9940,10 @@ SEXP R_igraph_largest_cliques(SEXP graph) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_res); /* Call igraph */ - IGRAPH_R_CHECK(igraph_largest_cliques(&c_graph, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_largest_cliques(&c_graph, &c_res)); /* Convert output */ PROTECT(res=Ry_igraph_vector_int_list_to_SEXPp1(&c_res)); @@ -9970,14 +9970,14 @@ SEXP R_igraph_maximal_cliques(SEXP graph, SEXP min_size, SEXP max_size) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_res); IGRAPH_R_CHECK_INT(min_size); c_min_size = (igraph_integer_t) REAL(min_size)[0]; IGRAPH_R_CHECK_INT(max_size); c_max_size = (igraph_integer_t) REAL(max_size)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_maximal_cliques(&c_graph, &c_res, c_min_size, c_max_size)); + IGRAPH_LOCAL_R_CHECK(igraph_maximal_cliques(&c_graph, &c_res, c_min_size, c_max_size)); /* Convert output */ PROTECT(res=Ry_igraph_vector_int_list_to_SEXPp1(&c_res)); @@ -10010,7 +10010,7 @@ SEXP R_igraph_maximal_cliques_subset(SEXP graph, SEXP subset, SEXP outfile, SEXP Rz_SEXP_to_igraph(graph, &c_graph); Rz_SEXP_to_vector_int_copy(subset, &c_subset); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_subset); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_res); c_no=0; if (!Rf_isNull(outfile)) { @@ -10022,7 +10022,7 @@ SEXP R_igraph_maximal_cliques_subset(SEXP graph, SEXP subset, SEXP outfile, SEXP IGRAPH_R_CHECK_INT(max_size); c_max_size = (igraph_integer_t) REAL(max_size)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_maximal_cliques_subset(&c_graph, &c_subset, &c_res, &c_no, (Rf_isNull(outfile) ? 0 : c_outfile), c_min_size, c_max_size)); + IGRAPH_LOCAL_R_CHECK(igraph_maximal_cliques_subset(&c_graph, &c_subset, &c_res, &c_no, (Rf_isNull(outfile) ? 0 : c_outfile), c_min_size, c_max_size)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -10066,7 +10066,7 @@ SEXP R_igraph_maximal_cliques_count(SEXP graph, SEXP min_size, SEXP max_size) { IGRAPH_R_CHECK_INT(max_size); c_max_size = (igraph_integer_t) REAL(max_size)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_maximal_cliques_count(&c_graph, &c_no, c_min_size, c_max_size)); + IGRAPH_LOCAL_R_CHECK(igraph_maximal_cliques_count(&c_graph, &c_no, c_min_size, c_max_size)); /* Convert output */ PROTECT(no=NEW_NUMERIC(1)); @@ -10097,7 +10097,7 @@ SEXP R_igraph_maximal_cliques_file(SEXP graph, SEXP res, SEXP min_size, SEXP max IGRAPH_R_CHECK_INT(max_size); c_max_size = (igraph_integer_t) REAL(max_size)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_maximal_cliques_file(&c_graph, c_res, c_min_size, c_max_size)); + IGRAPH_LOCAL_R_CHECK(igraph_maximal_cliques_file(&c_graph, c_res, c_min_size, c_max_size)); /* Convert output */ @@ -10121,14 +10121,14 @@ SEXP R_igraph_maximal_cliques_hist(SEXP graph, SEXP min_size, SEXP max_size) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_hist, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_hist, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_hist); IGRAPH_R_CHECK_INT(min_size); c_min_size = (igraph_integer_t) REAL(min_size)[0]; IGRAPH_R_CHECK_INT(max_size); c_max_size = (igraph_integer_t) REAL(max_size)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_maximal_cliques_hist(&c_graph, &c_hist, c_min_size, c_max_size)); + IGRAPH_LOCAL_R_CHECK(igraph_maximal_cliques_hist(&c_graph, &c_hist, c_min_size, c_max_size)); /* Convert output */ PROTECT(hist=Ry_igraph_vector_to_SEXP(&c_hist)); @@ -10155,7 +10155,7 @@ SEXP R_igraph_clique_number(SEXP graph) { Rz_SEXP_to_igraph(graph, &c_graph); c_no=0; /* Call igraph */ - IGRAPH_R_CHECK(igraph_clique_number(&c_graph, &c_no)); + IGRAPH_LOCAL_R_CHECK(igraph_clique_number(&c_graph, &c_no)); /* Convert output */ PROTECT(no=NEW_NUMERIC(1)); @@ -10186,7 +10186,7 @@ SEXP R_igraph_weighted_cliques(SEXP graph, SEXP vertex_weights, SEXP min_weight, if (!Rf_isNull(vertex_weights)) { Rz_SEXP_to_vector(vertex_weights, &c_vertex_weights); } - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_res); IGRAPH_R_CHECK_REAL(min_weight); c_min_weight = REAL(min_weight)[0]; @@ -10195,7 +10195,7 @@ SEXP R_igraph_weighted_cliques(SEXP graph, SEXP vertex_weights, SEXP min_weight, IGRAPH_R_CHECK_BOOL(maximal); c_maximal = LOGICAL(maximal)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_weighted_cliques(&c_graph, (Rf_isNull(vertex_weights) ? 0 : &c_vertex_weights), &c_res, c_min_weight, c_max_weight, c_maximal)); + IGRAPH_LOCAL_R_CHECK(igraph_weighted_cliques(&c_graph, (Rf_isNull(vertex_weights) ? 0 : &c_vertex_weights), &c_res, c_min_weight, c_max_weight, c_maximal)); /* Convert output */ PROTECT(res=Ry_igraph_vector_int_list_to_SEXPp1(&c_res)); @@ -10224,10 +10224,10 @@ SEXP R_igraph_largest_weighted_cliques(SEXP graph, SEXP vertex_weights) { if (!Rf_isNull(vertex_weights)) { Rz_SEXP_to_vector(vertex_weights, &c_vertex_weights); } - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_res); /* Call igraph */ - IGRAPH_R_CHECK(igraph_largest_weighted_cliques(&c_graph, (Rf_isNull(vertex_weights) ? 0 : &c_vertex_weights), &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_largest_weighted_cliques(&c_graph, (Rf_isNull(vertex_weights) ? 0 : &c_vertex_weights), &c_res)); /* Convert output */ PROTECT(res=Ry_igraph_vector_int_list_to_SEXPp1(&c_res)); @@ -10257,7 +10257,7 @@ SEXP R_igraph_weighted_clique_number(SEXP graph, SEXP vertex_weights) { Rz_SEXP_to_vector(vertex_weights, &c_vertex_weights); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_weighted_clique_number(&c_graph, (Rf_isNull(vertex_weights) ? 0 : &c_vertex_weights), &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_weighted_clique_number(&c_graph, (Rf_isNull(vertex_weights) ? 0 : &c_vertex_weights), &c_res)); /* Convert output */ PROTECT(res=NEW_NUMERIC(1)); @@ -10285,7 +10285,7 @@ SEXP R_igraph_is_independent_vertex_set(SEXP graph, SEXP candidate) { igraph_vector_int_t c_candidate_data; Rz_SEXP_to_igraph_vs(candidate, &c_graph, &c_candidate, &c_candidate_data); /* Call igraph */ - IGRAPH_R_CHECK(igraph_is_independent_vertex_set(&c_graph, c_candidate, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_is_independent_vertex_set(&c_graph, c_candidate, &c_res)); /* Convert output */ igraph_vector_int_destroy(&c_candidate_data); @@ -10313,14 +10313,14 @@ SEXP R_igraph_independent_vertex_sets(SEXP graph, SEXP min_size, SEXP max_size) IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_res); IGRAPH_R_CHECK_INT(min_size); c_min_size = (igraph_integer_t) REAL(min_size)[0]; IGRAPH_R_CHECK_INT(max_size); c_max_size = (igraph_integer_t) REAL(max_size)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_independent_vertex_sets(&c_graph, &c_res, c_min_size, c_max_size)); + IGRAPH_LOCAL_R_CHECK(igraph_independent_vertex_sets(&c_graph, &c_res, c_min_size, c_max_size)); /* Convert output */ PROTECT(res=Ry_igraph_vector_int_list_to_SEXPp1(&c_res)); @@ -10345,10 +10345,10 @@ SEXP R_igraph_largest_independent_vertex_sets(SEXP graph) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_res); /* Call igraph */ - IGRAPH_R_CHECK(igraph_largest_independent_vertex_sets(&c_graph, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_largest_independent_vertex_sets(&c_graph, &c_res)); /* Convert output */ PROTECT(res=Ry_igraph_vector_int_list_to_SEXPp1(&c_res)); @@ -10373,10 +10373,10 @@ SEXP R_igraph_maximal_independent_vertex_sets(SEXP graph) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_res); /* Call igraph */ - IGRAPH_R_CHECK(igraph_maximal_independent_vertex_sets(&c_graph, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_maximal_independent_vertex_sets(&c_graph, &c_res)); /* Convert output */ PROTECT(res=Ry_igraph_vector_int_list_to_SEXPp1(&c_res)); @@ -10403,7 +10403,7 @@ SEXP R_igraph_independence_number(SEXP graph) { Rz_SEXP_to_igraph(graph, &c_graph); c_no=0; /* Call igraph */ - IGRAPH_R_CHECK(igraph_independence_number(&c_graph, &c_no)); + IGRAPH_LOCAL_R_CHECK(igraph_independence_number(&c_graph, &c_no)); /* Convert output */ PROTECT(no=NEW_NUMERIC(1)); @@ -10427,10 +10427,10 @@ SEXP R_igraph_layout_random(SEXP graph) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); /* Call igraph */ - IGRAPH_R_CHECK(igraph_layout_random(&c_graph, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_layout_random(&c_graph, &c_res)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -10456,12 +10456,12 @@ SEXP R_igraph_layout_circle(SEXP graph, SEXP order) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); igraph_vector_int_t c_order_data; Rz_SEXP_to_igraph_vs(order, &c_graph, &c_order, &c_order_data); /* Call igraph */ - IGRAPH_R_CHECK(igraph_layout_circle(&c_graph, &c_res, c_order)); + IGRAPH_LOCAL_R_CHECK(igraph_layout_circle(&c_graph, &c_res, c_order)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -10490,18 +10490,18 @@ SEXP R_igraph_layout_star(SEXP graph, SEXP center, SEXP order) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); c_center = (igraph_integer_t) REAL(center)[0]; if (!Rf_isNull(order)) { Rz_SEXP_to_vector_int_copy(order, &c_order); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_order); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_order, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_order, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_order); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_layout_star(&c_graph, &c_res, c_center, (Rf_isNull(order) ? 0 : &c_order))); + IGRAPH_LOCAL_R_CHECK(igraph_layout_star(&c_graph, &c_res, c_center, (Rf_isNull(order) ? 0 : &c_order))); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -10529,12 +10529,12 @@ SEXP R_igraph_layout_grid(SEXP graph, SEXP width) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); IGRAPH_R_CHECK_INT(width); c_width = (igraph_integer_t) REAL(width)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_layout_grid(&c_graph, &c_res, c_width)); + IGRAPH_LOCAL_R_CHECK(igraph_layout_grid(&c_graph, &c_res, c_width)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -10561,14 +10561,14 @@ SEXP R_igraph_layout_grid_3d(SEXP graph, SEXP width, SEXP height) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); IGRAPH_R_CHECK_INT(width); c_width = (igraph_integer_t) REAL(width)[0]; IGRAPH_R_CHECK_INT(height); c_height = (igraph_integer_t) REAL(height)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_layout_grid_3d(&c_graph, &c_res, c_width, c_height)); + IGRAPH_LOCAL_R_CHECK(igraph_layout_grid_3d(&c_graph, &c_res, c_width, c_height)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -10606,7 +10606,7 @@ SEXP R_igraph_layout_fruchterman_reingold(SEXP graph, SEXP coords, SEXP use_seed /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(coords)) { - IGRAPH_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(coords, &c_coords)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(coords, &c_coords)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_coords); } IGRAPH_R_CHECK_BOOL(use_seed); @@ -10632,7 +10632,7 @@ SEXP R_igraph_layout_fruchterman_reingold(SEXP graph, SEXP coords, SEXP use_seed Rz_SEXP_to_vector(maxy, &c_maxy); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_layout_fruchterman_reingold(&c_graph, &c_coords, c_use_seed, c_niter, c_start_temp, c_grid, (Rf_isNull(weights) ? 0 : &c_weights), (Rf_isNull(minx) ? 0 : &c_minx), (Rf_isNull(maxx) ? 0 : &c_maxx), (Rf_isNull(miny) ? 0 : &c_miny), (Rf_isNull(maxy) ? 0 : &c_maxy))); + IGRAPH_LOCAL_R_CHECK(igraph_layout_fruchterman_reingold(&c_graph, &c_coords, c_use_seed, c_niter, c_start_temp, c_grid, (Rf_isNull(weights) ? 0 : &c_weights), (Rf_isNull(minx) ? 0 : &c_minx), (Rf_isNull(maxx) ? 0 : &c_maxx), (Rf_isNull(miny) ? 0 : &c_miny), (Rf_isNull(maxy) ? 0 : &c_maxy))); /* Convert output */ PROTECT(coords=Ry_igraph_matrix_to_SEXP(&c_coords)); @@ -10665,7 +10665,7 @@ SEXP R_igraph_layout_kamada_kawai(SEXP graph, SEXP coords, SEXP use_seed, SEXP m IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(coords, &c_coords)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(coords, &c_coords)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_coords); IGRAPH_R_CHECK_BOOL(use_seed); c_use_seed = LOGICAL(use_seed)[0]; @@ -10691,7 +10691,7 @@ SEXP R_igraph_layout_kamada_kawai(SEXP graph, SEXP coords, SEXP use_seed, SEXP m Rz_SEXP_to_vector(maxy, &c_maxy); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_layout_kamada_kawai(&c_graph, &c_coords, c_use_seed, c_maxiter, c_epsilon, c_kkconst, (Rf_isNull(weights) ? 0 : &c_weights), (Rf_isNull(minx) ? 0 : &c_minx), (Rf_isNull(maxx) ? 0 : &c_maxx), (Rf_isNull(miny) ? 0 : &c_miny), (Rf_isNull(maxy) ? 0 : &c_maxy))); + IGRAPH_LOCAL_R_CHECK(igraph_layout_kamada_kawai(&c_graph, &c_coords, c_use_seed, c_maxiter, c_epsilon, c_kkconst, (Rf_isNull(weights) ? 0 : &c_weights), (Rf_isNull(minx) ? 0 : &c_minx), (Rf_isNull(maxx) ? 0 : &c_maxx), (Rf_isNull(miny) ? 0 : &c_miny), (Rf_isNull(maxy) ? 0 : &c_maxy))); /* Convert output */ PROTECT(coords=Ry_igraph_matrix_to_SEXP(&c_coords)); @@ -10723,7 +10723,7 @@ SEXP R_igraph_layout_lgl(SEXP graph, SEXP maxiter, SEXP maxdelta, SEXP area, SEX IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); IGRAPH_R_CHECK_INT(maxiter); c_maxiter = (igraph_integer_t) REAL(maxiter)[0]; @@ -10740,7 +10740,7 @@ SEXP R_igraph_layout_lgl(SEXP graph, SEXP maxiter, SEXP maxdelta, SEXP area, SEX IGRAPH_R_CHECK_INT(root); c_root = (igraph_integer_t) REAL(root)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_layout_lgl(&c_graph, &c_res, c_maxiter, c_maxdelta, c_area, c_coolexp, c_repulserad, c_cellsize, c_root)); + IGRAPH_LOCAL_R_CHECK(igraph_layout_lgl(&c_graph, &c_res, c_maxiter, c_maxdelta, c_area, c_coolexp, c_repulserad, c_cellsize, c_root)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -10768,25 +10768,25 @@ SEXP R_igraph_layout_reingold_tilford(SEXP graph, SEXP mode, SEXP roots, SEXP ro IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); c_mode = (igraph_neimode_t) Rf_asInteger(mode); if (!Rf_isNull(roots)) { Rz_SEXP_to_vector_int_copy(roots, &c_roots); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_roots); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_roots, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_roots, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_roots); } if (!Rf_isNull(rootlevel)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(rootlevel, &c_rootlevel)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(rootlevel, &c_rootlevel)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_rootlevel); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_rootlevel, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_rootlevel, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_rootlevel); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_layout_reingold_tilford(&c_graph, &c_res, c_mode, (Rf_isNull(roots) ? 0 : &c_roots), (Rf_isNull(rootlevel) ? 0 : &c_rootlevel))); + IGRAPH_LOCAL_R_CHECK(igraph_layout_reingold_tilford(&c_graph, &c_res, c_mode, (Rf_isNull(roots) ? 0 : &c_roots), (Rf_isNull(rootlevel) ? 0 : &c_rootlevel))); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -10818,25 +10818,25 @@ SEXP R_igraph_layout_reingold_tilford_circular(SEXP graph, SEXP mode, SEXP roots IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); c_mode = (igraph_neimode_t) Rf_asInteger(mode); if (!Rf_isNull(roots)) { Rz_SEXP_to_vector_int_copy(roots, &c_roots); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_roots); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_roots, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_roots, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_roots); } if (!Rf_isNull(rootlevel)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(rootlevel, &c_rootlevel)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(rootlevel, &c_rootlevel)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_rootlevel); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_rootlevel, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_rootlevel, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_rootlevel); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_layout_reingold_tilford_circular(&c_graph, &c_res, c_mode, (Rf_isNull(roots) ? 0 : &c_roots), (Rf_isNull(rootlevel) ? 0 : &c_rootlevel))); + IGRAPH_LOCAL_R_CHECK(igraph_layout_reingold_tilford_circular(&c_graph, &c_res, c_mode, (Rf_isNull(roots) ? 0 : &c_roots), (Rf_isNull(rootlevel) ? 0 : &c_rootlevel))); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -10868,11 +10868,11 @@ SEXP R_igraph_roots_for_tree_layout(SEXP graph, SEXP mode, SEXP heuristic) { /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_mode = (igraph_neimode_t) Rf_asInteger(mode); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_roots, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_roots, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_roots); c_heuristic = (igraph_root_choice_t) Rf_asInteger(heuristic); /* Call igraph */ - IGRAPH_R_CHECK(igraph_roots_for_tree_layout(&c_graph, c_mode, &c_roots, c_heuristic)); + IGRAPH_LOCAL_R_CHECK(igraph_roots_for_tree_layout(&c_graph, c_mode, &c_roots, c_heuristic)); /* Convert output */ PROTECT(roots=Ry_igraph_vector_int_to_SEXPp1(&c_roots)); @@ -10897,10 +10897,10 @@ SEXP R_igraph_layout_random_3d(SEXP graph) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); /* Call igraph */ - IGRAPH_R_CHECK(igraph_layout_random_3d(&c_graph, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_layout_random_3d(&c_graph, &c_res)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -10925,10 +10925,10 @@ SEXP R_igraph_layout_sphere(SEXP graph) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); /* Call igraph */ - IGRAPH_R_CHECK(igraph_layout_sphere(&c_graph, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_layout_sphere(&c_graph, &c_res)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -10967,7 +10967,7 @@ SEXP R_igraph_layout_fruchterman_reingold_3d(SEXP graph, SEXP coords, SEXP use_s /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(coords)) { - IGRAPH_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(coords, &c_coords)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(coords, &c_coords)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_coords); } IGRAPH_R_CHECK_BOOL(use_seed); @@ -10998,7 +10998,7 @@ SEXP R_igraph_layout_fruchterman_reingold_3d(SEXP graph, SEXP coords, SEXP use_s Rz_SEXP_to_vector(maxz, &c_maxz); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_layout_fruchterman_reingold_3d(&c_graph, &c_coords, c_use_seed, c_niter, c_start_temp, (Rf_isNull(weights) ? 0 : &c_weights), (Rf_isNull(minx) ? 0 : &c_minx), (Rf_isNull(maxx) ? 0 : &c_maxx), (Rf_isNull(miny) ? 0 : &c_miny), (Rf_isNull(maxy) ? 0 : &c_maxy), (Rf_isNull(minz) ? 0 : &c_minz), (Rf_isNull(maxz) ? 0 : &c_maxz))); + IGRAPH_LOCAL_R_CHECK(igraph_layout_fruchterman_reingold_3d(&c_graph, &c_coords, c_use_seed, c_niter, c_start_temp, (Rf_isNull(weights) ? 0 : &c_weights), (Rf_isNull(minx) ? 0 : &c_minx), (Rf_isNull(maxx) ? 0 : &c_maxx), (Rf_isNull(miny) ? 0 : &c_miny), (Rf_isNull(maxy) ? 0 : &c_maxy), (Rf_isNull(minz) ? 0 : &c_minz), (Rf_isNull(maxz) ? 0 : &c_maxz))); /* Convert output */ PROTECT(coords=Ry_igraph_matrix_to_SEXP(&c_coords)); @@ -11033,7 +11033,7 @@ SEXP R_igraph_layout_kamada_kawai_3d(SEXP graph, SEXP coords, SEXP use_seed, SEX IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(coords, &c_coords)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(coords, &c_coords)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_coords); IGRAPH_R_CHECK_BOOL(use_seed); c_use_seed = LOGICAL(use_seed)[0]; @@ -11065,7 +11065,7 @@ SEXP R_igraph_layout_kamada_kawai_3d(SEXP graph, SEXP coords, SEXP use_seed, SEX Rz_SEXP_to_vector(maxz, &c_maxz); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_layout_kamada_kawai_3d(&c_graph, &c_coords, c_use_seed, c_maxiter, c_epsilon, c_kkconst, (Rf_isNull(weights) ? 0 : &c_weights), (Rf_isNull(minx) ? 0 : &c_minx), (Rf_isNull(maxx) ? 0 : &c_maxx), (Rf_isNull(miny) ? 0 : &c_miny), (Rf_isNull(maxy) ? 0 : &c_maxy), (Rf_isNull(minz) ? 0 : &c_minz), (Rf_isNull(maxz) ? 0 : &c_maxz))); + IGRAPH_LOCAL_R_CHECK(igraph_layout_kamada_kawai_3d(&c_graph, &c_coords, c_use_seed, c_maxiter, c_epsilon, c_kkconst, (Rf_isNull(weights) ? 0 : &c_weights), (Rf_isNull(minx) ? 0 : &c_minx), (Rf_isNull(maxx) ? 0 : &c_maxx), (Rf_isNull(miny) ? 0 : &c_miny), (Rf_isNull(maxy) ? 0 : &c_maxy), (Rf_isNull(minz) ? 0 : &c_minz), (Rf_isNull(maxz) ? 0 : &c_maxz))); /* Convert output */ PROTECT(coords=Ry_igraph_matrix_to_SEXP(&c_coords)); @@ -11096,7 +11096,7 @@ SEXP R_igraph_layout_graphopt(SEXP graph, SEXP res, SEXP niter, SEXP node_charge IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(res, &c_res)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(res, &c_res)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); IGRAPH_R_CHECK_INT(niter); c_niter = (igraph_integer_t) REAL(niter)[0]; @@ -11113,7 +11113,7 @@ SEXP R_igraph_layout_graphopt(SEXP graph, SEXP res, SEXP niter, SEXP node_charge IGRAPH_R_CHECK_BOOL(use_seed); c_use_seed = LOGICAL(use_seed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_layout_graphopt(&c_graph, &c_res, c_niter, c_node_charge, c_node_mass, c_spring_length, c_spring_constant, c_max_sa_movement, c_use_seed)); + IGRAPH_LOCAL_R_CHECK(igraph_layout_graphopt(&c_graph, &c_res, c_niter, c_node_charge, c_node_mass, c_spring_length, c_spring_constant, c_max_sa_movement, c_use_seed)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -11140,7 +11140,7 @@ SEXP R_igraph_layout_drl(SEXP graph, SEXP res, SEXP use_seed, SEXP options, SEXP IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(res, &c_res)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(res, &c_res)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); IGRAPH_R_CHECK_BOOL(use_seed); c_use_seed = LOGICAL(use_seed)[0]; @@ -11149,7 +11149,7 @@ SEXP R_igraph_layout_drl(SEXP graph, SEXP res, SEXP use_seed, SEXP options, SEXP Rz_SEXP_to_vector(weights, &c_weights); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_layout_drl(&c_graph, &c_res, c_use_seed, &c_options, (Rf_isNull(weights) ? 0 : &c_weights))); + IGRAPH_LOCAL_R_CHECK(igraph_layout_drl(&c_graph, &c_res, c_use_seed, &c_options, (Rf_isNull(weights) ? 0 : &c_weights))); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -11176,7 +11176,7 @@ SEXP R_igraph_layout_drl_3d(SEXP graph, SEXP res, SEXP use_seed, SEXP options, S IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(res, &c_res)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(res, &c_res)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); IGRAPH_R_CHECK_BOOL(use_seed); c_use_seed = LOGICAL(use_seed)[0]; @@ -11185,7 +11185,7 @@ SEXP R_igraph_layout_drl_3d(SEXP graph, SEXP res, SEXP use_seed, SEXP options, S Rz_SEXP_to_vector(weights, &c_weights); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_layout_drl_3d(&c_graph, &c_res, c_use_seed, &c_options, (Rf_isNull(weights) ? 0 : &c_weights))); + IGRAPH_LOCAL_R_CHECK(igraph_layout_drl_3d(&c_graph, &c_res, c_use_seed, &c_options, (Rf_isNull(weights) ? 0 : &c_weights))); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -11211,13 +11211,13 @@ SEXP R_igraph_layout_merge_dla(SEXP graphs, SEXP coords) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ igraph_t *c_graphs_storage; - IGRAPH_R_CHECK(Rz_SEXP_to_graph_ptr_list(graphs, &c_graphs, &c_graphs_storage)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_graph_ptr_list(graphs, &c_graphs, &c_graphs_storage)); IGRAPH_LOCAL_FINALLY(igraph_vector_ptr_destroy, &c_graphs); Ry_igraph_SEXP_to_matrixlist(coords, &c_coords); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); /* Call igraph */ - IGRAPH_R_CHECK(igraph_layout_merge_dla(&c_graphs, &c_coords, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_layout_merge_dla(&c_graphs, &c_coords, &c_res)); /* Convert output */ igraph_vector_ptr_destroy(&c_graphs); @@ -11253,15 +11253,15 @@ SEXP R_igraph_layout_sugiyama(SEXP graph, SEXP layers, SEXP hgap, SEXP vgap, SEX IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_extd_to_orig_eids, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_extd_to_orig_eids, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_extd_to_orig_eids); if (!Rf_isNull(layers)) { Rz_SEXP_to_vector_int_copy(layers, &c_layers); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_layers); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_layers, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_layers, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_layers); } IGRAPH_R_CHECK_REAL(hgap); @@ -11274,7 +11274,7 @@ SEXP R_igraph_layout_sugiyama(SEXP graph, SEXP layers, SEXP hgap, SEXP vgap, SEX Rz_SEXP_to_vector(weights, &c_weights); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_layout_sugiyama(&c_graph, &c_res, &c_extd_graph, &c_extd_to_orig_eids, (Rf_isNull(layers) ? 0 : &c_layers), c_hgap, c_vgap, c_maxiter, (Rf_isNull(weights) ? 0 : &c_weights))); + IGRAPH_LOCAL_R_CHECK(igraph_layout_sugiyama(&c_graph, &c_res, &c_extd_graph, &c_extd_to_orig_eids, (Rf_isNull(layers) ? 0 : &c_layers), c_hgap, c_vgap, c_maxiter, (Rf_isNull(weights) ? 0 : &c_weights))); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -11319,7 +11319,7 @@ SEXP R_igraph_layout_mds(SEXP graph, SEXP dist, SEXP dim) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); if (!Rf_isNull(dist)) { Rz_SEXP_to_matrix(dist, &c_dist); @@ -11327,7 +11327,7 @@ SEXP R_igraph_layout_mds(SEXP graph, SEXP dist, SEXP dim) { IGRAPH_R_CHECK_INT(dim); c_dim = (igraph_integer_t) REAL(dim)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_layout_mds(&c_graph, &c_res, (Rf_isNull(dist) ? 0 : &c_dist), c_dim)); + IGRAPH_LOCAL_R_CHECK(igraph_layout_mds(&c_graph, &c_res, (Rf_isNull(dist) ? 0 : &c_dist), c_dim)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -11357,7 +11357,7 @@ SEXP R_igraph_layout_bipartite(SEXP graph, SEXP types, SEXP hgap, SEXP vgap, SEX /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); Rz_SEXP_to_vector_bool(types, &c_types); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); IGRAPH_R_CHECK_REAL(hgap); c_hgap = REAL(hgap)[0]; @@ -11366,7 +11366,7 @@ SEXP R_igraph_layout_bipartite(SEXP graph, SEXP types, SEXP hgap, SEXP vgap, SEX IGRAPH_R_CHECK_INT(maxiter); c_maxiter = (igraph_integer_t) REAL(maxiter)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_layout_bipartite(&c_graph, &c_types, &c_res, c_hgap, c_vgap, c_maxiter)); + IGRAPH_LOCAL_R_CHECK(igraph_layout_bipartite(&c_graph, &c_types, &c_res, c_hgap, c_vgap, c_maxiter)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -11395,7 +11395,7 @@ SEXP R_igraph_layout_gem(SEXP graph, SEXP res, SEXP use_seed, SEXP maxiter, SEXP IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(res, &c_res)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(res, &c_res)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); IGRAPH_R_CHECK_BOOL(use_seed); c_use_seed = LOGICAL(use_seed)[0]; @@ -11408,7 +11408,7 @@ SEXP R_igraph_layout_gem(SEXP graph, SEXP res, SEXP use_seed, SEXP maxiter, SEXP IGRAPH_R_CHECK_REAL(temp_init); c_temp_init = REAL(temp_init)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_layout_gem(&c_graph, &c_res, c_use_seed, c_maxiter, c_temp_max, c_temp_min, c_temp_init)); + IGRAPH_LOCAL_R_CHECK(igraph_layout_gem(&c_graph, &c_res, c_use_seed, c_maxiter, c_temp_max, c_temp_min, c_temp_init)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -11441,7 +11441,7 @@ SEXP R_igraph_layout_davidson_harel(SEXP graph, SEXP res, SEXP use_seed, SEXP ma IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(res, &c_res)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(res, &c_res)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); IGRAPH_R_CHECK_BOOL(use_seed); c_use_seed = LOGICAL(use_seed)[0]; @@ -11462,7 +11462,7 @@ SEXP R_igraph_layout_davidson_harel(SEXP graph, SEXP res, SEXP use_seed, SEXP ma IGRAPH_R_CHECK_REAL(weight_node_edge_dist); c_weight_node_edge_dist = REAL(weight_node_edge_dist)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_layout_davidson_harel(&c_graph, &c_res, c_use_seed, c_maxiter, c_fineiter, c_cool_fact, c_weight_node_dist, c_weight_border, c_weight_edge_lengths, c_weight_edge_crossings, c_weight_node_edge_dist)); + IGRAPH_LOCAL_R_CHECK(igraph_layout_davidson_harel(&c_graph, &c_res, c_use_seed, c_maxiter, c_fineiter, c_cool_fact, c_weight_node_dist, c_weight_border, c_weight_edge_lengths, c_weight_edge_crossings, c_weight_node_edge_dist)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -11491,7 +11491,7 @@ SEXP R_igraph_layout_umap(SEXP graph, SEXP res, SEXP use_seed, SEXP distances, S IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(res, &c_res)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(res, &c_res)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); IGRAPH_R_CHECK_BOOL(use_seed); c_use_seed = LOGICAL(use_seed)[0]; @@ -11505,7 +11505,7 @@ SEXP R_igraph_layout_umap(SEXP graph, SEXP res, SEXP use_seed, SEXP distances, S IGRAPH_R_CHECK_BOOL(distances_are_weights); c_distances_are_weights = LOGICAL(distances_are_weights)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_layout_umap(&c_graph, &c_res, c_use_seed, (Rf_isNull(distances) ? 0 : &c_distances), c_min_dist, c_epochs, c_distances_are_weights)); + IGRAPH_LOCAL_R_CHECK(igraph_layout_umap(&c_graph, &c_res, c_use_seed, (Rf_isNull(distances) ? 0 : &c_distances), c_min_dist, c_epochs, c_distances_are_weights)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -11534,7 +11534,7 @@ SEXP R_igraph_layout_umap_3d(SEXP graph, SEXP res, SEXP use_seed, SEXP distances IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(res, &c_res)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(res, &c_res)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); IGRAPH_R_CHECK_BOOL(use_seed); c_use_seed = LOGICAL(use_seed)[0]; @@ -11548,7 +11548,7 @@ SEXP R_igraph_layout_umap_3d(SEXP graph, SEXP res, SEXP use_seed, SEXP distances IGRAPH_R_CHECK_BOOL(distances_are_weights); c_distances_are_weights = LOGICAL(distances_are_weights)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_layout_umap_3d(&c_graph, &c_res, c_use_seed, (Rf_isNull(distances) ? 0 : &c_distances), c_min_dist, c_epochs, c_distances_are_weights)); + IGRAPH_LOCAL_R_CHECK(igraph_layout_umap_3d(&c_graph, &c_res, c_use_seed, (Rf_isNull(distances) ? 0 : &c_distances), c_min_dist, c_epochs, c_distances_are_weights)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -11574,10 +11574,10 @@ SEXP R_igraph_layout_umap_compute_weights(SEXP graph, SEXP distances, SEXP weigh /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); Rz_SEXP_to_vector(distances, &c_distances); - IGRAPH_R_CHECK(Rz_SEXP_to_vector_copy(weights, &c_weights)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_copy(weights, &c_weights)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_weights); /* Call igraph */ - IGRAPH_R_CHECK(igraph_layout_umap_compute_weights(&c_graph, &c_distances, &c_weights)); + IGRAPH_LOCAL_R_CHECK(igraph_layout_umap_compute_weights(&c_graph, &c_distances, &c_weights)); /* Convert output */ PROTECT(weights=Ry_igraph_vector_to_SEXP(&c_weights)); @@ -11601,10 +11601,10 @@ SEXP R_igraph_layout_align(SEXP graph, SEXP layout) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(layout, &c_layout)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(layout, &c_layout)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_layout); /* Call igraph */ - IGRAPH_R_CHECK(igraph_layout_align(&c_graph, &c_layout)); + IGRAPH_LOCAL_R_CHECK(igraph_layout_align(&c_graph, &c_layout)); /* Convert output */ PROTECT(layout=Ry_igraph_matrix_to_SEXP(&c_layout)); @@ -11630,12 +11630,12 @@ SEXP R_igraph_cocitation(SEXP graph, SEXP vids) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); /* Call igraph */ - IGRAPH_R_CHECK(igraph_cocitation(&c_graph, &c_res, c_vids)); + IGRAPH_LOCAL_R_CHECK(igraph_cocitation(&c_graph, &c_res, c_vids)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -11663,12 +11663,12 @@ SEXP R_igraph_bibcoupling(SEXP graph, SEXP vids) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); /* Call igraph */ - IGRAPH_R_CHECK(igraph_bibcoupling(&c_graph, &c_res, c_vids)); + IGRAPH_LOCAL_R_CHECK(igraph_bibcoupling(&c_graph, &c_res, c_vids)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -11698,7 +11698,7 @@ SEXP R_igraph_similarity_dice(SEXP graph, SEXP vids, SEXP mode, SEXP loops) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); @@ -11706,7 +11706,7 @@ SEXP R_igraph_similarity_dice(SEXP graph, SEXP vids, SEXP mode, SEXP loops) { IGRAPH_R_CHECK_BOOL(loops); c_loops = LOGICAL(loops)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_similarity_dice(&c_graph, &c_res, c_vids, c_mode, c_loops)); + IGRAPH_LOCAL_R_CHECK(igraph_similarity_dice(&c_graph, &c_res, c_vids, c_mode, c_loops)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -11736,15 +11736,15 @@ SEXP R_igraph_similarity_dice_es(SEXP graph, SEXP es, SEXP mode, SEXP loops) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_es_data; - IGRAPH_R_CHECK(Rz_SEXP_to_igraph_es(es, &c_graph, &c_es, &c_es_data)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_igraph_es(es, &c_graph, &c_es, &c_es_data)); c_mode = (igraph_neimode_t) Rf_asInteger(mode); IGRAPH_R_CHECK_BOOL(loops); c_loops = LOGICAL(loops)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_similarity_dice_es(&c_graph, &c_res, c_es, c_mode, c_loops)); + IGRAPH_LOCAL_R_CHECK(igraph_similarity_dice_es(&c_graph, &c_res, c_es, c_mode, c_loops)); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -11774,7 +11774,7 @@ SEXP R_igraph_similarity_dice_pairs(SEXP graph, SEXP pairs, SEXP mode, SEXP loop IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); Rz_SEXP_to_vector_int_copy(pairs, &c_pairs); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_pairs); @@ -11782,7 +11782,7 @@ SEXP R_igraph_similarity_dice_pairs(SEXP graph, SEXP pairs, SEXP mode, SEXP loop IGRAPH_R_CHECK_BOOL(loops); c_loops = LOGICAL(loops)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_similarity_dice_pairs(&c_graph, &c_res, &c_pairs, c_mode, c_loops)); + IGRAPH_LOCAL_R_CHECK(igraph_similarity_dice_pairs(&c_graph, &c_res, &c_pairs, c_mode, c_loops)); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -11811,13 +11811,13 @@ SEXP R_igraph_similarity_inverse_log_weighted(SEXP graph, SEXP vids, SEXP mode) IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_similarity_inverse_log_weighted(&c_graph, &c_res, c_vids, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_similarity_inverse_log_weighted(&c_graph, &c_res, c_vids, c_mode)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -11847,7 +11847,7 @@ SEXP R_igraph_similarity_jaccard(SEXP graph, SEXP vids, SEXP mode, SEXP loops) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); @@ -11855,7 +11855,7 @@ SEXP R_igraph_similarity_jaccard(SEXP graph, SEXP vids, SEXP mode, SEXP loops) { IGRAPH_R_CHECK_BOOL(loops); c_loops = LOGICAL(loops)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_similarity_jaccard(&c_graph, &c_res, c_vids, c_mode, c_loops)); + IGRAPH_LOCAL_R_CHECK(igraph_similarity_jaccard(&c_graph, &c_res, c_vids, c_mode, c_loops)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -11885,15 +11885,15 @@ SEXP R_igraph_similarity_jaccard_es(SEXP graph, SEXP es, SEXP mode, SEXP loops) IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_es_data; - IGRAPH_R_CHECK(Rz_SEXP_to_igraph_es(es, &c_graph, &c_es, &c_es_data)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_igraph_es(es, &c_graph, &c_es, &c_es_data)); c_mode = (igraph_neimode_t) Rf_asInteger(mode); IGRAPH_R_CHECK_BOOL(loops); c_loops = LOGICAL(loops)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_similarity_jaccard_es(&c_graph, &c_res, c_es, c_mode, c_loops)); + IGRAPH_LOCAL_R_CHECK(igraph_similarity_jaccard_es(&c_graph, &c_res, c_es, c_mode, c_loops)); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -11923,7 +11923,7 @@ SEXP R_igraph_similarity_jaccard_pairs(SEXP graph, SEXP pairs, SEXP mode, SEXP l IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); Rz_SEXP_to_vector_int_copy(pairs, &c_pairs); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_pairs); @@ -11931,7 +11931,7 @@ SEXP R_igraph_similarity_jaccard_pairs(SEXP graph, SEXP pairs, SEXP mode, SEXP l IGRAPH_R_CHECK_BOOL(loops); c_loops = LOGICAL(loops)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_similarity_jaccard_pairs(&c_graph, &c_res, &c_pairs, c_mode, c_loops)); + IGRAPH_LOCAL_R_CHECK(igraph_similarity_jaccard_pairs(&c_graph, &c_res, &c_pairs, c_mode, c_loops)); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -11959,13 +11959,13 @@ SEXP R_igraph_compare_communities(SEXP comm1, SEXP comm2, SEXP method) { SEXP r_result; IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(comm1, &c_comm1)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(comm1, &c_comm1)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_comm1); - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(comm2, &c_comm2)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(comm2, &c_comm2)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_comm2); c_method = (igraph_community_comparison_t) Rf_asInteger(method); /* Call igraph */ - IGRAPH_R_CHECK(igraph_compare_communities(&c_comm1, &c_comm2, &c_res, c_method)); + IGRAPH_LOCAL_R_CHECK(igraph_compare_communities(&c_comm1, &c_comm2, &c_res, c_method)); /* Convert output */ igraph_vector_int_destroy(&c_comm1); @@ -12012,9 +12012,9 @@ SEXP R_igraph_community_spinglass(SEXP graph, SEXP weights, SEXP spins, SEXP par if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } - IGRAPH_R_CHECK(igraph_vector_int_init(&c_membership, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_membership, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_csize, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_csize, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_csize); IGRAPH_R_CHECK_INT(spins); c_spins = (igraph_integer_t) REAL(spins)[0]; @@ -12033,7 +12033,7 @@ SEXP R_igraph_community_spinglass(SEXP graph, SEXP weights, SEXP spins, SEXP par IGRAPH_R_CHECK_REAL(lambda); c_lambda = REAL(lambda)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_community_spinglass(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_modularity, &c_temperature, &c_membership, &c_csize, c_spins, c_parupdate, c_starttemp, c_stoptemp, c_coolfact, c_update_rule, c_gamma, c_implementation, c_lambda)); + IGRAPH_LOCAL_R_CHECK(igraph_community_spinglass(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_modularity, &c_temperature, &c_membership, &c_csize, c_spins, c_parupdate, c_starttemp, c_stoptemp, c_coolfact, c_update_rule, c_gamma, c_implementation, c_lambda)); /* Convert output */ PROTECT(r_result=NEW_LIST(4)); @@ -12094,7 +12094,7 @@ SEXP R_igraph_community_spinglass_single(SEXP graph, SEXP weights, SEXP vertex, } IGRAPH_R_CHECK_INT(vertex); c_vertex = (igraph_integer_t) REAL(vertex)[0]; - IGRAPH_R_CHECK(igraph_vector_int_init(&c_community, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_community, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_community); c_inner_links=0; c_outer_links=0; @@ -12104,7 +12104,7 @@ SEXP R_igraph_community_spinglass_single(SEXP graph, SEXP weights, SEXP vertex, IGRAPH_R_CHECK_REAL(gamma); c_gamma = REAL(gamma)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_community_spinglass_single(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), c_vertex, &c_community, &c_cohesion, &c_adhesion, &c_inner_links, &c_outer_links, c_spins, c_update_rule, c_gamma)); + IGRAPH_LOCAL_R_CHECK(igraph_community_spinglass_single(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), c_vertex, &c_community, &c_cohesion, &c_adhesion, &c_inner_links, &c_outer_links, c_spins, c_update_rule, c_gamma)); /* Convert output */ PROTECT(r_result=NEW_LIST(5)); @@ -12161,14 +12161,14 @@ SEXP R_igraph_community_walktrap(SEXP graph, SEXP weights, SEXP steps) { } IGRAPH_R_CHECK_INT(steps); c_steps = (igraph_integer_t) REAL(steps)[0]; - IGRAPH_R_CHECK(igraph_matrix_int_init(&c_merges, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_int_init(&c_merges, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_int_destroy, &c_merges); - IGRAPH_R_CHECK(igraph_vector_init(&c_modularity, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_modularity, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_modularity); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_membership, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_membership, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); /* Call igraph */ - IGRAPH_R_CHECK(igraph_community_walktrap(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), c_steps, &c_merges, &c_modularity, &c_membership)); + IGRAPH_LOCAL_R_CHECK(igraph_community_walktrap(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), c_steps, &c_merges, &c_modularity, &c_membership)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -12220,17 +12220,17 @@ SEXP R_igraph_community_edge_betweenness(SEXP graph, SEXP directed, SEXP weights IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_removed_edges, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_removed_edges, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_removed_edges); - IGRAPH_R_CHECK(igraph_vector_init(&c_edge_betweenness, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_edge_betweenness, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_edge_betweenness); - IGRAPH_R_CHECK(igraph_matrix_int_init(&c_merges, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_int_init(&c_merges, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_int_destroy, &c_merges); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_bridges, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_bridges, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_bridges); - IGRAPH_R_CHECK(igraph_vector_init(&c_modularity, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_modularity, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_modularity); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_membership, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_membership, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; @@ -12238,7 +12238,7 @@ SEXP R_igraph_community_edge_betweenness(SEXP graph, SEXP directed, SEXP weights Rz_SEXP_to_vector(weights, &c_weights); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_community_edge_betweenness(&c_graph, &c_removed_edges, &c_edge_betweenness, &c_merges, &c_bridges, &c_modularity, &c_membership, c_directed, (Rf_isNull(weights) ? 0 : &c_weights))); + IGRAPH_LOCAL_R_CHECK(igraph_community_edge_betweenness(&c_graph, &c_removed_edges, &c_edge_betweenness, &c_merges, &c_bridges, &c_modularity, &c_membership, c_directed, (Rf_isNull(weights) ? 0 : &c_weights))); /* Convert output */ PROTECT(r_result=NEW_LIST(6)); @@ -12309,16 +12309,16 @@ SEXP R_igraph_community_eb_get_merges(SEXP graph, SEXP directed, SEXP edges, SEX if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } - IGRAPH_R_CHECK(igraph_matrix_int_init(&c_merges, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_int_init(&c_merges, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_int_destroy, &c_merges); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_bridges, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_bridges, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_bridges); - IGRAPH_R_CHECK(igraph_vector_init(&c_modularity, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_modularity, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_modularity); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_membership, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_membership, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); /* Call igraph */ - IGRAPH_R_CHECK(igraph_community_eb_get_merges(&c_graph, c_directed, &c_edges, (Rf_isNull(weights) ? 0 : &c_weights), &c_merges, &c_bridges, &c_modularity, &c_membership)); + IGRAPH_LOCAL_R_CHECK(igraph_community_eb_get_merges(&c_graph, c_directed, &c_edges, (Rf_isNull(weights) ? 0 : &c_weights), &c_merges, &c_bridges, &c_modularity, &c_membership)); /* Convert output */ PROTECT(r_result=NEW_LIST(4)); @@ -12373,14 +12373,14 @@ SEXP R_igraph_community_fastgreedy(SEXP graph, SEXP weights) { if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } - IGRAPH_R_CHECK(igraph_matrix_int_init(&c_merges, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_int_init(&c_merges, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_int_destroy, &c_merges); - IGRAPH_R_CHECK(igraph_vector_init(&c_modularity, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_modularity, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_modularity); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_membership, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_membership, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); /* Call igraph */ - IGRAPH_R_CHECK(igraph_community_fastgreedy(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_merges, &c_modularity, &c_membership)); + IGRAPH_LOCAL_R_CHECK(igraph_community_fastgreedy(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_merges, &c_modularity, &c_membership)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -12429,12 +12429,12 @@ SEXP R_igraph_community_to_membership(SEXP merges, SEXP nodes, SEXP steps) { c_nodes = (igraph_integer_t) REAL(nodes)[0]; IGRAPH_R_CHECK_INT(steps); c_steps = (igraph_integer_t) REAL(steps)[0]; - IGRAPH_R_CHECK(igraph_vector_int_init(&c_membership, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_membership, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_csize, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_csize, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_csize); /* Call igraph */ - IGRAPH_R_CHECK(igraph_community_to_membership(&c_merges, c_nodes, c_steps, &c_membership, &c_csize)); + IGRAPH_LOCAL_R_CHECK(igraph_community_to_membership(&c_merges, c_nodes, c_steps, &c_membership, &c_csize)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -12476,12 +12476,12 @@ SEXP R_igraph_le_community_to_membership(SEXP merges, SEXP steps, SEXP membershi IGRAPH_LOCAL_FINALLY(igraph_matrix_int_destroy, &c_merges); IGRAPH_R_CHECK_INT(steps); c_steps = (igraph_integer_t) REAL(steps)[0]; - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(membership, &c_membership)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(membership, &c_membership)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_csize, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_csize, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_csize); /* Call igraph */ - IGRAPH_R_CHECK(igraph_le_community_to_membership(&c_merges, c_steps, &c_membership, &c_csize)); + IGRAPH_LOCAL_R_CHECK(igraph_le_community_to_membership(&c_merges, c_steps, &c_membership, &c_csize)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -12522,7 +12522,7 @@ SEXP R_igraph_modularity(SEXP graph, SEXP membership, SEXP weights, SEXP resolut IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(membership, &c_membership)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(membership, &c_membership)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); @@ -12532,7 +12532,7 @@ SEXP R_igraph_modularity(SEXP graph, SEXP membership, SEXP weights, SEXP resolut IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_modularity(&c_graph, &c_membership, (Rf_isNull(weights) ? 0 : &c_weights), c_resolution, c_directed, &c_modularity)); + IGRAPH_LOCAL_R_CHECK(igraph_modularity(&c_graph, &c_membership, (Rf_isNull(weights) ? 0 : &c_weights), c_resolution, c_directed, &c_modularity)); /* Convert output */ igraph_vector_int_destroy(&c_membership); @@ -12566,12 +12566,12 @@ SEXP R_igraph_modularity_matrix(SEXP graph, SEXP weights, SEXP resolution, SEXP } IGRAPH_R_CHECK_REAL(resolution); c_resolution = REAL(resolution)[0]; - IGRAPH_R_CHECK(igraph_matrix_init(&c_modmat, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_modmat, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_modmat); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_modularity_matrix(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), c_resolution, &c_modmat, c_directed)); + IGRAPH_LOCAL_R_CHECK(igraph_modularity_matrix(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), c_resolution, &c_modmat, c_directed)); /* Convert output */ PROTECT(modmat=Ry_igraph_matrix_to_SEXP(&c_modmat)); @@ -12597,13 +12597,13 @@ SEXP R_igraph_reindex_membership(SEXP membership) { SEXP r_result, r_names; IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(membership, &c_membership)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(membership, &c_membership)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_new_to_old, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_new_to_old, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_new_to_old); c_nb_clusters=0; /* Call igraph */ - IGRAPH_R_CHECK(igraph_reindex_membership(&c_membership, &c_new_to_old, &c_nb_clusters)); + IGRAPH_LOCAL_R_CHECK(igraph_reindex_membership(&c_membership, &c_new_to_old, &c_nb_clusters)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -12645,10 +12645,10 @@ SEXP R_igraph_community_fluid_communities(SEXP graph, SEXP no_of_communities) { Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK_INT(no_of_communities); c_no_of_communities = (igraph_integer_t) REAL(no_of_communities)[0]; - IGRAPH_R_CHECK(igraph_vector_int_init(&c_membership, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_membership, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); /* Call igraph */ - IGRAPH_R_CHECK(igraph_community_fluid_communities(&c_graph, c_no_of_communities, &c_membership)); + IGRAPH_LOCAL_R_CHECK(igraph_community_fluid_communities(&c_graph, c_no_of_communities, &c_membership)); /* Convert output */ PROTECT(membership=Ry_igraph_vector_int_to_SEXP(&c_membership)); @@ -12677,7 +12677,7 @@ SEXP R_igraph_community_label_propagation(SEXP graph, SEXP mode, SEXP weights, S IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_membership, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_membership, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); c_mode = (igraph_neimode_t) Rf_asInteger(mode); if (!Rf_isNull(weights)) { @@ -12687,14 +12687,14 @@ SEXP R_igraph_community_label_propagation(SEXP graph, SEXP mode, SEXP weights, S Rz_SEXP_to_vector_int_copy(initial, &c_initial); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_initial); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_initial, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_initial, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_initial); } if (!Rf_isNull(fixed)) { Rz_SEXP_to_vector_bool(fixed, &c_fixed); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_community_label_propagation(&c_graph, &c_membership, c_mode, (Rf_isNull(weights) ? 0 : &c_weights), (Rf_isNull(initial) ? 0 : &c_initial), (Rf_isNull(fixed) ? 0 : &c_fixed))); + IGRAPH_LOCAL_R_CHECK(igraph_community_label_propagation(&c_graph, &c_membership, c_mode, (Rf_isNull(weights) ? 0 : &c_weights), (Rf_isNull(initial) ? 0 : &c_initial), (Rf_isNull(fixed) ? 0 : &c_fixed))); /* Convert output */ PROTECT(membership=Ry_igraph_vector_int_to_SEXP(&c_membership)); @@ -12732,14 +12732,14 @@ SEXP R_igraph_community_multilevel(SEXP graph, SEXP weights, SEXP resolution) { } IGRAPH_R_CHECK_REAL(resolution); c_resolution = REAL(resolution)[0]; - IGRAPH_R_CHECK(igraph_vector_int_init(&c_membership, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_membership, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); - IGRAPH_R_CHECK(igraph_matrix_int_init(&c_memberships, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_int_init(&c_memberships, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_int_destroy, &c_memberships); - IGRAPH_R_CHECK(igraph_vector_init(&c_modularity, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_modularity, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_modularity); /* Call igraph */ - IGRAPH_R_CHECK(igraph_community_multilevel(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), c_resolution, &c_membership, &c_memberships, &c_modularity)); + IGRAPH_LOCAL_R_CHECK(igraph_community_multilevel(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), c_resolution, &c_membership, &c_memberships, &c_modularity)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -12782,13 +12782,13 @@ SEXP R_igraph_community_optimal_modularity(SEXP graph, SEXP weights) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_membership, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_membership, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_community_optimal_modularity(&c_graph, &c_modularity, &c_membership, (Rf_isNull(weights) ? 0 : &c_weights))); + IGRAPH_LOCAL_R_CHECK(igraph_community_optimal_modularity(&c_graph, &c_modularity, &c_membership, (Rf_isNull(weights) ? 0 : &c_weights))); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -12846,15 +12846,15 @@ SEXP R_igraph_community_leiden(SEXP graph, SEXP weights, SEXP vertex_weights, SE IGRAPH_R_CHECK_INT(n_iterations); c_n_iterations = (igraph_integer_t) REAL(n_iterations)[0]; if (!Rf_isNull(membership)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(membership, &c_membership)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(membership, &c_membership)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_membership, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_membership, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); } c_nb_clusters=0; /* Call igraph */ - IGRAPH_R_CHECK(igraph_community_leiden(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), (Rf_isNull(vertex_weights) ? 0 : &c_vertex_weights), c_resolution, c_beta, c_start, c_n_iterations, &c_membership, &c_nb_clusters, &c_quality)); + IGRAPH_LOCAL_R_CHECK(igraph_community_leiden(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), (Rf_isNull(vertex_weights) ? 0 : &c_vertex_weights), c_resolution, c_beta, c_start, c_n_iterations, &c_membership, &c_nb_clusters, &c_quality)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -12894,14 +12894,14 @@ SEXP R_igraph_split_join_distance(SEXP comm1, SEXP comm2) { SEXP r_result, r_names; IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(comm1, &c_comm1)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(comm1, &c_comm1)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_comm1); - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(comm2, &c_comm2)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(comm2, &c_comm2)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_comm2); c_distance12=0; c_distance21=0; /* Call igraph */ - IGRAPH_R_CHECK(igraph_split_join_distance(&c_comm1, &c_comm2, &c_distance12, &c_distance21)); + IGRAPH_LOCAL_R_CHECK(igraph_split_join_distance(&c_comm1, &c_comm2, &c_distance12, &c_distance21)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -12951,10 +12951,10 @@ SEXP R_igraph_community_infomap(SEXP graph, SEXP e_weights, SEXP v_weights, SEXP } IGRAPH_R_CHECK_INT(nb_trials); c_nb_trials = (igraph_integer_t) REAL(nb_trials)[0]; - IGRAPH_R_CHECK(igraph_vector_int_init(&c_membership, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_membership, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_membership); /* Call igraph */ - IGRAPH_R_CHECK(igraph_community_infomap(&c_graph, (Rf_isNull(e_weights) ? 0 : &c_e_weights), (Rf_isNull(v_weights) ? 0 : &c_v_weights), c_nb_trials, &c_membership, &c_codelength)); + IGRAPH_LOCAL_R_CHECK(igraph_community_infomap(&c_graph, (Rf_isNull(e_weights) ? 0 : &c_e_weights), (Rf_isNull(v_weights) ? 0 : &c_v_weights), c_nb_trials, &c_membership, &c_codelength)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -12995,14 +12995,14 @@ SEXP R_igraph_graphlets(SEXP graph, SEXP weights, SEXP niter) { if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_cliques, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_cliques, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_cliques); - IGRAPH_R_CHECK(igraph_vector_init(&c_Mu, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_Mu, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_Mu); IGRAPH_R_CHECK_INT(niter); c_niter = (igraph_integer_t) REAL(niter)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_graphlets(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_cliques, &c_Mu, c_niter)); + IGRAPH_LOCAL_R_CHECK(igraph_graphlets(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_cliques, &c_Mu, c_niter)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -13043,12 +13043,12 @@ SEXP R_igraph_graphlets_candidate_basis(SEXP graph, SEXP weights) { if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_cliques, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_cliques, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_cliques); - IGRAPH_R_CHECK(igraph_vector_init(&c_thresholds, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_thresholds, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_thresholds); /* Call igraph */ - IGRAPH_R_CHECK(igraph_graphlets_candidate_basis(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_cliques, &c_thresholds)); + IGRAPH_LOCAL_R_CHECK(igraph_graphlets_candidate_basis(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_cliques, &c_thresholds)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -13089,16 +13089,16 @@ SEXP R_igraph_graphlets_project(SEXP graph, SEXP weights, SEXP cliques, SEXP Muc if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } - IGRAPH_R_CHECK(Ry_igraph_SEXP_to_vector_int_list(cliques, &c_cliques)); + IGRAPH_LOCAL_R_CHECK(Ry_igraph_SEXP_to_vector_int_list(cliques, &c_cliques)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_cliques); - IGRAPH_R_CHECK(Rz_SEXP_to_vector_copy(Muc, &c_Muc)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_copy(Muc, &c_Muc)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_Muc); IGRAPH_R_CHECK_BOOL(startMu); c_startMu = LOGICAL(startMu)[0]; IGRAPH_R_CHECK_INT(niter); c_niter = (igraph_integer_t) REAL(niter)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_graphlets_project(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_cliques, &c_Muc, c_startMu, c_niter)); + IGRAPH_LOCAL_R_CHECK(igraph_graphlets_project(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_cliques, &c_Muc, c_startMu, c_niter)); /* Convert output */ igraph_vector_int_list_destroy(&c_cliques); @@ -13126,14 +13126,14 @@ SEXP R_igraph_hrg_fit(SEXP graph, SEXP hrg, SEXP start, SEXP steps) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(Rz_SEXP_to_hrg_copy(hrg, &c_hrg)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_hrg_copy(hrg, &c_hrg)); IGRAPH_LOCAL_FINALLY(igraph_hrg_destroy, &c_hrg); IGRAPH_R_CHECK_BOOL(start); c_start = LOGICAL(start)[0]; IGRAPH_R_CHECK_INT(steps); c_steps = (igraph_integer_t) REAL(steps)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_hrg_fit(&c_graph, &c_hrg, c_start, c_steps)); + IGRAPH_LOCAL_R_CHECK(igraph_hrg_fit(&c_graph, &c_hrg, c_start, c_steps)); /* Convert output */ PROTECT(hrg=Ry_igraph_hrg_to_SEXP(&c_hrg)); @@ -13157,10 +13157,10 @@ SEXP R_igraph_hrg_sample(SEXP hrg) { SEXP r_result; IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ - IGRAPH_R_CHECK(Rz_SEXP_to_hrg_copy(hrg, &c_hrg)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_hrg_copy(hrg, &c_hrg)); IGRAPH_LOCAL_FINALLY(igraph_hrg_destroy, &c_hrg); /* Call igraph */ - IGRAPH_R_CHECK(igraph_hrg_sample(&c_hrg, &c_sample)); + IGRAPH_LOCAL_R_CHECK(igraph_hrg_sample(&c_hrg, &c_sample)); /* Convert output */ igraph_hrg_destroy(&c_hrg); @@ -13188,14 +13188,14 @@ SEXP R_igraph_hrg_sample_many(SEXP hrg, SEXP num_samples) { SEXP r_result; IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ - IGRAPH_R_CHECK(Rz_SEXP_to_hrg_copy(hrg, &c_hrg)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_hrg_copy(hrg, &c_hrg)); IGRAPH_LOCAL_FINALLY(igraph_hrg_destroy, &c_hrg); - IGRAPH_R_CHECK(igraph_graph_list_init(&c_samples, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_graph_list_init(&c_samples, 0)); IGRAPH_LOCAL_FINALLY(igraph_graph_list_destroy, &c_samples); IGRAPH_R_CHECK_INT(num_samples); c_num_samples = (igraph_integer_t) REAL(num_samples)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_hrg_sample_many(&c_hrg, &c_samples, c_num_samples)); + IGRAPH_LOCAL_R_CHECK(igraph_hrg_sample_many(&c_hrg, &c_samples, c_num_samples)); /* Convert output */ igraph_hrg_destroy(&c_hrg); @@ -13221,10 +13221,10 @@ SEXP R_igraph_hrg_game(SEXP hrg) { SEXP r_result; IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ - IGRAPH_R_CHECK(Rz_SEXP_to_hrg_copy(hrg, &c_hrg)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_hrg_copy(hrg, &c_hrg)); IGRAPH_LOCAL_FINALLY(igraph_hrg_destroy, &c_hrg); /* Call igraph */ - IGRAPH_R_CHECK(igraph_hrg_game(&c_graph, &c_hrg)); + IGRAPH_LOCAL_R_CHECK(igraph_hrg_game(&c_graph, &c_hrg)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -13257,18 +13257,18 @@ SEXP R_igraph_hrg_consensus(SEXP graph, SEXP hrg, SEXP start, SEXP num_samples) IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_parents, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_parents, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_parents); - IGRAPH_R_CHECK(igraph_vector_init(&c_weights, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_weights, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_weights); - IGRAPH_R_CHECK(Rz_SEXP_to_hrg_copy(hrg, &c_hrg)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_hrg_copy(hrg, &c_hrg)); IGRAPH_LOCAL_FINALLY(igraph_hrg_destroy, &c_hrg); IGRAPH_R_CHECK_BOOL(start); c_start = LOGICAL(start)[0]; IGRAPH_R_CHECK_INT(num_samples); c_num_samples = (igraph_integer_t) REAL(num_samples)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_hrg_consensus(&c_graph, &c_parents, &c_weights, &c_hrg, c_start, c_num_samples)); + IGRAPH_LOCAL_R_CHECK(igraph_hrg_consensus(&c_graph, &c_parents, &c_weights, &c_hrg, c_start, c_num_samples)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -13314,11 +13314,11 @@ SEXP R_igraph_hrg_predict(SEXP graph, SEXP hrg, SEXP start, SEXP num_samples, SE IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edges, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edges, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edges); - IGRAPH_R_CHECK(igraph_vector_init(&c_prob, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_prob, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_prob); - IGRAPH_R_CHECK(Rz_SEXP_to_hrg_copy(hrg, &c_hrg)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_hrg_copy(hrg, &c_hrg)); IGRAPH_LOCAL_FINALLY(igraph_hrg_destroy, &c_hrg); IGRAPH_R_CHECK_BOOL(start); c_start = LOGICAL(start)[0]; @@ -13327,7 +13327,7 @@ SEXP R_igraph_hrg_predict(SEXP graph, SEXP hrg, SEXP start, SEXP num_samples, SE IGRAPH_R_CHECK_INT(num_bins); c_num_bins = (igraph_integer_t) REAL(num_bins)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_hrg_predict(&c_graph, &c_edges, &c_prob, &c_hrg, c_start, c_num_samples, c_num_bins)); + IGRAPH_LOCAL_R_CHECK(igraph_hrg_predict(&c_graph, &c_edges, &c_prob, &c_hrg, c_start, c_num_samples, c_num_bins)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -13367,12 +13367,12 @@ SEXP R_igraph_hrg_create(SEXP graph, SEXP prob) { SEXP r_result; IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ - IGRAPH_R_CHECK(igraph_hrg_init(&c_hrg, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_hrg_init(&c_hrg, 0)); IGRAPH_LOCAL_FINALLY(igraph_hrg_destroy, &c_hrg); Rz_SEXP_to_igraph(graph, &c_graph); Rz_SEXP_to_vector(prob, &c_prob); /* Call igraph */ - IGRAPH_R_CHECK(igraph_hrg_create(&c_hrg, &c_graph, &c_prob)); + IGRAPH_LOCAL_R_CHECK(igraph_hrg_create(&c_hrg, &c_graph, &c_prob)); /* Convert output */ PROTECT(hrg=Ry_igraph_hrg_to_SEXP(&c_hrg)); @@ -13395,12 +13395,12 @@ SEXP R_igraph_hrg_resize(SEXP hrg, SEXP newsize) { SEXP r_result; IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ - IGRAPH_R_CHECK(Rz_SEXP_to_hrg_copy(hrg, &c_hrg)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_hrg_copy(hrg, &c_hrg)); IGRAPH_LOCAL_FINALLY(igraph_hrg_destroy, &c_hrg); IGRAPH_R_CHECK_INT(newsize); c_newsize = (igraph_integer_t) REAL(newsize)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_hrg_resize(&c_hrg, c_newsize)); + IGRAPH_LOCAL_R_CHECK(igraph_hrg_resize(&c_hrg, c_newsize)); /* Convert output */ PROTECT(hrg=Ry_igraph_hrg_to_SEXP(&c_hrg)); @@ -13422,7 +13422,7 @@ SEXP R_igraph_hrg_size(SEXP hrg) { SEXP r_result; IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ - IGRAPH_R_CHECK(Rz_SEXP_to_hrg_copy(hrg, &c_hrg)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_hrg_copy(hrg, &c_hrg)); IGRAPH_LOCAL_FINALLY(igraph_hrg_destroy, &c_hrg); /* Call igraph */ c_result=igraph_hrg_size(&c_hrg); @@ -13451,12 +13451,12 @@ SEXP R_igraph_from_hrg_dendrogram(SEXP hrg) { SEXP r_result, r_names; IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ - IGRAPH_R_CHECK(Rz_SEXP_to_hrg_copy(hrg, &c_hrg)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_hrg_copy(hrg, &c_hrg)); IGRAPH_LOCAL_FINALLY(igraph_hrg_destroy, &c_hrg); - IGRAPH_R_CHECK(igraph_vector_init(&c_prob, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_prob, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_prob); /* Call igraph */ - IGRAPH_R_CHECK(igraph_from_hrg_dendrogram(&c_graph, &c_hrg, &c_prob)); + IGRAPH_LOCAL_R_CHECK(igraph_from_hrg_dendrogram(&c_graph, &c_hrg, &c_prob)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -13497,7 +13497,7 @@ SEXP R_igraph_get_adjacency(SEXP graph, SEXP type, SEXP weights, SEXP loops) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); c_type = (igraph_get_adjacency_t) Rf_asInteger(type); if (!Rf_isNull(weights)) { @@ -13505,7 +13505,7 @@ SEXP R_igraph_get_adjacency(SEXP graph, SEXP type, SEXP weights, SEXP loops) { } c_loops = (igraph_loops_t) Rf_asInteger(loops); /* Call igraph */ - IGRAPH_R_CHECK(igraph_get_adjacency(&c_graph, &c_res, c_type, (Rf_isNull(weights) ? 0 : &c_weights), c_loops)); + IGRAPH_LOCAL_R_CHECK(igraph_get_adjacency(&c_graph, &c_res, c_type, (Rf_isNull(weights) ? 0 : &c_weights), c_loops)); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -13533,7 +13533,7 @@ SEXP R_igraph_get_adjacency_sparse(SEXP graph, SEXP type, SEXP weights, SEXP loo IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_sparsemat_init(&c_sparsemat, 0, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_sparsemat_init(&c_sparsemat, 0, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_sparsemat_destroy, &c_sparsemat); c_type = (igraph_get_adjacency_t) Rf_asInteger(type); if (!Rf_isNull(weights)) { @@ -13541,7 +13541,7 @@ SEXP R_igraph_get_adjacency_sparse(SEXP graph, SEXP type, SEXP weights, SEXP loo } c_loops = (igraph_loops_t) Rf_asInteger(loops); /* Call igraph */ - IGRAPH_R_CHECK(igraph_get_adjacency_sparse(&c_graph, &c_sparsemat, c_type, (Rf_isNull(weights) ? 0 : &c_weights), c_loops)); + IGRAPH_LOCAL_R_CHECK(igraph_get_adjacency_sparse(&c_graph, &c_sparsemat, c_type, (Rf_isNull(weights) ? 0 : &c_weights), c_loops)); /* Convert output */ PROTECT(sparsemat=Ry_igraph_sparsemat_to_SEXP(&c_sparsemat)); @@ -13567,12 +13567,12 @@ SEXP R_igraph_get_edgelist(SEXP graph, SEXP bycol) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_res); IGRAPH_R_CHECK_BOOL(bycol); c_bycol = LOGICAL(bycol)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_get_edgelist(&c_graph, &c_res, c_bycol)); + IGRAPH_LOCAL_R_CHECK(igraph_get_edgelist(&c_graph, &c_res, c_bycol)); /* Convert output */ PROTECT(res=Ry_igraph_vector_int_to_SEXP(&c_res)); @@ -13599,7 +13599,7 @@ SEXP R_igraph_get_stochastic(SEXP graph, SEXP column_wise, SEXP weights) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_res, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_res); IGRAPH_R_CHECK_BOOL(column_wise); c_column_wise = LOGICAL(column_wise)[0]; @@ -13607,7 +13607,7 @@ SEXP R_igraph_get_stochastic(SEXP graph, SEXP column_wise, SEXP weights) { Rz_SEXP_to_vector(weights, &c_weights); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_get_stochastic(&c_graph, &c_res, c_column_wise, (Rf_isNull(weights) ? 0 : &c_weights))); + IGRAPH_LOCAL_R_CHECK(igraph_get_stochastic(&c_graph, &c_res, c_column_wise, (Rf_isNull(weights) ? 0 : &c_weights))); /* Convert output */ PROTECT(res=Ry_igraph_matrix_to_SEXP(&c_res)); @@ -13634,7 +13634,7 @@ SEXP R_igraph_get_stochastic_sparse(SEXP graph, SEXP column_wise, SEXP weights) IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_sparsemat_init(&c_sparsemat, 0, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_sparsemat_init(&c_sparsemat, 0, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_sparsemat_destroy, &c_sparsemat); IGRAPH_R_CHECK_BOOL(column_wise); c_column_wise = LOGICAL(column_wise)[0]; @@ -13642,7 +13642,7 @@ SEXP R_igraph_get_stochastic_sparse(SEXP graph, SEXP column_wise, SEXP weights) Rz_SEXP_to_vector(weights, &c_weights); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_get_stochastic_sparse(&c_graph, &c_sparsemat, c_column_wise, (Rf_isNull(weights) ? 0 : &c_weights))); + IGRAPH_LOCAL_R_CHECK(igraph_get_stochastic_sparse(&c_graph, &c_sparsemat, c_column_wise, (Rf_isNull(weights) ? 0 : &c_weights))); /* Convert output */ PROTECT(sparsemat=Ry_igraph_sparsemat_to_SEXP(&c_sparsemat)); @@ -13669,7 +13669,7 @@ SEXP R_igraph_to_directed(SEXP graph, SEXP mode) { IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); c_mode = (igraph_to_directed_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_to_directed(&c_graph, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_to_directed(&c_graph, c_mode)); /* Convert output */ PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); @@ -13699,7 +13699,7 @@ SEXP R_igraph_to_undirected(SEXP graph, SEXP mode, SEXP edge_attr_comb) { Rz_SEXP_to_attr_comb(edge_attr_comb, &c_edge_attr_comb); IGRAPH_LOCAL_FINALLY(igraph_attribute_combination_destroy, &c_edge_attr_comb); /* Call igraph */ - IGRAPH_R_CHECK(igraph_to_undirected(&c_graph, c_mode, &c_edge_attr_comb)); + IGRAPH_LOCAL_R_CHECK(igraph_to_undirected(&c_graph, c_mode, &c_edge_attr_comb)); /* Convert output */ PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); @@ -13734,7 +13734,7 @@ SEXP R_igraph_read_graph_edgelist(SEXP instream, SEXP n, SEXP directed) { IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_read_graph_edgelist(&c_graph, c_instream, c_n, c_directed)); + IGRAPH_LOCAL_R_CHECK(igraph_read_graph_edgelist(&c_graph, c_instream, c_n, c_directed)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -13774,7 +13774,7 @@ SEXP R_igraph_read_graph_ncol(SEXP instream, SEXP predefnames, SEXP names, SEXP IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_read_graph_ncol(&c_graph, c_instream, (Rf_isNull(predefnames) ? 0 : &c_predefnames), c_names, c_weights, c_directed)); + IGRAPH_LOCAL_R_CHECK(igraph_read_graph_ncol(&c_graph, c_instream, (Rf_isNull(predefnames) ? 0 : &c_predefnames), c_names, c_weights, c_directed)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -13810,7 +13810,7 @@ SEXP R_igraph_read_graph_lgl(SEXP instream, SEXP names, SEXP weights, SEXP direc IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_read_graph_lgl(&c_graph, c_instream, c_names, c_weights, c_directed)); + IGRAPH_LOCAL_R_CHECK(igraph_read_graph_lgl(&c_graph, c_instream, c_names, c_weights, c_directed)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -13838,7 +13838,7 @@ SEXP R_igraph_read_graph_pajek(SEXP instream) { c_instream = Ry_igraph_fopen_read(instream); IGRAPH_LOCAL_FINALLY(fclose, c_instream); /* Call igraph */ - IGRAPH_R_CHECK(igraph_read_graph_pajek(&c_graph, c_instream)); + IGRAPH_LOCAL_R_CHECK(igraph_read_graph_pajek(&c_graph, c_instream)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -13869,7 +13869,7 @@ SEXP R_igraph_read_graph_graphml(SEXP instream, SEXP index) { IGRAPH_R_CHECK_INT(index); c_index = (igraph_integer_t) REAL(index)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_read_graph_graphml(&c_graph, c_instream, c_index)); + IGRAPH_LOCAL_R_CHECK(igraph_read_graph_graphml(&c_graph, c_instream, c_index)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -13907,18 +13907,18 @@ SEXP R_igraph_read_graph_dimacs_flow(SEXP instream, SEXP directed) { /* Convert input */ c_instream = Ry_igraph_fopen_read(instream); IGRAPH_LOCAL_FINALLY(fclose, c_instream); - IGRAPH_R_CHECK(igraph_strvector_init(&c_problem, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_strvector_init(&c_problem, 0)); IGRAPH_LOCAL_FINALLY(igraph_strvector_destroy, &c_problem); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_label, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_label, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_label); c_source=0; c_target=0; - IGRAPH_R_CHECK(igraph_vector_init(&c_capacity, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_capacity, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_capacity); IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_read_graph_dimacs_flow(&c_graph, c_instream, &c_problem, &c_label, &c_source, &c_target, &c_capacity, c_directed)); + IGRAPH_LOCAL_R_CHECK(igraph_read_graph_dimacs_flow(&c_graph, c_instream, &c_problem, &c_label, &c_source, &c_target, &c_capacity, c_directed)); /* Convert output */ PROTECT(r_result=NEW_LIST(6)); @@ -13977,7 +13977,7 @@ SEXP R_igraph_read_graph_graphdb(SEXP instream, SEXP directed) { IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_read_graph_graphdb(&c_graph, c_instream, c_directed)); + IGRAPH_LOCAL_R_CHECK(igraph_read_graph_graphdb(&c_graph, c_instream, c_directed)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -14005,7 +14005,7 @@ SEXP R_igraph_read_graph_gml(SEXP instream) { c_instream = Ry_igraph_fopen_read(instream); IGRAPH_LOCAL_FINALLY(fclose, c_instream); /* Call igraph */ - IGRAPH_R_CHECK(igraph_read_graph_gml(&c_graph, c_instream)); + IGRAPH_LOCAL_R_CHECK(igraph_read_graph_gml(&c_graph, c_instream)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -14036,7 +14036,7 @@ SEXP R_igraph_read_graph_dl(SEXP instream, SEXP directed) { IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_read_graph_dl(&c_graph, c_instream, c_directed)); + IGRAPH_LOCAL_R_CHECK(igraph_read_graph_dl(&c_graph, c_instream, c_directed)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -14063,7 +14063,7 @@ SEXP R_igraph_write_graph_edgelist(SEXP graph, SEXP outstream) { c_outstream = Ry_igraph_fopen_write(outstream); IGRAPH_LOCAL_FINALLY(fclose, c_outstream); /* Call igraph */ - IGRAPH_R_CHECK(igraph_write_graph_edgelist(&c_graph, c_outstream)); + IGRAPH_LOCAL_R_CHECK(igraph_write_graph_edgelist(&c_graph, c_outstream)); /* Convert output */ @@ -14090,7 +14090,7 @@ SEXP R_igraph_write_graph_ncol(SEXP graph, SEXP outstream, SEXP names, SEXP weig c_names = Rf_translateCharUTF8(STRING_ELT(names, 0)); c_weights = Rf_translateCharUTF8(STRING_ELT(weights, 0)); /* Call igraph */ - IGRAPH_R_CHECK(igraph_write_graph_ncol(&c_graph, c_outstream, c_names, c_weights)); + IGRAPH_LOCAL_R_CHECK(igraph_write_graph_ncol(&c_graph, c_outstream, c_names, c_weights)); /* Convert output */ @@ -14120,7 +14120,7 @@ SEXP R_igraph_write_graph_lgl(SEXP graph, SEXP outstream, SEXP names, SEXP weigh IGRAPH_R_CHECK_BOOL(isolates); c_isolates = LOGICAL(isolates)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_write_graph_lgl(&c_graph, c_outstream, c_names, c_weights, c_isolates)); + IGRAPH_LOCAL_R_CHECK(igraph_write_graph_lgl(&c_graph, c_outstream, c_names, c_weights, c_isolates)); /* Convert output */ @@ -14147,7 +14147,7 @@ SEXP R_igraph_write_graph_leda(SEXP graph, SEXP outstream, SEXP names, SEXP weig c_names = Rf_translateCharUTF8(STRING_ELT(names, 0)); c_weights = Rf_translateCharUTF8(STRING_ELT(weights, 0)); /* Call igraph */ - IGRAPH_R_CHECK(igraph_write_graph_leda(&c_graph, c_outstream, c_names, c_weights)); + IGRAPH_LOCAL_R_CHECK(igraph_write_graph_leda(&c_graph, c_outstream, c_names, c_weights)); /* Convert output */ @@ -14173,7 +14173,7 @@ SEXP R_igraph_write_graph_graphml(SEXP graph, SEXP outstream, SEXP prefixattr) { IGRAPH_R_CHECK_BOOL(prefixattr); c_prefixattr = LOGICAL(prefixattr)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_write_graph_graphml(&c_graph, c_outstream, c_prefixattr)); + IGRAPH_LOCAL_R_CHECK(igraph_write_graph_graphml(&c_graph, c_outstream, c_prefixattr)); /* Convert output */ @@ -14196,7 +14196,7 @@ SEXP R_igraph_write_graph_pajek(SEXP graph, SEXP outstream) { c_outstream = Ry_igraph_fopen_write(outstream); IGRAPH_LOCAL_FINALLY(fclose, c_outstream); /* Call igraph */ - IGRAPH_R_CHECK(igraph_write_graph_pajek(&c_graph, c_outstream)); + IGRAPH_LOCAL_R_CHECK(igraph_write_graph_pajek(&c_graph, c_outstream)); /* Convert output */ @@ -14227,7 +14227,7 @@ SEXP R_igraph_write_graph_dimacs_flow(SEXP graph, SEXP outstream, SEXP source, S c_target = (igraph_integer_t) REAL(target)[0]; Rz_SEXP_to_vector(capacity, &c_capacity); /* Call igraph */ - IGRAPH_R_CHECK(igraph_write_graph_dimacs_flow(&c_graph, c_outstream, c_source, c_target, &c_capacity)); + IGRAPH_LOCAL_R_CHECK(igraph_write_graph_dimacs_flow(&c_graph, c_outstream, c_source, c_target, &c_capacity)); /* Convert output */ PROTECT(graph=Ry_igraph_to_SEXP(&c_graph)); @@ -14261,7 +14261,7 @@ SEXP R_igraph_write_graph_gml(SEXP graph, SEXP outstream, SEXP options, SEXP id, c_creator = Rf_translateCharUTF8(STRING_ELT(creator, 0)); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_write_graph_gml(&c_graph, c_outstream, c_options, &c_id, (Rf_isNull(creator) ? 0 : c_creator))); + IGRAPH_LOCAL_R_CHECK(igraph_write_graph_gml(&c_graph, c_outstream, c_options, &c_id, (Rf_isNull(creator) ? 0 : c_creator))); /* Convert output */ @@ -14284,7 +14284,7 @@ SEXP R_igraph_write_graph_dot(SEXP graph, SEXP outstream) { c_outstream = Ry_igraph_fopen_write(outstream); IGRAPH_LOCAL_FINALLY(fclose, c_outstream); /* Call igraph */ - IGRAPH_R_CHECK(igraph_write_graph_dot(&c_graph, c_outstream)); + IGRAPH_LOCAL_R_CHECK(igraph_write_graph_dot(&c_graph, c_outstream)); /* Convert output */ @@ -14308,7 +14308,7 @@ SEXP R_igraph_motifs_randesu(SEXP graph, SEXP size, SEXP cut_prob) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_hist, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_hist, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_hist); IGRAPH_R_CHECK_INT(size); c_size = (igraph_integer_t) REAL(size)[0]; @@ -14316,7 +14316,7 @@ SEXP R_igraph_motifs_randesu(SEXP graph, SEXP size, SEXP cut_prob) { Rz_SEXP_to_vector(cut_prob, &c_cut_prob); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_motifs_randesu(&c_graph, &c_hist, c_size, (Rf_isNull(cut_prob) ? 0 : &c_cut_prob))); + IGRAPH_LOCAL_R_CHECK(igraph_motifs_randesu(&c_graph, &c_hist, c_size, (Rf_isNull(cut_prob) ? 0 : &c_cut_prob))); /* Convert output */ PROTECT(hist=Ry_igraph_vector_to_SEXP(&c_hist)); @@ -14354,14 +14354,14 @@ SEXP R_igraph_motifs_randesu_estimate(SEXP graph, SEXP size, SEXP cut_prob, SEXP IGRAPH_R_CHECK_INT(sample_size); c_sample_size = (igraph_integer_t) REAL(sample_size)[0]; if (!Rf_isNull(sample)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(sample, &c_sample)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(sample, &c_sample)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_sample); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_sample, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_sample, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_sample); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_motifs_randesu_estimate(&c_graph, &c_est, c_size, (Rf_isNull(cut_prob) ? 0 : &c_cut_prob), c_sample_size, (Rf_isNull(sample) ? 0 : &c_sample))); + IGRAPH_LOCAL_R_CHECK(igraph_motifs_randesu_estimate(&c_graph, &c_est, c_size, (Rf_isNull(cut_prob) ? 0 : &c_cut_prob), c_sample_size, (Rf_isNull(sample) ? 0 : &c_sample))); /* Convert output */ PROTECT(est=NEW_NUMERIC(1)); @@ -14396,7 +14396,7 @@ SEXP R_igraph_motifs_randesu_no(SEXP graph, SEXP size, SEXP cut_prob) { Rz_SEXP_to_vector(cut_prob, &c_cut_prob); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_motifs_randesu_no(&c_graph, &c_no, c_size, (Rf_isNull(cut_prob) ? 0 : &c_cut_prob))); + IGRAPH_LOCAL_R_CHECK(igraph_motifs_randesu_no(&c_graph, &c_no, c_size, (Rf_isNull(cut_prob) ? 0 : &c_cut_prob))); /* Convert output */ PROTECT(no=NEW_NUMERIC(1)); @@ -14425,7 +14425,7 @@ SEXP R_igraph_dyad_census(SEXP graph) { /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ - IGRAPH_R_CHECK(igraph_dyad_census(&c_graph, &c_mut, &c_asym, &c_null)); + IGRAPH_LOCAL_R_CHECK(igraph_dyad_census(&c_graph, &c_mut, &c_asym, &c_null)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -14462,10 +14462,10 @@ SEXP R_igraph_triad_census(SEXP graph) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); /* Call igraph */ - IGRAPH_R_CHECK(igraph_triad_census(&c_graph, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_triad_census(&c_graph, &c_res)); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -14491,12 +14491,12 @@ SEXP R_igraph_count_adjacent_triangles(SEXP graph, SEXP vids) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); /* Call igraph */ - IGRAPH_R_CHECK(igraph_count_adjacent_triangles(&c_graph, &c_res, c_vids)); + IGRAPH_LOCAL_R_CHECK(igraph_count_adjacent_triangles(&c_graph, &c_res, c_vids)); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -14524,7 +14524,7 @@ SEXP R_igraph_count_triangles(SEXP graph) { /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ - IGRAPH_R_CHECK(igraph_count_triangles(&c_graph, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_count_triangles(&c_graph, &c_res)); /* Convert output */ PROTECT(res=NEW_NUMERIC(1)); @@ -14550,14 +14550,14 @@ SEXP R_igraph_local_scan_0(SEXP graph, SEXP weights, SEXP mode) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_local_scan_0(&c_graph, &c_res, (Rf_isNull(weights) ? 0 : &c_weights), c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_local_scan_0(&c_graph, &c_res, (Rf_isNull(weights) ? 0 : &c_weights), c_mode)); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -14586,14 +14586,14 @@ SEXP R_igraph_local_scan_0_them(SEXP us, SEXP them, SEXP weights_them, SEXP mode /* Convert input */ Rz_SEXP_to_igraph(us, &c_us); Rz_SEXP_to_igraph(them, &c_them); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); if (!Rf_isNull(weights_them)) { Rz_SEXP_to_vector(weights_them, &c_weights_them); } c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_local_scan_0_them(&c_us, &c_them, &c_res, (Rf_isNull(weights_them) ? 0 : &c_weights_them), c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_local_scan_0_them(&c_us, &c_them, &c_res, (Rf_isNull(weights_them) ? 0 : &c_weights_them), c_mode)); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -14620,14 +14620,14 @@ SEXP R_igraph_local_scan_1_ecount(SEXP graph, SEXP weights, SEXP mode) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_local_scan_1_ecount(&c_graph, &c_res, (Rf_isNull(weights) ? 0 : &c_weights), c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_local_scan_1_ecount(&c_graph, &c_res, (Rf_isNull(weights) ? 0 : &c_weights), c_mode)); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -14656,14 +14656,14 @@ SEXP R_igraph_local_scan_1_ecount_them(SEXP us, SEXP them, SEXP weights_them, SE /* Convert input */ Rz_SEXP_to_igraph(us, &c_us); Rz_SEXP_to_igraph(them, &c_them); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); if (!Rf_isNull(weights_them)) { Rz_SEXP_to_vector(weights_them, &c_weights_them); } c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_local_scan_1_ecount_them(&c_us, &c_them, &c_res, (Rf_isNull(weights_them) ? 0 : &c_weights_them), c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_local_scan_1_ecount_them(&c_us, &c_them, &c_res, (Rf_isNull(weights_them) ? 0 : &c_weights_them), c_mode)); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -14693,14 +14693,14 @@ SEXP R_igraph_local_scan_k_ecount(SEXP graph, SEXP k, SEXP weights, SEXP mode) { Rz_SEXP_to_igraph(graph, &c_graph); IGRAPH_R_CHECK_INT(k); c_k = (igraph_integer_t) REAL(k)[0]; - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_local_scan_k_ecount(&c_graph, c_k, &c_res, (Rf_isNull(weights) ? 0 : &c_weights), c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_local_scan_k_ecount(&c_graph, c_k, &c_res, (Rf_isNull(weights) ? 0 : &c_weights), c_mode)); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -14732,14 +14732,14 @@ SEXP R_igraph_local_scan_k_ecount_them(SEXP us, SEXP them, SEXP k, SEXP weights_ Rz_SEXP_to_igraph(them, &c_them); IGRAPH_R_CHECK_INT(k); c_k = (igraph_integer_t) REAL(k)[0]; - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); if (!Rf_isNull(weights_them)) { Rz_SEXP_to_vector(weights_them, &c_weights_them); } c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_local_scan_k_ecount_them(&c_us, &c_them, c_k, &c_res, (Rf_isNull(weights_them) ? 0 : &c_weights_them), c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_local_scan_k_ecount_them(&c_us, &c_them, c_k, &c_res, (Rf_isNull(weights_them) ? 0 : &c_weights_them), c_mode)); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -14766,15 +14766,15 @@ SEXP R_igraph_local_scan_neighborhood_ecount(SEXP graph, SEXP weights, SEXP neig IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } - IGRAPH_R_CHECK(Ry_igraph_SEXP_to_vector_int_list(neighborhoods, &c_neighborhoods)); + IGRAPH_LOCAL_R_CHECK(Ry_igraph_SEXP_to_vector_int_list(neighborhoods, &c_neighborhoods)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_neighborhoods); /* Call igraph */ - IGRAPH_R_CHECK(igraph_local_scan_neighborhood_ecount(&c_graph, &c_res, (Rf_isNull(weights) ? 0 : &c_weights), &c_neighborhoods)); + IGRAPH_LOCAL_R_CHECK(igraph_local_scan_neighborhood_ecount(&c_graph, &c_res, (Rf_isNull(weights) ? 0 : &c_weights), &c_neighborhoods)); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -14803,15 +14803,15 @@ SEXP R_igraph_local_scan_subset_ecount(SEXP graph, SEXP weights, SEXP subsets) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } - IGRAPH_R_CHECK(Ry_igraph_SEXP_to_vector_int_list(subsets, &c_subsets)); + IGRAPH_LOCAL_R_CHECK(Ry_igraph_SEXP_to_vector_int_list(subsets, &c_subsets)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_subsets); /* Call igraph */ - IGRAPH_R_CHECK(igraph_local_scan_subset_ecount(&c_graph, &c_res, (Rf_isNull(weights) ? 0 : &c_weights), &c_subsets)); + IGRAPH_LOCAL_R_CHECK(igraph_local_scan_subset_ecount(&c_graph, &c_res, (Rf_isNull(weights) ? 0 : &c_weights), &c_subsets)); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -14838,10 +14838,10 @@ SEXP R_igraph_list_triangles(SEXP graph) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_res); /* Call igraph */ - IGRAPH_R_CHECK(igraph_list_triangles(&c_graph, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_list_triangles(&c_graph, &c_res)); /* Convert output */ PROTECT(res=Ry_igraph_vector_int_to_SEXPp1(&c_res)); @@ -14869,7 +14869,7 @@ SEXP R_igraph_disjoint_union(SEXP left, SEXP right) { Rz_SEXP_to_igraph(left, &c_left); Rz_SEXP_to_igraph(right, &c_right); /* Call igraph */ - IGRAPH_R_CHECK(igraph_disjoint_union(&c_res, &c_left, &c_right)); + IGRAPH_LOCAL_R_CHECK(igraph_disjoint_union(&c_res, &c_left, &c_right)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_res); @@ -14895,10 +14895,10 @@ SEXP R_igraph_disjoint_union_many(SEXP graphs) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ igraph_t *c_graphs_storage; - IGRAPH_R_CHECK(Rz_SEXP_to_graph_ptr_list(graphs, &c_graphs, &c_graphs_storage)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_graph_ptr_list(graphs, &c_graphs, &c_graphs_storage)); IGRAPH_LOCAL_FINALLY(igraph_vector_ptr_destroy, &c_graphs); /* Call igraph */ - IGRAPH_R_CHECK(igraph_disjoint_union_many(&c_res, &c_graphs)); + IGRAPH_LOCAL_R_CHECK(igraph_disjoint_union_many(&c_res, &c_graphs)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_res); @@ -14929,7 +14929,7 @@ SEXP R_igraph_join(SEXP left, SEXP right) { Rz_SEXP_to_igraph(left, &c_left); Rz_SEXP_to_igraph(right, &c_right); /* Call igraph */ - IGRAPH_R_CHECK(igraph_join(&c_res, &c_left, &c_right)); + IGRAPH_LOCAL_R_CHECK(igraph_join(&c_res, &c_left, &c_right)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_res); @@ -14961,12 +14961,12 @@ SEXP R_igraph_union(SEXP left, SEXP right) { /* Convert input */ Rz_SEXP_to_igraph(left, &c_left); Rz_SEXP_to_igraph(right, &c_right); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_map_left, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edge_map_left, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_map_left); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_map_right, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edge_map_right, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_map_right); /* Call igraph */ - IGRAPH_R_CHECK(igraph_union(&c_res, &c_left, &c_right, &c_edge_map_left, &c_edge_map_right)); + IGRAPH_LOCAL_R_CHECK(igraph_union(&c_res, &c_left, &c_right, &c_edge_map_left, &c_edge_map_right)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -15009,12 +15009,12 @@ SEXP R_igraph_union_many(SEXP graphs) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ igraph_t *c_graphs_storage; - IGRAPH_R_CHECK(Rz_SEXP_to_graph_ptr_list(graphs, &c_graphs, &c_graphs_storage)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_graph_ptr_list(graphs, &c_graphs, &c_graphs_storage)); IGRAPH_LOCAL_FINALLY(igraph_vector_ptr_destroy, &c_graphs); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_edgemaps, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_edgemaps, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_edgemaps); /* Call igraph */ - IGRAPH_R_CHECK(igraph_union_many(&c_res, &c_graphs, &c_edgemaps)); + IGRAPH_LOCAL_R_CHECK(igraph_union_many(&c_res, &c_graphs, &c_edgemaps)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -15058,12 +15058,12 @@ SEXP R_igraph_intersection(SEXP left, SEXP right) { /* Convert input */ Rz_SEXP_to_igraph(left, &c_left); Rz_SEXP_to_igraph(right, &c_right); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_map_left, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edge_map_left, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_map_left); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_map_right, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edge_map_right, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_map_right); /* Call igraph */ - IGRAPH_R_CHECK(igraph_intersection(&c_res, &c_left, &c_right, &c_edge_map_left, &c_edge_map_right)); + IGRAPH_LOCAL_R_CHECK(igraph_intersection(&c_res, &c_left, &c_right, &c_edge_map_left, &c_edge_map_right)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -15106,12 +15106,12 @@ SEXP R_igraph_intersection_many(SEXP graphs) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ igraph_t *c_graphs_storage; - IGRAPH_R_CHECK(Rz_SEXP_to_graph_ptr_list(graphs, &c_graphs, &c_graphs_storage)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_graph_ptr_list(graphs, &c_graphs, &c_graphs_storage)); IGRAPH_LOCAL_FINALLY(igraph_vector_ptr_destroy, &c_graphs); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_edgemaps, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_edgemaps, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_edgemaps); /* Call igraph */ - IGRAPH_R_CHECK(igraph_intersection_many(&c_res, &c_graphs, &c_edgemaps)); + IGRAPH_LOCAL_R_CHECK(igraph_intersection_many(&c_res, &c_graphs, &c_edgemaps)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -15152,7 +15152,7 @@ SEXP R_igraph_difference(SEXP orig, SEXP sub) { Rz_SEXP_to_igraph(orig, &c_orig); Rz_SEXP_to_igraph(sub, &c_sub); /* Call igraph */ - IGRAPH_R_CHECK(igraph_difference(&c_res, &c_orig, &c_sub)); + IGRAPH_LOCAL_R_CHECK(igraph_difference(&c_res, &c_orig, &c_sub)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_res); @@ -15182,7 +15182,7 @@ SEXP R_igraph_complementer(SEXP graph, SEXP loops) { IGRAPH_R_CHECK_BOOL(loops); c_loops = LOGICAL(loops)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_complementer(&c_res, &c_graph, c_loops)); + IGRAPH_LOCAL_R_CHECK(igraph_complementer(&c_res, &c_graph, c_loops)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_res); @@ -15214,12 +15214,12 @@ SEXP R_igraph_compose(SEXP g1, SEXP g2) { /* Convert input */ Rz_SEXP_to_igraph(g1, &c_g1); Rz_SEXP_to_igraph(g2, &c_g2); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_map1, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edge_map1, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_map1); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_map2, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edge_map2, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_map2); /* Call igraph */ - IGRAPH_R_CHECK(igraph_compose(&c_res, &c_g1, &c_g2, &c_edge_map1, &c_edge_map2)); + IGRAPH_LOCAL_R_CHECK(igraph_compose(&c_res, &c_g1, &c_g2, &c_edge_map1, &c_edge_map2)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -15269,12 +15269,12 @@ SEXP R_igraph_induced_subgraph_map(SEXP graph, SEXP vids, SEXP impl) { igraph_vector_int_t c_vids_data; Rz_SEXP_to_igraph_vs(vids, &c_graph, &c_vids, &c_vids_data); c_impl = (igraph_subgraph_implementation_t) Rf_asInteger(impl); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_map, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_map, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_map); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_invmap, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_invmap, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_invmap); /* Call igraph */ - IGRAPH_R_CHECK(igraph_induced_subgraph_map(&c_graph, &c_res, c_vids, c_impl, &c_map, &c_invmap)); + IGRAPH_LOCAL_R_CHECK(igraph_induced_subgraph_map(&c_graph, &c_res, c_vids, c_impl, &c_map, &c_invmap)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -15321,7 +15321,7 @@ SEXP R_igraph_mycielskian(SEXP graph, SEXP k) { IGRAPH_R_CHECK_INT(k); c_k = (igraph_integer_t) REAL(k)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_mycielskian(&c_graph, &c_res, c_k)); + IGRAPH_LOCAL_R_CHECK(igraph_mycielskian(&c_graph, &c_res, c_k)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_res); @@ -15352,7 +15352,7 @@ SEXP R_igraph_product(SEXP g1, SEXP g2, SEXP type) { Rz_SEXP_to_igraph(g2, &c_g2); c_type = (igraph_product_t) Rf_asInteger(type); /* Call igraph */ - IGRAPH_R_CHECK(igraph_product(&c_res, &c_g1, &c_g2, c_type)); + IGRAPH_LOCAL_R_CHECK(igraph_product(&c_res, &c_g1, &c_g2, c_type)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_res); @@ -15383,7 +15383,7 @@ SEXP R_igraph_rooted_product(SEXP g1, SEXP g2, SEXP root) { Rz_SEXP_to_igraph(g2, &c_g2); c_root = (igraph_integer_t) REAL(root)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_rooted_product(&c_res, &c_g1, &c_g2, c_root)); + IGRAPH_LOCAL_R_CHECK(igraph_rooted_product(&c_res, &c_g1, &c_g2, c_root)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_res); @@ -15412,13 +15412,13 @@ SEXP R_igraph_gomory_hu_tree(SEXP graph, SEXP capacity) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_flows, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_flows, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_flows); if (!Rf_isNull(capacity)) { Rz_SEXP_to_vector(capacity, &c_capacity); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_gomory_hu_tree(&c_graph, &c_tree, &c_flows, (Rf_isNull(capacity) ? 0 : &c_capacity))); + IGRAPH_LOCAL_R_CHECK(igraph_gomory_hu_tree(&c_graph, &c_tree, &c_flows, (Rf_isNull(capacity) ? 0 : &c_capacity))); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -15467,13 +15467,13 @@ SEXP R_igraph_maxflow(SEXP graph, SEXP source, SEXP target, SEXP capacity) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_flow, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_flow, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_flow); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_cut, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_cut, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_cut); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_partition1, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_partition1, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_partition1); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_partition2, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_partition2, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_partition2); c_source = (igraph_integer_t) REAL(source)[0]; c_target = (igraph_integer_t) REAL(target)[0]; @@ -15481,7 +15481,7 @@ SEXP R_igraph_maxflow(SEXP graph, SEXP source, SEXP target, SEXP capacity) { Rz_SEXP_to_vector(capacity, &c_capacity); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_maxflow(&c_graph, &c_value, &c_flow, &c_cut, &c_partition1, &c_partition2, c_source, c_target, (Rf_isNull(capacity) ? 0 : &c_capacity), &c_stats)); + IGRAPH_LOCAL_R_CHECK(igraph_maxflow(&c_graph, &c_value, &c_flow, &c_cut, &c_partition1, &c_partition2, c_source, c_target, (Rf_isNull(capacity) ? 0 : &c_capacity), &c_stats)); /* Convert output */ PROTECT(r_result=NEW_LIST(6)); @@ -15544,7 +15544,7 @@ SEXP R_igraph_maxflow_value(SEXP graph, SEXP source, SEXP target, SEXP capacity) Rz_SEXP_to_vector(capacity, &c_capacity); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_maxflow_value(&c_graph, &c_value, c_source, c_target, (Rf_isNull(capacity) ? 0 : &c_capacity), &c_stats)); + IGRAPH_LOCAL_R_CHECK(igraph_maxflow_value(&c_graph, &c_value, c_source, c_target, (Rf_isNull(capacity) ? 0 : &c_capacity), &c_stats)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -15583,17 +15583,17 @@ SEXP R_igraph_mincut(SEXP graph, SEXP capacity) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_partition1, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_partition1, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_partition1); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_partition2, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_partition2, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_partition2); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_cut, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_cut, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_cut); if (!Rf_isNull(capacity)) { Rz_SEXP_to_vector(capacity, &c_capacity); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_mincut(&c_graph, &c_value, &c_partition1, &c_partition2, &c_cut, (Rf_isNull(capacity) ? 0 : &c_capacity))); + IGRAPH_LOCAL_R_CHECK(igraph_mincut(&c_graph, &c_value, &c_partition1, &c_partition2, &c_cut, (Rf_isNull(capacity) ? 0 : &c_capacity))); /* Convert output */ PROTECT(r_result=NEW_LIST(4)); @@ -15642,7 +15642,7 @@ SEXP R_igraph_mincut_value(SEXP graph, SEXP capacity) { Rz_SEXP_to_vector(capacity, &c_capacity); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_mincut_value(&c_graph, &c_res, (Rf_isNull(capacity) ? 0 : &c_capacity))); + IGRAPH_LOCAL_R_CHECK(igraph_mincut_value(&c_graph, &c_res, (Rf_isNull(capacity) ? 0 : &c_capacity))); /* Convert output */ PROTECT(res=NEW_NUMERIC(1)); @@ -15671,12 +15671,12 @@ SEXP R_igraph_residual_graph(SEXP graph, SEXP capacity, SEXP flow) { /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); Rz_SEXP_to_vector(capacity, &c_capacity); - IGRAPH_R_CHECK(igraph_vector_init(&c_residual_capacity, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_residual_capacity, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_residual_capacity); residual_capacity=R_GlobalEnv; /* hack to have a non-NULL value */ Rz_SEXP_to_vector(flow, &c_flow); /* Call igraph */ - IGRAPH_R_CHECK(igraph_residual_graph(&c_graph, &c_capacity, &c_residual, &c_residual_capacity, &c_flow)); + IGRAPH_LOCAL_R_CHECK(igraph_residual_graph(&c_graph, &c_capacity, &c_residual, &c_residual_capacity, &c_flow)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -15717,7 +15717,7 @@ SEXP R_igraph_reverse_residual_graph(SEXP graph, SEXP capacity, SEXP flow) { Rz_SEXP_to_vector(capacity, &c_capacity); Rz_SEXP_to_vector(flow, &c_flow); /* Call igraph */ - IGRAPH_R_CHECK(igraph_reverse_residual_graph(&c_graph, &c_capacity, &c_residual, &c_flow)); + IGRAPH_LOCAL_R_CHECK(igraph_reverse_residual_graph(&c_graph, &c_capacity, &c_residual, &c_flow)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_residual); @@ -15752,11 +15752,11 @@ SEXP R_igraph_st_mincut(SEXP graph, SEXP source, SEXP target, SEXP capacity) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_cut, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_cut, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_cut); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_partition1, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_partition1, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_partition1); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_partition2, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_partition2, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_partition2); c_source = (igraph_integer_t) REAL(source)[0]; c_target = (igraph_integer_t) REAL(target)[0]; @@ -15764,7 +15764,7 @@ SEXP R_igraph_st_mincut(SEXP graph, SEXP source, SEXP target, SEXP capacity) { Rz_SEXP_to_vector(capacity, &c_capacity); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_st_mincut(&c_graph, &c_value, &c_cut, &c_partition1, &c_partition2, c_source, c_target, (Rf_isNull(capacity) ? 0 : &c_capacity))); + IGRAPH_LOCAL_R_CHECK(igraph_st_mincut(&c_graph, &c_value, &c_cut, &c_partition1, &c_partition2, c_source, c_target, (Rf_isNull(capacity) ? 0 : &c_capacity))); /* Convert output */ PROTECT(r_result=NEW_LIST(4)); @@ -15817,7 +15817,7 @@ SEXP R_igraph_st_mincut_value(SEXP graph, SEXP source, SEXP target, SEXP capacit Rz_SEXP_to_vector(capacity, &c_capacity); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_st_mincut_value(&c_graph, &c_res, c_source, c_target, (Rf_isNull(capacity) ? 0 : &c_capacity))); + IGRAPH_LOCAL_R_CHECK(igraph_st_mincut_value(&c_graph, &c_res, c_source, c_target, (Rf_isNull(capacity) ? 0 : &c_capacity))); /* Convert output */ PROTECT(res=NEW_NUMERIC(1)); @@ -15849,7 +15849,7 @@ SEXP R_igraph_st_vertex_connectivity(SEXP graph, SEXP source, SEXP target, SEXP c_target = (igraph_integer_t) REAL(target)[0]; c_neighbors = (igraph_vconn_nei_t) Rf_asInteger(neighbors); /* Call igraph */ - IGRAPH_R_CHECK(igraph_st_vertex_connectivity(&c_graph, &c_res, c_source, c_target, c_neighbors)); + IGRAPH_LOCAL_R_CHECK(igraph_st_vertex_connectivity(&c_graph, &c_res, c_source, c_target, c_neighbors)); /* Convert output */ PROTECT(res=NEW_NUMERIC(1)); @@ -15878,7 +15878,7 @@ SEXP R_igraph_vertex_connectivity(SEXP graph, SEXP checks) { IGRAPH_R_CHECK_BOOL(checks); c_checks = LOGICAL(checks)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_vertex_connectivity(&c_graph, &c_res, c_checks)); + IGRAPH_LOCAL_R_CHECK(igraph_vertex_connectivity(&c_graph, &c_res, c_checks)); /* Convert output */ PROTECT(res=NEW_NUMERIC(1)); @@ -15908,7 +15908,7 @@ SEXP R_igraph_st_edge_connectivity(SEXP graph, SEXP source, SEXP target) { c_source = (igraph_integer_t) REAL(source)[0]; c_target = (igraph_integer_t) REAL(target)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_st_edge_connectivity(&c_graph, &c_res, c_source, c_target)); + IGRAPH_LOCAL_R_CHECK(igraph_st_edge_connectivity(&c_graph, &c_res, c_source, c_target)); /* Convert output */ PROTECT(res=NEW_NUMERIC(1)); @@ -15937,7 +15937,7 @@ SEXP R_igraph_edge_connectivity(SEXP graph, SEXP checks) { IGRAPH_R_CHECK_BOOL(checks); c_checks = LOGICAL(checks)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_edge_connectivity(&c_graph, &c_res, c_checks)); + IGRAPH_LOCAL_R_CHECK(igraph_edge_connectivity(&c_graph, &c_res, c_checks)); /* Convert output */ PROTECT(res=NEW_NUMERIC(1)); @@ -15967,7 +15967,7 @@ SEXP R_igraph_edge_disjoint_paths(SEXP graph, SEXP source, SEXP target) { c_source = (igraph_integer_t) REAL(source)[0]; c_target = (igraph_integer_t) REAL(target)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_edge_disjoint_paths(&c_graph, &c_res, c_source, c_target)); + IGRAPH_LOCAL_R_CHECK(igraph_edge_disjoint_paths(&c_graph, &c_res, c_source, c_target)); /* Convert output */ PROTECT(res=NEW_NUMERIC(1)); @@ -15997,7 +15997,7 @@ SEXP R_igraph_vertex_disjoint_paths(SEXP graph, SEXP source, SEXP target) { c_source = (igraph_integer_t) REAL(source)[0]; c_target = (igraph_integer_t) REAL(target)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_vertex_disjoint_paths(&c_graph, &c_res, c_source, c_target)); + IGRAPH_LOCAL_R_CHECK(igraph_vertex_disjoint_paths(&c_graph, &c_res, c_source, c_target)); /* Convert output */ PROTECT(res=NEW_NUMERIC(1)); @@ -16026,7 +16026,7 @@ SEXP R_igraph_adhesion(SEXP graph, SEXP checks) { IGRAPH_R_CHECK_BOOL(checks); c_checks = LOGICAL(checks)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_adhesion(&c_graph, &c_res, c_checks)); + IGRAPH_LOCAL_R_CHECK(igraph_adhesion(&c_graph, &c_res, c_checks)); /* Convert output */ PROTECT(res=NEW_NUMERIC(1)); @@ -16055,7 +16055,7 @@ SEXP R_igraph_cohesion(SEXP graph, SEXP checks) { IGRAPH_R_CHECK_BOOL(checks); c_checks = LOGICAL(checks)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_cohesion(&c_graph, &c_res, c_checks)); + IGRAPH_LOCAL_R_CHECK(igraph_cohesion(&c_graph, &c_res, c_checks)); /* Convert output */ PROTECT(res=NEW_NUMERIC(1)); @@ -16086,13 +16086,13 @@ SEXP R_igraph_dominator_tree(SEXP graph, SEXP root, SEXP mode) { /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); c_root = (igraph_integer_t) REAL(root)[0]; - IGRAPH_R_CHECK(igraph_vector_int_init(&c_dom, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_dom, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_dom); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_leftout, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_leftout, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_leftout); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_dominator_tree(&c_graph, c_root, &c_dom, &c_domtree, &c_leftout, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_dominator_tree(&c_graph, c_root, &c_dom, &c_domtree, &c_leftout, c_mode)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -16137,14 +16137,14 @@ SEXP R_igraph_all_st_cuts(SEXP graph, SEXP source, SEXP target) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_cuts, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_cuts, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_cuts); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_partition1s, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_partition1s, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_partition1s); c_source = (igraph_integer_t) REAL(source)[0]; c_target = (igraph_integer_t) REAL(target)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_all_st_cuts(&c_graph, &c_cuts, &c_partition1s, c_source, c_target)); + IGRAPH_LOCAL_R_CHECK(igraph_all_st_cuts(&c_graph, &c_cuts, &c_partition1s, c_source, c_target)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -16186,9 +16186,9 @@ SEXP R_igraph_all_st_mincuts(SEXP graph, SEXP source, SEXP target, SEXP capacity IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_cuts, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_cuts, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_cuts); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_partition1s, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_partition1s, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_partition1s); c_source = (igraph_integer_t) REAL(source)[0]; c_target = (igraph_integer_t) REAL(target)[0]; @@ -16196,7 +16196,7 @@ SEXP R_igraph_all_st_mincuts(SEXP graph, SEXP source, SEXP target, SEXP capacity Rz_SEXP_to_vector(capacity, &c_capacity); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_all_st_mincuts(&c_graph, &c_value, &c_cuts, &c_partition1s, c_source, c_target, (Rf_isNull(capacity) ? 0 : &c_capacity))); + IGRAPH_LOCAL_R_CHECK(igraph_all_st_mincuts(&c_graph, &c_value, &c_cuts, &c_partition1s, c_source, c_target, (Rf_isNull(capacity) ? 0 : &c_capacity))); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -16237,11 +16237,11 @@ SEXP R_igraph_even_tarjan_reduction(SEXP graph) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_capacity, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_capacity, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_capacity); capacity=R_GlobalEnv; /* hack to have a non-NULL value */ /* Call igraph */ - IGRAPH_R_CHECK(igraph_even_tarjan_reduction(&c_graph, &c_graphbar, &c_capacity)); + IGRAPH_LOCAL_R_CHECK(igraph_even_tarjan_reduction(&c_graph, &c_graphbar, &c_capacity)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -16281,7 +16281,7 @@ SEXP R_igraph_is_separator(SEXP graph, SEXP candidate) { igraph_vector_int_t c_candidate_data; Rz_SEXP_to_igraph_vs(candidate, &c_graph, &c_candidate, &c_candidate_data); /* Call igraph */ - IGRAPH_R_CHECK(igraph_is_separator(&c_graph, c_candidate, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_is_separator(&c_graph, c_candidate, &c_res)); /* Convert output */ igraph_vector_int_destroy(&c_candidate_data); @@ -16311,7 +16311,7 @@ SEXP R_igraph_is_minimal_separator(SEXP graph, SEXP candidate) { igraph_vector_int_t c_candidate_data; Rz_SEXP_to_igraph_vs(candidate, &c_graph, &c_candidate, &c_candidate_data); /* Call igraph */ - IGRAPH_R_CHECK(igraph_is_minimal_separator(&c_graph, c_candidate, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_is_minimal_separator(&c_graph, c_candidate, &c_res)); /* Convert output */ igraph_vector_int_destroy(&c_candidate_data); @@ -16337,10 +16337,10 @@ SEXP R_igraph_all_minimal_st_separators(SEXP graph) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_separators, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_separators, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_separators); /* Call igraph */ - IGRAPH_R_CHECK(igraph_all_minimal_st_separators(&c_graph, &c_separators)); + IGRAPH_LOCAL_R_CHECK(igraph_all_minimal_st_separators(&c_graph, &c_separators)); /* Convert output */ PROTECT(separators=Ry_igraph_vector_int_list_to_SEXPp1(&c_separators)); @@ -16365,10 +16365,10 @@ SEXP R_igraph_minimum_size_separators(SEXP graph) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_separators, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_separators, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_separators); /* Call igraph */ - IGRAPH_R_CHECK(igraph_minimum_size_separators(&c_graph, &c_separators)); + IGRAPH_LOCAL_R_CHECK(igraph_minimum_size_separators(&c_graph, &c_separators)); /* Convert output */ PROTECT(separators=Ry_igraph_vector_int_list_to_SEXPp1(&c_separators)); @@ -16399,14 +16399,14 @@ SEXP R_igraph_cohesive_blocks(SEXP graph) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_blocks, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_blocks, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_blocks); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_cohesion, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_cohesion, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_cohesion); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_parent, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_parent, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_parent); /* Call igraph */ - IGRAPH_R_CHECK(igraph_cohesive_blocks(&c_graph, &c_blocks, &c_cohesion, &c_parent, &c_blockTree)); + IGRAPH_LOCAL_R_CHECK(igraph_cohesive_blocks(&c_graph, &c_blocks, &c_cohesion, &c_parent, &c_blockTree)); /* Convert output */ PROTECT(r_result=NEW_LIST(4)); @@ -16453,11 +16453,11 @@ SEXP R_igraph_coreness(SEXP graph, SEXP mode) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_cores, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_cores, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_cores); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_coreness(&c_graph, &c_cores, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_coreness(&c_graph, &c_cores, c_mode)); /* Convert output */ PROTECT(cores=Ry_igraph_vector_int_to_SEXP(&c_cores)); @@ -16484,7 +16484,7 @@ SEXP R_igraph_isoclass(SEXP graph) { Rz_SEXP_to_igraph(graph, &c_graph); c_isoclass=0; /* Call igraph */ - IGRAPH_R_CHECK(igraph_isoclass(&c_graph, &c_isoclass)); + IGRAPH_LOCAL_R_CHECK(igraph_isoclass(&c_graph, &c_isoclass)); /* Convert output */ PROTECT(isoclass=NEW_NUMERIC(1)); @@ -16511,7 +16511,7 @@ SEXP R_igraph_isomorphic(SEXP graph1, SEXP graph2) { Rz_SEXP_to_igraph(graph1, &c_graph1); Rz_SEXP_to_igraph(graph2, &c_graph2); /* Call igraph */ - IGRAPH_R_CHECK(igraph_isomorphic(&c_graph1, &c_graph2, &c_iso)); + IGRAPH_LOCAL_R_CHECK(igraph_isomorphic(&c_graph1, &c_graph2, &c_iso)); /* Convert output */ PROTECT(iso=NEW_LOGICAL(1)); @@ -16536,11 +16536,11 @@ SEXP R_igraph_isoclass_subgraph(SEXP graph, SEXP vids) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(vids, &c_vids)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(vids, &c_vids)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vids); c_isoclass=0; /* Call igraph */ - IGRAPH_R_CHECK(igraph_isoclass_subgraph(&c_graph, &c_vids, &c_isoclass)); + IGRAPH_LOCAL_R_CHECK(igraph_isoclass_subgraph(&c_graph, &c_vids, &c_isoclass)); /* Convert output */ igraph_vector_int_destroy(&c_vids); @@ -16574,7 +16574,7 @@ SEXP R_igraph_isoclass_create(SEXP size, SEXP number, SEXP directed) { IGRAPH_R_CHECK_BOOL(directed); c_directed = LOGICAL(directed)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_isoclass_create(&c_graph, c_size, c_number, c_directed)); + IGRAPH_LOCAL_R_CHECK(igraph_isoclass_create(&c_graph, c_size, c_number, c_directed)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -16614,35 +16614,35 @@ SEXP R_igraph_isomorphic_vf2(SEXP graph1, SEXP graph2, SEXP vertex_color1, SEXP Rz_SEXP_to_igraph(graph1, &c_graph1); Rz_SEXP_to_igraph(graph2, &c_graph2); if (!Rf_isNull(vertex_color1)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color1, &c_vertex_color1)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color1, &c_vertex_color1)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_color1, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_vertex_color1, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_color1); if (!Rf_isNull(vertex_color2)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color2, &c_vertex_color2)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color2, &c_vertex_color2)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_color2, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_vertex_color2, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_color2); if (!Rf_isNull(edge_color1)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color1, &c_edge_color1)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color1, &c_edge_color1)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_color1, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edge_color1, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_color1); if (!Rf_isNull(edge_color2)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color2, &c_edge_color2)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color2, &c_edge_color2)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_color2, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edge_color2, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_color2); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_map12, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_map12, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_map12); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_map21, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_map21, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_map21); /* Call igraph */ - IGRAPH_R_CHECK(igraph_isomorphic_vf2(&c_graph1, &c_graph2, (Rf_isNull(vertex_color1) ? 0 : &c_vertex_color1), (Rf_isNull(vertex_color2) ? 0 : &c_vertex_color2), (Rf_isNull(edge_color1) ? 0 : &c_edge_color1), (Rf_isNull(edge_color2) ? 0 : &c_edge_color2), &c_iso, &c_map12, &c_map21, 0, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_isomorphic_vf2(&c_graph1, &c_graph2, (Rf_isNull(vertex_color1) ? 0 : &c_vertex_color1), (Rf_isNull(vertex_color2) ? 0 : &c_vertex_color2), (Rf_isNull(edge_color1) ? 0 : &c_edge_color1), (Rf_isNull(edge_color2) ? 0 : &c_edge_color2), &c_iso, &c_map12, &c_map21, 0, 0, 0)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -16702,35 +16702,35 @@ SEXP R_igraph_get_isomorphisms_vf2_callback(SEXP graph1, SEXP graph2, SEXP verte Rz_SEXP_to_igraph(graph1, &c_graph1); Rz_SEXP_to_igraph(graph2, &c_graph2); if (!Rf_isNull(vertex_color1)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color1, &c_vertex_color1)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color1, &c_vertex_color1)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_color1, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_vertex_color1, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_color1); if (!Rf_isNull(vertex_color2)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color2, &c_vertex_color2)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color2, &c_vertex_color2)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_color2, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_vertex_color2, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_color2); if (!Rf_isNull(edge_color1)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color1, &c_edge_color1)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color1, &c_edge_color1)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_color1, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edge_color1, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_color1); if (!Rf_isNull(edge_color2)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color2, &c_edge_color2)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color2, &c_edge_color2)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_color2, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edge_color2, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_color2); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_map12, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_map12, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_map12); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_map21, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_map21, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_map21); /* Call igraph */ - IGRAPH_R_CHECK(igraph_get_isomorphisms_vf2_callback(&c_graph1, &c_graph2, (Rf_isNull(vertex_color1) ? 0 : &c_vertex_color1), (Rf_isNull(vertex_color2) ? 0 : &c_vertex_color2), (Rf_isNull(edge_color1) ? 0 : &c_edge_color1), (Rf_isNull(edge_color2) ? 0 : &c_edge_color2), &c_map12, &c_map21, 0, 0, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_get_isomorphisms_vf2_callback(&c_graph1, &c_graph2, (Rf_isNull(vertex_color1) ? 0 : &c_vertex_color1), (Rf_isNull(vertex_color2) ? 0 : &c_vertex_color2), (Rf_isNull(edge_color1) ? 0 : &c_edge_color1), (Rf_isNull(edge_color2) ? 0 : &c_edge_color2), &c_map12, &c_map21, 0, 0, 0, 0)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -16783,32 +16783,32 @@ SEXP R_igraph_count_isomorphisms_vf2(SEXP graph1, SEXP graph2, SEXP vertex_color Rz_SEXP_to_igraph(graph1, &c_graph1); Rz_SEXP_to_igraph(graph2, &c_graph2); if (!Rf_isNull(vertex_color1)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color1, &c_vertex_color1)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color1, &c_vertex_color1)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_color1, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_vertex_color1, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_color1); if (!Rf_isNull(vertex_color2)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color2, &c_vertex_color2)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color2, &c_vertex_color2)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_color2, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_vertex_color2, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_color2); if (!Rf_isNull(edge_color1)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color1, &c_edge_color1)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color1, &c_edge_color1)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_color1, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edge_color1, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_color1); if (!Rf_isNull(edge_color2)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color2, &c_edge_color2)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color2, &c_edge_color2)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_color2, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edge_color2, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_color2); c_count=0; /* Call igraph */ - IGRAPH_R_CHECK(igraph_count_isomorphisms_vf2(&c_graph1, &c_graph2, (Rf_isNull(vertex_color1) ? 0 : &c_vertex_color1), (Rf_isNull(vertex_color2) ? 0 : &c_vertex_color2), (Rf_isNull(edge_color1) ? 0 : &c_edge_color1), (Rf_isNull(edge_color2) ? 0 : &c_edge_color2), &c_count, 0, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_count_isomorphisms_vf2(&c_graph1, &c_graph2, (Rf_isNull(vertex_color1) ? 0 : &c_vertex_color1), (Rf_isNull(vertex_color2) ? 0 : &c_vertex_color2), (Rf_isNull(edge_color1) ? 0 : &c_edge_color1), (Rf_isNull(edge_color2) ? 0 : &c_edge_color2), &c_count, 0, 0, 0)); /* Convert output */ igraph_vector_int_destroy(&c_vertex_color1); @@ -16850,33 +16850,33 @@ SEXP R_igraph_get_isomorphisms_vf2(SEXP graph1, SEXP graph2, SEXP vertex_color1, Rz_SEXP_to_igraph(graph1, &c_graph1); Rz_SEXP_to_igraph(graph2, &c_graph2); if (!Rf_isNull(vertex_color1)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color1, &c_vertex_color1)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color1, &c_vertex_color1)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_color1, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_vertex_color1, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_color1); if (!Rf_isNull(vertex_color2)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color2, &c_vertex_color2)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color2, &c_vertex_color2)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_color2, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_vertex_color2, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_color2); if (!Rf_isNull(edge_color1)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color1, &c_edge_color1)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color1, &c_edge_color1)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_color1, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edge_color1, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_color1); if (!Rf_isNull(edge_color2)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color2, &c_edge_color2)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color2, &c_edge_color2)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_color2, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edge_color2, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_color2); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_maps, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_maps, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_maps); /* Call igraph */ - IGRAPH_R_CHECK(igraph_get_isomorphisms_vf2(&c_graph1, &c_graph2, (Rf_isNull(vertex_color1) ? 0 : &c_vertex_color1), (Rf_isNull(vertex_color2) ? 0 : &c_vertex_color2), (Rf_isNull(edge_color1) ? 0 : &c_edge_color1), (Rf_isNull(edge_color2) ? 0 : &c_edge_color2), &c_maps, 0, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_get_isomorphisms_vf2(&c_graph1, &c_graph2, (Rf_isNull(vertex_color1) ? 0 : &c_vertex_color1), (Rf_isNull(vertex_color2) ? 0 : &c_vertex_color2), (Rf_isNull(edge_color1) ? 0 : &c_edge_color1), (Rf_isNull(edge_color2) ? 0 : &c_edge_color2), &c_maps, 0, 0, 0)); /* Convert output */ igraph_vector_int_destroy(&c_vertex_color1); @@ -16912,7 +16912,7 @@ SEXP R_igraph_subisomorphic(SEXP graph1, SEXP graph2) { Rz_SEXP_to_igraph(graph1, &c_graph1); Rz_SEXP_to_igraph(graph2, &c_graph2); /* Call igraph */ - IGRAPH_R_CHECK(igraph_subisomorphic(&c_graph1, &c_graph2, &c_iso)); + IGRAPH_LOCAL_R_CHECK(igraph_subisomorphic(&c_graph1, &c_graph2, &c_iso)); /* Convert output */ PROTECT(iso=NEW_LOGICAL(1)); @@ -16950,35 +16950,35 @@ SEXP R_igraph_subisomorphic_vf2(SEXP graph1, SEXP graph2, SEXP vertex_color1, SE Rz_SEXP_to_igraph(graph1, &c_graph1); Rz_SEXP_to_igraph(graph2, &c_graph2); if (!Rf_isNull(vertex_color1)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color1, &c_vertex_color1)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color1, &c_vertex_color1)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_color1, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_vertex_color1, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_color1); if (!Rf_isNull(vertex_color2)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color2, &c_vertex_color2)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color2, &c_vertex_color2)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_color2, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_vertex_color2, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_color2); if (!Rf_isNull(edge_color1)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color1, &c_edge_color1)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color1, &c_edge_color1)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_color1, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edge_color1, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_color1); if (!Rf_isNull(edge_color2)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color2, &c_edge_color2)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color2, &c_edge_color2)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_color2, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edge_color2, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_color2); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_map12, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_map12, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_map12); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_map21, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_map21, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_map21); /* Call igraph */ - IGRAPH_R_CHECK(igraph_subisomorphic_vf2(&c_graph1, &c_graph2, (Rf_isNull(vertex_color1) ? 0 : &c_vertex_color1), (Rf_isNull(vertex_color2) ? 0 : &c_vertex_color2), (Rf_isNull(edge_color1) ? 0 : &c_edge_color1), (Rf_isNull(edge_color2) ? 0 : &c_edge_color2), &c_iso, &c_map12, &c_map21, 0, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_subisomorphic_vf2(&c_graph1, &c_graph2, (Rf_isNull(vertex_color1) ? 0 : &c_vertex_color1), (Rf_isNull(vertex_color2) ? 0 : &c_vertex_color2), (Rf_isNull(edge_color1) ? 0 : &c_edge_color1), (Rf_isNull(edge_color2) ? 0 : &c_edge_color2), &c_iso, &c_map12, &c_map21, 0, 0, 0)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -17035,32 +17035,32 @@ SEXP R_igraph_count_subisomorphisms_vf2(SEXP graph1, SEXP graph2, SEXP vertex_co Rz_SEXP_to_igraph(graph1, &c_graph1); Rz_SEXP_to_igraph(graph2, &c_graph2); if (!Rf_isNull(vertex_color1)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color1, &c_vertex_color1)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color1, &c_vertex_color1)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_color1, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_vertex_color1, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_color1); if (!Rf_isNull(vertex_color2)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color2, &c_vertex_color2)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color2, &c_vertex_color2)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_color2, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_vertex_color2, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_color2); if (!Rf_isNull(edge_color1)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color1, &c_edge_color1)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color1, &c_edge_color1)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_color1, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edge_color1, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_color1); if (!Rf_isNull(edge_color2)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color2, &c_edge_color2)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color2, &c_edge_color2)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_color2, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edge_color2, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_color2); c_count=0; /* Call igraph */ - IGRAPH_R_CHECK(igraph_count_subisomorphisms_vf2(&c_graph1, &c_graph2, (Rf_isNull(vertex_color1) ? 0 : &c_vertex_color1), (Rf_isNull(vertex_color2) ? 0 : &c_vertex_color2), (Rf_isNull(edge_color1) ? 0 : &c_edge_color1), (Rf_isNull(edge_color2) ? 0 : &c_edge_color2), &c_count, 0, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_count_subisomorphisms_vf2(&c_graph1, &c_graph2, (Rf_isNull(vertex_color1) ? 0 : &c_vertex_color1), (Rf_isNull(vertex_color2) ? 0 : &c_vertex_color2), (Rf_isNull(edge_color1) ? 0 : &c_edge_color1), (Rf_isNull(edge_color2) ? 0 : &c_edge_color2), &c_count, 0, 0, 0)); /* Convert output */ igraph_vector_int_destroy(&c_vertex_color1); @@ -17102,33 +17102,33 @@ SEXP R_igraph_get_subisomorphisms_vf2(SEXP graph1, SEXP graph2, SEXP vertex_colo Rz_SEXP_to_igraph(graph1, &c_graph1); Rz_SEXP_to_igraph(graph2, &c_graph2); if (!Rf_isNull(vertex_color1)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color1, &c_vertex_color1)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color1, &c_vertex_color1)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_color1, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_vertex_color1, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_color1); if (!Rf_isNull(vertex_color2)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color2, &c_vertex_color2)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(vertex_color2, &c_vertex_color2)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_color2, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_vertex_color2, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_color2); if (!Rf_isNull(edge_color1)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color1, &c_edge_color1)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color1, &c_edge_color1)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_color1, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edge_color1, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_color1); if (!Rf_isNull(edge_color2)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color2, &c_edge_color2)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(edge_color2, &c_edge_color2)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_color2, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edge_color2, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_color2); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_maps, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_maps, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_maps); /* Call igraph */ - IGRAPH_R_CHECK(igraph_get_subisomorphisms_vf2(&c_graph1, &c_graph2, (Rf_isNull(vertex_color1) ? 0 : &c_vertex_color1), (Rf_isNull(vertex_color2) ? 0 : &c_vertex_color2), (Rf_isNull(edge_color1) ? 0 : &c_edge_color1), (Rf_isNull(edge_color2) ? 0 : &c_edge_color2), &c_maps, 0, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_get_subisomorphisms_vf2(&c_graph1, &c_graph2, (Rf_isNull(vertex_color1) ? 0 : &c_vertex_color1), (Rf_isNull(vertex_color2) ? 0 : &c_vertex_color2), (Rf_isNull(edge_color1) ? 0 : &c_edge_color1), (Rf_isNull(edge_color2) ? 0 : &c_edge_color2), &c_maps, 0, 0, 0)); /* Convert output */ igraph_vector_int_destroy(&c_vertex_color1); @@ -17166,16 +17166,16 @@ SEXP R_igraph_canonical_permutation(SEXP graph, SEXP colors, SEXP sh) { /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(colors)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(colors, &c_colors)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(colors, &c_colors)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_colors, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_colors, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_colors); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_labeling, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_labeling, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_labeling); c_sh = (igraph_bliss_sh_t) Rf_asInteger(sh); /* Call igraph */ - IGRAPH_R_CHECK(igraph_canonical_permutation(&c_graph, (Rf_isNull(colors) ? 0 : &c_colors), &c_labeling, c_sh, &c_info)); + IGRAPH_LOCAL_R_CHECK(igraph_canonical_permutation(&c_graph, (Rf_isNull(colors) ? 0 : &c_colors), &c_labeling, c_sh, &c_info)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -17215,7 +17215,7 @@ SEXP R_igraph_permute_vertices(SEXP graph, SEXP permutation) { Rz_SEXP_to_vector_int_copy(permutation, &c_permutation); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_permutation); /* Call igraph */ - IGRAPH_R_CHECK(igraph_permute_vertices(&c_graph, &c_res, &c_permutation)); + IGRAPH_LOCAL_R_CHECK(igraph_permute_vertices(&c_graph, &c_res, &c_permutation)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_res); @@ -17257,24 +17257,24 @@ SEXP R_igraph_isomorphic_bliss(SEXP graph1, SEXP graph2, SEXP colors1, SEXP colo Rz_SEXP_to_igraph(graph1, &c_graph1); Rz_SEXP_to_igraph(graph2, &c_graph2); if (!Rf_isNull(colors1)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(colors1, &c_colors1)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(colors1, &c_colors1)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_colors1, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_colors1, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_colors1); if (!Rf_isNull(colors2)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(colors2, &c_colors2)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(colors2, &c_colors2)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_colors2, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_colors2, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_colors2); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_map12, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_map12, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_map12); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_map21, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_map21, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_map21); c_sh = (igraph_bliss_sh_t) Rf_asInteger(sh); /* Call igraph */ - IGRAPH_R_CHECK(igraph_isomorphic_bliss(&c_graph1, &c_graph2, (Rf_isNull(colors1) ? 0 : &c_colors1), (Rf_isNull(colors2) ? 0 : &c_colors2), &c_iso, &c_map12, &c_map21, c_sh, &c_info1, &c_info2)); + IGRAPH_LOCAL_R_CHECK(igraph_isomorphic_bliss(&c_graph1, &c_graph2, (Rf_isNull(colors1) ? 0 : &c_colors1), (Rf_isNull(colors2) ? 0 : &c_colors2), &c_iso, &c_map12, &c_map21, c_sh, &c_info1, &c_info2)); /* Convert output */ PROTECT(r_result=NEW_LIST(5)); @@ -17328,14 +17328,14 @@ SEXP R_igraph_count_automorphisms(SEXP graph, SEXP colors, SEXP sh) { /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(colors)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(colors, &c_colors)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(colors, &c_colors)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_colors, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_colors, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_colors); c_sh = (igraph_bliss_sh_t) Rf_asInteger(sh); /* Call igraph */ - IGRAPH_R_CHECK(igraph_count_automorphisms(&c_graph, (Rf_isNull(colors) ? 0 : &c_colors), c_sh, &c_info)); + IGRAPH_LOCAL_R_CHECK(igraph_count_automorphisms(&c_graph, (Rf_isNull(colors) ? 0 : &c_colors), c_sh, &c_info)); /* Convert output */ igraph_vector_int_destroy(&c_colors); @@ -17366,16 +17366,16 @@ SEXP R_igraph_automorphism_group(SEXP graph, SEXP colors, SEXP sh) { /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(colors)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(colors, &c_colors)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(colors, &c_colors)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_colors, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_colors, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_colors); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_generators, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_generators, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_generators); c_sh = (igraph_bliss_sh_t) Rf_asInteger(sh); /* Call igraph */ - IGRAPH_R_CHECK(igraph_automorphism_group(&c_graph, (Rf_isNull(colors) ? 0 : &c_colors), &c_generators, c_sh, &c_info)); + IGRAPH_LOCAL_R_CHECK(igraph_automorphism_group(&c_graph, (Rf_isNull(colors) ? 0 : &c_colors), &c_generators, c_sh, &c_info)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -17415,12 +17415,12 @@ SEXP R_igraph_simplify_and_colorize(SEXP graph) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_color, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_vertex_color, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_color); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_color, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edge_color, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_color); /* Call igraph */ - IGRAPH_R_CHECK(igraph_simplify_and_colorize(&c_graph, &c_res, &c_vertex_color, &c_edge_color)); + IGRAPH_LOCAL_R_CHECK(igraph_simplify_and_colorize(&c_graph, &c_res, &c_vertex_color, &c_edge_color)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -17467,7 +17467,7 @@ SEXP R_igraph_graph_count(SEXP n, SEXP directed) { c_directed = LOGICAL(directed)[0]; c_count=0; /* Call igraph */ - IGRAPH_R_CHECK(igraph_graph_count(c_n, c_directed, &c_count)); + IGRAPH_LOCAL_R_CHECK(igraph_graph_count(c_n, c_directed, &c_count)); /* Convert output */ PROTECT(count=NEW_NUMERIC(1)); @@ -17499,7 +17499,7 @@ SEXP R_igraph_is_matching(SEXP graph, SEXP types, SEXP matching) { Rz_SEXP_to_vector_int_copy(matching, &c_matching); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_matching); /* Call igraph */ - IGRAPH_R_CHECK(igraph_is_matching(&c_graph, (Rf_isNull(types) ? 0 : &c_types), &c_matching, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_is_matching(&c_graph, (Rf_isNull(types) ? 0 : &c_types), &c_matching, &c_res)); /* Convert output */ igraph_vector_int_destroy(&c_matching); @@ -17533,7 +17533,7 @@ SEXP R_igraph_is_maximal_matching(SEXP graph, SEXP types, SEXP matching) { Rz_SEXP_to_vector_int_copy(matching, &c_matching); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_matching); /* Call igraph */ - IGRAPH_R_CHECK(igraph_is_maximal_matching(&c_graph, (Rf_isNull(types) ? 0 : &c_types), &c_matching, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_is_maximal_matching(&c_graph, (Rf_isNull(types) ? 0 : &c_types), &c_matching, &c_res)); /* Convert output */ igraph_vector_int_destroy(&c_matching); @@ -17568,7 +17568,7 @@ SEXP R_igraph_maximum_bipartite_matching(SEXP graph, SEXP types, SEXP weights, S Rz_SEXP_to_igraph(graph, &c_graph); Rz_SEXP_to_vector_bool(types, &c_types); c_matching_size=0; - IGRAPH_R_CHECK(igraph_vector_int_init(&c_matching, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_matching, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_matching); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); @@ -17576,7 +17576,7 @@ SEXP R_igraph_maximum_bipartite_matching(SEXP graph, SEXP types, SEXP weights, S IGRAPH_R_CHECK_REAL(eps); c_eps = REAL(eps)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_maximum_bipartite_matching(&c_graph, &c_types, &c_matching_size, &c_matching_weight, &c_matching, (Rf_isNull(weights) ? 0 : &c_weights), c_eps)); + IGRAPH_LOCAL_R_CHECK(igraph_maximum_bipartite_matching(&c_graph, &c_types, &c_matching_size, &c_matching_weight, &c_matching, (Rf_isNull(weights) ? 0 : &c_weights), c_eps)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -17632,16 +17632,16 @@ SEXP R_igraph_adjacency_spectral_embedding(SEXP graph, SEXP no, SEXP weights, SE c_which=INTEGER(which)[0]; IGRAPH_R_CHECK_BOOL(scaled); c_scaled = LOGICAL(scaled)[0]; - IGRAPH_R_CHECK(igraph_matrix_init(&c_X, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_X, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_X); - IGRAPH_R_CHECK(igraph_matrix_init(&c_Y, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_Y, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_Y); - IGRAPH_R_CHECK(igraph_vector_init(&c_D, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_D, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_D); Rz_SEXP_to_vector(cvec, &c_cvec); Rz_SEXP_to_igraph_arpack_options(options, &c_options); /* Call igraph */ - IGRAPH_R_CHECK(igraph_adjacency_spectral_embedding(&c_graph, c_no, (Rf_isNull(weights) ? 0 : &c_weights), c_which, c_scaled, &c_X, &c_Y, &c_D, &c_cvec, &c_options)); + IGRAPH_LOCAL_R_CHECK(igraph_adjacency_spectral_embedding(&c_graph, c_no, (Rf_isNull(weights) ? 0 : &c_weights), c_which, c_scaled, &c_X, &c_Y, &c_D, &c_cvec, &c_options)); /* Convert output */ PROTECT(r_result=NEW_LIST(4)); @@ -17703,15 +17703,15 @@ SEXP R_igraph_laplacian_spectral_embedding(SEXP graph, SEXP no, SEXP weights, SE c_type = (igraph_laplacian_spectral_embedding_type_t) Rf_asInteger(type); IGRAPH_R_CHECK_BOOL(scaled); c_scaled = LOGICAL(scaled)[0]; - IGRAPH_R_CHECK(igraph_matrix_init(&c_X, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_X, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_X); - IGRAPH_R_CHECK(igraph_matrix_init(&c_Y, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_Y, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_Y); - IGRAPH_R_CHECK(igraph_vector_init(&c_D, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_D, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_D); Rz_SEXP_to_igraph_arpack_options(options, &c_options); /* Call igraph */ - IGRAPH_R_CHECK(igraph_laplacian_spectral_embedding(&c_graph, c_no, (Rf_isNull(weights) ? 0 : &c_weights), c_which, c_type, c_scaled, &c_X, &c_Y, &c_D, &c_options)); + IGRAPH_LOCAL_R_CHECK(igraph_laplacian_spectral_embedding(&c_graph, c_no, (Rf_isNull(weights) ? 0 : &c_weights), c_which, c_type, c_scaled, &c_X, &c_Y, &c_D, &c_options)); /* Convert output */ PROTECT(r_result=NEW_LIST(4)); @@ -17767,18 +17767,18 @@ SEXP R_igraph_eigen_adjacency(SEXP graph, SEXP algorithm, SEXP which, SEXP optio c_algorithm = (igraph_eigen_algorithm_t) Rf_asInteger(algorithm); Rz_SEXP_to_igraph_eigen_which(which, &c_which); Rz_SEXP_to_igraph_arpack_options(options, &c_options); - IGRAPH_R_CHECK(igraph_vector_init(&c_values, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_values, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_values); - IGRAPH_R_CHECK(igraph_matrix_init(&c_vectors, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_vectors, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_vectors); - IGRAPH_R_CHECK(igraph_vector_complex_init(&c_cmplxvalues, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_complex_init(&c_cmplxvalues, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_complex_destroy, &c_cmplxvalues); cmplxvalues=R_GlobalEnv; /* hack to have a non-NULL value */ - IGRAPH_R_CHECK(igraph_matrix_complex_init(&c_cmplxvectors, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_complex_init(&c_cmplxvectors, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_complex_destroy, &c_cmplxvectors); cmplxvectors=R_GlobalEnv; /* hack to have a non-NULL value */ /* Call igraph */ - IGRAPH_R_CHECK(igraph_eigen_adjacency(&c_graph, c_algorithm, &c_which, &c_options, 0, &c_values, &c_vectors, (Rf_isNull(cmplxvalues) ? NULL : &c_cmplxvalues), (Rf_isNull(cmplxvectors) ? NULL : &c_cmplxvectors))); + IGRAPH_LOCAL_R_CHECK(igraph_eigen_adjacency(&c_graph, c_algorithm, &c_which, &c_options, 0, &c_values, &c_vectors, (Rf_isNull(cmplxvalues) ? NULL : &c_cmplxvalues), (Rf_isNull(cmplxvectors) ? NULL : &c_cmplxvectors))); /* Convert output */ PROTECT(r_result=NEW_LIST(5)); @@ -17833,7 +17833,7 @@ SEXP R_igraph_power_law_fit(SEXP data, SEXP xmin, SEXP force_continuous) { IGRAPH_R_CHECK_BOOL(force_continuous); c_force_continuous = LOGICAL(force_continuous)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_power_law_fit(&c_data, &c_res, c_xmin, c_force_continuous)); + IGRAPH_LOCAL_R_CHECK(igraph_power_law_fit(&c_data, &c_res, c_xmin, c_force_continuous)); /* Convert output */ PROTECT(res=Ry_igraph_plfit_result_to_SEXP(&c_res)); @@ -17865,10 +17865,10 @@ SEXP R_igraph_sir(SEXP graph, SEXP beta, SEXP gamma, SEXP no_sim) { c_gamma = REAL(gamma)[0]; IGRAPH_R_CHECK_INT(no_sim); c_no_sim = (igraph_integer_t) REAL(no_sim)[0]; - IGRAPH_R_CHECK(igraph_vector_ptr_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_ptr_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(Ry_igraph_sirlist_destroy, &c_res); /* Call igraph */ - IGRAPH_R_CHECK(igraph_sir(&c_graph, c_beta, c_gamma, c_no_sim, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_sir(&c_graph, c_beta, c_gamma, c_no_sim, &c_res)); /* Convert output */ PROTECT(res=Ry_igraph_sirlist_to_SEXP(&c_res)); @@ -17894,12 +17894,12 @@ SEXP R_igraph_running_mean(SEXP data, SEXP binwidth) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_vector(data, &c_data); - IGRAPH_R_CHECK(igraph_vector_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_res); IGRAPH_R_CHECK_INT(binwidth); c_binwidth = (igraph_integer_t) REAL(binwidth)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_running_mean(&c_data, &c_res, c_binwidth)); + IGRAPH_LOCAL_R_CHECK(igraph_running_mean(&c_data, &c_res, c_binwidth)); /* Convert output */ PROTECT(res=Ry_igraph_vector_to_SEXP(&c_res)); @@ -17925,7 +17925,7 @@ SEXP R_igraph_random_sample(SEXP l, SEXP h, SEXP length) { SEXP r_result; IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ - IGRAPH_R_CHECK(igraph_vector_int_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_res); IGRAPH_R_CHECK_INT(l); c_l = (igraph_integer_t) REAL(l)[0]; @@ -17934,7 +17934,7 @@ SEXP R_igraph_random_sample(SEXP l, SEXP h, SEXP length) { IGRAPH_R_CHECK_INT(length); c_length = (igraph_integer_t) REAL(length)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_random_sample(&c_res, c_l, c_h, c_length)); + IGRAPH_LOCAL_R_CHECK(igraph_random_sample(&c_res, c_l, c_h, c_length)); /* Convert output */ PROTECT(res=Ry_igraph_vector_int_to_SEXP(&c_res)); @@ -17961,12 +17961,12 @@ SEXP R_igraph_convex_hull_2d(SEXP data) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_matrix(data, &c_data); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_resverts, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_resverts, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_resverts); - IGRAPH_R_CHECK(igraph_matrix_init(&c_rescoords, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&c_rescoords, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &c_rescoords); /* Call igraph */ - IGRAPH_R_CHECK(igraph_convex_hull_2d(&c_data, &c_resverts, &c_rescoords)); + IGRAPH_LOCAL_R_CHECK(igraph_convex_hull_2d(&c_data, &c_resverts, &c_rescoords)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -18003,7 +18003,7 @@ SEXP R_igraph_dim_select(SEXP sv) { Rz_SEXP_to_vector(sv, &c_sv); c_dim=0; /* Call igraph */ - IGRAPH_R_CHECK(igraph_dim_select(&c_sv, &c_dim)); + IGRAPH_LOCAL_R_CHECK(igraph_dim_select(&c_sv, &c_dim)); /* Convert output */ PROTECT(dim=NEW_NUMERIC(1)); @@ -18090,10 +18090,10 @@ SEXP R_igraph_solve_lsap(SEXP c, SEXP n) { Rz_SEXP_to_matrix(c, &c_c); IGRAPH_R_CHECK_INT(n); c_n = (igraph_integer_t) REAL(n)[0]; - IGRAPH_R_CHECK(igraph_vector_int_init(&c_p, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_p, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_p); /* Call igraph */ - IGRAPH_R_CHECK(igraph_solve_lsap(&c_c, c_n, &c_p)); + IGRAPH_LOCAL_R_CHECK(igraph_solve_lsap(&c_c, c_n, &c_p)); /* Convert output */ PROTECT(p=Ry_igraph_vector_int_to_SEXP(&c_p)); @@ -18121,13 +18121,13 @@ SEXP R_igraph_find_cycle(SEXP graph, SEXP mode) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertices, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_vertices, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertices); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edges, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edges, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edges); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_find_cycle(&c_graph, &c_vertices, &c_edges, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_find_cycle(&c_graph, &c_vertices, &c_edges, c_mode)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -18167,9 +18167,9 @@ SEXP R_igraph_simple_cycles(SEXP graph, SEXP mode, SEXP min_cycle_length, SEXP m IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_vertices, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_vertices, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_vertices); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_edges, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_edges, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_edges); c_mode = (igraph_neimode_t) Rf_asInteger(mode); IGRAPH_R_CHECK_INT(min_cycle_length); @@ -18177,7 +18177,7 @@ SEXP R_igraph_simple_cycles(SEXP graph, SEXP mode, SEXP min_cycle_length, SEXP m IGRAPH_R_CHECK_INT(max_cycle_length); c_max_cycle_length = (igraph_integer_t) REAL(max_cycle_length)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_simple_cycles(&c_graph, &c_vertices, &c_edges, c_mode, c_min_cycle_length, c_max_cycle_length)); + IGRAPH_LOCAL_R_CHECK(igraph_simple_cycles(&c_graph, &c_vertices, &c_edges, c_mode, c_min_cycle_length, c_max_cycle_length)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -18215,7 +18215,7 @@ SEXP R_igraph_is_eulerian(SEXP graph) { /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ - IGRAPH_R_CHECK(igraph_is_eulerian(&c_graph, &c_has_path, &c_has_cycle)); + IGRAPH_LOCAL_R_CHECK(igraph_is_eulerian(&c_graph, &c_has_path, &c_has_cycle)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -18250,12 +18250,12 @@ SEXP R_igraph_eulerian_path(SEXP graph) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edge_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_res); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_vertex_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_res); /* Call igraph */ - IGRAPH_R_CHECK(igraph_eulerian_path(&c_graph, &c_edge_res, &c_vertex_res)); + IGRAPH_LOCAL_R_CHECK(igraph_eulerian_path(&c_graph, &c_edge_res, &c_vertex_res)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -18292,12 +18292,12 @@ SEXP R_igraph_eulerian_cycle(SEXP graph) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_edge_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_edge_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_res); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_vertex_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_res); /* Call igraph */ - IGRAPH_R_CHECK(igraph_eulerian_cycle(&c_graph, &c_edge_res, &c_vertex_res)); + IGRAPH_LOCAL_R_CHECK(igraph_eulerian_cycle(&c_graph, &c_edge_res, &c_vertex_res)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -18335,7 +18335,7 @@ SEXP R_igraph_fundamental_cycles(SEXP graph, SEXP start, SEXP bfs_cutoff, SEXP w IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_basis, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_basis, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_basis); if (!Rf_isNull(start)) { c_start = (igraph_integer_t) REAL(start)[0]; @@ -18346,7 +18346,7 @@ SEXP R_igraph_fundamental_cycles(SEXP graph, SEXP start, SEXP bfs_cutoff, SEXP w Rz_SEXP_to_vector(weights, &c_weights); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_fundamental_cycles(&c_graph, &c_basis, (Rf_isNull(start) ? 0 : c_start), c_bfs_cutoff, (Rf_isNull(weights) ? 0 : &c_weights))); + IGRAPH_LOCAL_R_CHECK(igraph_fundamental_cycles(&c_graph, &c_basis, (Rf_isNull(start) ? 0 : c_start), c_bfs_cutoff, (Rf_isNull(weights) ? 0 : &c_weights))); /* Convert output */ PROTECT(basis=Ry_igraph_vector_int_list_to_SEXPp1(&c_basis)); @@ -18375,7 +18375,7 @@ SEXP R_igraph_minimum_cycle_basis(SEXP graph, SEXP bfs_cutoff, SEXP complete, SE IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_list_init(&c_basis, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&c_basis, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &c_basis); IGRAPH_R_CHECK_INT(bfs_cutoff); c_bfs_cutoff = (igraph_integer_t) REAL(bfs_cutoff)[0]; @@ -18387,7 +18387,7 @@ SEXP R_igraph_minimum_cycle_basis(SEXP graph, SEXP bfs_cutoff, SEXP complete, SE Rz_SEXP_to_vector(weights, &c_weights); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_minimum_cycle_basis(&c_graph, &c_basis, c_bfs_cutoff, c_complete, c_use_cycle_order, (Rf_isNull(weights) ? 0 : &c_weights))); + IGRAPH_LOCAL_R_CHECK(igraph_minimum_cycle_basis(&c_graph, &c_basis, c_bfs_cutoff, c_complete, c_use_cycle_order, (Rf_isNull(weights) ? 0 : &c_weights))); /* Convert output */ PROTECT(basis=Ry_igraph_vector_int_list_to_SEXPp1(&c_basis)); @@ -18418,7 +18418,7 @@ SEXP R_igraph_is_tree(SEXP graph, SEXP mode) { c_root = -1; c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_is_tree(&c_graph, &c_res, &c_root, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_is_tree(&c_graph, &c_res, &c_root, c_mode)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -18454,11 +18454,11 @@ SEXP R_igraph_is_forest(SEXP graph, SEXP mode) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_roots, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_roots, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_roots); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_is_forest(&c_graph, &c_res, &c_roots, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_is_forest(&c_graph, &c_res, &c_roots, c_mode)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -18494,7 +18494,7 @@ SEXP R_igraph_from_prufer(SEXP prufer) { Rz_SEXP_to_vector_int_copy(prufer, &c_prufer); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_prufer); /* Call igraph */ - IGRAPH_R_CHECK(igraph_from_prufer(&c_graph, &c_prufer)); + IGRAPH_LOCAL_R_CHECK(igraph_from_prufer(&c_graph, &c_prufer)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -18522,10 +18522,10 @@ SEXP R_igraph_to_prufer(SEXP graph) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_prufer, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_prufer, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_prufer); /* Call igraph */ - IGRAPH_R_CHECK(igraph_to_prufer(&c_graph, &c_prufer)); + IGRAPH_LOCAL_R_CHECK(igraph_to_prufer(&c_graph, &c_prufer)); /* Convert output */ PROTECT(prufer=Ry_igraph_vector_int_to_SEXPp1(&c_prufer)); @@ -18554,7 +18554,7 @@ SEXP R_igraph_tree_from_parent_vector(SEXP parents, SEXP type) { IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_parents); c_type = (igraph_tree_mode_t) Rf_asInteger(type); /* Call igraph */ - IGRAPH_R_CHECK(igraph_tree_from_parent_vector(&c_graph, &c_parents, c_type)); + IGRAPH_LOCAL_R_CHECK(igraph_tree_from_parent_vector(&c_graph, &c_parents, c_type)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -18583,7 +18583,7 @@ SEXP R_igraph_is_complete(SEXP graph) { /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ - IGRAPH_R_CHECK(igraph_is_complete(&c_graph, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_is_complete(&c_graph, &c_res)); /* Convert output */ PROTECT(res=NEW_LOGICAL(1)); @@ -18608,13 +18608,13 @@ SEXP R_igraph_minimum_spanning_tree(SEXP graph, SEXP weights) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_res); if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_minimum_spanning_tree(&c_graph, &c_res, (Rf_isNull(weights) ? 0 : &c_weights))); + IGRAPH_LOCAL_R_CHECK(igraph_minimum_spanning_tree(&c_graph, &c_res, (Rf_isNull(weights) ? 0 : &c_weights))); /* Convert output */ PROTECT(res=Ry_igraph_vector_int_to_SEXPp1(&c_res)); @@ -18640,7 +18640,7 @@ SEXP R_igraph_minimum_spanning_tree_unweighted(SEXP graph) { /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); /* Call igraph */ - IGRAPH_R_CHECK(igraph_minimum_spanning_tree_unweighted(&c_graph, &c_mst)); + IGRAPH_LOCAL_R_CHECK(igraph_minimum_spanning_tree_unweighted(&c_graph, &c_mst)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_mst); @@ -18669,7 +18669,7 @@ SEXP R_igraph_minimum_spanning_tree_prim(SEXP graph, SEXP weights) { Rz_SEXP_to_igraph(graph, &c_graph); Rz_SEXP_to_vector(weights, &c_weights); /* Call igraph */ - IGRAPH_R_CHECK(igraph_minimum_spanning_tree_prim(&c_graph, &c_mst, &c_weights)); + IGRAPH_LOCAL_R_CHECK(igraph_minimum_spanning_tree_prim(&c_graph, &c_mst, &c_weights)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_mst); @@ -18696,13 +18696,13 @@ SEXP R_igraph_random_spanning_tree(SEXP graph, SEXP vid) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_res, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_res); if (!Rf_isNull(vid)) { c_vid = (igraph_integer_t) REAL(vid)[0]; } /* Call igraph */ - IGRAPH_R_CHECK(igraph_random_spanning_tree(&c_graph, &c_res, (Rf_isNull(vid) ? 0 : c_vid))); + IGRAPH_LOCAL_R_CHECK(igraph_random_spanning_tree(&c_graph, &c_res, (Rf_isNull(vid) ? 0 : c_vid))); /* Convert output */ PROTECT(res=Ry_igraph_vector_int_to_SEXPp1(&c_res)); @@ -18734,7 +18734,7 @@ SEXP R_igraph_tree_game(SEXP n, SEXP directed, SEXP method) { c_directed = LOGICAL(directed)[0]; c_method = (igraph_random_tree_t) Rf_asInteger(method); /* Call igraph */ - IGRAPH_R_CHECK(igraph_tree_game(&c_graph, c_n, c_directed, c_method)); + IGRAPH_LOCAL_R_CHECK(igraph_tree_game(&c_graph, c_n, c_directed, c_method)); /* Convert output */ IGRAPH_LOCAL_FINALLY(igraph_destroy, &c_graph); @@ -18761,11 +18761,11 @@ SEXP R_igraph_vertex_coloring_greedy(SEXP graph, SEXP heuristic) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_colors, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_colors, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_colors); c_heuristic = (igraph_coloring_greedy_t) Rf_asInteger(heuristic); /* Call igraph */ - IGRAPH_R_CHECK(igraph_vertex_coloring_greedy(&c_graph, &c_colors, c_heuristic)); + IGRAPH_LOCAL_R_CHECK(igraph_vertex_coloring_greedy(&c_graph, &c_colors, c_heuristic)); /* Convert output */ PROTECT(colors=Ry_igraph_vector_int_to_SEXP(&c_colors)); @@ -18792,13 +18792,13 @@ SEXP R_igraph_is_vertex_coloring(SEXP graph, SEXP types) { /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(types)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(types, &c_types)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(types, &c_types)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_types, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_types, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_types); /* Call igraph */ - IGRAPH_R_CHECK(igraph_is_vertex_coloring(&c_graph, &c_types, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_is_vertex_coloring(&c_graph, &c_types, &c_res)); /* Convert output */ igraph_vector_int_destroy(&c_types); @@ -18829,7 +18829,7 @@ SEXP R_igraph_is_bipartite_coloring(SEXP graph, SEXP types) { Rz_SEXP_to_igraph(graph, &c_graph); Rz_SEXP_to_vector_bool(types, &c_types); /* Call igraph */ - IGRAPH_R_CHECK(igraph_is_bipartite_coloring(&c_graph, &c_types, &c_res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_is_bipartite_coloring(&c_graph, &c_types, &c_res, 0)); /* Convert output */ PROTECT(res=NEW_LOGICAL(1)); @@ -18855,13 +18855,13 @@ SEXP R_igraph_is_edge_coloring(SEXP graph, SEXP types) { /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); if (!Rf_isNull(types)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(types, &c_types)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(types, &c_types)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&c_types, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_types, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_types); /* Call igraph */ - IGRAPH_R_CHECK(igraph_is_edge_coloring(&c_graph, &c_types, &c_res)); + IGRAPH_LOCAL_R_CHECK(igraph_is_edge_coloring(&c_graph, &c_types, &c_res)); /* Convert output */ igraph_vector_int_destroy(&c_types); @@ -18893,11 +18893,11 @@ SEXP R_igraph_deterministic_optimal_imitation(SEXP graph, SEXP vid, SEXP optimal c_vid = (igraph_integer_t) REAL(vid)[0]; c_optimality = (igraph_optimal_t) Rf_asInteger(optimality); Rz_SEXP_to_vector(quantities, &c_quantities); - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(strategies, &c_strategies)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(strategies, &c_strategies)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_strategies); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_deterministic_optimal_imitation(&c_graph, c_vid, c_optimality, &c_quantities, &c_strategies, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_deterministic_optimal_imitation(&c_graph, c_vid, c_optimality, &c_quantities, &c_strategies, c_mode)); /* Convert output */ PROTECT(strategies=Ry_igraph_vector_int_to_SEXP(&c_strategies)); @@ -18927,13 +18927,13 @@ SEXP R_igraph_moran_process(SEXP graph, SEXP weights, SEXP quantities, SEXP stra if (!Rf_isNull(weights)) { Rz_SEXP_to_vector(weights, &c_weights); } - IGRAPH_R_CHECK(Rz_SEXP_to_vector_copy(quantities, &c_quantities)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_copy(quantities, &c_quantities)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_quantities); - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(strategies, &c_strategies)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(strategies, &c_strategies)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_strategies); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_moran_process(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_quantities, &c_strategies, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_moran_process(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_quantities, &c_strategies, c_mode)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -18975,11 +18975,11 @@ SEXP R_igraph_roulette_wheel_imitation(SEXP graph, SEXP vid, SEXP is_local, SEXP IGRAPH_R_CHECK_BOOL(is_local); c_is_local = LOGICAL(is_local)[0]; Rz_SEXP_to_vector(quantities, &c_quantities); - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(strategies, &c_strategies)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(strategies, &c_strategies)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_strategies); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_roulette_wheel_imitation(&c_graph, c_vid, c_is_local, &c_quantities, &c_strategies, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_roulette_wheel_imitation(&c_graph, c_vid, c_is_local, &c_quantities, &c_strategies, c_mode)); /* Convert output */ PROTECT(strategies=Ry_igraph_vector_int_to_SEXP(&c_strategies)); @@ -19010,11 +19010,11 @@ SEXP R_igraph_stochastic_imitation(SEXP graph, SEXP vid, SEXP algo, SEXP quantit c_vid = (igraph_integer_t) REAL(vid)[0]; c_algo = (igraph_imitate_algorithm_t) Rf_asInteger(algo); Rz_SEXP_to_vector(quantities, &c_quantities); - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(strategies, &c_strategies)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(strategies, &c_strategies)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_strategies); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_stochastic_imitation(&c_graph, c_vid, c_algo, &c_quantities, &c_strategies, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_stochastic_imitation(&c_graph, c_vid, c_algo, &c_quantities, &c_strategies, c_mode)); /* Convert output */ PROTECT(strategies=Ry_igraph_vector_int_to_SEXP(&c_strategies)); @@ -19043,14 +19043,14 @@ SEXP R_igraph_convergence_degree(SEXP graph) { IGRAPH_LOCAL_FINALLY_STACK; /* Convert input */ Rz_SEXP_to_igraph(graph, &c_graph); - IGRAPH_R_CHECK(igraph_vector_init(&c_result, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_result, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_result); - IGRAPH_R_CHECK(igraph_vector_init(&c_in, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_in, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_in); - IGRAPH_R_CHECK(igraph_vector_init(&c_out, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&c_out, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &c_out); /* Call igraph */ - IGRAPH_R_CHECK(igraph_convergence_degree(&c_graph, &c_result, &c_in, &c_out)); + IGRAPH_LOCAL_R_CHECK(igraph_convergence_degree(&c_graph, &c_result, &c_in, &c_out)); /* Convert output */ PROTECT(r_result=NEW_LIST(3)); @@ -19114,7 +19114,7 @@ SEXP R_igraph_progress(SEXP message, SEXP percent) { IGRAPH_R_CHECK_REAL(percent); c_percent = REAL(percent)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_progress(c_message, c_percent, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_progress(c_message, c_percent, 0)); /* Convert output */ @@ -19135,7 +19135,7 @@ SEXP R_igraph_status(SEXP message) { /* Convert input */ c_message = Rf_translateCharUTF8(STRING_ELT(message, 0)); /* Call igraph */ - IGRAPH_R_CHECK(igraph_status(c_message, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_status(c_message, 0)); /* Convert output */ @@ -19180,7 +19180,7 @@ SEXP R_igraph_expand_path_to_pairs(SEXP path) { Rz_SEXP_to_vector_int_copy(path, &c_path); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_path); /* Call igraph */ - IGRAPH_R_CHECK(igraph_expand_path_to_pairs(&c_path)); + IGRAPH_LOCAL_R_CHECK(igraph_expand_path_to_pairs(&c_path)); /* Convert output */ PROTECT(path=Ry_igraph_vector_int_to_SEXPp1(&c_path)); @@ -19238,11 +19238,11 @@ SEXP R_igraph_vertex_path_from_edge_path(SEXP graph, SEXP start, SEXP edge_path, } Rz_SEXP_to_vector_int_copy(edge_path, &c_edge_path); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_edge_path); - IGRAPH_R_CHECK(igraph_vector_int_init(&c_vertex_path, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&c_vertex_path, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &c_vertex_path); c_mode = (igraph_neimode_t) Rf_asInteger(mode); /* Call igraph */ - IGRAPH_R_CHECK(igraph_vertex_path_from_edge_path(&c_graph, (Rf_isNull(start) ? 0 : c_start), &c_edge_path, &c_vertex_path, c_mode)); + IGRAPH_LOCAL_R_CHECK(igraph_vertex_path_from_edge_path(&c_graph, (Rf_isNull(start) ? 0 : c_start), &c_edge_path, &c_vertex_path, c_mode)); /* Convert output */ igraph_vector_int_destroy(&c_edge_path); @@ -19321,7 +19321,7 @@ SEXP R_igraph_motifs_randesu_callback_closure(SEXP graph, SEXP size, SEXP cut_pr Rz_SEXP_to_vector(cut_prob, &c_cut_prob); } /* Call igraph */ - IGRAPH_R_CHECK(igraph_motifs_randesu_callback_closure(&c_graph, c_size, (Rf_isNull(cut_prob) ? 0 : &c_cut_prob), callback)); + IGRAPH_LOCAL_R_CHECK(igraph_motifs_randesu_callback_closure(&c_graph, c_size, (Rf_isNull(cut_prob) ? 0 : &c_cut_prob), callback)); /* Convert output */ diff --git a/src/rinterface.h b/src/rinterface.h index 4cde9f44635..18d48453503 100644 --- a/src/rinterface.h +++ b/src/rinterface.h @@ -148,6 +148,7 @@ void igraph_vector_int_list_destroy_pv(void *pv_ptr); // Declare a local finally stack. // This should be placed at the beginning of a function. +// After this declaration, use IGRAPH_LOCAL_R_CHECK instead of IGRAPH_R_CHECK. #define IGRAPH_LOCAL_FINALLY_STACK \ struct igraph_i_protectedPtr igraph_i_local_finally_stack[IGRAPH_LOCAL_FINALLY_STACK_SIZE]; \ int igraph_i_local_finally_stack_size = 0 @@ -199,6 +200,25 @@ void igraph_vector_int_list_destroy_pv(void *pv_ptr); IGRAPH_LOCAL_FINALLY_REAL((func##_pv), (ptr)); \ } while (0) +// Variant of IGRAPH_R_CHECK for functions with local finally stacks +// This ensures the local stack is cleaned up before calling error handlers +#define IGRAPH_LOCAL_R_CHECK(func) \ + do { \ + Rx_igraph_attribute_clean_preserve_list(); \ + Rx_igraph_set_in_r_check(true); \ + igraph_error_type_t __c = func; \ + Rx_igraph_set_in_r_check(false); \ + Rx_igraph_warning(); \ + if (__c == IGRAPH_INTERRUPTED) { \ + IGRAPH_LOCAL_FINALLY_FREE(); \ + Rx_igraph_interrupt(); \ + } \ + else if (__c != IGRAPH_SUCCESS) { \ + IGRAPH_LOCAL_FINALLY_FREE(); \ + Rx_igraph_error(); \ + } \ + } while (0) + #define IGRAPH_R_CHECK_INT(v) R_check_int_scalar(v) #define IGRAPH_R_CHECK_REAL(v) R_check_real_scalar(v) #define IGRAPH_R_CHECK_BOOL(v) R_check_bool_scalar(v) diff --git a/src/rinterface_extra.c b/src/rinterface_extra.c index 8fd440d22f5..15102eaf5a0 100644 --- a/src/rinterface_extra.c +++ b/src/rinterface_extra.c @@ -3217,7 +3217,7 @@ SEXP Rx_igraph_arpack_unpack_complex(SEXP vectors, SEXP values, SEXP nev) { IGRAPH_LOCAL_FINALLY_PV(igraph_matrix_destroy, &c_values); c_nev=REAL(nev)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_arpack_unpack_complex(&c_vectors, &c_values, c_nev)); + IGRAPH_LOCAL_R_CHECK(igraph_arpack_unpack_complex(&c_vectors, &c_values, c_nev)); /* Convert output */ PROTECT(r_result=NEW_LIST(2)); @@ -3989,7 +3989,7 @@ SEXP Rx_igraph_add_edges_manual(SEXP graph, SEXP edges) { IGRAPH_LOCAL_FINALLY_PV(igraph_vector_int_destroy, &v); Rz_SEXP_to_igraph_copy(graph, &g); IGRAPH_LOCAL_FINALLY_PV(igraph_destroy, &g); - IGRAPH_R_CHECK(igraph_add_edges(&g, &v, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_add_edges(&g, &v, 0)); PROTECT(result=Ry_igraph_to_SEXP(&g)); igraph_vector_int_destroy(&v); IGRAPH_LOCAL_FINALLY_CLEAN(1); @@ -4731,7 +4731,7 @@ SEXP Rx_igraph_get_adjacency(SEXP graph, SEXP ptype, SEXP pweights, SEXP ploops) if (!Rf_isNull(pweights)) { Rz_SEXP_to_vector(pweights, &weights); } IGRAPH_LOCAL_FINALLY_STACK; igraph_matrix_init(&res, 0, 0); - IGRAPH_R_CHECK(igraph_get_adjacency(&g, &res, (igraph_get_adjacency_t) type, Rf_isNull(pweights) ? 0 : &weights, loops)); + IGRAPH_LOCAL_R_CHECK(igraph_get_adjacency(&g, &res, (igraph_get_adjacency_t) type, Rf_isNull(pweights) ? 0 : &weights, loops)); PROTECT(result=Ry_igraph_matrix_to_SEXP(&res)); igraph_matrix_destroy(&res); @@ -4776,10 +4776,10 @@ SEXP Rx_igraph_transitivity_local_undirected_all(SEXP graph, SEXP mode) { IGRAPH_LOCAL_FINALLY_STACK; Rz_SEXP_to_igraph(graph, &g); - IGRAPH_R_CHECK(igraph_vector_init(&res, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&res, 0)); IGRAPH_LOCAL_FINALLY_PV(igraph_vector_destroy, &res); - IGRAPH_R_CHECK(igraph_transitivity_local_undirected(&g, &res, igraph_vss_all(), isolates)); + IGRAPH_LOCAL_R_CHECK(igraph_transitivity_local_undirected(&g, &res, igraph_vss_all(), isolates)); PROTECT(result=NEW_NUMERIC(igraph_vector_size(&res))); igraph_vector_copy_to(&res, REAL(result)); @@ -5172,7 +5172,7 @@ SEXP Rx_igraph_compose(SEXP pleft, SEXP pright, SEXP pedgemaps) { igraph_vector_int_init(my_edgemap2, 0); IGRAPH_LOCAL_FINALLY_PV(igraph_vector_int_destroy, my_edgemap2); } - IGRAPH_R_CHECK(igraph_compose(&res, &left, &right, my_edgemap1, my_edgemap2)); + IGRAPH_LOCAL_R_CHECK(igraph_compose(&res, &left, &right, my_edgemap1, my_edgemap2)); PROTECT(result=NEW_LIST(3)); SET_VECTOR_ELT(result, 0, Ry_igraph_to_SEXP(&res)); IGRAPH_I_DESTROY(&res); @@ -7160,7 +7160,7 @@ SEXP Rx_igraph_graphlets(SEXP graph, SEXP weights, SEXP niter) { IGRAPH_LOCAL_FINALLY_PV(igraph_vector_destroy, &c_Mu); c_niter=(igraph_integer_t) REAL(niter)[0]; /* Call igraph */ - IGRAPH_R_CHECK(igraph_graphlets(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_cliques, &c_Mu, c_niter)); + IGRAPH_LOCAL_R_CHECK(igraph_graphlets(&c_graph, (Rf_isNull(weights) ? 0 : &c_weights), &c_cliques, &c_Mu, c_niter)); /* Convert output */ PROTECT(result=NEW_LIST(2)); diff --git a/tools/py-stimulus/src/stimulus/generators/r.py b/tools/py-stimulus/src/stimulus/generators/r.py index 1d8fbc4b794..12d0d394d70 100644 --- a/tools/py-stimulus/src/stimulus/generators/r.py +++ b/tools/py-stimulus/src/stimulus/generators/r.py @@ -22,7 +22,7 @@ indent = create_indentation_function(" ") init_functions = { - "igraph_vector_int_t": "IGRAPH_R_CHECK(igraph_vector_int_init(&%C%, 0));\nIGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &%C%);" + "igraph_vector_int_t": "IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&%C%, 0));\nIGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &%C%);" } @@ -623,11 +623,11 @@ def chunk_call(self, desc: FunctionDescriptor) -> str: res = "" # No return type means - return type is igraph_error_t if not desc.return_type: - res = f" IGRAPH_R_CHECK({desc.name}({calls}));\n" + res = f" IGRAPH_LOCAL_R_CHECK({desc.name}({calls}));\n" else: return_type = self.get_type_descriptor(desc.return_type) if return_type.name == "ERROR": - res = f" IGRAPH_R_CHECK({desc.name}({calls}));\n" + res = f" IGRAPH_LOCAL_R_CHECK({desc.name}({calls}));\n" elif return_type.name == "VOID": res = f" {desc.name}({calls});\n" else: diff --git a/tools/stimulus/types-RC.yaml b/tools/stimulus/types-RC.yaml index b2889615563..16477afbdf7 100644 --- a/tools/stimulus/types-RC.yaml +++ b/tools/stimulus/types-RC.yaml @@ -22,7 +22,7 @@ GRAPH_LIST: CTYPE: igraph_graph_list_t INCONV: OUT: |- - IGRAPH_R_CHECK(igraph_graph_list_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_graph_list_init(&%C%, 0)); IGRAPH_LOCAL_FINALLY(igraph_graph_list_destroy, &%C%); OUTCONV: OUT: |- @@ -36,10 +36,10 @@ GRAPH_PTR_LIST: INCONV: IN: |- igraph_t *%C%_storage; - IGRAPH_R_CHECK(Rz_SEXP_to_graph_ptr_list(%I%, &%C%, &%C%_storage)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_graph_ptr_list(%I%, &%C%, &%C%_storage)); IGRAPH_LOCAL_FINALLY(igraph_vector_ptr_destroy, &%C%); OUT: |- - IGRAPH_R_CHECK(igraph_vector_ptr_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_ptr_init(&%C%, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_ptr_destroy, &%C%); OUTCONV: IN: |- @@ -146,7 +146,7 @@ DOUBLE: ERROR: # An igraph error code # Note: No OUTCONV is provided because ERROR is handled specially as a return - # type - it's wrapped in IGRAPH_R_CHECK() which doesn't use output conversion. + # type - it's wrapped in IGRAPH_LOCAL_R_CHECK() which doesn't use output conversion. # When ERROR is used as an input parameter (e.g., in igraph_strerror), only # INCONV is needed. CTYPE: igraph_error_t @@ -182,7 +182,7 @@ INDEX_VECTOR: Rz_SEXP_to_vector_int_copy(%I%, &%C%); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &%C%); OUT: |- - IGRAPH_R_CHECK(igraph_vector_int_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&%C%, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &%C%); OUTCONV: IN: |- @@ -199,10 +199,10 @@ VECTOR: INCONV: IN: Rz_SEXP_to_vector(%I%, &%C%); INOUT: |- - IGRAPH_R_CHECK(Rz_SEXP_to_vector_copy(%I%, &%C%)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_copy(%I%, &%C%)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &%C%); OUT: |- - IGRAPH_R_CHECK(igraph_vector_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&%C%, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &%C%); OUTCONV: OUT: |- @@ -216,10 +216,10 @@ VECTOR_BOOL: INCONV: IN: Rz_SEXP_to_vector_bool(%I%, &%C%); INOUT: |- - IGRAPH_R_CHECK(Rz_SEXP_to_vector_bool_copy(%I%, &%C%)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_bool_copy(%I%, &%C%)); IGRAPH_LOCAL_FINALLY(igraph_vector_bool_destroy, &%C%); OUT: |- - IGRAPH_R_CHECK(igraph_vector_bool_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_bool_init(&%C%, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_bool_destroy, &%C%); OUTCONV: OUT: |- @@ -232,10 +232,10 @@ VECTOR_INT: CTYPE: igraph_vector_int_t INCONV: IN: |- - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(%I%, &%C%)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(%I%, &%C%)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &%C%); OUT: |- - IGRAPH_R_CHECK(igraph_vector_int_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&%C%, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &%C%); OUTCONV: IN: |- @@ -253,7 +253,7 @@ MATRIX_LIST: IN: |- Ry_igraph_SEXP_to_matrixlist(%I%, &%C%); OUT: |- - IGRAPH_R_CHECK(igraph_matrix_list_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_list_init(&%C%, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_list_destroy, &%C%); OUTCONV: OUT: |- @@ -267,7 +267,7 @@ VECTOR_LIST: INCONV: IN: Ry_igraph_SEXP_to_vector_list(%I%, &%C%); OUT: |- - IGRAPH_R_CHECK(igraph_vector_list_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_list_init(&%C%, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_list_destroy, &%C%); OUTCONV: OUT: |- @@ -279,9 +279,9 @@ VECTOR_INT_LIST: CALL: '&%C%' CTYPE: igraph_vector_int_list_t INCONV: - IN: if (!Rf_isNull(%I%)) { IGRAPH_R_CHECK(Ry_igraph_SEXP_to_vector_int_list(%I%, &%C%)); } + IN: if (!Rf_isNull(%I%)) { IGRAPH_LOCAL_R_CHECK(Ry_igraph_SEXP_to_vector_int_list(%I%, &%C%)); } OUT: |- - IGRAPH_R_CHECK(igraph_vector_int_list_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&%C%, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &%C%); OUTCONV: OUT: |- @@ -294,10 +294,10 @@ VERTEXSET_LIST: CTYPE: igraph_vector_int_list_t INCONV: IN: |- - IGRAPH_R_CHECK(Ry_igraph_SEXP_to_vector_int_list(%I%, &%C%)); + IGRAPH_LOCAL_R_CHECK(Ry_igraph_SEXP_to_vector_int_list(%I%, &%C%)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &%C%); OUT: |- - IGRAPH_R_CHECK(igraph_vector_int_list_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&%C%, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &%C%); OUTCONV: IN: |- @@ -313,9 +313,9 @@ EDGESET_LIST: CTYPE: igraph_vector_int_list_t INCONV: IN: |- - if (!Rf_isNull(%I%)) { IGRAPH_R_CHECK(Ry_igraph_SEXP_to_vector_int_list(%I%, &%C%)); } + if (!Rf_isNull(%I%)) { IGRAPH_LOCAL_R_CHECK(Ry_igraph_SEXP_to_vector_int_list(%I%, &%C%)); } OUT: |- - IGRAPH_R_CHECK(igraph_vector_int_list_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_list_init(&%C%, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_list_destroy, &%C%); OUTCONV: OUT: |- @@ -333,9 +333,9 @@ EDGE_SELECTOR: INCONV: IN: |- igraph_vector_int_t %C%_data; - IGRAPH_R_CHECK(Rz_SEXP_to_igraph_es(%I%, &%C1%, &%C%, &%C%_data)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_igraph_es(%I%, &%C1%, &%C%, &%C%_data)); OUT: |- - IGRAPH_R_CHECK(igraph_vector_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&%C%, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &%C%); OUTCONV: IN: |- @@ -351,7 +351,7 @@ ADJLIST: CTYPE: igraph_adjlist_t INCONV: IN: |- - IGRAPH_R_CHECK(Rz_SEXP_to_igraph_adjlist(%I%, &%C%)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_igraph_adjlist(%I%, &%C%)); OUTCONV: IN: igraph_adjlist_destroy(&%C%); @@ -361,7 +361,7 @@ EDGEWEIGHTS: INCONV: IN: Rz_SEXP_to_vector(%I%, &%C%); OUT: |- - IGRAPH_R_CHECK(igraph_vector_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&%C%, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &%C%); %I%=R_GlobalEnv; /* hack to have a non-NULL value */ OUTCONV: @@ -376,7 +376,7 @@ VERTEXWEIGHTS: INCONV: IN: Rz_SEXP_to_vector(%I%, &%C%); OUT: |- - IGRAPH_R_CHECK(igraph_vector_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&%C%, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &%C%); %I%=R_GlobalEnv; /* hack to have a non-NULL value */ OUTCONV: @@ -391,7 +391,7 @@ EDGE_CAPACITY: INCONV: IN: Rz_SEXP_to_vector(%I%, &%C%); OUT: |- - IGRAPH_R_CHECK(igraph_vector_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&%C%, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &%C%); %I%=R_GlobalEnv; /* hack to have a non-NULL value */ OUTCONV: @@ -406,10 +406,10 @@ MATRIX: INCONV: IN: Rz_SEXP_to_matrix(%I%, &%C%); INOUT: |- - IGRAPH_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(%I%, &%C%)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_igraph_matrix_copy(%I%, &%C%)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &%C%); OUT: |- - IGRAPH_R_CHECK(igraph_matrix_init(&%C%, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_init(&%C%, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_destroy, &%C%); OUTCONV: OUT: |- @@ -425,10 +425,10 @@ MATRIX_INT: Rz_SEXP_to_matrix_int(%I%, &%C%); IGRAPH_LOCAL_FINALLY(igraph_matrix_int_destroy, &%C%); INOUT: |- - IGRAPH_R_CHECK(Rz_SEXP_to_igraph_matrix_int_copy(%I%, &%C%)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_igraph_matrix_int_copy(%I%, &%C%)); IGRAPH_LOCAL_FINALLY(igraph_matrix_int_destroy, &%C%); OUT: |- - IGRAPH_R_CHECK(igraph_matrix_int_init(&%C%, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_int_init(&%C%, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_int_destroy, &%C%); OUTCONV: IN: |- @@ -475,10 +475,10 @@ VERTEX_QTY: INCONV: IN: Rz_SEXP_to_vector(%I%, &%C%); INOUT: |- - IGRAPH_R_CHECK(Rz_SEXP_to_vector_copy(%I%, &%C%)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_copy(%I%, &%C%)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &%C%); OUT: |- - IGRAPH_R_CHECK(igraph_vector_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&%C%, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &%C%); OUTCONV: OUT: |- @@ -492,10 +492,10 @@ ALL_VERTEX_QTY: INCONV: IN: Rz_SEXP_to_vector(%I%, &%C%); INOUT: |- - IGRAPH_R_CHECK(Rz_SEXP_to_vector_copy(%I%, &%C%)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_copy(%I%, &%C%)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &%C%); OUT: |- - IGRAPH_R_CHECK(igraph_vector_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&%C%, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &%C%); OUTCONV: OUT: |- @@ -521,7 +521,7 @@ VERTEX_SELECTOR: igraph_vector_int_t %C%_data; Rz_SEXP_to_igraph_vs(%I%, &%C1%, &%C%, &%C%_data); OUT: |- - IGRAPH_R_CHECK(igraph_vector_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_init(&%C%, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_destroy, &%C%); OUTCONV: IN: |- @@ -540,7 +540,7 @@ VERTEX_INDICES: Rz_SEXP_to_vector_int_copy(%I%, &%C%); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &%C%); OUT: |- - IGRAPH_R_CHECK(igraph_vector_int_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&%C%, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &%C%); OUTCONV: IN: |- @@ -580,7 +580,7 @@ VERTEX_INDEX_PAIRS: Rz_SEXP_to_vector_int_copy(%I%, &%C%); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &%C%); OUT: |- - IGRAPH_R_CHECK(igraph_vector_int_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&%C%, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &%C%); OUTCONV: IN: |- @@ -599,7 +599,7 @@ EDGE_INDICES: Rz_SEXP_to_vector_int_copy(%I%, &%C%); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &%C%); OUT: |- - IGRAPH_R_CHECK(igraph_vector_int_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&%C%, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &%C%); OUTCONV: IN: |- @@ -680,7 +680,7 @@ VECTOR_STR: INCONV: IN: Rx_igraph_SEXP_to_strvector(%I%, &%C%); OUT: |- - IGRAPH_R_CHECK(igraph_strvector_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_strvector_init(&%C%, 0)); IGRAPH_LOCAL_FINALLY(igraph_strvector_destroy, &%C%); OUTCONV: OUT: |- @@ -696,7 +696,7 @@ BIPARTITE_TYPES: INCONV: IN: Rz_SEXP_to_vector_bool(%I%, &%C%); OUT: |- - IGRAPH_R_CHECK(igraph_vector_bool_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_bool_init(&%C%, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_bool_destroy, &%C%); OUTCONV: OUT: |- @@ -712,7 +712,7 @@ ALL_BIPARTITE_TYPES: INCONV: IN: Rz_SEXP_to_vector_bool(%I%, &%C%); OUT: |- - IGRAPH_R_CHECK(igraph_vector_bool_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_bool_init(&%C%, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_bool_destroy, &%C%); OUTCONV: OUT: |- @@ -726,7 +726,7 @@ BIPARTITE_TYPES_UNNAMED: CTYPE: igraph_vector_bool_t INCONV: OUT: |- - IGRAPH_R_CHECK(igraph_vector_bool_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_bool_init(&%C%, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_bool_destroy, &%C%); OUTCONV: OUT: |- @@ -742,13 +742,13 @@ VERTEX_COLOR: INCONV: IN: |- if (!Rf_isNull(%I%)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(%I%, &%C%)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(%I%, &%C%)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&%C%, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &%C%); OUT: |- - IGRAPH_R_CHECK(igraph_vector_int_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&%C%, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &%C%); OUTCONV: IN: |- @@ -767,13 +767,13 @@ EDGE_COLOR: INCONV: IN: |- if (!Rf_isNull(%I%)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_int_copy(%I%, &%C%)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_int_copy(%I%, &%C%)); } else { - IGRAPH_R_CHECK(igraph_vector_int_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&%C%, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &%C%); OUT: |- - IGRAPH_R_CHECK(igraph_vector_int_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_int_init(&%C%, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_int_destroy, &%C%); OUTCONV: IN: |- @@ -812,13 +812,13 @@ HRG: CALL: '&%C%' INCONV: IN: |- - IGRAPH_R_CHECK(Rz_SEXP_to_hrg_copy(%I%, &%C%)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_hrg_copy(%I%, &%C%)); IGRAPH_LOCAL_FINALLY(igraph_hrg_destroy, &%C%); INOUT: |- - IGRAPH_R_CHECK(Rz_SEXP_to_hrg_copy(%I%, &%C%)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_hrg_copy(%I%, &%C%)); IGRAPH_LOCAL_FINALLY(igraph_hrg_destroy, &%C%); OUT: |- - IGRAPH_R_CHECK(igraph_hrg_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_hrg_init(&%C%, 0)); IGRAPH_LOCAL_FINALLY(igraph_hrg_destroy, &%C%); OUTCONV: IN: |- @@ -841,7 +841,7 @@ SPARSEMAT: Rz_SEXP_to_sparsemat(%I%, &%C%); IGRAPH_LOCAL_FINALLY(igraph_sparsemat_destroy, &%C%); OUT: |- - IGRAPH_R_CHECK(igraph_sparsemat_init(&%C%, 0, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_sparsemat_init(&%C%, 0, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_sparsemat_destroy, &%C%); OUTCONV: IN: |- @@ -859,14 +859,14 @@ VECTOR_COMPLEX: IN: if (!Rf_isNull(%I%)) { Rz_SEXP_to_vector_complex(%I%, &%C%); } INOUT: |- if (!Rf_isNull(%I%)) { - IGRAPH_R_CHECK(Rz_SEXP_to_vector_complex_copy(%I%, &%C%)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_vector_complex_copy(%I%, &%C%)); } else { - IGRAPH_R_CHECK(igraph_vector_complex_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_complex_init(&%C%, 0)); } IGRAPH_LOCAL_FINALLY(igraph_vector_complex_destroy, &%C%); %I%=NEW_NUMERIC(0); OUT: |- - IGRAPH_R_CHECK(igraph_vector_complex_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_complex_init(&%C%, 0)); IGRAPH_LOCAL_FINALLY(igraph_vector_complex_destroy, &%C%); %I%=R_GlobalEnv; /* hack to have a non-NULL value */ OUTCONV: @@ -882,14 +882,14 @@ MATRIX_COMPLEX: IN: if (!Rf_isNull(%I%)) { Rz_SEXP_to_matrix_complex(%I%, &%C%); } INOUT: |- if (!Rf_isNull(%I%)) { - IGRAPH_R_CHECK(Rz_SEXP_to_matrix_complex_copy(%I%, &%C%)); + IGRAPH_LOCAL_R_CHECK(Rz_SEXP_to_matrix_complex_copy(%I%, &%C%)); } else { - IGRAPH_R_CHECK(igraph_matrix_complex_init(&%C%, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_complex_init(&%C%, 0, 0)); } IGRAPH_LOCAL_FINALLY(igraph_matrix_complex_destroy, &%C%); %I%=NEW_NUMERIC(0); OUT: |- - IGRAPH_R_CHECK(igraph_matrix_complex_init(&%C%, 0, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_matrix_complex_init(&%C%, 0, 0)); IGRAPH_LOCAL_FINALLY(igraph_matrix_complex_destroy, &%C%); %I%=R_GlobalEnv; /* hack to have a non-NULL value */ OUTCONV: @@ -923,7 +923,7 @@ SIR_LIST: CTYPE: igraph_vector_ptr_t INCONV: OUT: |- - IGRAPH_R_CHECK(igraph_vector_ptr_init(&%C%, 0)); + IGRAPH_LOCAL_R_CHECK(igraph_vector_ptr_init(&%C%, 0)); IGRAPH_LOCAL_FINALLY(Ry_igraph_sirlist_destroy, &%C%); OUTCONV: OUT: |-