[svn:parrot] r48267 - branches/gsoc_instrument/src/dynpmc

khairul at svn.parrot.org khairul at svn.parrot.org
Tue Aug 3 03:20:18 UTC 2010


Author: khairul
Date: Tue Aug  3 03:20:16 2010
New Revision: 48267
URL: https://trac.parrot.org/parrot/changeset/48267

Log:
Regenerated stub functions.

Modified:
   branches/gsoc_instrument/src/dynpmc/instrumentgc.pmc
   branches/gsoc_instrument/src/dynpmc/instrumentvtable.pmc

Modified: branches/gsoc_instrument/src/dynpmc/instrumentgc.pmc
==============================================================================
--- branches/gsoc_instrument/src/dynpmc/instrumentgc.pmc	Tue Aug  3 03:19:24 2010	(r48266)
+++ branches/gsoc_instrument/src/dynpmc/instrumentgc.pmc	Tue Aug  3 03:20:16 2010	(r48267)
@@ -24,6 +24,9 @@
 #include "pmc_instrument.h"
 #include "../gc/gc_private.h"
 
+#include "instrument_private.h"
+#include "instrument_extern.h"
+
 /* BELOW LIES GENERATED CODE GENERATED BY tools/build/gen_gc_stubs.pl */
 typedef struct InstrumentGC_Subsystem {
     /* Common entries taken from GC_Subsystem. */
@@ -53,8 +56,7 @@
 void* (*allocate_memory_chunk)(PARROT_INTERP, size_t size);
 void* (*reallocate_memory_chunk)(PARROT_INTERP, void *data, size_t newsize);
 void* (*allocate_memory_chunk_with_interior_pointers)(PARROT_INTERP, size_t size);
-void* (*reallocate_memory_chunk_with_interior_pointers)(PARROT_INTERP, void *data,
-                                                        size_t oldsize, size_t newsize);
+void* (*reallocate_memory_chunk_with_interior_pointers)(PARROT_INTERP, void *data,            size_t oldsize, size_t newsize);
 void (*free_memory_chunk)(PARROT_INTERP, void *data);
 void (*block_mark)(PARROT_INTERP);
 void (*unblock_mark)(PARROT_INTERP);
@@ -74,7 +76,6 @@
 /* END OF GENERATED CODE */
 
 /* Prototypes for helper functions. */
-void raise_gc_event(PARROT_INTERP, Parrot_Interp supervised, STRING *group, PMC *data);
 void setup_gc_common_hashes(PARROT_INTERP);
 void destroy_gc_common_hashes(PARROT_INTERP);
 void setup_gc_individual_hashes(PARROT_INTERP, Hash *orig_hash, Hash *instr_hash,
@@ -153,48 +154,6 @@
     }
 }
 
-/*
- * Helper functions
- */
-
-/*
- * raise_gc_event: Creates a Task of subtype Instrument
- *                 and sets its data to the given data, adding file,
- *                 sub, namespace and line information to the data hash.
- */
-
-void raise_gc_event(PARROT_INTERP, Parrot_Interp supervised, STRING *group, PMC *data) {
-    PMC *task, *task_hash, *event;
-    STRING *event_str;
-    Parrot_Context_info info;
-    event_str = VTABLE_get_string_keyed_str(interp, data, CONST_STRING(interp, "type"));
-
-    event = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, event, CONST_STRING(interp, "GC"));
-    VTABLE_push_string(interp, event, group);
-    VTABLE_push_string(interp, event, event_str);
-
-    Parrot_Context_get_info(interp, CURRENT_CONTEXT(supervised), &info);
-    VTABLE_set_string_keyed_str(interp,  data, CONST_STRING(interp, "file"),      info.file);
-    VTABLE_set_string_keyed_str(interp,  data, CONST_STRING(interp, "sub"),       info.subname);
-    VTABLE_set_string_keyed_str(interp,  data, CONST_STRING(interp, "namespace"), info.nsname);
-    VTABLE_set_integer_keyed_str(interp, data, CONST_STRING(interp, "line"),      info.line);
-    VTABLE_set_pmc_keyed_str(interp, data, CONST_STRING(interp, "event"), event);
-
-    task_hash = Parrot_pmc_new(interp, enum_class_Hash);
-    VTABLE_set_string_keyed_str(interp, task_hash,
-                                CONST_STRING(interp, "type"),
-                                CONST_STRING(interp, "event"));
-    VTABLE_set_string_keyed_str(interp, task_hash,
-                                CONST_STRING(interp, "subtype"),
-                                CONST_STRING(interp, "Instrument"));
-    VTABLE_set_pmc_keyed_str(interp, task_hash, CONST_STRING(interp, "data"), data);
-
-    task = Parrot_pmc_new_init(interp, enum_class_Task, task_hash);
-    Parrot_cx_schedule_task(interp, task);
-}
-
-
 /* BELOW LIES GENERATED CODE GENERATED BY tools/build/gen_gc_stubs.pl */
 /* BEGIN gc prototypes */
 void  stub_finalize_gc_system(PARROT_INTERP);
@@ -221,8 +180,7 @@
 void*  stub_allocate_memory_chunk(PARROT_INTERP, size_t size);
 void*  stub_reallocate_memory_chunk(PARROT_INTERP, void* data, size_t newsize);
 void*  stub_allocate_memory_chunk_with_interior_pointers(PARROT_INTERP, size_t size);
-void*  stub_reallocate_memory_chunk_with_interior_pointers(PARROT_INTERP, void* data,
-                                                           size_t oldsize, size_t newsize);
+void*  stub_reallocate_memory_chunk_with_interior_pointers(PARROT_INTERP, void* data, size_t oldsize, size_t newsize);
 void  stub_free_memory_chunk(PARROT_INTERP, void* data);
 void  stub_block_mark(PARROT_INTERP);
 void  stub_unblock_mark(PARROT_INTERP);
@@ -481,186 +439,96 @@
     /* END gc mapping group items */
 
     /* BEGIN gc mapping item groups */
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "administration"));
     parrot_hash_put(interp, gc_item_groups,
         CONST_STRING(interp, "finalize_gc_system"),
-        temp);
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "administration"));
+        CONST_STRING(interp, "administration"));
     parrot_hash_put(interp, gc_item_groups,
         CONST_STRING(interp, "destroy_child_interp"),
-        temp);
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "administration"));
+        CONST_STRING(interp, "administration"));
     parrot_hash_put(interp, gc_item_groups,
         CONST_STRING(interp, "do_gc_mark"),
-        temp);
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "administration"));
+        CONST_STRING(interp, "administration"));
     parrot_hash_put(interp, gc_item_groups,
         CONST_STRING(interp, "compact_string_pool"),
-        temp);
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "administration"));
+        CONST_STRING(interp, "administration"));
     parrot_hash_put(interp, gc_item_groups,
         CONST_STRING(interp, "mark_special"),
-        temp);
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "administration"));
+        CONST_STRING(interp, "administration"));
     parrot_hash_put(interp, gc_item_groups,
         CONST_STRING(interp, "pmc_needs_early_collection"),
-        temp);
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "administration"));
+        CONST_STRING(interp, "administration"));
     parrot_hash_put(interp, gc_item_groups,
         CONST_STRING(interp, "init_pool"),
-        temp);
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "allocate"));
+        CONST_STRING(interp, "administration"));
     parrot_hash_put(interp, gc_item_groups,
         CONST_STRING(interp, "allocate_pmc_header"),
-        temp);
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "free"));
+        CONST_STRING(interp, "allocate"));
     parrot_hash_put(interp, gc_item_groups,
         CONST_STRING(interp, "free_pmc_header"),
-        temp);
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "allocate"));
+        CONST_STRING(interp, "free"));
     parrot_hash_put(interp, gc_item_groups,
         CONST_STRING(interp, "allocate_string_header"),
-        temp);
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "free"));
+        CONST_STRING(interp, "allocate"));
     parrot_hash_put(interp, gc_item_groups,
         CONST_STRING(interp, "free_string_header"),
-        temp);
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "allocate"));
+        CONST_STRING(interp, "free"));
     parrot_hash_put(interp, gc_item_groups,
         CONST_STRING(interp, "allocate_bufferlike_header"),
-        temp);
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "free"));
+        CONST_STRING(interp, "allocate"));
     parrot_hash_put(interp, gc_item_groups,
         CONST_STRING(interp, "free_bufferlike_header"),
-        temp);
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "allocate"));
+        CONST_STRING(interp, "free"));
     parrot_hash_put(interp, gc_item_groups,
         CONST_STRING(interp, "allocate_pmc_attributes"),
-        temp);
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "free"));
+        CONST_STRING(interp, "allocate"));
     parrot_hash_put(interp, gc_item_groups,
         CONST_STRING(interp, "free_pmc_attributes"),
-        temp);
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "allocate"));
+        CONST_STRING(interp, "free"));
     parrot_hash_put(interp, gc_item_groups,
         CONST_STRING(interp, "allocate_string_storage"),
-        temp);
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "reallocate"));
+        CONST_STRING(interp, "allocate"));
     parrot_hash_put(interp, gc_item_groups,
         CONST_STRING(interp, "reallocate_string_storage"),
-        temp);
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "allocate"));
+        CONST_STRING(interp, "reallocate"));
     parrot_hash_put(interp, gc_item_groups,
         CONST_STRING(interp, "allocate_buffer_storage"),
-        temp);
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "reallocate"));
+        CONST_STRING(interp, "allocate"));
     parrot_hash_put(interp, gc_item_groups,
         CONST_STRING(interp, "reallocate_buffer_storage"),
-        temp);
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "allocate"));
+        CONST_STRING(interp, "reallocate"));
     parrot_hash_put(interp, gc_item_groups,
         CONST_STRING(interp, "allocate_fixed_size_storage"),
-        temp);
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "free"));
+        CONST_STRING(interp, "allocate"));
     parrot_hash_put(interp, gc_item_groups,
         CONST_STRING(interp, "free_fixed_size_storage"),
-        temp);
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "allocate"));
+        CONST_STRING(interp, "free"));
     parrot_hash_put(interp, gc_item_groups,
         CONST_STRING(interp, "allocate_memory_chunk"),
-        temp);
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "reallocate"));
+        CONST_STRING(interp, "allocate"));
     parrot_hash_put(interp, gc_item_groups,
         CONST_STRING(interp, "reallocate_memory_chunk"),
-        temp);
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "allocate"));
+        CONST_STRING(interp, "reallocate"));
     parrot_hash_put(interp, gc_item_groups,
         CONST_STRING(interp, "allocate_memory_chunk_with_interior_pointers"),
-        temp);
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "reallocate"));
+        CONST_STRING(interp, "allocate"));
     parrot_hash_put(interp, gc_item_groups,
         CONST_STRING(interp, "reallocate_memory_chunk_with_interior_pointers"),
-        temp);
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "free"));
+        CONST_STRING(interp, "reallocate"));
     parrot_hash_put(interp, gc_item_groups,
         CONST_STRING(interp, "free_memory_chunk"),
-        temp);
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "administration"));
+        CONST_STRING(interp, "free"));
     parrot_hash_put(interp, gc_item_groups,
         CONST_STRING(interp, "block_mark"),
-        temp);
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "administration"));
+        CONST_STRING(interp, "administration"));
     parrot_hash_put(interp, gc_item_groups,
         CONST_STRING(interp, "unblock_mark"),
-        temp);
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "administration"));
+        CONST_STRING(interp, "administration"));
     parrot_hash_put(interp, gc_item_groups,
         CONST_STRING(interp, "block_sweep"),
-        temp);
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "administration"));
+        CONST_STRING(interp, "administration"));
     parrot_hash_put(interp, gc_item_groups,
         CONST_STRING(interp, "unblock_sweep"),
-        temp);
+        CONST_STRING(interp, "administration"));
     /* END gc mapping item groups */
 }
 
@@ -872,940 +740,716 @@
 
 /* BEGIN gc stubs */
 void  stub_finalize_gc_system(Parrot_Interp interp) {
-    GC_Subsystem *gc_orig    = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
-    Parrot_Interp supervisor = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
-
-    PMC *event_data;
-    PMC *temp;
-    PMC *params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-
-
-    gc_orig->finalize_gc_system(interp);
-
-
-    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_string_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "type"),
-        CONST_STRING(supervisor, "finalize_gc_system"));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_gc_event(supervisor, interp, CONST_STRING(supervisor, "administration"), event_data);
-
-    return;
+    GC_Subsystem  *gc_orig      = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
+    Parrot_Interp  supervisor   = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
+    PMC           *instrumentgc = ((InstrumentGC_Subsystem *) interp->gc_sys)->instrument_gc;
+    PMC *instrument, *recall, *event_data, *temp, *params, *event_array;
+    STRING *raise_event, *event;
+
+    params     = instrument_pack_params(supervisor, "V", interp);
+    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "parameters"),params);
+
+    event       = CONST_STRING(supervisor, "GC::administration::finalize_gc_system");
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    GETATTR_InstrumentGC_instrument(supervisor, instrumentgc, instrument);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SP->P", event, event_data, &recall);
+    (gc_orig->finalize_gc_system(interp));
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SPP->P", event, event_data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 void  stub_destroy_child_interp(Interp* interp, Interp* child_interp) {
-    GC_Subsystem *gc_orig    = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
-    Parrot_Interp supervisor = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
-
-    PMC *event_data;
-    PMC *temp;
-    PMC *params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-
-
-    gc_orig->destroy_child_interp(interp, child_interp);
-
-    temp = Parrot_pmc_new(supervisor, enum_class_Pointer);
-    VTABLE_set_pointer(supervisor, temp, child_interp);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_string_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "type"),
-        CONST_STRING(supervisor, "destroy_child_interp"));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_gc_event(supervisor, interp, CONST_STRING(supervisor, "administration"), event_data);
-
-    return;
+    GC_Subsystem  *gc_orig      = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
+    Parrot_Interp  supervisor   = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
+    PMC           *instrumentgc = ((InstrumentGC_Subsystem *) interp->gc_sys)->instrument_gc;
+    PMC *instrument, *recall, *event_data, *temp, *params, *event_array;
+    STRING *raise_event, *event;
+
+    params     = instrument_pack_params(supervisor, "VV", interp, child_interp);
+    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "parameters"),params);
+
+    event       = CONST_STRING(supervisor, "GC::administration::destroy_child_interp");
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    GETATTR_InstrumentGC_instrument(supervisor, instrumentgc, instrument);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SP->P", event, event_data, &recall);
+    (gc_orig->destroy_child_interp(interp, child_interp));
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SPP->P", event, event_data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 void  stub_do_gc_mark(Parrot_Interp interp, UINTVAL flags) {
-    GC_Subsystem *gc_orig    = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
-    Parrot_Interp supervisor = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
-
-    PMC *event_data;
-    PMC *temp;
-    PMC *params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-
-
-    gc_orig->do_gc_mark(interp, flags);
-
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, flags);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_string_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "type"),
-        CONST_STRING(supervisor, "do_gc_mark"));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_gc_event(supervisor, interp, CONST_STRING(supervisor, "administration"), event_data);
-
-    return;
+    GC_Subsystem  *gc_orig      = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
+    Parrot_Interp  supervisor   = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
+    PMC           *instrumentgc = ((InstrumentGC_Subsystem *) interp->gc_sys)->instrument_gc;
+    PMC *instrument, *recall, *event_data, *temp, *params, *event_array;
+    STRING *raise_event, *event;
+
+    params     = instrument_pack_params(supervisor, "VV", interp, flags);
+    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "parameters"),params);
+
+    event       = CONST_STRING(supervisor, "GC::administration::do_gc_mark");
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    GETATTR_InstrumentGC_instrument(supervisor, instrumentgc, instrument);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SP->P", event, event_data, &recall);
+    (gc_orig->do_gc_mark(interp, flags));
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SPP->P", event, event_data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 void  stub_compact_string_pool(Parrot_Interp interp) {
-    GC_Subsystem *gc_orig    = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
-    Parrot_Interp supervisor = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
-
-    PMC *event_data;
-    PMC *temp;
-    PMC *params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-
-
-    gc_orig->compact_string_pool(interp);
-
-
-    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_string_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "type"),
-        CONST_STRING(supervisor, "compact_string_pool"));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_gc_event(supervisor, interp, CONST_STRING(supervisor, "administration"), event_data);
-
-    return;
+    GC_Subsystem  *gc_orig      = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
+    Parrot_Interp  supervisor   = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
+    PMC           *instrumentgc = ((InstrumentGC_Subsystem *) interp->gc_sys)->instrument_gc;
+    PMC *instrument, *recall, *event_data, *temp, *params, *event_array;
+    STRING *raise_event, *event;
+
+    params     = instrument_pack_params(supervisor, "V", interp);
+    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "parameters"),params);
+
+    event       = CONST_STRING(supervisor, "GC::administration::compact_string_pool");
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    GETATTR_InstrumentGC_instrument(supervisor, instrumentgc, instrument);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SP->P", event, event_data, &recall);
+    (gc_orig->compact_string_pool(interp));
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SPP->P", event, event_data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 void  stub_mark_special(Parrot_Interp interp, PMC* stub_var1) {
-    GC_Subsystem *gc_orig    = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
-    Parrot_Interp supervisor = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
-
-    PMC *event_data;
-    PMC *temp;
-    PMC *params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-
-
-    gc_orig->mark_special(interp, stub_var1);
-
-    temp = Parrot_pmc_new(supervisor, enum_class_Pointer);
-    VTABLE_set_pointer(supervisor, temp, stub_var1);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_string_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "type"),
-        CONST_STRING(supervisor, "mark_special"));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_gc_event(supervisor, interp, CONST_STRING(supervisor, "administration"), event_data);
-
-    return;
+    GC_Subsystem  *gc_orig      = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
+    Parrot_Interp  supervisor   = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
+    PMC           *instrumentgc = ((InstrumentGC_Subsystem *) interp->gc_sys)->instrument_gc;
+    PMC *instrument, *recall, *event_data, *temp, *params, *event_array;
+    STRING *raise_event, *event;
+
+    params     = instrument_pack_params(supervisor, "VP", interp, stub_var1);
+    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "parameters"),params);
+
+    event       = CONST_STRING(supervisor, "GC::administration::mark_special");
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    GETATTR_InstrumentGC_instrument(supervisor, instrumentgc, instrument);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SP->P", event, event_data, &recall);
+    (gc_orig->mark_special(interp, stub_var1));
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SPP->P", event, event_data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 void  stub_pmc_needs_early_collection(Parrot_Interp interp, PMC* stub_var1) {
-    GC_Subsystem *gc_orig    = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
-    Parrot_Interp supervisor = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
-
-    PMC *event_data;
-    PMC *temp;
-    PMC *params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-
-
-    gc_orig->pmc_needs_early_collection(interp, stub_var1);
-
-    temp = Parrot_pmc_new(supervisor, enum_class_Pointer);
-    VTABLE_set_pointer(supervisor, temp, stub_var1);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_string_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "type"),
-        CONST_STRING(supervisor, "pmc_needs_early_collection"));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_gc_event(supervisor, interp, CONST_STRING(supervisor, "administration"), event_data);
-
-    return;
+    GC_Subsystem  *gc_orig      = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
+    Parrot_Interp  supervisor   = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
+    PMC           *instrumentgc = ((InstrumentGC_Subsystem *) interp->gc_sys)->instrument_gc;
+    PMC *instrument, *recall, *event_data, *temp, *params, *event_array;
+    STRING *raise_event, *event;
+
+    params     = instrument_pack_params(supervisor, "VP", interp, stub_var1);
+    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "parameters"),params);
+
+    event       = CONST_STRING(supervisor, "GC::administration::pmc_needs_early_collection");
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    GETATTR_InstrumentGC_instrument(supervisor, instrumentgc, instrument);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SP->P", event, event_data, &recall);
+    (gc_orig->pmc_needs_early_collection(interp, stub_var1));
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SPP->P", event, event_data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 void  stub_init_pool(Parrot_Interp interp, struct Fixed_Size_Pool* stub_var1) {
-    GC_Subsystem *gc_orig    = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
-    Parrot_Interp supervisor = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
-
-    PMC *event_data;
-    PMC *temp;
-    PMC *params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-
-
-    gc_orig->init_pool(interp, stub_var1);
-
-    temp = Parrot_pmc_new(supervisor, enum_class_Pointer);
-    VTABLE_set_pointer(supervisor, temp, stub_var1);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_string_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "type"),
-        CONST_STRING(supervisor, "init_pool"));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_gc_event(supervisor, interp, CONST_STRING(supervisor, "administration"), event_data);
-
-    return;
+    GC_Subsystem  *gc_orig      = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
+    Parrot_Interp  supervisor   = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
+    PMC           *instrumentgc = ((InstrumentGC_Subsystem *) interp->gc_sys)->instrument_gc;
+    PMC *instrument, *recall, *event_data, *temp, *params, *event_array;
+    STRING *raise_event, *event;
+
+    params     = instrument_pack_params(supervisor, "VV", interp, stub_var1);
+    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "parameters"),params);
+
+    event       = CONST_STRING(supervisor, "GC::administration::init_pool");
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    GETATTR_InstrumentGC_instrument(supervisor, instrumentgc, instrument);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SP->P", event, event_data, &recall);
+    (gc_orig->init_pool(interp, stub_var1));
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SPP->P", event, event_data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 PMC*  stub_allocate_pmc_header(Parrot_Interp interp, UINTVAL flags) {
-    GC_Subsystem *gc_orig    = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
-    Parrot_Interp supervisor = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
-
-    PMC *event_data;
-    PMC *temp;
-    PMC *params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
+    GC_Subsystem  *gc_orig      = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
+    Parrot_Interp  supervisor   = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
+    PMC           *instrumentgc = ((InstrumentGC_Subsystem *) interp->gc_sys)->instrument_gc;
+    PMC *instrument, *recall, *event_data, *temp, *params, *event_array;
+    STRING *raise_event, *event;
     PMC*  ret;
+    PMC *ret_pack;
 
-
-    ret = gc_orig->allocate_pmc_header(interp, flags);
-
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, flags);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_string_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "type"),
-        CONST_STRING(supervisor, "allocate_pmc_header"));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp,
-                              sizeof (PMC));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-                            CONST_STRING(supervisor, "size"),
-                            temp);
-
-    raise_gc_event(supervisor, interp, CONST_STRING(supervisor, "allocate"), event_data);
-
+    params     = instrument_pack_params(supervisor, "VV", interp, flags);
+    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "parameters"),params);
+    VTABLE_set_integer_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "size"),
+        sizeof (PMC));
+
+    event       = CONST_STRING(supervisor, "GC::allocate::allocate_pmc_header");
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    GETATTR_InstrumentGC_instrument(supervisor, instrumentgc, instrument);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SP->P", event, event_data, &recall);
+    ret = (gc_orig->allocate_pmc_header(interp, flags));
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SPP->P", event, event_data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 void  stub_free_pmc_header(Parrot_Interp interp, PMC* stub_var1) {
-    GC_Subsystem *gc_orig    = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
-    Parrot_Interp supervisor = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
-
-    PMC *event_data;
-    PMC *temp;
-    PMC *params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-
-
-    gc_orig->free_pmc_header(interp, stub_var1);
-
-    temp = Parrot_pmc_new(supervisor, enum_class_Pointer);
-    VTABLE_set_pointer(supervisor, temp, stub_var1);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_string_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "type"),
-        CONST_STRING(supervisor, "free_pmc_header"));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_gc_event(supervisor, interp, CONST_STRING(supervisor, "free"), event_data);
-
-    return;
+    GC_Subsystem  *gc_orig      = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
+    Parrot_Interp  supervisor   = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
+    PMC           *instrumentgc = ((InstrumentGC_Subsystem *) interp->gc_sys)->instrument_gc;
+    PMC *instrument, *recall, *event_data, *temp, *params, *event_array;
+    STRING *raise_event, *event;
+
+    params     = instrument_pack_params(supervisor, "VP", interp, stub_var1);
+    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "parameters"),params);
+
+    event       = CONST_STRING(supervisor, "GC::free::free_pmc_header");
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    GETATTR_InstrumentGC_instrument(supervisor, instrumentgc, instrument);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SP->P", event, event_data, &recall);
+    (gc_orig->free_pmc_header(interp, stub_var1));
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SPP->P", event, event_data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 STRING*  stub_allocate_string_header(Parrot_Interp interp, UINTVAL flags) {
-    GC_Subsystem *gc_orig    = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
-    Parrot_Interp supervisor = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
-
-    PMC *event_data;
-    PMC *temp;
-    PMC *params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
+    GC_Subsystem  *gc_orig      = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
+    Parrot_Interp  supervisor   = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
+    PMC           *instrumentgc = ((InstrumentGC_Subsystem *) interp->gc_sys)->instrument_gc;
+    PMC *instrument, *recall, *event_data, *temp, *params, *event_array;
+    STRING *raise_event, *event;
     STRING*  ret;
+    PMC *ret_pack;
 
-
-    ret = gc_orig->allocate_string_header(interp, flags);
-
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, flags);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_string_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "type"),
-        CONST_STRING(supervisor, "allocate_string_header"));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp,
-                              sizeof (STRING));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-                            CONST_STRING(supervisor, "size"),
-                            temp);
-
-    raise_gc_event(supervisor, interp, CONST_STRING(supervisor, "allocate"), event_data);
-
+    params     = instrument_pack_params(supervisor, "VV", interp, flags);
+    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "parameters"),params);
+    VTABLE_set_integer_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "size"),
+        sizeof (STRING));
+
+    event       = CONST_STRING(supervisor, "GC::allocate::allocate_string_header");
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    GETATTR_InstrumentGC_instrument(supervisor, instrumentgc, instrument);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SP->P", event, event_data, &recall);
+    ret = (gc_orig->allocate_string_header(interp, flags));
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SPP->P", event, event_data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 void  stub_free_string_header(Parrot_Interp interp, STRING* stub_var1) {
-    GC_Subsystem *gc_orig    = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
-    Parrot_Interp supervisor = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
-
-    PMC *event_data;
-    PMC *temp;
-    PMC *params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-
-
-    gc_orig->free_string_header(interp, stub_var1);
-
-    temp = Parrot_pmc_new(supervisor, enum_class_Pointer);
-    VTABLE_set_pointer(supervisor, temp, stub_var1);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_string_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "type"),
-        CONST_STRING(supervisor, "free_string_header"));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_gc_event(supervisor, interp, CONST_STRING(supervisor, "free"), event_data);
-
-    return;
+    GC_Subsystem  *gc_orig      = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
+    Parrot_Interp  supervisor   = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
+    PMC           *instrumentgc = ((InstrumentGC_Subsystem *) interp->gc_sys)->instrument_gc;
+    PMC *instrument, *recall, *event_data, *temp, *params, *event_array;
+    STRING *raise_event, *event;
+
+    params     = instrument_pack_params(supervisor, "VS", interp, stub_var1);
+    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "parameters"),params);
+
+    event       = CONST_STRING(supervisor, "GC::free::free_string_header");
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    GETATTR_InstrumentGC_instrument(supervisor, instrumentgc, instrument);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SP->P", event, event_data, &recall);
+    (gc_orig->free_string_header(interp, stub_var1));
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SPP->P", event, event_data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 Buffer*  stub_allocate_bufferlike_header(Parrot_Interp interp, size_t size) {
-    GC_Subsystem *gc_orig    = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
-    Parrot_Interp supervisor = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
-
-    PMC *event_data;
-    PMC *temp;
-    PMC *params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
+    GC_Subsystem  *gc_orig      = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
+    Parrot_Interp  supervisor   = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
+    PMC           *instrumentgc = ((InstrumentGC_Subsystem *) interp->gc_sys)->instrument_gc;
+    PMC *instrument, *recall, *event_data, *temp, *params, *event_array;
+    STRING *raise_event, *event;
     Buffer*  ret;
+    PMC *ret_pack;
 
-
-    ret = gc_orig->allocate_bufferlike_header(interp, size);
-
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, size);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_string_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "type"),
-        CONST_STRING(supervisor, "allocate_bufferlike_header"));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp,
-                              sizeof (Buffer));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-                            CONST_STRING(supervisor, "size"),
-                            temp);
-
-    raise_gc_event(supervisor, interp, CONST_STRING(supervisor, "allocate"), event_data);
-
+    params     = instrument_pack_params(supervisor, "VV", interp, size);
+    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "parameters"),params);
+    VTABLE_set_integer_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "size"),
+        sizeof (Buffer));
+
+    event       = CONST_STRING(supervisor, "GC::allocate::allocate_bufferlike_header");
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    GETATTR_InstrumentGC_instrument(supervisor, instrumentgc, instrument);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SP->P", event, event_data, &recall);
+    ret = (gc_orig->allocate_bufferlike_header(interp, size));
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SPP->P", event, event_data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 void  stub_free_bufferlike_header(Parrot_Interp interp, Buffer* stub_var1, size_t size) {
-    GC_Subsystem *gc_orig    = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
-    Parrot_Interp supervisor = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
-
-    PMC *event_data;
-    PMC *temp;
-    PMC *params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-
-
-    gc_orig->free_bufferlike_header(interp, stub_var1, size);
-
-    temp = Parrot_pmc_new(supervisor, enum_class_Pointer);
-    VTABLE_set_pointer(supervisor, temp, stub_var1);
-    VTABLE_push_pmc(supervisor, params, temp);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, size);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_string_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "type"),
-        CONST_STRING(supervisor, "free_bufferlike_header"));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_gc_event(supervisor, interp, CONST_STRING(supervisor, "free"), event_data);
-
-    return;
+    GC_Subsystem  *gc_orig      = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
+    Parrot_Interp  supervisor   = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
+    PMC           *instrumentgc = ((InstrumentGC_Subsystem *) interp->gc_sys)->instrument_gc;
+    PMC *instrument, *recall, *event_data, *temp, *params, *event_array;
+    STRING *raise_event, *event;
+
+    params     = instrument_pack_params(supervisor, "VVV", interp, stub_var1, size);
+    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "parameters"),params);
+
+    event       = CONST_STRING(supervisor, "GC::free::free_bufferlike_header");
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    GETATTR_InstrumentGC_instrument(supervisor, instrumentgc, instrument);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SP->P", event, event_data, &recall);
+    (gc_orig->free_bufferlike_header(interp, stub_var1, size));
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SPP->P", event, event_data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 void*  stub_allocate_pmc_attributes(Parrot_Interp interp, PMC* stub_var1) {
-    GC_Subsystem *gc_orig    = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
-    Parrot_Interp supervisor = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
-
-    PMC *event_data;
-    PMC *temp;
-    PMC *params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
+    GC_Subsystem  *gc_orig      = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
+    Parrot_Interp  supervisor   = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
+    PMC           *instrumentgc = ((InstrumentGC_Subsystem *) interp->gc_sys)->instrument_gc;
+    PMC *instrument, *recall, *event_data, *temp, *params, *event_array;
+    STRING *raise_event, *event;
     void*  ret;
+    PMC *ret_pack;
 
-
-    ret = gc_orig->allocate_pmc_attributes(interp, stub_var1);
-
-    temp = Parrot_pmc_new(supervisor, enum_class_Pointer);
-    VTABLE_set_pointer(supervisor, temp, stub_var1);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_string_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "type"),
-        CONST_STRING(supervisor, "allocate_pmc_attributes"));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp,
-                              VTABLE_get_pmc_keyed_int(supervisor, params, 0)->vtable->attr_size);
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-                            CONST_STRING(supervisor, "size"),
-                            temp);
-
-    raise_gc_event(supervisor, interp, CONST_STRING(supervisor, "allocate"), event_data);
-
+    params     = instrument_pack_params(supervisor, "VP", interp, stub_var1);
+    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "parameters"),params);
+    VTABLE_set_integer_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "size"),
+        VTABLE_get_pmc_keyed_int(supervisor, params, 0)->vtable->attr_size);
+
+    event       = CONST_STRING(supervisor, "GC::allocate::allocate_pmc_attributes");
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    GETATTR_InstrumentGC_instrument(supervisor, instrumentgc, instrument);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SP->P", event, event_data, &recall);
+    ret = (gc_orig->allocate_pmc_attributes(interp, stub_var1));
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SPP->P", event, event_data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 void  stub_free_pmc_attributes(Parrot_Interp interp, PMC* stub_var1) {
-    GC_Subsystem *gc_orig    = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
-    Parrot_Interp supervisor = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
-
-    PMC *event_data;
-    PMC *temp;
-    PMC *params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-
-
-    gc_orig->free_pmc_attributes(interp, stub_var1);
-
-    temp = Parrot_pmc_new(supervisor, enum_class_Pointer);
-    VTABLE_set_pointer(supervisor, temp, stub_var1);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_string_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "type"),
-        CONST_STRING(supervisor, "free_pmc_attributes"));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_gc_event(supervisor, interp, CONST_STRING(supervisor, "free"), event_data);
-
-    return;
+    GC_Subsystem  *gc_orig      = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
+    Parrot_Interp  supervisor   = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
+    PMC           *instrumentgc = ((InstrumentGC_Subsystem *) interp->gc_sys)->instrument_gc;
+    PMC *instrument, *recall, *event_data, *temp, *params, *event_array;
+    STRING *raise_event, *event;
+
+    params     = instrument_pack_params(supervisor, "VP", interp, stub_var1);
+    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "parameters"),params);
+
+    event       = CONST_STRING(supervisor, "GC::free::free_pmc_attributes");
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    GETATTR_InstrumentGC_instrument(supervisor, instrumentgc, instrument);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SP->P", event, event_data, &recall);
+    (gc_orig->free_pmc_attributes(interp, stub_var1));
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SPP->P", event, event_data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 void  stub_allocate_string_storage(Parrot_Interp interp, STRING* str, size_t size) {
-    GC_Subsystem *gc_orig    = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
-    Parrot_Interp supervisor = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
-
-    PMC *event_data;
-    PMC *temp;
-    PMC *params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-
-
-    gc_orig->allocate_string_storage(interp, str, size);
-
-    temp = Parrot_pmc_new(supervisor, enum_class_Pointer);
-    VTABLE_set_pointer(supervisor, temp, str);
-    VTABLE_push_pmc(supervisor, params, temp);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, size);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_string_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "type"),
-        CONST_STRING(supervisor, "allocate_string_storage"));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp,
-                              size);
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-                            CONST_STRING(supervisor, "size"),
-                            temp);
-
-    raise_gc_event(supervisor, interp, CONST_STRING(supervisor, "allocate"), event_data);
-
-    return;
+    GC_Subsystem  *gc_orig      = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
+    Parrot_Interp  supervisor   = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
+    PMC           *instrumentgc = ((InstrumentGC_Subsystem *) interp->gc_sys)->instrument_gc;
+    PMC *instrument, *recall, *event_data, *temp, *params, *event_array;
+    STRING *raise_event, *event;
+
+    params     = instrument_pack_params(supervisor, "VSV", interp, str, size);
+    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "parameters"),params);
+    VTABLE_set_integer_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "size"),
+        size);
+
+    event       = CONST_STRING(supervisor, "GC::allocate::allocate_string_storage");
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    GETATTR_InstrumentGC_instrument(supervisor, instrumentgc, instrument);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SP->P", event, event_data, &recall);
+    (gc_orig->allocate_string_storage(interp, str, size));
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SPP->P", event, event_data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 void  stub_reallocate_string_storage(Parrot_Interp interp, STRING* str, size_t size) {
-    GC_Subsystem *gc_orig    = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
-    Parrot_Interp supervisor = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
-
-    PMC *event_data;
-    PMC *temp;
-    PMC *params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-
-
-    gc_orig->reallocate_string_storage(interp, str, size);
-
-    temp = Parrot_pmc_new(supervisor, enum_class_Pointer);
-    VTABLE_set_pointer(supervisor, temp, str);
-    VTABLE_push_pmc(supervisor, params, temp);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, size);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_string_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "type"),
-        CONST_STRING(supervisor, "reallocate_string_storage"));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp,
-                              size);
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-                            CONST_STRING(supervisor, "size"),
-                            temp);
-
-    raise_gc_event(supervisor, interp, CONST_STRING(supervisor, "reallocate"), event_data);
-
-    return;
+    GC_Subsystem  *gc_orig      = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
+    Parrot_Interp  supervisor   = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
+    PMC           *instrumentgc = ((InstrumentGC_Subsystem *) interp->gc_sys)->instrument_gc;
+    PMC *instrument, *recall, *event_data, *temp, *params, *event_array;
+    STRING *raise_event, *event;
+
+    params     = instrument_pack_params(supervisor, "VSV", interp, str, size);
+    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "parameters"),params);
+    VTABLE_set_integer_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "size"),
+        size);
+
+    event       = CONST_STRING(supervisor, "GC::reallocate::reallocate_string_storage");
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    GETATTR_InstrumentGC_instrument(supervisor, instrumentgc, instrument);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SP->P", event, event_data, &recall);
+    (gc_orig->reallocate_string_storage(interp, str, size));
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SPP->P", event, event_data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 void  stub_allocate_buffer_storage(Parrot_Interp interp, Buffer* buffer, size_t nsize) {
-    GC_Subsystem *gc_orig    = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
-    Parrot_Interp supervisor = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
-
-    PMC *event_data;
-    PMC *temp;
-    PMC *params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-
-
-    gc_orig->allocate_buffer_storage(interp, buffer, nsize);
-
-    temp = Parrot_pmc_new(supervisor, enum_class_Pointer);
-    VTABLE_set_pointer(supervisor, temp, buffer);
-    VTABLE_push_pmc(supervisor, params, temp);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, nsize);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_string_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "type"),
-        CONST_STRING(supervisor, "allocate_buffer_storage"));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp,
-                              nsize);
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-                            CONST_STRING(supervisor, "size"),
-                            temp);
-
-    raise_gc_event(supervisor, interp, CONST_STRING(supervisor, "allocate"), event_data);
-
-    return;
+    GC_Subsystem  *gc_orig      = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
+    Parrot_Interp  supervisor   = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
+    PMC           *instrumentgc = ((InstrumentGC_Subsystem *) interp->gc_sys)->instrument_gc;
+    PMC *instrument, *recall, *event_data, *temp, *params, *event_array;
+    STRING *raise_event, *event;
+
+    params     = instrument_pack_params(supervisor, "VVV", interp, buffer, nsize);
+    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "parameters"),params);
+    VTABLE_set_integer_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "size"),
+        nsize);
+
+    event       = CONST_STRING(supervisor, "GC::allocate::allocate_buffer_storage");
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    GETATTR_InstrumentGC_instrument(supervisor, instrumentgc, instrument);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SP->P", event, event_data, &recall);
+    (gc_orig->allocate_buffer_storage(interp, buffer, nsize));
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SPP->P", event, event_data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 void  stub_reallocate_buffer_storage(Parrot_Interp interp, Buffer* buffer, size_t newsize) {
-    GC_Subsystem *gc_orig    = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
-    Parrot_Interp supervisor = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
-
-    PMC *event_data;
-    PMC *temp;
-    PMC *params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-
-
-    gc_orig->reallocate_buffer_storage(interp, buffer, newsize);
-
-    temp = Parrot_pmc_new(supervisor, enum_class_Pointer);
-    VTABLE_set_pointer(supervisor, temp, buffer);
-    VTABLE_push_pmc(supervisor, params, temp);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, newsize);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_string_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "type"),
-        CONST_STRING(supervisor, "reallocate_buffer_storage"));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp,
-                              newsize);
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-                            CONST_STRING(supervisor, "size"),
-                            temp);
-
-    raise_gc_event(supervisor, interp, CONST_STRING(supervisor, "reallocate"), event_data);
-
-    return;
+    GC_Subsystem  *gc_orig      = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
+    Parrot_Interp  supervisor   = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
+    PMC           *instrumentgc = ((InstrumentGC_Subsystem *) interp->gc_sys)->instrument_gc;
+    PMC *instrument, *recall, *event_data, *temp, *params, *event_array;
+    STRING *raise_event, *event;
+
+    params     = instrument_pack_params(supervisor, "VVV", interp, buffer, newsize);
+    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "parameters"),params);
+    VTABLE_set_integer_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "size"),
+        newsize);
+
+    event       = CONST_STRING(supervisor, "GC::reallocate::reallocate_buffer_storage");
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    GETATTR_InstrumentGC_instrument(supervisor, instrumentgc, instrument);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SP->P", event, event_data, &recall);
+    (gc_orig->reallocate_buffer_storage(interp, buffer, newsize));
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SPP->P", event, event_data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 void*  stub_allocate_fixed_size_storage(Parrot_Interp interp, size_t size) {
-    GC_Subsystem *gc_orig    = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
-    Parrot_Interp supervisor = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
-
-    PMC *event_data;
-    PMC *temp;
-    PMC *params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
+    GC_Subsystem  *gc_orig      = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
+    Parrot_Interp  supervisor   = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
+    PMC           *instrumentgc = ((InstrumentGC_Subsystem *) interp->gc_sys)->instrument_gc;
+    PMC *instrument, *recall, *event_data, *temp, *params, *event_array;
+    STRING *raise_event, *event;
     void*  ret;
