Skip to content

Commit ecd38ee

Browse files
committed
Compiler: use enum based color handling
* add `Color` enum and constant aliases * define standard colors as enum constants
1 parent 4c7b09c commit ecd38ee

File tree

14 files changed

+153
-120
lines changed

14 files changed

+153
-120
lines changed

ast/symbol_table.c2

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,7 @@ public fn void SymbolTable.print(const SymbolTable* t, string_buffer.Buf* out) {
113113
u32 count = t.num_public + t.num_private;
114114
for (u32 i=0; i<count; i++) {
115115
const Decl* d = t.decls[i];
116-
const char* col = d.isUsed() ? color.Normal : color.Grey;
117-
out.color(col);
116+
out.color(d.isUsed() ? color.Normal : color.Grey);
118117
const char* name = ast.idx2name(t.symbols[i]);
119118
out.print(" %s", name);
120119
if (d.isFunction()) out.add("()");
@@ -128,8 +127,7 @@ public fn void SymbolTable.print(const SymbolTable* t, string_buffer.Buf* out) {
128127
const FunctionDecl** fds = std.getStructFunctions();
129128
for (u32 j=0; j<std.getNumStructFunctions(); j++) {
130129
Decl* fd = (Decl*)fds[j];
131-
col = fd.isUsed() ? color.Normal : color.Grey;
132-
out.color(col);
130+
out.color(fd.isUsed() ? color.Normal : color.Grey);
133131
out.indent(6);
134132
out.print("%s.%s()", name, fd.getName());
135133
if (fd.isPublic()) {

ast/utils.c2

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
module ast;
1717

1818
import attr;
19-
import color;
19+
import color local;
2020
import ast_context local;
2121
import string_buffer;
2222
import string_pool;
@@ -307,17 +307,17 @@ public fn BuiltinKind getNativeKind() {
307307
return globals.wordsize == 8 ? BuiltinKind.UInt64 : BuiltinKind.UInt32;
308308
}
309309

310-
const char* col_Stmt = color.Bmagenta;
311-
const char* col_Decl = color.Bgreen;
312-
const char* col_Expr = color.Bmagenta;
313-
const char* col_Attr = color.Blue;
314-
const char* col_Template = color.Green;
315-
//const char* col_Cast = color.Red;
316-
const char* col_Type = color.Green;
317-
const char* col_Value = color.Bcyan;
318-
const char* col_Error = color.Red;
319-
const char* col_Calc = color.Yellow; // all calculated value
320-
const char* col_Normal = color.Normal;
310+
Color col_Stmt = Color.Bmagenta;
311+
Color col_Decl = Color.Bgreen;
312+
Color col_Expr = Color.Bmagenta;
313+
Color col_Attr = Color.Blue;
314+
Color col_Template = Color.Green;
315+
//Color col_Cast = Color.Red;
316+
Color col_Type = Color.Green;
317+
Color col_Value = Color.Bcyan;
318+
Color col_Error = Color.Red;
319+
Color col_Calc = Color.Yellow; // all calculated value
320+
Color col_Normal = Color.Normal;
321321

322322
public type AttrHandlerFn fn bool (void* arg, Decl* d, const attr.Attr* a);
323323

ast_utils/color.c2

Lines changed: 62 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,25 +16,70 @@
1616
module color;
1717
import unistd;
1818

19-
public const char[] Black = "\033[0;30m";
20-
public const char[] Red = "\033[0;31m";
21-
public const char[] Green = "\033[0;32m";
22-
public const char[] Yellow = "\033[0;33m";
23-
public const char[] Blue = "\033[0;34m";
24-
public const char[] Magenta = "\033[0;35m";
25-
public const char[] Cyan = "\033[0;36m";
26-
public const char[] Grey = "\033[0;37m";
27-
public const char[] Darkgrey = "\033[01;30m";
28-
public const char[] Bred = "\033[01;31m";
29-
public const char[] Bgreen = "\033[01;32m";
30-
public const char[] Byellow = "\033[01;33m";
31-
public const char[] Bblue = "\033[01;34m";
32-
public const char[] Bmagenta = "\033[01;35m";
33-
public const char[] Bcyan = "\033[01;36m";
34-
public const char[] White = "\033[01;37m";
35-
public const char[] Normal = "\033[0m";
19+
public type Color enum u8 {
20+
None,
21+
Black,
22+
Red,
23+
Green,
24+
Yellow,
25+
Blue,
26+
Magenta,
27+
Cyan,
28+
Grey,
29+
Darkgrey,
30+
Bred,
31+
Bgreen,
32+
Byellow,
33+
Bblue,
34+
Bmagenta,
35+
Bcyan,
36+
White,
37+
Normal,
38+
}
39+
40+
public const Color Black = Black;
41+
public const Color Red = Red;
42+
public const Color Green = Green;
43+
public const Color Yellow = Yellow;
44+
public const Color Blue = Blue;
45+
public const Color Magenta = Magenta;
46+
public const Color Cyan = Cyan;
47+
public const Color Grey = Grey;
48+
public const Color Darkgrey = Darkgrey;
49+
public const Color Bred = Bred;
50+
public const Color Bgreen = Bgreen;
51+
public const Color Byellow = Byellow;
52+
public const Color Bblue = Bblue;
53+
public const Color Bmagenta = Bmagenta;
54+
public const Color Bcyan = Bcyan;
55+
public const Color White = White;
56+
public const Color Normal = Normal;
57+
58+
const char*[elemsof(Color)] defaultColors = {
59+
[Color.None] = "",
60+
[Color.Black] = "\033[0;30m",
61+
[Color.Red] = "\033[0;31m",
62+
[Color.Green] = "\033[0;32m",
63+
[Color.Yellow] = "\033[0;33m",
64+
[Color.Blue] = "\033[0;34m",
65+
[Color.Magenta] = "\033[0;35m",
66+
[Color.Cyan] = "\033[0;36m",
67+
[Color.Grey] = "\033[0;37m",
68+
[Color.Darkgrey] = "\033[1;30m",
69+
[Color.Bred] = "\033[1;31m",
70+
[Color.Bgreen] = "\033[1;32m",
71+
[Color.Byellow] = "\033[1;33m",
72+
[Color.Bblue] = "\033[1;34m",
73+
[Color.Bmagenta] = "\033[1;35m",
74+
[Color.Bcyan] = "\033[1;36m",
75+
[Color.White] = "\033[1;37m",
76+
[Color.Normal] = "\033[0m",
77+
}
3678

3779
public fn bool useColor() {
3880
return unistd.isatty(1);
3981
}
4082

83+
public fn const char* Color.str(Color col) {
84+
return defaultColors[col];
85+
}

ast_utils/string_buffer.c2

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515

1616
module string_buffer;
1717

18+
import color local;
19+
1820
import stdio local;
1921
import stdarg local;
2022
import stdlib local;
@@ -126,8 +128,8 @@ public fn void Buf.clear(Buf* buf) {
126128
buf.truncated = false;
127129
}
128130

129-
public fn void Buf.color(Buf* buf, const char* color) {
130-
if (buf.colors) buf.add(color);
131+
public fn void Buf.color(Buf* buf, Color col) {
132+
if (buf.colors) buf.add(col.str());
131133
}
132134

133135
public fn void Buf.add1(Buf* buf, char c) {

common/component.c2

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,8 +205,7 @@ public fn void Component.printModules(const Component* c) {
205205
const ast.Module** mods = c.mods.getConst();
206206
for (u32 i=0; i<c.mods.length(); i++) {
207207
const ast.Module* m = mods[i];
208-
const char* col = m.isUsed() ? color.Normal : color.Grey;
209-
out.color(col);
208+
out.color(m.isUsed() ? color.Normal : color.Grey);
210209
out.print(" %s\n", m.getName());
211210
}
212211
out.color(color.Normal);

common/console.c2

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public fn void debug(const char* format @(printf_format), ...) {
4747
vsnprintf(buf, sizeof(buf), format, args);
4848
va_end(args);
4949
if (use_color) {
50-
printf("%s%s%s\n", color.Blue, buf, color.Normal);
50+
printf("%s%s%s\n", color.Blue.str(), buf, color.Normal.str());
5151
} else {
5252
printf("%s\n", buf);
5353
}
@@ -69,7 +69,7 @@ public fn void warn(const char* format @(printf_format), ...) {
6969
vsnprintf(buf, sizeof(buf), format, args);
7070
va_end(args);
7171
if (use_color) {
72-
fprintf(stderr, "%swarning: %s%s\n", color.Yellow, buf, color.Normal);
72+
fprintf(stderr, "%swarning: %s%s\n", color.Yellow.str(), buf, color.Normal.str());
7373
} else {
7474
fprintf(stderr, "warning: %s\n", buf);
7575
}
@@ -82,7 +82,7 @@ public fn void error(const char* format @(printf_format), ...) {
8282
vsprintf(buf, format, args);
8383
va_end(args);
8484
if (use_color) {
85-
fprintf(stderr, "%serror: %s%s\n", color.Red, buf, color.Normal);
85+
fprintf(stderr, "%serror: %s%s\n", color.Red.str(), buf, color.Normal.str());
8686
} else {
8787
fprintf(stderr, "error: %s\n", buf);
8888
}
@@ -95,7 +95,7 @@ public fn void error_diag(const char* loc, const char* format @(printf_format),
9595
vsprintf(buf, format, args);
9696
va_end(args);
9797
if (use_color) {
98-
fprintf(stderr, "%s%s: error: %s%s\n", color.Red, loc, buf, color.Normal);
98+
fprintf(stderr, "%s%s: error: %s%s\n", color.Red.str(), loc, buf, color.Normal.str());
9999
} else {
100100
fprintf(stderr, "%s: error: %s\n", loc, buf);
101101
}
@@ -104,7 +104,7 @@ public fn void error_diag(const char* loc, const char* format @(printf_format),
104104
public fn void log_time(const char* item, u64 duration) {
105105
if (!show_timing) return;
106106
if (use_color) {
107-
printf("%s%s took %d usec%s\n", color.Blue, item, duration, color.Normal);
107+
printf("%s%s took %d usec%s\n", color.Blue.str(), item, duration, color.Normal.str());
108108
} else {
109109
printf("%s took %d usec\n", item, duration);
110110
}

common/diagnostics.c2

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
module diagnostics;
1717

18-
import color;
18+
import color local;
1919
import source_mgr;
2020
import string_buffer;
2121
import src_loc local;
@@ -69,10 +69,10 @@ const char*[] category_names = {
6969
"error",
7070
}
7171

72-
const char*[] category_colors = {
73-
color.Grey,
74-
color.Bmagenta,
75-
color.Bred,
72+
Color[] category_colors = {
73+
Color.Grey,
74+
Color.Bmagenta,
75+
Color.Bred,
7676
}
7777

7878
public fn void Diags.error(Diags* diags, SrcLoc loc, const char* format @(printf_format), ...) {

common/source_mgr.c2

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -183,9 +183,13 @@ public fn i32 SourceMgr.loadFile(SourceMgr* sm, const char* filename, SrcLoc slo
183183
stdio.snprintf(tmp, elemsof(tmp), "%s:%d:%d: ", loc.filename, loc.line, loc.column);
184184
}
185185
}
186-
// TODO only color if enabled (cannot use console since we need source loc first)
187-
stdio.fprintf(stdio.stderr, "%s%serror:%s cannot open %s: %s\n",
188-
tmp, color.Red, color.Normal, filename, file.getError());
186+
// Cannot use console since we need source loc first
187+
if (color.useColor()) {
188+
stdio.fprintf(stdio.stderr, "%s%serror:%s cannot open %s: %s\n",
189+
tmp, color.Red.str(), color.Normal.str(), filename, file.getError());
190+
} else {
191+
stdio.fprintf(stdio.stderr, "%serror: cannot open %s: %s\n", tmp, filename, file.getError());
192+
}
189193
return -1;
190194
}
191195
u32 size;

compiler/c2recipe_parser.c2

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ fn void Parser.error(Parser* p, const char* format @(printf_format), ...) @(nore
202202
p.sm.loc2str(p.token.loc, locstr, elemsof(locstr));
203203

204204
if (color.useColor()) {
205-
fprintf(stderr, "%s: %serror:%s %s\n", locstr, color.Red, color.Normal, msg);
205+
fprintf(stderr, "%s: %serror:%s %s\n", locstr, color.Red.str(), color.Normal.str(), msg);
206206
} else {
207207
fprintf(stderr, "%s: error: %s\n", locstr, msg);
208208
}
@@ -220,7 +220,7 @@ fn void Parser.warning(Parser* p, const char* format @(printf_format), ...) {
220220
p.sm.loc2str(p.token.loc, locstr, elemsof(locstr));
221221

222222
if (color.useColor()) {
223-
fprintf(stderr, "%s: %swarning:%s %s\n", locstr, color.Red, color.Normal, msg);
223+
fprintf(stderr, "%s: %swarning:%s %s\n", locstr, color.Red.str(), color.Normal.str(), msg);
224224
} else {
225225
fprintf(stderr, "%s: warning: %s\n", locstr, msg);
226226
}

ir/print.c2

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -23,22 +23,22 @@ import stdio;
2323
import stdlib;
2424
import string;
2525

26-
const char* col_Instr = color.Normal;
27-
const char* col_PseudoInstr = color.Bred;
28-
const char* col_Decl = color.Magenta;
29-
const char* col_Name = color.White;
30-
const char* col_Block = color.Cyan;
31-
const char* col_Symbol = color.Bblue;
32-
const char* col_Attr = color.Bmagenta;
33-
const char* col_Unknown = color.Yellow;
34-
const char* col_Value = color.Magenta;
35-
const char* col_Register = color.Bgreen;
36-
const char* col_Data = color.Bcyan;
37-
const char* col_Slot = color.Bcyan;
38-
const char* col_Temp = color.Bgreen;
39-
const char* col_Type = color.Green;
40-
const char* col_Comment = color.Grey;
41-
const char* col_Fixup = color.Bred;
26+
Color col_Instr = Normal;
27+
Color col_PseudoInstr = Bred;
28+
Color col_Decl = Magenta;
29+
Color col_Name = White;
30+
Color col_Block = Cyan;
31+
Color col_Symbol = Bblue;
32+
Color col_Attr = Bmagenta;
33+
Color col_Unknown = Yellow;
34+
Color col_Value = Magenta;
35+
Color col_Register = Bgreen;
36+
Color col_Data = Bcyan;
37+
Color col_Slot = Bcyan;
38+
Color col_Temp = Bgreen;
39+
Color col_Type = Green;
40+
Color col_Comment = Grey;
41+
Color col_Fixup = Bred;
4242

4343
const u32 MaxTemps = 4096;
4444

0 commit comments

Comments
 (0)