本文整理汇总了C++中ponyint_pool_alloc_size函数的典型用法代码示例。如果您正苦于以下问题:C++ ponyint_pool_alloc_size函数的具体用法?C++ ponyint_pool_alloc_size怎么用?C++ ponyint_pool_alloc_size使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了ponyint_pool_alloc_size函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: add_rmethod_to_subtype
static void add_rmethod_to_subtype(reach_t* r, reach_type_t* t,
reach_method_name_t* n, reach_method_t* m, pass_opt_t* opt)
{
// Add the method to the type if it isn't already there.
reach_method_name_t* n2 = add_method_name(t, n->name);
add_rmethod(r, t, n2, m->cap, m->typeargs, opt);
// Add this mangling to the type if it isn't already there.
reach_method_t* mangled = reach_mangled_get(&n2->r_mangled, m);
if(mangled != NULL)
return;
mangled = POOL_ALLOC(reach_method_t);
memset(mangled, 0, sizeof(reach_method_t));
mangled->name = m->name;
mangled->mangled_name = m->mangled_name;
mangled->full_name = make_full_name(t, mangled);
mangled->cap = m->cap;
mangled->r_fun = ast_dup(m->r_fun);
mangled->typeargs = ast_dup(m->typeargs);
mangled->forwarding = true;
mangled->param_count = m->param_count;
mangled->params = (reach_param_t*)ponyint_pool_alloc_size(
mangled->param_count * sizeof(reach_param_t));
memcpy(mangled->params, m->params, m->param_count * sizeof(reach_param_t));
mangled->result = m->result;
// Add to the mangled table only.
reach_mangled_put(&n2->r_mangled, mangled);
}
开发者ID:Sendence,项目名称:ponyc,代码行数:34,代码来源:reach.c
示例2: remove_ext
// https://stackoverflow.com/questions/2736753/how-to-remove-extension-from-file-name
// remove_ext: removes the "extension" from a file spec.
// path is the string to process.
// dot is the extension separator.
// sep is the path separator (0 means to ignore).
// Returns an allocated string identical to the original but
// with the extension removed. It must be freed when you're
// finished with it.
// If you pass in NULL or the new string can't be allocated,
// it returns NULL.
char* remove_ext(const char* path, char dot, char sep, size_t* allocated_size)
{
char *retstr, *lastdot, *lastsep;
// Error checks and allocate string.
if (path == NULL)
return NULL;
*allocated_size = strlen(path) + 1;
retstr = (char*) ponyint_pool_alloc_size(*allocated_size);
// Make a copy and find the relevant characters.
strcpy(retstr, path);
lastdot = strrchr(retstr, dot);
lastsep = (sep == 0) ? NULL : strrchr(retstr, sep);
// If it has an extension separator.
if (lastdot != NULL) {
// and it's before the extension separator.
if (lastsep != NULL) {
if (lastsep < lastdot) {
// then remove it.
*lastdot = '\0';
}
}
else {
// Has extension separator with no path separator.
*lastdot = '\0';
}
}
// Return the modified string.
return retstr;
}
开发者ID:Theodus,项目名称:ponyc,代码行数:43,代码来源:paths.c
示例3: set_method_types
static void set_method_types(reach_t* r, reach_method_t* m,
pass_opt_t* opt)
{
AST_GET_CHILDREN(m->r_fun, cap, id, typeparams, params, result, can_error,
body);
m->param_count = ast_childcount(params);
m->params = (reach_param_t*)ponyint_pool_alloc_size(
m->param_count * sizeof(reach_param_t));
ast_t* param = ast_child(params);
size_t i = 0;
while(param != NULL)
{
AST_GET_CHILDREN(param, p_id, p_type);
m->params[i].type = add_type(r, p_type, opt);
if(ast_id(p_type) != TK_NOMINAL && ast_id(p_type) != TK_TYPEPARAMREF)
m->params[i].cap = TK_REF;
else
m->params[i].cap = ast_id(cap_fetch(p_type));
++i;
param = ast_sibling(param);
}
m->result = add_type(r, result, opt);
}
开发者ID:Sendence,项目名称:ponyc,代码行数:27,代码来源:reach.c
示例4: doc_cat
// Cat together the given strings into a newly allocated buffer.
// Any unneeded strings should be passed as "", not NULL.
// The returned buffer must be freed with ponyint_pool_free_size() when
// no longer needed.
// The out_buf_size parameter returns the size of the buffer (which is needed
// for freeing), not the length of the string.
static char* doc_cat(const char* a, const char* b, const char* c,
const char* d, const char* e, size_t* out_buf_size)
{
assert(a != NULL);
assert(b != NULL);
assert(c != NULL);
assert(d != NULL);
assert(e != NULL);
assert(out_buf_size != NULL);
size_t a_len = strlen(a);
size_t b_len = strlen(b);
size_t c_len = strlen(c);
size_t d_len = strlen(d);
size_t e_len = strlen(e);
size_t buf_len = a_len + b_len + c_len + d_len + e_len + 1;
char* buffer = (char*)ponyint_pool_alloc_size(buf_len);
char *p = buffer;
if(a_len > 0) { memcpy(p, a, a_len); p += a_len; }
if(b_len > 0) { memcpy(p, b, b_len); p += b_len; }
if(c_len > 0) { memcpy(p, c, c_len); p += c_len; }
if(d_len > 0) { memcpy(p, d, d_len); p += d_len; }
if(e_len > 0) { memcpy(p, e, e_len); p += e_len; }
*(p++) = '\0';
assert(p == (buffer + buf_len));
*out_buf_size = buf_len;
return buffer;
}
开发者ID:JamesLinus,项目名称:ponyc,代码行数:38,代码来源:docgen.c
示例5: 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);
}
}
开发者ID:Preetam,项目名称:ponyc,代码行数:30,代码来源:genheader.c
示例6: 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;
}
开发者ID:npruehs,项目名称:ponyc,代码行数:35,代码来源:gendesc.c
示例7: pony_serialise
void pony_serialise(pony_ctx_t* ctx, void* p, void* out)
{
// This can raise an error.
assert(ctx->stack == NULL);
ctx->trace_object = ponyint_serialise_object;
ctx->trace_actor = ponyint_serialise_actor;
ctx->serialise_size = 0;
pony_traceunknown(ctx, p, PONY_TRACE_MUTABLE);
ponyint_gc_handlestack(ctx);
ponyint_array_t* r = (ponyint_array_t*)out;
r->size = ctx->serialise_size;
r->alloc = r->size;
r->ptr = (char*)ponyint_pool_alloc_size(r->size);
size_t i = HASHMAP_BEGIN;
serialise_t* s;
while((s = ponyint_serialise_next(&ctx->serialise, &i)) != NULL)
{
if(s->t != NULL)
s->t->serialise(ctx, (void*)s->key, r->ptr, s->value, s->mutability);
}
serialise_cleanup(ctx);
}
开发者ID:enigma,项目名称:ponyc,代码行数:27,代码来源:serialise.c
示例8: 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);
}
开发者ID:npruehs,项目名称:ponyc,代码行数:34,代码来源:gendesc.c
示例9: ponyint_sched_init
pony_ctx_t* ponyint_sched_init(uint32_t threads, bool noyield, bool nopin,
bool pinasio)
{
use_yield = !noyield;
// If no thread count is specified, use the available physical core count.
if(threads == 0)
threads = ponyint_cpu_count();
scheduler_count = threads;
scheduler = (scheduler_t*)ponyint_pool_alloc_size(
scheduler_count * sizeof(scheduler_t));
memset(scheduler, 0, scheduler_count * sizeof(scheduler_t));
uint32_t asio_cpu = ponyint_cpu_assign(scheduler_count, scheduler, nopin,
pinasio);
for(uint32_t i = 0; i < scheduler_count; i++)
{
scheduler[i].ctx.scheduler = &scheduler[i];
scheduler[i].last_victim = &scheduler[i];
ponyint_messageq_init(&scheduler[i].mq);
ponyint_mpmcq_init(&scheduler[i].q);
}
this_scheduler = &scheduler[0];
ponyint_mpmcq_init(&inject);
ponyint_asio_init(asio_cpu);
return &scheduler[0].ctx;
}
开发者ID:kelcecil,项目名称:ponyc,代码行数:31,代码来源:scheduler.c
示例10: handle_stack
static void handle_stack(reachable_method_stack_t* s, reachable_types_t* r,
uint32_t* next_type_id)
{
while(s != NULL)
{
reachable_method_t* m;
s = reachable_method_stack_pop(s, &m);
AST_GET_CHILDREN(m->r_fun, cap, id, typeparams, params, result, can_error,
body);
m->param_count = ast_childcount(params);
m->params = (reachable_type_t**)ponyint_pool_alloc_size(
m->param_count * sizeof(reachable_type_t*));
ast_t* param = ast_child(params);
size_t i = 0;
while(param != NULL)
{
AST_GET_CHILDREN(param, p_id, p_type);
m->params[i++] = add_type(&s, r, next_type_id, p_type);
param = ast_sibling(param);
}
m->result = add_type(&s, r, next_type_id, result);
reachable_expr(&s, r, next_type_id, body);
}
}
开发者ID:jersey99,项目名称:ponyc,代码行数:29,代码来源:reach.c
示例11: gen_numeric_size_table
LLVMValueRef gen_numeric_size_table(compile_t* c)
{
uint32_t len = c->reach->numeric_type_count;
if(len == 0)
return NULL;
size_t size = len * sizeof(LLVMValueRef);
LLVMValueRef* args = (LLVMValueRef*)ponyint_pool_alloc_size(size);
uint32_t count = 0;
reach_type_t* t;
size_t i = HASHMAP_BEGIN;
while(count < len)
{
t = reach_types_next(&c->reach->types, &i);
pony_assert(t != NULL);
if(t->is_trait || (t->underlying == TK_STRUCT))
continue;
uint32_t type_id = t->type_id;
if((type_id % 4) == 0)
{
size_t type_size = (size_t)LLVMABISizeOfType(c->target_data, t->use_type);
args[type_id >> 2] = LLVMConstInt(c->i32, type_size, false);
count++;
}
}
开发者ID:killerswan,项目名称:ponyc,代码行数:29,代码来源:genident.c
示例12: symbol_suffix
static const char* symbol_suffix(const char* symbol, size_t suffix)
{
size_t len = strlen(symbol);
size_t buf_size = len + 32;
char* buf = (char*)ponyint_pool_alloc_size(buf_size);
snprintf(buf, buf_size, "%s" __zu, symbol, suffix);
return stringtab_consume(buf, buf_size);
}
开发者ID:dipinhora,项目名称:ponyc,代码行数:9,代码来源:package.c
示例13: 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;
}
开发者ID:dipinhora,项目名称:ponyc,代码行数:57,代码来源:genreference.c
示例14: printbuf_new
printbuf_t* printbuf_new()
{
printbuf_t* buf = POOL_ALLOC(printbuf_t);
buf->m = (char*)ponyint_pool_alloc_size(32);
buf->m[0] = '\0';
buf->size = 32;
buf->offset = 0;
return buf;
}
开发者ID:Perelandric,项目名称:ponyc,代码行数:9,代码来源:printbuf.c
示例15: id_to_string
// Convert the given ID to a hygenic string. The resulting string should not be
// deleted and is valid indefinitely.
static const char* id_to_string(const char* prefix, size_t id)
{
if(prefix == NULL)
prefix = "";
size_t len = strlen(prefix);
size_t buf_size = len + 32;
char* buffer = (char*)ponyint_pool_alloc_size(buf_size);
snprintf(buffer, buf_size, "%s$" __zu, prefix, id);
return stringtab_consume(buffer, buf_size);
}
开发者ID:dipinhora,项目名称:ponyc,代码行数:13,代码来源:package.c
示例16: source_open_string
source_t* source_open_string(const char* source_code)
{
source_t* source = POOL_ALLOC(source_t);
source->file = NULL;
source->len = strlen(source_code);
source->m = (char*)ponyint_pool_alloc_size(source->len);
memcpy(source->m, source_code, source->len);
return source;
}
开发者ID:Preetam,项目名称:ponyc,代码行数:11,代码来源:source.c
示例17: 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;
}
开发者ID:killerswan,项目名称:ponyc,代码行数:13,代码来源:gencall.c
示例18: make_field_list
static LLVMValueRef make_field_list(compile_t* c, reach_type_t* t)
{
// The list is an array of field descriptors.
uint32_t count;
if(t->underlying == TK_TUPLETYPE)
count = t->field_count;
else
count = 0;
LLVMTypeRef field_type = LLVMArrayType(c->field_descriptor, count);
// If we aren't a tuple, return a null pointer to a list.
if(count == 0)
return LLVMConstNull(LLVMPointerType(field_type, 0));
// Create a constant array of field descriptors.
size_t buf_size = count * sizeof(LLVMValueRef);
LLVMValueRef* list = (LLVMValueRef*)ponyint_pool_alloc_size(buf_size);
for(uint32_t i = 0; i < count; i++)
{
LLVMValueRef fdesc[2];
fdesc[0] = LLVMConstInt(c->i32,
LLVMOffsetOfElement(c->target_data, t->primitive, i), false);
if(t->fields[i].type->desc != NULL)
{
// We are a concrete type.
fdesc[1] = LLVMConstBitCast(t->fields[i].type->desc,
c->descriptor_ptr);
} else {
// We aren't a concrete type.
fdesc[1] = LLVMConstNull(c->descriptor_ptr);
}
list[i] = LLVMConstStructInContext(c->context, fdesc, 2, false);
}
LLVMValueRef field_array = LLVMConstArray(c->field_descriptor, list, count);
// Create a global to hold the array.
const char* name = genname_fieldlist(t->name);
LLVMValueRef global = LLVMAddGlobal(c->module, field_type, name);
LLVMSetGlobalConstant(global, true);
LLVMSetLinkage(global, LLVMPrivateLinkage);
LLVMSetInitializer(global, field_array);
ponyint_pool_free_size(buf_size, list);
return global;
}
开发者ID:npruehs,项目名称:ponyc,代码行数:51,代码来源:gendesc.c
示例19: name_without_case
static const char* name_without_case(const char* name)
{
size_t len = strlen(name) + 1;
char* buf = (char*)ponyint_pool_alloc_size(len);
if(is_name_type(name))
{
for(size_t i = 0; i < len; i++)
buf[i] = (char)toupper(name[i]);
} else {
for(size_t i = 0; i < len; i++)
buf[i] = (char)tolower(name[i]);
}
return stringtab_consume(buf, len);
}
开发者ID:JamesLinus,项目名称:ponyc,代码行数:16,代码来源:symtab.c
示例20: buildflagset_print
const char* buildflagset_print(buildflagset_t* set)
{
assert(set != NULL);
assert(set->flags != NULL);
char* p = set->text_buffer;
// First the mutually exclusive flags.
if(set->have_os_flags)
print_flag(_os_flags[set->enum_os_flags], true, set, &p);
if(set->have_arch_flags)
print_flag(_arch_flags[set->enum_arch_flags], true, set, &p);
if(set->have_size_flags)
print_flag(_size_flags[set->enum_size_flags], true, set, &p);
// Next the normal flags, in any order.
size_t i = HASHMAP_BEGIN;
flag_t* flag;
while((flag = flagtab_next(set->flags, &i)) != NULL)
print_flag(flag->name, flag->value, set, &p);
if(p == set->text_buffer) // No flags, all configs match.
print_str("all configs", set, &p);
// Check buffer was big enough for it all.
size_t size_needed = (p - set->text_buffer) + 1; // +1 for terminator.
if(size_needed > set->buffer_size)
{
// Buffer we have isn't big enough, make it bigger then go round again.
if(set->buffer_size > 0)
ponyint_pool_free_size(set->buffer_size, set->text_buffer);
set->text_buffer = (char*)ponyint_pool_alloc_size(size_needed);
set->buffer_size = size_needed;
set->text_buffer[0] = '\0';
buildflagset_print(set);
}
// Add terminator.
assert(set->text_buffer != NULL);
set->text_buffer[size_needed - 1] = '\0';
return set->text_buffer;
}
开发者ID:JamesLinus,项目名称:ponyc,代码行数:47,代码来源:buildflagset.c
注:本文中的ponyint_pool_alloc_size函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论