public override AstNode Visit(AliasDeclaration node) { // Visit the using member. Expression member = node.GetMember(); member.Accept(this); // Cast the pseudo-scope. PseudoScope scope = (PseudoScope)node.GetScope(); // Get the member type. IChelaType memberType = member.GetNodeType(); if(memberType.IsMetaType()) { // Get the actual type. memberType = ExtractActualType(node, memberType); // Only structure relatives. if(memberType.IsStructure() || memberType.IsClass() || memberType.IsInterface()) { scope.AddAlias(node.GetName(), (ScopeMember)memberType); } else { Error(node, "unexpected type."); } } else if(memberType.IsReference()) { // Only static members supported. ScopeMember theMember = (ScopeMember)node.GetNodeValue(); MemberFlags instanceFlags = MemberFlags.InstanceMask & theMember.GetFlags(); if(instanceFlags != MemberFlags.Static) Error(node, "unexpected member type."); // Store the member. scope.AddAlias(node.GetName(), theMember); } else if(memberType.IsNamespace()) { // Set the namespace chain. Namespace space = (Namespace)node.GetNodeValue(); scope.AddAlias(node.GetName(), space); } base.Visit(node); return node; }