Ejemplo n.º 1
0
        void ExportEnum(EnumDeclarationSyntax c)
        {
            string name      = "";
            string nameSpace = "";

            NamespaceDeclarationSyntax namespaceDeclarationSyntax = c.Parent as NamespaceDeclarationSyntax;

            if (namespaceDeclarationSyntax != null)
            {
                nameSpace = namespaceDeclarationSyntax.Name.ToString();
            }
            else
            {
                nameSpace = ModelData.GloableNamespaceName;
            }
            name = c.Identifier.Text;

            if (step == ECompilerStet.ScanType)
            {
                type_list.Add(new ULTypeInfo());
                types.Push(type_list[type_list.Count - 1]);

                currentType.Namespace = nameSpace;
                currentType.Name      = name;
                currentType.IsEnum    = true;
                ModelData.UpdateType(currentType);
            }
            else
            {
                types.Push(ModelData.FindTypeByFullName(nameSpace + "." + name));
            }

            if (step == ECompilerStet.ScanMember)
            {
                //导出所有变量
                var virableNodes = c.ChildNodes().OfType <EnumMemberDeclarationSyntax>();
                foreach (var v in virableNodes)
                {
                    var dB_Member = new ULMemberInfo();
                    dB_Member.Name            = v.Identifier.Text;
                    dB_Member.IsStatic        = false;
                    dB_Member.DeclareTypeName = currentType.FullName;
                    dB_Member.MemberType      = ULMemberInfo.EMemberType.Enum;

                    currentType.Members.Add(dB_Member);
                }
            }

            types.Pop();
        }
Ejemplo n.º 2
0
        void ExportMethod(BaseMethodDeclarationSyntax v)
        {
            MethodDeclarationSyntax method = v as MethodDeclarationSyntax;

            var methodInfo = new Model.ULMemberInfo();

            methodInfo.DeclareTypeID = this.type.ID;
            methodInfo.Name          = method.Identifier.ValueText;
            methodInfo.IsStatic      = ContainModifier(method.Modifiers, "static");
            methodInfo.Modifier      = GetModifier(method.Modifiers);
            var memberType = GetTypeInfo(method.ReturnType);

            methodInfo.TypeID     = memberType != null ? memberType.ID : "";
            methodInfo.MemberType = ULMemberInfo.EMemberType.Method;
            type.Members.Add(methodInfo);

            if (memberType != null)
            {
                methodInfo.Graph.Outputs.Add(new ULArg()
                {
                    Name = "ret", TypeID = memberType.ID
                });
            }

            foreach (var a in method.ParameterList.Parameters)
            {
                if (ContainModifier(a.Modifiers, "ref"))
                {
                    methodInfo.Graph.Outputs.Add(GetArgument(a));
                    methodInfo.Graph.Args.Add(GetArgument(a));
                }

                else if (ContainModifier(a.Modifiers, "out"))
                {
                    methodInfo.Graph.Outputs.Add(GetArgument(a));
                }
                else
                {
                    methodInfo.Graph.Args.Add(GetArgument(a));
                }
            }

            CompileNode_ExportBody exportBody = new CompileNode_ExportBody();

            exportBody.Parent = this;
            exportBody.ExportBody(v.Body, methodInfo.Graph);
        }
Ejemplo n.º 3
0
        void ExportVariable(BaseFieldDeclarationSyntax v)
        {
            if (step == ECompilerStet.ScanMember)
            {
                var vtype = GetType(v.Declaration.Type);

                foreach (var ve in v.Declaration.Variables)
                {
                    var dB_Member = new ULMemberInfo();
                    dB_Member.Name            = ve.Identifier.Text;
                    dB_Member.IsStatic        = ContainModifier(v.Modifiers, "static") || ContainModifier(v.Modifiers, "const");
                    dB_Member.DeclareTypeName = currentType.FullName;
                    dB_Member.TypeName        = vtype.FullName;

                    if (v is FieldDeclarationSyntax)
                    {
                        dB_Member.MemberType = ULMemberInfo.EMemberType.Field;
                    }
                    else if (v is EventFieldDeclarationSyntax)
                    {
                        dB_Member.MemberType = ULMemberInfo.EMemberType.Event;
                    }
                    else
                    {
                        Console.Error.WriteLine("无法识别的类成员 " + v);
                    }
                    dB_Member.Modifier = GetModifier(v.Modifiers);
                    //if (ve.Initializer != null)
                    //    dB_Member.field_initializer = ExportExp(ve.Initializer.Value);

                    //dB_Member.attributes = ExportAttributes(v.AttributeLists);
                    //Metadata.DB.SaveDBMember(dB_Member, _con, _trans);
                    //Model.AddMember(type.static_full_name, dB_Member);
                    currentType.Members.Add(dB_Member);
                }
            }
        }
