/// <summary> /// Packet definition departure. /// </summary> /// <param name="context"></param> public override void ExitPacket_definition(KryptonParser.Packet_definitionContext context) { _memberContainers.Pop(); _statementContainers.Pop(); _customizables.Pop(); _documentables.Pop(); }
/// <summary> /// Packet definition entry. /// /// PACKET IDENTIFIER (':' packet_parent)? '{' operation_statement+ '}' /// </summary> /// <param name="context"></param> public override void EnterPacket_definition(KryptonParser.Packet_definitionContext context) { var parent = _memberContainers.Peek(); var name = context.IDENTIFIER().GetText(); // Verify our name is unique (with the exception of pairs) if (parent.TryFindMember(name, out var existing) && !(existing is ProtocolPair)) { throw new KryptonParserException($"Multiple definitions for {name}."); } var packet = new Packet(name, parent); parent.AddMember(packet); _memberContainers.Push(packet); _statementContainers.Push(packet); _customizables.Push(packet); _documentables.Push(packet); }