Protect against duplicate source or include dirs
diff --git a/compiler/src/CFCHierarchy.c b/compiler/src/CFCHierarchy.c
index dcb8c97..88cdb30 100644
--- a/compiler/src/CFCHierarchy.c
+++ b/compiler/src/CFCHierarchy.c
@@ -187,6 +187,11 @@
 
 void
 CFCHierarchy_add_source_dir(CFCHierarchy *self, const char *source_dir) {
+    // Don't add directory twice.
+    for (size_t i = 0; self->sources[i] != NULL; ++i) {
+        if (strcmp(self->sources[i], source_dir) == 0) { return; }
+    }
+
     size_t n = self->num_sources;
     size_t size = (n + 2) * sizeof(char*);
     self->sources      = (char**)REALLOCATE(self->sources, size);
@@ -197,6 +202,11 @@
 
 void
 CFCHierarchy_add_include_dir(CFCHierarchy *self, const char *include_dir) {
+    // Don't add directory twice.
+    for (size_t i = 0; self->includes[i] != NULL; ++i) {
+        if (strcmp(self->includes[i], include_dir) == 0) { return; }
+    }
+
     size_t n = self->num_includes;
     size_t size = (n + 2) * sizeof(char*);
     self->includes      = (char**)REALLOCATE(self->includes, size);