Ошибки PascalABC.NET

Помещено на GitHub Ошибка в типе результата, возвращаемого методом класса

Заработало, спасибо, что быстро исправили))

  var i := 5/5;
  writeln(i.GetType);

анализатор кода воспринимает i как int64 хотя writeln выводит System.Double

Спасибо, что опубликовали Issue на Github

ещё 1 неприятный момент при форматировании должно быть так:

  if true then
    if true then
      writeln(1) else
      writeln(2) else
    if true then
      writeln(3) else
      writeln(4);

а форматирование делает так:

  if true then
    if true then
      writeln(1) else
      writeln(2) else
  if true then
    writeln(3) else
    writeln(4);
type
  t1 = class
  
    public procedure p1; abstract;
    
  end;
  t2 = class(t1)
  
    procedure p1; override;
    begin
      
    end;
    
  end;

Ошибка - нельзя понижать уровень доступа, если специально указать что у t2.p1 уровень доступа public или убрать его у t1.p1 то ошибки нету, хотя он должен быть таким в любом случае. Это не единственное неприятное свидетельство что стандартный уровень доступа хоть и похож но не public, это так задумано? Ну и разумеется красивый код получается если у каждой подпрограммы ставить отдельно её уровень доступа, но иногда надо написать программу на 15 строчек чтоб что то протестировать и не заморачиваться.

writeln(abs(Single(5)).GetType); выдаёт System.Double хотя abs для Single есть

Так вроде же написано в Справке для виртуальных методов

При переопределении виртуального метода в подклассе его уровень доступа должен быть не ниже, чем в базовом классе. Например, public виртуальный метод не может быть переопределен в подклассе private-методом.

Так что это не ошибка, а так задумано.

Занятно, что если написать

begin
  var r:=Abs(single(5));
  Writeln(r.GetType)
end.

выдается System.double, хотя Intellisence показывает var r:integer; Но если сделать явное преобразование

begin
  var r:=single(Abs(single(5)));
  Writeln(r.GetType)
end.

выдается System.Single, хотя Intellisence по-прежнему показывает var r:integer;

P.S. Разработчики просили писать сообщения о явных ошибках на GitHub.

но я то не private ставлю, а если его не ставить - должно восприниматься как public, прочитайте внимательно что у меня написано

стоит пожалуй, но я не был на 100% уверен что это ошибки, с тем же public-private состоянием)

кроме того насчёт ошибок форматирования - это не ошибки компилятора, куда их лучше писать как думаете?

По умолчанию уровень доступа - internal - сборочный. Явно такого ключевого слова нет. Мораль: указывайте уровень доступа явно.

разве сложно сделать стандартный уровень доступа public? или в internal есть какой то особый смысл?

Это вопрос к разработчикам

Это кто Вам сказал?

public по умолчанию - это плохо. Противоречит идее инкапсуляции.

  writeln($FFFFFFFFFFFFFFFF);
  writeln($FFFFFFFFFFFFFFFF:20);

выводит это:

18446744073709551615
                 255

  begin
    loop 1 do
      try
      except;
  end;
  end;

Форматирование “сжирает” строчку после except

begin var s: Integer; var a := 12345; s := IntToStr(a).Sum(i -> i.Code - 48); end. Program24.pas(5) : Нельзя преобразовать тип real к integer

Что делаю не так?

Вы всё делаете правильно, это ещё 1 ошибка лямбд… Так работает:

begin
  var s: Integer;
  var a := 12345;
  var sti:char->integer := ch -> ch.Code - 48;
  s := IntToStr(a).Sum(sti);
end.

Так же можно поменять тип s на System.Decimal

Абстрактные и авто классы сворачиваются не правильно:

можете добавлять в issues. ошибки с форматированием тоже. здесь они потеряются.

Нельзя сделать extensionmethod статичной подпрограммы.