本文整理汇总了C++中ponyint_pool_free_size函数的典型用法代码示例。如果您正苦于以下问题:C++ ponyint_pool_free_size函数的具体用法?C++ ponyint_pool_free_size怎么用?C++ ponyint_pool_free_size使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了ponyint_pool_free_size函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: make_trait_list
static LLVMValueRef make_trait_list(compile_t* c, reach_type_t* t,
uint32_t* final_count)
{
// The list is an array of integers.
uint32_t* tid;
size_t tid_size;
uint32_t count = trait_count(t, &tid, &tid_size);
// If we have no traits, return a null pointer to a list.
if(count == 0)
return LLVMConstNull(LLVMPointerType(LLVMArrayType(c->i32, 0), 0));
// Create a constant array of trait identifiers.
size_t list_size = count * sizeof(LLVMValueRef);
LLVMValueRef* list = (LLVMValueRef*)ponyint_pool_alloc_size(list_size);
for(uint32_t i = 0; i < count; i++)
list[i] = LLVMConstInt(c->i32, tid[i], false);
LLVMValueRef trait_array = LLVMConstArray(c->i32, list, count);
// Create a global to hold the array.
const char* name = genname_traitlist(t->name);
LLVMTypeRef list_type = LLVMArrayType(c->i32, count);
LLVMValueRef global = LLVMAddGlobal(c->module, list_type, name);
LLVMSetGlobalConstant(global, true);
LLVMSetLinkage(global, LLVMPrivateLinkage);
LLVMSetInitializer(global, trait_array);
ponyint_pool_free_size(tid_size, tid);
ponyint_pool_free_size(list_size, list);
*final_count = count;
return global;
}
示例2: gen_tuple
LLVMValueRef gen_tuple(compile_t* c, ast_t* ast)
{
ast_t* child = ast_child(ast);
if(ast_sibling(child) == NULL)
return gen_expr(c, child);
deferred_reification_t* reify = c->frame->reify;
ast_t* type = deferred_reify(reify, ast_type(ast), c->opt);
// If we contain '_', we have no usable value.
if(contains_dontcare(type))
{
ast_free_unattached(type);
return GEN_NOTNEEDED;
}
reach_type_t* t = reach_type(c->reach, type);
compile_type_t* c_t = (compile_type_t*)t->c_type;
int count = LLVMCountStructElementTypes(c_t->primitive);
size_t buf_size = count * sizeof(LLVMTypeRef);
LLVMTypeRef* elements = (LLVMTypeRef*)ponyint_pool_alloc_size(buf_size);
LLVMGetStructElementTypes(c_t->primitive, elements);
LLVMValueRef tuple = LLVMGetUndef(c_t->primitive);
int i = 0;
while(child != NULL)
{
LLVMValueRef value = gen_expr(c, child);
if(value == NULL)
{
ponyint_pool_free_size(buf_size, elements);
return NULL;
}
// We'll have an undefined element if one of our source elements is a
// variable declaration. This is ok, since the tuple value will never be
// used.
if(value == GEN_NOVALUE || value == GEN_NOTNEEDED)
{
ponyint_pool_free_size(buf_size, elements);
return value;
}
ast_t* child_type = deferred_reify(reify, ast_type(child), c->opt);
value = gen_assign_cast(c, elements[i], value, child_type);
ast_free_unattached(child_type);
tuple = LLVMBuildInsertValue(c->builder, tuple, value, i++, "");
child = ast_sibling(child);
}
ponyint_pool_free_size(buf_size, elements);
return tuple;
}
示例3: ponyint_sched_shutdown
static void ponyint_sched_shutdown()
{
uint32_t start;
start = 0;
for(uint32_t i = start; i < scheduler_count; i++)
ponyint_thread_join(scheduler[i].tid);
DTRACE0(RT_END);
ponyint_cycle_terminate(&scheduler[0].ctx);
for(uint32_t i = 0; i < scheduler_count; i++)
{
while(ponyint_messageq_pop(&scheduler[i].mq) != NULL);
ponyint_messageq_destroy(&scheduler[i].mq);
ponyint_mpmcq_destroy(&scheduler[i].q);
}
ponyint_pool_free_size(scheduler_count * sizeof(scheduler_t), scheduler);
scheduler = NULL;
scheduler_count = 0;
ponyint_mpmcq_destroy(&inject);
}
示例4: print_params
static void print_params(compile_t* c, printbuf_t* buf, ast_t* params)
{
ast_t* param = ast_child(params);
while(param != NULL)
{
AST_GET_CHILDREN(param, id, ptype);
// Print the parameter.
printbuf(buf, ", ");
print_type_name(c, buf, ptype);
// Smash trailing primes to underscores.
const char* name = ast_name(id);
size_t len = strlen(name) + 1;
size_t buf_size = len;
char* buffer = (char*)ponyint_pool_alloc_size(buf_size);
memcpy(buffer, name, len);
len--;
while(buffer[--len] == '\'')
buffer[len] = '_';
printbuf(buf, " %s", buffer);
param = ast_sibling(param);
ponyint_pool_free_size(buf_size, buffer);
}
}
示例5: tuple_indices_destroy
static void tuple_indices_destroy(call_tuple_indices_t* ti)
{
ponyint_pool_free_size(ti->alloc * sizeof(size_t), ti->data);
ti->data = NULL;
ti->count = 0;
ti->alloc = 0;
}
示例6: gendesc_table
void gendesc_table(compile_t* c)
{
uint32_t len = c->reach->next_type_id;
size_t size = len * sizeof(LLVMValueRef);
LLVMValueRef* args = (LLVMValueRef*)ponyint_pool_alloc_size(size);
reach_type_t* t;
size_t i = HASHMAP_BEGIN;
while((t = reach_types_next(&c->reach->types, &i)) != NULL)
{
LLVMValueRef desc;
if(t->desc != NULL)
desc = LLVMBuildBitCast(c->builder, t->desc, c->descriptor_ptr, "");
else
desc = LLVMConstNull(c->descriptor_ptr);
args[t->type_id] = desc;
}
LLVMTypeRef type = LLVMArrayType(c->descriptor_ptr, len);
LLVMValueRef table = LLVMAddGlobal(c->module, type, "__DescTable");
LLVMValueRef value = LLVMConstArray(c->descriptor_ptr, args, len);
LLVMSetInitializer(table, value);
LLVMSetGlobalConstant(table, true);
LLVMValueRef table_size = LLVMAddGlobal(c->module, c->intptr,
"__DescTableSize");
LLVMSetInitializer(table_size, LLVMConstInt(c->intptr, len, false));
LLVMSetGlobalConstant(table_size, true);
ponyint_pool_free_size(size, args);
}
示例7: doc_rm_star
// Delete all the files in the specified directory
static void doc_rm_star(const char* path)
{
assert(path != NULL);
PONY_ERRNO err;
PONY_DIR* dir = pony_opendir(path, &err);
if(dir == NULL)
return;
PONY_DIRINFO* result;
while((result = pony_dir_entry_next(dir)) != NULL)
{
char* name = pony_dir_info_name(result);
if(strcmp(name, ".") != 0 && strcmp(name, "..") != 0)
{
// Delete this file
size_t buf_len;
char* buf = doc_cat(path, name, "", "", "", &buf_len);
#ifdef PLATFORM_IS_WINDOWS
DeleteFile(buf);
#else
remove(buf);
#endif
ponyint_pool_free_size(buf_len, buf);
}
}
pony_closedir(dir);
}
示例8: package_group_free
void package_group_free(package_group_t* group)
{
if(group->signature != NULL)
ponyint_pool_free_size(SIGNATURE_LENGTH, group->signature);
package_set_destroy(&group->members);
POOL_FREE(package_group_t, group);
}
示例9: generate_docs
void generate_docs(ast_t* program, pass_opt_t* options)
{
assert(program != NULL);
if(ast_id(program) != TK_PROGRAM)
return;
docgen_t docgen;
docgen.errors = options->check.errors;
doc_setup_dirs(&docgen, program, options);
// Open the index and home files
docgen.index_file = doc_open_file(&docgen, false, "mkdocs", ".yml");
docgen.home_file = doc_open_file(&docgen, true, "index", ".md");
docgen.type_file = NULL;
// Write documentation files
if(docgen.index_file != NULL && docgen.home_file != NULL)
{
ast_t* package = ast_child(program);
const char* name = package_filename(package);
fprintf(docgen.home_file, "Packages\n\n");
fprintf(docgen.index_file, "site_name: %s\n", name);
fprintf(docgen.index_file, "theme: readthedocs\n");
fprintf(docgen.index_file, "pages:\n");
fprintf(docgen.index_file, "- %s: index.md\n", name);
doc_packages(&docgen, program);
}
// Tidy up
if(docgen.index_file != NULL)
fclose(docgen.index_file);
if(docgen.home_file != NULL)
fclose(docgen.home_file);
if(docgen.base_dir != NULL)
ponyint_pool_free_size(docgen.base_dir_buf_len, (void*)docgen.base_dir);
if(docgen.sub_dir != NULL)
ponyint_pool_free_size(docgen.sub_dir_buf_len, (void*)docgen.sub_dir);
}
示例10: program_free
void program_free(program_t* program)
{
pony_assert(program != NULL);
package_group_list_free(program->package_groups);
if(program->signature != NULL)
ponyint_pool_free_size(SIGNATURE_LENGTH, program->signature);
strlist_free(program->libpaths);
strlist_free(program->libs);
if(program->lib_args != NULL)
ponyint_pool_free_size(program->lib_args_alloced, program->lib_args);
POOL_FREE(program_t, program);
}
示例11: doc_package_home
// Write the given package home page to its own file
static void doc_package_home(docgen_t* docgen,
ast_t* package,
ast_t* doc_string)
{
assert(docgen != NULL);
assert(docgen->index_file != NULL);
assert(docgen->home_file != NULL);
assert(docgen->package_file == NULL);
assert(docgen->test_types == NULL);
assert(docgen->public_types == NULL);
assert(docgen->private_types == NULL);
assert(docgen->type_file == NULL);
assert(package != NULL);
assert(ast_id(package) == TK_PACKAGE);
// First open a file
size_t tqfn_len;
char* tqfn = write_tqfn(package, "-index", &tqfn_len);
// Package group
fprintf(docgen->index_file, "- package %s:\n",
package_qualified_name(package));
docgen->type_file = doc_open_file(docgen, true, tqfn, ".md");
if(docgen->type_file == NULL)
return;
// Add reference to new file to index file
fprintf(docgen->index_file, " - Package: \"%s.md\"\n", tqfn);
// Add reference to package to home file
fprintf(docgen->home_file, "* [%s](%s)\n", package_qualified_name(package),
tqfn);
// Now we can write the actual documentation for the package
if(doc_string != NULL)
{
assert(ast_id(doc_string) == TK_STRING);
fprintf(docgen->type_file, "%s", ast_name(doc_string));
}
else
{
fprintf(docgen->type_file, "No package doc string provided for %s.",
package_qualified_name(package));
}
ponyint_pool_free_size(tqfn_len, tqfn);
docgen->test_types = printbuf_new();
docgen->public_types = printbuf_new();
docgen->private_types = printbuf_new();
docgen->package_file = docgen->type_file;
docgen->type_file = NULL;
}
示例12: source_close
void source_close(source_t* source)
{
if(source == NULL)
return;
if(source->m != NULL)
ponyint_pool_free_size(source->len, source->m);
POOL_FREE(source_t, source);
}
示例13: destroy_large
static void destroy_large(chunk_t* chunk, uint32_t mark)
{
(void)mark;
large_pagemap(chunk->m, chunk->size, NULL);
if(chunk->m != NULL)
ponyint_pool_free_size(chunk->size, chunk->m);
POOL_FREE(chunk_t, chunk);
}
示例14: reach_mangled_free
static void reach_mangled_free(reach_method_t* m)
{
ast_free(m->typeargs);
ast_free(m->r_fun);
if(m->param_count > 0)
ponyint_pool_free_size(m->param_count * sizeof(reach_param_t), m->params);
POOL_FREE(reach_method_t, m);
}
示例15: tuple_indices_push
static void tuple_indices_push(call_tuple_indices_t* ti, size_t idx)
{
if(ti->count == ti->alloc)
{
size_t* tmp_data =
(size_t*)ponyint_pool_alloc_size(2 * ti->alloc * sizeof(size_t));
memcpy(tmp_data, ti->data, ti->count * sizeof(size_t));
ponyint_pool_free_size(ti->alloc * sizeof(size_t), ti->data);
ti->alloc *= 2;
ti->data = tmp_data;
}
ti->data[ti->count++] = idx;
}