[svn:parrot] r41639 - in branches/pcc_reapply: config/gen/makefiles include/parrot src/call

allison at svn.parrot.org allison at svn.parrot.org
Sat Oct 3 16:43:55 UTC 2009


Author: allison
Date: Sat Oct  3 16:43:49 2009
New Revision: 41639
URL: https://trac.parrot.org/parrot/changeset/41639

Log:
[pcc] Set up compiling for new arg processing file, and run the headerizer.

Modified:
   branches/pcc_reapply/config/gen/makefiles/root.in
   branches/pcc_reapply/include/parrot/call.h
   branches/pcc_reapply/src/call/args.c
   branches/pcc_reapply/src/call/pcc.c

Modified: branches/pcc_reapply/config/gen/makefiles/root.in
==============================================================================
--- branches/pcc_reapply/config/gen/makefiles/root.in	Sat Oct  3 16:31:34 2009	(r41638)
+++ branches/pcc_reapply/config/gen/makefiles/root.in	Sat Oct  3 16:43:49 2009	(r41639)
@@ -428,6 +428,7 @@
     $(SRC_DIR)/hash$(O) \
     $(SRC_DIR)/hll$(O) \
     $(SRC_DIR)/call/pcc$(O)  \
+    $(SRC_DIR)/call/args$(O)  \
     $(SRC_DIR)/interp/inter_cb$(O)  \
     $(SRC_DIR)/interp/inter_create$(O)  \
     $(SRC_DIR)/interp/inter_misc$(O)  \
@@ -614,6 +615,7 @@
     $(SRC_DIR)/global_setup.str \
     $(SRC_DIR)/hll.str \
     $(SRC_DIR)/call/pcc.str \
+    $(SRC_DIR)/call/args.str \
     $(SRC_DIR)/interp/inter_cb.str \
     $(SRC_DIR)/interp/inter_create.str \
     $(SRC_DIR)/interp/inter_misc.str \
@@ -1130,6 +1132,9 @@
 $(SRC_DIR)/runcore/profiling$(O) : $(SRC_DIR)/runcore/profiling.str $(GENERAL_H_FILES) \
 	$(SRC_DIR)/pmc/pmc_sub.h
 
+$(SRC_DIR)/call/args$(O) : $(SRC_DIR)/call/args.c $(GENERAL_H_FILES) \
+	$(SRC_DIR)/call/args.str
+
 $(SRC_DIR)/call/pcc$(O) : $(SRC_DIR)/call/pcc.c $(GENERAL_H_FILES) \
 	$(SRC_DIR)/call/pcc.str $(SRC_DIR)/pmc/pmc_fixedintegerarray.h \
 	$(SRC_DIR)/pmc/pmc_key.h $(SRC_DIR)/pmc/pmc_continuation.h

Modified: branches/pcc_reapply/include/parrot/call.h
==============================================================================
--- branches/pcc_reapply/include/parrot/call.h	Sat Oct  3 16:31:34 2009	(r41638)
+++ branches/pcc_reapply/include/parrot/call.h	Sat Oct  3 16:43:49 2009	(r41639)
@@ -280,26 +280,6 @@
         FUNC_MODIFIES(*call_object);
 
 PARROT_EXPORT
-void Parrot_pcc_fill_returns_from_c_args(PARROT_INTERP,
-    ARGMOD(PMC *call_object),
-    ARGIN(const char *signature),
-    ...)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*call_object);
-
-PARROT_EXPORT
-void Parrot_pcc_fill_returns_from_op(PARROT_INTERP,
-    ARGMOD_NULLOK(PMC *call_object),
-    ARGIN(PMC *raw_sig),
-    ARGIN(opcode_t *raw_returns))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(3)
-        __attribute__nonnull__(4)
-        FUNC_MODIFIES(*call_object);
-
-PARROT_EXPORT
 void Parrot_pcc_invoke_from_sig_object(PARROT_INTERP,
     ARGIN(PMC *sub_obj),
     ARGIN(PMC *call_object))
@@ -451,16 +431,6 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(raw_sig) \
     , PARROT_ASSERT_ARG(raw_params))
-#define ASSERT_ARGS_Parrot_pcc_fill_returns_from_c_args \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(call_object) \
-    , PARROT_ASSERT_ARG(signature))
-#define ASSERT_ARGS_Parrot_pcc_fill_returns_from_op \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(raw_sig) \
-    , PARROT_ASSERT_ARG(raw_returns))
 #define ASSERT_ARGS_Parrot_pcc_invoke_from_sig_object \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -794,59 +764,41 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: src/call/ops.c */
 
