bug fix #1412
This commit is contained in:
parent
370cbf5175
commit
bbebfede4c
|
|
@ -2,7 +2,7 @@
|
|||
// This CSharp output file generated by Gardens Point LEX
|
||||
// Version: 1.1.3.301
|
||||
// Machine: DESKTOP-G8V08V4
|
||||
// DateTime: 24.11.2018 8:10:22
|
||||
// DateTime: 01.12.2018 12:55:41
|
||||
// UserName: ?????????
|
||||
// GPLEX input file <ABCPascal.lex>
|
||||
// GPLEX frame file <embedded resource>
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@
|
|||
%using PascalABCCompiler.ParserTools;
|
||||
%using PascalABCCompiler.Errors;
|
||||
%using System.Linq;
|
||||
%using SyntaxVisitors;
|
||||
|
||||
%namespace GPPGParserScanner
|
||||
|
||||
|
|
@ -4524,7 +4525,11 @@ common_lambda_body
|
|||
lambda_function_body
|
||||
: expr_l1
|
||||
{
|
||||
//$$ = NewLambdaBody($1, @$);
|
||||
var id = SyntaxVisitors.ExprHasNameVisitor.HasName($1, "Result");
|
||||
if (id != null)
|
||||
{
|
||||
parsertools.AddErrorFromResource("RESULT_IDENT_NOT_EXPECTED_IN_THIS_CONTEXT", id.source_context);
|
||||
}
|
||||
var sl = new statement_list(new assign("result",$1,@$),@$); // íàäî ïîìå÷àòü åù¸ è assign êàê àâòîñãåíåðèðîâàííûé äëÿ ëÿìáäû - ÷òîáû çàïðåòèòü ÿâíûé Result
|
||||
sl.expr_lambda_body = true;
|
||||
$$ = sl;
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
// GPPG version 1.3.6
|
||||
// Machine: DESKTOP-G8V08V4
|
||||
// DateTime: 24.11.2018 8:10:22
|
||||
// DateTime: 01.12.2018 12:55:41
|
||||
// UserName: ?????????
|
||||
// Input file <ABCPascal.y>
|
||||
|
||||
|
|
@ -18,6 +18,7 @@ using PascalABCSavParser;
|
|||
using PascalABCCompiler.ParserTools;
|
||||
using PascalABCCompiler.Errors;
|
||||
using System.Linq;
|
||||
using SyntaxVisitors;
|
||||
|
||||
namespace GPPGParserScanner
|
||||
{
|
||||
|
|
@ -6773,8 +6774,12 @@ public partial class GPPGParser: ShiftReduceParser<PascalABCSavParser.Union, Lex
|
|||
break;
|
||||
case 892: // lambda_function_body -> expr_l1
|
||||
{
|
||||
//$$ = NewLambdaBody($1, @$);
|
||||
var sl = new statement_list(new assign("result",ValueStack[ValueStack.Depth-1].ex,CurrentLocationSpan),CurrentLocationSpan); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> assign <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/*var id = SyntaxVisitors.ExprHasNameVisitor.HasName(ValueStack[ValueStack.Depth-1].ex, "Result");
|
||||
if (id != null)
|
||||
{
|
||||
parsertools.AddErrorFromResource("RESULT_IDENT_NOT_EXPECTED_IN_THIS_CONTEXT", id.source_context);
|
||||
}*/
|
||||
var sl = new statement_list(new assign("result",ValueStack[ValueStack.Depth-1].ex,CurrentLocationSpan),CurrentLocationSpan); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> assign <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> Result
|
||||
sl.expr_lambda_body = true;
|
||||
CurrentSemanticValue.stn = sl;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -235,5 +235,6 @@ script=
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -126,14 +126,14 @@
|
|||
<Project>{AF2EFD7B-69DD-4B43-AF65-B59B29349C23}</Project>
|
||||
<Name>ParserTools</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\SemanticTree\SemanticTree.csproj">
|
||||
<Project>{613e0dda-aa8a-437c-ac45-507b47429ff9}</Project>
|
||||
<Name>SemanticTree</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\SyntaxTree\SyntaxTree.csproj">
|
||||
<Project>{C2CAC65A-B2AE-4CCC-B067-E6B8E75DF73A}</Project>
|
||||
<Name>SyntaxTree</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\SyntaxVisitors\SyntaxVisitors.csproj">
|
||||
<Project>{a9ab4282-83b4-41a7-86c3-e5bf6a45e7e2}</Project>
|
||||
<Name>SyntaxVisitors</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\TreeConverter\TreeConverter.csproj">
|
||||
<Project>{1c9c945a-586d-42a2-a06b-65d84fa7ff78}</Project>
|
||||
<Name>TreeConverter</Name>
|
||||
|
|
|
|||
|
|
@ -53,15 +53,21 @@ namespace SyntaxVisitors
|
|||
public class ExprHasNameVisitor : WalkingVisitorNew // есть ли в выражении переменная с данным именем (не включая вложенные лямбды) (используется для поиска Result)
|
||||
{
|
||||
private string varname;
|
||||
public bool Has = false;
|
||||
public ident id = null;
|
||||
public static ident HasName(expression ex, string varname)
|
||||
{
|
||||
var v = new ExprHasNameVisitor(varname);
|
||||
v.ProcessNode(ex);
|
||||
return v.id;
|
||||
}
|
||||
public ExprHasNameVisitor(string varname)
|
||||
{
|
||||
this.varname = varname.ToLower();
|
||||
}
|
||||
public override void visit(ident id)
|
||||
public override void visit(ident i)
|
||||
{
|
||||
if (id.name.ToLower() == varname)
|
||||
Has = true;
|
||||
if (i.name.ToLower() == varname)
|
||||
id = i;
|
||||
}
|
||||
public override void visit(dot_node dn)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -37,8 +37,6 @@
|
|||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
|
|
|
|||
|
|
@ -69,4 +69,5 @@ BAD_INT2=Too small int64
|
|||
INVALID_INTERFACE_MEMBER=Interface members cannot have definitions
|
||||
EXTENDED_INDEXED_PROPERTIES=Extended indexed properties are not realized
|
||||
ATTRIBUTE_REDECLARED=This attribute has been already applied to type
|
||||
STATIC_PROPERTIES_CANNOT_HAVE_ATTRBUTE_{0}=Static properties cannot have attribute '{0}'
|
||||
STATIC_PROPERTIES_CANNOT_HAVE_ATTRBUTE_{0}=Static properties cannot have attribute '{0}'
|
||||
RESULT_IDENT_NOT_EXPECTED_IN_THIS_CONTEXT=Result identifier is not allowed in this context
|
||||
|
|
@ -70,4 +70,5 @@ INVALID_INTERFACE_MEMBER=Члены интерфейса не могут име
|
|||
EXTENDED_INDEXED_PROPERTIES=Индексные свойства не могут быть расширенными
|
||||
TWO_STRING_LITERALS_IN_SUCCESSION=Две литеральные строковые константы не могут стоять подряд
|
||||
ATTRIBUTE_REDECLARED=Повторное применение атрибута
|
||||
STATIC_PROPERTIES_CANNOT_HAVE_ATTRBUTE_{0}=Статические свойства не могут иметь атрибут '{0}'
|
||||
STATIC_PROPERTIES_CANNOT_HAVE_ATTRBUTE_{0}=Статические свойства не могут иметь атрибут '{0}'
|
||||
RESULT_IDENT_NOT_EXPECTED_IN_THIS_CONTEXT=Имя Result недопустимо в этом контексте
|
||||
Loading…
Reference in a new issue