Browse Source

Fixed warnings, recognize -gdb

ceriel 28 years ago
parent
commit
989015a051
3 changed files with 59 additions and 26 deletions
  1. 26 24
      lang/m2/comp/error.c
  2. 5 0
      lang/m2/comp/options.c
  3. 28 2
      lang/m2/comp/stab.c

+ 26 - 24
lang/m2/comp/error.c

@@ -72,7 +72,7 @@ debug(char *fmt, ...)
 
 	va_start(ap, fmt);
 	{
-		_error(VDEBUG, NULLNODE, ap);
+		_error(VDEBUG, NULLNODE, ap, 0);
 	}
 	va_end(ap);
 }
@@ -85,7 +85,7 @@ error(char *fmt, ...)
 
 	va_start(ap, fmt);
 	{
-		_error(ERROR, NULLNODE, fmt, ap);
+		_error(ERROR, NULLNODE, fmt, ap, 0);
 	}
 	va_end(ap);
 }
@@ -97,31 +97,31 @@ node_error(t_node *node, char *fmt, ...)
 
 	va_start(ap, fmt);
 	{
-		_error(ERROR, node, fmt, ap);
+		_error(ERROR, node, fmt, ap, 0);
 	}
 	va_end(ap);
 }
 
 /*VARARGS*/
-warning(char *fmt, ...)
+warning(int class, char *fmt, ...)
 {
 	va_list ap;
 
 	va_start(ap, fmt);
 	{
-		_error(WARNING, NULLNODE, fmt, ap);
+		_error(WARNING, NULLNODE, fmt, ap, class);
 	}
 	va_end(ap);
 }
 
 /*VARARGS*/
-node_warning(t_node *node, char *fmt, ...)
+node_warning(t_node *node, int class, char *fmt, ...)
 {
 	va_list ap;
 
 	va_start(ap, fmt);
 	{
-		_error(WARNING, node, fmt, ap);
+		_error(WARNING, node, fmt, ap, class);
 	}
 	va_end(ap);
 }
@@ -133,19 +133,19 @@ lexerror(char *fmt, ...)
 
 	va_start(ap, fmt);
 	{
-		_error(LEXERROR, NULLNODE, fmt, ap);
+		_error(LEXERROR, NULLNODE, fmt, ap, 0);
 	}
 	va_end(ap);
 }
 
 /*VARARGS*/
-lexwarning(char *fmt, ...)
+lexwarning(int class, char *fmt, ...)
 {
 	va_list ap;
 
 	va_start(ap, fmt);
 	{
-		_error(LEXWARNING, NULLNODE, fmt, ap);
+		_error(LEXWARNING, NULLNODE, fmt, ap, class);
 	}
 	va_end(ap);
 }
@@ -157,7 +157,7 @@ fatal(char *fmt, ...)
 
 	va_start(ap, fmt);
 	{
-		_error(FATAL, NULLNODE, fmt, ap);
+		_error(FATAL, NULLNODE, fmt, ap, 0);
 	}
 	va_end(ap);
 	sys_stop(S_EXIT);
@@ -170,7 +170,7 @@ crash(char *fmt, ...)
 
 	va_start(ap, fmt);
 	{
-		_error(CRASH, NULLNODE, fmt, ap);
+		_error(CRASH, NULLNODE, fmt, ap, 0);
 	}
 	va_end(ap);
 #ifdef DEBUG
@@ -190,7 +190,7 @@ debug(va_alist)
 	va_start(ap);
 	{
 		char *fmt = va_arg(ap, char *);
-		_error(VDEBUG, NULLNODE, fmt, ap);
+		_error(VDEBUG, NULLNODE, fmt, ap, 0);
 	}
 	va_end(ap);
 }
@@ -205,7 +205,7 @@ error(va_alist)
 	va_start(ap);
 	{
 		char *fmt = va_arg(ap, char *);
-		_error(ERROR, NULLNODE, fmt, ap);
+		_error(ERROR, NULLNODE, fmt, ap, 0);
 	}
 	va_end(ap);
 }
@@ -220,7 +220,7 @@ node_error(va_alist)
 	{
 		t_node *node = va_arg(ap, t_node *);
 		char *fmt = va_arg(ap, char *);
-		_error(ERROR, node, fmt, ap);
+		_error(ERROR, node, fmt, ap, 0);
 	}
 	va_end(ap);
 }
@@ -233,8 +233,9 @@ warning(va_alist)
 
 	va_start(ap);
 	{
+		int class = va_arg(ap, int);
 		char *fmt = va_arg(ap, char *);
-		_error(WARNING, NULLNODE, fmt, ap);
+		_error(WARNING, NULLNODE, fmt, ap, class);
 	}
 	va_end(ap);
 }
@@ -248,8 +249,9 @@ node_warning(va_alist)
 	va_start(ap);
 	{
 		t_node *nd = va_arg(ap, t_node *);
+		int class = va_arg(ap, int);
 		char *fmt = va_arg(ap, char *);
-		_error(WARNING, nd, fmt, ap);
+		_error(WARNING, nd, fmt, ap, class);
 	}
 	va_end(ap);
 }
@@ -263,7 +265,7 @@ lexerror(va_alist)
 	va_start(ap);
 	{
 		char *fmt = va_arg(ap, char *);
-		_error(LEXERROR, NULLNODE, fmt, ap);
+		_error(LEXERROR, NULLNODE, fmt, ap, 0);
 	}
 	va_end(ap);
 }
