bool cct_check_args_eq(const char *file, int line, const char *expression, struct args *expected, struct args *actual, bool free1, bool free2) { bool result; if (expected && actual && args_equal(actual, expected)) { cct_check_passed(file, line, expression); result = true; } else { char *exp_str = expected ? args_to_string(expected) : x_strdup("(null)"); char *act_str = actual ? args_to_string(actual) : x_strdup("(null)"); cct_check_failed(file, line, expression, exp_str, act_str); free(exp_str); free(act_str); result = false; } if (free1) { args_free(expected); } if (free2) { args_free(actual); } return result; }
bool expr_handler::ops_equal(const alu_node *l, const alu_node* r) { const bc_alu &b0 = l->bc; const bc_alu &b1 = r->bc; if (b0.op != b1.op) return false; unsigned src_count = b0.op_ptr->src_count; if (b0.index_mode != b1.index_mode) return false; if (b0.clamp != b1.clamp || b0.omod != b1.omod) return false; for (unsigned s = 0; s < src_count; ++s) { const bc_alu_src &s0 = b0.src[s]; const bc_alu_src &s1 = b1.src[s]; if (s0.abs != s1.abs || s0.neg != s1.neg) return false; } return args_equal(l->src, r->src); }