-/* HEADERIZER BEGIN: src/call/callsignature.c */
+/* HEADERIZER BEGIN: src/call/args.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
 PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-opcode_t* Parrot_pcc_get_call_sig_raw_args(PARROT_INTERP,
-    ARGIN(PMC *call_sig))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-opcode_t* Parrot_pcc_get_call_sig_raw_returns(PARROT_INTERP,
-    ARGIN(PMC *call_sig))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_EXPORT
-PARROT_CANNOT_RETURN_NULL
-void Parrot_pcc_set_call_sig_raw_args(PARROT_INTERP,
-    ARGIN(PMC *call_sig),
-    ARGIN_NULLOK(opcode_t *raw_args))
+void Parrot_pcc_fill_returns_from_c_args(PARROT_INTERP,
+    ARGMOD(PMC *call_object),
+    ARGIN(const char *signature),
+    ...)
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*call_object);
 
 PARROT_EXPORT
-PARROT_CANNOT_RETURN_NULL
-void Parrot_pcc_set_call_sig_raw_returns(PARROT_INTERP,
-    ARGIN(PMC *call_sig),
-    ARGIN_NULLOK(opcode_t *raw_returns))
+void Parrot_pcc_fill_returns_from_op(PARROT_INTERP,
+    ARGMOD_NULLOK(PMC *call_object),
+    ARGIN(PMC *raw_sig),
+    ARGIN(opcode_t *raw_returns))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*call_object);
 
-#define ASSERT_ARGS_Parrot_pcc_get_call_sig_raw_args \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = \
-       PARROT_ASSERT_ARG(interp) \
-    || PARROT_ASSERT_ARG(call_sig)
-#define ASSERT_ARGS_Parrot_pcc_get_call_sig_raw_returns \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = \
-       PARROT_ASSERT_ARG(interp) \
-    || PARROT_ASSERT_ARG(call_sig)
-#define ASSERT_ARGS_Parrot_pcc_set_call_sig_raw_args \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+#define ASSERT_ARGS_Parrot_pcc_fill_returns_from_c_args \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    || PARROT_ASSERT_ARG(call_sig)
-#define ASSERT_ARGS_Parrot_pcc_set_call_sig_raw_returns \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+    , PARROT_ASSERT_ARG(call_object) \
+    , PARROT_ASSERT_ARG(signature))
+#define ASSERT_ARGS_Parrot_pcc_fill_returns_from_op \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    || PARROT_ASSERT_ARG(call_sig)
+    , PARROT_ASSERT_ARG(raw_sig) \
+    , PARROT_ASSERT_ARG(raw_returns))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-/* HEADERIZER END: src/call/callsignature.c */
+/* HEADERIZER END: src/call/args.c */
 
 #define ASSERT_SIG_PMC(sig) do {\
     PARROT_ASSERT(!PMC_IS_NULL(sig)); \

Modified: branches/pcc_reapply/src/call/args.c
==============================================================================
--- branches/pcc_reapply/src/call/args.c	Sat Oct  3 16:31:34 2009	(r41638)
+++ branches/pcc_reapply/src/call/args.c	Sat Oct  3 16:43:49 2009	(r41639)
@@ -27,6 +27,23 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
+PARROT_CAN_RETURN_NULL
+static void parse_signature_string(PARROT_INTERP,
+    ARGIN(const char *signature),
+    ARGMOD(PMC **arg_flags),
+    ARGMOD(PMC **return_flags))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*arg_flags)
+        FUNC_MODIFIES(*return_flags);
+
+#define ASSERT_ARGS_parse_signature_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(signature) \
+    , PARROT_ASSERT_ARG(arg_flags) \
+    , PARROT_ASSERT_ARG(return_flags))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 

Modified: branches/pcc_reapply/src/call/pcc.c
==============================================================================
--- branches/pcc_reapply/src/call/pcc.c	Sat Oct  3 16:31:34 2009	(r41638)
+++ branches/pcc_reapply/src/call/pcc.c	Sat Oct  3 16:43:49 2009	(r41639)
@@ -1379,260 +1379,6 @@
     va_end(args);
 }
 