Ejemplo n.º 4
0
        void ToMember(ULMemberInfo memberInfo)
        {
            BeginAppendLine();

            if (memberInfo.Modifier == EModifier.Public)
            {
                Append("public ");
            }
            else if (memberInfo.Modifier == EModifier.Protected)
            {
                Append("protected ");
            }
            else
            {
                Append("private ");
            }

            if (memberInfo.IsStatic)
            {
                Append("static ");
            }
            var memberType = Data.GetType(memberInfo.TypeID);

            Append(memberType != null ? memberType.Name : "void");
            Append(" ");
            Append(memberInfo.Name);
            switch (memberInfo.MemberType)
            {
            case ULMemberInfo.EMemberType.Field:
                Append(";");
                break;

            case ULMemberInfo.EMemberType.Property:
                Append("{ get; set;}");
                break;

            case ULMemberInfo.EMemberType.Method:
                Append("(");

                if (memberInfo.Graph != null)
                {
                    int arg_count = memberInfo.Graph.Args.Count + memberInfo.Graph.Outputs.Count;
                    if (memberType != null)
                    {
                        arg_count -= 1;
                    }
                    for (int i = 0; i < memberInfo.Graph.Args.Count; i++)
                    {
                        Append(Data.GetType(memberInfo.Graph.Args[i].TypeID).Name + " " + memberInfo.Graph.Args[i].Name);
                        if (i < arg_count - 1)
                        {
                            Append(",");
                        }
                    }
                    for (int i = 0; i < memberInfo.Graph.Outputs.Count; i++)
                    {
                        if (memberInfo.Graph.Outputs[i].Name != "ret")
                        {
                            Append("out " + Data.GetType(memberInfo.Graph.Outputs[i].TypeID).Name + " " + memberInfo.Graph.Outputs[i].Name);
                            if (i + memberInfo.Graph.Args.Count < arg_count - 1)
                            {
                                Append(",");
                            }
                        }
                    }
                }

                Append(")");
                break;
            }
            EndAppendLine();

            if (memberInfo.MemberType == ULMemberInfo.EMemberType.Method)
            {
                AppendLine("{");
                ToGraph(memberInfo.Graph);
                AppendLine("}");
            }
        }
