#1232 теперь нет потери контекста

This commit is contained in:
miks1965 2018-09-23 22:38:39 +03:00
parent f36a650f9c
commit caba3ede5f
9 changed files with 34 additions and 26 deletions

View file

@ -15,22 +15,24 @@
<body>
<H1>Кортежи</H1>
<p>Кортеж - это тип данных, являющийся аналогом <a href="records.html">
записи</a>. Как и запись, кортеж представляет собой набор элементов разных
типов. В отличие от записей, тип кортежей описывается очень просто. Кроме того,
записи</a> или <a href="../Classes/index_classes.html">класса</a>. Как запись
или класс, кортеж представляет собой набор элементов разных
типов, но описывается существенно проще. Кроме того,
поля кортежа имеют предопределенные имена и являются неизменными: поменять поля кортежа
после его создания невозможно.</p>
<h2>Тип кортежа</h2>
<p>Для типа кортежа используется следующая запись:</p>
<blockquote>
<code><b>var</b> t: (string,integer);</code>
</blockquote>
<p>Данная запись похожа на объявление <a href="enum_subrange.html">перечислимого типа</a>. Если в круглых
скобках - новые имена, то это перечислимый тип, а если имена типов, то это - тип кортежа.</p>
<p>Кортежи представляются типом System.Tuple платформы .NET:</p>
<blockquote>
<code><b>var</b> t: System.Tuple&lt;string,integer&gt;;</code>
</blockquote>
<p>Для типа кортежа может быть использована сокращенная запись:</p>
<blockquote>
<code><b>var</b> t: (string,integer);</code>
</blockquote>
<p>Данная запись похожа на объявление перечислимого типа. Если в круглых
скобках - новые имена, то это перечислимый тип, а если имена типов, то это - тип кортежа.</p>
<p>Однако данное представление может поменяться в будущем.</p>
<h2>Конструирование значений типа кортеж</h2>
<p>Значения типа кортеж могут быть сконструированы в виде заключенного в круглые

View file

@ -1,9 +1,9 @@
//
// This CSharp output file generated by Gardens Point LEX
// Version: 1.1.3.301
// Machine: IVAN-PC
// DateTime: 23.09.2018 13:03:23
// UserName: Ivan
// Machine: DESKTOP-A6LT9RI
// DateTime: 23.09.2018 22:34:25
// UserName: ?????????
// GPLEX input file <ABCPascal.lex>
// GPLEX frame file <embedded resource>
//

View file

@ -2125,7 +2125,7 @@ property_specifiers
}
else // ðàñøèðåííûå ñâîéñòâà
{
var id = NewId("#GetGen");
var id = NewId("#GetGen", @2);
procedure_definition pr = null;
if (!parsertools.build_tree_for_formatter)
pr = CreateAndAddToClassReadFunc($2, id, @2);
@ -2146,7 +2146,7 @@ property_specifiers
}
else // ðàñøèðåííûå ñâîéñòâà
{
var id = NewId("#SetGen");
var id = NewId("#SetGen", @2);
procedure_definition pr = null;
if (!parsertools.build_tree_for_formatter)
pr = CreateAndAddToClassWriteProc($2 as statement,id,@2);
@ -2169,7 +2169,7 @@ write_property_specifiers
}
else
{
var id = NewId("#SetGen");
var id = NewId("#SetGen", @2);
procedure_definition pr = null;
if (!parsertools.build_tree_for_formatter)
pr = CreateAndAddToClassWriteProc($2 as statement,id,@2);
@ -2188,7 +2188,7 @@ read_property_specifiers
}
else
{
var id = NewId("#GetGen");
var id = NewId("#GetGen", @2);
procedure_definition pr = null;
if (!parsertools.build_tree_for_formatter)
pr = CreateAndAddToClassReadFunc($2,id,@2);

View file

@ -1,9 +1,9 @@
// (see accompanying GPPGcopyright.rtf)
// GPPG version 1.3.6
// Machine: IVAN-PC
// DateTime: 23.09.2018 13:03:25
// UserName: Ivan
// Machine: DESKTOP-A6LT9RI
// DateTime: 23.09.2018 22:34:26
// UserName: ?????????
// Input file <ABCPascal.y>
// options: no-lines gplex
@ -4324,7 +4324,7 @@ public partial class GPPGParser: ShiftReduceParser<PascalABCSavParser.Union, Lex
}
else // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
var id = NewId("#GetGen");
var id = NewId("#GetGen", LocationStack[LocationStack.Depth-2]);
procedure_definition pr = null;
if (!parsertools.build_tree_for_formatter)
pr = CreateAndAddToClassReadFunc(ValueStack[ValueStack.Depth-2].ex, id, LocationStack[LocationStack.Depth-2]);
@ -4346,7 +4346,7 @@ public partial class GPPGParser: ShiftReduceParser<PascalABCSavParser.Union, Lex
}
else // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
var id = NewId("#SetGen");
var id = NewId("#SetGen", LocationStack[LocationStack.Depth-2]);
procedure_definition pr = null;
if (!parsertools.build_tree_for_formatter)
pr = CreateAndAddToClassWriteProc(ValueStack[ValueStack.Depth-2].stn as statement,id,LocationStack[LocationStack.Depth-2]);
@ -4367,7 +4367,7 @@ public partial class GPPGParser: ShiftReduceParser<PascalABCSavParser.Union, Lex
}
else
{
var id = NewId("#SetGen");
var id = NewId("#SetGen", LocationStack[LocationStack.Depth-1]);
procedure_definition pr = null;
if (!parsertools.build_tree_for_formatter)
pr = CreateAndAddToClassWriteProc(ValueStack[ValueStack.Depth-1].stn as statement,id,LocationStack[LocationStack.Depth-1]);
@ -4383,7 +4383,7 @@ public partial class GPPGParser: ShiftReduceParser<PascalABCSavParser.Union, Lex
}
else
{
var id = NewId("#GetGen");
var id = NewId("#GetGen", LocationStack[LocationStack.Depth-1]);
procedure_definition pr = null;
if (!parsertools.build_tree_for_formatter)
pr = CreateAndAddToClassReadFunc(ValueStack[ValueStack.Depth-1].ex,id,LocationStack[LocationStack.Depth-1]);

View file

@ -216,5 +216,6 @@ script=

View file

@ -540,10 +540,10 @@ namespace GPPGParserScanner
private int num1 = 0;
public ident NewId(string prefix)
public ident NewId(string prefix, SourceContext sc = null)
{
num1++;
return new ident(prefix + num1.ToString());
return new ident(prefix + num1.ToString(),sc);
}
}
}

View file

@ -31,6 +31,11 @@ namespace SyntaxVisitors.SugarVisitors
DefaultVisit(ne);
}
public override void visit(name_assign_expr ne)
{
DefaultVisit(ne);
}
public override void visit(tuple_node tup)
{

View file

@ -19412,8 +19412,8 @@ namespace PascalABCCompiler.TreeConverter
var names = l.name_expr.Select(x=>x.name).ToList();
var strnames = names.Select(id=>id.name).ToList(); // преобразование idents в строки
var tt1 = l.name_expr[0].expr;
var tse = convert_strong(tt1);
/*var tt1 = l.name_expr[0].expr;
var tse = convert_strong(tt1);*/
var semantic_types = l.name_expr.Select(x => convert_strong(x.expr).type).ToList();
var types = semantic_types.Select(x => SyntaxTreeBuilder.BuildSemanticType(x)).ToList();

Binary file not shown.