@@ -35,6 +35,13 @@ const char*[] varDeclNames = {
3535
3636static_assert(elemsof(VarDeclKind), elemsof(varDeclNames));
3737
38+ type AutoAttr enum u32 {
39+ None,
40+ File,
41+ Line,
42+ Func,
43+ }
44+
3845type VarDeclBits struct {
3946 u32 : NumDeclBits;
4047 u32 kind : 3;
@@ -43,8 +50,7 @@ type VarDeclBits struct {
4350 u32 has_init_call : 1; // local variables only
4451 u32 attr_weak : 1; // globals only
4552 u32 addr_used : 1;
46- u32 auto_file : 1; // for parameters only
47- u32 auto_line : 1; // for parameters only
53+ u32 auto_attr : 2; // AutoAttr, for parameters only
4854 u32 printf_format : 1; // for parameters only
4955}
5056
@@ -255,23 +261,31 @@ public fn bool VarDecl.hasAttrWeak(const VarDecl* d) {
255261}
256262
257263public fn void VarDecl.setAttrAutoFile(VarDecl* d) {
258- d.base.varDeclBits.auto_file = 1 ;
264+ d.base.varDeclBits.auto_attr = AutoAttr.File ;
259265}
260266
261267public fn bool VarDecl.hasAttrAutoFile(const VarDecl* d) {
262- return d.base.varDeclBits.auto_file ;
268+ return d.base.varDeclBits.auto_attr == AutoAttr.File ;
263269}
264270
265271public fn void VarDecl.setAttrAutoLine(VarDecl* d) {
266- d.base.varDeclBits.auto_line = 1 ;
272+ d.base.varDeclBits.auto_attr = AutoAttr.Line ;
267273}
268274
269275public fn bool VarDecl.hasAttrAutoLine(const VarDecl* d) {
270- return d.base.varDeclBits.auto_line;
276+ return d.base.varDeclBits.auto_attr == AutoAttr.Line;
277+ }
278+
279+ public fn void VarDecl.setAttrAutoFunc(VarDecl* d) {
280+ d.base.varDeclBits.auto_attr = AutoAttr.Func;
281+ }
282+
283+ public fn bool VarDecl.hasAttrAutoFunc(const VarDecl* d) {
284+ return d.base.varDeclBits.auto_attr == AutoAttr.Func;
271285}
272286
273287public fn bool VarDecl.hasAutoAttr(const VarDecl* d) {
274- return d.base.varDeclBits.auto_file || d.base.varDeclBits.auto_line ;
288+ return d.base.varDeclBits.auto_attr != AutoAttr.None ;
275289}
276290
277291public fn void VarDecl.setPrintfFormat(VarDecl* d) {
@@ -297,8 +311,12 @@ fn void VarDecl.print(const VarDecl* d, string_buffer.Buf* out, u32 indent) {
297311 if (d.hasLocalQualifier()) out.add(" (local)");
298312 if (d.base.varDeclBits.attr_weak) out.add(" weak");
299313 if (d.base.varDeclBits.addr_used) out.add(" addr_used");
300- if (d.base.varDeclBits.auto_file) out.add(" auto_file");
301- if (d.base.varDeclBits.auto_line) out.add(" auto_line");
314+ switch ((AutoAttr)d.base.varDeclBits.auto_attr) {
315+ case None: break;
316+ case File: out.add(" auto_file"); break;
317+ case Line: out.add(" auto_line"); break;
318+ case Func: out.add(" auto_func"); break;
319+ }
302320 if (d.base.varDeclBits.printf_format) out.add(" printf_format");
303321 if (d.base.varDeclBits.has_init_call) out.add(" init_call");
304322 d.base.printBits(out);
0 commit comments