Next: , Previous: Switch Statement Symbols, Up: Syntactic Symbols

10.2.5 Brace List Symbols

There are a set of syntactic symbols that are used to recognize constructs inside of brace lists. A brace list is defined as an enum or aggregate initializer list, such as might statically initialize an array of structs. The three special aggregate constructs in Pike, ({ }), ([ ]) and (< >), are treated as brace lists too. An example:

      1: static char* ingredients[] =
      2: {
      3:     "Ham",
      4:     "Salt",
      5:     NULL
      6: };

Following convention, line 2 in this example is assigned brace-list-open syntax, and line 3 is assigned brace-list-intro syntax. Likewise, line 6 is assigned brace-list-close syntax. Lines 4 and 5 however, are assigned brace-list-entry syntax, as would all subsequent lines in this initializer list.

Your static initializer might be initializing nested structures, for example:

      1: struct intpairs[] =
      2: {
      3:     { 1, 2 },
      4:     {
      5:         3,
      6:         4
      7:     }
      8:     { 1,
      9:       2 },
     10:     { 3, 4 }
     11: };

Here, you've already seen the analysis of lines 1, 2, 3, and 11. On line 4, things get interesting; this line is assigned brace-entry-open syntactic symbol because it's a bracelist entry line that starts with an open brace. Lines 5 and 6 are pretty standard, and line 7 is a brace-list-close as you'd expect. Once again, line 8 is assigned as brace-entry-open as is line 10. Line 9 is assigned two syntactic elements, brace-list-intro with anchor point at the ‘{’ of line 81, and brace-list-entry anchored on the ‘1’ of line 8.


Footnotes

[1] This extra syntactic element was introduced in CC Mode 5.33.1 to allow extra flexibility in indenting the second line of such a construct. You can preserve the behavior resulting from the former syntactic analysis by giving brace-list-entry an offset of c-lineup-under-anchor (see Misc Line-Up).