[svn:parrot] r40673 - in trunk: include/parrot src src/interp

NotFound at svn.parrot.org NotFound at svn.parrot.org
Thu Aug 20 11:05:42 UTC 2009


Author: NotFound
Date: Thu Aug 20 11:05:41 2009
New Revision: 40673
URL: https://trac.parrot.org/parrot/changeset/40673

Log:
[core] initialize vtables for core PMC at an earlier stage

Modified:
   trunk/include/parrot/vtables.h
   trunk/src/global_setup.c
   trunk/src/interp/inter_create.c
   trunk/src/vtables.c

Modified: trunk/include/parrot/vtables.h
==============================================================================
--- trunk/include/parrot/vtables.h	Thu Aug 20 09:28:47 2009	(r40672)
+++ trunk/include/parrot/vtables.h	Thu Aug 20 11:05:41 2009	(r40673)
@@ -32,6 +32,10 @@
         FUNC_MODIFIES(*vtable);
 
 PARROT_EXPORT
+void Parrot_initialize_core_vtables(PARROT_INTERP)
+        __attribute__nonnull__(1);
+
+PARROT_EXPORT
 PARROT_MALLOC
 PARROT_CANNOT_RETURN_NULL
 VTABLE * Parrot_new_vtable(SHIM_INTERP);
@@ -54,6 +58,9 @@
 #define ASSERT_ARGS_Parrot_destroy_vtable __attribute__unused__ int _ASSERT_ARGS_CHECK = \
        PARROT_ASSERT_ARG(interp) \
     || PARROT_ASSERT_ARG(vtable)
+#define ASSERT_ARGS_Parrot_initialize_core_vtables \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+       PARROT_ASSERT_ARG(interp)
 #define ASSERT_ARGS_Parrot_new_vtable __attribute__unused__ int _ASSERT_ARGS_CHECK = 0
 #define ASSERT_ARGS_mark_vtables __attribute__unused__ int _ASSERT_ARGS_CHECK = \
        PARROT_ASSERT_ARG(interp)

Modified: trunk/src/global_setup.c
==============================================================================
--- trunk/src/global_setup.c	Thu Aug 20 09:28:47 2009	(r40672)
+++ trunk/src/global_setup.c	Thu Aug 20 11:05:41 2009	(r40673)
@@ -164,10 +164,7 @@
     Parrot_platform_init_code();
 #endif
 
-    parrot_alloc_vtables(interp);
-
     /* Call base vtable class constructor methods */
-    Parrot_initialize_core_pmcs(interp, 0);
     parrot_global_setup_2(interp);
     Parrot_initialize_core_pmcs(interp, 1);
 

Modified: trunk/src/interp/inter_create.c
==============================================================================
--- trunk/src/interp/inter_create.c	Thu Aug 20 09:28:47 2009	(r40672)
+++ trunk/src/interp/inter_create.c	Thu Aug 20 11:05:41 2009	(r40673)
@@ -178,6 +178,8 @@
      */
     Parrot_str_init(interp);
 
+    Parrot_initialize_core_vtables(interp);
+
     /* Set up the MMD struct */
     interp->binop_mmd_funcs = NULL;
 

Modified: trunk/src/vtables.c
==============================================================================
--- trunk/src/vtables.c	Thu Aug 20 09:28:47 2009	(r40672)
+++ trunk/src/vtables.c	Thu Aug 20 11:05:41 2009	(r40673)
@@ -19,6 +19,10 @@
 #include "parrot/parrot.h"
 #include "parrot/vtables.h"
 
+/* This function is defined in the auto-generated file core_pmcs.c */
+/* XXX Get it into some public place */
+extern void Parrot_initialize_core_pmcs(PARROT_INTERP, int pass);
+
 /* HEADERIZER HFILE: include/parrot/vtables.h */
 
 /*
@@ -222,6 +226,28 @@
 }
 
 /*
+
+=item C<void Parrot_initialize_core_vtables(PARROT_INTERP)>
+
+Initialize vtables for the core PMCs.
+
+=cut
+
+*/
+
+PARROT_EXPORT
+void
+Parrot_initialize_core_vtables(PARROT_INTERP)
+{
+    ASSERT_ARGS(Parrot_initialize_core_vtables)
+
+    if (! interp->vtables) {
+        parrot_alloc_vtables(interp);
+        Parrot_initialize_core_pmcs(interp, 0);
+    }
+}
+
+/*
  * Local variables:
  *   c-file-style: "parrot"
  * End:


More information about the parrot-commits mailing list