r5928 - trunk/eda/fped
werner at docs.openmoko.org
werner at docs.openmoko.org
Tue Apr 20 23:01:16 CEST 2010
Author: werner
Date: 2010-04-20 23:01:16 +0200 (Tue, 20 Apr 2010)
New Revision: 5928
Modified:
trunk/eda/fped/dump.c
trunk/eda/fped/fpd.y
trunk/eda/fped/obj.h
Log:
The partial order algorithm in dump.c sometimes dumped objects before a vector
they referenced. As a band-aid, we now explicitly keep track of which vectors
have been dumped, and defer objects accordingly. A more correct solution would
be to properly abstract the partial order algorithms (along with the heuristics
for maximizing the number of ".") and to implement it properly.
- fpd.y (debug_item): new rule for %dump and %exit, which can appear also among
measurements
- fpd.y (frame_items, measurements): rearranged grammar to allow debug_item
also in measurements. To avoid ambiguities, the "measurements" section can no
longer be empty, but it can be omitted as a whole.
- obj.h, dump.c (later, recurse_vec, order_frame): vectors now also have a
"dumped" flag which is used in "later" to defer dumping an object until all
the vectors it depends on have been dumped.
Modified: trunk/eda/fped/dump.c
===================================================================
--- trunk/eda/fped/dump.c 2010-04-20 18:39:26 UTC (rev 5927)
+++ trunk/eda/fped/dump.c 2010-04-20 21:01:16 UTC (rev 5928)
@@ -75,6 +75,8 @@
static int later(const struct vec *base, const struct vec *prev)
{
+ return base && !base->dumped;
+#if 0
while (1) {
prev = prev->next;
if (!prev)
@@ -83,6 +85,7 @@
return 1;
}
return 0;
+#endif
}
@@ -134,7 +137,7 @@
}
/*
- * Tricky logic ahead: when dumping a vector, we search for a vectors that
+ * Tricky logic ahead: when dumping a vector, we search for a vector that
* depends on that vector for ".". If we find one, we dump it immediately after
* this vector.
*/
@@ -144,6 +147,7 @@
struct vec *next;
struct obj *obj;
+ vec->dumped = 1;
add_item(curr, vec, NULL);
for (obj = vec->frame->objs; obj; obj = obj->next)
if (may_put_obj_now(obj, vec))
@@ -178,6 +182,8 @@
if (obj->type != ot_meas)
n++;
+ for (vec = frame->vecs; vec; vec = vec->next)
+ vec->dumped = 0;
for (obj = frame->objs; obj; obj = obj->next)
obj->dumped = 0;
Modified: trunk/eda/fped/fpd.y
===================================================================
--- trunk/eda/fped/fpd.y 2010-04-20 18:39:26 UTC (rev 5927)
+++ trunk/eda/fped/fpd.y 2010-04-20 21:01:16 UTC (rev 5928)
@@ -404,7 +404,7 @@
;
frame_items:
- measurements
+ | measurements
| frame_item frame_items
;
@@ -459,7 +459,11 @@
if (!dbg_print($2))
YYABORT;
}
- | TOK_DBG_DUMP
+ | debug_item
+ ;
+
+debug_item:
+ TOK_DBG_DUMP
{
/*
* It's okay to do append the root frame multiple
@@ -718,11 +722,17 @@
;
measurements:
+ meas
+ {
+ *next_obj = $1;
+ next_obj = &$1->next;
+ }
| measurements meas
{
*next_obj = $2;
next_obj = &$2->next;
}
+ | measurements debug_item
;
meas:
Modified: trunk/eda/fped/obj.h
===================================================================
--- trunk/eda/fped/obj.h 2010-04-20 18:39:26 UTC (rev 5927)
+++ trunk/eda/fped/obj.h 2010-04-20 21:01:16 UTC (rev 5928)
@@ -142,6 +142,9 @@
/* for re-ordering after a move */
int mark;
+ /* for dumping */
+ int dumped;
+
/* for the GUI */
GtkWidget *list_widget; /* NULL if items aren't shown */
};
More information about the commitlog
mailing list