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

Да, ключевые слова надо экранировать:
OpenTK.Graphics.OpenGL.GL.&End

1 лайк

Недавно запуск pabcnetcclear.exe с такой строкой в качестве аргументов:
$'"{fname}.pas" "" "Debug=0"'
Перестал работать. Пишет:

Error in argument Debug=0
Command line cannot contain any arguments after filename 'C:\1Сергей\Мои программы\SAC\src\Test.pas' and outdirname ''

Так а куда правильно Debug=0 засовывать чтоб откомпилировать .pas файл в режиме без дебага?

P.S. @Admin ввобще вы мне тут сказали использовать такой аргумент, но мне кажется что он и до того как компилятор стал на него ругаться - не работал. Просто раньше игнорировался.

Мы переписали pabcnetcclear.exe Запустите его без аргументов - он скажет вам параметры командной строки.

И - можно открывать тред по консольным компиляторам - что хотелось бы, потому что они писались только с расчетом простейшего использования в оболочке

1 лайк

Я немного туплю с утра пораньше… Какая тут логика? Вы имеете в виду создать отдельную тему с предложениями как улучшить, чтоб консольные компиляторы были юзабельны не только из IDE?

@Admin, пожалуйста, дофиксите наконец #1981, вы ведь в #1957 уже придумали как исправлять такое. Очень мешает.

Это сложно всё, на это уходят дни. Там нет аналогии.

type
  t1 = class
    
    public static procedure p1;
    begin
    end;
    
  end;

begin
  try
    var ad := System.AppDomain.CreateDomain('domain 2');
    ad.DoCallBack(t1.p1);
  except
    on e: Exception do writeln(e);
  end;
end.

Этот код падает с TypeLoadException. И вроде ведь несколько месяцев назад работало.

Посмотрел как выглядит t1 в .exe и написал такой же тип в C# - всё работает без ошибок:


using System;

namespace Test1
{
	public class t1
	{
	    public void Init()
	    {
	    }
	    
		public static void p1()
		{
		}

	    public t1()
	    {
	    	this.Init();
	    }
	}
	
	static class Program
	{
		public static void Main(string[] args)
		{
			try {
				var ad = AppDomain.CreateDomain("domain 2");
				ad.DoCallBack(t1.p1);
			} catch (Exception e) {
				Console.WriteLine(e);
			}
			Console.ReadLine();
		}
	}
}

у меня не падает

А разве это ошибка? Там действительно два преобразования типов

Я уже объяснял в #1957, если применить operator implicit - получается неправильный тип.

У меня тоже не падает.

Странно, теперь и у меня не падает… А IDE перезагрузить я тогда не пробовал.

Этот код генерирует полный бред в 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 Текст ошибки(или что это),на картинке плохо видно Что делать что бы всё заработало