diff --git a/SyntaxTreeConverters/StandardSyntaxConverter.cs b/SyntaxTreeConverters/StandardSyntaxConverter.cs index 494f68eea..c388b3164 100644 --- a/SyntaxTreeConverters/StandardSyntaxConverter.cs +++ b/SyntaxTreeConverters/StandardSyntaxConverter.cs @@ -68,13 +68,13 @@ namespace PascalABCCompiler.SyntaxTreeConverters /*try { - root.visit(new SimplePrettyPrinterVisitor(@"d:\\zzz4.txt")); + root.visit(new SimplePrettyPrinterVisitor(@"d:\\zzz1.txt")); } catch(Exception e) { - System.IO.File.AppendAllText(@"d:\\zzz4.txt",e.Message); - }*/ + System.IO.File.AppendAllText(@"d:\\zzz1.txt",e.Message); + }*/ #endif diff --git a/SyntaxVisitors/YieldVisitors/ProcessYieldsCapturedVars.cs b/SyntaxVisitors/YieldVisitors/ProcessYieldsCapturedVars.cs index 89eb93dd8..2f9c8cbb1 100644 --- a/SyntaxVisitors/YieldVisitors/ProcessYieldsCapturedVars.cs +++ b/SyntaxVisitors/YieldVisitors/ProcessYieldsCapturedVars.cs @@ -150,9 +150,15 @@ namespace SyntaxVisitors var stels = seqt.elements_type; var iteratorClassName = GetClassName(pd); + var classDef = UpperNode(3) as class_definition; + + var staticClass = false; + if ((classDef.attribute & class_attribute.Static) != 0) + staticClass = true; + // frninja 08/18/15 - Для захвата self - if (iteratorClassName != null) + if (iteratorClassName != null && !staticClass) { // frninja 20/04/16 - поддержка шаблонных классов var iteratorClassRef = CreateClassReference(iteratorClassName); diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index 6491ef98f..0aba925e5 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -20089,7 +20089,7 @@ namespace PascalABCCompiler.TreeConverter string Consts__Self = YieldHelpers.YieldConsts.Self; // Find semantic class containing iterator (yield-method) with unknown ident - var iteratorContainingClass = context._ctn.fields.Where(f => f.name == Consts__Self).First().type; + var iteratorContainingClass = context._ctn.fields.Where(f => f.name == Consts__Self).FirstOrDefault()?.type; //var iteratorContainingClass = context._cmn.types.Where(t => t.name == _unk.ClassName.name).First(); isStaticIdent = false; diff --git a/VisualPascalABCNET/Resources/format1.png b/VisualPascalABCNET/Resources/format1.png new file mode 100644 index 000000000..971c4a2a0 Binary files /dev/null and b/VisualPascalABCNET/Resources/format1.png differ