+    PMC *ret_pack;
 
-
-    ret = gc_orig->allocate_fixed_size_storage(interp, size);
-
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, size);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_string_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "type"),
-        CONST_STRING(supervisor, "allocate_fixed_size_storage"));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp,
-                              size);
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-                            CONST_STRING(supervisor, "size"),
-                            temp);
-
-    raise_gc_event(supervisor, interp, CONST_STRING(supervisor, "allocate"), event_data);
-
+    params     = instrument_pack_params(supervisor, "VV", interp, size);
+    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "parameters"),params);
+    VTABLE_set_integer_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "size"),
+        size);
+
+    event       = CONST_STRING(supervisor, "GC::allocate::allocate_fixed_size_storage");
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    GETATTR_InstrumentGC_instrument(supervisor, instrumentgc, instrument);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SP->P", event, event_data, &recall);
+    ret = (gc_orig->allocate_fixed_size_storage(interp, size));
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SPP->P", event, event_data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 void  stub_free_fixed_size_storage(Parrot_Interp interp, size_t size, void* stub_var1) {
-    GC_Subsystem *gc_orig    = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
-    Parrot_Interp supervisor = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
-
-    PMC *event_data;
-    PMC *temp;
-    PMC *params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-
-
-    gc_orig->free_fixed_size_storage(interp, size, stub_var1);
-
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, size);
-    VTABLE_push_pmc(supervisor, params, temp);
-    temp = Parrot_pmc_new(supervisor, enum_class_Pointer);
-    VTABLE_set_pointer(supervisor, temp, stub_var1);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_string_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "type"),
-        CONST_STRING(supervisor, "free_fixed_size_storage"));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_gc_event(supervisor, interp, CONST_STRING(supervisor, "free"), event_data);
-
-    return;
+    GC_Subsystem  *gc_orig      = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
+    Parrot_Interp  supervisor   = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
+    PMC           *instrumentgc = ((InstrumentGC_Subsystem *) interp->gc_sys)->instrument_gc;
+    PMC *instrument, *recall, *event_data, *temp, *params, *event_array;
+    STRING *raise_event, *event;
+
+    params     = instrument_pack_params(supervisor, "VVV", interp, size, stub_var1);
+    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "parameters"),params);
+
+    event       = CONST_STRING(supervisor, "GC::free::free_fixed_size_storage");
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    GETATTR_InstrumentGC_instrument(supervisor, instrumentgc, instrument);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SP->P", event, event_data, &recall);
+    (gc_orig->free_fixed_size_storage(interp, size, stub_var1));
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SPP->P", event, event_data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 void*  stub_allocate_memory_chunk(Parrot_Interp interp, size_t size) {
-    GC_Subsystem *gc_orig    = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
-    Parrot_Interp supervisor = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
-
-    PMC *event_data;
-    PMC *temp;
-    PMC *params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
+    GC_Subsystem  *gc_orig      = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
+    Parrot_Interp  supervisor   = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
+    PMC           *instrumentgc = ((InstrumentGC_Subsystem *) interp->gc_sys)->instrument_gc;
+    PMC *instrument, *recall, *event_data, *temp, *params, *event_array;
+    STRING *raise_event, *event;
     void*  ret;
+    PMC *ret_pack;
 
-
-    ret = gc_orig->allocate_memory_chunk(interp, size);
-
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, size);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_string_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "type"),
-        CONST_STRING(supervisor, "allocate_memory_chunk"));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp,
-                              size);
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-                            CONST_STRING(supervisor, "size"),
-                            temp);
-
-    raise_gc_event(supervisor, interp, CONST_STRING(supervisor, "allocate"), event_data);
-
+    params     = instrument_pack_params(supervisor, "VV", interp, size);
+    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "parameters"),params);
+    VTABLE_set_integer_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "size"),
+        size);
+
+    event       = CONST_STRING(supervisor, "GC::allocate::allocate_memory_chunk");
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    GETATTR_InstrumentGC_instrument(supervisor, instrumentgc, instrument);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SP->P", event, event_data, &recall);
+    ret = (gc_orig->allocate_memory_chunk(interp, size));
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SPP->P", event, event_data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 void*  stub_reallocate_memory_chunk(Parrot_Interp interp, void* data, size_t newsize) {
-    GC_Subsystem *gc_orig    = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
-    Parrot_Interp supervisor = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
-
-    PMC *event_data;
-    PMC *temp;
-    PMC *params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
+    GC_Subsystem  *gc_orig      = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
+    Parrot_Interp  supervisor   = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
+    PMC           *instrumentgc = ((InstrumentGC_Subsystem *) interp->gc_sys)->instrument_gc;
+    PMC *instrument, *recall, *event_data, *temp, *params, *event_array;
+    STRING *raise_event, *event;
     void*  ret;
+    PMC *ret_pack;
 
-
-    ret = gc_orig->reallocate_memory_chunk(interp, data, newsize);
-
-    temp = Parrot_pmc_new(supervisor, enum_class_Pointer);
-    VTABLE_set_pointer(supervisor, temp, data);
-    VTABLE_push_pmc(supervisor, params, temp);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, newsize);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_string_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "type"),
-        CONST_STRING(supervisor, "reallocate_memory_chunk"));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp,
-                              newsize);
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-                            CONST_STRING(supervisor, "size"),
-                            temp);
-
-    raise_gc_event(supervisor, interp, CONST_STRING(supervisor, "reallocate"), event_data);
-
+    params     = instrument_pack_params(supervisor, "VVV", interp, data, newsize);
+    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "parameters"),params);
+    VTABLE_set_integer_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "size"),
+        newsize);
+
+    event       = CONST_STRING(supervisor, "GC::reallocate::reallocate_memory_chunk");
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    GETATTR_InstrumentGC_instrument(supervisor, instrumentgc, instrument);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SP->P", event, event_data, &recall);
+    ret = (gc_orig->reallocate_memory_chunk(interp, data, newsize));
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SPP->P", event, event_data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 void*  stub_allocate_memory_chunk_with_interior_pointers(Parrot_Interp interp, size_t size) {
-    GC_Subsystem *gc_orig    = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
-    Parrot_Interp supervisor = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
-
-    PMC *event_data;
-    PMC *temp;
-    PMC *params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
+    GC_Subsystem  *gc_orig      = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
+    Parrot_Interp  supervisor   = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
+    PMC           *instrumentgc = ((InstrumentGC_Subsystem *) interp->gc_sys)->instrument_gc;
+    PMC *instrument, *recall, *event_data, *temp, *params, *event_array;
+    STRING *raise_event, *event;
     void*  ret;
+    PMC *ret_pack;
 
-
-    ret = gc_orig->allocate_memory_chunk_with_interior_pointers(interp, size);
-
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, size);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_string_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "type"),
-        CONST_STRING(supervisor, "allocate_memory_chunk_with_interior_pointers"));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp,
-                              size);
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-                            CONST_STRING(supervisor, "size"),
-                            temp);
-
-    raise_gc_event(supervisor, interp, CONST_STRING(supervisor, "allocate"), event_data);
-
+    params     = instrument_pack_params(supervisor, "VV", interp, size);
+    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "parameters"),params);
+    VTABLE_set_integer_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "size"),
+        size);
+
+    event       = CONST_STRING(supervisor, "GC::allocate::allocate_memory_chunk_with_interior_pointers");
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    GETATTR_InstrumentGC_instrument(supervisor, instrumentgc, instrument);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SP->P", event, event_data, &recall);
+    ret = (gc_orig->allocate_memory_chunk_with_interior_pointers(interp, size));
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SPP->P", event, event_data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
-void*  stub_reallocate_memory_chunk_with_interior_pointers(Parrot_Interp interp, void* data,
-                                                           size_t oldsize, size_t newsize) {
-    GC_Subsystem *gc_orig    = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
-    Parrot_Interp supervisor = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
-
-    PMC *event_data;
-    PMC *temp;
-    PMC *params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
+void*  stub_reallocate_memory_chunk_with_interior_pointers(Parrot_Interp interp, void* data, size_t oldsize, size_t newsize) {
+    GC_Subsystem  *gc_orig      = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
+    Parrot_Interp  supervisor   = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
+    PMC           *instrumentgc = ((InstrumentGC_Subsystem *) interp->gc_sys)->instrument_gc;
+    PMC *instrument, *recall, *event_data, *temp, *params, *event_array;
+    STRING *raise_event, *event;
     void*  ret;
+    PMC *ret_pack;
 
-
-    ret = gc_orig->reallocate_memory_chunk_with_interior_pointers(interp, data, oldsize, newsize);
-
-    temp = Parrot_pmc_new(supervisor, enum_class_Pointer);
-    VTABLE_set_pointer(supervisor, temp, data);
-    VTABLE_push_pmc(supervisor, params, temp);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, oldsize);
-    VTABLE_push_pmc(supervisor, params, temp);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, newsize);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_string_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "type"),
-        CONST_STRING(supervisor, "reallocate_memory_chunk_with_interior_pointers"));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp,
-                              newsize);
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-                            CONST_STRING(supervisor, "size"),
-                            temp);
-
-    raise_gc_event(supervisor, interp, CONST_STRING(supervisor, "reallocate"), event_data);
-
+    params     = instrument_pack_params(supervisor, "VVVV", interp, data, oldsize, newsize);
+    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "parameters"),params);
+    VTABLE_set_integer_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "size"),
+        newsize);
+
+    event       = CONST_STRING(supervisor, "GC::reallocate::reallocate_memory_chunk_with_interior_pointers");
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    GETATTR_InstrumentGC_instrument(supervisor, instrumentgc, instrument);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SP->P", event, event_data, &recall);
+    ret = (gc_orig->reallocate_memory_chunk_with_interior_pointers(interp, data, oldsize, newsize));
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SPP->P", event, event_data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 void  stub_free_memory_chunk(Parrot_Interp interp, void* data) {
-    GC_Subsystem *gc_orig    = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
-    Parrot_Interp supervisor = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
-
-    PMC *event_data;
-    PMC *temp;
-    PMC *params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-
-
-    gc_orig->free_memory_chunk(interp, data);
-
-    temp = Parrot_pmc_new(supervisor, enum_class_Pointer);
-    VTABLE_set_pointer(supervisor, temp, data);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_string_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "type"),
-        CONST_STRING(supervisor, "free_memory_chunk"));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_gc_event(supervisor, interp, CONST_STRING(supervisor, "free"), event_data);
-
-    return;
+    GC_Subsystem  *gc_orig      = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
+    Parrot_Interp  supervisor   = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
+    PMC           *instrumentgc = ((InstrumentGC_Subsystem *) interp->gc_sys)->instrument_gc;
+    PMC *instrument, *recall, *event_data, *temp, *params, *event_array;
+    STRING *raise_event, *event;
+
+    params     = instrument_pack_params(supervisor, "VV", interp, data);
+    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "parameters"),params);
+
+    event       = CONST_STRING(supervisor, "GC::free::free_memory_chunk");
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    GETATTR_InstrumentGC_instrument(supervisor, instrumentgc, instrument);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SP->P", event, event_data, &recall);
+    (gc_orig->free_memory_chunk(interp, data));
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SPP->P", event, event_data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 void  stub_block_mark(Parrot_Interp interp) {
-    GC_Subsystem *gc_orig    = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
-    Parrot_Interp supervisor = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
-
-    PMC *event_data;
-    PMC *temp;
-    PMC *params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-
-
-    gc_orig->block_mark(interp);
-
-
-    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_string_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "type"),
-        CONST_STRING(supervisor, "block_mark"));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_gc_event(supervisor, interp, CONST_STRING(supervisor, "administration"), event_data);
-
-    return;
+    GC_Subsystem  *gc_orig      = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
+    Parrot_Interp  supervisor   = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
+    PMC           *instrumentgc = ((InstrumentGC_Subsystem *) interp->gc_sys)->instrument_gc;
+    PMC *instrument, *recall, *event_data, *temp, *params, *event_array;
+    STRING *raise_event, *event;
+
+    params     = instrument_pack_params(supervisor, "V", interp);
+    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "parameters"),params);
+
+    event       = CONST_STRING(supervisor, "GC::administration::block_mark");
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    GETATTR_InstrumentGC_instrument(supervisor, instrumentgc, instrument);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SP->P", event, event_data, &recall);
+    (gc_orig->block_mark(interp));
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SPP->P", event, event_data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 void  stub_unblock_mark(Parrot_Interp interp) {
-    GC_Subsystem *gc_orig    = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
-    Parrot_Interp supervisor = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
-
-    PMC *event_data;
-    PMC *temp;
-    PMC *params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-
-
-    gc_orig->unblock_mark(interp);
-
-
-    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_string_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "type"),
-        CONST_STRING(supervisor, "unblock_mark"));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_gc_event(supervisor, interp, CONST_STRING(supervisor, "administration"), event_data);
-
-    return;
+    GC_Subsystem  *gc_orig      = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
+    Parrot_Interp  supervisor   = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
+    PMC           *instrumentgc = ((InstrumentGC_Subsystem *) interp->gc_sys)->instrument_gc;
+    PMC *instrument, *recall, *event_data, *temp, *params, *event_array;
+    STRING *raise_event, *event;
+
+    params     = instrument_pack_params(supervisor, "V", interp);
+    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "parameters"),params);
+
+    event       = CONST_STRING(supervisor, "GC::administration::unblock_mark");
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    GETATTR_InstrumentGC_instrument(supervisor, instrumentgc, instrument);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SP->P", event, event_data, &recall);
+    (gc_orig->unblock_mark(interp));
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SPP->P", event, event_data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 void  stub_block_sweep(Parrot_Interp interp) {
-    GC_Subsystem *gc_orig    = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
-    Parrot_Interp supervisor = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
-
-    PMC *event_data;
-    PMC *temp;
-    PMC *params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-
-
-    gc_orig->block_sweep(interp);
-
-
-    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_string_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "type"),
-        CONST_STRING(supervisor, "block_sweep"));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_gc_event(supervisor, interp, CONST_STRING(supervisor, "administration"), event_data);
-
-    return;
+    GC_Subsystem  *gc_orig      = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
+    Parrot_Interp  supervisor   = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
+    PMC           *instrumentgc = ((InstrumentGC_Subsystem *) interp->gc_sys)->instrument_gc;
+    PMC *instrument, *recall, *event_data, *temp, *params, *event_array;
+    STRING *raise_event, *event;
+
+    params     = instrument_pack_params(supervisor, "V", interp);
+    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "parameters"),params);
+
+    event       = CONST_STRING(supervisor, "GC::administration::block_sweep");
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    GETATTR_InstrumentGC_instrument(supervisor, instrumentgc, instrument);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SP->P", event, event_data, &recall);
+    (gc_orig->block_sweep(interp));
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SPP->P", event, event_data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 void  stub_unblock_sweep(Parrot_Interp interp) {
-    GC_Subsystem *gc_orig    = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
-    Parrot_Interp supervisor = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
-
-    PMC *event_data;
-    PMC *temp;
-    PMC *params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-
-
-    gc_orig->unblock_sweep(interp);
-
-
-    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_string_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "type"),
-        CONST_STRING(supervisor, "unblock_sweep"));
-    VTABLE_set_pmc_keyed_str(supervisor, event_data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_gc_event(supervisor, interp, CONST_STRING(supervisor, "administration"), event_data);
-
-    return;
+    GC_Subsystem  *gc_orig      = ((InstrumentGC_Subsystem *) interp->gc_sys)->original;
+    Parrot_Interp  supervisor   = ((InstrumentGC_Subsystem *) interp->gc_sys)->supervisor;
+    PMC           *instrumentgc = ((InstrumentGC_Subsystem *) interp->gc_sys)->instrument_gc;
+    PMC *instrument, *recall, *event_data, *temp, *params, *event_array;
+    STRING *raise_event, *event;
+
+    params     = instrument_pack_params(supervisor, "V", interp);
+    event_data = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, event_data, CONST_STRING(supervisor, "parameters"),params);
+
+    event       = CONST_STRING(supervisor, "GC::administration::unblock_sweep");
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    GETATTR_InstrumentGC_instrument(supervisor, instrumentgc, instrument);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SP->P", event, event_data, &recall);
+    (gc_orig->unblock_sweep(interp));
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event,
+                                         "SPP->P", event, event_data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 /* END gc stubs */

Modified: branches/gsoc_instrument/src/dynpmc/instrumentvtable.pmc
==============================================================================
--- branches/gsoc_instrument/src/dynpmc/instrumentvtable.pmc	Tue Aug  3 03:19:24 2010	(r48266)
+++ branches/gsoc_instrument/src/dynpmc/instrumentvtable.pmc	Tue Aug  3 03:20:16 2010	(r48267)
@@ -11,12 +11,6 @@
 C<InstrumentVtable> is a PMC class that provides an interface to
 instrument a PMC's vtable entries.
 
-=head1 TODO
-
-1. Documentation
-2. Tests
-3. Remove the vtable override instrumentation.
-
 =head2 Methods
 
 =over 4
@@ -27,11 +21,13 @@
 
 #include "parrot/parrot.h"
 
+#include "pmc/pmc_class.h"
 #include "pmc_instrument.h"
 
+#include "instrument_private.h"
+#include "instrument_extern.h"
+
 /* Helper Prototypes. */
-void raise_vtable_event(PARROT_INTERP, Parrot_Interp supervised,
-                        PMC *instr, PMC *pmc, PMC *data, STRING *group, STRING *type);
 void setup_vtable_common_hashes(PARROT_INTERP);
 void destroy_vtable_common_hashes(PARROT_INTERP);
 void setup_vtable_individual_hashes(PARROT_INTERP, Hash *orig_hash, Hash *instr_hash,
@@ -165,9 +161,11 @@
         Parrot_Interp supervised;
         PMC *list;
         PMC *iter;
+        PMC *overrides;
 
         GETATTR_Instrument_supervised(INTERP, attr->instrument, supervised);
         _class   = Parrot_oo_get_class_str(supervised, attr->class_name);
+        GETATTR_Class_vtable_overrides(supervised, _class, overrides);
 
         (PMC *list) = PCCINVOKE(INTERP, SELF, "get_hook_list", STRING *name);
 
@@ -183,7 +181,7 @@
             if (count == 0) {
                 /* Look for a vtable override. */
                 PMC *override;
-                override = Parrot_oo_find_vtable_override_for_class(supervised, _class, name);
+                override = VTABLE_get_pmc_keyed_str(supervised, overrides, item);
 
                 if (PMC_IS_NULL(override)) {
                     /* No override. */
@@ -192,7 +190,7 @@
                     func  = (size_t *)  parrot_hash_get(INTERP, attr->name_stubs, item);
                     if (entry == NULL || func == NULL) {
                         Parrot_ex_throw_from_c_args(INTERP, NULL, 1,
-                                                    "%Ss : c Unknown function, '%Ss'",
+                                                    "%Ss : Unknown function, '%Ss'",
                                                     VTABLE_name(INTERP, SELF), item);
                     }
                     *entry = func;
@@ -202,28 +200,25 @@
                        Instrument the invoke vtable entry of the override.
                        (which is assumed to be invokable, otherwise it won't be much
                         of an override.) */
-                    PMC *instr_obj, *rename, *rename_hash, *group;
-                    STRING *invoke;
+                    PMC *invokable, *event;
+                    STRING *group;
+                    INTVAL type;
+
+                    type     = Parrot_pmc_get_type_str(INTERP, CONST_STRING(INTERP, "InstrumentInvokable"));
+                    invokable= Parrot_pmc_new_init(INTERP, type, attr->instrument);
 
-                    invoke = CONST_STRING(INTERP, "invoke");
+                    (STRING *group) = PCCINVOKE(INTERP, SELF, "get_hook_group", STRING *item);
 
-                    (PMC *instr_obj) =
-                        PCCINVOKE(INTERP, attr->instrument, "instrument_object", PMC *override);
+                    event    = VTABLE_clone(INTERP, attr->event_prefix);
+                    VTABLE_push_string(INTERP, event, CONST_STRING(INTERP, "vtable"));
+                    VTABLE_push_string(INTERP, event, group);
+                    VTABLE_push_string(INTERP, event, item);
 
-                    /* Instrument its invoke vtable entry. */
-                    () = PCCINVOKE(INTERP, instr_obj, "insert_hook", STRING *invoke);
-
-                    /* Add an entry into the rename_hash attribute so that when an event
-                       is raised, the event properly named. */
-                    group  = (PMC *) parrot_hash_get(INTERP, attr->item_groups, name);
-                    rename = VTABLE_clone(INTERP, attr->event_prefix);
-                    VTABLE_push_string(INTERP, rename , CONST_STRING(INTERP, "vtable"));
-                    VTABLE_push_string(INTERP, rename ,
-                                       VTABLE_get_string_keyed_int(INTERP, group, 0));
-                    VTABLE_push_string(INTERP, rename , name);
+                    () = PCCINVOKE(INTERP, invokable, "set_event", PMC *event);
 
-                    GETATTR_InstrumentVtable_rename_hash(INTERP, instr_obj, rename_hash);
-                    VTABLE_set_pmc_keyed_str(INTERP, rename_hash, invoke, rename);
+                    VTABLE_set_pointer(INTERP, invokable, override);
+
+                    VTABLE_set_pmc_keyed_str(supervised, overrides, item, invokable);
                 }
             }
 
@@ -250,9 +245,11 @@
         PMC *iter;
         PMC *_class;
         Parrot_Interp supervised;
+        PMC *overrides;
 
         GETATTR_Instrument_supervised(INTERP, attr->instrument, supervised);
         _class   = Parrot_oo_get_class_str(supervised, attr->class_name);
+        GETATTR_Class_vtable_overrides(supervised, _class, overrides);
 
         (PMC *list) = PCCINVOKE(INTERP, SELF, "get_hook_list", STRING *name);
 
@@ -292,20 +289,10 @@
                     /* It appears that there is a vtable override.
                        Remove the instrumentation of the override's invoke
                        vtable entry. */
-                    PMC *instr_obj, *rename, *rename_hash, *group;
-                    STRING *invoke;
-
-                    invoke = CONST_STRING(INTERP, "invoke");
+                    PMC *orig_vtable_sub;
 
-                    /* The InstrumentObject instance for the override can
-                       be obtained from the registry using the vtable pointer. */
-                    instr_obj = (PMC *) parrot_hash_get(INTERP, attr->registry, override->vtable);
-
-                    /* Instrument its invoke vtable entry. */
-                    () = PCCINVOKE(INTERP, instr_obj, "remove_hook", STRING *invoke);
-
-                    GETATTR_InstrumentVtable_rename_hash(INTERP, instr_obj, rename_hash);
-                    VTABLE_delete_keyed_str(INTERP, rename_hash, invoke);
+                    orig_vtable_sub = (PMC *) VTABLE_get_pointer(INTERP, override);
+                    VTABLE_set_pmc_keyed_str(supervised, overrides, item, orig_vtable_sub);
                 }
             }
 
@@ -317,248 +304,195 @@
 
 }
 
-/*
- * Helpers
- */
-
-void raise_vtable_event(PARROT_INTERP, Parrot_Interp supervised,
-                        PMC *instr, PMC *pmc, PMC *data, STRING *group, STRING *type) {
-    Parrot_Context_info info;
-    PMC *task_hash, *task, *rename_hash;
-    PMC *event_arr;
-
-    /* Get the current context info. */
-    Parrot_Context_get_info(interp, CURRENT_CONTEXT(supervised), &info);
-
-    /* Set the event type. */
-    GETATTR_InstrumentVtable_rename_hash(interp, instr, rename_hash);
-    if (VTABLE_exists_keyed_str(interp, rename_hash, type)) {
-        event_arr = VTABLE_get_pmc_keyed_str(interp, rename_hash, type);
-    }
-    else {
-        PMC *prefix;
-
-        GETATTR_InstrumentVtable_event_prefix(interp, pmc, prefix);
-
-        event_arr = VTABLE_clone(interp, prefix);
-        VTABLE_push_string(interp, event_arr, CONST_STRING(interp, "vtable"));
-        VTABLE_push_string(interp, event_arr, group);
-        VTABLE_push_string(interp, event_arr, type);
-    }
-
-    /* Populate data with common items. */
-    VTABLE_set_pmc_keyed_str(interp, data,
-                                CONST_STRING(interp, "event"),
-                                event_arr);
-    VTABLE_set_string_keyed_str(interp,  data, CONST_STRING(interp, "file"),      info.file);
-    VTABLE_set_string_keyed_str(interp,  data, CONST_STRING(interp, "sub"),       info.subname);
-    VTABLE_set_string_keyed_str(interp,  data, CONST_STRING(interp, "namespace"), info.nsname);
-    VTABLE_set_integer_keyed_str(interp, data, CONST_STRING(interp, "line"),      info.line);
-
-    /* Raise the event. */
-    task_hash = Parrot_pmc_new(interp, enum_class_Hash);
-    VTABLE_set_string_keyed_str(interp, task_hash,
-                                CONST_STRING(interp, "type"),
-                                CONST_STRING(interp, "event"));
-    VTABLE_set_string_keyed_str(interp, task_hash,
-                                CONST_STRING(interp, "subtype"),
-                                CONST_STRING(interp, "Instrument"));
-    VTABLE_set_pmc_keyed_str(interp, task_hash, CONST_STRING(interp, "data"), data);
-
-    task = Parrot_pmc_new_init(interp, enum_class_Task, task_hash);
-    Parrot_cx_schedule_task(interp, task);
-}
-
-
 /* BELOW LIES GENERATED CODE GENERATED BY tools/build/gen_vtable_stubs.pl */
 /* Stub Prototypes */
 /* BEGIN vtable prototypes */
