Navigation Menu

Skip to content

Commit

Permalink
Merge branch 'pcc_arg_unify_local' into pcc_arg_unify_2_0_local
Browse files Browse the repository at this point in the history
It's work-in-progress commit. Few changes required.

Conflicts:
	include/parrot/call.h
	include/parrot/interpreter.h
	lib/Parrot/Pmc2c/PCCMETHOD.pm
	src/call/pcc.c
	src/debug.c
	src/exceptions.c
	src/extend.c
	src/gc/alloc_register.c
	src/interp/inter_cb.c
	src/ops/core.ops
	src/ops/pic.ops
	src/packfile.c
	src/pmc/callsignature.pmc
	src/pmc/cpointer.pmc
	src/pmc/object.pmc
	tools/build/nativecall.pl

git-svn-id: https://svn.parrot.org/parrot/trunk@41451 d31e2699-5ff4-0310-a27c-f18f2fbe73fe
  • Loading branch information
bacek committed Sep 24, 2009
1 parent 9ac839c commit 97cde01
Show file tree
Hide file tree
Showing 30 changed files with 2,008 additions and 810 deletions.
5 changes: 2 additions & 3 deletions compilers/imcc/pbc.c
Expand Up @@ -1124,9 +1124,8 @@ create_lexinfo(PARROT_INTERP, ARGMOD(IMC_Unit *unit), ARGIN(PMC *sub_pmc),
"add lexical '%s' to sub name '%Ss'\n",
n->name, sub->name);

Parrot_PCCINVOKE(interp, lex_info,
string_from_literal(interp, "declare_lex_preg"),
"SI->", lex_name, r->color);
VTABLE_set_integer_keyed_str(interp, lex_info,
lex_name, r->color);

/* next possible name */
n = n->reg;
Expand Down
2 changes: 1 addition & 1 deletion config/gen/config_pm/config_lib_pasm.in
Expand Up @@ -11,7 +11,7 @@
set I11, 1 # install flag
no_arg:
new P0, 'Hash'
new P1, 'Undef'
null P1

@PCONFIG@

