using System.Collections.Immutable; namespace BetterGenshinImpact.CombatScript; public abstract class InstructionSymbol : BaseSymbol { protected InstructionSymbol(string name, ImmutableArray leadingTriviaList, TriviaSymbol? tailingTrivia) { Name = name; HasParameterList = false; LeadingTriviaList = leadingTriviaList; TailingTrivia = tailingTrivia; } protected InstructionSymbol(string name, ImmutableArray parameterList, ImmutableArray leadingTriviaList, TriviaSymbol? tailingTrivia) { Name = name; HasParameterList = true; ParameterList = parameterList; LeadingTriviaList = leadingTriviaList; TailingTrivia = tailingTrivia; } public string Name { get; } public bool HasParameterList { get; } public ImmutableArray ParameterList { get; } public ImmutableArray LeadingTriviaList { get; } public TriviaSymbol? TailingTrivia { get; set; } public override void Emit(ISymbolEmitter emitter) { emitter.Append(LeadingTriviaList); if (this is IInstructionSymbolHasAlias {IsAlias: true } hasAlias) { emitter.Append(hasAlias.AliasName); } else { emitter.Append(Name); } if (HasParameterList) { emitter.Append('('); emitter.Append(ParameterList); emitter.Append(')'); } if (TailingTrivia is not null) { emitter.Append(TailingTrivia); } } }