[svn:parrot] r42914 - trunk/src/call
bacek at svn.parrot.org
bacek at svn.parrot.org
Sun Dec 6 11:04:01 UTC 2009
Author: bacek
Date: Sun Dec 6 11:03:59 2009
New Revision: 42914
URL: https://trac.parrot.org/parrot/changeset/42914
Log:
Merge cs_csr_cleanup branch back to trunk.
Modified:
trunk/src/call/args.c
Modified: trunk/src/call/args.c
==============================================================================
--- trunk/src/call/args.c Sun Dec 6 09:56:33 2009 (r42913)
+++ trunk/src/call/args.c Sun Dec 6 11:03:59 2009 (r42914)
@@ -92,71 +92,63 @@
__attribute__nonnull__(1)
__attribute__nonnull__(2);
-PARROT_CANNOT_RETURN_NULL
-static void ** csr_allocate_initial_values(PARROT_INTERP, ARGIN(PMC *self))
- __attribute__nonnull__(1)
- __attribute__nonnull__(2);
-
-static INTVAL csr_elements(PARROT_INTERP, ARGIN(PMC *self))
- __attribute__nonnull__(1)
- __attribute__nonnull__(2);
-
-PARROT_CANNOT_RETURN_NULL
-static void* csr_get_pointer_keyed_int(PARROT_INTERP,
+static void csr_fill_integer(PARROT_INTERP,
ARGIN(PMC *self),
- INTVAL key)
+ INTVAL key,
+ INTVAL value)
__attribute__nonnull__(1)
__attribute__nonnull__(2);
-PARROT_CANNOT_RETURN_NULL
-static STRING* csr_get_string_keyed_int(PARROT_INTERP,
+static void csr_fill_number(PARROT_INTERP,
ARGIN(PMC *self),
- INTVAL key)
+ INTVAL key,
+ FLOATVAL value)
__attribute__nonnull__(1)
__attribute__nonnull__(2);
-static void csr_push_integer(PARROT_INTERP, ARGIN(PMC *self), INTVAL type)
+static void csr_fill_pmc(PARROT_INTERP,
+ ARGIN(PMC *self),
+ INTVAL key,
+ ARGIN_NULLOK(PMC *value))
__attribute__nonnull__(1)
__attribute__nonnull__(2);
-static void csr_set_integer_keyed_int(PARROT_INTERP,
+static void csr_fill_string(PARROT_INTERP,
ARGIN(PMC *self),
INTVAL key,
- INTVAL value)
+ ARGIN_NULLOK(STRING *value))
__attribute__nonnull__(1)
__attribute__nonnull__(2);
-static void csr_set_integer_native(PARROT_INTERP,
+PARROT_CANNOT_RETURN_NULL
+static void* csr_get_pointer_keyed_int(PARROT_INTERP,
ARGIN(PMC *self),
- INTVAL size)
+ INTVAL key)
__attribute__nonnull__(1)
__attribute__nonnull__(2);
-static void csr_set_number_keyed_int(PARROT_INTERP,
+PARROT_CANNOT_RETURN_NULL
+static STRING* csr_get_string_keyed_int(PARROT_INTERP,
ARGIN(PMC *self),
- INTVAL key,
- FLOATVAL value)
+ INTVAL key)
__attribute__nonnull__(1)
__attribute__nonnull__(2);
-static void csr_set_pmc_keyed_int(PARROT_INTERP,
+static void csr_push_pointer(PARROT_INTERP,
ARGIN(PMC *self),
- INTVAL key,
- ARGIN_NULLOK(PMC *value))
+ ARGIN_NULLOK(void *value),
+ INTVAL type)
__attribute__nonnull__(1)
__attribute__nonnull__(2);
-static void csr_set_pointer_keyed_int(PARROT_INTERP,
+PARROT_CANNOT_RETURN_NULL
+static void** csr_reallocate_return_values(PARROT_INTERP,
ARGIN(PMC *self),
- INTVAL key,
- ARGIN_NULLOK(void *value))
+ INTVAL size)
__attribute__nonnull__(1)
__attribute__nonnull__(2);
-static void csr_set_string_keyed_int(PARROT_INTERP,
- ARGIN(PMC *self),
- INTVAL key,
- ARGIN_NULLOK(STRING *value))
+static INTVAL csr_returns_count(PARROT_INTERP, ARGIN(PMC *self))
__attribute__nonnull__(1)
__attribute__nonnull__(2);
@@ -418,37 +410,31 @@
#define ASSERT_ARGS_clone_key_arg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(key))
-#define ASSERT_ARGS_csr_allocate_initial_values __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(interp) \
- , PARROT_ASSERT_ARG(self))
-#define ASSERT_ARGS_csr_elements __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(interp) \
- , PARROT_ASSERT_ARG(self))
-#define ASSERT_ARGS_csr_get_pointer_keyed_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+#define ASSERT_ARGS_csr_fill_integer __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(self))
-#define ASSERT_ARGS_csr_get_string_keyed_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+#define ASSERT_ARGS_csr_fill_number __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(self))
-#define ASSERT_ARGS_csr_push_integer __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+#define ASSERT_ARGS_csr_fill_pmc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(self))
-#define ASSERT_ARGS_csr_set_integer_keyed_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+#define ASSERT_ARGS_csr_fill_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(self))
-#define ASSERT_ARGS_csr_set_integer_native __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+#define ASSERT_ARGS_csr_get_pointer_keyed_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(self))
-#define ASSERT_ARGS_csr_set_number_keyed_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+#define ASSERT_ARGS_csr_get_string_keyed_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(self))
-#define ASSERT_ARGS_csr_set_pmc_keyed_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+#define ASSERT_ARGS_csr_push_pointer __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(self))
-#define ASSERT_ARGS_csr_set_pointer_keyed_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+#define ASSERT_ARGS_csr_reallocate_return_values __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(self))
-#define ASSERT_ARGS_csr_set_string_keyed_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+#define ASSERT_ARGS_csr_returns_count __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(self))
#define ASSERT_ARGS_dissect_aggregate_arg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -848,33 +834,28 @@
* the result back to the caller. */
switch (PARROT_ARG_TYPE_MASK_MASK(arg_flags)) {
case PARROT_ARG_INTVAL:
- csr_set_pointer_keyed_int(interp, call_object, returns_pos++,
- &(CTX_REG_INT(ctx, raw_index)));
- csr_push_integer(interp, call_object, PARROT_ARG_INTVAL);
+ csr_push_pointer(interp, call_object, &(CTX_REG_INT(ctx, raw_index)),
+ PARROT_ARG_INTVAL);
break;
case PARROT_ARG_FLOATVAL:
- csr_set_pointer_keyed_int(interp, call_object, returns_pos++,
- &(CTX_REG_NUM(ctx, raw_index)));
- csr_push_integer(interp, call_object, PARROT_ARG_FLOATVAL);
+ csr_push_pointer(interp, call_object, &(CTX_REG_NUM(ctx, raw_index)),
+ PARROT_ARG_FLOATVAL);
break;
case PARROT_ARG_STRING:
if (arg_flags & PARROT_ARG_NAME) {
STRING * string_val = arg_flags & PARROT_ARG_CONSTANT
? Parrot_pcc_get_string_constant(interp, ctx, raw_index)
: CTX_REG_STR(ctx, raw_index);
- csr_set_pointer_keyed_int(interp, call_object, returns_pos++,
- string_val);
+ csr_push_pointer(interp, call_object, string_val, PARROT_ARG_STRING);
}
else {
- csr_set_pointer_keyed_int(interp, call_object, returns_pos++,
- &(CTX_REG_STR(ctx, raw_index)));
- csr_push_integer(interp, call_object, PARROT_ARG_STRING);
+ csr_push_pointer(interp, call_object,
+ &(CTX_REG_STR(ctx, raw_index)), PARROT_ARG_STRING);
}
break;
case PARROT_ARG_PMC:
- csr_set_pointer_keyed_int(interp, call_object, returns_pos++,
- &(CTX_REG_PMC(ctx, raw_index)));
- csr_push_integer(interp, call_object, PARROT_ARG_PMC);
+ csr_push_pointer(interp, call_object, &(CTX_REG_PMC(ctx, raw_index)),
+ PARROT_ARG_PMC);
break;
default:
break;
@@ -914,7 +895,6 @@
INTVAL in_return_sig = 0;
INTVAL i;
int append_pi = 1;
- INTVAL returns_pos = 0;
if (!sig_len)
return call_object;
@@ -933,24 +913,20 @@
* the result back to the caller. */
switch (type) {
case 'I':
- csr_set_pointer_keyed_int(interp, call_object, returns_pos++,
- (void *)va_arg(args, INTVAL *));
- csr_push_integer(interp, call_object, PARROT_ARG_INTVAL);
+ csr_push_pointer(interp, call_object,
+ (void *)va_arg(args, INTVAL *), PARROT_ARG_INTVAL);
break;
case 'N':
- csr_set_pointer_keyed_int(interp, call_object, returns_pos++,
- (void *)va_arg(args, FLOATVAL *));
- csr_push_integer(interp, call_object, PARROT_ARG_FLOATVAL);
+ csr_push_pointer(interp, call_object,
+ (void *)va_arg(args, FLOATVAL *), PARROT_ARG_FLOATVAL);
break;
case 'S':
- csr_set_pointer_keyed_int(interp, call_object, returns_pos++,
- (void *)va_arg(args, STRING **));
- csr_push_integer(interp, call_object, PARROT_ARG_STRING);
+ csr_push_pointer(interp, call_object,
+ (void *)va_arg(args, STRING **), PARROT_ARG_STRING);
break;
case 'P':
- csr_set_pointer_keyed_int(interp, call_object, returns_pos++,
- (void *)va_arg(args, PMC **));
- csr_push_integer(interp, call_object, PARROT_ARG_PMC);
+ csr_push_pointer(interp, call_object,
+ (void *)va_arg(args, PMC **), PARROT_ARG_PMC);
break;
default:
Parrot_ex_throw_from_c_args(interp, NULL,
@@ -1495,16 +1471,16 @@
ASSERT_ARGS(assign_default_result_value)
switch (PARROT_ARG_TYPE_MASK_MASK(result_flags)) {
case PARROT_ARG_INTVAL:
- csr_set_integer_keyed_int(interp, results, index, 0);
+ csr_fill_integer(interp, results, index, 0);
break;
case PARROT_ARG_FLOATVAL:
- csr_set_number_keyed_int(interp, results, index, 0.0);
+ csr_fill_number(interp, results, index, 0.0);
break;
case PARROT_ARG_STRING:
- csr_set_string_keyed_int(interp, results, index, NULL);
+ csr_fill_string(interp, results, index, NULL);
break;
case PARROT_ARG_PMC:
- csr_set_pmc_keyed_int(interp, results, index, PMCNULL);
+ csr_fill_pmc(interp, results, index, PMCNULL);
break;
default:
Parrot_ex_throw_from_c_args(interp, NULL,
@@ -1656,7 +1632,7 @@
GETATTR_CallSignature_return_flags(interp, call_object, result_sig);
- result_count = csr_elements(interp, call_object);
+ result_count = csr_returns_count(interp, call_object);
PARROT_ASSERT((result_count == 0) || !PMC_IS_NULL(result_sig));
GETATTR_FixedIntegerArray_int_array(interp, raw_sig, return_array);
@@ -1779,7 +1755,7 @@
}
return_index++;
}
- csr_set_pmc_keyed_int(interp, call_object, result_index, collect_positional);
+ csr_fill_pmc(interp, call_object, result_index, collect_positional);
result_index++;
break; /* Terminate the positional return loop. */
}
@@ -1819,26 +1795,26 @@
switch (PARROT_ARG_TYPE_MASK_MASK(return_flags)) {
case PARROT_ARG_INTVAL:
if (constant)
- csr_set_integer_keyed_int(interp, call_object, result_index,
+ csr_fill_integer(interp, call_object, result_index,
accessor->intval_constant(interp, return_info, return_index));
else
- csr_set_integer_keyed_int(interp, call_object, result_index,
+ csr_fill_integer(interp, call_object, result_index,
accessor->intval(interp, return_info, return_index));
break;
case PARROT_ARG_FLOATVAL:
if (constant)
- csr_set_number_keyed_int(interp, call_object, result_index,
+ csr_fill_number(interp, call_object, result_index,
accessor->numval_constant(interp, return_info, return_index));
else
- csr_set_number_keyed_int(interp, call_object, result_index,
+ csr_fill_number(interp, call_object, result_index,
accessor->numval(interp, return_info, return_index));
break;
case PARROT_ARG_STRING:
if (constant)
- csr_set_string_keyed_int(interp, call_object, result_index,
+ csr_fill_string(interp, call_object, result_index,
accessor->string_constant(interp, return_info, return_index));
else
- csr_set_string_keyed_int(interp, call_object, result_index,
+ csr_fill_string(interp, call_object, result_index,
accessor->string(interp, return_info, return_index));
break;
case PARROT_ARG_PMC:
@@ -1871,7 +1847,7 @@
return_index--; /* we want to stay on the same item */
}
}
- csr_set_pmc_keyed_int(interp, call_object, result_index, return_item);
+ csr_fill_pmc(interp, call_object, result_index, return_item);
break;
}
default:
@@ -1888,7 +1864,7 @@
next_result_flags = result_array[result_index + 1];
if (next_result_flags & PARROT_ARG_OPT_FLAG) {
result_index++;
- csr_set_integer_keyed_int(interp, call_object, result_index, 1);
+ csr_fill_integer(interp, call_object, result_index, 1);
}
}
}
@@ -1911,7 +1887,7 @@
next_result_flags = result_array[result_index + 1];
if (next_result_flags & PARROT_ARG_OPT_FLAG) {
result_index++;
- csr_set_integer_keyed_int(interp, call_object, result_index, 0);
+ csr_fill_integer(interp, call_object, result_index, 0);
}
}
}
@@ -2030,7 +2006,7 @@
named_return_list = pmc_new(interp,
Parrot_get_ctx_HLL_type(interp, enum_class_Hash));
- csr_set_pmc_keyed_int(interp, call_object, result_index, named_return_list);
+ csr_fill_pmc(interp, call_object, result_index, named_return_list);
break; /* End of named results. */
}
@@ -2054,19 +2030,19 @@
/* Fill the named result. */
switch (PARROT_ARG_TYPE_MASK_MASK(result_flags)) {
case PARROT_ARG_INTVAL:
- csr_set_integer_keyed_int(interp, call_object, result_index,
+ csr_fill_integer(interp, call_object, result_index,
VTABLE_get_integer_keyed_str(interp, named_return_list, result_name));
break;
case PARROT_ARG_FLOATVAL:
- csr_set_number_keyed_int(interp, call_object, result_index,
+ csr_fill_number(interp, call_object, result_index,
VTABLE_get_number_keyed_str(interp, named_return_list, result_name));
break;
case PARROT_ARG_STRING:
- csr_set_string_keyed_int(interp, call_object, result_index,
+ csr_fill_string(interp, call_object, result_index,
VTABLE_get_string_keyed_str(interp, named_return_list, result_name));
break;
case PARROT_ARG_PMC:
- csr_set_pmc_keyed_int(interp, call_object, result_index,
+ csr_fill_pmc(interp, call_object, result_index,
VTABLE_get_pmc_keyed_str(interp, named_return_list, result_name));
break;
default:
@@ -2084,7 +2060,7 @@
next_result_flags = return_array[result_index + 1];
if (next_result_flags & PARROT_ARG_OPT_FLAG) {
result_index++;
- csr_set_integer_keyed_int(interp, call_object, result_index, 1);
+ csr_fill_integer(interp, call_object, result_index, 1);
}
}
}
@@ -2100,7 +2076,7 @@
next_result_flags = result_array[result_index + 1];
if (next_result_flags & PARROT_ARG_OPT_FLAG) {
result_index++;
- csr_set_integer_keyed_int(interp, call_object, result_index, 1);
+ csr_fill_integer(interp, call_object, result_index, 1);
}
}
}
@@ -2454,10 +2430,9 @@
GETATTR_CallSignature_returns_values(interp, parent, returns_values);
/* Resize tailcall.returns_values to new size */
- csr_set_integer_native(interp, tailcall, returns_size);
+ tailcall_returns_values = csr_reallocate_return_values(interp, tailcall, returns_size);
/* And copy values over it */
- GETATTR_CallSignature_returns_values(interp, tailcall, tailcall_returns_values);
mem_copy_n_typed(tailcall_returns_values, returns_values, returns_size, void**);
/* Store raw signature */
@@ -2862,29 +2837,8 @@
/*
-=item C<static void ** csr_allocate_initial_values(PARROT_INTERP, PMC *self)>
-
-Allocate initial storage for returns in CallSignature.
-
-=cut
-*/
-
-PARROT_CANNOT_RETURN_NULL
-static void **
-csr_allocate_initial_values(PARROT_INTERP, ARGIN(PMC *self))
-{
- ASSERT_ARGS(csr_allocate_initial_values)
- void **values = (void **)Parrot_gc_allocate_fixed_size_storage(interp,
- 8 * sizeof (void *));
-
- SETATTR_CallSignature_returns_resize_threshold(interp, self, 8);
- return values;
-}
-
-/*
-
-=item C<static void csr_set_integer_native(PARROT_INTERP, PMC *self, INTVAL
-size)>
+=item C<static void** csr_reallocate_return_values(PARROT_INTERP, PMC *self,
+INTVAL size)>
Resizes the array to C<size> elements.
@@ -2892,10 +2846,11 @@
*/
-static void
-csr_set_integer_native(PARROT_INTERP, ARGIN(PMC *self), INTVAL size)
+PARROT_CANNOT_RETURN_NULL
+static void**
+csr_reallocate_return_values(PARROT_INTERP, ARGIN(PMC *self), INTVAL size)
{
- ASSERT_ARGS(csr_set_integer_native)
+ ASSERT_ARGS(csr_reallocate_return_values)
void **values = NULL;
INTVAL resize_threshold;
@@ -2904,13 +2859,19 @@
/* Empty. Allocate 8 elements (arbitary number) */
if (!values) {
- values = csr_allocate_initial_values(interp, self);
+ /* It's slightly wrong. We have to allocate directly from system allocator
+ * when initial size is greater than 8. But it's never happen. So, put
+ * assert here to be sure */
+ PARROT_ASSERT(size < 8);
+ values = (void **)Parrot_gc_allocate_fixed_size_storage(interp,
+ 8 * sizeof (void *));
+
SETATTR_CallSignature_returns_values(interp, self, values);
SETATTR_CallSignature_returns_size(interp, self, size);
+ SETATTR_CallSignature_returns_resize_threshold(interp, self, 8);
}
else if (size <= resize_threshold) {
SETATTR_CallSignature_returns_size(interp, self, size);
- return;
}
else {
void *old_values;
@@ -2939,11 +2900,13 @@
SETATTR_CallSignature_returns_size(interp, self, size);
SETATTR_CallSignature_returns_resize_threshold(interp, self, cur);
}
+
+ return values;
}
/*
-=item C<static INTVAL csr_elements(PARROT_INTERP, PMC *self)>
+=item C<static INTVAL csr_returns_count(PARROT_INTERP, PMC *self)>
Returns the number of returns values.
@@ -2952,9 +2915,9 @@
*/
static INTVAL
-csr_elements(PARROT_INTERP, ARGIN(PMC *self))
+csr_returns_count(PARROT_INTERP, ARGIN(PMC *self))
{
- ASSERT_ARGS(csr_elements)
+ ASSERT_ARGS(csr_returns_count)
INTVAL size;
GETATTR_CallSignature_returns_size(interp, self, size);
return size;
@@ -2962,88 +2925,49 @@
/*
-=item C<static void csr_set_pointer_keyed_int(PARROT_INTERP, PMC *self, INTVAL
-key, void *value)>
+=item C<static void csr_push_pointer(PARROT_INTERP, PMC *self, void *value,
+INTVAL type)>
-Sets the pointer at position key. The pointer should point to a storage
+Push pointer to results. The pointer should point to a storage
location for a return value -- it must be a pointer to an INTVAL, FLOATVAL,
-PMC, or STRING storage location.
+PMC, or STRING storage location. C<type> is type of pointer.
+
+TODO Rephrase doc. It's weird.
=cut
*/
static void
-csr_set_pointer_keyed_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL key, ARGIN_NULLOK(void *value))
+csr_push_pointer(PARROT_INTERP, ARGIN(PMC *self), ARGIN_NULLOK(void *value), INTVAL type)
{
- ASSERT_ARGS(csr_set_pointer_keyed_int)
+ ASSERT_ARGS(csr_push_pointer)
void **values;
INTVAL size;
- GETATTR_CallSignature_returns_values(interp, self, values);
- GETATTR_CallSignature_returns_size(interp, self, size);
-
- if (!values) {
- if (key < 8) {
- values = csr_allocate_initial_values(interp, self);
- SETATTR_CallSignature_returns_values(interp, self, values);
- SETATTR_CallSignature_returns_size(interp, self, key + 1);
- }
- else {
- csr_set_integer_native(interp, self, key + 1);
- GETATTR_CallSignature_returns_values(interp, self, values);
- }
- }
- else if (key >= size)
- csr_set_integer_native(interp, self, key + 1);
-
- values[key] = value;
-}
-
-/*
-
-=item C<static void csr_push_integer(PARROT_INTERP, PMC *self, INTVAL type)>
-
-Set type of last pushed pointer.
-
-=cut
-
-*/
-
-static void
-csr_push_integer(PARROT_INTERP, ARGIN(PMC *self), INTVAL type)
-{
- ASSERT_ARGS(csr_push_integer)
- void **values;
- INTVAL idx;
-
- GETATTR_CallSignature_returns_size(interp, self, idx);
-
- /* last index is size - 1, of course */
- idx--;
-
PARROT_ASSERT((type >= 0 && type < 4) || !"Wrong pointer type");
- GETATTR_CallSignature_returns_values(interp, self, values);
+ GETATTR_CallSignature_returns_size(interp, self, size);
+ values = csr_reallocate_return_values(interp, self, size + 1);
- values[idx] = INTVAL2PTR(void *,
- PTR2INTVAL(UNTAG_CELL(values[idx])) | type);
+ /* Tag pointer */
+ values[size] = INTVAL2PTR(void *, PTR2INTVAL(value) | type);
}
/*
-=item C<static void csr_set_integer_keyed_int(PARROT_INTERP, PMC *self, INTVAL
-key, INTVAL value)>
+=item C<static void csr_fill_integer(PARROT_INTERP, PMC *self, INTVAL key,
+INTVAL value)>
-=item C<static void csr_set_number_keyed_int(PARROT_INTERP, PMC *self, INTVAL
-key, FLOATVAL value)>
+=item C<static void csr_fill_number(PARROT_INTERP, PMC *self, INTVAL key,
+FLOATVAL value)>
-=item C<static void csr_set_string_keyed_int(PARROT_INTERP, PMC *self, INTVAL
-key, STRING *value)>
+=item C<static void csr_fill_string(PARROT_INTERP, PMC *self, INTVAL key, STRING
+*value)>
-=item C<static void csr_set_pmc_keyed_int(PARROT_INTERP, PMC *self, INTVAL key,
-PMC *value)>
+=item C<static void csr_fill_pmc(PARROT_INTERP, PMC *self, INTVAL key, PMC
+*value)>
Sets the value of the element at index C<key> to C<value>, casting if
necessary.
@@ -3053,9 +2977,9 @@
*/
static void
-csr_set_integer_keyed_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL key, INTVAL value)
+csr_fill_integer(PARROT_INTERP, ARGIN(PMC *self), INTVAL key, INTVAL value)
{
- ASSERT_ARGS(csr_set_integer_keyed_int)
+ ASSERT_ARGS(csr_fill_integer)
void *cell = csr_get_pointer_keyed_int(interp, self, key);
void *ptr = UNTAG_CELL(cell);
@@ -3078,9 +3002,9 @@
}
static void
-csr_set_number_keyed_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL key, FLOATVAL value)
+csr_fill_number(PARROT_INTERP, ARGIN(PMC *self), INTVAL key, FLOATVAL value)
{
- ASSERT_ARGS(csr_set_number_keyed_int)
+ ASSERT_ARGS(csr_fill_number)
void *cell = csr_get_pointer_keyed_int(interp, self, key);
void *ptr = UNTAG_CELL(cell);
@@ -3103,9 +3027,9 @@
}
static void
-csr_set_string_keyed_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL key, ARGIN_NULLOK(STRING *value))
+csr_fill_string(PARROT_INTERP, ARGIN(PMC *self), INTVAL key, ARGIN_NULLOK(STRING *value))
{
- ASSERT_ARGS(csr_set_string_keyed_int)
+ ASSERT_ARGS(csr_fill_string)
void *cell = csr_get_pointer_keyed_int(interp, self, key);
void *ptr = UNTAG_CELL(cell);
@@ -3130,9 +3054,9 @@
}
static void
-csr_set_pmc_keyed_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL key, ARGIN_NULLOK(PMC *value))
+csr_fill_pmc(PARROT_INTERP, ARGIN(PMC *self), INTVAL key, ARGIN_NULLOK(PMC *value))
{
- ASSERT_ARGS(csr_set_pmc_keyed_int)
+ ASSERT_ARGS(csr_fill_pmc)
void *cell = csr_get_pointer_keyed_int(interp, self, key);
void *ptr = UNTAG_CELL(cell);
@@ -3224,6 +3148,7 @@
STRING *full_sig;
PMC *return_flags;
INTVAL return_flags_size;
+ INTVAL int_type;
Parrot_String return_flags_name = Parrot_str_new_constant(interp, "return_flags");
Parrot_String sig_name = Parrot_str_new_constant(interp, "signature");
@@ -3233,8 +3158,6 @@
Parrot_str_concat(interp, full_sig, Parrot_str_new_constant(interp, "->"), 0);
Parrot_str_concat(interp, full_sig, type, 0);
- csr_set_pointer_keyed_int(interp, sig_object, csr_elements(interp, sig_object), result);
-
/* Update returns_flag */
return_flags = VTABLE_get_attr_str(interp, sig_object, return_flags_name);
if (PMC_IS_NULL(return_flags)) {
@@ -3253,22 +3176,22 @@
case 'I':
VTABLE_set_integer_keyed_int(interp, return_flags, return_flags_size,
PARROT_ARG_INTVAL);
- csr_push_integer(interp, sig_object, PARROT_ARG_INTVAL);
+ int_type = PARROT_ARG_INTVAL;
break;
case 'N':
VTABLE_set_integer_keyed_int(interp, return_flags, return_flags_size,
PARROT_ARG_FLOATVAL);
- csr_push_integer(interp, sig_object, PARROT_ARG_FLOATVAL);
+ int_type = PARROT_ARG_FLOATVAL;
break;
case 'S':
VTABLE_set_integer_keyed_int(interp, return_flags, return_flags_size,
PARROT_ARG_STRING);
- csr_push_integer(interp, sig_object, PARROT_ARG_STRING);
+ int_type = PARROT_ARG_STRING;
break;
case 'P':
VTABLE_set_integer_keyed_int(interp, return_flags, return_flags_size,
PARROT_ARG_PMC);
- csr_push_integer(interp, sig_object, PARROT_ARG_PMC);
+ int_type = PARROT_ARG_PMC;
break;
default:
Parrot_ex_throw_from_c_args(interp, NULL,
@@ -3276,6 +3199,7 @@
"invalid signature string element!");
}
+ csr_push_pointer(interp, sig_object, result, int_type);
}
/*
More information about the parrot-commits
mailing list