private TypeDescriptor Visit(CreateInstanceNode node, Context context) { var type = context.GetType(node.TypeName) as ClassType; if (type == null) { Log(string.Format("Класс {0} не существует", node.TypeName), node); return(TypeDescriptor.Undefined); } var typeList = new List <TypeInfo>(); foreach (dynamic item in node.Arguments) { typeList.Add(Visit(item, context).Type); } if (!type.ContainsConstructor(typeList)) { Log(string.Format("У класса {0} нет конструктора, принимающего данные аргументы", node.TypeName), node); return(TypeDescriptor.Undefined); } return(new TypeDescriptor(false, type, true)); }
private TypeInfo Visit(CreateInstanceNode node, MethodBuilder builder, CodegenContext context) { var typeList = new List <TypeInfo>(); foreach (dynamic item in node.Arguments) { var type = Visit(item, builder, context); typeList.Add(type); } var classType = types.GetType(node.TypeName); builder.Construct(classType, typeList); return(classType); }