scan-code.l

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
  {
          static struct obstack msg_buf;
          const char *tail = explicit_bracketing ? "" :
            cp + strlen (var->id);
          const char *id = var->hidden_by ? var->hidden_by->id :
            var->id;
          location id_loc = var->hidden_by ? var->hidden_by->loc :
            var->loc;

          /* Create the explanation message. */
          obstack_init (&msg_buf);

          obstack_fgrow1 (&msg_buf, _("possibly meant: %c"), dollar_or_at);
          if (contains_dot_or_dash (id))
            obstack_fgrow1 (&msg_buf, "[%s]", id);
          else
            obstack_sgrow (&msg_buf, id);
          obstack_sgrow (&msg_buf, tail);

          if (var->err & VARIANT_HIDDEN)
            {
              obstack_fgrow1 (&msg_buf, _(", hiding %c"), dollar_or_at);
              if (contains_dot_or_dash (var->id))
                obstack_fgrow1 (&msg_buf, "[%s]", var->id);
              else
                obstack_sgrow (&msg_buf, var->id);
              obstack_sgrow (&msg_buf, tail);
            }

          obstack_fgrow1 (&msg_buf, _(" at %s"), at_spec);

          if (var->err & VARIANT_NOT_VISIBLE_FROM_MIDRULE)
            {
              const char *format =
                _(", cannot be accessed from mid-rule action at $%d");
              obstack_fgrow1 (&msg_buf, format, midrule_rhs_index);
            }

          obstack_1grow (&msg_buf, '\0');
          if (is_warning)
            warn_at_indent (id_loc, &indent, "%s",
                            (char *) obstack_finish (&msg_buf));
          else
            complain_at_indent (id_loc, &indent, "%s",
                                (char *) obstack_finish (&msg_buf));
          obstack_free (&msg_buf, 0);
        }