You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by ma...@apache.org on 2011/03/05 03:43:29 UTC
[lucy-commits] svn commit: r1078230 - in /incubator/lucy/trunk/clownfish:
lib/Clownfish/Hierarchy.pm src/CFCHierarchy.c
Author: marvin
Date: Sat Mar 5 02:43:29 2011
New Revision: 1078230
URL: http://svn.apache.org/viewvc?rev=1078230&view=rev
Log:
Check for class name conflicts within CFCHierarchy_add_file().
Modified:
incubator/lucy/trunk/clownfish/lib/Clownfish/Hierarchy.pm
incubator/lucy/trunk/clownfish/src/CFCHierarchy.c
Modified: incubator/lucy/trunk/clownfish/lib/Clownfish/Hierarchy.pm
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/lib/Clownfish/Hierarchy.pm?rev=1078230&r1=1078229&r2=1078230&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/lib/Clownfish/Hierarchy.pm (original)
+++ incubator/lucy/trunk/clownfish/lib/Clownfish/Hierarchy.pm Sat Mar 5 02:43:29 2011
@@ -118,8 +118,6 @@ sub _parse_cf_files {
for my $class ( @{ $file->classes } ) {
my $class_name = $class->get_class_name;
- confess "$class_name already defined"
- if exists $classes{$class_name};
$classes{$class_name} = $class;
}
}
Modified: incubator/lucy/trunk/clownfish/src/CFCHierarchy.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCHierarchy.c?rev=1078230&r1=1078229&r2=1078230&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCHierarchy.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCHierarchy.c Sat Mar 5 02:43:29 2011
@@ -224,9 +224,30 @@ CFCHierarchy_add_file(CFCHierarchy *self
{
CFCUTIL_NULL_CHECK(file);
const char *source_class = CFCFile_get_source_class(file);
- if (CFCHierarchy_fetch_file(self, source_class)) {
- CFCUtil_die("File for source class %s already registered",
- source_class);
+ CFCClass **classes = CFCFile_classes(file);
+ size_t i;
+ for (i = 0; self->files[i] != NULL; i++) {
+ CFCFile *existing = self->files[i];
+ const char *old_source_class = CFCFile_get_source_class(existing);
+ if (strcmp(source_class, old_source_class) == 0) {
+ CFCUtil_die("File for source class %s already registered",
+ source_class);
+ }
+ CFCClass **existing_classes = CFCFile_classes(existing);
+ size_t j;
+ for (j = 0; classes[j] != NULL; j++) {
+ const char *new_class_name
+ = CFCSymbol_get_class_name((CFCSymbol*)classes[j]);
+ size_t k;
+ for (k = 0; existing_classes[k] != NULL; k++) {
+ const char *existing_class_name
+ = CFCSymbol_get_class_name((CFCSymbol*)existing_classes[k]);
+ if (strcmp(new_class_name, existing_class_name) == 0) {
+ CFCUtil_die("Class '%s' already registered",
+ new_class_name);
+ }
+ }
+ }
}
self->num_files++;
size_t size = (self->num_files + 1) * sizeof(CFCFile*);