use b_plain use cz/vars use cz/resolve_deps use cz/compile hashtable *cz_includes_already vec *c_include cz_includes() NEW(cz_includes_already, hashtable, cstr_hash, cstr_eq, 53) NEW(c_include, vec, key_value, 32) vec *uses = resolve_deps_init_uses() vec_append(uses, includes) vec_free(includes) includes = uses do_includes() for_vec(i, c_include, key_value) cstr cmd = i->v ? "export" : "use" vec_push(includes, fformat("%s %s", cmd, i->k)) hashtable_free(cz_includes_already) vec_free(c_include) do_includes() cz_parse_t save cz_parse_save(&save) new(includes, vec, cstr, 64) for_vec(include1, save.includes, cstr) vecclr(includes) resolve_include(includes, *include1) for_vec(include, includes, cstr) cstr file = strchr(*include, ' ') *file++ = '\0' sh_unquote(file) if !already(cz_includes_already, file) cstr suffix = strrchr(file, '.') if suffix && (cstr_eq(suffix, ".bh") || cstr_eq(suffix, ".bbh")) if cz_standalone # lose the 'h' cstr_chop(suffix) include_file(file) else key_value *kv = vec_push(c_include) kv->k = file kv->v = (void*)(intptr_t)(**include == 'e') # use or export vecclr(save.includes) cz_parse_append_saved(&save) include_file(cstr file) # this might be inefficient! cz_parse_t save cz_parse_save(&save) if !is_file(file) error("could not find include file: %s", file) cstr suffix = strrchr(file, '.') cxx_using_c_lib = cz_lang == LANG_CXX && suffix && cstr_eq(suffix, ".bh") read_lines(lines, file) boolean is_header = !suffix || suffix[strlen(suffix)-1] == 'h' if is_header cz_parse() else b2b0() cxx_using_c_lib = 0 do_includes() cz_parse_prepend_saved(&save) #list_includes_structs() # for_vec(line, includes, cstr) # warn("%s", *line) # warn("") # for_vec(lines, structs_unions_classes_templates, vec*) # cstr l0 = *(cstr*)vec0(*lines) # warn("%s", l0) # warn("")