This commit is contained in:
miks1965 2016-06-11 09:47:22 +03:00
parent e099939a98
commit 01eac975de
2 changed files with 39 additions and 4 deletions

View file

@ -757,6 +757,39 @@
</i>
</OCtx>
</Node>
<Node Name="ObjectCopier.Clone">
<FileName>\yield\syntaxvisitors\yieldvisitors\processyieldscapturedvars.cs</FileName>
<Text>function_header nfh = ObjectCopier.Clone(fh);</Text>
<OCtx>
<i Type="Method">type_declarations GenClassesForYield ( procedure_definition pd , IEnumerable &lt; var_def_statement &gt; fields , IDictionary &lt; string , string &gt; localsMap , IDictionary &lt; string , string &gt; formalParamsMap , IDictionary &lt; var_def_statement , var_def_statement &gt; localsCloneMap , yield_locals_type_map_helper localTypeMapHelper )</i>
<i Type="ClassOrNamespace">public class ProcessYieldCapturedVarsVisitor : BaseChangeVisitor</i>
<i Type="ClassOrNamespace">namespace SyntaxVisitors</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="visit_program_code(_block.program_code)">
<FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName>
<Text>visit_program_code(_block.program_code);</Text>
<OCtx>
<i Type="Method">public override void visit ( SyntaxTree . block _block )</i>
<i Type="ClassOrNamespace">public class syntax_tree_visitor : SyntaxTree . AbstractVisitor</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . TreeConverter</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="lab.is_defined">
<FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName>
<Text>if (lab.is_defined)</Text>
<OCtx>
<i Type="Method">public override void visit ( SyntaxTree . labeled_statement _labeled_statement )</i>
<i Type="ClassOrNamespace">public class syntax_tree_visitor : SyntaxTree . AbstractVisitor</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . TreeConverter</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
</Items>
</Node>
</AspectFile>

View file

@ -8308,10 +8308,12 @@ namespace PascalABCCompiler.TreeConverter
{
AddError(get_location(_labeled_statement.label_name), "IDENT_{0}_IS_NOT_LABEL", _labeled_statement.label_name.name);
}
if (lab.is_defined)
{
AddError(get_location(_labeled_statement.label_name), "LABEL_{0}_REDEFINED", _labeled_statement.label_name.name);
}
// SSM - Patch повторного определения меток в подпрограммах при наличии лямбд
if (lambdaProcessingState != LambdaProcessingState.FinishPhase)
if (lab.is_defined)
{
AddError(get_location(_labeled_statement.label_name), "LABEL_{0}_REDEFINED", _labeled_statement.label_name.name);
}
lab.is_defined = true;
lab.comprehensive_code_block = context.block_stack.Peek();
foreach (goto_statement gs in lab.goto_statements)