@@ -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
@@ -246,23 +252,31 @@ public fn bool VarDecl.hasAttrWeak(const VarDecl* d) {
246252}
247253
248254public fn void VarDecl.setAttrAutoFile(VarDecl* d) {
249- d.base.varDeclBits.auto_file = 1 ;
255+ d.base.varDeclBits.auto_attr = AutoAttr.File ;
250256}
251257
252258public fn bool VarDecl.hasAttrAutoFile(const VarDecl* d) {
253- return d.base.varDeclBits.auto_file ;
259+ return d.base.varDeclBits.auto_attr == AutoAttr.File ;
254260}
255261
256262public fn void VarDecl.setAttrAutoLine(VarDecl* d) {
257- d.base.varDeclBits.auto_line = 1 ;
263+ d.base.varDeclBits.auto_attr = AutoAttr.Line ;
258264}
259265
260266public fn bool VarDecl.hasAttrAutoLine(const VarDecl* d) {
261- return d.base.varDeclBits.auto_line;
267+ return d.base.varDeclBits.auto_attr == AutoAttr.Line;
268+ }
269+
270+ public fn void VarDecl.setAttrAutoFunc(VarDecl* d) {
271+ d.base.varDeclBits.auto_attr = AutoAttr.Func;
272+ }
273+
274+ public fn bool VarDecl.hasAttrAutoFunc(const VarDecl* d) {
275+ return d.base.varDeclBits.auto_attr == AutoAttr.Func;
262276}
263277
264278public fn bool VarDecl.hasAutoAttr(const VarDecl* d) {
265- return d.base.varDeclBits.auto_file || d.base.varDeclBits.auto_line ;
279+ return d.base.varDeclBits.auto_attr != AutoAttr.None ;
266280}
267281
268282public fn void VarDecl.setPrintfFormat(VarDecl* d) {
@@ -288,8 +302,12 @@ fn void VarDecl.print(const VarDecl* d, string_buffer.Buf* out, u32 indent) {
288302 if (d.hasLocalQualifier()) out.add(" (local)");
289303 if (d.base.varDeclBits.attr_weak) out.add(" weak");
290304 if (d.base.varDeclBits.addr_used) out.add(" addr_used");
291- if (d.base.varDeclBits.auto_file) out.add(" auto_file");
292- if (d.base.varDeclBits.auto_line) out.add(" auto_line");
305+ switch ((AutoAttr)d.base.varDeclBits.auto_attr) {
306+ case None: break;
307+ case File: out.add(" auto_file"); break;
308+ case Line: out.add(" auto_line"); break;
309+ case Func: out.add(" auto_func"); break;
310+ }
293311 if (d.base.varDeclBits.printf_format) out.add(" printf_format");
294312 if (d.base.varDeclBits.has_init_call) out.add(" init_call");
295313 d.base.printBits(out);
0 commit comments