commit a90c987aa4bf133d6b484e26684919f482ffad73
parent b5fe10c6fb6606d271bc75e2245a801286f91bb4
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date:   Wed, 18 Mar 2015 10:31:41 +0000
Add prev pointer in Inst
We are going to add and remove elements from the list, so it is a good
idea to have a pointer to the previous element, because with this data
structure is easy to remove elements from it.
Diffstat:
2 files changed, 23 insertions(+), 21 deletions(-)
diff --git a/cc2/cc2.h b/cc2/cc2.h
@@ -85,6 +85,25 @@ struct node {
 	struct node *left, *right;
 };
 
+typedef struct inst Inst;
+typedef struct addr Addr;
+
+struct addr {
+	char kind;
+	union {
+		uint8_t reg;
+		TINT i;
+		Inst *pc;
+		Symbol *sym;
+	} u;
+};
+
+struct inst {
+	char op;
+	Addr from, to;
+	Inst *next, *prev;
+};
+
 enum nerrors {
 	EINTNUM,       /* too much internal identifiers */
 	EEXTNUM,       /* too much external identifiers */
@@ -101,8 +120,6 @@ enum nerrors {
 	ENUMERR
 };
 
-
-
 enum {
 	LDW,
 	LDL,
@@ -124,6 +141,7 @@ enum {
 };
 
 extern Symbol *curfun;
+extern Inst *prog, *pc;
 
 /* main.c */
 extern void error(unsigned nerror, ...);
diff --git a/cc2/code.c b/cc2/code.c
@@ -48,25 +48,7 @@ static char *insttext[] = {
 	[INC] = "INC"
 };
 
-typedef struct inst Inst;
-typedef struct addr Addr;
-
-struct addr {
-	char kind;
-	union {
-		uint8_t reg;
-		TINT i;
-		Inst *pc;
-		Symbol *sym;
-	} u;
-};
-
-struct inst {
-	char op;
-	Addr from, to;
-	Inst *next;
-};
-Inst *prog, *pc;
+Inst *pc, *prog;
 
 Inst *
 nextpc(void)
@@ -74,6 +56,8 @@ nextpc(void)
 	Inst *new;
 
 	new = xmalloc(sizeof(*new));
+	new->prev = pc;
+
 	if (!pc)
 		prog = new;
 	else