Remove global class registry

Replaced by the class array in CFCParcel.


Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/682278c4
Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/682278c4
Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/682278c4

Branch: refs/heads/master
Commit: 682278c45ec3f72ace0412317c5e68b16032ec0a
Parents: 81cdda1
Author: Nick Wellnhofer <[email protected]>
Authored: Tue Feb 28 00:45:46 2017 +0100
Committer: Nick Wellnhofer <[email protected]>
Committed: Thu Mar 2 20:08:04 2017 +0100

----------------------------------------------------------------------
 compiler/c/cfc.c                   |  1 -
 compiler/perl/lib/Clownfish/CFC.pm |  1 -
 compiler/perl/lib/Clownfish/CFC.xs | 16 -------
 compiler/perl/t/401-class.t        |  3 --
 compiler/perl/t/404-file.t         |  2 -
 compiler/perl/t/600-parser.t       |  1 -
 compiler/src/CFCClass.c            | 74 ---------------------------------
 compiler/src/CFCClass.h            | 20 ---------
 compiler/src/CFCHierarchy.c        | 18 ++++----
 compiler/src/CFCParcel.c           | 26 ++++++++++++
 compiler/src/CFCTestClass.c        |  1 -
 compiler/src/CFCTestFile.c         |  2 -
 compiler/src/CFCTestHierarchy.c    |  6 ---
 compiler/src/CFCTestMethod.c       |  4 --
 compiler/src/CFCTestParamList.c    |  1 -
 compiler/src/CFCTestParcel.c       |  1 -
 compiler/src/CFCTestParser.c       |  2 -
 compiler/src/CFCTestType.c         |  2 -
 compiler/src/CFCTestVariable.c     |  1 -
 19 files changed, 36 insertions(+), 146 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/682278c4/compiler/c/cfc.c
----------------------------------------------------------------------
diff --git a/compiler/c/cfc.c b/compiler/c/cfc.c
index 21bd989..2d92659 100644
--- a/compiler/c/cfc.c
+++ b/compiler/c/cfc.c
@@ -263,7 +263,6 @@ main(int argc, char **argv) {
     FREEMEM(header);
     FREEMEM(footer);
 
-    CFCClass_clear_registry();
     CFCDocument_clear_registry();
     CFCParcel_reap_singletons();
 

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/682278c4/compiler/perl/lib/Clownfish/CFC.pm
----------------------------------------------------------------------
diff --git a/compiler/perl/lib/Clownfish/CFC.pm 
b/compiler/perl/lib/Clownfish/CFC.pm
index cd6dae0..3a11a78 100644
--- a/compiler/perl/lib/Clownfish/CFC.pm
+++ b/compiler/perl/lib/Clownfish/CFC.pm
@@ -22,7 +22,6 @@ $VERSION = eval $VERSION;
 our $MAJOR_VERSION = 0.006000;
 
 END {
-    Clownfish::CFC::Model::Class->_clear_registry();
     Clownfish::CFC::Model::Parcel->reap_singletons();
 }
 

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/682278c4/compiler/perl/lib/Clownfish/CFC.xs
----------------------------------------------------------------------
diff --git a/compiler/perl/lib/Clownfish/CFC.xs 
b/compiler/perl/lib/Clownfish/CFC.xs
index 775d46c..81504f4 100644
--- a/compiler/perl/lib/Clownfish/CFC.xs
+++ b/compiler/perl/lib/Clownfish/CFC.xs
@@ -183,22 +183,6 @@ CODE:
     CFCBase_decref((CFCBase*)self);
 OUTPUT: RETVAL
 
-SV*
-fetch_singleton(unused, class_name)
-    SV *unused;
-    const char *class_name;
-CODE:
-    CHY_UNUSED_VAR(unused);
-    CFCClass *klass = CFCClass_fetch_singleton(class_name);
-    RETVAL = S_cfcbase_to_perlref(klass);
-OUTPUT: RETVAL
-
-void
-_clear_registry(...)
-PPCODE:
-    CHY_UNUSED_VAR(items);
-    CFCClass_clear_registry();
-
 void
 add_child(self, child)
     CFCClass *self;

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/682278c4/compiler/perl/t/401-class.t
----------------------------------------------------------------------
diff --git a/compiler/perl/t/401-class.t b/compiler/perl/t/401-class.t
index 26d4742..3dcc2d9 100644
--- a/compiler/perl/t/401-class.t
+++ b/compiler/perl/t/401-class.t
@@ -242,7 +242,6 @@ $class_content = qq|
 $class = $parser->parse($class_content);
 ok( $class->final, "final class_declaration" );
 
-Clownfish::CFC::Model::Class->_clear_registry();
 Clownfish::CFC::Model::Parcel->reap_singletons();
 
 {
@@ -253,7 +252,6 @@ Clownfish::CFC::Model::Parcel->reap_singletons();
     };
     like( $@, qr/inert class/i, "inert class can't inherit" );
 
-    Clownfish::CFC::Model::Class->_clear_registry();
     Clownfish::CFC::Model::Parcel->reap_singletons();
 }
 
