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 }); }
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); }