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

Дамы и Господа! Случилась такая ошибка при запуске PascalABC, светлым умам заранее благодарен! 2omd093dopsj|690x387

Что это? Не кликается…

И в любом случае, приложите больше данных, к примеру код.
Его выделять надо так:

```
Код
```

Знак ` находится за Ё в англ раскладке.

Нельзя вызвать методы begin/end, компилятор ругается. Для примера OpenTK.Graphics.OpenGL.GL.End(); - фигвам. Обойти это как-то можно? :slight_smile:

Да, ключевые слова надо экранировать:
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 лайк