void kill_corrupt() { if (local_type() != internal_type) { log_client_abort(error_client_type); isolate_client(); } if (is_server()) { log_client_abort(error_client_server); isolate_client(); } }
inline static void apply(local_type& L) { L = local_type(); }
permission_mask get_client_type() { return local_type(); }
constant_type_t node_type(node_t*n, model_t*m) { switch(node_get_opcode(n)) { case opcode_node_arg_max: case opcode_node_arg_max_i: case opcode_node_array_arg_max_i: case opcode_node_inc_array_at_pos: case opcode_node_int: case opcode_node_inclocal: return CONSTANT_INT; case opcode_node_nop: case opcode_node_debug_print: case opcode_node_missing: case opcode_node_for_local_from_n_to_m: case opcode_node_sort_float_array_asc: return CONSTANT_MISSING; case opcode_node_in: case opcode_node_not: case opcode_node_lt: case opcode_node_lte: case opcode_node_gt: case opcode_node_gte: case opcode_node_bool: case opcode_node_equals: return CONSTANT_BOOL; case opcode_node_bool_to_float: case opcode_node_float: case opcode_node_term_frequency: return CONSTANT_FLOAT; case opcode_node_category: return CONSTANT_CATEGORY; case opcode_node_int_array: return CONSTANT_INT_ARRAY; case opcode_node_category_array: return CONSTANT_CATEGORY_ARRAY; case opcode_node_float_array: return CONSTANT_FLOAT_ARRAY; case opcode_node_string_array: return CONSTANT_STRING_ARRAY; case opcode_node_mixed_array: return CONSTANT_MIXED_ARRAY; case opcode_node_zero_int_array: return CONSTANT_INT_ARRAY; case opcode_node_zero_float_array: return CONSTANT_FLOAT_ARRAY; case opcode_node_string: return CONSTANT_STRING; case opcode_node_constant: return n->value.type; case opcode_node_return: /* strictly speaking, this node doesn't have a "type" at all (since it causes evaluation to terminate), but in order to make node_type(root) do the right thing, we treat it as if it would cascade its value up the tree */ return node_type(n->child[0],m); case opcode_node_brackets: case opcode_node_sqr: case opcode_node_abs: case opcode_node_neg: case opcode_node_exp: case opcode_node_add: case opcode_node_sub: case opcode_node_mul: case opcode_node_div: case opcode_node_setlocal: return node_type(n->child[0],m); case opcode_node_block: return node_type(n->child[n->num_children-1],m); case opcode_node_if: return node_type(n->child[1],m); case opcode_node_set_array_at_pos: return node_type(n->child[2],m); case opcode_node_array_at_pos: return node_array_element_type(n->child[0]); case opcode_node_param: return model_param_type(m, n->value.i); case opcode_node_getlocal: return local_type(node_find_root(n), n->value.i, m); default: fprintf(stderr, "Couldn't do type deduction for ast node %s\n", n->type->name); return CONSTANT_MISSING; } }