This commit is contained in:
Бондарев Иван 2019-02-17 14:19:07 +01:00
parent ab6703e4eb
commit f014935bac
4 changed files with 16 additions and 5 deletions

View file

@ -169,10 +169,10 @@ namespace SyntaxVisitors
if (pars != null)
foreach (var ps in pars.params_list)
{
if (ps.param_kind != parametr_kind.none)
if (ps.param_kind != parametr_kind.none && ps.param_kind != parametr_kind.params_parametr)
throw new SyntaxVisitorError("FUNCTIONS_WITH_YIELDS_CANNOT_CONTAIN_VAR_CONST_PARAMS_MODIFIERS", pars.source_context);
if (ps.inital_value != null)
throw new SyntaxVisitorError("FUNCTIONS_WITH_YIELDS_CANNOT_CONTAIN_DEFAULT_PARAMETERS", pars.source_context);
/*if (ps.inital_value != null)
throw new SyntaxVisitorError("FUNCTIONS_WITH_YIELDS_CANNOT_CONTAIN_DEFAULT_PARAMETERS", pars.source_context);*/
}
HasYields = true;

View file

@ -135,7 +135,7 @@ namespace SyntaxVisitors
if (pars != null)
foreach (var ps in pars.params_list)
{
if (ps.param_kind != parametr_kind.none)
if (ps.param_kind != parametr_kind.none && ps.param_kind != parametr_kind.params_parametr)
throw new SyntaxVisitorError("FUNCTIONS_WITH_YIELDS_CANNOT_CONTAIN_VAR_CONST_PARAMS_MODIFIERS", pars.source_context);
if (ps.inital_value != null)
throw new SyntaxVisitorError("FUNCTIONS_WITH_YIELDS_CANNOT_CONTAIN_DEFAULT_PARAMETERS", pars.source_context);

11
TestSuite/yieldparams.pas Normal file
View file

@ -0,0 +1,11 @@
function Get(params x: array of integer): sequence of integer;
begin
yield x[0];
yield x[1];
end;
begin
var a := Get(1,2).ToArray;
assert(a[0] = 1);
assert(a[1] = 2);
end.

View file

@ -4,7 +4,7 @@
YIELD_FUNC_MUST_RETURN_SEQUENCE=Функции с yield должны непосредственно возвращать тип sequence of T или IEnumerable<T>
YIELD_FUNC_CANNOT_RETURN_SEQUENCE_OF_ANONYMOUS_DELEGATES=Функции с yield не могут возвращать последовательность анонимных делегатов
ONLY_FUNCTIONS_CAN_CONTAIN_YIELDS=Только функции могут содержать yield
FUNCTIONS_WITH_YIELDS_CANNOT_CONTAIN_VAR_CONST_PARAMS_MODIFIERS=В параметрах функции с yield не должно быть модификаторов 'var', 'const' или 'params'
FUNCTIONS_WITH_YIELDS_CANNOT_CONTAIN_VAR_CONST_PARAMS_MODIFIERS=В параметрах функции с yield не должно быть модификаторов 'var' или 'const'
FUNCTIONS_WITH_YIELDS_CANNOT_CONTAIN_DEFAULT_PARAMETERS=Функция с yield не должна иметь параметров по умолчанию
FUNCTIONS_WITH_YIELDS_CANNOT_CONTAIN_RESULT=Функция с yield не может содержать переменную Result
FUNCTIONS_WITH_YIELDS_CANNOT_CONTAIN_LOCK=Функции с yield не могут содержать оператор lock