@@ -265,7 +263,6 @@ Clownfish::CFC::Model::Parcel->reap_singletons();
     };
     like( $@, qr/inert class/i, "can't inherit from inert class" );
 
-    Clownfish::CFC::Model::Class->_clear_registry();
     Clownfish::CFC::Model::Parcel->reap_singletons();
 }
 

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/682278c4/compiler/perl/t/404-file.t
----------------------------------------------------------------------
diff --git a/compiler/perl/t/404-file.t b/compiler/perl/t/404-file.t
index b907d69..9faa1fb 100644
--- a/compiler/perl/t/404-file.t
+++ b/compiler/perl/t/404-file.t
@@ -88,8 +88,6 @@ my $file_spec = Clownfish::CFC::Model::FileSpec->new(
     isa_ok( $blocks->[1], "Clownfish::CFC::Model::Class" );
     isa_ok( $blocks->[2], "Clownfish::CFC::Model::Class" );
     isa_ok( $blocks->[3], "Clownfish::CFC::Model::CBlock" );
-
-    Clownfish::CFC::Model::Class->_clear_registry();
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/682278c4/compiler/perl/t/600-parser.t
----------------------------------------------------------------------
diff --git a/compiler/perl/t/600-parser.t b/compiler/perl/t/600-parser.t
index 7d59ad5..6fb1e46 100644
--- a/compiler/perl/t/600-parser.t
+++ b/compiler/perl/t/600-parser.t
@@ -138,7 +138,6 @@ for (qw( Foo FooJr FooIII Foo4th )) {
     $type->resolve;
     is( $type->get_specifier, "crust_$_", "object_type_specifier: $_" )
 }
-Clownfish::CFC::Model::Class->_clear_registry();
 
 SKIP: {
     skip( "Can't recover from bad specifier under flex/lemon parser", 6 );

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/682278c4/compiler/src/CFCClass.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCClass.c b/compiler/src/CFCClass.c
index cdfe096..9d63055 100644
--- a/compiler/src/CFCClass.c
+++ b/compiler/src/CFCClass.c
@@ -35,14 +35,6 @@
 #include "CFCFileSpec.h"
 #include "CFCJson.h"
 
-static CFCClass **registry = NULL;
-static size_t registry_size = 0;
-static size_t registry_cap  = 0;
-
-// Store a new CFCClass in a registry.
-static void
-S_register(CFCClass *self);
-
 struct CFCClass {
     CFCBase base;
     CFCWeakPtr parcel;
@@ -298,8 +290,6 @@ CFCClass_do_create(CFCClass *self, struct CFCParcel *parcel,
     char *error;
 
     CFCUTIL_TRY {
-        // Store in registry.
-        S_register(self);
         CFCParcel_add_class(parcel, self);
     }
     CFCUTIL_CATCH(error);
@@ -353,70 +343,6 @@ CFCClass_destroy(CFCClass *self) {
     CFCBase_destroy((CFCBase*)self);
 }
 
-static void
-S_register(CFCClass *self) {
-    if (registry_size == registry_cap) {
-        size_t new_cap = registry_cap + 10;
-        registry = (CFCClass**)REALLOCATE(
-                       registry,
-                       (new_cap + 1) * sizeof(CFCClass*));
-        for (size_t i = registry_cap; i <= new_cap; i++) {
-            registry[i] = NULL;
-        }
-        registry_cap = new_cap;
-    }
-
-    const char *name = self->name;
-
-    for (size_t i = 0; i < registry_size; i++) {
-        CFCClass *other = registry[i];
-
-        if (strcmp(name, other->name) == 0) {
-            CFCUtil_die("Two classes with name %s", name);
-        }
-    }
-
-    registry[registry_size] = (CFCClass*)CFCBase_incref((CFCBase*)self);
-    registry_size++;
-}
-
-#define MAX_SINGLETON_LEN 256
-
-CFCClass*
-CFCClass_fetch_singleton(const char *class_name) {
-    CFCUTIL_NULL_CHECK(class_name);
-
-    for (size_t i = 0; i < registry_size; i++) {
-        if (strcmp(registry[i]->name, class_name) == 0) {
-            return registry[i];
-        }
-    }
-    return NULL;
-}
-
-CFCClass*
-CFCClass_fetch_by_struct_sym(const char *struct_sym) {
-    CFCUTIL_NULL_CHECK(struct_sym);
-
-    for (size_t i = 0; i < registry_size; i++) {
-        if (strcmp(registry[i]->full_struct_sym, struct_sym) == 0) {
-            return registry[i];
-        }
-    }
-    return NULL;
-}
-
-void
-CFCClass_clear_registry(void) {
-    for (size_t i = 0; i < registry_size; i++) {
-        CFCBase_decref((CFCBase*)registry[i]);
-    }
-    FREEMEM(registry);
-    registry_size = 0;
-    registry_cap  = 0;
-    registry      = NULL;
-}
-
 void
 CFCClass_add_child(CFCClass *self, CFCClass *child) {
     CFCUTIL_NULL_CHECK(child);

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/682278c4/compiler/src/CFCClass.h
----------------------------------------------------------------------
diff --git a/compiler/src/CFCClass.h b/compiler/src/CFCClass.h
index 072b71c..bcb87f4 100644
--- a/compiler/src/CFCClass.h
+++ b/compiler/src/CFCClass.h
@@ -87,26 +87,6 @@ CFCClass_do_create(CFCClass *self, struct CFCParcel *parcel,
 void
 CFCClass_destroy(CFCClass *self);
 
-/** Retrieve a Class, if one has already been created.
- *
- * @param class_name The name of the Class.
- */
-CFCClass*
-CFCClass_fetch_singleton(const char *class_name);
-
-/** Retrieve a Class by its struct sym.
- *
- * @param full_struct_sym The Class's full struct sym.
- */
-CFCClass*
-CFCClass_fetch_by_struct_sym(const char *full_struct_sym);
-
-/** Empty out the registry, decrementing the refcount of all Class singleton
- * objects.
- */
-void
-CFCClass_clear_registry(void);
-
 /** Add a child class.
  */
 void

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/682278c4/compiler/src/CFCHierarchy.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCHierarchy.c b/compiler/src/CFCHierarchy.c
index 0bc1b5f..1e44db3 100644
--- a/compiler/src/CFCHierarchy.c
+++ b/compiler/src/CFCHierarchy.c
@@ -232,12 +232,6 @@ CFCHierarchy_build(CFCHierarchy *self) {
         S_find_prereqs(self, source_parcels[i]);
     }
 
-    // Read .cfh and .md files.
-    for (size_t i = 0; self->sources[i] != NULL; i++) {
-        S_parse_cf_files(self, self->sources[i], false);
-        S_find_doc_files(self->sources[i]);
-    }
-
     // Read .cfh files of included parcels.
     parcels = CFCParcel_all_parcels();
     for (size_t i = 0; parcels[i] != NULL; i++) {
@@ -248,6 +242,12 @@ CFCHierarchy_build(CFCHierarchy *self) {
         }
     }
 
+    // Read .cfh and .md files of source parcels.
+    for (size_t i = 0; self->sources[i] != NULL; i++) {
+        S_parse_cf_files(self, self->sources[i], false);
+        S_find_doc_files(self->sources[i]);
+    }
+
     for (int i = 0; self->classes[i] != NULL; i++) {
         CFCClass_resolve_types(self->classes[i]);
     }
@@ -375,10 +375,12 @@ S_find_prereq(CFCHierarchy *self, CFCParcel *parent, 
CFCPrereq *prereq) {
                     CFCParcel_get_name(parent));
     }
 
-    CFCParcel_register(parcel);
-
+    // Make sure to register prereq parcels first, so that prereq
+    // parent classes precede subclasses.
     S_find_prereqs(self, parcel);
 
+    CFCParcel_register(parcel);
+
     CFCBase_decref((CFCBase*)parcel);
 }
 

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/682278c4/compiler/src/CFCParcel.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCParcel.c b/compiler/src/CFCParcel.c
index b126a29..35f4cee 100644
--- a/compiler/src/CFCParcel.c
+++ b/compiler/src/CFCParcel.c
@@ -55,6 +55,9 @@ struct CFCParcel {
 static void
 S_set_prereqs(CFCParcel *self, CFCJson *node, const char *path);
 
+static CFCClass*
+S_fetch_class(CFCParcel *self, const char *class_name, int search_prereqs);
+
 static CFCParcel **registry = NULL;
 static size_t num_registered = 0;
 
@@ -591,12 +594,20 @@ CFCParcel_read_host_data_json(CFCParcel *self, const char 
*host_lang) {
 
 void
 CFCParcel_add_class(CFCParcel *self, CFCClass *klass) {
+    // Ensure unique class name.
+    const char *class_name = CFCClass_get_name(klass);
+    CFCClass *other = S_fetch_class(self, class_name, true);
+    if (other) {
+        CFCUtil_die("Two classes with name %s", class_name);
+    }
+
     const char *struct_sym = CFCClass_get_struct_sym(klass);
     const char *nickname   = CFCClass_get_nickname(klass);
 
     for (size_t i = 0; self->classes[i]; ++i) {
         CFCClass *other = self->classes[i];
 
+        // Ensure unique struct symbol and nickname in parcel.
         if (strcmp(struct_sym, CFCClass_get_struct_sym(other)) == 0) {
             CFCUtil_die("Class name conflict between %s and %s",
                         CFCClass_get_name(klass), CFCClass_get_name(other));
@@ -688,6 +699,11 @@ CFCParcel_sort_classes(CFCParcel *self) {
 
 CFCClass*
 CFCParcel_class(CFCParcel *self, const char *class_name) {
+    return S_fetch_class(self, class_name, false);
+}
+
+static CFCClass*
+S_fetch_class(CFCParcel *self, const char *class_name, int search_prereqs) {
     for (size_t i = 0; self->classes[i]; ++i) {
         CFCClass *klass = self->classes[i];
         if (strcmp(CFCClass_get_name(klass), class_name) == 0) {
@@ -695,6 +711,16 @@ CFCParcel_class(CFCParcel *self, const char *class_name) {
         }
     }
 
+    if (!search_prereqs) { return NULL; }
+
+    for (size_t i = 0; self->prereqs[i]; ++i) {
+        const char *prereq_name   = CFCPrereq_get_name(self->prereqs[i]);
+        CFCParcel  *prereq_parcel = CFCParcel_fetch(prereq_name);
+
+        CFCClass *klass = S_fetch_class(prereq_parcel, class_name, true);
+        if (klass) { return klass; }
+    }
+
     return NULL;
 }
 

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/682278c4/compiler/src/CFCTestClass.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCTestClass.c b/compiler/src/CFCTestClass.c
index 793f2c7..e894bc0 100644
--- a/compiler/src/CFCTestClass.c
+++ b/compiler/src/CFCTestClass.c
@@ -449,7 +449,6 @@ S_run_tests(CFCTest *test) {
     CFCBase_decref((CFCBase*)inert_foo);
     CFCBase_decref((CFCBase*)do_stuff);
 
-    CFCClass_clear_registry();
     CFCParcel_reap_singletons();
 }
 

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/682278c4/compiler/src/CFCTestFile.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCTestFile.c b/compiler/src/CFCTestFile.c
index 5d55912..ee26cc1 100644
--- a/compiler/src/CFCTestFile.c
+++ b/compiler/src/CFCTestFile.c
@@ -119,8 +119,6 @@ S_run_tests(CFCTest *test) {
         OK(test, blocks[4] == NULL, "blocks[4]");
 
         CFCBase_decref((CFCBase*)file);
-
-        CFCClass_clear_registry();
     }
 
     CFCBase_decref((CFCBase*)file_spec);

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/682278c4/compiler/src/CFCTestHierarchy.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCTestHierarchy.c b/compiler/src/CFCTestHierarchy.c
index 77a1ab8..a105f90 100644
--- a/compiler/src/CFCTestHierarchy.c
+++ b/compiler/src/CFCTestHierarchy.c
@@ -165,7 +165,6 @@ S_run_basic_tests(CFCTest *test) {
 
     CFCBase_decref((CFCBase*)hierarchy);
     FREEMEM(cfbase_path);
-    CFCClass_clear_registry();
     CFCParcel_reap_singletons();
 }
 
@@ -210,7 +209,6 @@ S_run_include_tests(CFCTest *test) {
         OK(test, all_included, "All classes included");
 
         CFCBase_decref((CFCBase*)hierarchy);
-        CFCClass_clear_registry();
         CFCParcel_reap_singletons();
     }
 
@@ -248,7 +246,6 @@ S_run_include_tests(CFCTest *test) {
         OK(test, all_not_included, "All classes not included");
 
         CFCBase_decref((CFCBase*)hierarchy);
-        CFCClass_clear_registry();
         CFCParcel_reap_singletons();
     }
 
@@ -286,7 +283,6 @@ S_run_clash_tests(CFCTest *test) {
            "source/source filename clash");
 
         CFCBase_decref((CFCBase*)hierarchy);
-        CFCClass_clear_registry();
         CFCParcel_reap_singletons();
     }
 
@@ -307,7 +303,6 @@ S_run_clash_tests(CFCTest *test) {
            "source/include class name clash");
 
         CFCBase_decref((CFCBase*)hierarchy);
-        CFCClass_clear_registry();
         CFCParcel_reap_singletons();
     }
 
@@ -330,7 +325,6 @@ S_run_clash_tests(CFCTest *test) {
            "source class with included parcel");
 
         CFCBase_decref((CFCBase*)hierarchy);
-        CFCClass_clear_registry();
         CFCParcel_reap_singletons();
     }
 

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/682278c4/compiler/src/CFCTestMethod.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCTestMethod.c b/compiler/src/CFCTestMethod.c
index 634e1de..c0cf67b 100644
--- a/compiler/src/CFCTestMethod.c
+++ b/compiler/src/CFCTestMethod.c
@@ -205,7 +205,6 @@ S_run_basic_tests(CFCTest *test) {
     CFCBase_decref((CFCBase*)param_list);
     CFCBase_decref((CFCBase*)method);
 
-    CFCClass_clear_registry();
     CFCParcel_reap_singletons();
 }
 
@@ -245,7 +244,6 @@ S_run_parser_tests(CFCTest *test) {
     CFCBase_decref((CFCBase*)neato_parcel);
     CFCBase_decref((CFCBase*)parser);
 
-    CFCClass_clear_registry();
     CFCParcel_reap_singletons();
 }
 
@@ -288,7 +286,6 @@ S_run_overridden_tests(CFCTest *test) {
     CFCBase_decref((CFCBase*)overrider_param_list);
     CFCBase_decref((CFCBase*)overrider);
 
-    CFCClass_clear_registry();
     CFCParcel_reap_singletons();
 }
 
@@ -337,7 +334,6 @@ S_run_final_tests(CFCTest *test) {
     CFCBase_decref((CFCBase*)not_final);
     CFCBase_decref((CFCBase*)final);
 
-    CFCClass_clear_registry();
     CFCParcel_reap_singletons();
 }
 

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/682278c4/compiler/src/CFCTestParamList.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCTestParamList.c b/compiler/src/CFCTestParamList.c
index 9dab0b8..aba3d38 100644
--- a/compiler/src/CFCTestParamList.c
+++ b/compiler/src/CFCTestParamList.c
@@ -89,7 +89,6 @@ S_run_tests(CFCTest *test) {
     CFCBase_decref((CFCBase*)neato_parcel);
     CFCBase_decref((CFCBase*)obj_class);
 
-    CFCClass_clear_registry();
     CFCParcel_reap_singletons();
 }
 

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/682278c4/compiler/src/CFCTestParcel.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCTestParcel.c b/compiler/src/CFCTestParcel.c
index d1c89f3..7ee28ac 100644
--- a/compiler/src/CFCTestParcel.c
+++ b/compiler/src/CFCTestParcel.c
@@ -307,7 +307,6 @@ S_run_extended_tests(CFCTest *test) {
         CFCBase_decref((CFCBase*)cfish);
         CFCBase_decref((CFCBase*)foo_file_spec);
         CFCBase_decref((CFCBase*)foo);
-        CFCClass_clear_registry();
         CFCParcel_reap_singletons();
     }
 }

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/682278c4/compiler/src/CFCTestParser.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCTestParser.c b/compiler/src/CFCTestParser.c
index 15f4103..92155ab 100644
--- a/compiler/src/CFCTestParser.c
+++ b/compiler/src/CFCTestParser.c
@@ -137,7 +137,6 @@ S_run_tests(CFCTest *test) {
         for (int i = 0; i < 7; ++i) {
             CFCBase_decref((CFCBase*)class_list[i]);
         }
-        CFCClass_clear_registry();
     }
 
     {
@@ -316,7 +315,6 @@ S_run_tests(CFCTest *test) {
 
     CFCBase_decref((CFCBase*)parser);
 
-    CFCClass_clear_registry();
     CFCParcel_reap_singletons();
 }
 

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/682278c4/compiler/src/CFCTestType.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCTestType.c b/compiler/src/CFCTestType.c
index ba1799b..9c77aaf 100644
--- a/compiler/src/CFCTestType.c
+++ b/compiler/src/CFCTestType.c
@@ -337,7 +337,6 @@ S_run_object_tests(CFCTest *test) {
             }
 
             CFCBase_decref((CFCBase*)klass);
-            CFCClass_clear_registry();
         }
 
         CFCBase_decref((CFCBase*)neato_parcel);
@@ -441,7 +440,6 @@ S_run_object_tests(CFCTest *test) {
     CFCBase_decref((CFCBase*)foo_class);
     CFCBase_decref((CFCBase*)foo);
 
-    CFCClass_clear_registry();
     CFCParcel_reap_singletons();
 }
 

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/682278c4/compiler/src/CFCTestVariable.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCTestVariable.c b/compiler/src/CFCTestVariable.c
index 617bf15..c088b85 100644
--- a/compiler/src/CFCTestVariable.c
+++ b/compiler/src/CFCTestVariable.c
@@ -139,7 +139,6 @@ S_run_tests(CFCTest *test) {
     CFCBase_decref((CFCBase*)neato_parcel);
     CFCBase_decref((CFCBase*)foo_class);
 
-    CFCClass_clear_registry();
     CFCParcel_reap_singletons();
 }
 

Reply via email to