Expand Down
184 changes: 183 additions & 1 deletion include/parrot/call.h
Expand Up @@ -35,6 +35,20 @@ typedef struct parrot_runloop_t {

typedef parrot_runloop_t Parrot_runloop;

typedef enum {
CALLSIGNATURE_is_exception_FLAG = PObj_private0_FLAG,
} callsignature_flags_enum;

#define CALLSIGNATURE_get_FLAGS(o) (PObj_get_FLAGS(o))
#define CALLSIGNATURE_flag_TEST(flag, o) (CALLSIGNATURE_get_FLAGS(o) & CALLSIGNATURE_ ## flag ## _FLAG)
#define CALLSIGNATURE_flag_SET(flag, o) (CALLSIGNATURE_get_FLAGS(o) |= CALLSIGNATURE_ ## flag ## _FLAG)
#define CALLSIGNATURE_flag_CLEAR(flag, o) (CALLSIGNATURE_get_FLAGS(o) &= ~(UINTVAL)(CALLSIGNATURE_ ## flag ## _FLAG))

/* Mark if the CallSignature is for an exception handler */
#define CALLSIGNATURE_is_exception_TEST(o) CALLSIGNATURE_flag_TEST(is_exception, (o))
#define CALLSIGNATURE_is_exception_SET(o) CALLSIGNATURE_flag_SET(is_exception, (o))
#define CALLSIGNATURE_is_exception_CLEAR(o) CALLSIGNATURE_flag_CLEAR(is_exception, (o))

typedef enum call_state_mode {
/* argument fetching/putting modes */
CALL_STATE_SIG = 0x100, /* runops, nci. In case we're interfacing with
Expand Down Expand Up @@ -213,6 +227,17 @@ void parrot_pass_args(PARROT_INTERP,
FUNC_MODIFIES(*src_indexes)
FUNC_MODIFIES(*dest_indexes);

PARROT_EXPORT
PARROT_WARN_UNUSED_RESULT
PARROT_CANNOT_RETURN_NULL
PMC* Parrot_pcc_build_sig_object_from_op(PARROT_INTERP,
ARGIN_NULLOK(PMC *signature),
ARGIN(PMC * const raw_sig),
ARGIN(opcode_t * const raw_args))
__attribute__nonnull__(1)
__attribute__nonnull__(3)
__attribute__nonnull__(4);

PARROT_EXPORT
PARROT_WARN_UNUSED_RESULT
PARROT_CANNOT_RETURN_NULL
Expand All @@ -223,10 +248,63 @@ PMC* Parrot_pcc_build_sig_object_from_varargs(PARROT_INTERP,
__attribute__nonnull__(1)
__attribute__nonnull__(3);

PARROT_EXPORT
PARROT_WARN_UNUSED_RESULT
PARROT_CANNOT_RETURN_NULL
PMC* Parrot_pcc_build_sig_object_returns_from_op(PARROT_INTERP,
ARGIN_NULLOK(PMC *signature),
ARGIN(PMC *raw_sig),
ARGIN(opcode_t *raw_args))
__attribute__nonnull__(1)
__attribute__nonnull__(3)
__attribute__nonnull__(4);

PARROT_EXPORT
void Parrot_pcc_fill_params_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_params_from_op(PARROT_INTERP,
ARGMOD(PMC *call_object),
ARGIN(PMC *raw_sig),
ARGIN(opcode_t *raw_params))
__attribute__nonnull__(1)
__attribute__nonnull__(2)
__attribute__nonnull__(3)
__attribute__nonnull__(4)
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(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);

PARROT_EXPORT
void Parrot_pcc_invoke_from_sig_object(PARROT_INTERP,
ARGIN(PMC *sub_obj),
ARGIN(PMC *sig_obj))
ARGIN(PMC *call_object))
__attribute__nonnull__(1)
__attribute__nonnull__(2)
__attribute__nonnull__(3);
Expand Down Expand Up @@ -349,6 +427,7 @@ STRING* set_retval_s(PARROT_INTERP, int sig_ret, ARGIN(PMC *ctx))
&& PARROT_ASSERT_ARG(sig)
#define ASSERT_ARGS_parrot_pass_args __attribute__unused__ int _ASSERT_ARGS_CHECK = \
PARROT_ASSERT_ARG(interp) \
<<<<<<< HEAD:include/parrot/call.h
&& PARROT_ASSERT_ARG(src_ctx) \
&& PARROT_ASSERT_ARG(dest_ctx)
#define ASSERT_ARGS_Parrot_pcc_build_sig_object_from_varargs \
Expand All @@ -360,6 +439,51 @@ STRING* set_retval_s(PARROT_INTERP, int sig_ret, ARGIN(PMC *ctx))
PARROT_ASSERT_ARG(interp) \
&& PARROT_ASSERT_ARG(sub_obj) \
&& PARROT_ASSERT_ARG(sig_obj)
=======
|| PARROT_ASSERT_ARG(src_ctx) \
|| PARROT_ASSERT_ARG(dest_ctx)
#define ASSERT_ARGS_Parrot_pcc_build_sig_object_from_op \
__attribute__unused__ int _ASSERT_ARGS_CHECK = \
PARROT_ASSERT_ARG(interp) \
|| PARROT_ASSERT_ARG(raw_sig) \
|| PARROT_ASSERT_ARG(raw_args)
#define ASSERT_ARGS_Parrot_pcc_build_sig_object_from_varargs \
__attribute__unused__ int _ASSERT_ARGS_CHECK = \
PARROT_ASSERT_ARG(interp) \
|| PARROT_ASSERT_ARG(sig)
#define ASSERT_ARGS_Parrot_pcc_build_sig_object_returns_from_op \
__attribute__unused__ int _ASSERT_ARGS_CHECK = \
PARROT_ASSERT_ARG(interp) \
|| PARROT_ASSERT_ARG(raw_sig) \
|| PARROT_ASSERT_ARG(raw_args)
#define ASSERT_ARGS_Parrot_pcc_fill_params_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_params_from_op \
__attribute__unused__ int _ASSERT_ARGS_CHECK = \
PARROT_ASSERT_ARG(interp) \
|| PARROT_ASSERT_ARG(call_object) \
|| 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(call_object) \
|| 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) \
|| PARROT_ASSERT_ARG(sub_obj) \
|| PARROT_ASSERT_ARG(call_object)
>>>>>>> pcc_arg_unify_local:include/parrot/call.h
#define ASSERT_ARGS_Parrot_pcc_invoke_method_from_c_args \
__attribute__unused__ int _ASSERT_ARGS_CHECK = \
PARROT_ASSERT_ARG(interp) \
Expand Down Expand Up @@ -688,8 +812,66 @@ void runops(PARROT_INTERP, size_t offs)
/* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */
/* HEADERIZER END: src/call/ops.c */

<<<<<<< HEAD:include/parrot/call.h
#define ASSERT_SIG_PMC(sig) do {\
PARROT_ASSERT(!PMC_IS_NULL(sig)); \
=======
/* HEADERIZER BEGIN: src/call/callsignature.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))
__attribute__nonnull__(1)
__attribute__nonnull__(2);

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))
__attribute__nonnull__(1)
__attribute__nonnull__(2);

#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 = \
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(interp) \
|| PARROT_ASSERT_ARG(call_sig)
/* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */
/* HEADERIZER END: src/call/callsignature.c */

#define ASSERT_SIG_PMC(sig) \
>>>>>>> pcc_arg_unify_local:include/parrot/call.h
PARROT_ASSERT(PObj_is_PMC_TEST(sig)); \
PARROT_ASSERT((sig)->vtable->base_type == enum_class_FixedIntegerArray); \
} while (0)
Expand Down
1 change: 0 additions & 1 deletion include/parrot/interpreter.h
Expand Up @@ -148,7 +148,6 @@ typedef struct warnings_t {
* defined in imcc/imc.h */
struct _imc_info_t;


struct _Thread_data; /* in thread.h */
struct _Caches; /* caches .h */

Expand Down

0 comments on commit 97cde01

Please sign in to comment.