本文整理汇总了C++中REPR函数的典型用法代码示例。如果您正苦于以下问题:C++ REPR函数的具体用法?C++ REPR怎么用?C++ REPR使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了REPR函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: setup_process_stdio
static void setup_process_stdio(MVMThreadContext *tc, MVMObject *handle, uv_process_t *process,
uv_stdio_container_t *stdio, int fd, MVMint64 flags, const char *op) {
if (flags & MVM_PIPE_CAPTURE) {
MVMIOSyncPipeData *pipedata;
if (REPR(handle)->ID != MVM_REPR_ID_MVMOSHandle)
MVM_exception_throw_adhoc(tc, "%s requires an object with REPR MVMOSHandle", op);
pipedata = (MVMIOSyncPipeData *)((MVMOSHandle *)handle)->body.data;
pipedata->process = process;
stdio->flags = UV_CREATE_PIPE | (fd == 0 ? UV_READABLE_PIPE : UV_WRITABLE_PIPE);
stdio->data.stream = pipedata->ss.handle;
}
else if (flags & MVM_PIPE_INHERIT) {
if (handle == tc->instance->VMNull) {
stdio->flags = UV_INHERIT_FD;
stdio->data.fd = fd;
}
else {
MVMOSHandleBody body = ((MVMOSHandle *)handle)->body;
if (REPR(handle)->ID != MVM_REPR_ID_MVMOSHandle)
MVM_exception_throw_adhoc(tc, "%s requires an object with REPR MVMOSHandle", op);
body.ops->pipeable->bind_stdio_handle(tc, ((MVMOSHandle *)handle), stdio, process);
}
}
else
stdio->flags = UV_IGNORE;
}
开发者ID:baby-gnu,项目名称:MoarVM,代码行数:31,代码来源:procops.c
示例2: MVM_repr_alloc_init
MVMObject * MVM_repr_alloc_init(MVMThreadContext *tc, MVMObject *type) {
MVMObject *obj = REPR(type)->allocate(tc, STABLE(type));
if (REPR(obj)->initialize) {
MVMROOT(tc, obj, {
REPR(obj)->initialize(tc, STABLE(obj), obj, OBJECT_BODY(obj));
});
开发者ID:nanis,项目名称:MoarVM,代码行数:7,代码来源:reprconv.c
示例3: get_nc_body
/* Grabs a NativeCall body. */
static MVMNativeCallBody * get_nc_body(MVMThreadContext *tc, MVMObject *obj) {
if (REPR(obj)->ID == MVM_REPR_ID_MVMNativeCall)
return (MVMNativeCallBody *)OBJECT_BODY(obj);
else
return (MVMNativeCallBody *)REPR(obj)->box_funcs.get_boxed_ref(tc,
STABLE(obj), obj, OBJECT_BODY(obj), MVM_REPR_ID_MVMNativeCall);
}
开发者ID:xfix,项目名称:MoarVM,代码行数:8,代码来源:nativecall.c
示例4: new_type
/* Creates a new type with this HOW as its meta-object. */
static void new_type(PARROT_INTERP, PMC *nci) {
PMC * unused;
/* We first create a new HOW instance. */
PMC *capture = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp));
PMC *self = VTABLE_get_pmc_keyed_int(interp, capture, 0);
PMC *HOW = REPR(self)->allocate(interp, STABLE(self));
/* See if we have a representation name; if not default to P6opaque. */
STRING *repr_name = VTABLE_exists_keyed_str(interp, capture, repr_str) ?
VTABLE_get_string_keyed_str(interp, capture, repr_str) :
p6opaque_str;
/* Create a new type object of the desired REPR. (Note that we can't
* default to KnowHOWREPR here, since it doesn't know how to actually
* store attributes, it's just for bootstrapping knowhow's. */
REPROps *repr_to_use = REPR_get_by_name(interp, repr_name);
PMC *type_object = repr_to_use->type_object_for(interp, HOW);
/* See if we were given a name; put it into the meta-object if so. */
STRING *name = VTABLE_exists_keyed_str(interp, capture, name_str) ?
VTABLE_get_string_keyed_str(interp, capture, name_str) :
empty_str;
REPR(HOW)->initialize(interp, STABLE(HOW), OBJECT_BODY(HOW));
((KnowHOWREPRInstance *)PMC_data(HOW))->body.name = name;
PARROT_GC_WRITE_BARRIER(interp, HOW);
/* Set .WHO to an empty hash. */
STABLE(type_object)->WHO = Parrot_pmc_new(interp, enum_class_Hash);
PARROT_GC_WRITE_BARRIER(interp, STABLE_PMC(type_object));
/* Put it into capture to act as return value. */
unused = Parrot_pcc_build_call_from_c_args(interp, capture, "P", type_object);
}
开发者ID:gitpan,项目名称:Rakudo-Star,代码行数:34,代码来源:knowhow_bootstrapper.c
示例5: optimize_repr_op
/* If we know the type of a significant operand, we might try to specialize by
* representation. */
static void optimize_repr_op(MVMThreadContext *tc, MVMSpeshGraph *g, MVMSpeshBB *bb,
MVMSpeshIns *ins, MVMint32 type_operand) {
MVMSpeshFacts *facts = MVM_spesh_get_facts(tc, g, ins->operands[type_operand]);
if (facts->flags & MVM_SPESH_FACT_KNOWN_TYPE && facts->type)
if (REPR(facts->type)->spesh)
REPR(facts->type)->spesh(tc, STABLE(facts->type), g, bb, ins);
}
开发者ID:danaj,项目名称:MoarVM,代码行数:9,代码来源:optimize.c
示例6: attr_new
/* Attribute new method. */
static void attr_new(PARROT_INTERP, PMC *nci) {
PMC * unused;
PMC *capture = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp));
PMC *type = VTABLE_get_pmc_keyed_int(interp, capture, 0);
STRING *name = VTABLE_get_string_keyed_str(interp, capture, name_str);
PMC *self = REPR(type)->allocate(interp, STABLE(type));
REPR(self)->box_funcs->set_str(interp, STABLE(self), OBJECT_BODY(self), name);
unused = Parrot_pcc_build_call_from_c_args(interp, capture, "P", self);
}
开发者ID:gitpan,项目名称:Rakudo-Star,代码行数:10,代码来源:knowhow_bootstrapper.c
示例7: MVM_frame_takeclosure
/* Given the specified code object, copies it and returns a copy which
* captures a closure over the current scope. */
MVMObject * MVM_frame_takeclosure(MVMThreadContext *tc, MVMObject *code) {
MVMCode *closure;
if (REPR(code)->ID != MVM_REPR_ID_MVMCode)
MVM_exception_throw_adhoc(tc,
"Can only perform takeclosure on object with representation MVMCode");
MVMROOT(tc, code, {
closure = (MVMCode *)REPR(code)->allocate(tc, STABLE(code));
});
开发者ID:mj41,项目名称:MoarVM,代码行数:12,代码来源:frame.c
示例8: MVM_gc_mark_collectable
/* Marks a collectable item (object, type object, STable). */
void MVM_gc_mark_collectable(MVMThreadContext *tc, MVMGCWorklist *worklist, MVMCollectable *new_addr) {
MVMuint16 i;
MVM_gc_worklist_add(tc, worklist, &new_addr->sc);
if (!(new_addr->flags & (MVM_CF_TYPE_OBJECT | MVM_CF_STABLE))) {
/* Need to view it as an object in here. */
MVMObject *new_addr_obj = (MVMObject *)new_addr;
/* Add the STable to the worklist. */
MVM_gc_worklist_add(tc, worklist, &new_addr_obj->st);
/* If needed, mark it. This will add addresses to the worklist
* that will need updating. Note that we are passing the address
* of the object *after* copying it since those are the addresses
* we care about updating; the old chunk of memory is now dead! */
if (MVM_GC_DEBUG_ENABLED(MVM_GC_DEBUG_COLLECT) && !STABLE(new_addr_obj))
MVM_panic(MVM_exitcode_gcnursery, "Found an outdated reference to address %p", new_addr);
if (REPR(new_addr_obj)->gc_mark)
REPR(new_addr_obj)->gc_mark(tc, STABLE(new_addr_obj), OBJECT_BODY(new_addr_obj), worklist);
}
else if (new_addr->flags & MVM_CF_TYPE_OBJECT) {
/* Add the STable to the worklist. */
MVM_gc_worklist_add(tc, worklist, &((MVMObject *)new_addr)->st);
}
else if (new_addr->flags & MVM_CF_STABLE) {
/* Add all references in the STable to the work list. */
MVMSTable *new_addr_st = (MVMSTable *)new_addr;
MVM_gc_worklist_add(tc, worklist, &new_addr_st->HOW);
MVM_gc_worklist_add(tc, worklist, &new_addr_st->WHAT);
MVM_gc_worklist_add(tc, worklist, &new_addr_st->method_cache);
for (i = 0; i < new_addr_st->vtable_length; i++)
MVM_gc_worklist_add(tc, worklist, &new_addr_st->vtable[i]);
for (i = 0; i < new_addr_st->type_check_cache_length; i++)
MVM_gc_worklist_add(tc, worklist, &new_addr_st->type_check_cache[i]);
if (new_addr_st->container_spec)
if (new_addr_st->container_spec->gc_mark_data)
new_addr_st->container_spec->gc_mark_data(tc, new_addr_st, worklist);
if (new_addr_st->boolification_spec)
MVM_gc_worklist_add(tc, worklist, &new_addr_st->boolification_spec->method);
if (new_addr_st->invocation_spec) {
MVM_gc_worklist_add(tc, worklist, &new_addr_st->invocation_spec->class_handle);
MVM_gc_worklist_add(tc, worklist, &new_addr_st->invocation_spec->attr_name);
MVM_gc_worklist_add(tc, worklist, &new_addr_st->invocation_spec->invocation_handler);
}
MVM_gc_worklist_add(tc, worklist, &new_addr_st->WHO);
/* If it needs to have its REPR data marked, do that. */
if (new_addr_st->REPR->gc_mark_repr_data)
new_addr_st->REPR->gc_mark_repr_data(tc, new_addr_st, worklist);
}
else {
MVM_panic(MVM_exitcode_gcnursery, "Internal error: impossible case encountered in GC marking");
}
}
开发者ID:etheleon,项目名称:MoarVM,代码行数:56,代码来源:collect.c
示例9: new_type
/* KnowHOW.new_type method. Creates a new type with this HOW as its meta-object. */
static void new_type(MVMThreadContext *tc, MVMCallsite *callsite, MVMRegister *args) {
MVMObject *self, *HOW, *type_object, *BOOTHash, *stash;
MVMArgInfo repr_arg, name_arg;
MVMString *repr_name, *name;
const MVMREPROps *repr_to_use;
MVMInstance *instance = tc->instance;
/* Get arguments. */
MVMArgProcContext arg_ctx; arg_ctx.named_used = NULL;
MVM_args_proc_init(tc, &arg_ctx, callsite, args);
MVM_args_checkarity(tc, &arg_ctx, 1, 1);
self = MVM_args_get_pos_obj(tc, &arg_ctx, 0, MVM_ARG_REQUIRED).arg.o;
repr_arg = MVM_args_get_named_str(tc, &arg_ctx, instance->str_consts.repr, MVM_ARG_OPTIONAL);
name_arg = MVM_args_get_named_str(tc, &arg_ctx, instance->str_consts.name, MVM_ARG_OPTIONAL);
MVM_args_proc_cleanup(tc, &arg_ctx);
if (REPR(self)->ID != MVM_REPR_ID_KnowHOWREPR)
MVM_exception_throw_adhoc(tc, "KnowHOW methods must be called on object with REPR KnowHOWREPR");
/* See if we have a representation name; if not default to P6opaque. */
repr_name = repr_arg.exists ? repr_arg.arg.s : instance->str_consts.P6opaque;
repr_to_use = MVM_repr_get_by_name(tc, repr_name);
MVM_gc_root_temp_push(tc, (MVMCollectable **)&name_arg);
/* We first create a new HOW instance. */
HOW = REPR(self)->allocate(tc, STABLE(self));
MVM_gc_root_temp_push(tc, (MVMCollectable **)&HOW);
/* Create a new type object of the desired REPR. (Note that we can't
* default to KnowHOWREPR here, since it doesn't know how to actually
* store attributes, it's just for bootstrapping knowhow's. */
type_object = repr_to_use->type_object_for(tc, HOW);
MVM_gc_root_temp_push(tc, (MVMCollectable **)&type_object);
/* This may move name_arg.arg.s so do it first: */
REPR(HOW)->initialize(tc, STABLE(HOW), HOW, OBJECT_BODY(HOW));
/* See if we were given a name; put it into the meta-object if so. */
name = name_arg.exists ? name_arg.arg.s : instance->str_consts.anon;
MVM_ASSIGN_REF(tc, &(HOW->header), ((MVMKnowHOWREPR *)HOW)->body.name, name);
/* Set .WHO to an empty hash. */
BOOTHash = tc->instance->boot_types.BOOTHash;
stash = REPR(BOOTHash)->allocate(tc, STABLE(BOOTHash));
MVM_gc_root_temp_push(tc, (MVMCollectable **)&stash);
MVM_ASSIGN_REF(tc, &(STABLE(type_object)->header), STABLE(type_object)->WHO, stash);
/* Return the type object. */
MVM_args_set_result_obj(tc, type_object, MVM_RETURN_CURRENT_FRAME);
MVM_gc_root_temp_pop_n(tc, 4);
}
开发者ID:nanis,项目名称:MoarVM,代码行数:52,代码来源:bootstrap.c
示例10: get_attribute_boxed
/* Gets the current value for an attribute. */
static PMC * get_attribute_boxed(PARROT_INTERP, STable *st, void *data, PMC *class_handle, STRING *name, INTVAL hint) {
CStructREPRData *repr_data = (CStructREPRData *)st->REPR_data;
CStructBody *body = (CStructBody *)data;
INTVAL slot;
/* Look up slot, then offset and compute address. */
slot = hint >= 0 ? hint :
try_get_slot(interp, repr_data, class_handle, name);
if (slot >= 0) {
INTVAL type = repr_data->attribute_locations[slot] & CSTRUCT_ATTR_MASK;
INTVAL real_slot = repr_data->attribute_locations[slot] >> CSTRUCT_ATTR_SHIFT;
if(type == CSTRUCT_ATTR_IN_STRUCT)
Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
"CStruct Can't perform boxed get on flattened attributes yet");
else {
PMC *obj = body->child_objs[real_slot];
PMC *typeobj = repr_data->member_types[slot];
if(!obj) {
void *cobj = get_ptr_at_offset(body->cstruct, repr_data->struct_offsets[slot]);
if(cobj) {
if(type == CSTRUCT_ATTR_CARRAY) {
obj = make_carray_result(interp, typeobj, cobj);
}
else if(type == CSTRUCT_ATTR_CSTRUCT) {
obj = make_cstruct_result(interp, typeobj, cobj);
}
else if(type == CSTRUCT_ATTR_CPTR) {
obj = make_cpointer_result(interp, typeobj, cobj);
}
else if(type == CSTRUCT_ATTR_STRING) {
char *cstr = (char *) cobj;
STRING *str = Parrot_str_new_init(interp, cstr, strlen(cstr), Parrot_utf8_encoding_ptr, 0);
obj = REPR(typeobj)->allocate(interp, STABLE(typeobj));
REPR(obj)->initialize(interp, STABLE(obj), OBJECT_BODY(obj));
REPR(obj)->box_funcs->set_str(interp, STABLE(obj), OBJECT_BODY(obj), str);
PARROT_GC_WRITE_BARRIER(interp, obj);
}
body->child_objs[real_slot] = obj;
}
else {
obj = typeobj;
}
}
return obj;
}
}
开发者ID:Arcterus,项目名称:nqp,代码行数:51,代码来源:CStruct.c
示例11: get_attribute_boxed
/* Gets the current value for an attribute. */
static PMC * get_attribute_boxed(PARROT_INTERP, STable *st, void *data, PMC *class_handle, STRING *name, INTVAL hint) {
P6opaqueREPRData *repr_data = (P6opaqueREPRData *)st->REPR_data;
INTVAL slot;
/* Try the slot allocation first. */
slot = hint >= 0 && !(repr_data->mi) ? hint :
try_get_slot(interp, repr_data, class_handle, name);
if (slot >= 0) {
if (!repr_data->flattened_stables[slot]) {
PMC *result = get_pmc_at_offset(data, repr_data->attribute_offsets[slot]);
if (result) {
return result;
}
else {
/* Maybe we know how to auto-viv it to a container. */
if (repr_data->auto_viv_values) {
PMC *value = repr_data->auto_viv_values[slot];
if (value != NULL) {
if (IS_CONCRETE(value)) {
PMC *cloned = REPR(value)->allocate(interp, STABLE(value));
REPR(value)->copy_to(interp, STABLE(value), OBJECT_BODY(value), OBJECT_BODY(cloned));
PARROT_GC_WRITE_BARRIER(interp, cloned);
set_pmc_at_offset(data, repr_data->attribute_offsets[slot], cloned);
return cloned;
}
else {
set_pmc_at_offset(data, repr_data->attribute_offsets[slot], value);
return value;
}
}
}
return PMCNULL;
}
}
else {
/* Need to produce a boxed version of this attribute. */
STable *st = repr_data->flattened_stables[slot];
PMC *result = st->REPR->allocate(interp, st);
st->REPR->copy_to(interp, st, (char *)data + repr_data->attribute_offsets[slot],
OBJECT_BODY(result));
PARROT_GC_WRITE_BARRIER(interp, result);
return result;
}
}
/* Otherwise, complain that the attribute doesn't exist. */
no_such_attribute(interp, "get", class_handle, name);
}
开发者ID:fgomezrdz,项目名称:nqp,代码行数:50,代码来源:P6opaque.c
示例12: optimize_is_reprid
static void optimize_is_reprid(MVMThreadContext *tc, MVMSpeshGraph *g, MVMSpeshIns *ins) {
MVMSpeshFacts *obj_facts = MVM_spesh_get_facts(tc, g, ins->operands[1]);
MVMuint32 wanted_repr_id;
MVMuint64 result_value;
if (!(obj_facts->flags & MVM_SPESH_FACT_KNOWN_TYPE)) {
return;
}
switch (ins->info->opcode) {
case MVM_OP_islist: wanted_repr_id = MVM_REPR_ID_MVMArray; break;
case MVM_OP_ishash: wanted_repr_id = MVM_REPR_ID_MVMHash; break;
case MVM_OP_isint: wanted_repr_id = MVM_REPR_ID_P6int; break;
case MVM_OP_isnum: wanted_repr_id = MVM_REPR_ID_P6num; break;
case MVM_OP_isstr: wanted_repr_id = MVM_REPR_ID_P6str; break;
default: return;
}
result_value = REPR(obj_facts->type)->ID == wanted_repr_id;
if (result_value == 0) {
MVMSpeshFacts *result_facts = MVM_spesh_get_facts(tc, g, ins->operands[0]);
ins->info = MVM_op_get_op(MVM_OP_const_i64_16);
ins->operands[1].lit_i16 = 0;
result_facts->flags |= MVM_SPESH_FACT_KNOWN_VALUE;
result_facts->value.i64 = 0;
} else {
ins->info = MVM_op_get_op(MVM_OP_isnonnull);
}
}
开发者ID:danaj,项目名称:MoarVM,代码行数:30,代码来源:optimize.c
示例13: MVM_hll_set_config
MVMObject * MVM_hll_set_config(MVMThreadContext *tc, MVMString *name, MVMObject *config_hash) {
MVMHLLConfig *config;
config = MVM_hll_get_config_for(tc, name);
if (!config_hash || REPR(config_hash)->ID != MVM_REPR_ID_MVMHash
|| !IS_CONCRETE(config_hash)) {
MVM_exception_throw_adhoc(tc, "set hll config needs concrete hash");
}
/* MVM_string_utf8_decode() can potentially allocate, and hence gc. */
MVMROOT(tc, config_hash, {
check_config_key(tc, config_hash, "int_box", int_box_type, config);
check_config_key(tc, config_hash, "num_box", num_box_type, config);
check_config_key(tc, config_hash, "str_box", str_box_type, config);
check_config_key(tc, config_hash, "slurpy_array", slurpy_array_type, config);
check_config_key(tc, config_hash, "slurpy_hash", slurpy_hash_type, config);
check_config_key(tc, config_hash, "array_iter", array_iterator_type, config);
check_config_key(tc, config_hash, "hash_iter", hash_iterator_type, config);
check_config_key(tc, config_hash, "foreign_type_int", foreign_type_int, config);
check_config_key(tc, config_hash, "foreign_type_num", foreign_type_num, config);
check_config_key(tc, config_hash, "foreign_type_str", foreign_type_str, config);
check_config_key(tc, config_hash, "foreign_transform_array", foreign_transform_array, config);
check_config_key(tc, config_hash, "foreign_transform_hash", foreign_transform_hash, config);
check_config_key(tc, config_hash, "foreign_transform_code", foreign_transform_code, config);
check_config_key(tc, config_hash, "null_value", null_value, config);
check_config_key(tc, config_hash, "exit_handler", exit_handler, config);
check_config_key(tc, config_hash, "bind_error", bind_error, config);
check_config_key(tc, config_hash, "method_not_found_error", method_not_found_error, config);
});
开发者ID:BlastarIndia,项目名称:MoarVM,代码行数:30,代码来源:hll.c
示例14: MVM_file_get_stdstream
/* return an OSHandle representing one of the standard streams */
static MVMObject * MVM_file_get_stdstream(MVMThreadContext *tc, MVMuint8 type) {
MVMOSHandle *result;
apr_file_t *handle;
apr_status_t rv;
MVMObject *type_object = tc->instance->boot_types->BOOTIO;
result = (MVMOSHandle *)REPR(type_object)->allocate(tc, STABLE(type_object));
/* need a temporary pool */
if ((rv = apr_pool_create(&result->body.mem_pool, NULL)) != APR_SUCCESS) {
MVM_exception_throw_apr_error(tc, rv, "get_stream failed to create pool: ");
}
switch(type) {
case 0:
apr_file_open_stdin(&handle, result->body.mem_pool);
break;
case 1:
apr_file_open_stdout(&handle, result->body.mem_pool);
break;
case 2:
apr_file_open_stderr(&handle, result->body.mem_pool);
break;
}
result->body.file_handle = handle;
result->body.handle_type = MVM_OSHANDLE_FILE;
result->body.encoding_type = MVM_encoding_type_utf8;
return (MVMObject *)result;
}
开发者ID:Arcterus,项目名称:MoarVM,代码行数:31,代码来源:fileops.c
示例15: attr_name
/* Attribute name introspection. */
static void attr_name(PARROT_INTERP, PMC *nci) {
PMC * unused;
PMC *capture = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp));
PMC *self = VTABLE_get_pmc_keyed_int(interp, capture, 0);
STRING *name = REPR(self)->box_funcs->get_str(interp, STABLE(self), OBJECT_BODY(self));
unused = Parrot_pcc_build_call_from_c_args(interp, capture, "S", name);
}
开发者ID:gitpan,项目名称:Rakudo-Star,代码行数:8,代码来源:knowhow_bootstrapper.c
示例16: return
static STRING *get_str(PARROT_INTERP, STable *st, void *data) {
CStrBody *body = (CStrBody *) data;
PMC *old_ctx, *cappy, *meth, *enc_pmc;
STRING *enc;
STR_VTABLE *encoding;
if (!body->cstr)
return (STRING *) NULL;
/* Look up "encoding" method. */
meth = VTABLE_find_method(interp, st->WHAT,
Parrot_str_new_constant(interp, "encoding"));
if (PMC_IS_NULL(meth))
Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
"CStr representation expects an 'encoding' method, specifying the encoding");
old_ctx = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp));
cappy = Parrot_pmc_new(interp, enum_class_CallContext);
VTABLE_push_pmc(interp, cappy, st->WHAT);
Parrot_pcc_invoke_from_sig_object(interp, meth, cappy);
cappy = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp));
Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), old_ctx);
enc_pmc = decontainerize(interp, VTABLE_get_pmc_keyed_int(interp, cappy, 0));
enc = REPR(enc_pmc)->box_funcs->get_str(interp, STABLE(enc_pmc), OBJECT_BODY(enc_pmc));
return new_from_cstring(interp, body->cstr, enc);
}
开发者ID:Arcterus,项目名称:nqp,代码行数:27,代码来源:CStr.c
示例17: get_attribute
/* Gets the current value for an attribute. */
static PMC * get_attribute(PARROT_INTERP, PMC *obj, PMC *class_handle, STRING *name, INTVAL hint) {
P6opaqueInstance *instance = (P6opaqueInstance *)PMC_data(obj);
P6opaqueREPRData *repr_data = (P6opaqueREPRData *)STABLE(obj)->REPR_data;
INTVAL slot;
/* Ensure it is a defined object. */
if (!instance->spill)
Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
"Cannot access attributes in a type object");
/* Try the slot allocation first. */
slot = try_get_slot(interp, repr_data, class_handle, name);
if (slot >= 0) {
PMC *result = get_pmc_at_offset(instance, repr_data->attribute_offsets[slot]);
if (result) {
return result;
}
else {
/* Maybe we know how to auto-viv it to a container. */
if (repr_data->auto_viv_values) {
PMC *value = repr_data->auto_viv_values[slot];
if (value != NULL) {
value = REPR(value)->clone(interp, value);
set_pmc_at_offset(instance, repr_data->attribute_offsets[slot], value);
return value;
}
}
return PMCNULL;
}
}
/* Otherwise, complain that the attribute doesn't exist. */
no_such_attribute(interp, "get", class_handle, name);
}
开发者ID:ruz,项目名称:nqp,代码行数:35,代码来源:P6opaque.c
示例18: Rakudo_binding_create_hash
/* Creates a Perl 6 Hash. */
static PMC *
Rakudo_binding_create_hash(PARROT_INTERP, PMC *storage) {
PMC *type = Rakudo_types_hash_get();
PMC *hash = REPR(type)->allocate(interp, STABLE(type));
VTABLE_set_attr_keyed(interp, hash, Rakudo_types_enummap_get(), STORAGE_str, storage);
return hash;
}
开发者ID:gitpan,项目名称:Rakudo-Star,代码行数:8,代码来源:bind.c
示例19: create_box
/* Boxes a native value. */
static PMC *
create_box(PARROT_INTERP, Rakudo_BindVal bv) {
PMC *box_type_obj = box_type(bv);
PMC *boxed = REPR(box_type_obj)->allocate(interp, STABLE(box_type_obj));
switch (bv.type) {
case BIND_VAL_INT:
REPR(boxed)->box_funcs->set_int(interp, STABLE(boxed), OBJECT_BODY(boxed), bv.val.i);
break;
case BIND_VAL_NUM:
REPR(boxed)->box_funcs->set_num(interp, STABLE(boxed), OBJECT_BODY(boxed), bv.val.n);
break;
case BIND_VAL_STR:
REPR(boxed)->box_funcs->set_str(interp, STABLE(boxed), OBJECT_BODY(boxed), bv.val.s);
break;
}
return boxed;
}
开发者ID:gitpan,项目名称:Rakudo-Star,代码行数:18,代码来源:bind.c
示例20: Rakudo_binding_iter_from_rpa
/* This function gets shared with perl6.ops for the perl6_iter_from_rpa op. */
PMC *
Rakudo_binding_iter_from_rpa(PARROT_INTERP, PMC *rpa, PMC *list) {
PMC *type = Rakudo_types_listiter_get();
PMC *iter = REPR(type)->allocate(interp, STABLE(type));
VTABLE_set_attr_keyed(interp, iter, type, REST_str, rpa);
VTABLE_set_attr_keyed(interp, iter, type, LIST_str, list);
return iter;
}
开发者ID:gitpan,项目名称:Rakudo-Star,代码行数:9,代码来源:bind.c
注:本文中的REPR函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论