-static void stub_init(PARROT_INTERP, PMC* pmc);
-static void stub_init_pmc(PARROT_INTERP, PMC* pmc, PMC* initializer);
-static PMC* stub_instantiate(PARROT_INTERP, PMC* pmc, PMC* sig);
-static void stub_morph(PARROT_INTERP, PMC* pmc, PMC* type);
-static void stub_mark(PARROT_INTERP, PMC* pmc);
-static void stub_destroy(PARROT_INTERP, PMC* pmc);
-static PMC* stub_get_namespace(PARROT_INTERP, PMC* pmc);
-static PMC* stub_getprop(PARROT_INTERP, PMC* pmc, STRING* key);
-static void stub_setprop(PARROT_INTERP, PMC* pmc, STRING* key, PMC* value);
-static void stub_delprop(PARROT_INTERP, PMC* pmc, STRING* key);
-static PMC* stub_getprops(PARROT_INTERP, PMC* pmc);
-static INTVAL stub_type(PARROT_INTERP, PMC* pmc);
-static STRING* stub_name(PARROT_INTERP, PMC* pmc);
-static PMC* stub_clone(PARROT_INTERP, PMC* pmc);
-static PMC* stub_clone_pmc(PARROT_INTERP, PMC* pmc, PMC* args);
-static PMC* stub_find_method(PARROT_INTERP, PMC* pmc, STRING* method_name);
-static INTVAL stub_get_integer(PARROT_INTERP, PMC* pmc);
-static INTVAL stub_get_integer_keyed(PARROT_INTERP, PMC* pmc, PMC* key);
-static INTVAL stub_get_integer_keyed_int(PARROT_INTERP, PMC* pmc, INTVAL key);
-static INTVAL stub_get_integer_keyed_str(PARROT_INTERP, PMC* pmc, STRING* key);
-static FLOATVAL stub_get_number(PARROT_INTERP, PMC* pmc);
-static FLOATVAL stub_get_number_keyed(PARROT_INTERP, PMC* pmc, PMC* key);
-static FLOATVAL stub_get_number_keyed_int(PARROT_INTERP, PMC* pmc, INTVAL key);
-static FLOATVAL stub_get_number_keyed_str(PARROT_INTERP, PMC* pmc, STRING* key);
-static STRING* stub_get_string(PARROT_INTERP, PMC* pmc);
-static STRING* stub_get_repr(PARROT_INTERP, PMC* pmc);
-static STRING* stub_get_string_keyed(PARROT_INTERP, PMC* pmc, PMC* key);
-static STRING* stub_get_string_keyed_int(PARROT_INTERP, PMC* pmc, INTVAL key);
-static STRING* stub_get_string_keyed_str(PARROT_INTERP, PMC* pmc, STRING* key);
-static INTVAL stub_get_bool(PARROT_INTERP, PMC* pmc);
-static PMC* stub_get_pmc(PARROT_INTERP, PMC* pmc);
-static PMC* stub_get_pmc_keyed(PARROT_INTERP, PMC* pmc, PMC* key);
-static PMC* stub_get_pmc_keyed_int(PARROT_INTERP, PMC* pmc, INTVAL key);
-static PMC* stub_get_pmc_keyed_str(PARROT_INTERP, PMC* pmc, STRING* key);
-static void* stub_get_pointer(PARROT_INTERP, PMC* pmc);
-static void* stub_get_pointer_keyed(PARROT_INTERP, PMC* pmc, PMC* key);
-static void* stub_get_pointer_keyed_int(PARROT_INTERP, PMC* pmc, INTVAL key);
-static void* stub_get_pointer_keyed_str(PARROT_INTERP, PMC* pmc, STRING* key);
-static void stub_set_integer_native(PARROT_INTERP, PMC* pmc, INTVAL value);
-static void stub_set_integer_keyed(PARROT_INTERP, PMC* pmc, PMC* key, INTVAL value);
-static void stub_set_integer_keyed_int(PARROT_INTERP, PMC* pmc, INTVAL key, INTVAL value);
-static void stub_set_integer_keyed_str(PARROT_INTERP, PMC* pmc, STRING* key, INTVAL value);
-static void stub_set_number_native(PARROT_INTERP, PMC* pmc, FLOATVAL value);
-static void stub_set_number_keyed(PARROT_INTERP, PMC* pmc, PMC* key, FLOATVAL value);
-static void stub_set_number_keyed_int(PARROT_INTERP, PMC* pmc, INTVAL key, FLOATVAL value);
-static void stub_set_number_keyed_str(PARROT_INTERP, PMC* pmc, STRING* key, FLOATVAL value);
-static void stub_set_string_native(PARROT_INTERP, PMC* pmc, STRING* value);
-static void stub_assign_string_native(PARROT_INTERP, PMC* pmc, STRING* value);
-static void stub_set_string_keyed(PARROT_INTERP, PMC* pmc, PMC* key, STRING* value);
-static void stub_set_string_keyed_int(PARROT_INTERP, PMC* pmc, INTVAL key, STRING* value);
-static void stub_set_string_keyed_str(PARROT_INTERP, PMC* pmc, STRING* key, STRING* value);
-static void stub_set_bool(PARROT_INTERP, PMC* pmc, INTVAL value);
-static void stub_set_pmc(PARROT_INTERP, PMC* pmc, PMC* value);
-static void stub_assign_pmc(PARROT_INTERP, PMC* pmc, PMC* value);
-static void stub_set_pmc_keyed(PARROT_INTERP, PMC* pmc, PMC* key, PMC* value);
-static void stub_set_pmc_keyed_int(PARROT_INTERP, PMC* pmc, INTVAL key, PMC* value);
-static void stub_set_pmc_keyed_str(PARROT_INTERP, PMC* pmc, STRING* key, PMC* value);
-static void stub_set_pointer(PARROT_INTERP, PMC* pmc, void* value);
-static void stub_set_pointer_keyed(PARROT_INTERP, PMC* pmc, PMC* key, void* value);
-static void stub_set_pointer_keyed_int(PARROT_INTERP, PMC* pmc, INTVAL key, void* value);
-static void stub_set_pointer_keyed_str(PARROT_INTERP, PMC* pmc, STRING* key, void* value);
-static INTVAL stub_elements(PARROT_INTERP, PMC* pmc);
-static INTVAL stub_pop_integer(PARROT_INTERP, PMC* pmc);
-static FLOATVAL stub_pop_float(PARROT_INTERP, PMC* pmc);
-static STRING* stub_pop_string(PARROT_INTERP, PMC* pmc);
-static PMC* stub_pop_pmc(PARROT_INTERP, PMC* pmc);
-static void stub_push_integer(PARROT_INTERP, PMC* pmc, INTVAL value);
-static void stub_push_float(PARROT_INTERP, PMC* pmc, FLOATVAL value);
-static void stub_push_string(PARROT_INTERP, PMC* pmc, STRING* value);
-static void stub_push_pmc(PARROT_INTERP, PMC* pmc, PMC* value);
-static INTVAL stub_shift_integer(PARROT_INTERP, PMC* pmc);
-static FLOATVAL stub_shift_float(PARROT_INTERP, PMC* pmc);
-static STRING* stub_shift_string(PARROT_INTERP, PMC* pmc);
-static PMC* stub_shift_pmc(PARROT_INTERP, PMC* pmc);
-static void stub_unshift_integer(PARROT_INTERP, PMC* pmc, INTVAL value);
-static void stub_unshift_float(PARROT_INTERP, PMC* pmc, FLOATVAL value);
-static void stub_unshift_string(PARROT_INTERP, PMC* pmc, STRING* value);
-static void stub_unshift_pmc(PARROT_INTERP, PMC* pmc, PMC* value);
-static void stub_splice(PARROT_INTERP, PMC* pmc, PMC* value, INTVAL offset, INTVAL count);
-static PMC* stub_add(PARROT_INTERP, PMC* pmc, PMC* value, PMC* dest);
-static PMC* stub_add_int(PARROT_INTERP, PMC* pmc, INTVAL value, PMC* dest);
-static PMC* stub_add_float(PARROT_INTERP, PMC* pmc, FLOATVAL value, PMC* dest);
-static void stub_i_add(PARROT_INTERP, PMC* pmc, PMC* value);
-static void stub_i_add_int(PARROT_INTERP, PMC* pmc, INTVAL value);
-static void stub_i_add_float(PARROT_INTERP, PMC* pmc, FLOATVAL value);
-static PMC* stub_subtract(PARROT_INTERP, PMC* pmc, PMC* value, PMC* dest);
-static PMC* stub_subtract_int(PARROT_INTERP, PMC* pmc, INTVAL value, PMC* dest);
-static PMC* stub_subtract_float(PARROT_INTERP, PMC* pmc, FLOATVAL value, PMC* dest);
-static void stub_i_subtract(PARROT_INTERP, PMC* pmc, PMC* value);
-static void stub_i_subtract_int(PARROT_INTERP, PMC* pmc, INTVAL value);
-static void stub_i_subtract_float(PARROT_INTERP, PMC* pmc, FLOATVAL value);
-static PMC* stub_multiply(PARROT_INTERP, PMC* pmc, PMC* value, PMC* dest);
-static PMC* stub_multiply_int(PARROT_INTERP, PMC* pmc, INTVAL value, PMC* dest);
-static PMC* stub_multiply_float(PARROT_INTERP, PMC* pmc, FLOATVAL value, PMC* dest);
-static void stub_i_multiply(PARROT_INTERP, PMC* pmc, PMC* value);
-static void stub_i_multiply_int(PARROT_INTERP, PMC* pmc, INTVAL value);
-static void stub_i_multiply_float(PARROT_INTERP, PMC* pmc, FLOATVAL value);
-static PMC* stub_divide(PARROT_INTERP, PMC* pmc, PMC* value, PMC* dest);
-static PMC* stub_divide_int(PARROT_INTERP, PMC* pmc, INTVAL value, PMC* dest);
-static PMC* stub_divide_float(PARROT_INTERP, PMC* pmc, FLOATVAL value, PMC* dest);
-static void stub_i_divide(PARROT_INTERP, PMC* pmc, PMC* value);
-static void stub_i_divide_int(PARROT_INTERP, PMC* pmc, INTVAL value);
-static void stub_i_divide_float(PARROT_INTERP, PMC* pmc, FLOATVAL value);
-static PMC* stub_floor_divide(PARROT_INTERP, PMC* pmc, PMC* value, PMC* dest);
-static PMC* stub_floor_divide_int(PARROT_INTERP, PMC* pmc, INTVAL value, PMC* dest);
-static PMC* stub_floor_divide_float(PARROT_INTERP, PMC* pmc, FLOATVAL value, PMC* dest);
-static void stub_i_floor_divide(PARROT_INTERP, PMC* pmc, PMC* value);
-static void stub_i_floor_divide_int(PARROT_INTERP, PMC* pmc, INTVAL value);
-static void stub_i_floor_divide_float(PARROT_INTERP, PMC* pmc, FLOATVAL value);
-static PMC* stub_modulus(PARROT_INTERP, PMC* pmc, PMC* value, PMC* dest);
-static PMC* stub_modulus_int(PARROT_INTERP, PMC* pmc, INTVAL value, PMC* dest);
-static PMC* stub_modulus_float(PARROT_INTERP, PMC* pmc, FLOATVAL value, PMC* dest);
-static void stub_i_modulus(PARROT_INTERP, PMC* pmc, PMC* value);
-static void stub_i_modulus_int(PARROT_INTERP, PMC* pmc, INTVAL value);
-static void stub_i_modulus_float(PARROT_INTERP, PMC* pmc, FLOATVAL value);
-static void stub_increment(PARROT_INTERP, PMC* pmc);
-static void stub_decrement(PARROT_INTERP, PMC* pmc);
-static PMC* stub_absolute(PARROT_INTERP, PMC* pmc, PMC* dest);
-static void stub_i_absolute(PARROT_INTERP, PMC* pmc);
-static PMC* stub_neg(PARROT_INTERP, PMC* pmc, PMC* dest);
-static void stub_i_neg(PARROT_INTERP, PMC* pmc);
-static INTVAL stub_is_equal(PARROT_INTERP, PMC* pmc, PMC* value);
-static INTVAL stub_is_equal_num(PARROT_INTERP, PMC* pmc, PMC* value);
-static INTVAL stub_is_equal_string(PARROT_INTERP, PMC* pmc, PMC* value);
-static INTVAL stub_is_same(PARROT_INTERP, PMC* pmc, PMC* value);
-static INTVAL stub_cmp(PARROT_INTERP, PMC* pmc, PMC* value);
-static INTVAL stub_cmp_num(PARROT_INTERP, PMC* pmc, PMC* value);
-static INTVAL stub_cmp_string(PARROT_INTERP, PMC* pmc, PMC* value);
-static PMC* stub_cmp_pmc(PARROT_INTERP, PMC* pmc, PMC* value);
-static PMC* stub_logical_or(PARROT_INTERP, PMC* pmc, PMC* value, PMC* dest);
-static PMC* stub_logical_and(PARROT_INTERP, PMC* pmc, PMC* value, PMC* dest);
-static PMC* stub_logical_xor(PARROT_INTERP, PMC* pmc, PMC* value, PMC* dest);
-static PMC* stub_logical_not(PARROT_INTERP, PMC* pmc, PMC* dest);
-static void stub_i_logical_not(PARROT_INTERP, PMC* pmc);
-static PMC* stub_concatenate(PARROT_INTERP, PMC* pmc, PMC* value, PMC* dest);
-static PMC* stub_concatenate_str(PARROT_INTERP, PMC* pmc, STRING* value, PMC* dest);
-static void stub_i_concatenate(PARROT_INTERP, PMC* pmc, PMC* value);
-static void stub_i_concatenate_str(PARROT_INTERP, PMC* pmc, STRING* value);
-static PMC* stub_repeat(PARROT_INTERP, PMC* pmc, PMC* value, PMC* dest);
-static PMC* stub_repeat_int(PARROT_INTERP, PMC* pmc, INTVAL value, PMC* dest);
-static void stub_i_repeat(PARROT_INTERP, PMC* pmc, PMC* value);
-static void stub_i_repeat_int(PARROT_INTERP, PMC* pmc, INTVAL value);
-static void stub_substr(PARROT_INTERP, PMC* pmc, INTVAL offset, INTVAL length, PMC* dest);
-static STRING* stub_substr_str(PARROT_INTERP, PMC* pmc, INTVAL offset, INTVAL length);
-static INTVAL stub_exists_keyed(PARROT_INTERP, PMC* pmc, PMC* key);
-static INTVAL stub_exists_keyed_int(PARROT_INTERP, PMC* pmc, INTVAL key);
-static INTVAL stub_exists_keyed_str(PARROT_INTERP, PMC* pmc, STRING* key);
-static INTVAL stub_defined(PARROT_INTERP, PMC* pmc);
-static INTVAL stub_defined_keyed(PARROT_INTERP, PMC* pmc, PMC* key);
-static INTVAL stub_defined_keyed_int(PARROT_INTERP, PMC* pmc, INTVAL key);
-static INTVAL stub_defined_keyed_str(PARROT_INTERP, PMC* pmc, STRING* key);
-static void stub_delete_keyed(PARROT_INTERP, PMC* pmc, PMC* key);
-static void stub_delete_keyed_int(PARROT_INTERP, PMC* pmc, INTVAL key);
-static void stub_delete_keyed_str(PARROT_INTERP, PMC* pmc, STRING* key);
-static PMC* stub_get_iter(PARROT_INTERP, PMC* pmc);
-static INTVAL stub_hashvalue(PARROT_INTERP, PMC* pmc);
-static opcode_t* stub_invoke(PARROT_INTERP, PMC* pmc, void* next);
-static INTVAL stub_can(PARROT_INTERP, PMC* pmc, STRING* method);
-static INTVAL stub_does_pmc(PARROT_INTERP, PMC* pmc, PMC* role);
-static INTVAL stub_does(PARROT_INTERP, PMC* pmc, STRING* role);
-static INTVAL stub_isa_pmc(PARROT_INTERP, PMC* pmc, PMC* _class);
-static INTVAL stub_isa(PARROT_INTERP, PMC* pmc, STRING* _class);
-static PMC* stub_get_attr_str(PARROT_INTERP, PMC* pmc, STRING* idx);
-static PMC* stub_get_attr_keyed(PARROT_INTERP, PMC* pmc, PMC* key, STRING* idx);
-static void stub_set_attr_str(PARROT_INTERP, PMC* pmc, STRING* idx, PMC* value);
-static void stub_set_attr_keyed(PARROT_INTERP, PMC* pmc, PMC* key, STRING* idx, PMC* value);
-static PMC* stub_get_class(PARROT_INTERP, PMC* pmc);
-static void stub_add_parent(PARROT_INTERP, PMC* pmc, PMC* parent);
-static void stub_remove_parent(PARROT_INTERP, PMC* pmc, PMC* parent);
-static void stub_add_role(PARROT_INTERP, PMC* pmc, PMC* role);
-static void stub_remove_role(PARROT_INTERP, PMC* pmc, PMC* role);
-static void stub_add_attribute(PARROT_INTERP, PMC* pmc, STRING* name, PMC* type);
-static void stub_remove_attribute(PARROT_INTERP, PMC* pmc, STRING* name);
-static void stub_add_method(PARROT_INTERP, PMC* pmc, STRING* method_name, PMC* sub_pmc);
-static void stub_remove_method(PARROT_INTERP, PMC* pmc, STRING* method_name);
-static void stub_add_vtable_override(PARROT_INTERP, PMC* pmc, STRING* vtable_name, PMC* sub_pmc);
-static void stub_remove_vtable_override(PARROT_INTERP, PMC* pmc, STRING* vtable_name);
-static PMC* stub_inspect(PARROT_INTERP, PMC* pmc);
-static PMC* stub_inspect_str(PARROT_INTERP, PMC* pmc, STRING* what);
-static void stub_freeze(PARROT_INTERP, PMC* pmc, PMC* info);
-static void stub_thaw(PARROT_INTERP, PMC* pmc, PMC* info);
-static void stub_thawfinish(PARROT_INTERP, PMC* pmc, PMC* info);
-static void stub_visit(PARROT_INTERP, PMC* pmc, PMC* info);
-static void stub_share(PARROT_INTERP, PMC* pmc);
-static PMC* stub_share_ro(PARROT_INTERP, PMC* pmc);
-static void stub_init_int(PARROT_INTERP, PMC* pmc, INTVAL initializer);
+static PMC* stub_absolute(PARROT_INTERP, PMC *pmc, PMC* dest);
+static PMC* stub_add(PARROT_INTERP, PMC *pmc, PMC* value, PMC* dest);
+static void stub_add_attribute(PARROT_INTERP, PMC *pmc, STRING* name, PMC* type);
+static PMC* stub_add_float(PARROT_INTERP, PMC *pmc, FLOATVAL value, PMC* dest);
+static PMC* stub_add_int(PARROT_INTERP, PMC *pmc, INTVAL value, PMC* dest);
+static void stub_add_method(PARROT_INTERP, PMC *pmc, STRING* method_name, PMC* sub_pmc);
+static void stub_add_parent(PARROT_INTERP, PMC *pmc, PMC* parent);
+static void stub_add_role(PARROT_INTERP, PMC *pmc, PMC* role);
+static void stub_add_vtable_override(PARROT_INTERP, PMC *pmc, STRING* vtable_name, PMC* sub_pmc);
+static void stub_assign_pmc(PARROT_INTERP, PMC *pmc, PMC* value);
+static void stub_assign_string_native(PARROT_INTERP, PMC *pmc, STRING* value);
+static INTVAL stub_can(PARROT_INTERP, PMC *pmc, STRING* method);
+static PMC* stub_clone(PARROT_INTERP, PMC *pmc);
+static PMC* stub_clone_pmc(PARROT_INTERP, PMC *pmc, PMC* args);
+static INTVAL stub_cmp(PARROT_INTERP, PMC *pmc, PMC* value);
+static INTVAL stub_cmp_num(PARROT_INTERP, PMC *pmc, PMC* value);
+static PMC* stub_cmp_pmc(PARROT_INTERP, PMC *pmc, PMC* value);
+static INTVAL stub_cmp_string(PARROT_INTERP, PMC *pmc, PMC* value);
+static PMC* stub_concatenate(PARROT_INTERP, PMC *pmc, PMC* value, PMC* dest);
+static PMC* stub_concatenate_str(PARROT_INTERP, PMC *pmc, STRING* value, PMC* dest);
+static void stub_decrement(PARROT_INTERP, PMC *pmc);
+static INTVAL stub_defined(PARROT_INTERP, PMC *pmc);
+static INTVAL stub_defined_keyed(PARROT_INTERP, PMC *pmc, PMC* key);
+static INTVAL stub_defined_keyed_int(PARROT_INTERP, PMC *pmc, INTVAL key);
+static INTVAL stub_defined_keyed_str(PARROT_INTERP, PMC *pmc, STRING* key);
+static void stub_delete_keyed(PARROT_INTERP, PMC *pmc, PMC* key);
+static void stub_delete_keyed_int(PARROT_INTERP, PMC *pmc, INTVAL key);
+static void stub_delete_keyed_str(PARROT_INTERP, PMC *pmc, STRING* key);
+static void stub_delprop(PARROT_INTERP, PMC *pmc, STRING* key);
+static void stub_destroy(PARROT_INTERP, PMC *pmc);
+static PMC* stub_divide(PARROT_INTERP, PMC *pmc, PMC* value, PMC* dest);
+static PMC* stub_divide_float(PARROT_INTERP, PMC *pmc, FLOATVAL value, PMC* dest);
+static PMC* stub_divide_int(PARROT_INTERP, PMC *pmc, INTVAL value, PMC* dest);
+static INTVAL stub_does(PARROT_INTERP, PMC *pmc, STRING* role);
+static INTVAL stub_does_pmc(PARROT_INTERP, PMC *pmc, PMC* role);
+static INTVAL stub_elements(PARROT_INTERP, PMC *pmc);
+static INTVAL stub_exists_keyed(PARROT_INTERP, PMC *pmc, PMC* key);
+static INTVAL stub_exists_keyed_int(PARROT_INTERP, PMC *pmc, INTVAL key);
+static INTVAL stub_exists_keyed_str(PARROT_INTERP, PMC *pmc, STRING* key);
+static PMC* stub_find_method(PARROT_INTERP, PMC *pmc, STRING* method_name);
+static PMC* stub_floor_divide(PARROT_INTERP, PMC *pmc, PMC* value, PMC* dest);
+static PMC* stub_floor_divide_float(PARROT_INTERP, PMC *pmc, FLOATVAL value, PMC* dest);
+static PMC* stub_floor_divide_int(PARROT_INTERP, PMC *pmc, INTVAL value, PMC* dest);
+static void stub_freeze(PARROT_INTERP, PMC *pmc, PMC* info);
+static PMC* stub_get_attr_keyed(PARROT_INTERP, PMC *pmc, PMC* key, STRING* idx);
+static PMC* stub_get_attr_str(PARROT_INTERP, PMC *pmc, STRING* idx);
+static INTVAL stub_get_bool(PARROT_INTERP, PMC *pmc);
+static PMC* stub_get_class(PARROT_INTERP, PMC *pmc);
+static INTVAL stub_get_integer(PARROT_INTERP, PMC *pmc);
+static INTVAL stub_get_integer_keyed(PARROT_INTERP, PMC *pmc, PMC* key);
+static INTVAL stub_get_integer_keyed_int(PARROT_INTERP, PMC *pmc, INTVAL key);
+static INTVAL stub_get_integer_keyed_str(PARROT_INTERP, PMC *pmc, STRING* key);
+static PMC* stub_get_iter(PARROT_INTERP, PMC *pmc);
+static PMC* stub_get_namespace(PARROT_INTERP, PMC *pmc);
+static FLOATVAL stub_get_number(PARROT_INTERP, PMC *pmc);
+static FLOATVAL stub_get_number_keyed(PARROT_INTERP, PMC *pmc, PMC* key);
+static FLOATVAL stub_get_number_keyed_int(PARROT_INTERP, PMC *pmc, INTVAL key);
+static FLOATVAL stub_get_number_keyed_str(PARROT_INTERP, PMC *pmc, STRING* key);
+static PMC* stub_get_pmc(PARROT_INTERP, PMC *pmc);
+static PMC* stub_get_pmc_keyed(PARROT_INTERP, PMC *pmc, PMC* key);
+static PMC* stub_get_pmc_keyed_int(PARROT_INTERP, PMC *pmc, INTVAL key);
+static PMC* stub_get_pmc_keyed_str(PARROT_INTERP, PMC *pmc, STRING* key);
+static void* stub_get_pointer(PARROT_INTERP, PMC *pmc);
+static void* stub_get_pointer_keyed(PARROT_INTERP, PMC *pmc, PMC* key);
+static void* stub_get_pointer_keyed_int(PARROT_INTERP, PMC *pmc, INTVAL key);
+static void* stub_get_pointer_keyed_str(PARROT_INTERP, PMC *pmc, STRING* key);
+static STRING* stub_get_repr(PARROT_INTERP, PMC *pmc);
+static STRING* stub_get_string(PARROT_INTERP, PMC *pmc);
+static STRING* stub_get_string_keyed(PARROT_INTERP, PMC *pmc, PMC* key);
+static STRING* stub_get_string_keyed_int(PARROT_INTERP, PMC *pmc, INTVAL key);
+static STRING* stub_get_string_keyed_str(PARROT_INTERP, PMC *pmc, STRING* key);
+static PMC* stub_getprop(PARROT_INTERP, PMC *pmc, STRING* key);
+static PMC* stub_getprops(PARROT_INTERP, PMC *pmc);
+static INTVAL stub_hashvalue(PARROT_INTERP, PMC *pmc);
+static void stub_i_absolute(PARROT_INTERP, PMC *pmc);
+static void stub_i_add(PARROT_INTERP, PMC *pmc, PMC* value);
+static void stub_i_add_float(PARROT_INTERP, PMC *pmc, FLOATVAL value);
+static void stub_i_add_int(PARROT_INTERP, PMC *pmc, INTVAL value);
+static void stub_i_concatenate(PARROT_INTERP, PMC *pmc, PMC* value);
+static void stub_i_concatenate_str(PARROT_INTERP, PMC *pmc, STRING* value);
+static void stub_i_divide(PARROT_INTERP, PMC *pmc, PMC* value);
+static void stub_i_divide_float(PARROT_INTERP, PMC *pmc, FLOATVAL value);
+static void stub_i_divide_int(PARROT_INTERP, PMC *pmc, INTVAL value);
+static void stub_i_floor_divide(PARROT_INTERP, PMC *pmc, PMC* value);
+static void stub_i_floor_divide_float(PARROT_INTERP, PMC *pmc, FLOATVAL value);
+static void stub_i_floor_divide_int(PARROT_INTERP, PMC *pmc, INTVAL value);
+static void stub_i_logical_not(PARROT_INTERP, PMC *pmc);
+static void stub_i_modulus(PARROT_INTERP, PMC *pmc, PMC* value);
+static void stub_i_modulus_float(PARROT_INTERP, PMC *pmc, FLOATVAL value);
+static void stub_i_modulus_int(PARROT_INTERP, PMC *pmc, INTVAL value);
+static void stub_i_multiply(PARROT_INTERP, PMC *pmc, PMC* value);
+static void stub_i_multiply_float(PARROT_INTERP, PMC *pmc, FLOATVAL value);
+static void stub_i_multiply_int(PARROT_INTERP, PMC *pmc, INTVAL value);
+static void stub_i_neg(PARROT_INTERP, PMC *pmc);
+static void stub_i_repeat(PARROT_INTERP, PMC *pmc, PMC* value);
+static void stub_i_repeat_int(PARROT_INTERP, PMC *pmc, INTVAL value);
+static void stub_i_subtract(PARROT_INTERP, PMC *pmc, PMC* value);
+static void stub_i_subtract_float(PARROT_INTERP, PMC *pmc, FLOATVAL value);
+static void stub_i_subtract_int(PARROT_INTERP, PMC *pmc, INTVAL value);
+static void stub_increment(PARROT_INTERP, PMC *pmc);
+static void stub_init(PARROT_INTERP, PMC *pmc);
+static void stub_init_int(PARROT_INTERP, PMC *pmc, INTVAL initializer);
+static void stub_init_pmc(PARROT_INTERP, PMC *pmc, PMC* initializer);
+static PMC* stub_inspect(PARROT_INTERP, PMC *pmc);
+static PMC* stub_inspect_str(PARROT_INTERP, PMC *pmc, STRING* what);
+static PMC* stub_instantiate(PARROT_INTERP, PMC *pmc, PMC* sig);
+static opcode_t* stub_invoke(PARROT_INTERP, PMC *pmc, void* next);
+static INTVAL stub_is_equal(PARROT_INTERP, PMC *pmc, PMC* value);
+static INTVAL stub_is_equal_num(PARROT_INTERP, PMC *pmc, PMC* value);
+static INTVAL stub_is_equal_string(PARROT_INTERP, PMC *pmc, PMC* value);
+static INTVAL stub_is_same(PARROT_INTERP, PMC *pmc, PMC* value);
+static INTVAL stub_isa(PARROT_INTERP, PMC *pmc, STRING* _class);
+static INTVAL stub_isa_pmc(PARROT_INTERP, PMC *pmc, PMC* _class);
+static PMC* stub_logical_and(PARROT_INTERP, PMC *pmc, PMC* value, PMC* dest);
+static PMC* stub_logical_not(PARROT_INTERP, PMC *pmc, PMC* dest);
+static PMC* stub_logical_or(PARROT_INTERP, PMC *pmc, PMC* value, PMC* dest);
+static PMC* stub_logical_xor(PARROT_INTERP, PMC *pmc, PMC* value, PMC* dest);
+static void stub_mark(PARROT_INTERP, PMC *pmc);
+static PMC* stub_modulus(PARROT_INTERP, PMC *pmc, PMC* value, PMC* dest);
+static PMC* stub_modulus_float(PARROT_INTERP, PMC *pmc, FLOATVAL value, PMC* dest);
+static PMC* stub_modulus_int(PARROT_INTERP, PMC *pmc, INTVAL value, PMC* dest);
+static void stub_morph(PARROT_INTERP, PMC *pmc, PMC* type);
+static PMC* stub_multiply(PARROT_INTERP, PMC *pmc, PMC* value, PMC* dest);
+static PMC* stub_multiply_float(PARROT_INTERP, PMC *pmc, FLOATVAL value, PMC* dest);
+static PMC* stub_multiply_int(PARROT_INTERP, PMC *pmc, INTVAL value, PMC* dest);
+static STRING* stub_name(PARROT_INTERP, PMC *pmc);
+static PMC* stub_neg(PARROT_INTERP, PMC *pmc, PMC* dest);
+static FLOATVAL stub_pop_float(PARROT_INTERP, PMC *pmc);
+static INTVAL stub_pop_integer(PARROT_INTERP, PMC *pmc);
+static PMC* stub_pop_pmc(PARROT_INTERP, PMC *pmc);
+static STRING* stub_pop_string(PARROT_INTERP, PMC *pmc);
+static void stub_push_float(PARROT_INTERP, PMC *pmc, FLOATVAL value);
+static void stub_push_integer(PARROT_INTERP, PMC *pmc, INTVAL value);
+static void stub_push_pmc(PARROT_INTERP, PMC *pmc, PMC* value);
+static void stub_push_string(PARROT_INTERP, PMC *pmc, STRING* value);
+static void stub_remove_attribute(PARROT_INTERP, PMC *pmc, STRING* name);
+static void stub_remove_method(PARROT_INTERP, PMC *pmc, STRING* method_name);
+static void stub_remove_parent(PARROT_INTERP, PMC *pmc, PMC* parent);
+static void stub_remove_role(PARROT_INTERP, PMC *pmc, PMC* role);
+static void stub_remove_vtable_override(PARROT_INTERP, PMC *pmc, STRING* vtable_name);
+static PMC* stub_repeat(PARROT_INTERP, PMC *pmc, PMC* value, PMC* dest);
+static PMC* stub_repeat_int(PARROT_INTERP, PMC *pmc, INTVAL value, PMC* dest);
+static void stub_set_attr_keyed(PARROT_INTERP, PMC *pmc, PMC* key, STRING* idx, PMC* value);
+static void stub_set_attr_str(PARROT_INTERP, PMC *pmc, STRING* idx, PMC* value);
+static void stub_set_bool(PARROT_INTERP, PMC *pmc, INTVAL value);
+static void stub_set_integer_keyed(PARROT_INTERP, PMC *pmc, PMC* key, INTVAL value);
+static void stub_set_integer_keyed_int(PARROT_INTERP, PMC *pmc, INTVAL key, INTVAL value);
+static void stub_set_integer_keyed_str(PARROT_INTERP, PMC *pmc, STRING* key, INTVAL value);
+static void stub_set_integer_native(PARROT_INTERP, PMC *pmc, INTVAL value);
+static void stub_set_number_keyed(PARROT_INTERP, PMC *pmc, PMC* key, FLOATVAL value);
+static void stub_set_number_keyed_int(PARROT_INTERP, PMC *pmc, INTVAL key, FLOATVAL value);
+static void stub_set_number_keyed_str(PARROT_INTERP, PMC *pmc, STRING* key, FLOATVAL value);
+static void stub_set_number_native(PARROT_INTERP, PMC *pmc, FLOATVAL value);
+static void stub_set_pmc(PARROT_INTERP, PMC *pmc, PMC* value);
+static void stub_set_pmc_keyed(PARROT_INTERP, PMC *pmc, PMC* key, PMC* value);
+static void stub_set_pmc_keyed_int(PARROT_INTERP, PMC *pmc, INTVAL key, PMC* value);
+static void stub_set_pmc_keyed_str(PARROT_INTERP, PMC *pmc, STRING* key, PMC* value);
+static void stub_set_pointer(PARROT_INTERP, PMC *pmc, void* value);
+static void stub_set_pointer_keyed(PARROT_INTERP, PMC *pmc, PMC* key, void* value);
+static void stub_set_pointer_keyed_int(PARROT_INTERP, PMC *pmc, INTVAL key, void* value);
+static void stub_set_pointer_keyed_str(PARROT_INTERP, PMC *pmc, STRING* key, void* value);
+static void stub_set_string_keyed(PARROT_INTERP, PMC *pmc, PMC* key, STRING* value);
+static void stub_set_string_keyed_int(PARROT_INTERP, PMC *pmc, INTVAL key, STRING* value);
+static void stub_set_string_keyed_str(PARROT_INTERP, PMC *pmc, STRING* key, STRING* value);
+static void stub_set_string_native(PARROT_INTERP, PMC *pmc, STRING* value);
+static void stub_setprop(PARROT_INTERP, PMC *pmc, STRING* key, PMC* value);
+static void stub_share(PARROT_INTERP, PMC *pmc);
+static PMC* stub_share_ro(PARROT_INTERP, PMC *pmc);
+static FLOATVAL stub_shift_float(PARROT_INTERP, PMC *pmc);
+static INTVAL stub_shift_integer(PARROT_INTERP, PMC *pmc);
+static PMC* stub_shift_pmc(PARROT_INTERP, PMC *pmc);
+static STRING* stub_shift_string(PARROT_INTERP, PMC *pmc);
+static void stub_splice(PARROT_INTERP, PMC *pmc, PMC* value, INTVAL offset, INTVAL count);
+static void stub_substr(PARROT_INTERP, PMC *pmc, INTVAL offset, INTVAL length, PMC* dest);
+static STRING* stub_substr_str(PARROT_INTERP, PMC *pmc, INTVAL offset, INTVAL length);
+static PMC* stub_subtract(PARROT_INTERP, PMC *pmc, PMC* value, PMC* dest);
+static PMC* stub_subtract_float(PARROT_INTERP, PMC *pmc, FLOATVAL value, PMC* dest);
+static PMC* stub_subtract_int(PARROT_INTERP, PMC *pmc, INTVAL value, PMC* dest);
+static void stub_thaw(PARROT_INTERP, PMC *pmc, PMC* info);
+static void stub_thawfinish(PARROT_INTERP, PMC *pmc, PMC* info);
+static INTVAL stub_type(PARROT_INTERP, PMC *pmc);
+static void stub_unshift_float(PARROT_INTERP, PMC *pmc, FLOATVAL value);
+static void stub_unshift_integer(PARROT_INTERP, PMC *pmc, INTVAL value);
+static void stub_unshift_pmc(PARROT_INTERP, PMC *pmc, PMC* value);
+static void stub_unshift_string(PARROT_INTERP, PMC *pmc, STRING* value);
+static void stub_visit(PARROT_INTERP, PMC *pmc, PMC* info);
 /* END vtable prototypes */
 
 void setup_vtable_common_hashes(PARROT_INTERP) {
@@ -573,10376 +507,8126 @@
 
     /* BEGIN vtable mapping name stubs */
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "init"),
-        stub_init);
+        CONST_STRING(interp, "absolute"), stub_absolute);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "init_pmc"),
-        stub_init_pmc);
+        CONST_STRING(interp, "add"), stub_add);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "instantiate"),
-        stub_instantiate);
+        CONST_STRING(interp, "add_attribute"), stub_add_attribute);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "morph"),
-        stub_morph);
+        CONST_STRING(interp, "add_float"), stub_add_float);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "mark"),
-        stub_mark);
+        CONST_STRING(interp, "add_int"), stub_add_int);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "destroy"),
-        stub_destroy);
+        CONST_STRING(interp, "add_method"), stub_add_method);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "get_namespace"),
-        stub_get_namespace);
+        CONST_STRING(interp, "add_parent"), stub_add_parent);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "getprop"),
-        stub_getprop);
+        CONST_STRING(interp, "add_role"), stub_add_role);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "setprop"),
-        stub_setprop);
+        CONST_STRING(interp, "add_vtable_override"), stub_add_vtable_override);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "delprop"),
-        stub_delprop);
+        CONST_STRING(interp, "assign_pmc"), stub_assign_pmc);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "getprops"),
-        stub_getprops);
+        CONST_STRING(interp, "assign_string_native"), stub_assign_string_native);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "type"),
-        stub_type);
+        CONST_STRING(interp, "can"), stub_can);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "name"),
-        stub_name);
+        CONST_STRING(interp, "clone"), stub_clone);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "clone"),
-        stub_clone);
+        CONST_STRING(interp, "clone_pmc"), stub_clone_pmc);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "clone_pmc"),
-        stub_clone_pmc);
+        CONST_STRING(interp, "cmp"), stub_cmp);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "find_method"),
-        stub_find_method);
+        CONST_STRING(interp, "cmp_num"), stub_cmp_num);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "get_integer"),
-        stub_get_integer);
+        CONST_STRING(interp, "cmp_pmc"), stub_cmp_pmc);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "get_integer_keyed"),
-        stub_get_integer_keyed);
+        CONST_STRING(interp, "cmp_string"), stub_cmp_string);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "get_integer_keyed_int"),
-        stub_get_integer_keyed_int);
+        CONST_STRING(interp, "concatenate"), stub_concatenate);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "get_integer_keyed_str"),
-        stub_get_integer_keyed_str);
+        CONST_STRING(interp, "concatenate_str"), stub_concatenate_str);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "get_number"),
-        stub_get_number);
+        CONST_STRING(interp, "decrement"), stub_decrement);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "get_number_keyed"),
-        stub_get_number_keyed);
+        CONST_STRING(interp, "defined"), stub_defined);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "get_number_keyed_int"),
-        stub_get_number_keyed_int);
+        CONST_STRING(interp, "defined_keyed"), stub_defined_keyed);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "get_number_keyed_str"),
-        stub_get_number_keyed_str);
+        CONST_STRING(interp, "defined_keyed_int"), stub_defined_keyed_int);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "get_string"),
-        stub_get_string);
+        CONST_STRING(interp, "defined_keyed_str"), stub_defined_keyed_str);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "get_repr"),
-        stub_get_repr);
+        CONST_STRING(interp, "delete_keyed"), stub_delete_keyed);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "get_string_keyed"),
-        stub_get_string_keyed);
+        CONST_STRING(interp, "delete_keyed_int"), stub_delete_keyed_int);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "get_string_keyed_int"),
-        stub_get_string_keyed_int);
+        CONST_STRING(interp, "delete_keyed_str"), stub_delete_keyed_str);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "get_string_keyed_str"),
-        stub_get_string_keyed_str);
+        CONST_STRING(interp, "delprop"), stub_delprop);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "get_bool"),
-        stub_get_bool);
+        CONST_STRING(interp, "destroy"), stub_destroy);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "get_pmc"),
-        stub_get_pmc);
+        CONST_STRING(interp, "divide"), stub_divide);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "get_pmc_keyed"),
-        stub_get_pmc_keyed);
+        CONST_STRING(interp, "divide_float"), stub_divide_float);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "get_pmc_keyed_int"),
-        stub_get_pmc_keyed_int);
+        CONST_STRING(interp, "divide_int"), stub_divide_int);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "get_pmc_keyed_str"),
-        stub_get_pmc_keyed_str);
+        CONST_STRING(interp, "does"), stub_does);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "get_pointer"),
-        stub_get_pointer);
+        CONST_STRING(interp, "does_pmc"), stub_does_pmc);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "get_pointer_keyed"),
-        stub_get_pointer_keyed);
+        CONST_STRING(interp, "elements"), stub_elements);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "get_pointer_keyed_int"),
-        stub_get_pointer_keyed_int);
+        CONST_STRING(interp, "exists_keyed"), stub_exists_keyed);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "get_pointer_keyed_str"),
-        stub_get_pointer_keyed_str);
+        CONST_STRING(interp, "exists_keyed_int"), stub_exists_keyed_int);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "set_integer_native"),
-        stub_set_integer_native);
+        CONST_STRING(interp, "exists_keyed_str"), stub_exists_keyed_str);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "set_integer_keyed"),
-        stub_set_integer_keyed);
+        CONST_STRING(interp, "find_method"), stub_find_method);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "set_integer_keyed_int"),
-        stub_set_integer_keyed_int);
+        CONST_STRING(interp, "floor_divide"), stub_floor_divide);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "set_integer_keyed_str"),
-        stub_set_integer_keyed_str);
+        CONST_STRING(interp, "floor_divide_float"), stub_floor_divide_float);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "set_number_native"),
-        stub_set_number_native);
+        CONST_STRING(interp, "floor_divide_int"), stub_floor_divide_int);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "set_number_keyed"),
-        stub_set_number_keyed);
+        CONST_STRING(interp, "freeze"), stub_freeze);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "set_number_keyed_int"),
-        stub_set_number_keyed_int);
+        CONST_STRING(interp, "get_attr_keyed"), stub_get_attr_keyed);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "set_number_keyed_str"),
-        stub_set_number_keyed_str);
+        CONST_STRING(interp, "get_attr_str"), stub_get_attr_str);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "set_string_native"),
-        stub_set_string_native);
+        CONST_STRING(interp, "get_bool"), stub_get_bool);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "assign_string_native"),
-        stub_assign_string_native);
+        CONST_STRING(interp, "get_class"), stub_get_class);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "set_string_keyed"),
-        stub_set_string_keyed);
+        CONST_STRING(interp, "get_integer"), stub_get_integer);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "set_string_keyed_int"),
-        stub_set_string_keyed_int);
+        CONST_STRING(interp, "get_integer_keyed"), stub_get_integer_keyed);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "set_string_keyed_str"),
-        stub_set_string_keyed_str);
+        CONST_STRING(interp, "get_integer_keyed_int"), stub_get_integer_keyed_int);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "set_bool"),
-        stub_set_bool);
+        CONST_STRING(interp, "get_integer_keyed_str"), stub_get_integer_keyed_str);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "set_pmc"),
-        stub_set_pmc);
+        CONST_STRING(interp, "get_iter"), stub_get_iter);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "assign_pmc"),
-        stub_assign_pmc);
+        CONST_STRING(interp, "get_namespace"), stub_get_namespace);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "set_pmc_keyed"),
-        stub_set_pmc_keyed);
+        CONST_STRING(interp, "get_number"), stub_get_number);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "set_pmc_keyed_int"),
-        stub_set_pmc_keyed_int);
+        CONST_STRING(interp, "get_number_keyed"), stub_get_number_keyed);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "set_pmc_keyed_str"),
-        stub_set_pmc_keyed_str);
+        CONST_STRING(interp, "get_number_keyed_int"), stub_get_number_keyed_int);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "set_pointer"),
-        stub_set_pointer);
+        CONST_STRING(interp, "get_number_keyed_str"), stub_get_number_keyed_str);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "set_pointer_keyed"),
-        stub_set_pointer_keyed);
+        CONST_STRING(interp, "get_pmc"), stub_get_pmc);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "set_pointer_keyed_int"),
-        stub_set_pointer_keyed_int);
+        CONST_STRING(interp, "get_pmc_keyed"), stub_get_pmc_keyed);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "set_pointer_keyed_str"),
-        stub_set_pointer_keyed_str);
+        CONST_STRING(interp, "get_pmc_keyed_int"), stub_get_pmc_keyed_int);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "elements"),
-        stub_elements);
+        CONST_STRING(interp, "get_pmc_keyed_str"), stub_get_pmc_keyed_str);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "pop_integer"),
-        stub_pop_integer);
+        CONST_STRING(interp, "get_pointer"), stub_get_pointer);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "pop_float"),
-        stub_pop_float);
+        CONST_STRING(interp, "get_pointer_keyed"), stub_get_pointer_keyed);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "pop_string"),
-        stub_pop_string);
+        CONST_STRING(interp, "get_pointer_keyed_int"), stub_get_pointer_keyed_int);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "pop_pmc"),
-        stub_pop_pmc);
+        CONST_STRING(interp, "get_pointer_keyed_str"), stub_get_pointer_keyed_str);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "push_integer"),
-        stub_push_integer);
+        CONST_STRING(interp, "get_repr"), stub_get_repr);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "push_float"),
-        stub_push_float);
+        CONST_STRING(interp, "get_string"), stub_get_string);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "push_string"),
-        stub_push_string);
+        CONST_STRING(interp, "get_string_keyed"), stub_get_string_keyed);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "push_pmc"),
-        stub_push_pmc);
+        CONST_STRING(interp, "get_string_keyed_int"), stub_get_string_keyed_int);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "shift_integer"),
-        stub_shift_integer);
+        CONST_STRING(interp, "get_string_keyed_str"), stub_get_string_keyed_str);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "shift_float"),
-        stub_shift_float);
+        CONST_STRING(interp, "getprop"), stub_getprop);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "shift_string"),
-        stub_shift_string);
+        CONST_STRING(interp, "getprops"), stub_getprops);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "shift_pmc"),
-        stub_shift_pmc);
+        CONST_STRING(interp, "hashvalue"), stub_hashvalue);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "unshift_integer"),
-        stub_unshift_integer);
+        CONST_STRING(interp, "i_absolute"), stub_i_absolute);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "unshift_float"),
-        stub_unshift_float);
+        CONST_STRING(interp, "i_add"), stub_i_add);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "unshift_string"),
-        stub_unshift_string);
+        CONST_STRING(interp, "i_add_float"), stub_i_add_float);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "unshift_pmc"),
-        stub_unshift_pmc);
+        CONST_STRING(interp, "i_add_int"), stub_i_add_int);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "splice"),
-        stub_splice);
+        CONST_STRING(interp, "i_concatenate"), stub_i_concatenate);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "add"),
-        stub_add);
+        CONST_STRING(interp, "i_concatenate_str"), stub_i_concatenate_str);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "add_int"),
-        stub_add_int);
+        CONST_STRING(interp, "i_divide"), stub_i_divide);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "add_float"),
-        stub_add_float);
+        CONST_STRING(interp, "i_divide_float"), stub_i_divide_float);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "i_add"),
-        stub_i_add);
+        CONST_STRING(interp, "i_divide_int"), stub_i_divide_int);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "i_add_int"),
-        stub_i_add_int);
+        CONST_STRING(interp, "i_floor_divide"), stub_i_floor_divide);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "i_add_float"),
-        stub_i_add_float);
+        CONST_STRING(interp, "i_floor_divide_float"), stub_i_floor_divide_float);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "subtract"),
-        stub_subtract);
+        CONST_STRING(interp, "i_floor_divide_int"), stub_i_floor_divide_int);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "subtract_int"),
-        stub_subtract_int);
+        CONST_STRING(interp, "i_logical_not"), stub_i_logical_not);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "subtract_float"),
-        stub_subtract_float);
+        CONST_STRING(interp, "i_modulus"), stub_i_modulus);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "i_subtract"),
-        stub_i_subtract);
+        CONST_STRING(interp, "i_modulus_float"), stub_i_modulus_float);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "i_subtract_int"),
-        stub_i_subtract_int);
+        CONST_STRING(interp, "i_modulus_int"), stub_i_modulus_int);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "i_subtract_float"),
-        stub_i_subtract_float);
+        CONST_STRING(interp, "i_multiply"), stub_i_multiply);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "multiply"),
-        stub_multiply);
+        CONST_STRING(interp, "i_multiply_float"), stub_i_multiply_float);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "multiply_int"),
-        stub_multiply_int);
+        CONST_STRING(interp, "i_multiply_int"), stub_i_multiply_int);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "multiply_float"),
-        stub_multiply_float);
+        CONST_STRING(interp, "i_neg"), stub_i_neg);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "i_multiply"),
-        stub_i_multiply);
+        CONST_STRING(interp, "i_repeat"), stub_i_repeat);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "i_multiply_int"),
-        stub_i_multiply_int);
+        CONST_STRING(interp, "i_repeat_int"), stub_i_repeat_int);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "i_multiply_float"),
-        stub_i_multiply_float);
+        CONST_STRING(interp, "i_subtract"), stub_i_subtract);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "divide"),
-        stub_divide);
+        CONST_STRING(interp, "i_subtract_float"), stub_i_subtract_float);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "divide_int"),
-        stub_divide_int);
+        CONST_STRING(interp, "i_subtract_int"), stub_i_subtract_int);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "divide_float"),
-        stub_divide_float);
+        CONST_STRING(interp, "increment"), stub_increment);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "i_divide"),
-        stub_i_divide);
+        CONST_STRING(interp, "init"), stub_init);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "i_divide_int"),
-        stub_i_divide_int);
+        CONST_STRING(interp, "init_int"), stub_init_int);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "i_divide_float"),
-        stub_i_divide_float);
+        CONST_STRING(interp, "init_pmc"), stub_init_pmc);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "floor_divide"),
-        stub_floor_divide);
+        CONST_STRING(interp, "inspect"), stub_inspect);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "floor_divide_int"),
-        stub_floor_divide_int);
+        CONST_STRING(interp, "inspect_str"), stub_inspect_str);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "floor_divide_float"),
-        stub_floor_divide_float);
+        CONST_STRING(interp, "instantiate"), stub_instantiate);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "i_floor_divide"),
-        stub_i_floor_divide);
+        CONST_STRING(interp, "invoke"), stub_invoke);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "i_floor_divide_int"),
-        stub_i_floor_divide_int);
+        CONST_STRING(interp, "is_equal"), stub_is_equal);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "i_floor_divide_float"),
-        stub_i_floor_divide_float);
+        CONST_STRING(interp, "is_equal_num"), stub_is_equal_num);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "modulus"),
-        stub_modulus);
+        CONST_STRING(interp, "is_equal_string"), stub_is_equal_string);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "modulus_int"),
-        stub_modulus_int);
+        CONST_STRING(interp, "is_same"), stub_is_same);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "modulus_float"),
-        stub_modulus_float);
+        CONST_STRING(interp, "isa"), stub_isa);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "i_modulus"),
-        stub_i_modulus);
+        CONST_STRING(interp, "isa_pmc"), stub_isa_pmc);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "i_modulus_int"),
-        stub_i_modulus_int);
+        CONST_STRING(interp, "logical_and"), stub_logical_and);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "i_modulus_float"),
-        stub_i_modulus_float);
+        CONST_STRING(interp, "logical_not"), stub_logical_not);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "increment"),
-        stub_increment);
+        CONST_STRING(interp, "logical_or"), stub_logical_or);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "decrement"),
-        stub_decrement);
+        CONST_STRING(interp, "logical_xor"), stub_logical_xor);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "absolute"),
-        stub_absolute);
+        CONST_STRING(interp, "mark"), stub_mark);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "i_absolute"),
-        stub_i_absolute);
+        CONST_STRING(interp, "modulus"), stub_modulus);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "neg"),
-        stub_neg);
+        CONST_STRING(interp, "modulus_float"), stub_modulus_float);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "i_neg"),
-        stub_i_neg);
+        CONST_STRING(interp, "modulus_int"), stub_modulus_int);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "is_equal"),
-        stub_is_equal);
+        CONST_STRING(interp, "morph"), stub_morph);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "is_equal_num"),
-        stub_is_equal_num);
+        CONST_STRING(interp, "multiply"), stub_multiply);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "is_equal_string"),
-        stub_is_equal_string);
+        CONST_STRING(interp, "multiply_float"), stub_multiply_float);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "is_same"),
-        stub_is_same);
+        CONST_STRING(interp, "multiply_int"), stub_multiply_int);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "cmp"),
-        stub_cmp);
+        CONST_STRING(interp, "name"), stub_name);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "cmp_num"),
-        stub_cmp_num);
+        CONST_STRING(interp, "neg"), stub_neg);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "cmp_string"),
-        stub_cmp_string);
+        CONST_STRING(interp, "pop_float"), stub_pop_float);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "cmp_pmc"),
-        stub_cmp_pmc);
+        CONST_STRING(interp, "pop_integer"), stub_pop_integer);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "logical_or"),
-        stub_logical_or);
+        CONST_STRING(interp, "pop_pmc"), stub_pop_pmc);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "logical_and"),
-        stub_logical_and);
+        CONST_STRING(interp, "pop_string"), stub_pop_string);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "logical_xor"),
-        stub_logical_xor);
+        CONST_STRING(interp, "push_float"), stub_push_float);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "logical_not"),
-        stub_logical_not);
+        CONST_STRING(interp, "push_integer"), stub_push_integer);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "i_logical_not"),
-        stub_i_logical_not);
+        CONST_STRING(interp, "push_pmc"), stub_push_pmc);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "concatenate"),
-        stub_concatenate);
+        CONST_STRING(interp, "push_string"), stub_push_string);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "concatenate_str"),
-        stub_concatenate_str);
+        CONST_STRING(interp, "remove_attribute"), stub_remove_attribute);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "i_concatenate"),
-        stub_i_concatenate);
+        CONST_STRING(interp, "remove_method"), stub_remove_method);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "i_concatenate_str"),
-        stub_i_concatenate_str);
+        CONST_STRING(interp, "remove_parent"), stub_remove_parent);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "repeat"),
-        stub_repeat);
+        CONST_STRING(interp, "remove_role"), stub_remove_role);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "repeat_int"),
-        stub_repeat_int);
+        CONST_STRING(interp, "remove_vtable_override"), stub_remove_vtable_override);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "i_repeat"),
-        stub_i_repeat);
+        CONST_STRING(interp, "repeat"), stub_repeat);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "i_repeat_int"),
-        stub_i_repeat_int);
+        CONST_STRING(interp, "repeat_int"), stub_repeat_int);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "substr"),
-        stub_substr);
+        CONST_STRING(interp, "set_attr_keyed"), stub_set_attr_keyed);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "substr_str"),
-        stub_substr_str);
+        CONST_STRING(interp, "set_attr_str"), stub_set_attr_str);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "exists_keyed"),
-        stub_exists_keyed);
+        CONST_STRING(interp, "set_bool"), stub_set_bool);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "exists_keyed_int"),
-        stub_exists_keyed_int);
+        CONST_STRING(interp, "set_integer_keyed"), stub_set_integer_keyed);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "exists_keyed_str"),
-        stub_exists_keyed_str);
+        CONST_STRING(interp, "set_integer_keyed_int"), stub_set_integer_keyed_int);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "defined"),
-        stub_defined);
+        CONST_STRING(interp, "set_integer_keyed_str"), stub_set_integer_keyed_str);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "defined_keyed"),
-        stub_defined_keyed);
+        CONST_STRING(interp, "set_integer_native"), stub_set_integer_native);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "defined_keyed_int"),
-        stub_defined_keyed_int);
+        CONST_STRING(interp, "set_number_keyed"), stub_set_number_keyed);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "defined_keyed_str"),
-        stub_defined_keyed_str);
+        CONST_STRING(interp, "set_number_keyed_int"), stub_set_number_keyed_int);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "delete_keyed"),
-        stub_delete_keyed);
+        CONST_STRING(interp, "set_number_keyed_str"), stub_set_number_keyed_str);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "delete_keyed_int"),
-        stub_delete_keyed_int);
+        CONST_STRING(interp, "set_number_native"), stub_set_number_native);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "delete_keyed_str"),
-        stub_delete_keyed_str);
+        CONST_STRING(interp, "set_pmc"), stub_set_pmc);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "get_iter"),
-        stub_get_iter);
+        CONST_STRING(interp, "set_pmc_keyed"), stub_set_pmc_keyed);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "hashvalue"),
-        stub_hashvalue);
+        CONST_STRING(interp, "set_pmc_keyed_int"), stub_set_pmc_keyed_int);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "invoke"),
-        stub_invoke);
+        CONST_STRING(interp, "set_pmc_keyed_str"), stub_set_pmc_keyed_str);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "can"),
-        stub_can);
+        CONST_STRING(interp, "set_pointer"), stub_set_pointer);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "does_pmc"),
-        stub_does_pmc);
+        CONST_STRING(interp, "set_pointer_keyed"), stub_set_pointer_keyed);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "does"),
-        stub_does);
+        CONST_STRING(interp, "set_pointer_keyed_int"), stub_set_pointer_keyed_int);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "isa_pmc"),
-        stub_isa_pmc);
+        CONST_STRING(interp, "set_pointer_keyed_str"), stub_set_pointer_keyed_str);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "isa"),
-        stub_isa);
+        CONST_STRING(interp, "set_string_keyed"), stub_set_string_keyed);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "get_attr_str"),
-        stub_get_attr_str);
+        CONST_STRING(interp, "set_string_keyed_int"), stub_set_string_keyed_int);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "get_attr_keyed"),
-        stub_get_attr_keyed);
+        CONST_STRING(interp, "set_string_keyed_str"), stub_set_string_keyed_str);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "set_attr_str"),
-        stub_set_attr_str);
+        CONST_STRING(interp, "set_string_native"), stub_set_string_native);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "set_attr_keyed"),
-        stub_set_attr_keyed);
+        CONST_STRING(interp, "setprop"), stub_setprop);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "get_class"),
-        stub_get_class);
+        CONST_STRING(interp, "share"), stub_share);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "add_parent"),
-        stub_add_parent);
+        CONST_STRING(interp, "share_ro"), stub_share_ro);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "remove_parent"),
-        stub_remove_parent);
+        CONST_STRING(interp, "shift_float"), stub_shift_float);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "add_role"),
-        stub_add_role);
+        CONST_STRING(interp, "shift_integer"), stub_shift_integer);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "remove_role"),
-        stub_remove_role);
+        CONST_STRING(interp, "shift_pmc"), stub_shift_pmc);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "add_attribute"),
-        stub_add_attribute);
+        CONST_STRING(interp, "shift_string"), stub_shift_string);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "remove_attribute"),
-        stub_remove_attribute);
+        CONST_STRING(interp, "splice"), stub_splice);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "add_method"),
-        stub_add_method);
+        CONST_STRING(interp, "substr"), stub_substr);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "remove_method"),
-        stub_remove_method);
+        CONST_STRING(interp, "substr_str"), stub_substr_str);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "add_vtable_override"),
-        stub_add_vtable_override);
+        CONST_STRING(interp, "subtract"), stub_subtract);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "remove_vtable_override"),
-        stub_remove_vtable_override);
+        CONST_STRING(interp, "subtract_float"), stub_subtract_float);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "inspect"),
-        stub_inspect);
+        CONST_STRING(interp, "subtract_int"), stub_subtract_int);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "inspect_str"),
-        stub_inspect_str);
+        CONST_STRING(interp, "thaw"), stub_thaw);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "freeze"),
-        stub_freeze);
+        CONST_STRING(interp, "thawfinish"), stub_thawfinish);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "thaw"),
-        stub_thaw);
+        CONST_STRING(interp, "type"), stub_type);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "thawfinish"),
-        stub_thawfinish);
+        CONST_STRING(interp, "unshift_float"), stub_unshift_float);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "visit"),
-        stub_visit);
+        CONST_STRING(interp, "unshift_integer"), stub_unshift_integer);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "share"),
-        stub_share);
+        CONST_STRING(interp, "unshift_pmc"), stub_unshift_pmc);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "share_ro"),
-        stub_share_ro);
+        CONST_STRING(interp, "unshift_string"), stub_unshift_string);
     parrot_hash_put(interp, vtable_name_stubs,
-        CONST_STRING(interp, "init_int"),
-        stub_init_int);
+        CONST_STRING(interp, "visit"), stub_visit);
     /* END vtable mapping name stubs */
 
     /* BEGIN vtable mapping group items */
     temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "exists_keyed"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "exists_keyed_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "exists_keyed_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "assign_pmc"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "assign_string_native"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_bool"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_integer_keyed"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_integer_keyed_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_integer_keyed_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_integer_native"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_number_keyed"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_number_keyed_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_number_keyed_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_number_native"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_pmc"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_pmc_keyed"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_pmc_keyed_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_pmc_keyed_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_pointer"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_pointer_keyed"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_pointer_keyed_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_pointer_keyed_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_string_keyed"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_string_keyed_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_string_keyed_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_string_native"));
     parrot_hash_put(interp, vtable_group_items,
-        CONST_STRING(interp, "exists"),
-        temp);
+        CONST_STRING(interp, "store"), temp);
 
     temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_integer"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_integer_keyed"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_integer_keyed_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_integer_keyed_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_number"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_number_keyed"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_number_keyed_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_number_keyed_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_string"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_repr"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_string_keyed"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_string_keyed_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_string_keyed_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_bool"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_pmc"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_pmc_keyed"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_pmc_keyed_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_pmc_keyed_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_pointer"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_pointer_keyed"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_pointer_keyed_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_pointer_keyed_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_integer_native"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_integer_keyed"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_integer_keyed_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_integer_keyed_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_number_native"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_number_keyed"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_number_keyed_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_number_keyed_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_string_native"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "assign_string_native"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_string_keyed"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_string_keyed_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_string_keyed_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_bool"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_pmc"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "assign_pmc"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_pmc_keyed"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_pmc_keyed_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_pmc_keyed_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_pointer"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_pointer_keyed"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_pointer_keyed_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_pointer_keyed_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "absolute"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "add"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "add_float"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "add_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "decrement"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "divide"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "divide_float"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "divide_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "floor_divide"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "floor_divide_float"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "floor_divide_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_absolute"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_add"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_add_float"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_add_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_divide"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_divide_float"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_divide_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_floor_divide"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_floor_divide_float"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_floor_divide_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_modulus"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_modulus_float"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_modulus_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_multiply"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_multiply_float"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_multiply_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_neg"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_subtract"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_subtract_float"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_subtract_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "increment"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "modulus"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "modulus_float"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "modulus_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "multiply"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "multiply_float"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "multiply_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "neg"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "subtract"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "subtract_float"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "subtract_int"));
     parrot_hash_put(interp, vtable_group_items,
-        CONST_STRING(interp, "fetch"),
-        temp);
+        CONST_STRING(interp, "math"), temp);
 
     temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "init"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "init_pmc"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "instantiate"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "morph"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "mark"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "destroy"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_namespace"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "getprop"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "setprop"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "delprop"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "getprops"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "type"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "name"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "clone"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "clone_pmc"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "find_method"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_integer"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_integer_keyed"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_integer_keyed_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_integer_keyed_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_number"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_number_keyed"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_number_keyed_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_number_keyed_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_string"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_repr"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_string_keyed"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_string_keyed_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_string_keyed_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_bool"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_pmc"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_pmc_keyed"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_pmc_keyed_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_pmc_keyed_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_pointer"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_pointer_keyed"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_pointer_keyed_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_pointer_keyed_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_integer_native"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_integer_keyed"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_integer_keyed_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_integer_keyed_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_number_native"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_number_keyed"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_number_keyed_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_number_keyed_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_string_native"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "assign_string_native"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_string_keyed"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_string_keyed_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_string_keyed_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_bool"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_pmc"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "assign_pmc"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_pmc_keyed"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_pmc_keyed_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_pmc_keyed_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_pointer"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_pointer_keyed"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_pointer_keyed_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_pointer_keyed_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "elements"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "pop_integer"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "pop_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "pop_string"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "pop_pmc"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "push_integer"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "push_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "push_string"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "push_pmc"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "shift_integer"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "shift_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "shift_string"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "shift_pmc"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "unshift_integer"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "unshift_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "unshift_string"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "unshift_pmc"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "splice"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "add"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "add_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "add_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_add"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_add_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_add_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "subtract"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "subtract_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "subtract_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_subtract"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_subtract_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_subtract_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "multiply"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "multiply_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "multiply_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_multiply"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_multiply_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_multiply_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "divide"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "divide_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "divide_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_divide"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_divide_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_divide_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "floor_divide"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "floor_divide_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "floor_divide_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_floor_divide"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_floor_divide_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_floor_divide_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "modulus"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "modulus_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "modulus_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_modulus"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_modulus_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_modulus_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "increment"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "decrement"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "absolute"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_absolute"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "neg"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_neg"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "is_equal"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "is_equal_num"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "is_equal_string"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "is_same"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "cmp"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "cmp_num"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "cmp_string"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "cmp_pmc"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "logical_or"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "logical_and"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "logical_xor"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "logical_not"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_logical_not"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "concatenate"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "concatenate_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_concatenate"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_concatenate_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "repeat"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "repeat_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_repeat"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_repeat_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "substr"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "substr_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "exists_keyed"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "exists_keyed_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "exists_keyed_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "defined"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "defined_keyed"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "defined_keyed_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "defined_keyed_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "delete_keyed"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "delete_keyed_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "delete_keyed_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_iter"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "hashvalue"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "invoke"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "can"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "does_pmc"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "does"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "isa_pmc"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "isa"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_attr_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_attr_keyed"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_attr_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_attr_keyed"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_class"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "add_parent"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "remove_parent"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "add_role"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "remove_role"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "add_attribute"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "remove_attribute"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "add_method"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "remove_method"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "add_vtable_override"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "remove_vtable_override"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "inspect"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "inspect_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "freeze"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "thaw"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "thawfinish"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "visit"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "share"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "share_ro"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "init_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "concatenate"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "concatenate_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_concatenate"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_concatenate_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_repeat"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_repeat_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "repeat"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "repeat_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "substr"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "substr_str"));
     parrot_hash_put(interp, vtable_group_items,
-        CONST_STRING(interp, "all"),
-        temp);
+        CONST_STRING(interp, "string"), temp);
 
     temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "concatenate"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "concatenate_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_concatenate"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_concatenate_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "repeat"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "repeat_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_repeat"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_repeat_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "substr"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "substr_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "absolute"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "add"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "add_attribute"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "add_float"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "add_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "add_method"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "add_parent"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "add_role"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "add_vtable_override"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "assign_pmc"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "assign_string_native"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "can"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "clone"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "clone_pmc"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "cmp"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "cmp_num"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "cmp_pmc"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "cmp_string"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "concatenate"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "concatenate_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "decrement"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "defined"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "defined_keyed"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "defined_keyed_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "defined_keyed_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "delete_keyed"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "delete_keyed_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "delete_keyed_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "delprop"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "destroy"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "divide"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "divide_float"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "divide_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "does"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "does_pmc"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "elements"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "exists_keyed"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "exists_keyed_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "exists_keyed_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "find_method"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "floor_divide"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "floor_divide_float"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "floor_divide_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "freeze"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_attr_keyed"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_attr_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_bool"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_class"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_integer"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_integer_keyed"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_integer_keyed_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_integer_keyed_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_iter"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_namespace"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_number"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_number_keyed"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_number_keyed_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_number_keyed_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_pmc"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_pmc_keyed"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_pmc_keyed_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_pmc_keyed_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_pointer"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_pointer_keyed"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_pointer_keyed_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_pointer_keyed_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_repr"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_string"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_string_keyed"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_string_keyed_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_string_keyed_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "getprop"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "getprops"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "hashvalue"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_absolute"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_add"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_add_float"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_add_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_concatenate"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_concatenate_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_divide"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_divide_float"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_divide_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_floor_divide"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_floor_divide_float"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_floor_divide_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_logical_not"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_modulus"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_modulus_float"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_modulus_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_multiply"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_multiply_float"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_multiply_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_neg"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_repeat"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_repeat_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_subtract"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_subtract_float"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_subtract_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "increment"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "init"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "init_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "init_pmc"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "inspect"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "inspect_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "instantiate"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "invoke"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "is_equal"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "is_equal_num"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "is_equal_string"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "is_same"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "isa"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "isa_pmc"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "logical_and"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "logical_not"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "logical_or"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "logical_xor"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "mark"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "modulus"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "modulus_float"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "modulus_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "morph"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "multiply"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "multiply_float"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "multiply_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "name"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "neg"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "pop_float"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "pop_integer"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "pop_pmc"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "pop_string"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "push_float"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "push_integer"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "push_pmc"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "push_string"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "remove_attribute"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "remove_method"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "remove_parent"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "remove_role"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "remove_vtable_override"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "repeat"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "repeat_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_attr_keyed"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_attr_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_bool"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_integer_keyed"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_integer_keyed_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_integer_keyed_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_integer_native"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_number_keyed"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_number_keyed_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_number_keyed_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_number_native"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_pmc"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_pmc_keyed"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_pmc_keyed_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_pmc_keyed_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_pointer"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_pointer_keyed"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_pointer_keyed_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_pointer_keyed_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_string_keyed"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_string_keyed_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_string_keyed_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_string_native"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "setprop"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "share"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "share_ro"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "shift_float"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "shift_integer"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "shift_pmc"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "shift_string"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "splice"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "substr"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "substr_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "subtract"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "subtract_float"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "subtract_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "thaw"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "thawfinish"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "type"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "unshift_float"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "unshift_integer"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "unshift_pmc"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "unshift_string"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "visit"));
     parrot_hash_put(interp, vtable_group_items,
-        CONST_STRING(interp, "string"),
-        temp);
+        CONST_STRING(interp, "all"), temp);
 
     temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "defined"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "defined_keyed"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "defined_keyed_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "defined_keyed_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "delete_keyed"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "delete_keyed_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "delete_keyed_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_iter"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "hashvalue"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "invoke"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "can"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "does_pmc"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "does"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "isa_pmc"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "isa"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_attr_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_attr_keyed"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_attr_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_attr_keyed"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_class"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "add_parent"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "remove_parent"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "add_role"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "remove_role"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "add_attribute"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "remove_attribute"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "add_method"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "remove_method"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "add_vtable_override"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "remove_vtable_override"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "inspect"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "inspect_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "freeze"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "thaw"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "thawfinish"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "visit"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "share"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "share_ro"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "init_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "add_attribute"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "add_method"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "add_parent"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "add_role"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "add_vtable_override"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "can"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "clone"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "clone_pmc"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "defined"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "defined_keyed"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "defined_keyed_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "defined_keyed_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "delprop"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "destroy"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "does"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "does_pmc"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "find_method"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "freeze"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_attr_keyed"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_attr_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_class"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_iter"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_namespace"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "getprop"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "getprops"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "hashvalue"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "init"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "init_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "init_pmc"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "inspect"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "inspect_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "instantiate"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "invoke"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "isa"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "isa_pmc"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "mark"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "morph"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "name"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "remove_attribute"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "remove_method"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "remove_parent"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "remove_role"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "remove_vtable_override"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_attr_keyed"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "set_attr_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "setprop"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "share"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "share_ro"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "thaw"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "thawfinish"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "type"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "visit"));
     parrot_hash_put(interp, vtable_group_items,
-        CONST_STRING(interp, "main"),
-        temp);
+        CONST_STRING(interp, "main"), temp);
 
     temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "add"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "add_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "add_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_add"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_add_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_add_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "subtract"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "subtract_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "subtract_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_subtract"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_subtract_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_subtract_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "multiply"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "multiply_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "multiply_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_multiply"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_multiply_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_multiply_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "divide"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "divide_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "divide_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_divide"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_divide_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_divide_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "floor_divide"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "floor_divide_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "floor_divide_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_floor_divide"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_floor_divide_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_floor_divide_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "modulus"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "modulus_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "modulus_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_modulus"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_modulus_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_modulus_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "increment"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "decrement"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "absolute"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_absolute"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "neg"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_neg"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "push_float"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "push_integer"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "push_pmc"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "push_string"));
     parrot_hash_put(interp, vtable_group_items,
-        CONST_STRING(interp, "math"),
-        temp);
+        CONST_STRING(interp, "push"), temp);
 
     temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "elements"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "pop_integer"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "pop_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "pop_string"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "pop_pmc"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "push_integer"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "push_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "push_string"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "push_pmc"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "shift_integer"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "shift_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "shift_string"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "shift_pmc"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "unshift_integer"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "unshift_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "unshift_string"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "unshift_pmc"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "splice"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "cmp"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "cmp_num"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "cmp_pmc"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "cmp_string"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "i_logical_not"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "is_equal"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "is_equal_num"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "is_equal_string"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "is_same"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "logical_and"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "logical_not"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "logical_or"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "logical_xor"));
     parrot_hash_put(interp, vtable_group_items,
-        CONST_STRING(interp, "fetchsize"),
-        temp);
+        CONST_STRING(interp, "cmp"), temp);
 
     temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "is_equal"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "is_equal_num"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "is_equal_string"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "is_same"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "cmp"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "cmp_num"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "cmp_string"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "cmp_pmc"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "logical_or"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "logical_and"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "logical_xor"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "logical_not"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_logical_not"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "splice"));
     parrot_hash_put(interp, vtable_group_items,
-        CONST_STRING(interp, "cmp"),
-        temp);
+        CONST_STRING(interp, "splice"), temp);
 
     temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "morph"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_add"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_add_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_add_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_subtract"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_subtract_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_subtract_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_multiply"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_multiply_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_multiply_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_divide"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_divide_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_divide_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_floor_divide"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_floor_divide_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_floor_divide_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_modulus"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_modulus_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_modulus_float"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "increment"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "decrement"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_absolute"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_neg"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_logical_not"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_concatenate"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_concatenate_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_repeat"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "i_repeat_int"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_attr_str"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "set_attr_keyed"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "add_parent"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "remove_parent"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "add_role"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "remove_role"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "add_attribute"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "remove_attribute"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "add_method"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "remove_method"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "add_vtable_override"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "remove_vtable_override"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "thaw"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "thawfinish"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "unshift_float"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "unshift_integer"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "unshift_pmc"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "unshift_string"));
     parrot_hash_put(interp, vtable_group_items,
-        CONST_STRING(interp, "write"),
-        temp);
+        CONST_STRING(interp, "unshift"), temp);
 
     temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "init"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "init_pmc"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "instantiate"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "morph"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "mark"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "destroy"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "get_namespace"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "getprop"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "setprop"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "delprop"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "getprops"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "type"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "name"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "clone"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "clone_pmc"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "find_method"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "shift_float"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "shift_integer"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "shift_pmc"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "shift_string"));
     parrot_hash_put(interp, vtable_group_items,
-        CONST_STRING(interp, "core"),
-        temp);
-    /* END vtable mapping group items */
-
-    /* BEGIN vtable mapping item groups */
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "core"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "init"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "core"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "init_pmc"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "core"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "instantiate"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "core"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "morph"),
-        temp);
+        CONST_STRING(interp, "shift"), temp);
 
     temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "core"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "mark"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "core"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "destroy"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "core"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "get_namespace"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "core"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "getprop"),
