예제 #1
0
        protected override IPyStatement[] VisitWithStatement(CsharpWithStatement src)
        {
            if (src.Variables.Length == 0)
            {
                throw new NotSupportedException("with statement with no variables");
            }
            PyUsingStatement owner  = null;
            PyUsingStatement result = null;

            for (var index = 0; index < src.Variables.Length; index++)
            {
                var ii        = src.Variables[index];
                var nextLevel = new PyUsingStatement
                {
                    Variable = new PyUsingStatementVariable
                    {
                        Name  = ii.Name,
                        Value = TransValue(ii.Value)
                    }
                };
                if (owner == null)
                {
                    result = nextLevel;
                }
                else
                {
                    owner.Statements.Add(nextLevel);
                }

                owner = nextLevel;
            }

            if (result == null)
            {
                throw new Exception("Internal exception");
            }
            var stats = this.TranslateStatements(src.Statements);

            result.Statements.AddRange(stats);

            /*
             * foreach (var i in src.Statements)
             * {
             *  var ii = CastOrThrow<CSharpBase>(i);
             *  var b  = Visit(ii);
             *  var bb = CastOrThrow<PyStatementBase>(b);
             *  result.Statements.Add(bb);
             * }
             */

            return(new[] { result });
        }
예제 #2
0
        protected override object VisitUsingStatement(UsingStatementSyntax syntax)
        {
            if (syntax.Declaration.Variables.Count == 0)
            {
                throw new NotSupportedException("with statement with no variables");
            }

            var q = new List <CsharpWithStatementVariableDeclaration>();

            for (var index = 0; index < syntax.Declaration.Variables.Count; index++)
            {
                var ii    = syntax.Declaration.Variables[index];
                var name  = ii.Identifier.Text;
                var value = InternalVisitExpression(ii.Initializer.Value);
                var decl  = new CsharpWithStatementVariableDeclaration(name, value);
                q.Add(decl);
            }

            var w = new List <IStatement>();
            {
                IReadOnlyList <StatementSyntax> inside = new[] { syntax.Statement };
                if (syntax.Statement is BlockSyntax bs)
                {
                    inside = bs.Statements;
                }

                foreach (var i in inside)
                {
                    var b = Visit(i);
                    w.Add(CastOrThrow <IStatement>(b));
                }
            }

            var result = new CsharpWithStatement(q.ToArray(), w.ToArray());

            return(result);
        }