Ошибки компилятора PascalABC.Net

Этот код генерирует полный бред в IL:

uses u1;
uses u2;

begin
  var a := new t1;
end.
unit u1;

interface

type
  t2 = partial class end;
  t1 = partial class
    public next: t2;
  end;
  
implementation

uses u2;

end.
unit u2;

interface

type
  t1 = partial class end;
  t2 = partial class
//    public next: t1; // если раскомментировать - t2 вообще перестаёт существовать
  end;
  
implementation

uses u1;

end.

И t1 и t2 добавляет по 2 раза, причём у дубля t1 нету ни 1 поля.

Есть ли смысл заливать в issue, или пока рано partial классы насиловать?

Делайте issue. Всё равно partial классы нужны

1 лайк

Так-то это и не должно работать. Все части partial-класса должны находиться в одном пространстве имён.

using System;

namespace ConsoleApp1
{
    namespace A
    {
        partial class Class1
        {

        }
    }

    namespace B
    {
        partial class Class1
        {

        }
    }

    public static class Program
    {
        public static void Main()
        {
            Console.WriteLine(typeof(A.Class1).GetHashCode() == typeof(B.Class1).GetHashCode());
            Console.ReadKey();
        }
    }
}

Это, разумеется, выведет False.

Почему? Это должно работать. У вас два разных класса

1 лайк

В модулях кстати надо это осмыслить. С одной стороны модули - это разные пространства имен. С другой - partial классы нами создавались для дизайнера объектов чтобы действовать в разных модулях.

1 лайк

Зачем нужны модули? Это всё можно было бы легко реализовать в пространствах имён:

Program240.pas:

{$includenamespace Form1.pas}
{$includenamespace Form1Design.pas}
program Project240;

uses System, System.Drawing, System.Windows.Forms;

begin
  System.Windows.Forms.Application.EnableVisualStyles();
  System.Windows.Forms.Application.SetCompatibleTextRenderingDefault(false);
  System.Windows.Forms.Application.Run(new Form1)
end.

Form1.pas:

namespace Project240;

type
  Form1 = partial class(Form)
    public constructor;
    begin
      InitializeComponent;
    end;
  end;

end.

Form1Design.pas:

namespace Project240;

type
  Form1 = partial class(Form)
    private procedure InitializeComponent;
    begin
      self.Text := 'Form1';
    end;
  end;

end.

1 лайк

Тогда у нас пространств имен не было

Loading core… Подключен парсер PascalABC.NET Language Parser v1.2 Подключен парсер Documentation Comments Tag Parser v0.9 PascalABCCompiler.Core v3.4.2.1972 Copyright © 2005-2018 by Ivan Bondarev, Stanislav Mihalkovich OK 44,0025ms Connected parsers: PascalABC.NET (*.pas); Connected conversions: Optimizer; Compiling assembly And.pas… [0][1,1] And.pas: Unexpected symbol ‘’ [1][1,1] And.pas: Found ‘’ but declaration section or begin expected Текст ошибки(или что это),на картинке плохо видно Что делать что бы всё заработало

Скорее всего дело в кодировке файла.

Скиньте .pas файл который так ломается.

Все эти,кроме тех которые не относятся к паскали

Вообще абсолютно любой .pas файл открываешь и такая фигня

Ещё 4 дня назад всё работало,а сейчас нет,хотя я эти файлы дней 30 не открывал и нечего там не менял

Я говорю .pas файлы скиньте а не скриншот.
Хотя вообще - для начала обновитесь:
http://pascalabc.net/ssyilki-dlya-skachivaniya

И еще - очень странно выглядит то, что вы не работаете в IDE. Покажите нам скриншоты из IDE

Это запуск из контекстного меню.

IDE это что?Я просто пока плохо в этом разбираюсь

Простым языком если можно

Это оболочка. Такое окошко, где меню и все прочие дела. Графический пользовательский интерфейс. .Альтернатива - запуск из командной строки.

IDE это редактор. То в чём вы редактируете код. И то, что открывается если вы дбл кликаете (или ПКМ>>открыть) на .pas файл.