-        temp);
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "delete_keyed"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "delete_keyed_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "delete_keyed_str"));
+    parrot_hash_put(interp, vtable_group_items,
+        CONST_STRING(interp, "delete"), temp);
 
     temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "core"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "setprop"),
-        temp);
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "elements"));
+    parrot_hash_put(interp, vtable_group_items,
+        CONST_STRING(interp, "fetchsize"), temp);
 
     temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "core"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "delprop"),
-        temp);
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "exists_keyed"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "exists_keyed_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "exists_keyed_str"));
+    parrot_hash_put(interp, vtable_group_items,
+        CONST_STRING(interp, "exists"), temp);
 
     temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "core"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "getprops"),
-        temp);
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_bool"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_integer"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_integer_keyed"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_integer_keyed_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_integer_keyed_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_number"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_number_keyed"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_number_keyed_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_number_keyed_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_pmc"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_pmc_keyed"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_pmc_keyed_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_pmc_keyed_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_pointer"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_pointer_keyed"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_pointer_keyed_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_pointer_keyed_str"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_repr"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_string"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_string_keyed"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_string_keyed_int"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "get_string_keyed_str"));
+    parrot_hash_put(interp, vtable_group_items,
+        CONST_STRING(interp, "fetch"), temp);
 
     temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "core"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "type"),
