Ошибки PascalABC.NET

Может антивирус блокирует exe-шник?

Не знаю, известно ли…

uses System, System.Linq, System.Collections.Generic, System.IO;

begin
  System.IO.File.ReadAllLines('2.txt').ToList().ForEach(x -> writeln(x));
end.
  

Внутренняя ошибка компилятора в модуле Compiler.Compile[Program1.pas] :‘System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта. в PascalABCCompiler.TreeRealization.type_table.is_derived(type_node base_class, type_node derived_class) в PascalABCCompiler.TreeRealization.delegated_methods.get_implicit_conversion_to(type_node ctn) в PascalABCCompiler.TreeRealization.type_table.get_convertions(type_node from, type_node to, Boolean is_implicit) в PascalABCCompiler.TreeConverter.convertion_data_and_alghoritms.get_conversions(expressions_list factparams, parameter_list formalparams, Boolean is_alone_method_defined, location locg) в PascalABCCompiler.TreeConverter.convertion_data_and_alghoritms.select_function(expressions_list parameters, SymbolInfo functions, location loc, List1 syntax_nodes_parameters) в PascalABCCompiler.TreeConverter.syntax_tree_visitor.visit_method_call(method_call _method_call) в PascalABCCompiler.TreeConverter.syntax_tree_visitor.visit(method_call _method_call) в PascalABCCompiler.TreeConverter.returner.visit(expression expr) в PascalABCCompiler.TreeConverter.syntax_tree_visitor.visit(procedure_call _procedure_call) в PascalABCCompiler.TreeConverter.syntax_tree_visitor.convert_strong(statement st) в PascalABCCompiler.TreeConverter.syntax_tree_visitor.visit(statement_list _statement_list) в PascalABCCompiler.TreeConverter.syntax_tree_visitor.convert_strong(statement st) в PascalABCCompiler.TreeConverter.syntax_tree_visitor.visit_program_code(statement_list program_code) в PascalABCCompiler.TreeConverter.syntax_tree_visitor.visit(block _block) в PascalABCCompiler.TreeConverter.syntax_tree_visitor.visit(program_module _program_module) в PascalABCCompiler.TreeConverter.SyntaxTreeToSemanticTreeConverter.CompileInterface(compilation_unit SyntaxUnit, unit_node_list UsedUnits, List1 ErrorsList, List1 WarningsList, SyntaxError parser_error, Hashtable bad_nodes, using_namespace_list namespaces, Dictionary2 docs, Boolean debug, Boolean debugging) в PascalABCCompiler.Compiler.CompileUnit(unit_node_list Units, unit_or_namespace SyntaxUsesUnit) в PascalABCCompiler.Compiler.Compile()’

Хотел вот в форум скинуть новичковый, давно Паскалем не пользовался. А тут раз - и полет.

P.S. WDE.

Ага, спасибо. Забыли запретить. Нет такого синтаксиса для лямбд- процедур. Запретим.

Скажите, пожалуйста, нельзя ли обеспечить работоспособность модулей Робота и Чертёжника под Линуксом? Казалось бы, там не бог весть какая сложная графика.

Пока запуск Робота даёт ошибку.

Stacktrace:

  at <unknown> <0xffffffff>
  at (wrapper managed-to-native) System.Drawing.GDIPlus.GdipDrawImageI (intptr,intptr,int,int) <0xffffffff>
  at System.Drawing.Graphics.DrawImage (System.Drawing.Image,int,int) <0x00057>
  at (wrapper remoting-invoke-with-check) System.Drawing.Graphics.DrawImage (System.Drawing.Image,int,int) <0xffffffff>
  at GraphABC.GraphABC.Redraw () <0x00177>
  at GraphABC.GraphABC.UnlockDrawing () <0x00013>
  at RobotField.TRobotField.Draw () <0x0008f>
  at RobotField.TRobotField.DrawCentered () <0x000c7>
  at RobotField.RobotField.CorrectWHLT () <0x00117>
  at RobotTaskMaker.RobotTaskMaker.CorrectFieldBounds () <0x0000b>
  at Robot.Robot.Task (string) <0x00113>
  at r.Program.$Main () <0x00013>
  at r.Program.Main () <0x00013>
  at (wrapper runtime-invoke) object.runtime_invoke_void (object,intptr,intptr,intptr) <0xffffffff>

Native stacktrace:

	/usr/bin/cli() [0x4b5bc0]
	/usr/bin/cli() [0x50ecfb]
	/usr/bin/cli() [0x424063]
	/lib/x86_64-linux-gnu/libpthread.so.0(+0x10d10) [0x7f06e7a3cd10]
	/usr/lib/libgdiplus.so.0(+0x130f5) [0x7f06e44ab0f5]
	/usr/lib/libgdiplus.so.0(GdipDrawImageRect+0x3d8) [0x7f06e44bc8d8]
	[0x4011cb8d]

