Esempio n. 1
0
        /// <summary>
        /// CreateExpression generates a CodeExpression based on the given member data.
        /// </summary>
        /// <returns>Generated CodeExpression.</returns>
        public CodeExpression CreateExpression()
        {
            var createType = new CodeTypeReference(Type);

            return(Initializers != null
                ? new CodeArrayCreateExpression(createType, Initializers.Select(i => i.CreateExpression()).ToArray())
                : new CodeArrayCreateExpression(createType, Size));
        }
Esempio n. 2
0
        public override string GetPyCode(PyEmitStyle style)
        {
            if (Initializers.Count == 0)
            {
                return("dict()");
            }
            var initializers = Initializers.Select(a => a.Key.GetPyCode(style) + ":" + a.Value.GetPyCode(style));
            var code         = string.Join(", ", initializers);

            return("{" + code + "}");
        }
Esempio n. 3
0
        protected internal override void CheckSemantics(AstHelper astHelper)
        {
            AstHelper helper = astHelper.CreateChild(expecting: true);

            base.CheckSemantics(astHelper);

            // semantic for this items is checked before having a type for them
            // so after the array type is determined they must be checked
            var lateCheckItems = new List <Expression>();

            foreach (Expression initializer in Initializers)
            {
                initializer.CheckSemantics(helper);

                if (helper.Expecting.IsExpectingType)
                {
                    helper.Errors.Check(new NotAssignableError(helper.Expecting.Type, initializer.Type, Start));
                }
                else
                {
                    // the array type isn't determined yet
                    if (initializer.Type != typeof(Null))
                    {
                        helper.Expecting.Type = initializer.Type;
                    }
                    else
                    {
                        lateCheckItems.Add(initializer);
                    }
                }
            }

            if (helper.Expecting.IsExpectingType)
            {
                InnerType = helper.Expecting.Type;

                // check that all types are assignable to the array type
                foreach (Expression lateCheckItem in lateCheckItems)
                {
                    helper.Errors.Check(new NotAssignableError(helper.Expecting.Type, lateCheckItem.Type, Start));
                }
            }
            else
            {
                // if the array doesn't have a type assign null to it
                InnerType = typeof(Null);
            }

            helper.Errors.Check(new CanNotInferArrayTypeError(Initializers.Select(i => i.Type), Start));
        }
Esempio n. 4
0
        public override void Clone(JsNode node)
        {
            base.Clone(node);
            var node2 = (JsForStatement)node;

            if (Initializers != null)
            {
                if (node2.Initializers == null)
                {
                    node2.Initializers = new List <JsStatement>();
                }
                node2.Initializers.AddRange(Initializers.Select(t => t.Clone()));
            }
            node2.Condition = Condition.Clone();
            if (Iterators != null)
            {
                if (node2.Iterators == null)
                {
                    node2.Iterators = new List <JsStatement>();
                }
                node2.Iterators.AddRange(Iterators.Select(t => t.Clone()));
            }
            node2.Statement = Statement.Clone();
        }
Esempio n. 5
0
 public override Expression FromNode([Optional] Container container)
 {
     Console.WriteLine(NodeType);
     return(Expression.ListInit((NewExpression)NewExpression.FromNode(container), Initializers.Select(e => e.FromNode(container))));
 }