-        temp);
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "pop_float"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "pop_integer"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "pop_pmc"));
+    VTABLE_push_string(interp, temp, CONST_STRING(interp, "pop_string"));
+    parrot_hash_put(interp, vtable_group_items,
+        CONST_STRING(interp, "pop"), temp);
+    /* END vtable mapping group items */
 
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "core"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "name"),
-        temp);
+    /* BEGIN vtable mapping item groups */
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "absolute"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "add"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "add_attribute"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "add_float"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "add_int"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "add_method"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "add_parent"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "add_role"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "add_vtable_override"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "assign_pmc"),
+                    CONST_STRING(interp, "store"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "assign_string_native"),
+                    CONST_STRING(interp, "store"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "can"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "clone"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "clone_pmc"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "cmp"),
+                    CONST_STRING(interp, "cmp"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "cmp_num"),
+                    CONST_STRING(interp, "cmp"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "cmp_pmc"),
+                    CONST_STRING(interp, "cmp"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "cmp_string"),
+                    CONST_STRING(interp, "cmp"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "concatenate"),
+                    CONST_STRING(interp, "string"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "concatenate_str"),
+                    CONST_STRING(interp, "string"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "decrement"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "defined"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "defined_keyed"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "defined_keyed_int"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "defined_keyed_str"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "delete_keyed"),
+                    CONST_STRING(interp, "delete"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "delete_keyed_int"),
+                    CONST_STRING(interp, "delete"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "delete_keyed_str"),
+                    CONST_STRING(interp, "delete"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "delprop"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "destroy"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "divide"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "divide_float"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "divide_int"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "does"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "does_pmc"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "elements"),
+                    CONST_STRING(interp, "fetchsize"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "exists_keyed"),
+                    CONST_STRING(interp, "exists"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "exists_keyed_int"),
+                    CONST_STRING(interp, "exists"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "exists_keyed_str"),
+                    CONST_STRING(interp, "exists"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "find_method"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "floor_divide"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "floor_divide_float"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "floor_divide_int"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "freeze"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "get_attr_keyed"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "get_attr_str"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "get_bool"),
+                    CONST_STRING(interp, "fetch"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "get_class"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "get_integer"),
+                    CONST_STRING(interp, "fetch"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "get_integer_keyed"),
+                    CONST_STRING(interp, "fetch"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "get_integer_keyed_int"),
+                    CONST_STRING(interp, "fetch"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "get_integer_keyed_str"),
+                    CONST_STRING(interp, "fetch"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "get_iter"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "get_namespace"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "get_number"),
+                    CONST_STRING(interp, "fetch"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "get_number_keyed"),
+                    CONST_STRING(interp, "fetch"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "get_number_keyed_int"),
+                    CONST_STRING(interp, "fetch"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "get_number_keyed_str"),
+                    CONST_STRING(interp, "fetch"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "get_pmc"),
+                    CONST_STRING(interp, "fetch"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "get_pmc_keyed"),
+                    CONST_STRING(interp, "fetch"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "get_pmc_keyed_int"),
+                    CONST_STRING(interp, "fetch"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "get_pmc_keyed_str"),
+                    CONST_STRING(interp, "fetch"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "get_pointer"),
+                    CONST_STRING(interp, "fetch"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "get_pointer_keyed"),
+                    CONST_STRING(interp, "fetch"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "get_pointer_keyed_int"),
+                    CONST_STRING(interp, "fetch"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "get_pointer_keyed_str"),
+                    CONST_STRING(interp, "fetch"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "get_repr"),
+                    CONST_STRING(interp, "fetch"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "get_string"),
+                    CONST_STRING(interp, "fetch"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "get_string_keyed"),
+                    CONST_STRING(interp, "fetch"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "get_string_keyed_int"),
+                    CONST_STRING(interp, "fetch"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "get_string_keyed_str"),
+                    CONST_STRING(interp, "fetch"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "getprop"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "getprops"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "hashvalue"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "i_absolute"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "i_add"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "i_add_float"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "i_add_int"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "i_concatenate"),
+                    CONST_STRING(interp, "string"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "i_concatenate_str"),
+                    CONST_STRING(interp, "string"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "i_divide"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "i_divide_float"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "i_divide_int"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "i_floor_divide"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "i_floor_divide_float"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "i_floor_divide_int"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "i_logical_not"),
+                    CONST_STRING(interp, "cmp"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "i_modulus"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "i_modulus_float"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "i_modulus_int"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "i_multiply"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "i_multiply_float"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "i_multiply_int"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "i_neg"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "i_repeat"),
+                    CONST_STRING(interp, "string"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "i_repeat_int"),
+                    CONST_STRING(interp, "string"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "i_subtract"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "i_subtract_float"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "i_subtract_int"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "increment"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "init"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "init_int"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "init_pmc"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "inspect"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "inspect_str"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "instantiate"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "invoke"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "is_equal"),
+                    CONST_STRING(interp, "cmp"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "is_equal_num"),
+                    CONST_STRING(interp, "cmp"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "is_equal_string"),
+                    CONST_STRING(interp, "cmp"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "is_same"),
+                    CONST_STRING(interp, "cmp"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "isa"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "isa_pmc"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "logical_and"),
+                    CONST_STRING(interp, "cmp"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "logical_not"),
+                    CONST_STRING(interp, "cmp"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "logical_or"),
+                    CONST_STRING(interp, "cmp"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "logical_xor"),
+                    CONST_STRING(interp, "cmp"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "mark"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "modulus"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "modulus_float"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "modulus_int"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "morph"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "multiply"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "multiply_float"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "multiply_int"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "name"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "neg"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "pop_float"),
+                    CONST_STRING(interp, "pop"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "pop_integer"),
+                    CONST_STRING(interp, "pop"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "pop_pmc"),
+                    CONST_STRING(interp, "pop"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "pop_string"),
+                    CONST_STRING(interp, "pop"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "push_float"),
+                    CONST_STRING(interp, "push"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "push_integer"),
+                    CONST_STRING(interp, "push"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "push_pmc"),
+                    CONST_STRING(interp, "push"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "push_string"),
+                    CONST_STRING(interp, "push"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "remove_attribute"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "remove_method"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "remove_parent"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "remove_role"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "remove_vtable_override"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "repeat"),
+                    CONST_STRING(interp, "string"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "repeat_int"),
+                    CONST_STRING(interp, "string"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "set_attr_keyed"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "set_attr_str"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "set_bool"),
+                    CONST_STRING(interp, "store"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "set_integer_keyed"),
+                    CONST_STRING(interp, "store"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "set_integer_keyed_int"),
+                    CONST_STRING(interp, "store"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "set_integer_keyed_str"),
+                    CONST_STRING(interp, "store"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "set_integer_native"),
+                    CONST_STRING(interp, "store"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "set_number_keyed"),
+                    CONST_STRING(interp, "store"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "set_number_keyed_int"),
+                    CONST_STRING(interp, "store"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "set_number_keyed_str"),
+                    CONST_STRING(interp, "store"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "set_number_native"),
+                    CONST_STRING(interp, "store"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "set_pmc"),
+                    CONST_STRING(interp, "store"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "set_pmc_keyed"),
+                    CONST_STRING(interp, "store"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "set_pmc_keyed_int"),
+                    CONST_STRING(interp, "store"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "set_pmc_keyed_str"),
+                    CONST_STRING(interp, "store"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "set_pointer"),
+                    CONST_STRING(interp, "store"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "set_pointer_keyed"),
+                    CONST_STRING(interp, "store"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "set_pointer_keyed_int"),
+                    CONST_STRING(interp, "store"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "set_pointer_keyed_str"),
+                    CONST_STRING(interp, "store"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "set_string_keyed"),
+                    CONST_STRING(interp, "store"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "set_string_keyed_int"),
+                    CONST_STRING(interp, "store"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "set_string_keyed_str"),
+                    CONST_STRING(interp, "store"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "set_string_native"),
+                    CONST_STRING(interp, "store"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "setprop"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "share"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "share_ro"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "shift_float"),
+                    CONST_STRING(interp, "shift"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "shift_integer"),
+                    CONST_STRING(interp, "shift"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "shift_pmc"),
+                    CONST_STRING(interp, "shift"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "shift_string"),
+                    CONST_STRING(interp, "shift"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "splice"),
+                    CONST_STRING(interp, "splice"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "substr"),
+                    CONST_STRING(interp, "string"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "substr_str"),
+                    CONST_STRING(interp, "string"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "subtract"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "subtract_float"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "subtract_int"),
+                    CONST_STRING(interp, "math"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "thaw"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "thawfinish"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "type"),
+                    CONST_STRING(interp, "main"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "unshift_float"),
+                    CONST_STRING(interp, "unshift"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "unshift_integer"),
+                    CONST_STRING(interp, "unshift"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "unshift_pmc"),
+                    CONST_STRING(interp, "unshift"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "unshift_string"),
+                    CONST_STRING(interp, "unshift"));
+    parrot_hash_put(interp, vtable_item_groups, CONST_STRING(interp, "visit"),
+                    CONST_STRING(interp, "main"));
+    /* END vtable mapping item groups */
+}
 
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "core"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "clone"),
-        temp);
+void destroy_vtable_common_hashes(PARROT_INTERP) {
+    if (vtable_registry == NULL) { return; }
 
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "core"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "clone_pmc"),
-        temp);
+    if (parrot_hash_size(interp, vtable_registry) == 0) {
+        parrot_hash_destroy(interp, vtable_registry);
+        parrot_hash_destroy(interp, vtable_name_stubs);
+        parrot_hash_destroy(interp, vtable_group_items);
+        parrot_hash_destroy(interp, vtable_item_groups);
 
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "core"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "find_method"),
-        temp);
+        vtable_first_run = 1;
+        vtable_registry    = NULL;
+        vtable_name_stubs  = NULL;
+        vtable_group_items = NULL;
+        vtable_item_groups = NULL;
+    }
+}
 
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "get_integer"),
-        temp);
+void setup_vtable_individual_hashes(PARROT_INTERP, Hash *orig_hash, Hash *instr_hash,
+                                    _vtable *vt_orig, _vtable *vt_instr) {
+    /* BEGIN vtable mapping name offset */
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "absolute"), &(vt_instr->absolute));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "add"), &(vt_instr->add));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "add_attribute"), &(vt_instr->add_attribute));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "add_float"), &(vt_instr->add_float));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "add_int"), &(vt_instr->add_int));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "add_method"), &(vt_instr->add_method));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "add_parent"), &(vt_instr->add_parent));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "add_role"), &(vt_instr->add_role));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "add_vtable_override"), &(vt_instr->add_vtable_override));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "assign_pmc"), &(vt_instr->assign_pmc));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "assign_string_native"), &(vt_instr->assign_string_native));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "can"), &(vt_instr->can));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "clone"), &(vt_instr->clone));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "clone_pmc"), &(vt_instr->clone_pmc));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "cmp"), &(vt_instr->cmp));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "cmp_num"), &(vt_instr->cmp_num));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "cmp_pmc"), &(vt_instr->cmp_pmc));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "cmp_string"), &(vt_instr->cmp_string));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "concatenate"), &(vt_instr->concatenate));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "concatenate_str"), &(vt_instr->concatenate_str));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "decrement"), &(vt_instr->decrement));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "defined"), &(vt_instr->defined));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "defined_keyed"), &(vt_instr->defined_keyed));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "defined_keyed_int"), &(vt_instr->defined_keyed_int));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "defined_keyed_str"), &(vt_instr->defined_keyed_str));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "delete_keyed"), &(vt_instr->delete_keyed));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "delete_keyed_int"), &(vt_instr->delete_keyed_int));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "delete_keyed_str"), &(vt_instr->delete_keyed_str));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "delprop"), &(vt_instr->delprop));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "destroy"), &(vt_instr->destroy));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "divide"), &(vt_instr->divide));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "divide_float"), &(vt_instr->divide_float));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "divide_int"), &(vt_instr->divide_int));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "does"), &(vt_instr->does));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "does_pmc"), &(vt_instr->does_pmc));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "elements"), &(vt_instr->elements));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "exists_keyed"), &(vt_instr->exists_keyed));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "exists_keyed_int"), &(vt_instr->exists_keyed_int));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "exists_keyed_str"), &(vt_instr->exists_keyed_str));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "find_method"), &(vt_instr->find_method));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "floor_divide"), &(vt_instr->floor_divide));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "floor_divide_float"), &(vt_instr->floor_divide_float));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "floor_divide_int"), &(vt_instr->floor_divide_int));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "freeze"), &(vt_instr->freeze));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "get_attr_keyed"), &(vt_instr->get_attr_keyed));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "get_attr_str"), &(vt_instr->get_attr_str));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "get_bool"), &(vt_instr->get_bool));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "get_class"), &(vt_instr->get_class));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "get_integer"), &(vt_instr->get_integer));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "get_integer_keyed"), &(vt_instr->get_integer_keyed));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "get_integer_keyed_int"), &(vt_instr->get_integer_keyed_int));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "get_integer_keyed_str"), &(vt_instr->get_integer_keyed_str));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "get_iter"), &(vt_instr->get_iter));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "get_namespace"), &(vt_instr->get_namespace));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "get_number"), &(vt_instr->get_number));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "get_number_keyed"), &(vt_instr->get_number_keyed));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "get_number_keyed_int"), &(vt_instr->get_number_keyed_int));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "get_number_keyed_str"), &(vt_instr->get_number_keyed_str));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "get_pmc"), &(vt_instr->get_pmc));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "get_pmc_keyed"), &(vt_instr->get_pmc_keyed));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "get_pmc_keyed_int"), &(vt_instr->get_pmc_keyed_int));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "get_pmc_keyed_str"), &(vt_instr->get_pmc_keyed_str));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "get_pointer"), &(vt_instr->get_pointer));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "get_pointer_keyed"), &(vt_instr->get_pointer_keyed));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "get_pointer_keyed_int"), &(vt_instr->get_pointer_keyed_int));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "get_pointer_keyed_str"), &(vt_instr->get_pointer_keyed_str));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "get_repr"), &(vt_instr->get_repr));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "get_string"), &(vt_instr->get_string));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "get_string_keyed"), &(vt_instr->get_string_keyed));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "get_string_keyed_int"), &(vt_instr->get_string_keyed_int));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "get_string_keyed_str"), &(vt_instr->get_string_keyed_str));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "getprop"), &(vt_instr->getprop));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "getprops"), &(vt_instr->getprops));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "hashvalue"), &(vt_instr->hashvalue));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "i_absolute"), &(vt_instr->i_absolute));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "i_add"), &(vt_instr->i_add));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "i_add_float"), &(vt_instr->i_add_float));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "i_add_int"), &(vt_instr->i_add_int));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "i_concatenate"), &(vt_instr->i_concatenate));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "i_concatenate_str"), &(vt_instr->i_concatenate_str));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "i_divide"), &(vt_instr->i_divide));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "i_divide_float"), &(vt_instr->i_divide_float));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "i_divide_int"), &(vt_instr->i_divide_int));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "i_floor_divide"), &(vt_instr->i_floor_divide));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "i_floor_divide_float"), &(vt_instr->i_floor_divide_float));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "i_floor_divide_int"), &(vt_instr->i_floor_divide_int));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "i_logical_not"), &(vt_instr->i_logical_not));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "i_modulus"), &(vt_instr->i_modulus));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "i_modulus_float"), &(vt_instr->i_modulus_float));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "i_modulus_int"), &(vt_instr->i_modulus_int));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "i_multiply"), &(vt_instr->i_multiply));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "i_multiply_float"), &(vt_instr->i_multiply_float));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "i_multiply_int"), &(vt_instr->i_multiply_int));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "i_neg"), &(vt_instr->i_neg));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "i_repeat"), &(vt_instr->i_repeat));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "i_repeat_int"), &(vt_instr->i_repeat_int));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "i_subtract"), &(vt_instr->i_subtract));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "i_subtract_float"), &(vt_instr->i_subtract_float));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "i_subtract_int"), &(vt_instr->i_subtract_int));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "increment"), &(vt_instr->increment));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "init"), &(vt_instr->init));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "init_int"), &(vt_instr->init_int));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "init_pmc"), &(vt_instr->init_pmc));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "inspect"), &(vt_instr->inspect));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "inspect_str"), &(vt_instr->inspect_str));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "instantiate"), &(vt_instr->instantiate));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "invoke"), &(vt_instr->invoke));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "is_equal"), &(vt_instr->is_equal));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "is_equal_num"), &(vt_instr->is_equal_num));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "is_equal_string"), &(vt_instr->is_equal_string));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "is_same"), &(vt_instr->is_same));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "isa"), &(vt_instr->isa));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "isa_pmc"), &(vt_instr->isa_pmc));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "logical_and"), &(vt_instr->logical_and));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "logical_not"), &(vt_instr->logical_not));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "logical_or"), &(vt_instr->logical_or));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "logical_xor"), &(vt_instr->logical_xor));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "mark"), &(vt_instr->mark));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "modulus"), &(vt_instr->modulus));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "modulus_float"), &(vt_instr->modulus_float));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "modulus_int"), &(vt_instr->modulus_int));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "morph"), &(vt_instr->morph));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "multiply"), &(vt_instr->multiply));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "multiply_float"), &(vt_instr->multiply_float));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "multiply_int"), &(vt_instr->multiply_int));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "name"), &(vt_instr->name));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "neg"), &(vt_instr->neg));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "pop_float"), &(vt_instr->pop_float));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "pop_integer"), &(vt_instr->pop_integer));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "pop_pmc"), &(vt_instr->pop_pmc));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "pop_string"), &(vt_instr->pop_string));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "push_float"), &(vt_instr->push_float));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "push_integer"), &(vt_instr->push_integer));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "push_pmc"), &(vt_instr->push_pmc));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "push_string"), &(vt_instr->push_string));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "remove_attribute"), &(vt_instr->remove_attribute));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "remove_method"), &(vt_instr->remove_method));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "remove_parent"), &(vt_instr->remove_parent));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "remove_role"), &(vt_instr->remove_role));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "remove_vtable_override"), &(vt_instr->remove_vtable_override));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "repeat"), &(vt_instr->repeat));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "repeat_int"), &(vt_instr->repeat_int));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "set_attr_keyed"), &(vt_instr->set_attr_keyed));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "set_attr_str"), &(vt_instr->set_attr_str));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "set_bool"), &(vt_instr->set_bool));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "set_integer_keyed"), &(vt_instr->set_integer_keyed));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "set_integer_keyed_int"), &(vt_instr->set_integer_keyed_int));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "set_integer_keyed_str"), &(vt_instr->set_integer_keyed_str));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "set_integer_native"), &(vt_instr->set_integer_native));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "set_number_keyed"), &(vt_instr->set_number_keyed));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "set_number_keyed_int"), &(vt_instr->set_number_keyed_int));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "set_number_keyed_str"), &(vt_instr->set_number_keyed_str));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "set_number_native"), &(vt_instr->set_number_native));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "set_pmc"), &(vt_instr->set_pmc));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "set_pmc_keyed"), &(vt_instr->set_pmc_keyed));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "set_pmc_keyed_int"), &(vt_instr->set_pmc_keyed_int));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "set_pmc_keyed_str"), &(vt_instr->set_pmc_keyed_str));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "set_pointer"), &(vt_instr->set_pointer));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "set_pointer_keyed"), &(vt_instr->set_pointer_keyed));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "set_pointer_keyed_int"), &(vt_instr->set_pointer_keyed_int));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "set_pointer_keyed_str"), &(vt_instr->set_pointer_keyed_str));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "set_string_keyed"), &(vt_instr->set_string_keyed));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "set_string_keyed_int"), &(vt_instr->set_string_keyed_int));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "set_string_keyed_str"), &(vt_instr->set_string_keyed_str));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "set_string_native"), &(vt_instr->set_string_native));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "setprop"), &(vt_instr->setprop));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "share"), &(vt_instr->share));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "share_ro"), &(vt_instr->share_ro));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "shift_float"), &(vt_instr->shift_float));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "shift_integer"), &(vt_instr->shift_integer));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "shift_pmc"), &(vt_instr->shift_pmc));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "shift_string"), &(vt_instr->shift_string));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "splice"), &(vt_instr->splice));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "substr"), &(vt_instr->substr));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "substr_str"), &(vt_instr->substr_str));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "subtract"), &(vt_instr->subtract));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "subtract_float"), &(vt_instr->subtract_float));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "subtract_int"), &(vt_instr->subtract_int));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "thaw"), &(vt_instr->thaw));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "thawfinish"), &(vt_instr->thawfinish));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "type"), &(vt_instr->type));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "unshift_float"), &(vt_instr->unshift_float));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "unshift_integer"), &(vt_instr->unshift_integer));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "unshift_pmc"), &(vt_instr->unshift_pmc));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "unshift_string"), &(vt_instr->unshift_string));
+    parrot_hash_put(interp, instr_hash,
+        CONST_STRING(interp, "visit"), &(vt_instr->visit));
+    /* END vtable mapping name offset */
 
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "get_integer_keyed"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "get_integer_keyed_int"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "get_integer_keyed_str"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "get_number"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "get_number_keyed"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "get_number_keyed_int"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "get_number_keyed_str"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "get_string"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "get_repr"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "get_string_keyed"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "get_string_keyed_int"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "get_string_keyed_str"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "get_bool"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "get_pmc"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "get_pmc_keyed"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "get_pmc_keyed_int"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "get_pmc_keyed_str"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "get_pointer"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "get_pointer_keyed"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "get_pointer_keyed_int"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "get_pointer_keyed_str"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "set_integer_native"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "set_integer_keyed"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "set_integer_keyed_int"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "set_integer_keyed_str"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "set_number_native"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "set_number_keyed"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "set_number_keyed_int"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "set_number_keyed_str"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "set_string_native"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "assign_string_native"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "set_string_keyed"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "set_string_keyed_int"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "set_string_keyed_str"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "set_bool"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "set_pmc"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "assign_pmc"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "set_pmc_keyed"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "set_pmc_keyed_int"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "set_pmc_keyed_str"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "set_pointer"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "set_pointer_keyed"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "set_pointer_keyed_int"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetch"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "set_pointer_keyed_str"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetchsize"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "elements"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetchsize"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "pop_integer"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetchsize"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "pop_float"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetchsize"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "pop_string"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetchsize"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "pop_pmc"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetchsize"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "push_integer"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetchsize"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "push_float"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetchsize"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "push_string"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetchsize"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "push_pmc"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetchsize"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "shift_integer"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetchsize"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "shift_float"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetchsize"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "shift_string"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetchsize"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "shift_pmc"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetchsize"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "unshift_integer"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetchsize"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "unshift_float"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetchsize"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "unshift_string"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetchsize"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "unshift_pmc"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "fetchsize"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "splice"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "add"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "add_int"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "add_float"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "i_add"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "i_add_int"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "i_add_float"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "subtract"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "subtract_int"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "subtract_float"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "i_subtract"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "i_subtract_int"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "i_subtract_float"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "multiply"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "multiply_int"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "multiply_float"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "i_multiply"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "i_multiply_int"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "i_multiply_float"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "divide"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "divide_int"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "divide_float"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "i_divide"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "i_divide_int"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "i_divide_float"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "floor_divide"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "floor_divide_int"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "floor_divide_float"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "i_floor_divide"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "i_floor_divide_int"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "i_floor_divide_float"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "modulus"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "modulus_int"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "modulus_float"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "i_modulus"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "i_modulus_int"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "i_modulus_float"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "increment"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "decrement"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "absolute"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "i_absolute"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "neg"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "math"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "i_neg"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "cmp"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "is_equal"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "cmp"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "is_equal_num"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "cmp"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "is_equal_string"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "cmp"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "is_same"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "cmp"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "cmp"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "cmp"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "cmp_num"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "cmp"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "cmp_string"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "cmp"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "cmp_pmc"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "cmp"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "logical_or"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "cmp"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "logical_and"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "cmp"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "logical_xor"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "cmp"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "logical_not"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "cmp"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "i_logical_not"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "string"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "concatenate"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "string"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "concatenate_str"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "string"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "i_concatenate"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "string"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "i_concatenate_str"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "string"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "repeat"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "string"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "repeat_int"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "string"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "i_repeat"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "string"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "i_repeat_int"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "string"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "substr"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "string"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "substr_str"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "exists"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "exists_keyed"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "exists"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "exists_keyed_int"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "exists"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "exists_keyed_str"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "defined"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "defined_keyed"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "defined_keyed_int"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "defined_keyed_str"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "delete_keyed"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "delete_keyed_int"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "delete_keyed_str"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "get_iter"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "hashvalue"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "invoke"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "can"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "does_pmc"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "does"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "isa_pmc"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "isa"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "get_attr_str"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "get_attr_keyed"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "set_attr_str"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "set_attr_keyed"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "get_class"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "add_parent"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "remove_parent"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "add_role"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "remove_role"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "add_attribute"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "remove_attribute"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "add_method"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "remove_method"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "add_vtable_override"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "remove_vtable_override"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "inspect"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "inspect_str"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "freeze"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "thaw"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "write"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "thawfinish"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "visit"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "share"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "share_ro"),
-        temp);
-
-    temp = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-    VTABLE_push_string(interp, temp,
-                       CONST_STRING(interp, "main"));
-    parrot_hash_put(interp, vtable_item_groups,
-        CONST_STRING(interp, "init_int"),
-        temp);
-    /* END vtable mapping item groups */
-}
-
-void destroy_vtable_common_hashes(PARROT_INTERP) {
-    if (vtable_registry == NULL) { return; }
-
-    if (parrot_hash_size(interp, vtable_registry) == 0) {
-        parrot_hash_destroy(interp, vtable_registry);
-        parrot_hash_destroy(interp, vtable_name_stubs);
-        parrot_hash_destroy(interp, vtable_group_items);
-        parrot_hash_destroy(interp, vtable_item_groups);
-
-        vtable_first_run = 1;
-        vtable_registry    = NULL;
-        vtable_name_stubs  = NULL;
-        vtable_group_items = NULL;
-        vtable_item_groups = NULL;
-    }
-}
-
-void setup_vtable_individual_hashes(PARROT_INTERP, Hash *orig_hash, Hash *instr_hash,
-                                    _vtable *vt_orig, _vtable *vt_instr) {
-    /* BEGIN vtable mapping name offset */
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "init"),
-        &(vt_instr->init));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "init_pmc"),
-        &(vt_instr->init_pmc));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "instantiate"),
-        &(vt_instr->instantiate));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "morph"),
-        &(vt_instr->morph));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "mark"),
-        &(vt_instr->mark));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "destroy"),
-        &(vt_instr->destroy));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "get_namespace"),
-        &(vt_instr->get_namespace));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "getprop"),
-        &(vt_instr->getprop));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "setprop"),
-        &(vt_instr->setprop));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "delprop"),
-        &(vt_instr->delprop));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "getprops"),
-        &(vt_instr->getprops));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "type"),
-        &(vt_instr->type));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "name"),
-        &(vt_instr->name));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "clone"),
-        &(vt_instr->clone));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "clone_pmc"),
-        &(vt_instr->clone_pmc));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "find_method"),
-        &(vt_instr->find_method));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "get_integer"),
-        &(vt_instr->get_integer));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "get_integer_keyed"),
-        &(vt_instr->get_integer_keyed));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "get_integer_keyed_int"),
-        &(vt_instr->get_integer_keyed_int));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "get_integer_keyed_str"),
-        &(vt_instr->get_integer_keyed_str));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "get_number"),
-        &(vt_instr->get_number));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "get_number_keyed"),
-        &(vt_instr->get_number_keyed));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "get_number_keyed_int"),
-        &(vt_instr->get_number_keyed_int));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "get_number_keyed_str"),
-        &(vt_instr->get_number_keyed_str));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "get_string"),
-        &(vt_instr->get_string));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "get_repr"),
-        &(vt_instr->get_repr));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "get_string_keyed"),
-        &(vt_instr->get_string_keyed));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "get_string_keyed_int"),
-        &(vt_instr->get_string_keyed_int));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "get_string_keyed_str"),
-        &(vt_instr->get_string_keyed_str));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "get_bool"),
-        &(vt_instr->get_bool));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "get_pmc"),
-        &(vt_instr->get_pmc));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "get_pmc_keyed"),
-        &(vt_instr->get_pmc_keyed));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "get_pmc_keyed_int"),
-        &(vt_instr->get_pmc_keyed_int));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "get_pmc_keyed_str"),
-        &(vt_instr->get_pmc_keyed_str));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "get_pointer"),
-        &(vt_instr->get_pointer));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "get_pointer_keyed"),
-        &(vt_instr->get_pointer_keyed));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "get_pointer_keyed_int"),
-        &(vt_instr->get_pointer_keyed_int));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "get_pointer_keyed_str"),
-        &(vt_instr->get_pointer_keyed_str));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "set_integer_native"),
-        &(vt_instr->set_integer_native));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "set_integer_keyed"),
-        &(vt_instr->set_integer_keyed));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "set_integer_keyed_int"),
-        &(vt_instr->set_integer_keyed_int));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "set_integer_keyed_str"),
-        &(vt_instr->set_integer_keyed_str));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "set_number_native"),
-        &(vt_instr->set_number_native));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "set_number_keyed"),
-        &(vt_instr->set_number_keyed));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "set_number_keyed_int"),
-        &(vt_instr->set_number_keyed_int));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "set_number_keyed_str"),
-        &(vt_instr->set_number_keyed_str));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "set_string_native"),
-        &(vt_instr->set_string_native));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "assign_string_native"),
-        &(vt_instr->assign_string_native));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "set_string_keyed"),
-        &(vt_instr->set_string_keyed));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "set_string_keyed_int"),
-        &(vt_instr->set_string_keyed_int));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "set_string_keyed_str"),
-        &(vt_instr->set_string_keyed_str));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "set_bool"),
-        &(vt_instr->set_bool));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "set_pmc"),
-        &(vt_instr->set_pmc));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "assign_pmc"),
-        &(vt_instr->assign_pmc));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "set_pmc_keyed"),
-        &(vt_instr->set_pmc_keyed));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "set_pmc_keyed_int"),
-        &(vt_instr->set_pmc_keyed_int));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "set_pmc_keyed_str"),
-        &(vt_instr->set_pmc_keyed_str));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "set_pointer"),
-        &(vt_instr->set_pointer));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "set_pointer_keyed"),
-        &(vt_instr->set_pointer_keyed));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "set_pointer_keyed_int"),
-        &(vt_instr->set_pointer_keyed_int));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "set_pointer_keyed_str"),
-        &(vt_instr->set_pointer_keyed_str));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "elements"),
-        &(vt_instr->elements));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "pop_integer"),
-        &(vt_instr->pop_integer));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "pop_float"),
-        &(vt_instr->pop_float));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "pop_string"),
-        &(vt_instr->pop_string));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "pop_pmc"),
-        &(vt_instr->pop_pmc));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "push_integer"),
-        &(vt_instr->push_integer));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "push_float"),
-        &(vt_instr->push_float));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "push_string"),
-        &(vt_instr->push_string));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "push_pmc"),
-        &(vt_instr->push_pmc));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "shift_integer"),
-        &(vt_instr->shift_integer));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "shift_float"),
-        &(vt_instr->shift_float));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "shift_string"),
-        &(vt_instr->shift_string));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "shift_pmc"),
-        &(vt_instr->shift_pmc));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "unshift_integer"),
-        &(vt_instr->unshift_integer));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "unshift_float"),
-        &(vt_instr->unshift_float));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "unshift_string"),
-        &(vt_instr->unshift_string));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "unshift_pmc"),
-        &(vt_instr->unshift_pmc));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "splice"),
-        &(vt_instr->splice));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "add"),
-        &(vt_instr->add));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "add_int"),
-        &(vt_instr->add_int));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "add_float"),
-        &(vt_instr->add_float));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "i_add"),
-        &(vt_instr->i_add));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "i_add_int"),
-        &(vt_instr->i_add_int));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "i_add_float"),
-        &(vt_instr->i_add_float));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "subtract"),
-        &(vt_instr->subtract));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "subtract_int"),
-        &(vt_instr->subtract_int));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "subtract_float"),
-        &(vt_instr->subtract_float));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "i_subtract"),
-        &(vt_instr->i_subtract));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "i_subtract_int"),
-        &(vt_instr->i_subtract_int));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "i_subtract_float"),
-        &(vt_instr->i_subtract_float));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "multiply"),
-        &(vt_instr->multiply));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "multiply_int"),
-        &(vt_instr->multiply_int));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "multiply_float"),
-        &(vt_instr->multiply_float));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "i_multiply"),
-        &(vt_instr->i_multiply));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "i_multiply_int"),
-        &(vt_instr->i_multiply_int));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "i_multiply_float"),
-        &(vt_instr->i_multiply_float));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "divide"),
-        &(vt_instr->divide));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "divide_int"),
-        &(vt_instr->divide_int));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "divide_float"),
-        &(vt_instr->divide_float));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "i_divide"),
-        &(vt_instr->i_divide));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "i_divide_int"),
-        &(vt_instr->i_divide_int));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "i_divide_float"),
-        &(vt_instr->i_divide_float));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "floor_divide"),
-        &(vt_instr->floor_divide));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "floor_divide_int"),
-        &(vt_instr->floor_divide_int));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "floor_divide_float"),
-        &(vt_instr->floor_divide_float));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "i_floor_divide"),
-        &(vt_instr->i_floor_divide));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "i_floor_divide_int"),
-        &(vt_instr->i_floor_divide_int));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "i_floor_divide_float"),
-        &(vt_instr->i_floor_divide_float));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "modulus"),
-        &(vt_instr->modulus));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "modulus_int"),
-        &(vt_instr->modulus_int));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "modulus_float"),
-        &(vt_instr->modulus_float));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "i_modulus"),
-        &(vt_instr->i_modulus));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "i_modulus_int"),
-        &(vt_instr->i_modulus_int));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "i_modulus_float"),
-        &(vt_instr->i_modulus_float));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "increment"),
-        &(vt_instr->increment));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "decrement"),
-        &(vt_instr->decrement));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "absolute"),
-        &(vt_instr->absolute));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "i_absolute"),
-        &(vt_instr->i_absolute));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "neg"),
-        &(vt_instr->neg));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "i_neg"),
-        &(vt_instr->i_neg));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "is_equal"),
-        &(vt_instr->is_equal));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "is_equal_num"),
-        &(vt_instr->is_equal_num));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "is_equal_string"),
-        &(vt_instr->is_equal_string));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "is_same"),
-        &(vt_instr->is_same));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "cmp"),
-        &(vt_instr->cmp));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "cmp_num"),
-        &(vt_instr->cmp_num));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "cmp_string"),
-        &(vt_instr->cmp_string));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "cmp_pmc"),
-        &(vt_instr->cmp_pmc));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "logical_or"),
-        &(vt_instr->logical_or));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "logical_and"),
-        &(vt_instr->logical_and));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "logical_xor"),
-        &(vt_instr->logical_xor));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "logical_not"),
-        &(vt_instr->logical_not));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "i_logical_not"),
-        &(vt_instr->i_logical_not));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "concatenate"),
-        &(vt_instr->concatenate));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "concatenate_str"),
-        &(vt_instr->concatenate_str));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "i_concatenate"),
-        &(vt_instr->i_concatenate));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "i_concatenate_str"),
-        &(vt_instr->i_concatenate_str));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "repeat"),
-        &(vt_instr->repeat));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "repeat_int"),
-        &(vt_instr->repeat_int));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "i_repeat"),
-        &(vt_instr->i_repeat));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "i_repeat_int"),
-        &(vt_instr->i_repeat_int));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "substr"),
-        &(vt_instr->substr));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "substr_str"),
-        &(vt_instr->substr_str));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "exists_keyed"),
-        &(vt_instr->exists_keyed));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "exists_keyed_int"),
-        &(vt_instr->exists_keyed_int));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "exists_keyed_str"),
-        &(vt_instr->exists_keyed_str));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "defined"),
-        &(vt_instr->defined));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "defined_keyed"),
-        &(vt_instr->defined_keyed));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "defined_keyed_int"),
-        &(vt_instr->defined_keyed_int));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "defined_keyed_str"),
-        &(vt_instr->defined_keyed_str));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "delete_keyed"),
-        &(vt_instr->delete_keyed));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "delete_keyed_int"),
-        &(vt_instr->delete_keyed_int));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "delete_keyed_str"),
-        &(vt_instr->delete_keyed_str));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "get_iter"),
-        &(vt_instr->get_iter));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "hashvalue"),
-        &(vt_instr->hashvalue));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "invoke"),
-        &(vt_instr->invoke));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "can"),
-        &(vt_instr->can));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "does_pmc"),
-        &(vt_instr->does_pmc));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "does"),
-        &(vt_instr->does));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "isa_pmc"),
-        &(vt_instr->isa_pmc));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "isa"),
-        &(vt_instr->isa));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "get_attr_str"),
-        &(vt_instr->get_attr_str));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "get_attr_keyed"),
-        &(vt_instr->get_attr_keyed));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "set_attr_str"),
-        &(vt_instr->set_attr_str));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "set_attr_keyed"),
-        &(vt_instr->set_attr_keyed));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "get_class"),
-        &(vt_instr->get_class));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "add_parent"),
-        &(vt_instr->add_parent));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "remove_parent"),
-        &(vt_instr->remove_parent));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "add_role"),
-        &(vt_instr->add_role));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "remove_role"),
-        &(vt_instr->remove_role));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "add_attribute"),
-        &(vt_instr->add_attribute));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "remove_attribute"),
-        &(vt_instr->remove_attribute));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "add_method"),
-        &(vt_instr->add_method));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "remove_method"),
-        &(vt_instr->remove_method));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "add_vtable_override"),
-        &(vt_instr->add_vtable_override));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "remove_vtable_override"),
-        &(vt_instr->remove_vtable_override));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "inspect"),
-        &(vt_instr->inspect));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "inspect_str"),
-        &(vt_instr->inspect_str));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "freeze"),
-        &(vt_instr->freeze));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "thaw"),
-        &(vt_instr->thaw));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "thawfinish"),
-        &(vt_instr->thawfinish));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "visit"),
-        &(vt_instr->visit));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "share"),
-        &(vt_instr->share));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "share_ro"),
-        &(vt_instr->share_ro));
-    parrot_hash_put(interp, instr_hash,
-        CONST_STRING(interp, "init_int"),
-        &(vt_instr->init_int));
-    /* END vtable mapping name offset */
-
-    /* BEGIN vtable mapping name original */
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "init"),
-        vt_orig->init);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "init_pmc"),
-        vt_orig->init_pmc);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "instantiate"),
-        vt_orig->instantiate);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "morph"),
-        vt_orig->morph);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "mark"),
-        vt_orig->mark);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "destroy"),
-        vt_orig->destroy);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "get_namespace"),
-        vt_orig->get_namespace);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "getprop"),
-        vt_orig->getprop);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "setprop"),
-        vt_orig->setprop);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "delprop"),
-        vt_orig->delprop);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "getprops"),
-        vt_orig->getprops);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "type"),
-        vt_orig->type);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "name"),
-        vt_orig->name);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "clone"),
-        vt_orig->clone);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "clone_pmc"),
-        vt_orig->clone_pmc);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "find_method"),
-        vt_orig->find_method);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "get_integer"),
-        vt_orig->get_integer);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "get_integer_keyed"),
-        vt_orig->get_integer_keyed);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "get_integer_keyed_int"),
-        vt_orig->get_integer_keyed_int);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "get_integer_keyed_str"),
-        vt_orig->get_integer_keyed_str);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "get_number"),
-        vt_orig->get_number);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "get_number_keyed"),
-        vt_orig->get_number_keyed);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "get_number_keyed_int"),
-        vt_orig->get_number_keyed_int);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "get_number_keyed_str"),
-        vt_orig->get_number_keyed_str);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "get_string"),
-        vt_orig->get_string);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "get_repr"),
-        vt_orig->get_repr);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "get_string_keyed"),
-        vt_orig->get_string_keyed);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "get_string_keyed_int"),
-        vt_orig->get_string_keyed_int);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "get_string_keyed_str"),
-        vt_orig->get_string_keyed_str);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "get_bool"),
-        vt_orig->get_bool);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "get_pmc"),
-        vt_orig->get_pmc);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "get_pmc_keyed"),
-        vt_orig->get_pmc_keyed);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "get_pmc_keyed_int"),
-        vt_orig->get_pmc_keyed_int);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "get_pmc_keyed_str"),
-        vt_orig->get_pmc_keyed_str);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "get_pointer"),
-        vt_orig->get_pointer);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "get_pointer_keyed"),
-        vt_orig->get_pointer_keyed);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "get_pointer_keyed_int"),
-        vt_orig->get_pointer_keyed_int);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "get_pointer_keyed_str"),
-        vt_orig->get_pointer_keyed_str);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "set_integer_native"),
-        vt_orig->set_integer_native);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "set_integer_keyed"),
-        vt_orig->set_integer_keyed);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "set_integer_keyed_int"),
-        vt_orig->set_integer_keyed_int);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "set_integer_keyed_str"),
-        vt_orig->set_integer_keyed_str);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "set_number_native"),
-        vt_orig->set_number_native);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "set_number_keyed"),
-        vt_orig->set_number_keyed);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "set_number_keyed_int"),
-        vt_orig->set_number_keyed_int);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "set_number_keyed_str"),
-        vt_orig->set_number_keyed_str);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "set_string_native"),
-        vt_orig->set_string_native);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "assign_string_native"),
-        vt_orig->assign_string_native);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "set_string_keyed"),
-        vt_orig->set_string_keyed);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "set_string_keyed_int"),
-        vt_orig->set_string_keyed_int);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "set_string_keyed_str"),
-        vt_orig->set_string_keyed_str);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "set_bool"),
-        vt_orig->set_bool);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "set_pmc"),
-        vt_orig->set_pmc);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "assign_pmc"),
-        vt_orig->assign_pmc);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "set_pmc_keyed"),
-        vt_orig->set_pmc_keyed);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "set_pmc_keyed_int"),
-        vt_orig->set_pmc_keyed_int);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "set_pmc_keyed_str"),
-        vt_orig->set_pmc_keyed_str);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "set_pointer"),
-        vt_orig->set_pointer);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "set_pointer_keyed"),
-        vt_orig->set_pointer_keyed);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "set_pointer_keyed_int"),
-        vt_orig->set_pointer_keyed_int);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "set_pointer_keyed_str"),
-        vt_orig->set_pointer_keyed_str);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "elements"),
-        vt_orig->elements);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "pop_integer"),
-        vt_orig->pop_integer);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "pop_float"),
-        vt_orig->pop_float);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "pop_string"),
-        vt_orig->pop_string);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "pop_pmc"),
-        vt_orig->pop_pmc);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "push_integer"),
-        vt_orig->push_integer);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "push_float"),
-        vt_orig->push_float);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "push_string"),
-        vt_orig->push_string);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "push_pmc"),
-        vt_orig->push_pmc);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "shift_integer"),
-        vt_orig->shift_integer);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "shift_float"),
-        vt_orig->shift_float);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "shift_string"),
-        vt_orig->shift_string);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "shift_pmc"),
-        vt_orig->shift_pmc);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "unshift_integer"),
-        vt_orig->unshift_integer);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "unshift_float"),
-        vt_orig->unshift_float);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "unshift_string"),
-        vt_orig->unshift_string);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "unshift_pmc"),
-        vt_orig->unshift_pmc);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "splice"),
-        vt_orig->splice);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "add"),
-        vt_orig->add);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "add_int"),
-        vt_orig->add_int);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "add_float"),
-        vt_orig->add_float);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "i_add"),
-        vt_orig->i_add);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "i_add_int"),
-        vt_orig->i_add_int);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "i_add_float"),
-        vt_orig->i_add_float);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "subtract"),
-        vt_orig->subtract);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "subtract_int"),
-        vt_orig->subtract_int);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "subtract_float"),
-        vt_orig->subtract_float);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "i_subtract"),
-        vt_orig->i_subtract);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "i_subtract_int"),
-        vt_orig->i_subtract_int);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "i_subtract_float"),
-        vt_orig->i_subtract_float);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "multiply"),
-        vt_orig->multiply);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "multiply_int"),
-        vt_orig->multiply_int);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "multiply_float"),
-        vt_orig->multiply_float);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "i_multiply"),
-        vt_orig->i_multiply);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "i_multiply_int"),
-        vt_orig->i_multiply_int);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "i_multiply_float"),
-        vt_orig->i_multiply_float);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "divide"),
-        vt_orig->divide);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "divide_int"),
-        vt_orig->divide_int);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "divide_float"),
-        vt_orig->divide_float);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "i_divide"),
-        vt_orig->i_divide);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "i_divide_int"),
-        vt_orig->i_divide_int);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "i_divide_float"),
-        vt_orig->i_divide_float);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "floor_divide"),
-        vt_orig->floor_divide);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "floor_divide_int"),
-        vt_orig->floor_divide_int);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "floor_divide_float"),
-        vt_orig->floor_divide_float);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "i_floor_divide"),
-        vt_orig->i_floor_divide);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "i_floor_divide_int"),
-        vt_orig->i_floor_divide_int);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "i_floor_divide_float"),
-        vt_orig->i_floor_divide_float);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "modulus"),
-        vt_orig->modulus);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "modulus_int"),
-        vt_orig->modulus_int);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "modulus_float"),
-        vt_orig->modulus_float);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "i_modulus"),
-        vt_orig->i_modulus);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "i_modulus_int"),
-        vt_orig->i_modulus_int);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "i_modulus_float"),
-        vt_orig->i_modulus_float);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "increment"),
-        vt_orig->increment);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "decrement"),
-        vt_orig->decrement);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "absolute"),
-        vt_orig->absolute);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "i_absolute"),
-        vt_orig->i_absolute);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "neg"),
-        vt_orig->neg);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "i_neg"),
-        vt_orig->i_neg);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "is_equal"),
-        vt_orig->is_equal);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "is_equal_num"),
-        vt_orig->is_equal_num);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "is_equal_string"),
-        vt_orig->is_equal_string);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "is_same"),
-        vt_orig->is_same);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "cmp"),
-        vt_orig->cmp);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "cmp_num"),
-        vt_orig->cmp_num);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "cmp_string"),
-        vt_orig->cmp_string);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "cmp_pmc"),
-        vt_orig->cmp_pmc);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "logical_or"),
-        vt_orig->logical_or);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "logical_and"),
-        vt_orig->logical_and);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "logical_xor"),
-        vt_orig->logical_xor);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "logical_not"),
-        vt_orig->logical_not);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "i_logical_not"),
-        vt_orig->i_logical_not);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "concatenate"),
-        vt_orig->concatenate);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "concatenate_str"),
-        vt_orig->concatenate_str);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "i_concatenate"),
-        vt_orig->i_concatenate);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "i_concatenate_str"),
-        vt_orig->i_concatenate_str);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "repeat"),
-        vt_orig->repeat);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "repeat_int"),
-        vt_orig->repeat_int);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "i_repeat"),
-        vt_orig->i_repeat);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "i_repeat_int"),
-        vt_orig->i_repeat_int);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "substr"),
-        vt_orig->substr);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "substr_str"),
-        vt_orig->substr_str);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "exists_keyed"),
-        vt_orig->exists_keyed);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "exists_keyed_int"),
-        vt_orig->exists_keyed_int);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "exists_keyed_str"),
-        vt_orig->exists_keyed_str);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "defined"),
-        vt_orig->defined);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "defined_keyed"),
-        vt_orig->defined_keyed);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "defined_keyed_int"),
-        vt_orig->defined_keyed_int);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "defined_keyed_str"),
-        vt_orig->defined_keyed_str);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "delete_keyed"),
-        vt_orig->delete_keyed);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "delete_keyed_int"),
-        vt_orig->delete_keyed_int);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "delete_keyed_str"),
-        vt_orig->delete_keyed_str);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "get_iter"),
-        vt_orig->get_iter);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "hashvalue"),
-        vt_orig->hashvalue);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "invoke"),
-        vt_orig->invoke);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "can"),
-        vt_orig->can);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "does_pmc"),
-        vt_orig->does_pmc);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "does"),
-        vt_orig->does);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "isa_pmc"),
-        vt_orig->isa_pmc);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "isa"),
-        vt_orig->isa);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "get_attr_str"),
-        vt_orig->get_attr_str);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "get_attr_keyed"),
-        vt_orig->get_attr_keyed);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "set_attr_str"),
-        vt_orig->set_attr_str);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "set_attr_keyed"),
-        vt_orig->set_attr_keyed);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "get_class"),
-        vt_orig->get_class);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "add_parent"),
-        vt_orig->add_parent);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "remove_parent"),
-        vt_orig->remove_parent);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "add_role"),
-        vt_orig->add_role);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "remove_role"),
-        vt_orig->remove_role);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "add_attribute"),
-        vt_orig->add_attribute);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "remove_attribute"),
-        vt_orig->remove_attribute);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "add_method"),
-        vt_orig->add_method);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "remove_method"),
-        vt_orig->remove_method);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "add_vtable_override"),
-        vt_orig->add_vtable_override);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "remove_vtable_override"),
-        vt_orig->remove_vtable_override);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "inspect"),
-        vt_orig->inspect);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "inspect_str"),
-        vt_orig->inspect_str);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "freeze"),
-        vt_orig->freeze);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "thaw"),
-        vt_orig->thaw);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "thawfinish"),
-        vt_orig->thawfinish);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "visit"),
-        vt_orig->visit);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "share"),
-        vt_orig->share);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "share_ro"),
-        vt_orig->share_ro);
-    parrot_hash_put(interp, orig_hash,
-        CONST_STRING(interp, "init_int"),
-        vt_orig->init_int);
-    /* END vtable mapping name original */
-}
-
-/* BEGIN vtable stubs */
-static
-void stub_init(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "core"),
-                   CONST_STRING(supervisor, "init"));
-
-
-    ((_vtable *)orig_vtable)->init(interp, pmc);
-    return;
-}
-
-static
-void stub_init_pmc(PARROT_INTERP, PMC* pmc, PMC* initializer) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, initializer);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "core"),
-                   CONST_STRING(supervisor, "init_pmc"));
-
-
-    ((_vtable *)orig_vtable)->init_pmc(interp, pmc, initializer);
-    return;
-}
-
-static
-PMC* stub_instantiate(PARROT_INTERP, PMC* pmc, PMC* sig) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    PMC* ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, sig);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "core"),
-                   CONST_STRING(supervisor, "instantiate"));
-
-
-    ret = ((_vtable *)orig_vtable)->instantiate(interp, pmc, sig);
-    return ret;
-}
-
-static
-void stub_morph(PARROT_INTERP, PMC* pmc, PMC* type) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, type);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "core"),
-                   CONST_STRING(supervisor, "morph"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "morph"));
-
-
-    ((_vtable *)orig_vtable)->morph(interp, pmc, type);
-    return;
-}
-
-static
-void stub_mark(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "core"),
-                   CONST_STRING(supervisor, "mark"));
-
-
-    ((_vtable *)orig_vtable)->mark(interp, pmc);
-    return;
-}
-
-static
-void stub_destroy(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "core"),
-                   CONST_STRING(supervisor, "destroy"));
-
-
-    ((_vtable *)orig_vtable)->destroy(interp, pmc);
-    return;
-}
-
-static
-PMC* stub_get_namespace(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    PMC* ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "core"),
-                   CONST_STRING(supervisor, "get_namespace"));
-
-
-    ret = ((_vtable *)orig_vtable)->get_namespace(interp, pmc);
-    return ret;
-}
-
-static
-PMC* stub_getprop(PARROT_INTERP, PMC* pmc, STRING* key) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    PMC* ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, key);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "core"),
-                   CONST_STRING(supervisor, "getprop"));
-
-
-    ret = ((_vtable *)orig_vtable)->getprop(interp, pmc, key);
-    return ret;
-}
-
-static
-void stub_setprop(PARROT_INTERP, PMC* pmc, STRING* key, PMC* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, key);
-    VTABLE_push_pmc(supervisor, params, temp);
-    VTABLE_push_pmc(supervisor, params, value);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "core"),
-                   CONST_STRING(supervisor, "setprop"));
-
-
-    ((_vtable *)orig_vtable)->setprop(interp, pmc, key, value);
-    return;
-}
-
-static
-void stub_delprop(PARROT_INTERP, PMC* pmc, STRING* key) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, key);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "core"),
-                   CONST_STRING(supervisor, "delprop"));
-
-
-    ((_vtable *)orig_vtable)->delprop(interp, pmc, key);
-    return;
-}
-
-static
-PMC* stub_getprops(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    PMC* ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "core"),
-                   CONST_STRING(supervisor, "getprops"));
-
-
-    ret = ((_vtable *)orig_vtable)->getprops(interp, pmc);
-    return ret;
-}
-
-static
-INTVAL stub_type(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    INTVAL ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "core"),
-                   CONST_STRING(supervisor, "type"));
-
-
-    ret = ((_vtable *)orig_vtable)->type(interp, pmc);
-    return ret;
-}
-
-static
-STRING* stub_name(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    STRING* ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "core"),
-                   CONST_STRING(supervisor, "name"));
-
-
-    ret = ((_vtable *)orig_vtable)->name(interp, pmc);
-    return ret;
-}
-
-static
-PMC* stub_clone(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    PMC* ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "core"),
-                   CONST_STRING(supervisor, "clone"));
-
-
-    ret = ((_vtable *)orig_vtable)->clone(interp, pmc);
-    return ret;
-}
-
-static
-PMC* stub_clone_pmc(PARROT_INTERP, PMC* pmc, PMC* args) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    PMC* ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, args);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "core"),
-                   CONST_STRING(supervisor, "clone_pmc"));
-
-
-    ret = ((_vtable *)orig_vtable)->clone_pmc(interp, pmc, args);
-    return ret;
-}
-
-static
-PMC* stub_find_method(PARROT_INTERP, PMC* pmc, STRING* method_name) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    PMC* ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, method_name);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "core"),
-                   CONST_STRING(supervisor, "find_method"));
-
-
-    ret = ((_vtable *)orig_vtable)->find_method(interp, pmc, method_name);
-    return ret;
-}
-
-static
-INTVAL stub_get_integer(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    INTVAL ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "get_integer"));
-
-
-    ret = ((_vtable *)orig_vtable)->get_integer(interp, pmc);
-    return ret;
-}
-
-static
-INTVAL stub_get_integer_keyed(PARROT_INTERP, PMC* pmc, PMC* key) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    INTVAL ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, key);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "get_integer_keyed"));
-
-
-    ret = ((_vtable *)orig_vtable)->get_integer_keyed(interp, pmc, key);
-    return ret;
-}
-
-static
-INTVAL stub_get_integer_keyed_int(PARROT_INTERP, PMC* pmc, INTVAL key) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    INTVAL ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, key);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "get_integer_keyed_int"));
-
-
-    ret = ((_vtable *)orig_vtable)->get_integer_keyed_int(interp, pmc, key);
-    return ret;
-}
-
-static
-INTVAL stub_get_integer_keyed_str(PARROT_INTERP, PMC* pmc, STRING* key) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    INTVAL ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, key);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "get_integer_keyed_str"));
-
-
-    ret = ((_vtable *)orig_vtable)->get_integer_keyed_str(interp, pmc, key);
-    return ret;
-}
-
-static
-FLOATVAL stub_get_number(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    FLOATVAL ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "get_number"));
-
-
-    ret = ((_vtable *)orig_vtable)->get_number(interp, pmc);
-    return ret;
-}
-
-static
-FLOATVAL stub_get_number_keyed(PARROT_INTERP, PMC* pmc, PMC* key) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    FLOATVAL ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, key);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "get_number_keyed"));
-
-
-    ret = ((_vtable *)orig_vtable)->get_number_keyed(interp, pmc, key);
-    return ret;
-}
-
-static
-FLOATVAL stub_get_number_keyed_int(PARROT_INTERP, PMC* pmc, INTVAL key) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    FLOATVAL ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, key);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "get_number_keyed_int"));
-
-
-    ret = ((_vtable *)orig_vtable)->get_number_keyed_int(interp, pmc, key);
-    return ret;
-}
-
-static
-FLOATVAL stub_get_number_keyed_str(PARROT_INTERP, PMC* pmc, STRING* key) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    FLOATVAL ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, key);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "get_number_keyed_str"));
-
-
-    ret = ((_vtable *)orig_vtable)->get_number_keyed_str(interp, pmc, key);
-    return ret;
-}
-
-static
-STRING* stub_get_string(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    STRING* ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "get_string"));
-
-
-    ret = ((_vtable *)orig_vtable)->get_string(interp, pmc);
-    return ret;
-}
-
-static
-STRING* stub_get_repr(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    STRING* ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "get_repr"));
-
-
-    ret = ((_vtable *)orig_vtable)->get_repr(interp, pmc);
-    return ret;
-}
-
-static
-STRING* stub_get_string_keyed(PARROT_INTERP, PMC* pmc, PMC* key) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    STRING* ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, key);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "get_string_keyed"));
-
-
-    ret = ((_vtable *)orig_vtable)->get_string_keyed(interp, pmc, key);
-    return ret;
-}
-
-static
-STRING* stub_get_string_keyed_int(PARROT_INTERP, PMC* pmc, INTVAL key) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    STRING* ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, key);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "get_string_keyed_int"));
-
-
-    ret = ((_vtable *)orig_vtable)->get_string_keyed_int(interp, pmc, key);
-    return ret;
-}
-
-static
-STRING* stub_get_string_keyed_str(PARROT_INTERP, PMC* pmc, STRING* key) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    STRING* ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, key);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "get_string_keyed_str"));
-
-
-    ret = ((_vtable *)orig_vtable)->get_string_keyed_str(interp, pmc, key);
-    return ret;
-}
-
-static
-INTVAL stub_get_bool(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    INTVAL ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "get_bool"));
-
-
-    ret = ((_vtable *)orig_vtable)->get_bool(interp, pmc);
-    return ret;
-}
-
-static
-PMC* stub_get_pmc(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    PMC* ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "get_pmc"));
-
-
-    ret = ((_vtable *)orig_vtable)->get_pmc(interp, pmc);
-    return ret;
-}
-
-static
-PMC* stub_get_pmc_keyed(PARROT_INTERP, PMC* pmc, PMC* key) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    PMC* ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, key);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "get_pmc_keyed"));
-
-
-    ret = ((_vtable *)orig_vtable)->get_pmc_keyed(interp, pmc, key);
-    return ret;
-}
-
-static
-PMC* stub_get_pmc_keyed_int(PARROT_INTERP, PMC* pmc, INTVAL key) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    PMC* ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, key);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "get_pmc_keyed_int"));
-
-
-    ret = ((_vtable *)orig_vtable)->get_pmc_keyed_int(interp, pmc, key);
-    return ret;
-}
-
-static
-PMC* stub_get_pmc_keyed_str(PARROT_INTERP, PMC* pmc, STRING* key) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    PMC* ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, key);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "get_pmc_keyed_str"));
-
-
-    ret = ((_vtable *)orig_vtable)->get_pmc_keyed_str(interp, pmc, key);
-    return ret;
-}
-
-static
-void* stub_get_pointer(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    void* ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "get_pointer"));
-
-
-    ret = ((_vtable *)orig_vtable)->get_pointer(interp, pmc);
-    return ret;
-}
-
-static
-void* stub_get_pointer_keyed(PARROT_INTERP, PMC* pmc, PMC* key) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    void* ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, key);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "get_pointer_keyed"));
-
-
-    ret = ((_vtable *)orig_vtable)->get_pointer_keyed(interp, pmc, key);
-    return ret;
-}
-
-static
-void* stub_get_pointer_keyed_int(PARROT_INTERP, PMC* pmc, INTVAL key) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    void* ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, key);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "get_pointer_keyed_int"));
-
-
-    ret = ((_vtable *)orig_vtable)->get_pointer_keyed_int(interp, pmc, key);
-    return ret;
-}
-
-static
-void* stub_get_pointer_keyed_str(PARROT_INTERP, PMC* pmc, STRING* key) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    void* ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, key);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "get_pointer_keyed_str"));
-
-
-    ret = ((_vtable *)orig_vtable)->get_pointer_keyed_str(interp, pmc, key);
-    return ret;
-}
-
-static
-void stub_set_integer_native(PARROT_INTERP, PMC* pmc, INTVAL value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "set_integer_native"));
-
-
-    ((_vtable *)orig_vtable)->set_integer_native(interp, pmc, value);
-    return;
-}
-
-static
-void stub_set_integer_keyed(PARROT_INTERP, PMC* pmc, PMC* key, INTVAL value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, key);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "set_integer_keyed"));
-
-
-    ((_vtable *)orig_vtable)->set_integer_keyed(interp, pmc, key, value);
-    return;
-}
-
-static
-void stub_set_integer_keyed_int(PARROT_INTERP, PMC* pmc, INTVAL key, INTVAL value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, key);
-    VTABLE_push_pmc(supervisor, params, temp);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "set_integer_keyed_int"));
-
-
-    ((_vtable *)orig_vtable)->set_integer_keyed_int(interp, pmc, key, value);
-    return;
-}
-
-static
-void stub_set_integer_keyed_str(PARROT_INTERP, PMC* pmc, STRING* key, INTVAL value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, key);
-    VTABLE_push_pmc(supervisor, params, temp);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "set_integer_keyed_str"));
-
-
-    ((_vtable *)orig_vtable)->set_integer_keyed_str(interp, pmc, key, value);
-    return;
-}
-
-static
-void stub_set_number_native(PARROT_INTERP, PMC* pmc, FLOATVAL value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Float);
-    VTABLE_set_number_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "set_number_native"));
-
-
-    ((_vtable *)orig_vtable)->set_number_native(interp, pmc, value);
-    return;
-}
-
-static
-void stub_set_number_keyed(PARROT_INTERP, PMC* pmc, PMC* key, FLOATVAL value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, key);
-    temp = Parrot_pmc_new(supervisor, enum_class_Float);
-    VTABLE_set_number_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "set_number_keyed"));
-
-
-    ((_vtable *)orig_vtable)->set_number_keyed(interp, pmc, key, value);
-    return;
-}
-
-static
-void stub_set_number_keyed_int(PARROT_INTERP, PMC* pmc, INTVAL key, FLOATVAL value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, key);
-    VTABLE_push_pmc(supervisor, params, temp);
-    temp = Parrot_pmc_new(supervisor, enum_class_Float);
-    VTABLE_set_number_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "set_number_keyed_int"));
-
-
-    ((_vtable *)orig_vtable)->set_number_keyed_int(interp, pmc, key, value);
-    return;
-}
-
-static
-void stub_set_number_keyed_str(PARROT_INTERP, PMC* pmc, STRING* key, FLOATVAL value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, key);
-    VTABLE_push_pmc(supervisor, params, temp);
-    temp = Parrot_pmc_new(supervisor, enum_class_Float);
-    VTABLE_set_number_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "set_number_keyed_str"));
-
-
-    ((_vtable *)orig_vtable)->set_number_keyed_str(interp, pmc, key, value);
-    return;
-}
-
-static
-void stub_set_string_native(PARROT_INTERP, PMC* pmc, STRING* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "set_string_native"));
-
-
-    ((_vtable *)orig_vtable)->set_string_native(interp, pmc, value);
-    return;
-}
-
-static
-void stub_assign_string_native(PARROT_INTERP, PMC* pmc, STRING* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "assign_string_native"));
-
-
-    ((_vtable *)orig_vtable)->assign_string_native(interp, pmc, value);
-    return;
-}
-
-static
-void stub_set_string_keyed(PARROT_INTERP, PMC* pmc, PMC* key, STRING* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, key);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "set_string_keyed"));
-
-
-    ((_vtable *)orig_vtable)->set_string_keyed(interp, pmc, key, value);
-    return;
-}
-
-static
-void stub_set_string_keyed_int(PARROT_INTERP, PMC* pmc, INTVAL key, STRING* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, key);
-    VTABLE_push_pmc(supervisor, params, temp);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "set_string_keyed_int"));
-
-
-    ((_vtable *)orig_vtable)->set_string_keyed_int(interp, pmc, key, value);
-    return;
-}
-
-static
-void stub_set_string_keyed_str(PARROT_INTERP, PMC* pmc, STRING* key, STRING* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, key);
-    VTABLE_push_pmc(supervisor, params, temp);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "set_string_keyed_str"));
-
-
-    ((_vtable *)orig_vtable)->set_string_keyed_str(interp, pmc, key, value);
-    return;
-}
-
-static
-void stub_set_bool(PARROT_INTERP, PMC* pmc, INTVAL value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "set_bool"));
-
-
-    ((_vtable *)orig_vtable)->set_bool(interp, pmc, value);
-    return;
-}
-
-static
-void stub_set_pmc(PARROT_INTERP, PMC* pmc, PMC* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, value);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "set_pmc"));
-
-
-    ((_vtable *)orig_vtable)->set_pmc(interp, pmc, value);
-    return;
-}
-
-static
-void stub_assign_pmc(PARROT_INTERP, PMC* pmc, PMC* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, value);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "assign_pmc"));
-
-
-    ((_vtable *)orig_vtable)->assign_pmc(interp, pmc, value);
-    return;
-}
-
-static
-void stub_set_pmc_keyed(PARROT_INTERP, PMC* pmc, PMC* key, PMC* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, key);
-    VTABLE_push_pmc(supervisor, params, value);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "set_pmc_keyed"));
-
-
-    ((_vtable *)orig_vtable)->set_pmc_keyed(interp, pmc, key, value);
-    return;
-}
-
-static
-void stub_set_pmc_keyed_int(PARROT_INTERP, PMC* pmc, INTVAL key, PMC* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, key);
-    VTABLE_push_pmc(supervisor, params, temp);
-    VTABLE_push_pmc(supervisor, params, value);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "set_pmc_keyed_int"));
-
-
-    ((_vtable *)orig_vtable)->set_pmc_keyed_int(interp, pmc, key, value);
-    return;
-}
-
-static
-void stub_set_pmc_keyed_str(PARROT_INTERP, PMC* pmc, STRING* key, PMC* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, key);
-    VTABLE_push_pmc(supervisor, params, temp);
-    VTABLE_push_pmc(supervisor, params, value);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "set_pmc_keyed_str"));
-
-
-    ((_vtable *)orig_vtable)->set_pmc_keyed_str(interp, pmc, key, value);
-    return;
-}
-
-static
-void stub_set_pointer(PARROT_INTERP, PMC* pmc, void* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Pointer);
-    VTABLE_set_pointer(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "set_pointer"));
-
-
-    ((_vtable *)orig_vtable)->set_pointer(interp, pmc, value);
-    return;
-}
-
-static
-void stub_set_pointer_keyed(PARROT_INTERP, PMC* pmc, PMC* key, void* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, key);
-    temp = Parrot_pmc_new(supervisor, enum_class_Pointer);
-    VTABLE_set_pointer(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "set_pointer_keyed"));
-
-
-    ((_vtable *)orig_vtable)->set_pointer_keyed(interp, pmc, key, value);
-    return;
-}
-
-static
-void stub_set_pointer_keyed_int(PARROT_INTERP, PMC* pmc, INTVAL key, void* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, key);
-    VTABLE_push_pmc(supervisor, params, temp);
-    temp = Parrot_pmc_new(supervisor, enum_class_Pointer);
-    VTABLE_set_pointer(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "set_pointer_keyed_int"));
-
-
-    ((_vtable *)orig_vtable)->set_pointer_keyed_int(interp, pmc, key, value);
-    return;
-}
-
-static
-void stub_set_pointer_keyed_str(PARROT_INTERP, PMC* pmc, STRING* key, void* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, key);
-    VTABLE_push_pmc(supervisor, params, temp);
-    temp = Parrot_pmc_new(supervisor, enum_class_Pointer);
-    VTABLE_set_pointer(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetch"),
-                   CONST_STRING(supervisor, "set_pointer_keyed_str"));
-
-
-    ((_vtable *)orig_vtable)->set_pointer_keyed_str(interp, pmc, key, value);
-    return;
-}
-
-static
-INTVAL stub_elements(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    INTVAL ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetchsize"),
-                   CONST_STRING(supervisor, "elements"));
-
-
-    ret = ((_vtable *)orig_vtable)->elements(interp, pmc);
-    return ret;
-}
-
-static
-INTVAL stub_pop_integer(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    INTVAL ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetchsize"),
-                   CONST_STRING(supervisor, "pop_integer"));
-
-
-    ret = ((_vtable *)orig_vtable)->pop_integer(interp, pmc);
-    return ret;
-}
-
-static
-FLOATVAL stub_pop_float(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    FLOATVAL ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetchsize"),
-                   CONST_STRING(supervisor, "pop_float"));
-
-
-    ret = ((_vtable *)orig_vtable)->pop_float(interp, pmc);
-    return ret;
+    /* BEGIN vtable mapping name original */
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "absolute"), vt_orig->absolute);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "add"), vt_orig->add);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "add_attribute"), vt_orig->add_attribute);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "add_float"), vt_orig->add_float);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "add_int"), vt_orig->add_int);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "add_method"), vt_orig->add_method);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "add_parent"), vt_orig->add_parent);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "add_role"), vt_orig->add_role);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "add_vtable_override"), vt_orig->add_vtable_override);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "assign_pmc"), vt_orig->assign_pmc);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "assign_string_native"), vt_orig->assign_string_native);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "can"), vt_orig->can);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "clone"), vt_orig->clone);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "clone_pmc"), vt_orig->clone_pmc);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "cmp"), vt_orig->cmp);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "cmp_num"), vt_orig->cmp_num);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "cmp_pmc"), vt_orig->cmp_pmc);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "cmp_string"), vt_orig->cmp_string);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "concatenate"), vt_orig->concatenate);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "concatenate_str"), vt_orig->concatenate_str);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "decrement"), vt_orig->decrement);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "defined"), vt_orig->defined);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "defined_keyed"), vt_orig->defined_keyed);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "defined_keyed_int"), vt_orig->defined_keyed_int);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "defined_keyed_str"), vt_orig->defined_keyed_str);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "delete_keyed"), vt_orig->delete_keyed);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "delete_keyed_int"), vt_orig->delete_keyed_int);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "delete_keyed_str"), vt_orig->delete_keyed_str);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "delprop"), vt_orig->delprop);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "destroy"), vt_orig->destroy);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "divide"), vt_orig->divide);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "divide_float"), vt_orig->divide_float);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "divide_int"), vt_orig->divide_int);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "does"), vt_orig->does);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "does_pmc"), vt_orig->does_pmc);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "elements"), vt_orig->elements);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "exists_keyed"), vt_orig->exists_keyed);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "exists_keyed_int"), vt_orig->exists_keyed_int);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "exists_keyed_str"), vt_orig->exists_keyed_str);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "find_method"), vt_orig->find_method);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "floor_divide"), vt_orig->floor_divide);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "floor_divide_float"), vt_orig->floor_divide_float);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "floor_divide_int"), vt_orig->floor_divide_int);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "freeze"), vt_orig->freeze);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "get_attr_keyed"), vt_orig->get_attr_keyed);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "get_attr_str"), vt_orig->get_attr_str);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "get_bool"), vt_orig->get_bool);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "get_class"), vt_orig->get_class);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "get_integer"), vt_orig->get_integer);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "get_integer_keyed"), vt_orig->get_integer_keyed);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "get_integer_keyed_int"), vt_orig->get_integer_keyed_int);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "get_integer_keyed_str"), vt_orig->get_integer_keyed_str);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "get_iter"), vt_orig->get_iter);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "get_namespace"), vt_orig->get_namespace);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "get_number"), vt_orig->get_number);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "get_number_keyed"), vt_orig->get_number_keyed);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "get_number_keyed_int"), vt_orig->get_number_keyed_int);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "get_number_keyed_str"), vt_orig->get_number_keyed_str);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "get_pmc"), vt_orig->get_pmc);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "get_pmc_keyed"), vt_orig->get_pmc_keyed);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "get_pmc_keyed_int"), vt_orig->get_pmc_keyed_int);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "get_pmc_keyed_str"), vt_orig->get_pmc_keyed_str);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "get_pointer"), vt_orig->get_pointer);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "get_pointer_keyed"), vt_orig->get_pointer_keyed);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "get_pointer_keyed_int"), vt_orig->get_pointer_keyed_int);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "get_pointer_keyed_str"), vt_orig->get_pointer_keyed_str);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "get_repr"), vt_orig->get_repr);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "get_string"), vt_orig->get_string);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "get_string_keyed"), vt_orig->get_string_keyed);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "get_string_keyed_int"), vt_orig->get_string_keyed_int);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "get_string_keyed_str"), vt_orig->get_string_keyed_str);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "getprop"), vt_orig->getprop);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "getprops"), vt_orig->getprops);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "hashvalue"), vt_orig->hashvalue);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "i_absolute"), vt_orig->i_absolute);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "i_add"), vt_orig->i_add);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "i_add_float"), vt_orig->i_add_float);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "i_add_int"), vt_orig->i_add_int);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "i_concatenate"), vt_orig->i_concatenate);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "i_concatenate_str"), vt_orig->i_concatenate_str);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "i_divide"), vt_orig->i_divide);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "i_divide_float"), vt_orig->i_divide_float);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "i_divide_int"), vt_orig->i_divide_int);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "i_floor_divide"), vt_orig->i_floor_divide);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "i_floor_divide_float"), vt_orig->i_floor_divide_float);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "i_floor_divide_int"), vt_orig->i_floor_divide_int);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "i_logical_not"), vt_orig->i_logical_not);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "i_modulus"), vt_orig->i_modulus);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "i_modulus_float"), vt_orig->i_modulus_float);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "i_modulus_int"), vt_orig->i_modulus_int);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "i_multiply"), vt_orig->i_multiply);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "i_multiply_float"), vt_orig->i_multiply_float);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "i_multiply_int"), vt_orig->i_multiply_int);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "i_neg"), vt_orig->i_neg);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "i_repeat"), vt_orig->i_repeat);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "i_repeat_int"), vt_orig->i_repeat_int);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "i_subtract"), vt_orig->i_subtract);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "i_subtract_float"), vt_orig->i_subtract_float);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "i_subtract_int"), vt_orig->i_subtract_int);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "increment"), vt_orig->increment);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "init"), vt_orig->init);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "init_int"), vt_orig->init_int);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "init_pmc"), vt_orig->init_pmc);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "inspect"), vt_orig->inspect);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "inspect_str"), vt_orig->inspect_str);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "instantiate"), vt_orig->instantiate);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "invoke"), vt_orig->invoke);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "is_equal"), vt_orig->is_equal);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "is_equal_num"), vt_orig->is_equal_num);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "is_equal_string"), vt_orig->is_equal_string);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "is_same"), vt_orig->is_same);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "isa"), vt_orig->isa);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "isa_pmc"), vt_orig->isa_pmc);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "logical_and"), vt_orig->logical_and);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "logical_not"), vt_orig->logical_not);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "logical_or"), vt_orig->logical_or);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "logical_xor"), vt_orig->logical_xor);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "mark"), vt_orig->mark);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "modulus"), vt_orig->modulus);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "modulus_float"), vt_orig->modulus_float);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "modulus_int"), vt_orig->modulus_int);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "morph"), vt_orig->morph);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "multiply"), vt_orig->multiply);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "multiply_float"), vt_orig->multiply_float);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "multiply_int"), vt_orig->multiply_int);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "name"), vt_orig->name);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "neg"), vt_orig->neg);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "pop_float"), vt_orig->pop_float);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "pop_integer"), vt_orig->pop_integer);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "pop_pmc"), vt_orig->pop_pmc);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "pop_string"), vt_orig->pop_string);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "push_float"), vt_orig->push_float);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "push_integer"), vt_orig->push_integer);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "push_pmc"), vt_orig->push_pmc);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "push_string"), vt_orig->push_string);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "remove_attribute"), vt_orig->remove_attribute);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "remove_method"), vt_orig->remove_method);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "remove_parent"), vt_orig->remove_parent);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "remove_role"), vt_orig->remove_role);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "remove_vtable_override"), vt_orig->remove_vtable_override);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "repeat"), vt_orig->repeat);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "repeat_int"), vt_orig->repeat_int);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "set_attr_keyed"), vt_orig->set_attr_keyed);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "set_attr_str"), vt_orig->set_attr_str);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "set_bool"), vt_orig->set_bool);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "set_integer_keyed"), vt_orig->set_integer_keyed);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "set_integer_keyed_int"), vt_orig->set_integer_keyed_int);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "set_integer_keyed_str"), vt_orig->set_integer_keyed_str);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "set_integer_native"), vt_orig->set_integer_native);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "set_number_keyed"), vt_orig->set_number_keyed);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "set_number_keyed_int"), vt_orig->set_number_keyed_int);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "set_number_keyed_str"), vt_orig->set_number_keyed_str);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "set_number_native"), vt_orig->set_number_native);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "set_pmc"), vt_orig->set_pmc);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "set_pmc_keyed"), vt_orig->set_pmc_keyed);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "set_pmc_keyed_int"), vt_orig->set_pmc_keyed_int);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "set_pmc_keyed_str"), vt_orig->set_pmc_keyed_str);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "set_pointer"), vt_orig->set_pointer);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "set_pointer_keyed"), vt_orig->set_pointer_keyed);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "set_pointer_keyed_int"), vt_orig->set_pointer_keyed_int);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "set_pointer_keyed_str"), vt_orig->set_pointer_keyed_str);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "set_string_keyed"), vt_orig->set_string_keyed);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "set_string_keyed_int"), vt_orig->set_string_keyed_int);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "set_string_keyed_str"), vt_orig->set_string_keyed_str);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "set_string_native"), vt_orig->set_string_native);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "setprop"), vt_orig->setprop);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "share"), vt_orig->share);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "share_ro"), vt_orig->share_ro);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "shift_float"), vt_orig->shift_float);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "shift_integer"), vt_orig->shift_integer);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "shift_pmc"), vt_orig->shift_pmc);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "shift_string"), vt_orig->shift_string);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "splice"), vt_orig->splice);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "substr"), vt_orig->substr);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "substr_str"), vt_orig->substr_str);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "subtract"), vt_orig->subtract);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "subtract_float"), vt_orig->subtract_float);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "subtract_int"), vt_orig->subtract_int);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "thaw"), vt_orig->thaw);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "thawfinish"), vt_orig->thawfinish);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "type"), vt_orig->type);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "unshift_float"), vt_orig->unshift_float);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "unshift_integer"), vt_orig->unshift_integer);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "unshift_pmc"), vt_orig->unshift_pmc);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "unshift_string"), vt_orig->unshift_string);
+    parrot_hash_put(interp, orig_hash,
+        CONST_STRING(interp, "visit"), vt_orig->visit);
+    /* END vtable mapping name original */
 }
 