-/*
-
-=item C<void Parrot_pcc_fill_returns_from_op(PARROT_INTERP, PMC *call_object,
-PMC *raw_sig, opcode_t *raw_returns)>
-
-Sets return values for the current function call. First it sets the
-positional returns, then the named returns.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_pcc_fill_returns_from_op(PARROT_INTERP, ARGMOD_NULLOK(PMC *call_object),
-        ARGIN(PMC *raw_sig), ARGIN(opcode_t *raw_returns))
-{
-    ASSERT_ARGS(Parrot_pcc_fill_returns_from_op)
-    INTVAL return_list_elements;
-    PMC *ctx = CURRENT_CONTEXT(interp);
-    PMC *return_list;
-    PMC *caller_return_flags;
-    INTVAL raw_return_count     = VTABLE_elements(interp, raw_sig);
-    INTVAL return_index = 0;
-    INTVAL return_list_index = 0;
-    INTVAL err_check      = 0;
-
-    /* Check if we should be throwing errors. This is configured separately
-     * for parameters and return values. */
-    if (PARROT_ERRORS_test(interp, PARROT_ERRORS_RESULT_COUNT_FLAG))
-            err_check = 1;
-
-    /* A null call object is fine if there are no arguments and no returns. */
-    if (PMC_IS_NULL(call_object)) {
-        if (raw_return_count > 0) {
-            if (err_check)
-                Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                        "too many return values: %d passed, 0 expected",
-                        raw_return_count);
-            return;
-        }
-    }
-
-    return_list = VTABLE_get_attr_str(interp, call_object, CONST_STRING(interp, "returns"));
-    if (PMC_IS_NULL(return_list)) {
-        if (raw_return_count > 0) {
-            if (err_check)
-                Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                        "too many return values: %d passed, 0 expected",
-                        raw_return_count);
-            return;
-        }
-    }
-    else
-        return_list_elements = VTABLE_elements(interp, return_list);
-
-    caller_return_flags = VTABLE_get_attr_str(interp, call_object, CONST_STRING(interp, "return_flags"));
-
-
-    if (raw_return_count > return_list_elements) {
-        if (err_check)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                    "too many return values: %d passed, %d expected",
-                    raw_return_count, return_list_elements);
-    }
-
-    for (return_index = 0; return_index < raw_return_count; return_index++) {
-        INTVAL return_flags = VTABLE_get_integer_keyed_int(interp,
-                    raw_sig, return_index);
-        INTVAL result_flags;
-
-        const INTVAL constant  = PARROT_ARG_CONSTANT_ISSET(return_flags);
-        const INTVAL raw_index = raw_returns[return_index + 2];
-        PMC *result_item = VTABLE_get_pmc_keyed_int(interp, return_list, return_list_index);
-        STRING *item_sig;
-
-        /* Gracefully ignore extra returns when error checking is off. */
-        if (PMC_IS_NULL(result_item))
-            continue; /* Go on to next return arg. */
-
-        result_flags = VTABLE_get_integer_keyed_int(interp, caller_return_flags, return_list_index);
-        item_sig = VTABLE_get_string_keyed_str(interp, result_item, CONST_STRING(interp, ''));
-
-        switch (PARROT_ARG_TYPE_MASK_MASK(return_flags)) {
-            case PARROT_ARG_INTVAL:
-                if (Parrot_str_equal(interp, item_sig, CONST_STRING(interp, "P"))) {
-                    VTABLE_set_pmc(interp, result_item,
-                            pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Integer)));
-                }
-                if (constant)
-                    VTABLE_set_integer_native(interp, result_item, raw_index);
-                else
-                    VTABLE_set_integer_native(interp, result_item, CTX_REG_INT(ctx, raw_index));
-                return_list_index++;
-                break;
-            case PARROT_ARG_FLOATVAL:
-                if (Parrot_str_equal(interp, item_sig, CONST_STRING(interp, "P"))) {
-                    VTABLE_set_pmc(interp, result_item,
-                        pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Float)));
-                }
-                if (constant)
-                    VTABLE_set_number_native(interp, result_item,
-                            Parrot_pcc_get_num_constant(interp, ctx, raw_index));
-                else
-                    VTABLE_set_number_native(interp, result_item, CTX_REG_NUM(ctx, raw_index));
-                return_list_index++;
-                break;
-            case PARROT_ARG_STRING:
-                if (Parrot_str_equal(interp, item_sig, CONST_STRING(interp, "P"))) {
-                    VTABLE_set_pmc(interp, result_item,
-                            pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_String)));
-                }
-                if (constant)
-                    VTABLE_set_string_native(interp, result_item, Parrot_str_new_COW(interp,
-                            Parrot_pcc_get_string_constant(interp, ctx, raw_index)));
-                else
-                    VTABLE_set_string_native(interp, result_item, CTX_REG_STR(ctx, raw_index));
-                return_list_index++;
-                break;
-            case PARROT_ARG_PMC:
-                if (constant)
-                    VTABLE_set_pmc(interp, result_item,
-                            Parrot_pcc_get_pmc_constant(interp, ctx, raw_index));
-                else
-                    VTABLE_set_pmc(interp, result_item, CTX_REG_PMC(ctx, raw_index));
-                return_list_index++;
-                break;
-            default:
-                Parrot_ex_throw_from_c_args(interp, NULL,
-                        EXCEPTION_INVALID_OPERATION, "invalid parameter type");
-                break;
-        }
-    }
-}
-
-/*
-
-=item C<void Parrot_pcc_fill_returns_from_c_args(PARROT_INTERP, PMC
-*call_object, const char *signature, ...)>
-
-Sets return values for the current function call. First it sets the
-positional returns, then the named returns.
-
-The signature is a string in the format used for
-C<Parrot_pcc_invoke_from_sig_object>, but with only return arguments.
-The parameters are passed in as a list of INTVAL, FLOATVAL, STRING *, or
-PMC * variables.
-
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_pcc_fill_returns_from_c_args(PARROT_INTERP, ARGMOD(PMC *call_object),
-        ARGIN(const char *signature), ...)
-{
-    ASSERT_ARGS(Parrot_pcc_fill_returns_from_c_args)
-    va_list args;
-    INTVAL return_list_elements;
-    PMC *ctx = CURRENT_CONTEXT(interp);
-    PMC * const return_list = VTABLE_get_attr_str(interp, call_object, CONST_STRING(interp, "returns"));
-    INTVAL raw_return_count = 0;
-    INTVAL return_index = 0;
-    INTVAL return_list_index = 0;
-    INTVAL err_check      = 0;
-
-    PMC *raw_sig = PMCNULL;
-    PMC *invalid_sig = PMCNULL;
-
-    parse_signature_string(interp, signature, &raw_sig, &invalid_sig);
-    if (!PMC_IS_NULL(invalid_sig))
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                "parameters should not be included in the return signature");
-    raw_return_count = VTABLE_elements(interp, raw_sig);
-
-    /* Check if we should be throwing errors. This is configured separately
-     * for parameters and return values. */
-    if (PARROT_ERRORS_test(interp, PARROT_ERRORS_RESULT_COUNT_FLAG))
-            err_check = 1;
-
-    if (PMC_IS_NULL(return_list)) {
-        if (err_check)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                    "too many return values: %d passed, 0 expected",
-                    raw_return_count, return_list_elements);
-        return;
-    }
-    else
-        return_list_elements = VTABLE_elements(interp, return_list);
-
-
-    if (raw_return_count > return_list_elements) {
-        if (err_check)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                    "too many return values: %d passed, %d expected",
-                    raw_return_count, return_list_elements);
-    }
-
-    va_start(args, signature);
-    for (return_index = 0; return_index < raw_return_count; return_index++) {
-        STRING *item_sig;
-        INTVAL return_flags = VTABLE_get_integer_keyed_int(interp,
-                    raw_sig, return_index);
-
-        PMC *result_item = VTABLE_get_pmc_keyed_int(interp, return_list, return_list_index);
-
-        /* Gracefully ignore extra returns when error checking is off. */
-        if (PMC_IS_NULL(result_item))
-            continue; /* Go on to next return arg. */
-
-        item_sig = VTABLE_get_string_keyed_str(interp, result_item, CONST_STRING(interp, ''));
-
-        switch (PARROT_ARG_TYPE_MASK_MASK(return_flags)) {
-            case PARROT_ARG_INTVAL:
-                if (Parrot_str_equal(interp, item_sig, CONST_STRING(interp, "P"))) {
-                    VTABLE_set_pmc(interp, result_item, pmc_new(
-                        interp, Parrot_get_ctx_HLL_type(interp, enum_class_Integer)));
-                }
-                VTABLE_set_integer_native(interp, result_item, va_arg(args, INTVAL));
-                return_list_index++;
-                break;
-            case PARROT_ARG_FLOATVAL:
-                if (Parrot_str_equal(interp, item_sig, CONST_STRING(interp, "P"))) {
-                    VTABLE_set_pmc(interp, result_item, pmc_new(
-                        interp, Parrot_get_ctx_HLL_type(interp, enum_class_Float)));
-                }
-                VTABLE_set_number_native(interp, result_item, va_arg(args, FLOATVAL));
-                return_list_index++;
-                break;
-            case PARROT_ARG_STRING:
-                if (Parrot_str_equal(interp, item_sig, CONST_STRING(interp, "P"))) {
-                    VTABLE_set_pmc(interp, result_item, pmc_new(
-                        interp, Parrot_get_ctx_HLL_type(interp, enum_class_String)));
-                }
-                VTABLE_set_string_native(interp, result_item,
-                        Parrot_str_new_COW(interp, va_arg(args, STRING *)));
-                return_list_index++;
-                break;
-            case PARROT_ARG_PMC:
-                VTABLE_set_pmc(interp, result_item, va_arg(args, PMC *));
-                return_list_index++;
-                break;
-            default:
-                Parrot_ex_throw_from_c_args(interp, NULL,
-                        EXCEPTION_INVALID_OPERATION, "invalid parameter type");
-                break;
-        }
-    }
-    va_end(args);
-}
-
-
 
 /*
 


More information about the parrot-commits mailing list