]> granicus.if.org Git - yasm/commitdiff
Add parser finalization check for undefined symbols.
authorPeter Johnson <peter@tortall.net>
Mon, 15 Oct 2001 07:25:47 +0000 (07:25 -0000)
committerPeter Johnson <peter@tortall.net>
Mon, 15 Oct 2001 07:25:47 +0000 (07:25 -0000)
svn path=/trunk/yasm/; revision=287

frontends/yasm/yasm.c
libyasm/symrec.c
libyasm/symrec.h
src/main.c
src/symrec.c
src/symrec.h

index f08c483f118228e3387f58bc977adb1e1d085b7a..edd8f3ed4590423c5e9564e5415ccc8fc09f04f6 100644 (file)
@@ -135,6 +135,7 @@ main(int argc, char *argv[])
     printf("\n***Symbol Table***\n");
     symrec_foreach((int (*) (symrec *))symrec_print);
 
+    symrec_parser_finalize();
     sections_parser_finalize(sections);
 
     printf("Post-parser-finalization:\n");
index a2700ffeb565244e5d603f82a6188d81bad91ad7..46db876e44fd806eb7fd503502011acb3f20b813 100644 (file)
@@ -243,6 +243,26 @@ symrec_get_equ(const symrec *sym)
     return (const expr *)NULL;
 }
 
+static int
+symrec_parser_finalize_checksym(symrec *sym)
+{
+    /* error if a symbol is used but never defined */
+    if ((sym->status & SYM_USED) && !(sym->status & SYM_DEFINED)) {
+       ErrorAt(sym->filename, sym->line,
+               _("undefined symbol `%s' (first use)"), sym->name);
+       ErrorAt(sym->filename, sym->line,
+               _("(Each undefined symbol is reported only once.)"));
+       return 0;
+    } else
+       return 1;
+}
+
+void
+symrec_parser_finalize(void)
+{
+    symrec_foreach(symrec_parser_finalize_checksym);
+}
+
 void
 symrec_print(const symrec *sym)
 {
index e87e7f193c2ad0249b5b4b70d102acb12f51eace..60ed516e79eeee85db812266f2e8ed95e6a907e9 100644 (file)
@@ -72,5 +72,7 @@ const expr *symrec_get_equ(const symrec *sym);
 
 int symrec_foreach(int (*func) (symrec *sym));
 
+void symrec_parser_finalize(void);
+
 void symrec_print(const symrec *sym);
 #endif
index f08c483f118228e3387f58bc977adb1e1d085b7a..edd8f3ed4590423c5e9564e5415ccc8fc09f04f6 100644 (file)
@@ -135,6 +135,7 @@ main(int argc, char *argv[])
     printf("\n***Symbol Table***\n");
     symrec_foreach((int (*) (symrec *))symrec_print);
 
+    symrec_parser_finalize();
     sections_parser_finalize(sections);
 
     printf("Post-parser-finalization:\n");
index a2700ffeb565244e5d603f82a6188d81bad91ad7..46db876e44fd806eb7fd503502011acb3f20b813 100644 (file)
@@ -243,6 +243,26 @@ symrec_get_equ(const symrec *sym)
     return (const expr *)NULL;
 }
 
+static int
+symrec_parser_finalize_checksym(symrec *sym)
+{
+    /* error if a symbol is used but never defined */
+    if ((sym->status & SYM_USED) && !(sym->status & SYM_DEFINED)) {
+       ErrorAt(sym->filename, sym->line,
+               _("undefined symbol `%s' (first use)"), sym->name);
+       ErrorAt(sym->filename, sym->line,
+               _("(Each undefined symbol is reported only once.)"));
+       return 0;
+    } else
+       return 1;
+}
+
+void
+symrec_parser_finalize(void)
+{
+    symrec_foreach(symrec_parser_finalize_checksym);
+}
+
 void
 symrec_print(const symrec *sym)
 {
index e87e7f193c2ad0249b5b4b70d102acb12f51eace..60ed516e79eeee85db812266f2e8ed95e6a907e9 100644 (file)
@@ -72,5 +72,7 @@ const expr *symrec_get_equ(const symrec *sym);
 
 int symrec_foreach(int (*func) (symrec *sym));
 
+void symrec_parser_finalize(void);
+
 void symrec_print(const symrec *sym);
 #endif