[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