/// <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)); }
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 + "}"); }
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)); }
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(); }
public override Expression FromNode([Optional] Container container) { Console.WriteLine(NodeType); return(Expression.ListInit((NewExpression)NewExpression.FromNode(container), Initializers.Select(e => e.FromNode(container)))); }