示例#1
0
 public static UnifiedExpression CreateFor(XElement node)
 {
     Contract.Requires(node != null);
     Contract.Requires(node.Name() == "for");
     Contract.Assert(
         node.NthElement(1).Name() == "lasgn" ||
         node.NthElement(1).Name() == "masgn");
     return(UnifiedForeach.Create(
                CreateExpresion(node.NthElement(0)),
                CreateExpresion(node.NthElement(1).FirstElement()),
                CreateBlock(node.NthElement(2))));
 }
        public override bool Visit(UnifiedForeach element, VisitorArgument arg)
        {
            Writer.Write(ForeachKeyword);
            Writer.Write("(");
            element.Element.TryAccept(this, arg);
            Writer.Write(ForeachDelimiter);
            element.Set.TryAccept(this, arg.Set(CommaDelimiter));
            Writer.Write(")");

            element.Body.TryAccept(this, arg.Set(ForBlock));
            return(false);
        }
示例#3
0
        public UnifiedElement VisitForeachStatement(
            ForeachStatement stmt, object data)
        {
            var type = LookupType(stmt.VariableType);
            var name = stmt.VariableName.ToVariableIdentifier();
            var set  = stmt.InExpression.TryAcceptForExpression(this);
            var body =
                stmt.EmbeddedStatement.TryAcceptForExpression(this).ToBlock();

            var varDec = UnifiedVariableDefinition.Create(
                type: type, name: name);

            return(UnifiedForeach.Create(
                       varDec.ToVariableDefinitionList(), set, body));
        }
示例#4
0
        public override bool Visit(UnifiedForeach element, VisitorArgument arg)
        {
            Writer.Write("for ");
            element.Element.TryAccept(this, arg);
            Writer.Write(" in ");
            element.Set.TryAccept(this, arg);
            Writer.WriteLine(":");

            element.Body.TryAccept(this, arg.IncrementDepth());
            if (!element.ElseBody.IsEmptyOrNull())
            {
                Writer.WriteLine("else:");
                element.ElseBody.TryAccept(this, arg.IncrementDepth());
            }
            return(false);
        }
        public override bool Visit(UnifiedForeach element, VisitorArgument arg)
        {
            Writer.Write(ForeachKeyword);
            Writer.Write("(");
            element.Element.TryAccept(this, arg);
            Writer.Write(ForeachDelimiter);
            element.Set.TryAccept(this, arg.Set(CommaDelimiter));
            Writer.Write(")");

            element.Body.TryAccept(this, arg.Set(ForBlock));
            return false;
        }
示例#6
0
 public static Namespace GetNamespace(UnifiedForeach foreachNode)
 {
     var type = NamespaceType.TemporaryScope;
     var parents =
             DetectorHelper.GetParentTypes(type).Select(
                     t => DetectorHelper.Namespace2UnifiedType(t));
     var parentNode = DetectorHelper.GetFirstFoundNode(
             foreachNode, parents);
     return new Namespace {
             Value = "(foreach)",
             NamespaceType = type,
             Parent = Dispatcher(parentNode)
     };
 }
        public override bool Visit(UnifiedForeach element, VisitorArgument arg)
        {
            Writer.Write("for ");
            element.Element.TryAccept(this, arg);
            Writer.Write(" in ");
            element.Set.TryAccept(this, arg);
            Writer.WriteLine(":");

            element.Body.TryAccept(this, arg.IncrementDepth());
            if (!element.ElseBody.IsEmptyOrNull()) {
                Writer.WriteLine("else:");
                element.ElseBody.TryAccept(this, arg.IncrementDepth());
            }
            return false;
        }