From b466717c6ed8eb9e7fde8bf0de8a4b5eb4e17107 Mon Sep 17 00:00:00 2001 From: nazrin Date: Wed, 28 May 2025 22:56:01 +0000 Subject: [PATCH] expr.d: metafy a bit more --- src/expr.d | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/expr.d b/src/expr.d index 408129b..e28afec 100644 --- a/src/expr.d +++ b/src/expr.d @@ -1,5 +1,6 @@ import std.conv; import std.stdio; +import std.meta : AliasSeq; import taggedalgebraic; @@ -13,13 +14,16 @@ abstract class Expr{ R visit(Literal expr); R visit(Unary expr); } - abstract string accept(Visitor!string visitor); + private alias rTypes = AliasSeq!(string); + static foreach(T; rTypes) + abstract T accept(Visitor!T visitor); private template defCtorAndAccept(){ this(Args...)(auto ref Args args){ static foreach(i, a; args) this.tupleof[i] = a; } - override string accept(Visitor!string visitor) => visitor.visit(this); + static foreach(T; rTypes) + override T accept(Visitor!T visitor) => visitor.visit(this); } static class Binary : Expr{