Ejemplo n.º 1
0
        private class_body get_class_body(ICSharpCode.NRefactory.Ast.TypeDeclaration td)
        {
            class_body body = new class_body();

            body.source_context = get_source_context(td);
            foreach (ICSharpCode.NRefactory.Ast.INode node in td.Children)
            {
                body.class_def_blocks.Add(get_class_member(node));
            }
            return(body);
        }
Ejemplo n.º 2
0
        public static class_definition BuildClassDefinition(named_type_reference_list parents, params class_members[] cms)
        {
            var cb = new class_body();

            foreach (var cm in cms)
            {
                cb.Add(cm);
            }
            var cd = new class_definition(parents, cb);

            return(cd);
        }
Ejemplo n.º 3
0
        // frninja 23/04/16 - для шаблонных классов в yield
        public static class_definition BuildClassDefinition(named_type_reference_list parents, ident_list template_args, params class_members[] cms)
        {
            var cb = new class_body();

            foreach (var cm in cms)
            {
                cb.Add(cm);
            }

            var cd = new class_definition(parents, cb, class_keyword.Class, template_args, null, class_attribute.None, false, null);

            return(cd);
        }
Ejemplo n.º 4
0
        public static class_definition BuildClassOrRecordDefinition(bool is_class, params class_members[] cms)
        {
            var cb = new class_body();

            foreach (var cm in cms)
            {
                cb.Add(cm);
            }
            var cd = new class_definition(cb);

            if (!is_class)
            {
                cd.keyword = class_keyword.Record;
            }
            return(cd);
        }
Ejemplo n.º 5
0
 public virtual void visit(class_body _class_body)
 {
 }
Ejemplo n.º 6
0
 public virtual void visit(class_body _class_body)
 {
     DefaultVisit(_class_body);
 }
Ejemplo n.º 7
0
		public virtual void visit(class_body _class_body)
		{
		}
		public virtual void visit(class_body _class_body)
		{
			DefaultVisit(_class_body);
		}
Ejemplo n.º 9
0
 public override void visit(class_body _class_body)
 {
     prepare_collection(_class_body.class_def_blocks, "class definitions");
 }
Ejemplo n.º 10
0
 public override void visit(class_body _class_body)
 {
     get_count(_class_body.class_def_blocks);
 }
Ejemplo n.º 11
0
 public override void visit(class_body _class_body)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 12
0
		public override void visit(class_body _class_body)
		{
			executer.visit(_class_body);
			if (_class_body.class_def_blocks != null)
			foreach (dynamic x in _class_body.class_def_blocks)
				if(x != null)
					this.visit(x);
		}
Ejemplo n.º 13
0
        public class_definition NewRecordType(named_type_reference_list opt_base_classes, where_definition_list opt_where_section, class_body component_list_seq, LexLocation loc)
        {
            var nnrt = new class_definition(opt_base_classes, component_list_seq, class_keyword.Record, null, opt_where_section, class_attribute.None, false, loc);

            if (nnrt.body != null && nnrt.body.class_def_blocks != null &&
                nnrt.body.class_def_blocks.Count > 0 && nnrt.body.class_def_blocks[0].access_mod == null)
            {
                nnrt.body.class_def_blocks[0].access_mod = new access_modifer_node(access_modifer.public_modifer);
            }
            return(nnrt);
        }
Ejemplo n.º 14
0
        public class_definition NewObjectType(class_attribute class_attributes, token_info class_or_interface_keyword, named_type_reference_list opt_base_classes, where_definition_list opt_where_section, class_body opt_not_component_list_seq_end, LexLocation loc)
        {
            var    nnof = new class_definition(opt_base_classes, opt_not_component_list_seq_end, class_keyword.Class, null, opt_where_section, class_attribute.None, false, loc);
            string kw   = class_or_interface_keyword.text.ToLower();

            nnof.attribute = class_attributes;
            if (kw == "record")
            {
                nnof.keyword = class_keyword.Record;
            }
            else
            if (kw == "interface")
            {
                nnof.keyword = class_keyword.Interface;
            }
            else
            if (kw == "i")
            {
                nnof.keyword = class_keyword.TemplateInterface;
            }
            else
            if (kw == "r")
            {
                nnof.keyword = class_keyword.TemplateRecord;
            }
            else
            if (kw == "c")
            {
                nnof.keyword = class_keyword.TemplateClass;
            }
            if (nnof.body != null && ((class_definition)nnof).body.class_def_blocks != null &&
                ((class_definition)nnof).body.class_def_blocks.Count > 0 && ((class_definition)nnof).body.class_def_blocks[0].access_mod == null)
            {
                if (nnof.keyword == class_keyword.Class)
                {
                    nnof.body.class_def_blocks[0].access_mod = new access_modifer_node(access_modifer.internal_modifer);
                }
                else
                {
                    nnof.body.class_def_blocks[0].access_mod = new access_modifer_node(access_modifer.none);
                }
            }
            return(nnof);
        }
Ejemplo n.º 15
0
        // end frninja

        // names и types передаю во внешний мир на предмет анализа того, что они не указатели. Снаружи они инициализируются пустыми списками
        public static void AddMembersForAutoClass(class_definition cd, ref List <ident> names, ref List <type_definition> types) // SSM 24.03.14
        {
            //var types = new List<type_definition>();
            class_body cb             = cd.body;
            bool       HasToString    = false;
            bool       HasConstructor = false;

            foreach (var l in cb.class_def_blocks)
            {
                foreach (var m in l.members)
                {
                    var mm = m as var_def_statement;
                    if (mm != null)
                    {
                        if (mm.var_attr != definition_attribute.Static)
                        {
                            foreach (var v in mm.vars.idents)
                            {
                                names.Add(v);
                                if (mm.vars_type != null)
                                {
                                    types.Add(mm.vars_type);    // во внешний мир для определения pointerов
                                }
                                else
                                {
                                    types.Add(BuildSameType(mm.inital_value)); // почему-то только так хочет работать с рекурсивным типом Node<T>
                                }
                            }
                        }
                    }
                    else
                    {
                        var ts = m as procedure_definition;
                        if (!HasConstructor)
                        {
                            if (ts != null && ts.proc_header is constructor)
                            {
                                HasConstructor = true;
                            }
                        }

                        if (!HasToString)
                        {
                            if (ts != null && ts.proc_header.name != null && ts.proc_header.name.meth_name.name != null)
                            {
                                HasToString = ts.proc_header.name.meth_name.name.ToUpper().Equals("TOSTRING");
                            }
                        }
                    }
                }
            }

            if (!HasConstructor)
            {
                var fnames = names.Select(x => new ident("f" + x.name)).ToList();
                var cm     = BuildSimpleConstructorSection(names, fnames, types);
                cb.Add(cm);
                //cb.class_def_blocks.Insert(0, cm);
            }

            if (!HasToString)
            {
                var tostr = BuildToStringFuncForAutoClass(names);
                cb.Add(BuildOneMemberSection(tostr));
                //cb.class_def_blocks.Insert(0, BuildOneMemberSection(tostr));
            }
        }
Ejemplo n.º 16
0
		public override void visit(class_body _class_body)
		{
			DefaultVisit(_class_body);
			pre_do_visit(_class_body);
			for (int i = 0; i < class_def_blocks.Count; i++)
				visit(class_body.class_def_blocks[i]);
			post_do_visit(_class_body);
		}
Ejemplo n.º 17
0
		public virtual void post_do_visit(class_body _class_body)
		{
		}
Ejemplo n.º 18
0
 public override void visit(class_body _class_body)
 {
     visit_collection(_class_body.class_def_blocks);
 }