static inline void report (char *s, check_ctx_t *ctx, int g, int i, int *v, transition_info_t *ti) { Printf (lerror, "\n\n%s: %d X %d (group X slot)\n\n\n", s, g, i); print_ti (ctx, ti); Printf (lerror, "\n %s\n \tX\n %s\n \n ", str_group (ctx, g), str_slot (ctx, v, i)); HREabort (LTSMIN_EXIT_FAILURE); }
void mark_predicate (model_t m, ltsmin_expr_t e, int *dep, ltsmin_parse_env_t env) { if (!e) return; switch(e->node_type) { case BINARY_OP: mark_predicate(m,e->arg1,dep,env); mark_predicate(m,e->arg2,dep,env); break; case UNARY_OP: mark_predicate(m,e->arg1,dep,env); break; default: switch(e->token) { case PRED_TRUE: case PRED_FALSE: case PRED_NUM: case PRED_VAR: case PRED_CHUNK: break; case PRED_EQ: mark_predicate(m,e->arg1, dep,env); mark_predicate(m,e->arg2, dep,env); break; case PRED_SVAR: { lts_type_t ltstype = GBgetLTStype(m); int N = lts_type_get_state_length (ltstype); if (e->idx < N) { // state variable dep[e->idx] = 1; } else { // state label HREassert (e->idx < N + lts_type_get_state_label_count(ltstype)); matrix_t *sl = GBgetStateLabelInfo (m); HREassert (N == dm_ncols(sl)); for (int i = 0; i < N; i++) { if (dm_is_set(sl, e->idx - N, i)) dep[i] = 1; } } break; } default: LTSminLogExpr (error, "Unhandled predicate expression: ", e, env); HREabort (LTSMIN_EXIT_FAILURE); } break; } }
void mark_visible(model_t model, ltsmin_expr_t e, ltsmin_parse_env_t env) { int *visibility = GBgetPorGroupVisibility (model); HREassert (visibility != NULL, "POR layer present, but no visibility info found."); if (!e) return; switch(e->node_type) { case BINARY_OP: mark_visible(model,e->arg1,env); mark_visible(model,e->arg2,env); break; case UNARY_OP: mark_visible(model,e->arg1,env); break; default: switch(e->token) { case PRED_TRUE: case PRED_FALSE: case PRED_NUM: case PRED_VAR: case PRED_CHUNK: break; case PRED_EQ: mark_visible(model, e->arg1,env); mark_visible(model, e->arg2,env); break; case PRED_SVAR: { int N = pins_get_state_variable_count (model); if (e->idx < N) { pins_add_state_variable_visible (model, e->idx); } else { // state label HREassert (e->idx < N + (int)pins_get_state_label_count(model)); pins_add_state_label_visible (model, e->idx - N); } } break; default: LTSminLogExpr (error, "Unhandled predicate expression: ", e, env); HREabort (LTSMIN_EXIT_FAILURE); } break; } }