void TestParameters(DelegateDeclaration dd)
        {
            Assert.AreEqual(3, dd.Parameters.Count);

            Assert.AreEqual("a", ((ParameterDeclarationExpression)dd.Parameters[0]).ParameterName);
            Assert.AreEqual("System.Int32", ((ParameterDeclarationExpression)dd.Parameters[0]).TypeReference.Type);

            Assert.AreEqual("secondParam", ((ParameterDeclarationExpression)dd.Parameters[1]).ParameterName);
            Assert.AreEqual("System.Int32", ((ParameterDeclarationExpression)dd.Parameters[1]).TypeReference.Type);

            Assert.AreEqual("lastParam", ((ParameterDeclarationExpression)dd.Parameters[2]).ParameterName);
            Assert.AreEqual("MyObj", ((ParameterDeclarationExpression)dd.Parameters[2]).TypeReference.Type);
        }
        public override object VisitDelegateDeclaration(DelegateDeclaration delegateDeclaration, object data)
        {
            CodeTypeDelegate codeTypeDelegate = new CodeTypeDelegate(delegateDeclaration.Name);
            codeTypeDelegate.Attributes = ConvMemberAttributes(delegateDeclaration.Modifier);
            codeTypeDelegate.ReturnType = ConvType(delegateDeclaration.ReturnType);

            foreach (ParameterDeclarationExpression parameter in delegateDeclaration.Parameters)
            {
                codeTypeDelegate.Parameters.Add((CodeParameterDeclarationExpression)VisitParameterDeclarationExpression(parameter, data));
            }

            if (typeDeclarations.Count > 0)
            {
                typeDeclarations.Peek().Members.Add(codeTypeDelegate);
            }
            else
            {
                namespaceDeclarations.Peek().Types.Add(codeTypeDelegate);
            }

            return null;
        }
 public override sealed object VisitDelegateDeclaration(DelegateDeclaration delegateDeclaration, object data)
 {
     this.BeginVisit(delegateDeclaration);
     object result = this.TrackedVisitDelegateDeclaration(delegateDeclaration, data);
     this.EndVisit(delegateDeclaration);
     return result;
 }
 public virtual object TrackedVisitDelegateDeclaration(DelegateDeclaration delegateDeclaration, object data)
 {
     return base.VisitDelegateDeclaration(delegateDeclaration, data);
 }
예제 #5
0
 public virtual object VisitDelegateDeclaration(DelegateDeclaration delegateDeclaration, object data)
 {
     Debug.Assert((delegateDeclaration != null));
     Debug.Assert((delegateDeclaration.Attributes != null));
     Debug.Assert((delegateDeclaration.ReturnType != null));
     Debug.Assert((delegateDeclaration.Parameters != null));
     Debug.Assert((delegateDeclaration.Templates != null));
     foreach (AttributeSection o in delegateDeclaration.Attributes) {
         Debug.Assert(o != null);
         o.AcceptVisitor(this, data);
     }
     delegateDeclaration.ReturnType.AcceptVisitor(this, data);
     foreach (ParameterDeclarationExpression o in delegateDeclaration.Parameters) {
         Debug.Assert(o != null);
         o.AcceptVisitor(this, data);
     }
     foreach (TemplateDefinition o in delegateDeclaration.Templates) {
         Debug.Assert(o != null);
         o.AcceptVisitor(this, data);
     }
     return null;
 }
 public virtual object VisitDelegateDeclaration(DelegateDeclaration delegateDeclaration, object data)
 {
     throw new global::System.NotImplementedException("DelegateDeclaration");
 }
 void TestDelegateDeclaration(DelegateDeclaration dd)
 {
     Assert.AreEqual("System.Void", dd.ReturnType.Type);
     Assert.AreEqual("MyDelegate", dd.Name);
 }
