fixed 2 bugs with line directives
authoreck <none@none>
Fri, 2 Feb 1990 09:56:35 +0000 (09:56 +0000)
committereck <none@none>
Fri, 2 Feb 1990 09:56:35 +0000 (09:56 +0000)
lang/cem/cemcom.ansi/code.c
lang/cem/cemcom.ansi/domacro.c

index 2d40ed6..b0e02f1 100644 (file)
@@ -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,
index 7286646..591a1ca 100644 (file)
@@ -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;
        }