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); }
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); }
// 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); }
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); }
public virtual void visit(class_body _class_body) { }
public virtual void visit(class_body _class_body) { DefaultVisit(_class_body); }
public virtual void visit(class_body _class_body) { }
public virtual void visit(class_body _class_body) { DefaultVisit(_class_body); }
public override void visit(class_body _class_body) { prepare_collection(_class_body.class_def_blocks, "class definitions"); }
public override void visit(class_body _class_body) { get_count(_class_body.class_def_blocks); }
public override void visit(class_body _class_body) { throw new NotImplementedException(); }
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); }
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); }
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); }
// 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)); } }
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); }
public virtual void post_do_visit(class_body _class_body) { }
public override void visit(class_body _class_body) { visit_collection(_class_body.class_def_blocks); }