예제 #8
0
        void NonModuleDeclaration(ModifierList m, List<AttributeSection> attributes)
        {
            TypeReference typeRef = null;
            List<TypeReference> baseInterfaces = null;

            switch (la.kind) {
            case 84: {
            m.Check(Modifiers.Classes);
            Get();
            TypeDeclaration newType = new TypeDeclaration(m.Modifier, attributes);
                newType.StartLocation = t.Location;
                AddChild(newType);
                BlockStart(newType);

                newType.Type       = ClassType.Class;

            Identifier();
            newType.Name = t.val;
            TypeParameterList(newType.Templates);
            EndOfStmt();
            newType.BodyStartLocation = t.Location;
            if (la.kind == 140) {
                ClassBaseType(out typeRef);
                SafeAdd(newType, newType.BaseTypes, typeRef);
            }
            while (la.kind == 136) {
                TypeImplementsClause(out baseInterfaces);
                newType.BaseTypes.AddRange(baseInterfaces);
            }
            ClassBody(newType);
            Expect(113);
            Expect(84);
            newType.EndLocation = t.EndLocation;
            EndOfStmt();
            BlockEnd();

            break;
            }
            case 155: {
            Get();
            m.Check(Modifiers.VBModules);
                TypeDeclaration newType = new TypeDeclaration(m.Modifier, attributes);
                AddChild(newType);
                BlockStart(newType);
                newType.StartLocation = m.GetDeclarationLocation(t.Location);
                newType.Type = ClassType.Module;

            Identifier();
            newType.Name = t.val;
            EndOfStmt();
            newType.BodyStartLocation = t.Location;
            ModuleBody(newType);
            BlockEnd();

            break;
            }
            case 209: {
            Get();
            m.Check(Modifiers.VBStructures);
                TypeDeclaration newType = new TypeDeclaration(m.Modifier, attributes);
                AddChild(newType);
                BlockStart(newType);
                newType.StartLocation = m.GetDeclarationLocation(t.Location);
                newType.Type = ClassType.Struct;

            Identifier();
            newType.Name = t.val;
            TypeParameterList(newType.Templates);
            EndOfStmt();
            newType.BodyStartLocation = t.Location;
            while (la.kind == 136) {
                TypeImplementsClause(out baseInterfaces);
                newType.BaseTypes.AddRange(baseInterfaces);
            }
            StructureBody(newType);
            BlockEnd();

            break;
            }
            case 115: {
            Get();
            m.Check(Modifiers.VBEnums);
                TypeDeclaration newType = new TypeDeclaration(m.Modifier, attributes);
                newType.StartLocation = m.GetDeclarationLocation(t.Location);
                AddChild(newType);
                BlockStart(newType);

                newType.Type = ClassType.Enum;

            Identifier();
            newType.Name = t.val;
            if (la.kind == 63) {
                Get();
                NonArrayTypeName(out typeRef, false);
                SafeAdd(newType, newType.BaseTypes, typeRef);
            }
            EndOfStmt();
            newType.BodyStartLocation = t.Location;
            EnumBody(newType);
            BlockEnd();

            break;
            }
            case 142: {
            Get();
            m.Check(Modifiers.VBInterfacs);
                TypeDeclaration newType = new TypeDeclaration(m.Modifier, attributes);
                newType.StartLocation = m.GetDeclarationLocation(t.Location);
                AddChild(newType);
                BlockStart(newType);
                newType.Type = ClassType.Interface;

            Identifier();
            newType.Name = t.val;
            TypeParameterList(newType.Templates);
            EndOfStmt();
            newType.BodyStartLocation = t.Location;
            while (la.kind == 140) {
                InterfaceBase(out baseInterfaces);
                newType.BaseTypes.AddRange(baseInterfaces);
            }
            InterfaceBody(newType);
            BlockEnd();

            break;
            }
            case 103: {
            Get();
            m.Check(Modifiers.VBDelegates);
                DelegateDeclaration delegateDeclr = new DelegateDeclaration(m.Modifier, attributes);
                delegateDeclr.ReturnType = new TypeReference("System.Void", true);
                delegateDeclr.StartLocation = m.GetDeclarationLocation(t.Location);
                List<ParameterDeclarationExpression> p = new List<ParameterDeclarationExpression>();

            if (la.kind == 210) {
                Get();
                Identifier();
                delegateDeclr.Name = t.val;
                TypeParameterList(delegateDeclr.Templates);
                if (la.kind == 37) {
                    Get();
                    if (StartOf(7)) {
                        FormalParameterList(p);
                    }
                    Expect(38);
                    delegateDeclr.Parameters = p;
                }
            } else if (la.kind == 127) {
                Get();
                Identifier();
                delegateDeclr.Name = t.val;
                TypeParameterList(delegateDeclr.Templates);
                if (la.kind == 37) {
                    Get();
                    if (StartOf(7)) {
                        FormalParameterList(p);
                    }
                    Expect(38);
                    delegateDeclr.Parameters = p;
                }
                if (la.kind == 63) {
                    Get();
                    TypeReference type;
                    TypeName(out type);
                    delegateDeclr.ReturnType = type;
                }
            } else SynErr(251);
            delegateDeclr.EndLocation = t.EndLocation;
            EndOfStmt();
            AddChild(delegateDeclr);

            break;
            }
            default: SynErr(252); break;
            }
        }
 public virtual object VisitDelegateDeclaration(DelegateDeclaration delegateDeclaration, object data)
 {
     Debug.Assert((delegateDeclaration != null));
     Debug.Assert((delegateDeclaration.Attributes != null));
     Debug.Assert((delegateDeclaration.ReturnType != null));
     Debug.Assert((delegateDeclaration.Parameters != null));
     Debug.Assert((delegateDeclaration.Templates != null));
     for (int i = 0; i < delegateDeclaration.Attributes.Count; i++) {
         AttributeSection o = delegateDeclaration.Attributes[i];
         Debug.Assert(o != null);
         nodeStack.Push(o);
         o.AcceptVisitor(this, data);
         o = (AttributeSection)nodeStack.Pop();
         if (o == null)
             delegateDeclaration.Attributes.RemoveAt(i--);
         else
             delegateDeclaration.Attributes[i] = o;
     }
     nodeStack.Push(delegateDeclaration.ReturnType);
     delegateDeclaration.ReturnType.AcceptVisitor(this, data);
     delegateDeclaration.ReturnType = ((TypeReference)(nodeStack.Pop()));
     for (int i = 0; i < delegateDeclaration.Parameters.Count; i++) {
         ParameterDeclarationExpression o = delegateDeclaration.Parameters[i];
         Debug.Assert(o != null);
         nodeStack.Push(o);
         o.AcceptVisitor(this, data);
         o = (ParameterDeclarationExpression)nodeStack.Pop();
         if (o == null)
             delegateDeclaration.Parameters.RemoveAt(i--);
         else
             delegateDeclaration.Parameters[i] = o;
     }
     for (int i = 0; i < delegateDeclaration.Templates.Count; i++) {
         TemplateDefinition o = delegateDeclaration.Templates[i];
         Debug.Assert(o != null);
         nodeStack.Push(o);
         o.AcceptVisitor(this, data);
         o = (TemplateDefinition)nodeStack.Pop();
         if (o == null)
             delegateDeclaration.Templates.RemoveAt(i--);
         else
             delegateDeclaration.Templates[i] = o;
     }
     return null;
 }