[svn:parrot] r41777 - branches/pcc_reapply/src/call
allison at svn.parrot.org
allison at svn.parrot.org
Fri Oct 9 23:15:41 UTC 2009
Author: allison
Date: Fri Oct 9 23:15:40 2009
New Revision: 41777
URL: https://trac.parrot.org/parrot/changeset/41777
Log:
[pcc] Add named result handling when the result list in the signature object is built.
Modified:
branches/pcc_reapply/src/call/args.c
Modified: branches/pcc_reapply/src/call/args.c
==============================================================================
--- branches/pcc_reapply/src/call/args.c Fri Oct 9 23:08:38 2009 (r41776)
+++ branches/pcc_reapply/src/call/args.c Fri Oct 9 23:15:40 2009 (r41777)
@@ -624,28 +624,38 @@
/* Returns store a pointer to the register, so they can pass
* the result back to the caller. */
PMC * const val_pointer = pmc_new(interp, enum_class_CPointer);
- VTABLE_push_pmc(interp, returns, val_pointer);
switch (PARROT_ARG_TYPE_MASK_MASK(arg_flags)) {
case PARROT_ARG_INTVAL:
string_sig = Parrot_str_append(interp, string_sig, CONST_STRING(interp, "I"));
VTABLE_set_pointer(interp, val_pointer, (void *) &(CTX_REG_INT(ctx, raw_index)));
VTABLE_set_string_keyed_str(interp, val_pointer, signature, CONST_STRING(interp, "I"));
+ VTABLE_push_pmc(interp, returns, val_pointer);
break;
case PARROT_ARG_FLOATVAL:
string_sig = Parrot_str_append(interp, string_sig, CONST_STRING(interp, "N"));
VTABLE_set_pointer(interp, val_pointer, (void *) &(CTX_REG_NUM(ctx, raw_index)));
VTABLE_set_string_keyed_str(interp, val_pointer, signature, CONST_STRING(interp, "N"));
+ VTABLE_push_pmc(interp, returns, val_pointer);
break;
case PARROT_ARG_STRING:
- string_sig = Parrot_str_append(interp, string_sig, CONST_STRING(interp, "S"));
- VTABLE_set_pointer(interp, val_pointer, (void *) &(CTX_REG_STR(ctx, raw_index)));
- VTABLE_set_string_keyed_str(interp, val_pointer, signature, CONST_STRING(interp, "S"));
+ if (arg_flags & PARROT_ARG_NAME) {
+ PMC *name_string = pmc_new(interp, enum_class_String);
+ VTABLE_set_string_native(interp, name_string, (CTX_REG_STR(ctx, raw_index)));
+ VTABLE_push_pmc(interp, returns, name_string);
+ }
+ else {
+ string_sig = Parrot_str_append(interp, string_sig, CONST_STRING(interp, "S"));
+ VTABLE_set_pointer(interp, val_pointer, (void *) &(CTX_REG_STR(ctx, raw_index)));
+ VTABLE_set_string_keyed_str(interp, val_pointer, signature, CONST_STRING(interp, "S"));
+ VTABLE_push_pmc(interp, returns, val_pointer);
+ }
break;
case PARROT_ARG_PMC:
string_sig = Parrot_str_append(interp, string_sig, CONST_STRING(interp, "P"));
VTABLE_set_pointer(interp, val_pointer, (void *) &(CTX_REG_PMC(ctx, raw_index)));
VTABLE_set_string_keyed_str(interp, val_pointer, signature, CONST_STRING(interp, "P"));
+ VTABLE_push_pmc(interp, returns, val_pointer);
break;
default:
break;
More information about the parrot-commits
mailing list