[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnue/geas/src/classdef depend.c depend.h parse.y
From: |
Reinhard Mueller |
Subject: |
gnue/geas/src/classdef depend.c depend.h parse.y |
Date: |
Wed, 19 Sep 2001 16:32:57 -0400 |
CVSROOT: /cvsroot/gnue
Module name: gnue
Changes by: Reinhard Mueller <address@hidden> 01/09/19 16:32:57
Modified files:
geas/src/classdef: depend.c depend.h parse.y
Log message:
Make the dependency resolver ignore inter-file dependencies. Those
should not keep the files from being processed in the second pass.
Note: with this change, depend.c and depend.h are considered finished.
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/geas/src/classdef/depend.c.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/geas/src/classdef/depend.h.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/geas/src/classdef/parse.y.diff?tr1=1.7&tr2=1.8&r1=text&r2=text
Patches:
Index: gnue/geas/src/classdef/depend.c
diff -u gnue/geas/src/classdef/depend.c:1.2 gnue/geas/src/classdef/depend.c:1.3
--- gnue/geas/src/classdef/depend.c:1.2 Wed Sep 19 16:04:21 2001
+++ gnue/geas/src/classdef/depend.c Wed Sep 19 16:32:57 2001
@@ -19,7 +19,7 @@
along with GEAS; if not, write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- $Id: depend.c,v 1.2 2001/09/19 20:04:21 reinhard Exp $
+ $Id: depend.c,v 1.3 2001/09/19 20:32:57 reinhard Exp $
*/
#include "config.h"
@@ -160,6 +160,27 @@
}
aft_ii->before++;
bef_ii->after = g_list_append (bef_ii->after, aft_ii);
+}
+
+/* ------------------------------------------------------------------------- *\
+ * Remove a dependency between 2 items
+\* ------------------------------------------------------------------------- */
+void
+_geas_cd_depend_remove_dependency (const char *before, const char *after)
+{
+ struct _iteminfo *bef_ii, *aft_ii;
+
+ g_return_if_fail (before);
+ g_return_if_fail (after);
+ g_return_if_fail (_to_resolve);
+
+ bef_ii = g_hash_table_lookup (_to_resolve, before);
+ aft_ii = g_hash_table_lookup (_to_resolve, after);
+ if (bef_ii && aft_ii && g_list_find (bef_ii->after, aft_ii))
+ {
+ aft_ii->before--;
+ bef_ii->after = g_list_remove (bef_ii->after, aft_ii);
+ }
}
/* ------------------------------------------------------------------------- *\
Index: gnue/geas/src/classdef/depend.h
diff -u gnue/geas/src/classdef/depend.h:1.1 gnue/geas/src/classdef/depend.h:1.2
--- gnue/geas/src/classdef/depend.h:1.1 Sun Sep 16 16:54:29 2001
+++ gnue/geas/src/classdef/depend.h Wed Sep 19 16:32:57 2001
@@ -19,7 +19,7 @@
along with GEAS; if not, write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- $Id: depend.h,v 1.1 2001/09/16 20:54:29 reinhard Exp $
+ $Id: depend.h,v 1.2 2001/09/19 20:32:57 reinhard Exp $
*/
#ifndef _DEPEND_H
@@ -29,6 +29,8 @@
void _geas_cd_depend_add_item (const char *item);
void _geas_cd_depend_add_dependency (const char *before,
const char *after);
+void _geas_cd_depend_remove_dependency (const char *before,
+ const char *after);
unsigned int _geas_cd_depend_sort (void);
char *_geas_cd_depend_get_next_resolved (void);
char *_geas_cd_depend_get_next_unresolved (void);
Index: gnue/geas/src/classdef/parse.y
diff -u gnue/geas/src/classdef/parse.y:1.7 gnue/geas/src/classdef/parse.y:1.8
--- gnue/geas/src/classdef/parse.y:1.7 Sun Sep 16 16:54:29 2001
+++ gnue/geas/src/classdef/parse.y Wed Sep 19 16:32:57 2001
@@ -19,7 +19,7 @@
along with GEAS; if not, write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- $Id: parse.y,v 1.7 2001/09/16 20:54:29 reinhard Exp $
+ $Id: parse.y,v 1.8 2001/09/19 20:32:57 reinhard Exp $
*/
%{
@@ -46,11 +46,9 @@
/* include debugging code */
#define YYDEBUG 1
-/* pass 0 = parser test, only strings are passed around instead of the real
- data structures */
/* pass 1 = create list of existing classes and types and their dependencies */
/* pass 2 = create the final structures in memory */
-/* error messages are only output in pass 0 and in pass 2 */
+/* error messages are only output in pass 2 */
/* ------------------------------------------------------------------------- *\
* Parser functions defined at the end of this file
@@ -389,6 +387,24 @@
}
/* ------------------------------------------------------------------------- *\
+ * Unregister a dependency
+\* ------------------------------------------------------------------------- */
+static void
+_undepend (const char *before, const char *before_type,
+ const char *after, const char *after_type)
+{
+ char *before_full, *after_full;
+
+ before_full = g_strconcat (before_type, " ", before, NULL);
+ after_full = g_strconcat (after_type, " ", after, NULL);
+
+ _geas_cd_depend_remove_dependency (before_full, after_full);
+
+ g_free (before_full);
+ g_free (after_full);
+}
+
+/* ------------------------------------------------------------------------- *\
* [PUBLIC|PRIVATE] MODULE <name>
\* ------------------------------------------------------------------------- */
static void
@@ -425,6 +441,11 @@
/* Now, this class depends on the current file */
_depend (_current_file, "F",
geas_cd_class_get_name_full (_current_class), "C");
+ /* In case a reference appeared earlier in this file, a reverse
+ dependency is already registered. This must be removed to avoid
+ circular dependencies within a file. */
+ _undepend (geas_cd_class_get_name_full (_current_class), "C",
+ _current_file, "F");
return (TRUE);
case 2:
@@ -484,6 +505,11 @@
/* Now, this type depends on the current file */
_depend (_current_file, "F",
geas_cd_type_get_name_full (_current_type), "T");
+ /* In case a reference appeared earlier in this file, a reverse
+ dependency is already registered. This must be removed to avoid
+ circular dependencies within a file. */
+ _undepend (geas_cd_type_get_name_full (_current_type), "T",
+ _current_file, "F");
return (TRUE);
case 2:
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- gnue/geas/src/classdef depend.c depend.h parse.y,
Reinhard Mueller <=