fix #1395
This commit is contained in:
parent
421a7dd865
commit
a2702ecb73
|
|
@ -1,9 +1,8 @@
|
|||
// ÷икл for. —умма всех двузначных чисел
|
||||
var s: integer;
|
||||
// Цикл for. Сумма всех двузначных чисел
|
||||
|
||||
begin
|
||||
s := 0;
|
||||
var s := 0;
|
||||
for var i:=10 to 99 do
|
||||
s := s + i; // можно s += i
|
||||
writeln('—умма всех двузначных чисел = ',s);
|
||||
s += i;
|
||||
Println('Сумма всех двузначных чисел =',s);
|
||||
end.
|
||||
|
|
@ -1,13 +1,13 @@
|
|||
// ÷икл for. a в степени n
|
||||
var
|
||||
a: real;
|
||||
n: integer;
|
||||
// Цикл for. Вычисление a в степени n
|
||||
|
||||
begin
|
||||
write('¬ведите a,n: ');
|
||||
readln(a,n);
|
||||
var p: real := 1;
|
||||
var a := ReadlnReal('Введите a:');
|
||||
var n := ReadlnInteger('Введите n:');
|
||||
|
||||
var p := 1.0;
|
||||
for var i:=1 to n do
|
||||
p := p * a; // можно p *= a
|
||||
writelnFormat('{0} в степени {1} = {2}',a,n,p);
|
||||
p *= a;
|
||||
Println($'{a} в степени {n} = {p}');
|
||||
|
||||
Println($'Стандартная операция {a} ** {n} = {a ** n}');
|
||||
end.
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
// Öèêë for. Òàáëèöà ôóíêöèè
|
||||
// Цикл for. Таблица функции
|
||||
var
|
||||
a: real := 0;
|
||||
b: real := 4;
|
||||
|
|
@ -9,7 +9,7 @@ begin
|
|||
var x := a;
|
||||
for var i:=0 to n do
|
||||
begin
|
||||
writelnFormat('{0:f2} {1:f4}',x,sqrt(x));
|
||||
WritelnFormat('{0:f2} {1:f4}',x,sqrt(x));
|
||||
x += h;
|
||||
end;
|
||||
end.
|
||||
|
|
@ -1,18 +1,18 @@
|
|||
// ÷икл while. —умма цифр положительного числа
|
||||
var m: integer;
|
||||
// Цикл while. Сумма цифр положительного числа
|
||||
|
||||
begin
|
||||
writeln('¬ведите положительное число: ');
|
||||
read(m);
|
||||
write('÷ифры числа в обратном пор¤дке: ');
|
||||
var m := ReadlnInteger('Введите положительное число: ');
|
||||
|
||||
Print('Цифры числа в обратном порядке:');
|
||||
var s := 0;
|
||||
while m>0 do
|
||||
begin
|
||||
var digit := m mod 10;
|
||||
write(digit,' ');
|
||||
Print(digit);
|
||||
s += digit;
|
||||
m := m div 10;
|
||||
end;
|
||||
writeln;
|
||||
writeln('—умма цифр = ',s);
|
||||
|
||||
Println;
|
||||
Println('Сумма цифр =',s);
|
||||
end.
|
||||
5
TestSuite/errors/err0295.pas
Normal file
5
TestSuite/errors/err0295.pas
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
type
|
||||
Enum<T> = (X, Y);
|
||||
|
||||
begin
|
||||
end.
|
||||
|
|
@ -11248,6 +11248,35 @@ namespace PascalABCCompiler.TreeConverter
|
|||
//Проверяем параметры шаблона на совпадение друг с другом
|
||||
check_param_redeclared(ttn.template_args.idents);
|
||||
context.AddTemplate(ttn.name, tc, t_loc);
|
||||
|
||||
// SSM 23.10.18. Bug fix #1395. Пытаемся проверить, что это - enum. Повторяем с изменениями код в enum_type_node
|
||||
if (_type_declaration.type_def is enum_type_definition etd)
|
||||
{
|
||||
// значит это возможно enum
|
||||
//var etd =
|
||||
foreach (SyntaxTree.enumerator en in etd.enumerators.enumerators)
|
||||
{
|
||||
if (!((en.name is named_type_reference) && (en.name as named_type_reference).names.Count() == 1))
|
||||
{
|
||||
// Это tupletype
|
||||
return;
|
||||
}
|
||||
// Все - идентификаторы. Проверяем дальше
|
||||
SyntaxTree.ident id = (en.name as named_type_reference).FirstIdent;
|
||||
|
||||
// Если равен какому-то имени в параметрах обобщения, то это тип - пропускаем. Ищем не тип или неизвестное имя
|
||||
if (ttn.template_args.idents.Select(ide => ide.name.ToLower()).Any(s => s.Equals(id.name.ToLower())))
|
||||
continue;
|
||||
var si = context.CurrentScope.Find(id.name);
|
||||
if ((si == null) || !(si.FirstOrDefault().sym_info is type_node))
|
||||
{
|
||||
// Это точно enum. Выдавать ошибку - enumы не могут быть обобщёнными
|
||||
AddError(get_location(ttn), "ENUMS_CANNOT_BE_GENERIC");
|
||||
}
|
||||
}
|
||||
}
|
||||
// Это не enum. Значит, просто выйти. Так было в коде до SSM 23.10.18
|
||||
|
||||
return;
|
||||
|
||||
//is_template_synonym = true;
|
||||
|
|
|
|||
|
|
@ -13,4 +13,5 @@ MISSED_SEMANTIC_CHECK_FOR_SUGARED_NODE_{0}=Missed semantic check for sugared nod
|
|||
OPERATOR_DQ_MUST_BE_USED_WITH_A_REFERENCE_TYPE_VALUETYPE=Left operand of ?. operation must have reference type
|
||||
NAME_IN_PROPERTY_READ_SECTION_MUST_BE_FIELD_OR_METHOD_NAME=Name in property read section must be field name or method name of this class
|
||||
NAME_IN_PROPERTY_WRITE_SECTION_MUST_BE_FIELD_OR_METHOD_NAME=Name in property write section must be field name or method name of this class
|
||||
STATIC_PROPERTY_MUST_HAVE_STATIC_ACCESSOR=Static property accessor must be static
|
||||
STATIC_PROPERTY_MUST_HAVE_STATIC_ACCESSOR=Static property accessor must be static
|
||||
ENUMS_CANNOT_BE_GENERIC=Enumerator type cannot be generic
|
||||
|
|
@ -14,4 +14,5 @@ OPERATOR_DQ_MUST_BE_USED_WITH_A_REFERENCE_TYPE_VALUETYPE=Левый операн
|
|||
AUTOCLASS_MUST_NOT_CONTAIN_ENUM_TYPE_DEFINITION_IN_FIELD_TYPE=Автокласс не может содержать поля безымянного перечислимого типа
|
||||
NAME_IN_PROPERTY_READ_SECTION_MUST_BE_FIELD_OR_METHOD_NAME=Имя в секции read свойства должно быть именем поля или функции-метода этого класса
|
||||
NAME_IN_PROPERTY_WRITE_SECTION_MUST_BE_FIELD_OR_METHOD_NAME=Имя в секции write свойства должно быть именем поля или процедуры-метода этого класса
|
||||
STATIC_PROPERTY_MUST_HAVE_STATIC_ACCESSOR=Акцессор статического свойства должен быть статическим
|
||||
STATIC_PROPERTY_MUST_HAVE_STATIC_ACCESSOR=Акцессор статического свойства должен быть статическим
|
||||
ENUMS_CANNOT_BE_GENERIC=Перечислимый тип не может быть обобщенным
|
||||
Loading…
Reference in a new issue