+/* BEGIN vtable stubs */
 static
-STRING* stub_pop_string(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_absolute(PARROT_INTERP, PMC *pmc, PMC* dest) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    STRING* ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetchsize"),
-                   CONST_STRING(supervisor, "pop_string"));
-
-
-    ret = ((_vtable *)orig_vtable)->pop_string(interp, pmc);
-    return ret;
-}
-
-static
-PMC* stub_pop_pmc(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
+    STRING *raise_event, *event;
     void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
     PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PP", pmc, dest);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetchsize"),
-                   CONST_STRING(supervisor, "pop_pmc"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::absolute"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->absolute(interp, pmc, dest);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->pop_pmc(interp, pmc);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-void stub_push_integer(PARROT_INTERP, PMC* pmc, INTVAL value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetchsize"),
-                   CONST_STRING(supervisor, "push_integer"));
-
-
-    ((_vtable *)orig_vtable)->push_integer(interp, pmc, value);
-    return;
-}
-
-static
-void stub_push_float(PARROT_INTERP, PMC* pmc, FLOATVAL value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Float);
-    VTABLE_set_number_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetchsize"),
-                   CONST_STRING(supervisor, "push_float"));
-
-
-    ((_vtable *)orig_vtable)->push_float(interp, pmc, value);
-    return;
-}
-
-static
-void stub_push_string(PARROT_INTERP, PMC* pmc, STRING* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetchsize"),
-                   CONST_STRING(supervisor, "push_string"));
-
-
-    ((_vtable *)orig_vtable)->push_string(interp, pmc, value);
-    return;
-}
-
-static
-void stub_push_pmc(PARROT_INTERP, PMC* pmc, PMC* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, value);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetchsize"),
-                   CONST_STRING(supervisor, "push_pmc"));
-
-
-    ((_vtable *)orig_vtable)->push_pmc(interp, pmc, value);
-    return;
-}
-
-static
-INTVAL stub_shift_integer(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
-    Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    INTVAL ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
+PMC* stub_add(PARROT_INTERP, PMC *pmc, PMC* value, PMC* dest) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    PMC* ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    params = instrument_pack_params(supervisor, "PPP", pmc, value, dest);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetchsize"),
-                   CONST_STRING(supervisor, "shift_integer"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::add"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->add(interp, pmc, value, dest);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->shift_integer(interp, pmc);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-FLOATVAL stub_shift_float(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_add_attribute(PARROT_INTERP, PMC *pmc, STRING* name, PMC* type) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    FLOATVAL ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PSP", pmc, name, type);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::add_attribute"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->add_attribute(interp, pmc, name, type);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+static
+PMC* stub_add_float(PARROT_INTERP, PMC *pmc, FLOATVAL value, PMC* dest) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    PMC* ret;
+    PMC *ret_pack;
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetchsize"),
-                   CONST_STRING(supervisor, "shift_float"));
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
+    params = instrument_pack_params(supervisor, "PFP", pmc, value, dest);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    ret = ((_vtable *)orig_vtable)->shift_float(interp, pmc);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::add_float"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->add_float(interp, pmc, value, dest);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
+
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-STRING* stub_shift_string(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_add_int(PARROT_INTERP, PMC *pmc, INTVAL value, PMC* dest) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    STRING* ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    PMC* ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    params = instrument_pack_params(supervisor, "PIP", pmc, value, dest);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetchsize"),
-                   CONST_STRING(supervisor, "shift_string"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::add_int"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->add_int(interp, pmc, value, dest);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->shift_string(interp, pmc);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-PMC* stub_shift_pmc(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_add_method(PARROT_INTERP, PMC *pmc, STRING* method_name, PMC* sub_pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    PMC* ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PSP", pmc, method_name, sub_pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::add_method"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->add_method(interp, pmc, method_name, sub_pmc);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+static
+void stub_add_parent(PARROT_INTERP, PMC *pmc, PMC* parent) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetchsize"),
-                   CONST_STRING(supervisor, "shift_pmc"));
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
+    params = instrument_pack_params(supervisor, "PP", pmc, parent);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    ret = ((_vtable *)orig_vtable)->shift_pmc(interp, pmc);
-    return ret;
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::add_parent"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->add_parent(interp, pmc, parent);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-void stub_unshift_integer(PARROT_INTERP, PMC* pmc, INTVAL value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_add_role(PARROT_INTERP, PMC *pmc, PMC* role) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    params = instrument_pack_params(supervisor, "PP", pmc, role);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::add_role"));
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->add_role(interp, pmc, role);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
 
