using CanonSharp.Benchmark.Canon.Core.Abstractions; using CanonSharp.Benchmark.Canon.Core.Enums; namespace CanonSharp.Benchmark.Canon.Core.SyntaxNodes; public class Parameter : NonTerminatedSyntaxNode { public override NonTerminatorType Type => NonTerminatorType.Parameter; /// /// 是否为引用变量 /// public bool IsVar { get; private init; } public override void PreVisit(SyntaxNodeVisitor visitor) { visitor.PreVisit(this); } public override void PostVisit(SyntaxNodeVisitor visitor) { visitor.PostVisit(this); } public static Parameter Create(List children) { NonTerminatedSyntaxNode node = children[0].Convert(); bool isVar; if (node.Type == NonTerminatorType.VarParameter) { isVar = true; } else if (node.Type == NonTerminatorType.ValueParameter) { isVar = false; } else { throw new InvalidOperationException(); } return new Parameter { Children = children, IsVar = isVar }; } }