From 562584258278e2676618d359acb8ee5105b9dbd2 Mon Sep 17 00:00:00 2001 From: eck Date: Fri, 2 Feb 1990 09:56:35 +0000 Subject: [PATCH] fixed 2 bugs with line directives --- lang/cem/cemcom.ansi/code.c | 4 ++-- lang/cem/cemcom.ansi/domacro.c | 11 ++++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/lang/cem/cemcom.ansi/code.c b/lang/cem/cemcom.ansi/code.c index 2d40ed68a..b0e02f1ae 100644 --- a/lang/cem/cemcom.ansi/code.c +++ b/lang/cem/cemcom.ansi/code.c @@ -183,7 +183,7 @@ static label return_label, return2_label; static char return_expr_occurred; static arith func_size; static label func_res_label; -static char *last_fn_given = ""; +static char *last_fn_given = (char *)0; static label file_name_label; begin_proc(ds, idf) /* to be called when entering a procedure */ @@ -244,7 +244,7 @@ begin_proc(ds, idf) /* to be called when entering a procedure */ LocalInit(); prc_entry(name); if (! options['L']) { /* profiling */ - if (strcmp(last_fn_given, FileName) != 0) { + if (!last_fn_given || strcmp(last_fn_given, FileName) != 0) { /* previous function came from other file */ C_df_dlb(file_name_label = data_label()); C_con_scon(last_fn_given = FileName, diff --git a/lang/cem/cemcom.ansi/domacro.c b/lang/cem/cemcom.ansi/domacro.c index 72866465c..591a1ca5f 100644 --- a/lang/cem/cemcom.ansi/domacro.c +++ b/lang/cem/cemcom.ansi/domacro.c @@ -762,6 +762,7 @@ do_line(l) { struct token tk; int t = GetToken(&tk); + static char *saved_name = (char *)0; SkipToNewLine(); LineNumber = l; /* the number of the next input line */ @@ -769,7 +770,15 @@ do_line(l) extern char *source; /* defined in main.c */ if (FileName != source) { /* source points into argv */ - free(FileName); + /* Since we are looking one token ahead, we can't + * free the string when it is mentioned in dot. + */ + if (dot.tok_file != FileName) { + free(FileName); + } else if (dot.tok_file != saved_name) { + if (saved_name) free(saved_name); + saved_name = dot.tok_file; + } } FileName = tk.tk_bts; } -- 2.34.1