Ejemplo n.º 5
0
        void ExportProperty(BasePropertyDeclarationSyntax v)
        {
            var v_type = GetType(v.Type);

            if (v_type == null)
            {
                Console.Error.WriteLine("无法识别的类型 " + v);
                return;
            }

            string name = "";

            if (v is PropertyDeclarationSyntax)
            {
                name = ((PropertyDeclarationSyntax)v).Identifier.Text;
            }
            else if (v is EventDeclarationSyntax)
            {
                name = ((EventDeclarationSyntax)v).Identifier.Text;
            }
            else if (v is IndexerDeclarationSyntax)
            {
                name = "Index";
            }

            if (step == ECompilerStet.ScanMember)
            {
                var property = new ULMemberInfo();
                property.Name            = name;
                property.DeclareTypeName = currentType.FullName;
                property.MemberType      = ULMemberInfo.EMemberType.Property;
                property.IsStatic        = ContainModifier(v.Modifiers, "static") || ContainModifier(v.Modifiers, "const");
                property.Modifier        = GetModifier(v.Modifiers);
                property.TypeName        = v_type.FullName;
                currentType.Members.Add(property);

                foreach (var ve in v.AccessorList.Accessors)
                {
                    var dB_Member = new ULMemberInfo();
                    dB_Member.DeclareTypeName = currentType.FullName;
                    dB_Member.TypeName        = v_type.FullName;
                    dB_Member.IsStatic        = property.IsStatic;
                    dB_Member.Modifier        = property.Modifier;
                    //dB_Member.method_abstract = ContainModifier(v.Modifiers, "abstract");
                    //dB_Member.method_virtual = ContainModifier(v.Modifiers, "virtual");
                    //dB_Member.method_override = ContainModifier(v.Modifiers, "override");
                    if (ve.Keyword.Text == "get")
                    {
                        dB_Member.MemberType = ULMemberInfo.EMemberType.PropertyGet;

                        dB_Member.Name = property.Name_PropertyGet;
                        if (v is IndexerDeclarationSyntax)
                        {
                            IndexerDeclarationSyntax indexerDeclarationSyntax = v as IndexerDeclarationSyntax;
                            dB_Member.Args = new List <ULMemberInfo.MethodArg>();
                            foreach (var a in indexerDeclarationSyntax.ParameterList.Parameters)
                            {
                                dB_Member.Args.Add(GetArgument(a));
                            }
                        }
                    }
                    else if (ve.Keyword.Text == "set")
                    {
                        dB_Member.MemberType = ULMemberInfo.EMemberType.PropertySet;
                        dB_Member.Name       = property.Name_PropertySet;
                        if (v is IndexerDeclarationSyntax)
                        {
                            IndexerDeclarationSyntax indexerDeclarationSyntax = v as IndexerDeclarationSyntax;
                            dB_Member.Args = new List <ULMemberInfo.MethodArg>();
                            foreach (var a in indexerDeclarationSyntax.ParameterList.Parameters)
                            {
                                dB_Member.Args.Add(GetArgument(a));
                            }
                            var arg = new ULMemberInfo.MethodArg();
                            arg.ArgName  = "value";
                            arg.TypeName = v_type.FullName;
                            dB_Member.Args.Add(arg);
                        }
                        else
                        {
                            var arg = new ULMemberInfo.MethodArg();
                            arg.ArgName  = "value";
                            arg.TypeName = v_type.FullName;
                            dB_Member.Args.Add(arg);
                        }
                    }
                    else if (ve.Keyword.Text == "add")
                    {
                        dB_Member.MemberType = ULMemberInfo.EMemberType.PropertyAdd;
                        dB_Member.Name       = property.Name_PropertyAdd;
                        var arg = new ULMemberInfo.MethodArg();
                        arg.ArgName  = "value";
                        arg.TypeName = v_type.FullName;
                        dB_Member.Args.Add(arg);
                    }
                    else if (ve.Keyword.Text == "remove")
                    {
                        dB_Member.MemberType = ULMemberInfo.EMemberType.PropertyRemove;
                        dB_Member.Name       = property.Name_PropertyRemove;
                        var arg = new ULMemberInfo.MethodArg();
                        arg.ArgName  = "value";
                        arg.TypeName = v_type.FullName;
                        dB_Member.Args.Add(arg);
                    }
                    currentType.Members.Add(dB_Member);
                }
            }
            else if (step == ECompilerStet.Compile)
            {
                currentMember = currentType.Members.Find(m => m.Name == name);
                foreach (var ve in v.AccessorList.Accessors)
                {
                    if (ve.Keyword.Text == "get")
                    {
                        currentMember = currentType.Members.Find(m => m.Name == currentMember.Name_PropertyGet);
                        ExportBody(ve.Body);
                    }
                    else if (ve.Keyword.Text == "set")
                    {
                        currentMember = currentType.Members.Find(m => m.Name == currentMember.Name_PropertySet);
                        ExportBody(ve.Body);
                    }
                    else if (ve.Keyword.Text == "add")
                    {
                        currentMember = currentType.Members.Find(m => m.Name == currentMember.Name_PropertyAdd);
                        ExportBody(ve.Body);
                    }
                    else if (ve.Keyword.Text == "remove")
                    {
                        currentMember = currentType.Members.Find(m => m.Name == currentMember.Name_PropertyRemove);
                        ExportBody(ve.Body);
                    }
                }
            }
        }
Ejemplo n.º 6
0
        void ToMember(ULMemberInfo memberInfo)
        {
            BeginAppendLine();

            //if (memberInfo.ExportType == EExportType.Public)
            //{
            //    Append("public ");
            //}
            //else if (memberInfo.ExportType == EExportType.Protected)
            //{
            //    Append("protected ");
            //}
            //else
            //{
            //    Append("private ");
            //}

            Append("function ");

            if (memberInfo.IsStatic)
            {
                Append("static ");
            }


            Append(" ");
            Append(memberInfo.Name);
            switch (memberInfo.MemberType)
            {
            case ULMemberInfo.EMemberType.Field:
                Append(";");
                break;

            //case ULMemberInfo.EMemberType.Property:
            //    Append("{ get; set;}");
            //    break;
            case ULMemberInfo.EMemberType.Method:
                Append("(");
                if (!memberInfo.IsStatic)
                {
                    Append("self");
                    if (memberInfo.Args.Count > 0)
                    {
                        Append(",");
                    }
                }

                for (int i = 0; i < memberInfo.Args.Count; i++)
                {
                    Append(memberInfo.Args[i].ArgName);
                    if (i != memberInfo.Args.Count - 1)
                    {
                        Append(",");
                    }
                }

                Append(")");
                break;
            }
            EndAppendLine();

            if (memberInfo.MemberType == ULMemberInfo.EMemberType.Method)
            {
                ToStatement(memberInfo.MethodBody);
            }
        }