This commit is contained in:
miks1965 2017-12-30 11:39:02 +03:00
parent 737071f6ac
commit d185cd8de6
4 changed files with 13 additions and 7 deletions

View file

@ -1946,8 +1946,8 @@ typed_var_init_expression
| identifier tkArrow lambda_function_body
{
var idList = new ident_list($1, @1);
var formalPars = new formal_parameters(new typed_parameters(idList, new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null), parametr_kind.none, null, @1), @1);
$$ = new function_lambda_definition(lambdaHelper.CreateLambdaName(), formalPars, new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null), $3 as statement_list, @$);
var formalPars = new formal_parameters(new typed_parameters(idList, new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), @1), parametr_kind.none, null, @1), @1);
$$ = new function_lambda_definition(lambdaHelper.CreateLambdaName(), formalPars, new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), @1), $3 as statement_list, @$);
}
| tkRoundOpen tkRoundClose lambda_type_ref tkArrow lambda_function_body
{
@ -1968,7 +1968,7 @@ typed_var_init_expression
idList.idents.Add(el.expressions[j] as ident);
}
var any = new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null);
var any = new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), @2);
var formalPars = new formal_parameters(new typed_parameters(idList, any, parametr_kind.none, null, @2), @2);
$$ = new function_lambda_definition(lambdaHelper.CreateLambdaName(), formalPars, any, $5 as statement_list, @$);
@ -3643,8 +3643,8 @@ func_decl_lambda
: identifier tkArrow lambda_function_body
{
var idList = new ident_list($1, @1);
var formalPars = new formal_parameters(new typed_parameters(idList, new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null), parametr_kind.none, null, @1), @1);
$$ = new function_lambda_definition(lambdaHelper.CreateLambdaName(), formalPars, new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null), $3 as statement_list, @$);
var formalPars = new formal_parameters(new typed_parameters(idList, new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), @1), parametr_kind.none, null, @1), @1);
$$ = new function_lambda_definition(lambdaHelper.CreateLambdaName(), formalPars, new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), @1), $3 as statement_list, @$);
}
| tkRoundOpen tkRoundClose lambda_type_ref_noproctype tkArrow lambda_function_body
{

View file

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

View file

@ -400,7 +400,12 @@ namespace GPPGParserScanner
var op = new op_type_node(Operators.Assignment);
//_op_type_node.source_context = parsertools.GetTokenSourceContext();
var ass = new assign(id, expr_l1, op.type);
parsertools.create_source_context(ass, id, expr_l1);
parsertools.create_source_context(ass, id, expr_l1); // дурацкая функция - если хотя бы у одного sc=null, то возвращает null
if (ass.source_context == null)
if (expr_l1.source_context != null)
ass.source_context = expr_l1.source_context;
else if (id.source_context != null)
ass.source_context = id.source_context;
sl.subnodes.Add(ass);
sl.source_context = loc;
return sl;

View file

@ -1811,7 +1811,7 @@ namespace PascalABCCompiler.TreeConverter
if (set_of_possible_functions.Count == 0 && indefinits.Count == 0)
{
return AddError<function_node>(new NoFunctionWithSameParametresNum(loc, is_alone_method_defined, first_function));
return AddError<function_node>(new NoFunctionWithSameArguments(loc, is_alone_method_defined));
}
//(ssyy) Инициализируем is_alone_defined