Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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);
        }