浏览代码

some more changes for debugger support

ceriel 34 年之前
父节点
当前提交
61ed03dd46
共有 4 个文件被更改,包括 19 次插入5 次删除
  1. 1 0
      lang/m2/comp/.distr
  2. 5 1
      lang/m2/comp/options.c
  3. 11 3
      lang/m2/comp/program.g
  4. 2 1
      lang/m2/comp/stab.c

+ 1 - 0
lang/m2/comp/.distr

@@ -51,6 +51,7 @@ program.g
 real.H
 scope.C
 scope.h
+stab.c
 standards.h
 statement.g
 tmpvar.C

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

@@ -57,10 +57,14 @@ DoOption(text)
 	case 's':	/* symmetric: MIN(INTEGER) = -MAX(INTEGER) */
 	case '3':	/* strict 3rd edition Modula-2 */
 	case 'l':	/* local additions enabled */
-	case 'g':	/* generate symbol table for debugger */
 		options[text[-1]]++;
 		break;
 
+	case 'g':	/* generate symbol table for debugger */
+		options['g']++;
+		options['n']++;	/* no register vars ??? */
+		break;
+
 	case 'w':
 		if (*text) {
 			while (*text) {

+ 11 - 3
lang/m2/comp/program.g

@@ -13,8 +13,8 @@
 #include	"debug.h"
 
 #include	<alloc.h>
-#include	<em_arith.h>
-#include	<em_label.h>
+#include	<em.h>
+#include	<stb.h>
 
 #include	"strict3rd.h"
 #include	"main.h"
@@ -235,7 +235,15 @@ ProgramModule
 	priority(&(df->mod_priority))
 	';' import(0)*
 	block(&(df->mod_body)) IDENT
-		{ if (options['g']) stb_string(df, D_END);
+		{ if (options['g']) {
+			if (state == PROGRAM) {
+				C_ms_stb_cst(df->df_idf->id_text,
+					     N_MAIN,
+					     0,
+					     (arith) 0);
+			}
+			stb_string(df, D_END);
+		  }
 		  close_scope(SC_CHKFORW|SC_CHKPROC|SC_REVERSE);
 		  match_id(df->df_idf, dot.TOK_IDF);
 		}

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

@@ -305,7 +305,8 @@ stb_string(df, kind)
 			}
 		}
 		else {	/* local variable */
-			stb_type(tp, 0);
+			stb_type(tp, 1);	/* assign type num to avoid
+						   difficult to parse string */
 			addc_db_str(';');
 			C_ms_stb_cst(db_str.base, N_LSYM, 0, df->var_off);
 		}