+static
+void stub_add_vtable_override(PARROT_INTERP, PMC *pmc, STRING* vtable_name, PMC* sub_pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetchsize"),
-                   CONST_STRING(supervisor, "unshift_integer"));
+    params = instrument_pack_params(supervisor, "PSP", pmc, vtable_name, sub_pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::add_vtable_override"));
 
-    ((_vtable *)orig_vtable)->unshift_integer(interp, pmc, value);
-    return;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->add_vtable_override(interp, pmc, vtable_name, sub_pmc);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-void stub_unshift_float(PARROT_INTERP, PMC* pmc, FLOATVAL value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_assign_pmc(PARROT_INTERP, PMC *pmc, PMC* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PP", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Float);
-    VTABLE_set_number_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::store::assign_pmc"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->assign_pmc(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
+
+static
+void stub_assign_string_native(PARROT_INTERP, PMC *pmc, STRING* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetchsize"),
-                   CONST_STRING(supervisor, "unshift_float"));
+    params = instrument_pack_params(supervisor, "PS", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::store::assign_string_native"));
 
-    ((_vtable *)orig_vtable)->unshift_float(interp, pmc, value);
-    return;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->assign_string_native(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-void stub_unshift_string(PARROT_INTERP, PMC* pmc, STRING* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+INTVAL stub_can(PARROT_INTERP, PMC *pmc, STRING* method) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    INTVAL ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "PS", pmc, method);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::can"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->can(interp, pmc, method);
+    ret_pack = instrument_pack_params(supervisor, "I", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
+static
+PMC* stub_clone(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    PMC* ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetchsize"),
-                   CONST_STRING(supervisor, "unshift_string"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::clone"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->clone(interp, pmc);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ((_vtable *)orig_vtable)->unshift_string(interp, pmc, value);
-    return;
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
 }
 
 static
-void stub_unshift_pmc(PARROT_INTERP, PMC* pmc, PMC* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_clone_pmc(PARROT_INTERP, PMC *pmc, PMC* args) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, value);
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    PMC* ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    params = instrument_pack_params(supervisor, "PP", pmc, args);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetchsize"),
-                   CONST_STRING(supervisor, "unshift_pmc"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::clone_pmc"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->clone_pmc(interp, pmc, args);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ((_vtable *)orig_vtable)->unshift_pmc(interp, pmc, value);
-    return;
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
 }
 
 static
-void stub_splice(PARROT_INTERP, PMC* pmc, PMC* value, INTVAL offset, INTVAL count) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+INTVAL stub_cmp(PARROT_INTERP, PMC *pmc, PMC* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    INTVAL ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "PP", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::cmp::cmp"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->cmp(interp, pmc, value);
+    ret_pack = instrument_pack_params(supervisor, "I", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, value);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, offset);
-    VTABLE_push_pmc(supervisor, params, temp);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, count);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "fetchsize"),
-                   CONST_STRING(supervisor, "splice"));
+static
+INTVAL stub_cmp_num(PARROT_INTERP, PMC *pmc, PMC* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    INTVAL ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "PP", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::cmp::cmp_num"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->cmp_num(interp, pmc, value);
+    ret_pack = instrument_pack_params(supervisor, "I", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ((_vtable *)orig_vtable)->splice(interp, pmc, value, offset, count);
-    return;
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
 }
 
 static
-PMC* stub_add(PARROT_INTERP, PMC* pmc, PMC* value, PMC* dest) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_cmp_pmc(PARROT_INTERP, PMC *pmc, PMC* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
     PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PP", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, value);
-    VTABLE_push_pmc(supervisor, params, dest);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::cmp::cmp_pmc"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->cmp_pmc(interp, pmc, value);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "add"));
+static
+INTVAL stub_cmp_string(PARROT_INTERP, PMC *pmc, PMC* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    INTVAL ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "PP", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::cmp::cmp_string"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->cmp_string(interp, pmc, value);
+    ret_pack = instrument_pack_params(supervisor, "I", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->add(interp, pmc, value, dest);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-PMC* stub_add_int(PARROT_INTERP, PMC* pmc, INTVAL value, PMC* dest) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_concatenate(PARROT_INTERP, PMC *pmc, PMC* value, PMC* dest) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
     PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-    VTABLE_push_pmc(supervisor, params, dest);
-
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    params = instrument_pack_params(supervisor, "PPP", pmc, value, dest);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "add_int"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::string::concatenate"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->concatenate(interp, pmc, value, dest);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->add_int(interp, pmc, value, dest);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-PMC* stub_add_float(PARROT_INTERP, PMC* pmc, FLOATVAL value, PMC* dest) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_concatenate_str(PARROT_INTERP, PMC *pmc, STRING* value, PMC* dest) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
     PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Float);
-    VTABLE_set_number_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-    VTABLE_push_pmc(supervisor, params, dest);
-
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    params = instrument_pack_params(supervisor, "PSP", pmc, value, dest);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "add_float"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::string::concatenate_str"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->concatenate_str(interp, pmc, value, dest);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->add_float(interp, pmc, value, dest);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-void stub_i_add(PARROT_INTERP, PMC* pmc, PMC* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_decrement(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, value);
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::decrement"));
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->decrement(interp, pmc);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "i_add"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "i_add"));
+static
+INTVAL stub_defined(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    INTVAL ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::defined"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->defined(interp, pmc);
+    ret_pack = instrument_pack_params(supervisor, "I", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ((_vtable *)orig_vtable)->i_add(interp, pmc, value);
-    return;
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
 }
 
 static
-void stub_i_add_int(PARROT_INTERP, PMC* pmc, INTVAL value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+INTVAL stub_defined_keyed(PARROT_INTERP, PMC *pmc, PMC* key) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    INTVAL ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "PP", pmc, key);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::defined_keyed"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->defined_keyed(interp, pmc, key);
+    ret_pack = instrument_pack_params(supervisor, "I", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "i_add_int"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "i_add_int"));
+static
+INTVAL stub_defined_keyed_int(PARROT_INTERP, PMC *pmc, INTVAL key) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    INTVAL ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "PI", pmc, key);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::defined_keyed_int"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->defined_keyed_int(interp, pmc, key);
+    ret_pack = instrument_pack_params(supervisor, "I", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ((_vtable *)orig_vtable)->i_add_int(interp, pmc, value);
-    return;
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
 }
 
 static
-void stub_i_add_float(PARROT_INTERP, PMC* pmc, FLOATVAL value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+INTVAL stub_defined_keyed_str(PARROT_INTERP, PMC *pmc, STRING* key) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    INTVAL ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "PS", pmc, key);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::defined_keyed_str"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->defined_keyed_str(interp, pmc, key);
+    ret_pack = instrument_pack_params(supervisor, "I", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Float);
-    VTABLE_set_number_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "i_add_float"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "i_add_float"));
+static
+void stub_delete_keyed(PARROT_INTERP, PMC *pmc, PMC* key) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    ((_vtable *)orig_vtable)->i_add_float(interp, pmc, value);
-    return;
+    params = instrument_pack_params(supervisor, "PP", pmc, key);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::delete::delete_keyed"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->delete_keyed(interp, pmc, key);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-PMC* stub_subtract(PARROT_INTERP, PMC* pmc, PMC* value, PMC* dest) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_delete_keyed_int(PARROT_INTERP, PMC *pmc, INTVAL key) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    PMC* ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    params = instrument_pack_params(supervisor, "PI", pmc, key);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::delete::delete_keyed_int"));
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, value);
-    VTABLE_push_pmc(supervisor, params, dest);
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->delete_keyed_int(interp, pmc, key);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
 
+static
+void stub_delete_keyed_str(PARROT_INTERP, PMC *pmc, STRING* key) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "subtract"));
+    params = instrument_pack_params(supervisor, "PS", pmc, key);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::delete::delete_keyed_str"));
 
-    ret = ((_vtable *)orig_vtable)->subtract(interp, pmc, value, dest);
-    return ret;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->delete_keyed_str(interp, pmc, key);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-PMC* stub_subtract_int(PARROT_INTERP, PMC* pmc, INTVAL value, PMC* dest) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_delprop(PARROT_INTERP, PMC *pmc, STRING* key) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    PMC* ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PS", pmc, key);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-    VTABLE_push_pmc(supervisor, params, dest);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::delprop"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->delprop(interp, pmc, key);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
+
+static
+void stub_destroy(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "subtract_int"));
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::destroy"));
 
-    ret = ((_vtable *)orig_vtable)->subtract_int(interp, pmc, value, dest);
-    return ret;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->destroy(interp, pmc);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-PMC* stub_subtract_float(PARROT_INTERP, PMC* pmc, FLOATVAL value, PMC* dest) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_divide(PARROT_INTERP, PMC *pmc, PMC* value, PMC* dest) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
     PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PPP", pmc, value, dest);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Float);
-    VTABLE_set_number_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-    VTABLE_push_pmc(supervisor, params, dest);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "subtract_float"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::divide"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->divide(interp, pmc, value, dest);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->subtract_float(interp, pmc, value, dest);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-void stub_i_subtract(PARROT_INTERP, PMC* pmc, PMC* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_divide_float(PARROT_INTERP, PMC *pmc, FLOATVAL value, PMC* dest) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, value);
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    PMC* ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    params = instrument_pack_params(supervisor, "PFP", pmc, value, dest);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "i_subtract"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "i_subtract"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::divide_float"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->divide_float(interp, pmc, value, dest);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ((_vtable *)orig_vtable)->i_subtract(interp, pmc, value);
-    return;
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
 }
 
 static
-void stub_i_subtract_int(PARROT_INTERP, PMC* pmc, INTVAL value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_divide_int(PARROT_INTERP, PMC *pmc, INTVAL value, PMC* dest) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PIP", pmc, value, dest);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "i_subtract_int"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "i_subtract_int"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::divide_int"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->divide_int(interp, pmc, value, dest);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ((_vtable *)orig_vtable)->i_subtract_int(interp, pmc, value);
-    return;
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
 }
 
 static
-void stub_i_subtract_float(PARROT_INTERP, PMC* pmc, FLOATVAL value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+INTVAL stub_does(PARROT_INTERP, PMC *pmc, STRING* role) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    INTVAL ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "PS", pmc, role);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::does"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->does(interp, pmc, role);
+    ret_pack = instrument_pack_params(supervisor, "I", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Float);
-    VTABLE_set_number_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "i_subtract_float"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "i_subtract_float"));
+static
+INTVAL stub_does_pmc(PARROT_INTERP, PMC *pmc, PMC* role) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    INTVAL ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "PP", pmc, role);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::does_pmc"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->does_pmc(interp, pmc, role);
+    ret_pack = instrument_pack_params(supervisor, "I", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ((_vtable *)orig_vtable)->i_subtract_float(interp, pmc, value);
-    return;
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
 }
 
 static
-PMC* stub_multiply(PARROT_INTERP, PMC* pmc, PMC* value, PMC* dest) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+INTVAL stub_elements(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    PMC* ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    INTVAL ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::fetchsize::elements"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->elements(interp, pmc);
+    ret_pack = instrument_pack_params(supervisor, "I", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, value);
-    VTABLE_push_pmc(supervisor, params, dest);
+static
+INTVAL stub_exists_keyed(PARROT_INTERP, PMC *pmc, PMC* key) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    INTVAL ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "PP", pmc, key);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::exists::exists_keyed"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->exists_keyed(interp, pmc, key);
+    ret_pack = instrument_pack_params(supervisor, "I", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "multiply"));
+static
+INTVAL stub_exists_keyed_int(PARROT_INTERP, PMC *pmc, INTVAL key) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    INTVAL ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "PI", pmc, key);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::exists::exists_keyed_int"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->exists_keyed_int(interp, pmc, key);
+    ret_pack = instrument_pack_params(supervisor, "I", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->multiply(interp, pmc, value, dest);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-PMC* stub_multiply_int(PARROT_INTERP, PMC* pmc, INTVAL value, PMC* dest) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+INTVAL stub_exists_keyed_str(PARROT_INTERP, PMC *pmc, STRING* key) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    PMC* ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    INTVAL ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "PS", pmc, key);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::exists::exists_keyed_str"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->exists_keyed_str(interp, pmc, key);
+    ret_pack = instrument_pack_params(supervisor, "I", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-    VTABLE_push_pmc(supervisor, params, dest);
+static
+PMC* stub_find_method(PARROT_INTERP, PMC *pmc, STRING* method_name) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    PMC* ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    params = instrument_pack_params(supervisor, "PS", pmc, method_name);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "multiply_int"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::find_method"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->find_method(interp, pmc, method_name);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->multiply_int(interp, pmc, value, dest);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-PMC* stub_multiply_float(PARROT_INTERP, PMC* pmc, FLOATVAL value, PMC* dest) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_floor_divide(PARROT_INTERP, PMC *pmc, PMC* value, PMC* dest) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
     PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Float);
-    VTABLE_set_number_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-    VTABLE_push_pmc(supervisor, params, dest);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
+    params = instrument_pack_params(supervisor, "PPP", pmc, value, dest);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "multiply_float"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::floor_divide"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->floor_divide(interp, pmc, value, dest);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->multiply_float(interp, pmc, value, dest);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-void stub_i_multiply(PARROT_INTERP, PMC* pmc, PMC* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_floor_divide_float(PARROT_INTERP, PMC *pmc, FLOATVAL value, PMC* dest) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, value);
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    PMC* ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    params = instrument_pack_params(supervisor, "PFP", pmc, value, dest);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "i_multiply"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "i_multiply"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::floor_divide_float"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->floor_divide_float(interp, pmc, value, dest);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ((_vtable *)orig_vtable)->i_multiply(interp, pmc, value);
-    return;
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
 }
 
 static
-void stub_i_multiply_int(PARROT_INTERP, PMC* pmc, INTVAL value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_floor_divide_int(PARROT_INTERP, PMC *pmc, INTVAL value, PMC* dest) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PIP", pmc, value, dest);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "i_multiply_int"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "i_multiply_int"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::floor_divide_int"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->floor_divide_int(interp, pmc, value, dest);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ((_vtable *)orig_vtable)->i_multiply_int(interp, pmc, value);
-    return;
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
 }
 
 static
-void stub_i_multiply_float(PARROT_INTERP, PMC* pmc, FLOATVAL value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_freeze(PARROT_INTERP, PMC *pmc, PMC* info) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Float);
-    VTABLE_set_number_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "i_multiply_float"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "i_multiply_float"));
+    params = instrument_pack_params(supervisor, "PP", pmc, info);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::freeze"));
 
-    ((_vtable *)orig_vtable)->i_multiply_float(interp, pmc, value);
-    return;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->freeze(interp, pmc, info);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-PMC* stub_divide(PARROT_INTERP, PMC* pmc, PMC* value, PMC* dest) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_get_attr_keyed(PARROT_INTERP, PMC *pmc, PMC* key, STRING* idx) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
     PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, value);
-    VTABLE_push_pmc(supervisor, params, dest);
-
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    params = instrument_pack_params(supervisor, "PPS", pmc, key, idx);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "divide"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::get_attr_keyed"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->get_attr_keyed(interp, pmc, key, idx);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->divide(interp, pmc, value, dest);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-PMC* stub_divide_int(PARROT_INTERP, PMC* pmc, INTVAL value, PMC* dest) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_get_attr_str(PARROT_INTERP, PMC *pmc, STRING* idx) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
     PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PS", pmc, idx);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-    VTABLE_push_pmc(supervisor, params, dest);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::get_attr_str"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->get_attr_str(interp, pmc, idx);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "divide_int"));
+static
+INTVAL stub_get_bool(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    INTVAL ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::fetch::get_bool"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->get_bool(interp, pmc);
+    ret_pack = instrument_pack_params(supervisor, "I", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->divide_int(interp, pmc, value, dest);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-PMC* stub_divide_float(PARROT_INTERP, PMC* pmc, FLOATVAL value, PMC* dest) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_get_class(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
     PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Float);
-    VTABLE_set_number_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-    VTABLE_push_pmc(supervisor, params, dest);
-
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "divide_float"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::get_class"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->get_class(interp, pmc);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->divide_float(interp, pmc, value, dest);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-void stub_i_divide(PARROT_INTERP, PMC* pmc, PMC* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+INTVAL stub_get_integer(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, value);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "i_divide"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "i_divide"));
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    INTVAL ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::fetch::get_integer"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->get_integer(interp, pmc);
+    ret_pack = instrument_pack_params(supervisor, "I", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ((_vtable *)orig_vtable)->i_divide(interp, pmc, value);
-    return;
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
 }
 
 static
-void stub_i_divide_int(PARROT_INTERP, PMC* pmc, INTVAL value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+INTVAL stub_get_integer_keyed(PARROT_INTERP, PMC *pmc, PMC* key) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "i_divide_int"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "i_divide_int"));
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    INTVAL ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "PP", pmc, key);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::fetch::get_integer_keyed"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->get_integer_keyed(interp, pmc, key);
+    ret_pack = instrument_pack_params(supervisor, "I", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ((_vtable *)orig_vtable)->i_divide_int(interp, pmc, value);
-    return;
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
 }
 
 static
-void stub_i_divide_float(PARROT_INTERP, PMC* pmc, FLOATVAL value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+INTVAL stub_get_integer_keyed_int(PARROT_INTERP, PMC *pmc, INTVAL key) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    INTVAL ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "PI", pmc, key);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::fetch::get_integer_keyed_int"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->get_integer_keyed_int(interp, pmc, key);
+    ret_pack = instrument_pack_params(supervisor, "I", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Float);
-    VTABLE_set_number_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "i_divide_float"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "i_divide_float"));
+static
+INTVAL stub_get_integer_keyed_str(PARROT_INTERP, PMC *pmc, STRING* key) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    INTVAL ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "PS", pmc, key);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::fetch::get_integer_keyed_str"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->get_integer_keyed_str(interp, pmc, key);
+    ret_pack = instrument_pack_params(supervisor, "I", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ((_vtable *)orig_vtable)->i_divide_float(interp, pmc, value);
-    return;
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
 }
 
 static
-PMC* stub_floor_divide(PARROT_INTERP, PMC* pmc, PMC* value, PMC* dest) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_get_iter(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
     PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, value);
-    VTABLE_push_pmc(supervisor, params, dest);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "floor_divide"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::get_iter"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->get_iter(interp, pmc);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->floor_divide(interp, pmc, value, dest);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-PMC* stub_floor_divide_int(PARROT_INTERP, PMC* pmc, INTVAL value, PMC* dest) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_get_namespace(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
     PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-    VTABLE_push_pmc(supervisor, params, dest);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "floor_divide_int"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::get_namespace"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->get_namespace(interp, pmc);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->floor_divide_int(interp, pmc, value, dest);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-PMC* stub_floor_divide_float(PARROT_INTERP, PMC* pmc, FLOATVAL value, PMC* dest) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+FLOATVAL stub_get_number(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    PMC* ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    FLOATVAL ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::fetch::get_number"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->get_number(interp, pmc);
+    ret_pack = instrument_pack_params(supervisor, "F", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Float);
-    VTABLE_set_number_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-    VTABLE_push_pmc(supervisor, params, dest);
+static
+FLOATVAL stub_get_number_keyed(PARROT_INTERP, PMC *pmc, PMC* key) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    FLOATVAL ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "PP", pmc, key);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::fetch::get_number_keyed"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->get_number_keyed(interp, pmc, key);
+    ret_pack = instrument_pack_params(supervisor, "F", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "floor_divide_float"));
+static
+FLOATVAL stub_get_number_keyed_int(PARROT_INTERP, PMC *pmc, INTVAL key) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    FLOATVAL ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "PI", pmc, key);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::fetch::get_number_keyed_int"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->get_number_keyed_int(interp, pmc, key);
+    ret_pack = instrument_pack_params(supervisor, "F", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->floor_divide_float(interp, pmc, value, dest);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-void stub_i_floor_divide(PARROT_INTERP, PMC* pmc, PMC* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+FLOATVAL stub_get_number_keyed_str(PARROT_INTERP, PMC *pmc, STRING* key) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    FLOATVAL ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "PS", pmc, key);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::fetch::get_number_keyed_str"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->get_number_keyed_str(interp, pmc, key);
+    ret_pack = instrument_pack_params(supervisor, "F", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, value);
+static
+PMC* stub_get_pmc(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    PMC* ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "i_floor_divide"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "i_floor_divide"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::fetch::get_pmc"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->get_pmc(interp, pmc);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ((_vtable *)orig_vtable)->i_floor_divide(interp, pmc, value);
-    return;
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
 }
 
 static
-void stub_i_floor_divide_int(PARROT_INTERP, PMC* pmc, INTVAL value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_get_pmc_keyed(PARROT_INTERP, PMC *pmc, PMC* key) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PP", pmc, key);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "i_floor_divide_int"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "i_floor_divide_int"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::fetch::get_pmc_keyed"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->get_pmc_keyed(interp, pmc, key);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ((_vtable *)orig_vtable)->i_floor_divide_int(interp, pmc, value);
-    return;
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
 }
 
 static
-void stub_i_floor_divide_float(PARROT_INTERP, PMC* pmc, FLOATVAL value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_get_pmc_keyed_int(PARROT_INTERP, PMC *pmc, INTVAL key) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PI", pmc, key);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Float);
-    VTABLE_set_number_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "i_floor_divide_float"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "i_floor_divide_float"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::fetch::get_pmc_keyed_int"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->get_pmc_keyed_int(interp, pmc, key);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ((_vtable *)orig_vtable)->i_floor_divide_float(interp, pmc, value);
-    return;
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
 }
 
 static
-PMC* stub_modulus(PARROT_INTERP, PMC* pmc, PMC* value, PMC* dest) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_get_pmc_keyed_str(PARROT_INTERP, PMC *pmc, STRING* key) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
     PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, value);
-    VTABLE_push_pmc(supervisor, params, dest);
+    params = instrument_pack_params(supervisor, "PS", pmc, key);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::fetch::get_pmc_keyed_str"));
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "modulus"));
-
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->get_pmc_keyed_str(interp, pmc, key);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->modulus(interp, pmc, value, dest);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-PMC* stub_modulus_int(PARROT_INTERP, PMC* pmc, INTVAL value, PMC* dest) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void* stub_get_pointer(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    PMC* ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    void* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::fetch::get_pointer"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->get_pointer(interp, pmc);
+    ret_pack = instrument_pack_params(supervisor, "V", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-    VTABLE_push_pmc(supervisor, params, dest);
+static
+void* stub_get_pointer_keyed(PARROT_INTERP, PMC *pmc, PMC* key) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    void* ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "PP", pmc, key);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::fetch::get_pointer_keyed"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->get_pointer_keyed(interp, pmc, key);
+    ret_pack = instrument_pack_params(supervisor, "V", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "modulus_int"));
+static
+void* stub_get_pointer_keyed_int(PARROT_INTERP, PMC *pmc, INTVAL key) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    void* ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "PI", pmc, key);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::fetch::get_pointer_keyed_int"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->get_pointer_keyed_int(interp, pmc, key);
+    ret_pack = instrument_pack_params(supervisor, "V", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->modulus_int(interp, pmc, value, dest);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-PMC* stub_modulus_float(PARROT_INTERP, PMC* pmc, FLOATVAL value, PMC* dest) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void* stub_get_pointer_keyed_str(PARROT_INTERP, PMC *pmc, STRING* key) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    PMC* ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    void* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "PS", pmc, key);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::fetch::get_pointer_keyed_str"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->get_pointer_keyed_str(interp, pmc, key);
+    ret_pack = instrument_pack_params(supervisor, "V", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Float);
-    VTABLE_set_number_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-    VTABLE_push_pmc(supervisor, params, dest);
+static
+STRING* stub_get_repr(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    STRING* ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::fetch::get_repr"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->get_repr(interp, pmc);
+    ret_pack = instrument_pack_params(supervisor, "S", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "modulus_float"));
+static
+STRING* stub_get_string(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    STRING* ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::fetch::get_string"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->get_string(interp, pmc);
+    ret_pack = instrument_pack_params(supervisor, "S", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->modulus_float(interp, pmc, value, dest);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-void stub_i_modulus(PARROT_INTERP, PMC* pmc, PMC* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+STRING* stub_get_string_keyed(PARROT_INTERP, PMC *pmc, PMC* key) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    STRING* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "PP", pmc, key);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::fetch::get_string_keyed"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->get_string_keyed(interp, pmc, key);
+    ret_pack = instrument_pack_params(supervisor, "S", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, value);
+static
+STRING* stub_get_string_keyed_int(PARROT_INTERP, PMC *pmc, INTVAL key) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    STRING* ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "PI", pmc, key);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::fetch::get_string_keyed_int"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->get_string_keyed_int(interp, pmc, key);
+    ret_pack = instrument_pack_params(supervisor, "S", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "i_modulus"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "i_modulus"));
+static
+STRING* stub_get_string_keyed_str(PARROT_INTERP, PMC *pmc, STRING* key) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    STRING* ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "PS", pmc, key);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::fetch::get_string_keyed_str"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->get_string_keyed_str(interp, pmc, key);
+    ret_pack = instrument_pack_params(supervisor, "S", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ((_vtable *)orig_vtable)->i_modulus(interp, pmc, value);
-    return;
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
 }
 
 static
-void stub_i_modulus_int(PARROT_INTERP, PMC* pmc, INTVAL value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_getprop(PARROT_INTERP, PMC *pmc, STRING* key) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PS", pmc, key);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "i_modulus_int"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "i_modulus_int"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::getprop"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->getprop(interp, pmc, key);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ((_vtable *)orig_vtable)->i_modulus_int(interp, pmc, value);
-    return;
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
 }
 
 static
-void stub_i_modulus_float(PARROT_INTERP, PMC* pmc, FLOATVAL value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_getprops(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Float);
-    VTABLE_set_number_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "i_modulus_float"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "i_modulus_float"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::getprops"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->getprops(interp, pmc);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ((_vtable *)orig_vtable)->i_modulus_float(interp, pmc, value);
-    return;
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
 }
 
 static
