diff --git a/Parsers/PascalABCParserNewSaushkin/ABCPascal.cs b/Parsers/PascalABCParserNewSaushkin/ABCPascal.cs index ad32753ff..55ddb441b 100644 --- a/Parsers/PascalABCParserNewSaushkin/ABCPascal.cs +++ b/Parsers/PascalABCParserNewSaushkin/ABCPascal.cs @@ -2,7 +2,7 @@ // This CSharp output file generated by Gardens Point LEX // Version: 1.1.3.301 // Machine: SSM -// DateTime: 20.01.2016 7:56:03 +// DateTime: 21.01.2016 15:14:11 // UserName: ????????? // GPLEX input file // GPLEX frame file diff --git a/Parsers/PascalABCParserNewSaushkin/ABCPascal.y b/Parsers/PascalABCParserNewSaushkin/ABCPascal.y index 5ab18f49b..704c6737a 100644 --- a/Parsers/PascalABCParserNewSaushkin/ABCPascal.y +++ b/Parsers/PascalABCParserNewSaushkin/ABCPascal.y @@ -3445,7 +3445,10 @@ func_decl_lambda if (parsertools.build_tree_for_formatter) $$ = new tuple_node_for_formatter($4 as expression_list,@$); else - $$ = new method_call(new dot_node("Tuple","Create"),$4 as expression_list,@$); + { + var dn = new dot_node(new dot_node(new ident("?System"),new ident("Tuple")),new ident("Create",@$)); + $$ = new method_call(dn,$4 as expression_list,@$); + } } else // It is a lambda-expression. Expressions in parameters must be identifiers. { diff --git a/Parsers/PascalABCParserNewSaushkin/ABCPascalYacc.cs b/Parsers/PascalABCParserNewSaushkin/ABCPascalYacc.cs index b290160be..b41333267 100644 --- a/Parsers/PascalABCParserNewSaushkin/ABCPascalYacc.cs +++ b/Parsers/PascalABCParserNewSaushkin/ABCPascalYacc.cs @@ -2,7 +2,7 @@ // GPPG version 1.3.6 // Machine: SSM -// DateTime: 20.01.2016 7:56:03 +// DateTime: 21.01.2016 15:14:12 // UserName: ????????? // Input file @@ -5405,7 +5405,10 @@ public partial class GPPGParser: ShiftReduceParserinteger; + var p: integer -> (); + var t1: (integer,integer); + var s: sequence of integer; +end. \ No newline at end of file diff --git a/TreeConverter/SymbolTable/DSST/SymbolTable.cs b/TreeConverter/SymbolTable/DSST/SymbolTable.cs index 4f208c3b6..d4f35cd36 100644 --- a/TreeConverter/SymbolTable/DSST/SymbolTable.cs +++ b/TreeConverter/SymbolTable/DSST/SymbolTable.cs @@ -995,7 +995,13 @@ namespace SymbolTable int Area=scope.ScopeNum; Scope[] used_units=null; int tn=HashTable.Find(Name); //найдем имя в хеше - if (tn<0 || scope is DotNETScope)//если нет такого ищем в областях .NET + + // SSM 21.01.16 + if (Name.StartsWith("?")) // это значит, надо искать в областях .NET + Name = Name.Substring(1); // съели ? и ищем т.к. tn<0 + // end SSM + + if (tn<0 || scope is DotNETScope)//если нет такого ищем в областях .NET { //ssyy int NextUnitArea = -2; @@ -1130,7 +1136,7 @@ namespace SymbolTable //иначе ищем дальше } else - if (ScopeTable[CurrentArea] is WithScope)//мы очутились в Width + if (ScopeTable[CurrentArea] is WithScope)//мы очутились в With { ai = AreaList.IndexOf(CurrentArea); if (ai >= 0) //что-то нашли! diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index 6832c286c..2dfc49617 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -3287,7 +3287,7 @@ namespace PascalABCCompiler.TreeConverter } var l = new List(); - l.Add(new ident("System")); + l.Add(new ident("?System")); l.Add(new ident("Tuple")); var tp = new template_param_list(lt); @@ -13917,30 +13917,6 @@ namespace PascalABCCompiler.TreeConverter public override void visit(SyntaxTree.indexer _indexer) { - // SSM 09.01.16 Tuple t[i] - /*var ee = convert_strong(_indexer.dereferencing_value); // Это не работает - конкурирует со следующими вызовами. Нельзя такое вызывать дважды. Вообще, надо сделать функцию, которая возвращает по выражению тип - - var ent = ee.type as compiled_type_node; - - if (ent != null) - { - var t = ent.compiled_type; - if (t.FullName.StartsWith("System.Tuple")) - { - expression eee = _indexer.indexes.expressions[0]; - var cn = convert_strong_to_constant_node(eee); - var v = cn as int_const_node; - - if (v != null) - { - var dn = new dot_node(_indexer.dereferencing_value, new ident("Item" + (v.constant_value + 1).ToString(), eee.source_context)); - visit(dn); - return; - } - } - }*/ - // end SSM 09.01.16 Tuple t[i] - //lroman if (_indexer.dereferencing_value is closure_substituting_node) { @@ -18328,7 +18304,7 @@ namespace PascalABCCompiler.TreeConverter { // SSM 11/05/15 sugared node var l = new List(); - l.Add(new ident("System")); + l.Add(new ident("?System")); l.Add(new ident("Collections")); l.Add(new ident("Generic")); l.Add(new ident("IEnumerable")); @@ -18340,7 +18316,7 @@ namespace PascalABCCompiler.TreeConverter if (_modern_proc_type.res != null) { var l = new List(); - l.Add(new ident("System")); + l.Add(new ident("?System")); l.Add(new ident("Func")); var t = new template_param_list(); if (_modern_proc_type.aloneparam != null) @@ -18369,7 +18345,7 @@ namespace PascalABCCompiler.TreeConverter else if (_modern_proc_type.aloneparam != null || _modern_proc_type.el != null) { var l = new List(); - l.Add(new ident("System")); + l.Add(new ident("?System")); l.Add(new ident("Action")); var t = new template_param_list(); if (_modern_proc_type.aloneparam != null) @@ -18398,7 +18374,7 @@ namespace PascalABCCompiler.TreeConverter else { var l = new List(); - l.Add(new ident("System")); + l.Add(new ident("?System")); l.Add(new ident("Action")); var ntr = new named_type_reference(l); visit(ntr); diff --git a/bin/Lib/PABCRtl.dll b/bin/Lib/PABCRtl.dll index c0b74a409..3c233c50f 100644 Binary files a/bin/Lib/PABCRtl.dll and b/bin/Lib/PABCRtl.dll differ