public override AstNode Visit(EnumDefinition node) { // Prevent redefinition. ScopeMember old = currentContainer.FindType(node.GetName(), GenericPrototype.Empty); if (old != null) { Error(node, "trying to redefine a enum."); } // Create the structure Structure building = new Structure(node.GetName(), node.GetFlags(), currentContainer); building.Position = node.GetPosition(); node.SetStructure(building); // Add into the current scope. if (currentContainer.IsNamespace()) { Namespace space = (Namespace)currentContainer; space.AddType(building); } else if (currentContainer.IsStructure() || currentContainer.IsInterface() || currentContainer.IsClass()) { Structure parent = (Structure)currentContainer; parent.AddType(building); } else { Error(node, "unexpected place for a structure."); } return(node); }