int ud_init (struct udoc *ud) { bin_zero (ud, sizeof (*ud)); if (!ud_oht_init (&ud->ud_parts, sizeof (struct ud_part))) goto FAIL; if (!ud_oht_init (&ud->ud_link_exts, sizeof (struct ud_ref))) goto FAIL; if (!ud_oht_init (&ud->ud_refs, sizeof (struct ud_ref))) goto FAIL; if (!ud_oht_init (&ud->ud_ref_names, sizeof (struct ud_ref))) goto FAIL; if (!ud_oht_init (&ud->ud_footnotes, sizeof (struct ud_ref))) goto FAIL; if (!ud_oht_init (&ud->ud_styles, sizeof (struct ud_ref))) goto FAIL; if (!dstack_init (&ud->ud_errors, 16, sizeof (struct ud_err))) goto FAIL; if (!token_init (&ud->ud_tok)) goto FAIL; ud->ud_dirfd_pwd = open_ro ("."); if (ud->ud_dirfd_pwd == -1) goto FAIL; ud->ud_dirfd_src = -1; ud->ud_dirfd_out = -1; ud->ud_main_doc = ud; ud->ud_cur_doc = ud; if (!ht_init (&ud->ud_loopchecks)) goto FAIL; if (!ht_init (&ud->ud_documents)) goto FAIL; taia_now (&ud->ud_time_start); return 1; FAIL: ud_free (ud); return 0; }
static void ud_row_width (struct udoc *ud, const struct ud_node_list *list, struct ud_table *udt) { static const struct ud_tree_ctx_funcs measure_funcs = { .utcf_string = ud_column_string, }; struct ud_tree_ctx tree_ctx; struct ud_tree_ctx_state state; bin_zero (&tree_ctx, sizeof (tree_ctx)); bin_zero (&state, sizeof (state)); state.utc_list = list; state.utc_user_data = udt; tree_ctx.utc_funcs = &measure_funcs; tree_ctx.utc_state = &state; ud_tree_walk (ud, &tree_ctx); }
void ud_table_measure (struct udoc *ud, const struct ud_node_list *list, struct ud_table *udt) { const struct ud_node *n = list->unl_head; int top = 1; bin_zero (udt, sizeof (*udt)); for (;;) { if (n->un_type == UDOC_TYPE_LIST) { ++udt->ut_rows; ud_row_measure (ud, &n->un_data.un_list, udt); if (top) { ud_row_width (ud, &n->un_data.un_list, udt); top = 0; } } if (n->un_next) n = n->un_next; else break; } }
void cvc_convt::convert_address_of_rec(const exprt &expr) { if(expr.id()==ID_symbol || expr.id()==ID_constant || expr.id()==ID_string_constant) { out << "(# object:=" << pointer_logic.add_object(expr) << ", offset:=" << bin_zero(config.ansi_c.pointer_width) << " #)"; } else if(expr.id()==ID_index) { if(expr.operands().size()!=2) throw "index takes two operands"; const exprt &array=expr.op0(); const exprt &index=expr.op1(); if(index.is_zero()) { if(array.type().id()==ID_pointer) convert_expr(array); else if(array.type().id()==ID_array) convert_address_of_rec(array); else assert(false); } else { out << "(LET P: "; out << cvc_pointer_type(); out << " = "; if(array.type().id()==ID_pointer) convert_expr(array); else if(array.type().id()==ID_array) convert_address_of_rec(array); else assert(false); out << " IN P WITH .offset:=BVPLUS(" << config.ansi_c.pointer_width << ", P.offset, "; convert_expr(index); out << "))"; } } else if(expr.id()==ID_member) { if(expr.operands().size()!=1) throw "member takes one operand"; const exprt &struct_op=expr.op0(); out << "(LET P: "; out << cvc_pointer_type(); out << " = "; convert_address_of_rec(struct_op); const irep_idt &component_name= to_member_expr(expr).get_component_name(); mp_integer offset=member_offset( to_struct_type(struct_op.type()), component_name, ns); typet index_type(ID_unsignedbv); index_type.set(ID_width, config.ansi_c.pointer_width); exprt index=from_integer(offset, index_type); out << " IN P WITH .offset:=BVPLUS(" << config.ansi_c.pointer_width << ", P.offset, "; convert_expr(index); out << "))"; } else throw "don't know how to take address of: "+expr.id_string(); }
void dir_walk_init(struct dir_walk *dw) { bin_zero(dw, sizeof(struct dir_walk)); sstring_init(&dw->path, dw->pbuf, sizeof(dw->pbuf)); }
void dir_hash_init(struct dir_hash *dh) { dir_array_init(&dh->da); bin_zero(&dh->tab, DIR_HASH_BUCKETS * sizeof(struct dir_hash_tnode *)); }
void dplib_convt::convert_dplib_expr(const exprt &expr) { if(expr.id()==ID_symbol) { convert_identifier(expr.get_string(ID_identifier)); } else if(expr.id()==ID_nondet_symbol) { convert_identifier("nondet$"+expr.get_string(ID_identifier)); } else if(expr.id()==ID_typecast) { assert(expr.operands().size()==1); const exprt &op=expr.op0(); if(expr.type().id()==ID_bool) { if(op.type().id()==ID_signedbv || op.type().id()==ID_unsignedbv || op.type().id()==ID_pointer) { convert_dplib_expr(op); dplib_prop.out << "/="; convert_dplib_expr(gen_zero(op.type())); } else { throw "TODO typecast1 "+op.type().id_string()+" -> bool"; } } else if(expr.type().id()==ID_signedbv || expr.type().id()==ID_unsignedbv) { unsigned to_width=unsafe_string2unsigned(id2string(expr.type().get(ID_width))); if(op.type().id()==ID_signedbv) { unsigned from_width=unsafe_string2unsigned(id2string(op.type().get(ID_width))); if(from_width==to_width) convert_dplib_expr(op); else if(from_width<to_width) { dplib_prop.out << "SX("; convert_dplib_expr(op); dplib_prop.out << ", " << to_width << ")"; } else { dplib_prop.out << "("; convert_dplib_expr(op); dplib_prop.out << ")[" << (to_width-1) << ":0]"; } } else if(op.type().id()==ID_unsignedbv) { unsigned from_width=unsafe_string2unsigned(id2string(op.type().get(ID_width))); if(from_width==to_width) convert_dplib_expr(op); else if(from_width<to_width) { dplib_prop.out << "(0bin"; for(unsigned i=from_width; i<to_width; i++) dplib_prop.out << "0"; dplib_prop.out << " @ "; dplib_prop.out << "("; convert_dplib_expr(op); dplib_prop.out << "))"; } else { dplib_prop.out << "("; convert_dplib_expr(op); dplib_prop.out << ")[" << (to_width-1) << ":0]"; } } else if(op.type().id()==ID_bool) { if(to_width>1) { dplib_prop.out << "(0bin"; for(unsigned i=1; i<to_width; i++) dplib_prop.out << "0"; dplib_prop.out << " @ "; dplib_prop.out << "IF "; convert_dplib_expr(op); dplib_prop.out << " THEN 0bin1 ELSE 0bin0 ENDIF)"; } else { dplib_prop.out << "IF "; convert_dplib_expr(op); dplib_prop.out << " THEN 0bin1 ELSE 0bin0 ENDIF"; } } else { throw "TODO typecast2 "+op.type().id_string()+ " -> "+expr.type().id_string(); } } else if(expr.type().id()==ID_pointer) { if(op.type().id()==ID_pointer) { convert_dplib_expr(op); } else throw "TODO typecast3 "+op.type().id_string()+" -> pointer"; } else throw "TODO typecast4 ? -> "+expr.type().id_string(); } else if(expr.id()==ID_struct) { dplib_prop.out << "(# "; const struct_typet &struct_type=to_struct_type(expr.type()); const struct_typet::componentst &components= struct_type.components(); assert(components.size()==expr.operands().size()); unsigned i=0; for(struct_typet::componentst::const_iterator it=components.begin(); it!=components.end(); it++, i++) { if(i!=0) dplib_prop.out << ", "; dplib_prop.out << it->get(ID_name); dplib_prop.out << ":="; convert_dplib_expr(expr.operands()[i]); } dplib_prop.out << " #)"; } else if(expr.id()==ID_constant) { if(expr.type().id()==ID_unsignedbv || expr.type().id()==ID_signedbv || expr.type().id()==ID_bv) { dplib_prop.out << "0bin" << expr.get(ID_value); } else if(expr.type().id()==ID_pointer) { const irep_idt &value=expr.get(ID_value); if(value=="NULL") { dplib_prop.out << "(# object:=" << pointer_logic.get_null_object() << ", offset:=" << bin_zero(config.ansi_c.pointer_width) << " #)"; } else throw "unknown pointer constant: "+id2string(value); } else if(expr.type().id()==ID_bool) { if(expr.is_true()) dplib_prop.out << "TRUE"; else if(expr.is_false()) dplib_prop.out << "FALSE"; else throw "unknown boolean constant"; } else if(expr.type().id()==ID_array) { dplib_prop.out << "ARRAY (i: " << array_index_type() << "):"; assert(!expr.operands().empty()); unsigned i=0; forall_operands(it, expr) { if(i==0) dplib_prop.out << "\n IF "; else dplib_prop.out << "\n ELSIF "; dplib_prop.out << "i=" << array_index(i) << " THEN "; convert_array_value(*it); i++; } dplib_prop.out << "\n ELSE "; convert_dplib_expr(expr.op0()); dplib_prop.out << "\n ENDIF"; } else if(expr.type().id()==ID_integer ||