[svn:parrot] r47287 - branches/gc_massacre/src/call
bacek at svn.parrot.org
bacek at svn.parrot.org
Wed Jun 2 09:56:14 UTC 2010
Author: bacek
Date: Wed Jun 2 09:56:14 2010
New Revision: 47287
URL: https://trac.parrot.org/parrot/changeset/47287
Log:
Add a lot of assertions to help catching too-early-collected-context failure
Modified:
branches/gc_massacre/src/call/context.c
branches/gc_massacre/src/call/context_accessors.c
Modified: branches/gc_massacre/src/call/context.c
==============================================================================
--- branches/gc_massacre/src/call/context.c Wed Jun 2 09:55:58 2010 (r47286)
+++ branches/gc_massacre/src/call/context.c Wed Jun 2 09:56:14 2010 (r47287)
@@ -270,6 +270,8 @@
PARROT_ASSERT_MSG(!PMC_IS_NULL(pmcctx), "Can't initialise Null CallContext");
+ PARROT_ASSERT(PMC_IS_NULL(pmcold) || pmcold->vtable->base_type == enum_class_CallContext);
+
/*
* FIXME Invoking corotine shouldn't initialise context. So just
* check ctx->current_sub. If it's not null return from here
Modified: branches/gc_massacre/src/call/context_accessors.c
==============================================================================
--- branches/gc_massacre/src/call/context_accessors.c Wed Jun 2 09:55:58 2010 (r47286)
+++ branches/gc_massacre/src/call/context_accessors.c Wed Jun 2 09:56:14 2010 (r47287)
@@ -66,6 +66,7 @@
Parrot_pcc_get_constants_func(PARROT_INTERP, ARGIN(PMC *ctx))
{
ASSERT_ARGS(Parrot_pcc_get_constants_func)
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
return CONTEXT_STRUCT(ctx)->constants;
}
@@ -77,6 +78,7 @@
{
ASSERT_ARGS(Parrot_pcc_set_constants_func)
Parrot_Context * const c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
c->constants = constants;
}
@@ -96,6 +98,7 @@
{
ASSERT_ARGS(Parrot_pcc_get_recursion_depth_func)
const Parrot_Context *c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
return c->recursion_depth;
}
@@ -115,6 +118,7 @@
{
ASSERT_ARGS(Parrot_pcc_inc_recursion_depth_func)
Parrot_Context * const c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
return c->recursion_depth++;
}
@@ -134,6 +138,7 @@
{
ASSERT_ARGS(Parrot_pcc_dec_recursion_depth_func)
Parrot_Context * const c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
return --c->recursion_depth;
}
@@ -157,6 +162,7 @@
{
ASSERT_ARGS(Parrot_pcc_get_caller_ctx_func)
const Parrot_Context *c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
return c->caller_ctx;
}
@@ -166,6 +172,8 @@
{
ASSERT_ARGS(Parrot_pcc_set_caller_ctx_func)
Parrot_Context * const c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
+ PARROT_ASSERT(caller_ctx->vtable->base_type == enum_class_CallContext);
c->caller_ctx = caller_ctx;
}
@@ -189,6 +197,7 @@
{
ASSERT_ARGS(Parrot_pcc_get_outer_ctx_func)
const Parrot_Context *c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
return c->outer_ctx;
}
@@ -198,6 +207,7 @@
{
ASSERT_ARGS(Parrot_pcc_set_outer_ctx_func)
Parrot_Context * const c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
c->outer_ctx = outer_ctx;
}
@@ -220,6 +230,7 @@
{
ASSERT_ARGS(Parrot_pcc_get_lex_pad_func)
const Parrot_Context *c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
return c->lex_pad;
}
@@ -229,6 +240,7 @@
{
ASSERT_ARGS(Parrot_pcc_set_lex_pad_func)
Parrot_Context * const c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
c->lex_pad = lex_pad;
}
@@ -252,6 +264,7 @@
{
ASSERT_ARGS(Parrot_pcc_get_namespace_func)
const Parrot_Context *c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
return c->current_namespace;
}
@@ -261,6 +274,7 @@
{
ASSERT_ARGS(Parrot_pcc_set_namespace_func)
Parrot_Context * const c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
c->current_namespace = _namespace;
}
@@ -282,6 +296,7 @@
{
ASSERT_ARGS(Parrot_pcc_get_HLL_func)
const Parrot_Context *c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
return c->current_HLL;
}
@@ -291,6 +306,7 @@
{
ASSERT_ARGS(Parrot_pcc_set_HLL_func)
Parrot_Context * const c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
c->current_HLL = hll;
}
@@ -314,6 +330,7 @@
{
ASSERT_ARGS(Parrot_pcc_get_handlers_func)
const Parrot_Context *c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
return c->handlers;
}
@@ -324,6 +341,7 @@
{
ASSERT_ARGS(Parrot_pcc_set_handlers_func)
Parrot_Context * const c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
c->handlers = handlers;
}
@@ -347,6 +365,7 @@
{
ASSERT_ARGS(Parrot_pcc_get_continuation_func)
const Parrot_Context *c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
return c->current_cont;
}
@@ -356,6 +375,7 @@
{
ASSERT_ARGS(Parrot_pcc_set_continuation_func)
Parrot_Context * const c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
c->current_cont = _continuation;
}
@@ -379,6 +399,7 @@
{
ASSERT_ARGS(Parrot_pcc_get_signature_func)
const Parrot_Context *c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
return c->current_sig;
}
@@ -388,6 +409,7 @@
{
ASSERT_ARGS(Parrot_pcc_set_signature_func)
Parrot_Context * const c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
c->current_sig = sig_object;
}
@@ -410,6 +432,7 @@
{
ASSERT_ARGS(Parrot_pcc_get_object_func)
const Parrot_Context *c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
return c->current_object;
}
@@ -419,6 +442,7 @@
{
ASSERT_ARGS(Parrot_pcc_set_object_func)
Parrot_Context * const c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
c->current_object = object;
}
@@ -441,6 +465,7 @@
{
ASSERT_ARGS(Parrot_pcc_get_pc_func)
const Parrot_Context *c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
return c->current_pc;
}
@@ -450,6 +475,7 @@
{
ASSERT_ARGS(Parrot_pcc_set_pc_func)
Parrot_Context * const c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
c->current_pc = pc;
}
@@ -470,6 +496,7 @@
{
ASSERT_ARGS(Parrot_pcc_warnings_on_func)
Parrot_Context * const c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
c->warns |= flags;
return c->warns;
}
@@ -492,6 +519,7 @@
{
ASSERT_ARGS(Parrot_pcc_warnings_off_func)
Parrot_Context * const c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
c->warns &= ~flags;
}
@@ -513,6 +541,7 @@
{
ASSERT_ARGS(Parrot_pcc_warnings_test_func)
Parrot_Context * const c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
return c->warns & flags;
}
@@ -532,6 +561,7 @@
{
ASSERT_ARGS(Parrot_pcc_errors_on_func)
Parrot_Context * const c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
c->errors |= flags;
}
@@ -552,6 +582,7 @@
{
ASSERT_ARGS(Parrot_pcc_errors_off_func)
Parrot_Context * const c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
c->errors &= ~flags;
}
@@ -572,6 +603,7 @@
{
ASSERT_ARGS(Parrot_pcc_errors_test_func)
Parrot_Context * const c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
return c->errors & flags;
}
@@ -592,6 +624,7 @@
{
ASSERT_ARGS(Parrot_pcc_trace_flags_on_func)
Parrot_Context * const c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
c->trace_flags |= flags;
}
@@ -613,6 +646,7 @@
{
ASSERT_ARGS(Parrot_pcc_trace_flags_off_func)
Parrot_Context * const c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
c->trace_flags &= ~flags;
}
@@ -633,6 +667,7 @@
{
ASSERT_ARGS(Parrot_pcc_trace_flags_test_func)
Parrot_Context * const c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
return c->trace_flags & flags;
}
@@ -664,6 +699,7 @@
{
ASSERT_ARGS(Parrot_pcc_get_int_constant_func)
const Parrot_Context * c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
PARROT_ASSERT(c->constants[idx]->type == 'i');
return c->constants[idx]->u.integer;
}
@@ -675,6 +711,7 @@
{
ASSERT_ARGS(Parrot_pcc_get_num_constant_func)
const Parrot_Context * c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
PARROT_ASSERT(c->constants[idx]->type == 'n');
return c->constants[idx]->u.number;
}
@@ -686,6 +723,7 @@
{
ASSERT_ARGS(Parrot_pcc_get_string_constant_func)
const Parrot_Context * c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
PARROT_ASSERT(c->constants[idx]->type == 's');
return c->constants[idx]->u.string;
}
@@ -697,6 +735,7 @@
{
ASSERT_ARGS(Parrot_pcc_get_pmc_constant_func)
const Parrot_Context * c = CONTEXT_STRUCT(ctx);
+ PARROT_ASSERT(ctx->vtable->base_type == enum_class_CallContext);
PARROT_ASSERT((c->constants[idx]->type == 'k')
|| (c->constants[idx]->type == 'p'));
return c->constants[idx]->u.key;
More information about the parrot-commits
mailing list