@@ -276,8 +278,9 @@ lexwarning(va_alist)
 
 	va_start(ap);
 	{
+		int class = va_arg(ap, int);
 		char *fmt = va_arg(ap, char *);
-		_error(LEXWARNING, NULLNODE, fmt, ap);
+		_error(LEXWARNING, NULLNODE, fmt, ap, class);
 	}
 	va_end(ap);
 }
@@ -291,7 +294,7 @@ fatal(va_alist)
 	va_start(ap);
 	{
 		char *fmt = va_arg(ap, char *);
-		_error(FATAL, NULLNODE, fmt, ap);
+		_error(FATAL, NULLNODE, fmt, ap, 0);
 	}
 	va_end(ap);
 	sys_stop(S_EXIT);
@@ -306,7 +309,7 @@ crash(va_alist)
 	va_start(ap);
 	{
 		char *fmt = va_arg(ap, char *);
-		_error(CRASH, NULLNODE, fmt, ap);
+		_error(CRASH, NULLNODE, fmt, ap, 0);
 	}
 	va_end(ap);
 #ifdef DEBUG
@@ -317,18 +320,18 @@ crash(va_alist)
 }
 #endif
 
-_error(class, node, fmt, ap)
+_error(class, node, fmt, ap, warn_class)
 	int class;
 	t_node *node;
 	char *fmt;
 	register va_list ap;
+	int warn_class;
 {
 	/*	_error attempts to limit the number of error messages
 		for a given line to MAXERR_LINE.
 	*/
 	unsigned int ln = 0;
 	register char *remark = 0;
-	int warn_class;
 	
 	/* check visibility of message */
 	if (class == ERROR || class == WARNING) {
@@ -355,7 +358,6 @@ _error(class, node, fmt, ap)
 	switch (class)	{	
 	case WARNING:
 	case LEXWARNING:
-		warn_class = va_arg(ap, int);
 		if (! (warn_class & warning_classes)) return;
 		switch(warn_class) {
 #ifndef STRICT_3RD_ED

+ 5 - 0
lang/m2/comp/options.c

@@ -35,6 +35,7 @@ recognize some keywords!
 extern int	idfsize;
 static int	ndirs = 1;
 int		warning_classes = W_INITIAL;
+int		gdb_flag;
 
 DoOption(text)
 	register char *text;
@@ -64,6 +65,10 @@ DoOption(text)
 #ifdef DBSYMTAB
 	case 'g':	/* generate symbol table for debugger */
 		options['g']++;
+		if (*text == 'd') {
+			/* Assume -gdb. */
+			gdb_flag = 1;
+		}
 		options['n']++;	/* no register vars ??? */
 		break;
 #endif /* DBSYMTAB */

+ 28 - 2
lang/m2/comp/stab.c

@@ -27,6 +27,8 @@
 #include	"scope.h"
 #include	"main.h"
 
+extern int	gdb_flag;
+
 #define INCR_SIZE	64
 
 extern int	proclevel;
@@ -276,12 +278,34 @@ stb_string(df, kind)
 	addc_db_str(':');
 	switch(kind) {
 	case D_MODULE:
-		adds_db_str(sprint(buf, "M%d;", df->mod_vis->sc_count));
+		if (gdb_flag) {
+			addc_db_str('F');
+			stb_type(void_type, 0);
+			addc_db_str(';');
+		}
+		else {
+			adds_db_str(sprint(buf, "M%d;", df->mod_vis->sc_count));
+		}
 		C_ms_stb_pnam(db_str.base, N_FUN, proclevel, df->mod_vis->sc_scope->sc_name);
 		break;
 	case D_PROCEDURE:
-		adds_db_str(sprint(buf, "Q%d;", df->prc_vis->sc_count));
+		if (gdb_flag) {
+			addc_db_str('f');
+		}
+		else	adds_db_str(sprint(buf, "Q%d;", df->prc_vis->sc_count));
 		stb_type(tp->tp_next ? tp->tp_next : void_type, 0);
+		if (gdb_flag) {
+			t_scopelist *sc = df->prc_vis;
+			sc = enclosing(sc);
+			while (sc) {
+				t_def *d = sc->sc_scope->sc_definedby;
+
+				if (d && d->df_kind == D_PROCEDURE) {
+					adds_db_str(sprint(buf, ",%s", d->df_idf->id_text));
+				}
+				sc = enclosing(sc);
+			}
+		}
 		addc_db_str(';');
 		C_ms_stb_pnam(db_str.base, N_FUN, proclevel, df->prc_vis->sc_scope->sc_name);
 		{
@@ -293,10 +317,12 @@ stb_string(df, kind)
 		}
 		break;
 	case D_END:
+		if (gdb_flag) break;
 		adds_db_str(sprint(buf, "E%d;", df->mod_vis->sc_count));
 		C_ms_stb_cst(db_str.base, N_SCOPE, proclevel, (arith) 0);
 		break;
 	case D_PEND:
+		if (gdb_flag) break;
 		adds_db_str(sprint(buf, "E%d;", df->prc_vis->sc_count));
 		C_ms_stb_cst(db_str.base, N_SCOPE, proclevel, (arith) 0);
 		break;