-void stub_increment(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+INTVAL stub_hashvalue(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    INTVAL ret;
+    PMC *ret_pack;
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::hashvalue"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->hashvalue(interp, pmc);
+    ret_pack = instrument_pack_params(supervisor, "I", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
+static
+void stub_i_absolute(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "increment"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "increment"));
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::i_absolute"));
 
-    ((_vtable *)orig_vtable)->increment(interp, pmc);
-    return;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->i_absolute(interp, pmc);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-void stub_decrement(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_i_add(PARROT_INTERP, PMC *pmc, PMC* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    params = instrument_pack_params(supervisor, "PP", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::i_add"));
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->i_add(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
 
+static
+void stub_i_add_float(PARROT_INTERP, PMC *pmc, FLOATVAL value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "decrement"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "decrement"));
+    params = instrument_pack_params(supervisor, "PF", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::i_add_float"));
 
-    ((_vtable *)orig_vtable)->decrement(interp, pmc);
-    return;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->i_add_float(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-PMC* stub_absolute(PARROT_INTERP, PMC* pmc, PMC* dest) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_i_add_int(PARROT_INTERP, PMC *pmc, INTVAL value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    PMC* ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PI", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, dest);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::i_add_int"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->i_add_int(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+static
+void stub_i_concatenate(PARROT_INTERP, PMC *pmc, PMC* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "absolute"));
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
+    params = instrument_pack_params(supervisor, "PP", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    ret = ((_vtable *)orig_vtable)->absolute(interp, pmc, dest);
-    return ret;
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::string::i_concatenate"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->i_concatenate(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-void stub_i_absolute(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_i_concatenate_str(PARROT_INTERP, PMC *pmc, STRING* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    params = instrument_pack_params(supervisor, "PS", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::string::i_concatenate_str"));
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->i_concatenate_str(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
 
+static
+void stub_i_divide(PARROT_INTERP, PMC *pmc, PMC* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "i_absolute"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "i_absolute"));
+    params = instrument_pack_params(supervisor, "PP", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::i_divide"));
 
-    ((_vtable *)orig_vtable)->i_absolute(interp, pmc);
-    return;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->i_divide(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-PMC* stub_neg(PARROT_INTERP, PMC* pmc, PMC* dest) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_i_divide_float(PARROT_INTERP, PMC *pmc, FLOATVAL value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    PMC* ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PF", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, dest);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::i_divide_float"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->i_divide_float(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+static
+void stub_i_divide_int(PARROT_INTERP, PMC *pmc, INTVAL value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "neg"));
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
+    params = instrument_pack_params(supervisor, "PI", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    ret = ((_vtable *)orig_vtable)->neg(interp, pmc, dest);
-    return ret;
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::i_divide_int"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->i_divide_int(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-void stub_i_neg(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_i_floor_divide(PARROT_INTERP, PMC *pmc, PMC* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    params = instrument_pack_params(supervisor, "PP", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::i_floor_divide"));
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->i_floor_divide(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
 
+static
+void stub_i_floor_divide_float(PARROT_INTERP, PMC *pmc, FLOATVAL value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "math"),
-                   CONST_STRING(supervisor, "i_neg"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "i_neg"));
+    params = instrument_pack_params(supervisor, "PF", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::i_floor_divide_float"));
 
-    ((_vtable *)orig_vtable)->i_neg(interp, pmc);
-    return;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->i_floor_divide_float(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-INTVAL stub_is_equal(PARROT_INTERP, PMC* pmc, PMC* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_i_floor_divide_int(PARROT_INTERP, PMC *pmc, INTVAL value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    INTVAL ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PI", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, value);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::i_floor_divide_int"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->i_floor_divide_int(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+static
+void stub_i_logical_not(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "cmp"),
-                   CONST_STRING(supervisor, "is_equal"));
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    ret = ((_vtable *)orig_vtable)->is_equal(interp, pmc, value);
-    return ret;
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::cmp::i_logical_not"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->i_logical_not(interp, pmc);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-INTVAL stub_is_equal_num(PARROT_INTERP, PMC* pmc, PMC* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_i_modulus(PARROT_INTERP, PMC *pmc, PMC* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    INTVAL ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PP", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, value);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::i_modulus"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->i_modulus(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
 
+static
+void stub_i_modulus_float(PARROT_INTERP, PMC *pmc, FLOATVAL value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "cmp"),
-                   CONST_STRING(supervisor, "is_equal_num"));
+    params = instrument_pack_params(supervisor, "PF", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::i_modulus_float"));
 
-    ret = ((_vtable *)orig_vtable)->is_equal_num(interp, pmc, value);
-    return ret;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->i_modulus_float(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-INTVAL stub_is_equal_string(PARROT_INTERP, PMC* pmc, PMC* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_i_modulus_int(PARROT_INTERP, PMC *pmc, INTVAL value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    INTVAL ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    params = instrument_pack_params(supervisor, "PI", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::i_modulus_int"));
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, value);
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->i_modulus_int(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
 
+static
+void stub_i_multiply(PARROT_INTERP, PMC *pmc, PMC* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "cmp"),
-                   CONST_STRING(supervisor, "is_equal_string"));
+    params = instrument_pack_params(supervisor, "PP", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::i_multiply"));
 
-    ret = ((_vtable *)orig_vtable)->is_equal_string(interp, pmc, value);
-    return ret;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->i_multiply(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-INTVAL stub_is_same(PARROT_INTERP, PMC* pmc, PMC* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_i_multiply_float(PARROT_INTERP, PMC *pmc, FLOATVAL value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    INTVAL ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PF", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, value);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::i_multiply_float"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->i_multiply_float(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
+
+static
+void stub_i_multiply_int(PARROT_INTERP, PMC *pmc, INTVAL value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "cmp"),
-                   CONST_STRING(supervisor, "is_same"));
+    params = instrument_pack_params(supervisor, "PI", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::i_multiply_int"));
 
-    ret = ((_vtable *)orig_vtable)->is_same(interp, pmc, value);
-    return ret;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->i_multiply_int(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-INTVAL stub_cmp(PARROT_INTERP, PMC* pmc, PMC* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_i_neg(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    INTVAL ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::i_neg"));
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, value);
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->i_neg(interp, pmc);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
 
+static
+void stub_i_repeat(PARROT_INTERP, PMC *pmc, PMC* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "cmp"),
-                   CONST_STRING(supervisor, "cmp"));
+    params = instrument_pack_params(supervisor, "PP", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::string::i_repeat"));
 
-    ret = ((_vtable *)orig_vtable)->cmp(interp, pmc, value);
-    return ret;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->i_repeat(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-INTVAL stub_cmp_num(PARROT_INTERP, PMC* pmc, PMC* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_i_repeat_int(PARROT_INTERP, PMC *pmc, INTVAL value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    INTVAL ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PI", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, value);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::string::i_repeat_int"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->i_repeat_int(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+static
+void stub_i_subtract(PARROT_INTERP, PMC *pmc, PMC* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "cmp"),
-                   CONST_STRING(supervisor, "cmp_num"));
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
+    params = instrument_pack_params(supervisor, "PP", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    ret = ((_vtable *)orig_vtable)->cmp_num(interp, pmc, value);
-    return ret;
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::i_subtract"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->i_subtract(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-INTVAL stub_cmp_string(PARROT_INTERP, PMC* pmc, PMC* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_i_subtract_float(PARROT_INTERP, PMC *pmc, FLOATVAL value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    INTVAL ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    params = instrument_pack_params(supervisor, "PF", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::i_subtract_float"));
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, value);
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->i_subtract_float(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
 
+static
+void stub_i_subtract_int(PARROT_INTERP, PMC *pmc, INTVAL value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "cmp"),
-                   CONST_STRING(supervisor, "cmp_string"));
+    params = instrument_pack_params(supervisor, "PI", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::i_subtract_int"));
 
-    ret = ((_vtable *)orig_vtable)->cmp_string(interp, pmc, value);
-    return ret;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->i_subtract_int(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-PMC* stub_cmp_pmc(PARROT_INTERP, PMC* pmc, PMC* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_increment(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    PMC* ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, value);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::increment"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->increment(interp, pmc);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
+
+static
+void stub_init(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "cmp"),
-                   CONST_STRING(supervisor, "cmp_pmc"));
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::init"));
 
-    ret = ((_vtable *)orig_vtable)->cmp_pmc(interp, pmc, value);
-    return ret;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->init(interp, pmc);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-PMC* stub_logical_or(PARROT_INTERP, PMC* pmc, PMC* value, PMC* dest) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_init_int(PARROT_INTERP, PMC *pmc, INTVAL initializer) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    PMC* ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PI", pmc, initializer);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, value);
-    VTABLE_push_pmc(supervisor, params, dest);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::init_int"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->init_int(interp, pmc, initializer);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+static
+void stub_init_pmc(PARROT_INTERP, PMC *pmc, PMC* initializer) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "cmp"),
-                   CONST_STRING(supervisor, "logical_or"));
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
+    params = instrument_pack_params(supervisor, "PP", pmc, initializer);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    ret = ((_vtable *)orig_vtable)->logical_or(interp, pmc, value, dest);
-    return ret;
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::init_pmc"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->init_pmc(interp, pmc, initializer);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-PMC* stub_logical_and(PARROT_INTERP, PMC* pmc, PMC* value, PMC* dest) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_inspect(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
     PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, value);
-    VTABLE_push_pmc(supervisor, params, dest);
-
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "cmp"),
-                   CONST_STRING(supervisor, "logical_and"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::inspect"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->inspect(interp, pmc);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->logical_and(interp, pmc, value, dest);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-PMC* stub_logical_xor(PARROT_INTERP, PMC* pmc, PMC* value, PMC* dest) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_inspect_str(PARROT_INTERP, PMC *pmc, STRING* what) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
     PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, value);
-    VTABLE_push_pmc(supervisor, params, dest);
-
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    params = instrument_pack_params(supervisor, "PS", pmc, what);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "cmp"),
-                   CONST_STRING(supervisor, "logical_xor"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::inspect_str"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->inspect_str(interp, pmc, what);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->logical_xor(interp, pmc, value, dest);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-PMC* stub_logical_not(PARROT_INTERP, PMC* pmc, PMC* dest) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_instantiate(PARROT_INTERP, PMC *pmc, PMC* sig) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
     PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, dest);
-
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    params = instrument_pack_params(supervisor, "PP", pmc, sig);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "cmp"),
-                   CONST_STRING(supervisor, "logical_not"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::instantiate"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->instantiate(interp, pmc, sig);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->logical_not(interp, pmc, dest);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-void stub_i_logical_not(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+opcode_t* stub_invoke(PARROT_INTERP, PMC *pmc, void* next) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    opcode_t* ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "PV", pmc, next);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::invoke"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->invoke(interp, pmc, next);
+    ret_pack = instrument_pack_params(supervisor, "V", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "cmp"),
-                   CONST_STRING(supervisor, "i_logical_not"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "i_logical_not"));
+static
+INTVAL stub_is_equal(PARROT_INTERP, PMC *pmc, PMC* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    INTVAL ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "PP", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::cmp::is_equal"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->is_equal(interp, pmc, value);
+    ret_pack = instrument_pack_params(supervisor, "I", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ((_vtable *)orig_vtable)->i_logical_not(interp, pmc);
-    return;
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
 }
 
 static
-PMC* stub_concatenate(PARROT_INTERP, PMC* pmc, PMC* value, PMC* dest) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+INTVAL stub_is_equal_num(PARROT_INTERP, PMC *pmc, PMC* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    PMC* ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    INTVAL ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "PP", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::cmp::is_equal_num"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->is_equal_num(interp, pmc, value);
+    ret_pack = instrument_pack_params(supervisor, "I", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, value);
-    VTABLE_push_pmc(supervisor, params, dest);
+static
+INTVAL stub_is_equal_string(PARROT_INTERP, PMC *pmc, PMC* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    INTVAL ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "PP", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::cmp::is_equal_string"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->is_equal_string(interp, pmc, value);
+    ret_pack = instrument_pack_params(supervisor, "I", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "string"),
-                   CONST_STRING(supervisor, "concatenate"));
+static
+INTVAL stub_is_same(PARROT_INTERP, PMC *pmc, PMC* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    INTVAL ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "PP", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::cmp::is_same"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->is_same(interp, pmc, value);
+    ret_pack = instrument_pack_params(supervisor, "I", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->concatenate(interp, pmc, value, dest);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-PMC* stub_concatenate_str(PARROT_INTERP, PMC* pmc, STRING* value, PMC* dest) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+INTVAL stub_isa(PARROT_INTERP, PMC *pmc, STRING* _class) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    PMC* ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-    VTABLE_push_pmc(supervisor, params, dest);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "string"),
-                   CONST_STRING(supervisor, "concatenate_str"));
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    INTVAL ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "PS", pmc, _class);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::isa"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->isa(interp, pmc, _class);
+    ret_pack = instrument_pack_params(supervisor, "I", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->concatenate_str(interp, pmc, value, dest);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-void stub_i_concatenate(PARROT_INTERP, PMC* pmc, PMC* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+INTVAL stub_isa_pmc(PARROT_INTERP, PMC *pmc, PMC* _class) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    INTVAL ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "PP", pmc, _class);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::isa_pmc"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->isa_pmc(interp, pmc, _class);
+    ret_pack = instrument_pack_params(supervisor, "I", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, value);
+static
+PMC* stub_logical_and(PARROT_INTERP, PMC *pmc, PMC* value, PMC* dest) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    PMC* ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    params = instrument_pack_params(supervisor, "PPP", pmc, value, dest);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "string"),
-                   CONST_STRING(supervisor, "i_concatenate"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "i_concatenate"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::cmp::logical_and"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->logical_and(interp, pmc, value, dest);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ((_vtable *)orig_vtable)->i_concatenate(interp, pmc, value);
-    return;
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
 }
 
 static
-void stub_i_concatenate_str(PARROT_INTERP, PMC* pmc, STRING* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_logical_not(PARROT_INTERP, PMC *pmc, PMC* dest) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PP", pmc, dest);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "string"),
-                   CONST_STRING(supervisor, "i_concatenate_str"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "i_concatenate_str"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::cmp::logical_not"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->logical_not(interp, pmc, dest);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ((_vtable *)orig_vtable)->i_concatenate_str(interp, pmc, value);
-    return;
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
 }
 
 static
-PMC* stub_repeat(PARROT_INTERP, PMC* pmc, PMC* value, PMC* dest) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_logical_or(PARROT_INTERP, PMC *pmc, PMC* value, PMC* dest) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
     PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, value);
-    VTABLE_push_pmc(supervisor, params, dest);
-
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    params = instrument_pack_params(supervisor, "PPP", pmc, value, dest);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "string"),
-                   CONST_STRING(supervisor, "repeat"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::cmp::logical_or"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->logical_or(interp, pmc, value, dest);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->repeat(interp, pmc, value, dest);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-PMC* stub_repeat_int(PARROT_INTERP, PMC* pmc, INTVAL value, PMC* dest) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_logical_xor(PARROT_INTERP, PMC *pmc, PMC* value, PMC* dest) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
     PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-    VTABLE_push_pmc(supervisor, params, dest);
-
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    params = instrument_pack_params(supervisor, "PPP", pmc, value, dest);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "string"),
-                   CONST_STRING(supervisor, "repeat_int"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::cmp::logical_xor"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->logical_xor(interp, pmc, value, dest);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->repeat_int(interp, pmc, value, dest);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-void stub_i_repeat(PARROT_INTERP, PMC* pmc, PMC* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_mark(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, value);
-
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "string"),
-                   CONST_STRING(supervisor, "i_repeat"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "i_repeat"));
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::mark"));
 
-    ((_vtable *)orig_vtable)->i_repeat(interp, pmc, value);
-    return;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->mark(interp, pmc);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-void stub_i_repeat_int(PARROT_INTERP, PMC* pmc, INTVAL value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_modulus(PARROT_INTERP, PMC *pmc, PMC* value, PMC* dest) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PPP", pmc, value, dest);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, value);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "string"),
-                   CONST_STRING(supervisor, "i_repeat_int"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "i_repeat_int"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::modulus"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->modulus(interp, pmc, value, dest);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ((_vtable *)orig_vtable)->i_repeat_int(interp, pmc, value);
-    return;
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
 }
 
 static
-void stub_substr(PARROT_INTERP, PMC* pmc, INTVAL offset, INTVAL length, PMC* dest) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_modulus_float(PARROT_INTERP, PMC *pmc, FLOATVAL value, PMC* dest) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PFP", pmc, value, dest);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, offset);
-    VTABLE_push_pmc(supervisor, params, temp);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, length);
-    VTABLE_push_pmc(supervisor, params, temp);
-    VTABLE_push_pmc(supervisor, params, dest);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "string"),
-                   CONST_STRING(supervisor, "substr"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::modulus_float"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->modulus_float(interp, pmc, value, dest);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ((_vtable *)orig_vtable)->substr(interp, pmc, offset, length, dest);
-    return;
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
 }
 
 static
-STRING* stub_substr_str(PARROT_INTERP, PMC* pmc, INTVAL offset, INTVAL length) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_modulus_int(PARROT_INTERP, PMC *pmc, INTVAL value, PMC* dest) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    STRING* ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PIP", pmc, value, dest);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, offset);
-    VTABLE_push_pmc(supervisor, params, temp);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, length);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "string"),
-                   CONST_STRING(supervisor, "substr_str"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::modulus_int"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->modulus_int(interp, pmc, value, dest);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->substr_str(interp, pmc, offset, length);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-INTVAL stub_exists_keyed(PARROT_INTERP, PMC* pmc, PMC* key) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_morph(PARROT_INTERP, PMC *pmc, PMC* type) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    INTVAL ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, key);
-
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "exists"),
-                   CONST_STRING(supervisor, "exists_keyed"));
+    params = instrument_pack_params(supervisor, "PP", pmc, type);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::morph"));
 
-    ret = ((_vtable *)orig_vtable)->exists_keyed(interp, pmc, key);
-    return ret;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->morph(interp, pmc, type);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-INTVAL stub_exists_keyed_int(PARROT_INTERP, PMC* pmc, INTVAL key) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_multiply(PARROT_INTERP, PMC *pmc, PMC* value, PMC* dest) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    INTVAL ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PPP", pmc, value, dest);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, key);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "exists"),
-                   CONST_STRING(supervisor, "exists_keyed_int"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::multiply"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->multiply(interp, pmc, value, dest);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->exists_keyed_int(interp, pmc, key);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-INTVAL stub_exists_keyed_str(PARROT_INTERP, PMC* pmc, STRING* key) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_multiply_float(PARROT_INTERP, PMC *pmc, FLOATVAL value, PMC* dest) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    INTVAL ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PFP", pmc, value, dest);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, key);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "exists"),
-                   CONST_STRING(supervisor, "exists_keyed_str"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::multiply_float"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->multiply_float(interp, pmc, value, dest);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->exists_keyed_str(interp, pmc, key);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-INTVAL stub_defined(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_multiply_int(PARROT_INTERP, PMC *pmc, INTVAL value, PMC* dest) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    INTVAL ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PIP", pmc, value, dest);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::multiply_int"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->multiply_int(interp, pmc, value, dest);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "defined"));
+static
+STRING* stub_name(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    STRING* ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::name"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->name(interp, pmc);
+    ret_pack = instrument_pack_params(supervisor, "S", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->defined(interp, pmc);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-INTVAL stub_defined_keyed(PARROT_INTERP, PMC* pmc, PMC* key) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_neg(PARROT_INTERP, PMC *pmc, PMC* dest) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    INTVAL ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PP", pmc, dest);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, key);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::neg"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->neg(interp, pmc, dest);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "defined_keyed"));
+static
+FLOATVAL stub_pop_float(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    FLOATVAL ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::pop::pop_float"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->pop_float(interp, pmc);
+    ret_pack = instrument_pack_params(supervisor, "F", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->defined_keyed(interp, pmc, key);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-INTVAL stub_defined_keyed_int(PARROT_INTERP, PMC* pmc, INTVAL key) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+INTVAL stub_pop_integer(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
     INTVAL ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, key);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "defined_keyed_int"));
-
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::pop::pop_integer"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->pop_integer(interp, pmc);
+    ret_pack = instrument_pack_params(supervisor, "I", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->defined_keyed_int(interp, pmc, key);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-INTVAL stub_defined_keyed_str(PARROT_INTERP, PMC* pmc, STRING* key) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_pop_pmc(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    INTVAL ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, key);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "defined_keyed_str"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::pop::pop_pmc"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->pop_pmc(interp, pmc);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->defined_keyed_str(interp, pmc, key);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-void stub_delete_keyed(PARROT_INTERP, PMC* pmc, PMC* key) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+STRING* stub_pop_string(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    STRING* ret;
+    PMC *ret_pack;
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::pop::pop_string"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->pop_string(interp, pmc);
+    ret_pack = instrument_pack_params(supervisor, "S", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, key);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
+static
+void stub_push_float(PARROT_INTERP, PMC *pmc, FLOATVAL value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "delete_keyed"));
+    params = instrument_pack_params(supervisor, "PF", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::push::push_float"));
 
-    ((_vtable *)orig_vtable)->delete_keyed(interp, pmc, key);
-    return;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->push_float(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-void stub_delete_keyed_int(PARROT_INTERP, PMC* pmc, INTVAL key) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_push_integer(PARROT_INTERP, PMC *pmc, INTVAL value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, key);
-    VTABLE_push_pmc(supervisor, params, temp);
-
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "delete_keyed_int"));
+    params = instrument_pack_params(supervisor, "PI", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::push::push_integer"));
 
-    ((_vtable *)orig_vtable)->delete_keyed_int(interp, pmc, key);
-    return;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->push_integer(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-void stub_delete_keyed_str(PARROT_INTERP, PMC* pmc, STRING* key) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_push_pmc(PARROT_INTERP, PMC *pmc, PMC* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, key);
-    VTABLE_push_pmc(supervisor, params, temp);
-
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "delete_keyed_str"));
+    params = instrument_pack_params(supervisor, "PP", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::push::push_pmc"));
 
-    ((_vtable *)orig_vtable)->delete_keyed_str(interp, pmc, key);
-    return;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->push_pmc(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-PMC* stub_get_iter(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_push_string(PARROT_INTERP, PMC *pmc, STRING* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    PMC* ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    params = instrument_pack_params(supervisor, "PS", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::push::push_string"));
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->push_string(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
 
+static
+void stub_remove_attribute(PARROT_INTERP, PMC *pmc, STRING* name) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "get_iter"));
+    params = instrument_pack_params(supervisor, "PS", pmc, name);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::remove_attribute"));
 
-    ret = ((_vtable *)orig_vtable)->get_iter(interp, pmc);
-    return ret;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->remove_attribute(interp, pmc, name);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-INTVAL stub_hashvalue(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_remove_method(PARROT_INTERP, PMC *pmc, STRING* method_name) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    INTVAL ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PS", pmc, method_name);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::remove_method"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->remove_method(interp, pmc, method_name);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
+
+static
+void stub_remove_parent(PARROT_INTERP, PMC *pmc, PMC* parent) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "hashvalue"));
+    params = instrument_pack_params(supervisor, "PP", pmc, parent);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::remove_parent"));
 
-    ret = ((_vtable *)orig_vtable)->hashvalue(interp, pmc);
-    return ret;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->remove_parent(interp, pmc, parent);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-opcode_t* stub_invoke(PARROT_INTERP, PMC* pmc, void* next) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_remove_role(PARROT_INTERP, PMC *pmc, PMC* role) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    opcode_t* ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Pointer);
-    VTABLE_set_pointer(supervisor, temp, next);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "invoke"));
+    params = instrument_pack_params(supervisor, "PP", pmc, role);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::remove_role"));
 
-    ret = ((_vtable *)orig_vtable)->invoke(interp, pmc, next);
-    return ret;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->remove_role(interp, pmc, role);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-INTVAL stub_can(PARROT_INTERP, PMC* pmc, STRING* method) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_remove_vtable_override(PARROT_INTERP, PMC *pmc, STRING* vtable_name) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    INTVAL ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, method);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "can"));
+    params = instrument_pack_params(supervisor, "PS", pmc, vtable_name);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::remove_vtable_override"));
 
-    ret = ((_vtable *)orig_vtable)->can(interp, pmc, method);
-    return ret;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->remove_vtable_override(interp, pmc, vtable_name);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-INTVAL stub_does_pmc(PARROT_INTERP, PMC* pmc, PMC* role) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_repeat(PARROT_INTERP, PMC *pmc, PMC* value, PMC* dest) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    INTVAL ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
-
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
-
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, role);
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    PMC* ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    params = instrument_pack_params(supervisor, "PPP", pmc, value, dest);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "does_pmc"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::string::repeat"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->repeat(interp, pmc, value, dest);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->does_pmc(interp, pmc, role);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-INTVAL stub_does(PARROT_INTERP, PMC* pmc, STRING* role) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_repeat_int(PARROT_INTERP, PMC *pmc, INTVAL value, PMC* dest) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    INTVAL ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PIP", pmc, value, dest);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, role);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "does"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::string::repeat_int"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->repeat_int(interp, pmc, value, dest);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->does(interp, pmc, role);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-INTVAL stub_isa_pmc(PARROT_INTERP, PMC* pmc, PMC* _class) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_set_attr_keyed(PARROT_INTERP, PMC *pmc, PMC* key, STRING* idx, PMC* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    INTVAL ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PPSP", pmc, key, idx, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, _class);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::set_attr_keyed"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->set_attr_keyed(interp, pmc, key, idx, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+static
+void stub_set_attr_str(PARROT_INTERP, PMC *pmc, STRING* idx, PMC* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "isa_pmc"));
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
+    params = instrument_pack_params(supervisor, "PSP", pmc, idx, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    ret = ((_vtable *)orig_vtable)->isa_pmc(interp, pmc, _class);
-    return ret;
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::set_attr_str"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->set_attr_str(interp, pmc, idx, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-INTVAL stub_isa(PARROT_INTERP, PMC* pmc, STRING* _class) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_set_bool(PARROT_INTERP, PMC *pmc, INTVAL value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    INTVAL ret;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, _class);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "isa"));
+    params = instrument_pack_params(supervisor, "PI", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::store::set_bool"));
 
-    ret = ((_vtable *)orig_vtable)->isa(interp, pmc, _class);
-    return ret;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->set_bool(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-PMC* stub_get_attr_str(PARROT_INTERP, PMC* pmc, STRING* idx) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_set_integer_keyed(PARROT_INTERP, PMC *pmc, PMC* key, INTVAL value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    PMC* ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    params = instrument_pack_params(supervisor, "PPI", pmc, key, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::store::set_integer_keyed"));
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, idx);
-    VTABLE_push_pmc(supervisor, params, temp);
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->set_integer_keyed(interp, pmc, key, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
 
+static
+void stub_set_integer_keyed_int(PARROT_INTERP, PMC *pmc, INTVAL key, INTVAL value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "get_attr_str"));
+    params = instrument_pack_params(supervisor, "PII", pmc, key, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::store::set_integer_keyed_int"));
 
-    ret = ((_vtable *)orig_vtable)->get_attr_str(interp, pmc, idx);
-    return ret;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->set_integer_keyed_int(interp, pmc, key, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-PMC* stub_get_attr_keyed(PARROT_INTERP, PMC* pmc, PMC* key, STRING* idx) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_set_integer_keyed_str(PARROT_INTERP, PMC *pmc, STRING* key, INTVAL value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    PMC* ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PSI", pmc, key, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, key);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, idx);
-    VTABLE_push_pmc(supervisor, params, temp);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::store::set_integer_keyed_str"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->set_integer_keyed_str(interp, pmc, key, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
+
+static
+void stub_set_integer_native(PARROT_INTERP, PMC *pmc, INTVAL value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "get_attr_keyed"));
+    params = instrument_pack_params(supervisor, "PI", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::store::set_integer_native"));
 
-    ret = ((_vtable *)orig_vtable)->get_attr_keyed(interp, pmc, key, idx);
-    return ret;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->set_integer_native(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-void stub_set_attr_str(PARROT_INTERP, PMC* pmc, STRING* idx, PMC* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_set_number_keyed(PARROT_INTERP, PMC *pmc, PMC* key, FLOATVAL value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, idx);
-    VTABLE_push_pmc(supervisor, params, temp);
-    VTABLE_push_pmc(supervisor, params, value);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "set_attr_str"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "set_attr_str"));
+    params = instrument_pack_params(supervisor, "PPF", pmc, key, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::store::set_number_keyed"));
 
-    ((_vtable *)orig_vtable)->set_attr_str(interp, pmc, idx, value);
-    return;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->set_number_keyed(interp, pmc, key, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-void stub_set_attr_keyed(PARROT_INTERP, PMC* pmc, PMC* key, STRING* idx, PMC* value) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_set_number_keyed_int(PARROT_INTERP, PMC *pmc, INTVAL key, FLOATVAL value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, key);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, idx);
-    VTABLE_push_pmc(supervisor, params, temp);
-    VTABLE_push_pmc(supervisor, params, value);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "set_attr_keyed"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "set_attr_keyed"));
+    params = instrument_pack_params(supervisor, "PIF", pmc, key, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::store::set_number_keyed_int"));
 
-    ((_vtable *)orig_vtable)->set_attr_keyed(interp, pmc, key, idx, value);
-    return;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->set_number_keyed_int(interp, pmc, key, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-PMC* stub_get_class(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_set_number_keyed_str(PARROT_INTERP, PMC *pmc, STRING* key, FLOATVAL value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    PMC* ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    params = instrument_pack_params(supervisor, "PSF", pmc, key, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::store::set_number_keyed_str"));
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->set_number_keyed_str(interp, pmc, key, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
 
+static
+void stub_set_number_native(PARROT_INTERP, PMC *pmc, FLOATVAL value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "get_class"));
+    params = instrument_pack_params(supervisor, "PF", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::store::set_number_native"));
 
-    ret = ((_vtable *)orig_vtable)->get_class(interp, pmc);
-    return ret;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->set_number_native(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-void stub_add_parent(PARROT_INTERP, PMC* pmc, PMC* parent) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_set_pmc(PARROT_INTERP, PMC *pmc, PMC* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    params = instrument_pack_params(supervisor, "PP", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::store::set_pmc"));
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, parent);
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->set_pmc(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
 
+static
+void stub_set_pmc_keyed(PARROT_INTERP, PMC *pmc, PMC* key, PMC* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "add_parent"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "add_parent"));
+    params = instrument_pack_params(supervisor, "PPP", pmc, key, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::store::set_pmc_keyed"));
 
-    ((_vtable *)orig_vtable)->add_parent(interp, pmc, parent);
-    return;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->set_pmc_keyed(interp, pmc, key, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-void stub_remove_parent(PARROT_INTERP, PMC* pmc, PMC* parent) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_set_pmc_keyed_int(PARROT_INTERP, PMC *pmc, INTVAL key, PMC* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PIP", pmc, key, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, parent);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::store::set_pmc_keyed_int"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->set_pmc_keyed_int(interp, pmc, key, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
+
+static
+void stub_set_pmc_keyed_str(PARROT_INTERP, PMC *pmc, STRING* key, PMC* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "remove_parent"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "remove_parent"));
+    params = instrument_pack_params(supervisor, "PSP", pmc, key, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::store::set_pmc_keyed_str"));
 
-    ((_vtable *)orig_vtable)->remove_parent(interp, pmc, parent);
-    return;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->set_pmc_keyed_str(interp, pmc, key, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-void stub_add_role(PARROT_INTERP, PMC* pmc, PMC* role) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_set_pointer(PARROT_INTERP, PMC *pmc, void* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    params = instrument_pack_params(supervisor, "PV", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::store::set_pointer"));
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, role);
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->set_pointer(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
 
+static
+void stub_set_pointer_keyed(PARROT_INTERP, PMC *pmc, PMC* key, void* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "add_role"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "add_role"));
+    params = instrument_pack_params(supervisor, "PPV", pmc, key, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::store::set_pointer_keyed"));
 
-    ((_vtable *)orig_vtable)->add_role(interp, pmc, role);
-    return;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->set_pointer_keyed(interp, pmc, key, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-void stub_remove_role(PARROT_INTERP, PMC* pmc, PMC* role) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_set_pointer_keyed_int(PARROT_INTERP, PMC *pmc, INTVAL key, void* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PIV", pmc, key, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, role);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::store::set_pointer_keyed_int"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->set_pointer_keyed_int(interp, pmc, key, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+static
+void stub_set_pointer_keyed_str(PARROT_INTERP, PMC *pmc, STRING* key, void* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "remove_role"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "remove_role"));
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
+    params = instrument_pack_params(supervisor, "PSV", pmc, key, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    ((_vtable *)orig_vtable)->remove_role(interp, pmc, role);
-    return;
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::store::set_pointer_keyed_str"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->set_pointer_keyed_str(interp, pmc, key, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-void stub_add_attribute(PARROT_INTERP, PMC* pmc, STRING* name, PMC* type) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_set_string_keyed(PARROT_INTERP, PMC *pmc, PMC* key, STRING* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, name);
-    VTABLE_push_pmc(supervisor, params, temp);
-    VTABLE_push_pmc(supervisor, params, type);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "add_attribute"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "add_attribute"));
+    params = instrument_pack_params(supervisor, "PPS", pmc, key, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::store::set_string_keyed"));
 
-    ((_vtable *)orig_vtable)->add_attribute(interp, pmc, name, type);
-    return;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->set_string_keyed(interp, pmc, key, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-void stub_remove_attribute(PARROT_INTERP, PMC* pmc, STRING* name) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_set_string_keyed_int(PARROT_INTERP, PMC *pmc, INTVAL key, STRING* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, name);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "remove_attribute"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "remove_attribute"));
+    params = instrument_pack_params(supervisor, "PIS", pmc, key, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::store::set_string_keyed_int"));
 
-    ((_vtable *)orig_vtable)->remove_attribute(interp, pmc, name);
-    return;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->set_string_keyed_int(interp, pmc, key, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-void stub_add_method(PARROT_INTERP, PMC* pmc, STRING* method_name, PMC* sub_pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_set_string_keyed_str(PARROT_INTERP, PMC *pmc, STRING* key, STRING* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, method_name);
-    VTABLE_push_pmc(supervisor, params, temp);
-    VTABLE_push_pmc(supervisor, params, sub_pmc);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "add_method"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "add_method"));
+    params = instrument_pack_params(supervisor, "PSS", pmc, key, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::store::set_string_keyed_str"));
 
-    ((_vtable *)orig_vtable)->add_method(interp, pmc, method_name, sub_pmc);
-    return;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->set_string_keyed_str(interp, pmc, key, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-void stub_remove_method(PARROT_INTERP, PMC* pmc, STRING* method_name) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_set_string_native(PARROT_INTERP, PMC *pmc, STRING* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, method_name);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "remove_method"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "remove_method"));
+    params = instrument_pack_params(supervisor, "PS", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::store::set_string_native"));
 
-    ((_vtable *)orig_vtable)->remove_method(interp, pmc, method_name);
-    return;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->set_string_native(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-void stub_add_vtable_override(PARROT_INTERP, PMC* pmc, STRING* vtable_name, PMC* sub_pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_setprop(PARROT_INTERP, PMC *pmc, STRING* key, PMC* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, vtable_name);
-    VTABLE_push_pmc(supervisor, params, temp);
-    VTABLE_push_pmc(supervisor, params, sub_pmc);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "add_vtable_override"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "add_vtable_override"));
+    params = instrument_pack_params(supervisor, "PSP", pmc, key, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::setprop"));
 
-    ((_vtable *)orig_vtable)->add_vtable_override(interp, pmc, vtable_name, sub_pmc);
-    return;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->setprop(interp, pmc, key, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-void stub_remove_vtable_override(PARROT_INTERP, PMC* pmc, STRING* vtable_name) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_share(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, vtable_name);
-    VTABLE_push_pmc(supervisor, params, temp);
-
-
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
-
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "remove_vtable_override"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "remove_vtable_override"));
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::share"));
 
-    ((_vtable *)orig_vtable)->remove_vtable_override(interp, pmc, vtable_name);
-    return;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->share(interp, pmc);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-PMC* stub_inspect(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_share_ro(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
     PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::share_ro"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->share_ro(interp, pmc);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "inspect"));
+static
+FLOATVAL stub_shift_float(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    FLOATVAL ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::shift::shift_float"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->shift_float(interp, pmc);
+    ret_pack = instrument_pack_params(supervisor, "F", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->inspect(interp, pmc);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-PMC* stub_inspect_str(PARROT_INTERP, PMC* pmc, STRING* what) {
-    PMC *instr_vt, *data;
+INTVAL stub_shift_integer(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
     void *orig_vtable;
+    INTVAL ret;
+    PMC *ret_pack;
+
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::shift::shift_integer"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->shift_integer(interp, pmc);
+    ret_pack = instrument_pack_params(supervisor, "I", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
+
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
+
+static
+PMC* stub_shift_pmc(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
     PMC* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_String);
-    VTABLE_set_string_native(supervisor, temp, what);
-    VTABLE_push_pmc(supervisor, params, temp);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::shift::shift_pmc"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->shift_pmc(interp, pmc);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "inspect_str"));
+static
+STRING* stub_shift_string(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    STRING* ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::shift::shift_string"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->shift_string(interp, pmc);
+    ret_pack = instrument_pack_params(supervisor, "S", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ret = ((_vtable *)orig_vtable)->inspect_str(interp, pmc, what);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
     return ret;
 }
 
 static
-void stub_freeze(PARROT_INTERP, PMC* pmc, PMC* info) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_splice(PARROT_INTERP, PMC *pmc, PMC* value, INTVAL offset, INTVAL count) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    params = instrument_pack_params(supervisor, "PPII", pmc, value, offset, count);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::splice::splice"));
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, info);
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->splice(interp, pmc, value, offset, count);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
 
+static
+void stub_substr(PARROT_INTERP, PMC *pmc, INTVAL offset, INTVAL length, PMC* dest) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "freeze"));
+    params = instrument_pack_params(supervisor, "PIIP", pmc, offset, length, dest);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::string::substr"));
 
-    ((_vtable *)orig_vtable)->freeze(interp, pmc, info);
-    return;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->substr(interp, pmc, offset, length, dest);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-void stub_thaw(PARROT_INTERP, PMC* pmc, PMC* info) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+STRING* stub_substr_str(PARROT_INTERP, PMC *pmc, INTVAL offset, INTVAL length) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    STRING* ret;
+    PMC *ret_pack;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "PII", pmc, offset, length);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::string::substr_str"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->substr_str(interp, pmc, offset, length);
+    ret_pack = instrument_pack_params(supervisor, "S", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, info);
+static
+PMC* stub_subtract(PARROT_INTERP, PMC *pmc, PMC* value, PMC* dest) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    PMC* ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    params = instrument_pack_params(supervisor, "PPP", pmc, value, dest);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "thaw"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "thaw"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::subtract"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->subtract(interp, pmc, value, dest);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ((_vtable *)orig_vtable)->thaw(interp, pmc, info);
-    return;
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
 }
 
 static
-void stub_thawfinish(PARROT_INTERP, PMC* pmc, PMC* info) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+PMC* stub_subtract_float(PARROT_INTERP, PMC *pmc, FLOATVAL value, PMC* dest) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    PMC* ret;
+    PMC *ret_pack;
+
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    params = instrument_pack_params(supervisor, "PFP", pmc, value, dest);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::subtract_float"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->subtract_float(interp, pmc, value, dest);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
+
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, info);
+static
+PMC* stub_subtract_int(PARROT_INTERP, PMC *pmc, INTVAL value, PMC* dest) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    PMC* ret;
+    PMC *ret_pack;
 
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    params = instrument_pack_params(supervisor, "PIP", pmc, value, dest);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "thawfinish"));
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "write"),
-                   CONST_STRING(supervisor, "thawfinish"));
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::math::subtract_int"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->subtract_int(interp, pmc, value, dest);
+    ret_pack = instrument_pack_params(supervisor, "P", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    ((_vtable *)orig_vtable)->thawfinish(interp, pmc, info);
-    return;
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
 }
 
 static
-void stub_visit(PARROT_INTERP, PMC* pmc, PMC* info) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_thaw(PARROT_INTERP, PMC *pmc, PMC* info) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
+
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    params = instrument_pack_params(supervisor, "PP", pmc, info);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::thaw"));
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    VTABLE_push_pmc(supervisor, params, info);
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->thaw(interp, pmc, info);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
 
+static
+void stub_thawfinish(PARROT_INTERP, PMC *pmc, PMC* info) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "visit"));
+    params = instrument_pack_params(supervisor, "PP", pmc, info);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::thawfinish"));
 
-    ((_vtable *)orig_vtable)->visit(interp, pmc, info);
-    return;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->thawfinish(interp, pmc, info);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-void stub_share(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+INTVAL stub_type(PARROT_INTERP, PMC *pmc) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    STRING *raise_event, *event;
+    void *orig_vtable;
+    INTVAL ret;
+    PMC *ret_pack;
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
+
+    params = instrument_pack_params(supervisor, "P", pmc);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
+
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::type"));
+
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ret = ((_vtable *)orig_vtable)->type(interp, pmc);
+    ret_pack = instrument_pack_params(supervisor, "I", ret);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "return"), ret_pack);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+    return ret;
+}
 
+static
+void stub_unshift_float(PARROT_INTERP, PMC *pmc, FLOATVAL value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "share"));
+    params = instrument_pack_params(supervisor, "PF", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::unshift::unshift_float"));
 
-    ((_vtable *)orig_vtable)->share(interp, pmc);
-    return;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->unshift_float(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-PMC* stub_share_ro(PARROT_INTERP, PMC* pmc) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_unshift_integer(PARROT_INTERP, PMC *pmc, INTVAL value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
-    PMC* ret;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PI", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::unshift::unshift_integer"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->unshift_integer(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
+
+static
+void stub_unshift_pmc(PARROT_INTERP, PMC *pmc, PMC* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "share_ro"));
+    params = instrument_pack_params(supervisor, "PP", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::unshift::unshift_pmc"));
 
-    ret = ((_vtable *)orig_vtable)->share_ro(interp, pmc);
-    return ret;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->unshift_pmc(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 static
-void stub_init_int(PARROT_INTERP, PMC* pmc, INTVAL initializer) {
-    PMC *instr_vt, *data;
-    void *orig_vtable;
+void stub_unshift_string(PARROT_INTERP, PMC *pmc, STRING* value) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
     Parrot_Interp supervisor;
-    PMC *temp;
-    PMC *params;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    instr_vt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    GETATTR_InstrumentVtable_original_struct(interp, instr_vt, orig_vtable);
-    GETATTR_InstrumentVtable_supervisor(interp, instr_vt, supervisor);
+    params = instrument_pack_params(supervisor, "PS", pmc, value);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
-    params = Parrot_pmc_new(supervisor, enum_class_ResizablePMCArray);
-    VTABLE_push_pmc(supervisor, params, pmc);
-    temp = Parrot_pmc_new(supervisor, enum_class_Integer);
-    VTABLE_set_integer_native(supervisor, temp, initializer);
-    VTABLE_push_pmc(supervisor, params, temp);
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::unshift::unshift_string"));
 
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->unshift_string(interp, pmc, value);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
+}
+
+static
+void stub_visit(PARROT_INTERP, PMC *pmc, PMC* info) {
+    PMC *instrument, *instrumentvt, *params, *data, *event_array, *recall;
+    Parrot_Interp supervisor;
+    STRING *raise_event, *event;
+    void *orig_vtable;
 
-    data = Parrot_pmc_new(supervisor, enum_class_Hash);
-    VTABLE_set_pmc_keyed_str(supervisor, data,
-        CONST_STRING(supervisor, "parameters"),
-        params);
+    instrumentvt = (PMC *) parrot_hash_get(interp, vtable_registry, pmc->vtable);
+    GETATTR_InstrumentVtable_original_struct(interp, instrumentvt, orig_vtable);
+    GETATTR_InstrumentVtable_supervisor(interp, instrumentvt, supervisor);
+    GETATTR_InstrumentVtable_event_prefix(interp, instrumentvt, event_array);
 
-    raise_vtable_event(supervisor, interp, instr_vt, pmc, data,
-                   CONST_STRING(supervisor, "main"),
-                   CONST_STRING(supervisor, "init_int"));
+    params = instrument_pack_params(supervisor, "PP", pmc, info);
+    data   = Parrot_pmc_new(supervisor, enum_class_Hash);
+    VTABLE_set_pmc_keyed_str(supervisor, data, CONST_STRING(supervisor, "parameters"), params);
 
+    event_array = VTABLE_clone(supervisor, event_array);
+    VTABLE_push_string(supervisor, event_array,
+                       CONST_STRING(supervisor, "vtable::main::visit"));
 
-    ((_vtable *)orig_vtable)->init_int(interp, pmc, initializer);
-    return;
+    raise_event = CONST_STRING(supervisor, "raise_event");
+    event       = Parrot_str_join(supervisor, CONST_STRING(supervisor, "::"), event_array);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, &recall);
+    ((_vtable *)orig_vtable)->visit(interp, pmc, info);
+    Parrot_pcc_invoke_method_from_c_args(supervisor, instrument, raise_event, "SP->P",
+        event, data, recall, &recall);
+    probe_list_delete_list(supervisor, (probe_list_t *)VTABLE_get_pointer(supervisor, recall));
 }
 
 /* END vtable stubs */


More information about the parrot-commits mailing list