Я помню еще на старом форуме писали про проблему с переименовыванием, но не помню чем дело кончилось. Вобщем проблема все еще есть, если переименовывать функцию или процедуру - затирает ключевое слово function или procedure соответсвенно, и хорошо еще если пробел останется - были случаи когда новое название вставляется вместо ключевого слова не целиком, а только первой частью, и сливается непосредственно с новым именем - между ними пробела не будет. Такое правда сейчас воспроизвести не удалось, но пример прилагаю.

function SomeName():integer:=1;

begin
end.

При этом по коду переименовывает корректно, и даже с подключенными модулями (по крайней мере, открытыми на редактирование) тоже работает. Хотя и тут есть исключения - была проблема с переименовыванием поля записи. В описании переименовалась, в обращениях переименовалась, а в объявлении константной записи - нет.

Вот пример - если попытаться переименовать SomeParameter - переименуется только описание записи, а в константах имя останется прежним.

type SomeType = record
SomeParameter:integer;
end;

const
SomeTypeInstance = SomeType(
SomeParameter:10;
);
SomeTypeOtherInstance = SomeType(
SomeParameter:20;
);

У нас сейчас на практических занятиях эта проблема всё время лезет, ужасно неудобно. Так что присоединяюсь к просьбе что-то с этим сделать.

Вроде поправил ошибку при переименовании (пока только на GitHub закоммитил). Там было не очень понятное мне добавление определения переименовываемого объекта в общий список, где хранятся результаты поиска, оно и приводит к таким результатам.

Я там часть кода аккуратно закомментировал. Посмотрел, откуда еще этот метод вызывается (переименование объекта, переименование модуля из обозревателя проекта, поиск ссылок на объект) и вроде как все должно работать во всех этих случаях. В общем, старые ошибки исправлил, новые (если и внес, то) пока не обнаружил.

1 лайк

Спасибо, будем ждать релиза) А то в одном достаточно крупном проекте настало время достаточно крупного рефакторинга, начал переименовывать и понял что лучше подождать, потому что все равно вручную править приходится.

Здравствуйте, PascalABC не запускает сохраненные файлы. Если просто попытаться скомпилировать программу, то ошибок не возникает. Если же попытаться её запустить, то он просто зависает, а в папке с программой создается exe-шник и pdb. Плюс, exe файл не удаляется(пишет, что используется в System). ОС Win10.

Update. Проблема найдена, раньше Avast просто проверял мои программы на наличие вирусов, сейчас же решил просто всё блочить :frowning:

Какие убогие антивирусы пошли.

2 лайка

Сейчас попробовал рефакторинг - методы стал нормально переименовывать, а типы перестал вообще. то есть ни в самих описаниях, ни в объявлении экземпляров, ни в обращениях (когда он параметр или возвращаемое значение).

Погонял старую и новую версию на тестовых примерах из папки Samples - ведут себя одинаково. За исключением того, что старая версия конструктор класса неправильно переименовывает.

Некоторые классы переименовываются, некоторые - нет, а некоторые - частично. Скорее всего, ошибка была и раньше. Посмотрю.

Сегодня в очередной раз что-то запускал, столкнулся с ошибкой компилятора, но к сожалению не смог сохранить отчет об ошибке, форма с кнопкой сохранения отчета вешалась при нажатии, помню что в тексте ошибки были слова вроде “массив имеет недопустимые размеры”. после второго перезапуска ошибка перестала появляться. Собственно напрягла не столько ошибка, мало ли что я там натворил, а именно невозможность корректно сохранить отчет. в следующий раз попробую вручную скопировать из окошка, если воспроизведется.

Вроде ошибка с сохранением отчета давно исправлена. У вас стоит актуальная версия среды?

Ну не прям самая последняя, но одна из ноябрьских сборок… версия 3.0, сборка 1066. Не думаю что полмесяца - это давно, так что какой-то там подвох есть.

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

вот лог:

internal_error.txt (6,0 КБ)

А перекомпилировать все работает?

с третьего раза запустилось нормально, после перезапуска среды и перекомпиляции. какая-то плавающая ошибка.

Почему выдаётся ошибка в программе? Ошибка: “System.Threading.ThreadStateException: Поток не выполняется; его нельзя приостановить. в PABCSystem.PABCSystem.Read(String& x)”

program sss;
uses GraphABC;

procedure MouseDown(x, y, mb: integer);
var s:string;
begin
  readln(s);
end;
    
begin
  OnMouseDown := MouseDown;
end.