public SimpleRecResult Declare() { var State = Container.State; var Arch = State.Arch; //------------------------------------------------------------------ if (Type == TypeDeclType.Struct || Type == TypeDeclType.Class) { var NewType = (StructuredType)null; if (Type == TypeDeclType.Struct) { NewType = new StructType(Container, Name); if (Bases.Length > 0) { for (var i = 0; i < Bases.Length; i++) { State.Messages.Add(MessageId.CannotInherit, Bases[i].Name); } return(SimpleRecResult.Failed); } } else { NewType = new ClassType(Container, Name); } if (!Modifiers.Apply(Mods, NewType)) { return(SimpleRecResult.Failed); } if (!Container.DeclareIdentifier(NewType)) { return(SimpleRecResult.Failed); } NewType.BaseStructures = Bases; NewType.StructuredScope = new StructuredScope(Container, Inner, NewType); Container.Children.Add(NewType.StructuredScope); DeclaredType = NewType; return(SimpleRecResult.Succeeded); } //------------------------------------------------------------------ else if (Type == TypeDeclType.Enum || Type == TypeDeclType.Flag) { var NewType = (EnumType)null; if (Bases.Length == 1) { if (Type == TypeDeclType.Flag) { NewType = new FlagType(Container, Name, Bases[0].Name); } else { NewType = new EnumType(Container, Name, Bases[0].Name); } if (Bases[0].Base != null) { NewType.Children[0] = Bases[0].Base; } if (Bases[0].Flags != StructureBaseFlags.None) { State.Messages.Add(MessageId.NotExpected, Bases[0].Declaration); return(SimpleRecResult.Failed); } } else if (Bases.Length > 1) { for (var i = 1; i < Bases.Length; i++) { State.Messages.Add(MessageId.NotExpected, Bases[i].Declaration); } return(SimpleRecResult.Failed); } else { if (Type == TypeDeclType.Flag) { NewType = new FlagType(Container, Name, new CodeString()); } else { NewType = new EnumType(Container, Name, new CodeString()); } } if (!Modifiers.Apply(Mods, NewType)) { return(SimpleRecResult.Failed); } if (!Container.DeclareIdentifier(NewType)) { return(SimpleRecResult.Failed); } NewType.EnumScope = new EnumScope(Container, Inner, NewType); Container.Children.Add(NewType.EnumScope); DeclaredType = NewType; return(SimpleRecResult.Succeeded); } //------------------------------------------------------------------ else { throw new ApplicationException(); } }