@@ -43,6 +43,7 @@ public type ExprKind enum u8 {
4343 ExplicitCast,
4444 ImplicitCast,
4545 Range,
46+ NamedArgument,
4647}
4748
4849const char*[] exprKind_names = {
@@ -69,6 +70,7 @@ const char*[] exprKind_names = {
6970 "ExplicitCast",
7071 "ImplicitCast",
7172 "RangeExpr",
73+ "NamedArgument",
7274}
7375static_assert(elemsof(ExprKind), elemsof(exprKind_names));
7476
@@ -182,6 +184,8 @@ fn Expr* Expr.instantiate(Expr* e, Instantiator* inst) {
182184 break;
183185 case Range:
184186 return RangeExpr.instantiate((RangeExpr*)e, inst);
187+ case NamedArgument:
188+ return NamedArgument.instantiate((NamedArgument*)e, inst);
185189 }
186190 e.dump();
187191 assert(0);
@@ -273,6 +277,10 @@ public fn bool Expr.isInitlistAssignment(const Expr* e) {
273277 return e.isAssignment() && ((BinaryOperator*)e).getRHS().isInitList();
274278}
275279
280+ public fn bool Expr.isNamedArgument(const Expr* e) {
281+ return e.getKind() == ExprKind.NamedArgument;
282+ }
283+
276284public fn bool Expr.isCtv(const Expr* e) { return e.base.exprBits.is_ctv; }
277285
278286public fn bool Expr.isCtc(const Expr* e) { return e.base.exprBits.is_ctc; }
@@ -382,6 +390,8 @@ public fn SrcLoc Expr.getStartLoc(const Expr* e) {
382390 return ((ImplicitCastExpr*)e).getStartLoc();
383391 case Range:
384392 return ((RangeExpr*)e).getStartLoc();
393+ case NamedArgument:
394+ return ((NamedArgument*)e).getStartLoc();
385395 }
386396 return e.base.loc;
387397}
@@ -434,6 +444,8 @@ public fn SrcLoc Expr.getEndLoc(const Expr* e) {
434444 return ((ImplicitCastExpr*)e).getEndLoc();
435445 case Range:
436446 return ((RangeExpr*)e).getEndLoc();
447+ case NamedArgument:
448+ return ((NamedArgument*)e).getEndLoc();
437449 }
438450 return e.base.loc;
439451}
@@ -480,6 +492,9 @@ public fn bool Expr.needsSemi(const Expr* e) {
480492 case ImplicitCast:
481493 case Range:
482494 break;
495+ case NamedArgument:
496+ const NamedArgument* n = (NamedArgument*)e;
497+ return n.getInner().needsSemi();
483498 }
484499 return true;
485500}
@@ -563,6 +578,9 @@ fn void Expr.print(const Expr* e, string_buffer.Buf* out, u32 indent) {
563578 case Range:
564579 RangeExpr.print((RangeExpr*)e, out, indent);
565580 break;
581+ case NamedArgument:
582+ NamedArgument.print((NamedArgument*)e, out, indent);
583+ break;
566584 }
567585}
568586
@@ -638,6 +656,9 @@ public fn void Expr.printLiteral(const Expr* e, string_buffer.Buf* out) {
638656 case Range:
639657 RangeExpr.printLiteral((RangeExpr*)e, out);
640658 return;
659+ case NamedArgument:
660+ NamedArgument.printLiteral((NamedArgument*)e, out);
661+ break;
641662 }
642663 out.print("<<kind=%d>>", e.getKind());
643664}
0 commit comments