From bbae062980a601203b593a164331ef566288cfb7 Mon Sep 17 00:00:00 2001 From: miks1965 Date: Thu, 21 Jan 2016 15:57:06 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20&System?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D0=B3=D0=B5=D0=BD=D0=B5=D1=80=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D0=B8=20=D1=81=D0=B8=D0=BD=D1=82=D0=B0=D0=BA=D1=81?= =?UTF-8?q?=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=D1=85=20=D1=83=D0=B7=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2=20=D0=BD=D0=B0=20=D1=81=D0=B5=D0=BC=D0=B0=D0=BD?= =?UTF-8?q?=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=BE=D0=BC=20=D1=83=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=BD=D0=B5=20=D1=87=D1=82=D0=BE=D0=B1=D1=8B=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=BF=D1=83=D1=81=D0=BA=D0=B0=D1=82=D1=8C=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=20=D0=B2=20=D0=BC=D0=BE=D0=B4?= =?UTF-8?q?=D1=83=D0=BB=D1=8F=D1=85=20=D0=B8=20=D0=B8=D1=81=D0=BA=D0=B0?= =?UTF-8?q?=D1=82=D1=8C=20=D1=81=D1=80=D0=B0=D0=B7=D1=83=20=D0=B2=20.NET?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PascalABCParserNewSaushkin/ABCPascal.cs | 2 +- .../PascalABCParserNewSaushkin/ABCPascal.y | 5 ++- .../ABCPascalYacc.cs | 7 ++-- Parsers/PascalABCParserNewSaushkin/PABC.ymc | 1 + SyntaxTree/tree/TreeHelper.cs | 8 ++++- TestSuite/QuestionSystem.pas | 10 ++++++ TreeConverter/SymbolTable/DSST/SymbolTable.cs | 10 ++++-- .../TreeConversion/syntax_tree_visitor.cs | 34 +++--------------- bin/Lib/PABCRtl.dll | Bin 492544 -> 492544 bytes 9 files changed, 41 insertions(+), 36 deletions(-) create mode 100644 TestSuite/QuestionSystem.pas 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 c0b74a4094e073f296baa9ed9ef6cba89aa062f6..3c233c50f66840eaf858b798fcea65ab6cc27460 100644 GIT binary patch delta 235 zcmVdT;!i%kP}_XmO7h1&sz+XA)Q1L&cDu@X%m4-E)COt47j zIu$A^YHJ}Ne1Q2Ld7T*$-o*m$f#X&j0b>LN^bx3zC8#CnM~zo(;TyrqD<$PYmr#)bIfp}|1BXMS1cyVT1-C<^2K7l0A@b?8SANDrzAOO-dxM@zw@B>< l^pXSW%b=G(fCm{6Ak2a{&_L8dq&j>H_)4Wow`hO|m;)C(WqJSr delta 235 zcmVaQQ8Wip~qOCc7wwpaxD)r3YMnGwOPqV}w=2d72xHY^LmQM@8{Q3i8FjbFA)5Cf4|HRBEN zMbmC}qpjJhvRI-4M~6eB1BXMS1cyVT1-C<^2K7l0u#0#5w{~?xhmNDoTRhSMw@B>< l^pXQj7N3_tfCm{6$+$DkazfNWmsXcM?Ld;aw`hO|m;>|VaLfPz