Кстати, это с какой-то версии .NET так сильно память стала жрать генерация сборок. Вместе со студией куда-то все катится…
У нас при генерации инсталлятора запускается TestRunner - и там ошибок нет
Да, я заметил, поэтому и просил посмотреть в этот .pcu и/или компилятор. Что именно в том .pcu не так сгенерировалось.
Непонятно, куда смотреть. Pcu - бинарный формат, его не посмотришь. А в компиляторе - куда смотреть, если у нас всё работает?
Ну, когда я дебажил что то подобное в SAC - я включал отладку чтения этого бинарного файла и смотрел где появляется неадекватное значение… Почему сам не могу - я не знаю как устроен компилятор, какие значения что значат. Я даже не знаю где что чем открыть чтоб получить IDE в которой возможна отладка.
И -
скачать мою ветку в отдельную папку - это 1-2 мин. Ссыль уже была, но вот чистая:
@Admin, вы несколько часов закрыли все issue с тайпклассами, но не похоже чтоб что то было исправлено… И @voloshinbogdan, кто был, вроде как, ответственен за их реализацию - ничего не делал на гитхабе почти 5 месяцев.
Какова ситуация с тайпклассами? Их отказались реализовывать?
Они по-прежнему в другом branchе на Github.
Но к моему глубокому сожалению за практически полгода ситуация с ними не изменилась ни на йоту. Для живого проекта это недопустимо.
Поэтому Issues убраны.
Вхождение type classes в Release призрачно.
Есть ли более человеческий способ программно узнать установленную версию паскаля, чем следующий?:
begin
var a := System.Reflection.Assembly.ReflectionOnlyLoadFrom('C:\Program Files (x86)\PascalABC.NET\PascalABCNET.exe');
a.GetName.Version.ToString.Print;
end.
С этим способом выполняется слишком много всего лишнего + оперативка забивается несколькими мегабайтами мусора, который далее ни на что не сгодится.
Может добавите какой то файл соответствующий онлайн версии?
Мне это надо для кастомной программы для обновления…
PascalABCVersion()
В последней версии существенно улучшена графика GraphWPF. Несколько увеличена скорость и кардинально улучшена плавность прорисовки при большом количестве рисуемых объектов. В частности, появились примитивы SetPixel и SetPixels
Да, спасибо ))
В этой версии у нас иконка немного новая )
В последнем билде (2022) разом появилось несколько багов.
Сначала #1900, а теперь ещё вот:
Loading core...
Подключен парсер PascalABC.NET Language Parser v1.2
Подключен парсер Documentation Comments Tag Parser v0.9
PascalABCCompiler.Core v3.4.2.2022
Copyright (c) 2005-2018 by Ivan Bondarev, Stanislav Mihalkovich
OK 255,3668ms
Connected parsers: PascalABC.NET (*.pas);
Connected conversions: Optimizer;
Compiling assembly SAC.pas...
[0]Internal compiler error in module Compiler.Compile[CompArgsData.pas] :'System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
в TreeConverter.LambdaExpressions.Closure.CapturedVariablesTreeBuilder.visit(exception_handler eh)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.DefaultVisit(syntax_tree_node n)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.DefaultVisit(syntax_tree_node n)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.DefaultVisit(syntax_tree_node n)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.DefaultVisit(syntax_tree_node n)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
в TreeConverter.LambdaExpressions.Closure.CapturedVariablesTreeBuilder.visit(statement_list stmtList)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
в TreeConverter.LambdaExpressions.Closure.CapturedVariablesTreeBuilder.visit(for_node _for_node)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
в TreeConverter.LambdaExpressions.Closure.CapturedVariablesTreeBuilder.visit(statement_list stmtList)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
в TreeConverter.LambdaExpressions.Closure.CapturedVariablesTreeBuilder.visit(statement_list stmtList)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
в TreeConverter.LambdaExpressions.Closure.CapturedVariablesTreeBuilder.visit(statement_list stmtList)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.DefaultVisit(syntax_tree_node n)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
в TreeConverter.LambdaExpressions.Closure.CapturedVariablesTreeBuilder.visit(function_lambda_definition lambdaDefinition)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
в TreeConverter.LambdaExpressions.Closure.CapturedVariablesTreeBuilder.visit(assign _assign)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
в TreeConverter.LambdaExpressions.Closure.CapturedVariablesTreeBuilder.visit(statement_list stmtList)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
в TreeConverter.LambdaExpressions.Closure.CapturedVariablesTreeBuilder.BuildTree(statement_list statementList)
в TreeConverter.LambdaExpressions.Closure.CapturedVariablesSubstitutionsManager.Substitute(syntax_tree_visitor _visitor, declarations decls, statement_list _statementList)
в PascalABCCompiler.TreeConverter.syntax_tree_visitor.visit(block _block)
в PascalABCCompiler.TreeConverter.syntax_tree_visitor.visit(procedure_definition _procedure_definition)
в PascalABCCompiler.TreeConverter.syntax_tree_visitor.visit(declarations _subprogram_definitions)
в PascalABCCompiler.TreeConverter.syntax_tree_visitor.visit(implementation_node _implementation_node)
в PascalABCCompiler.TreeConverter.syntax_tree_visitor.visit_implementation(unit_module _unit_module)
в PascalABCCompiler.TreeConverter.SyntaxTreeToSemanticTreeConverter.CompileImplementation(common_unit_node SemanticUnit, compilation_unit SyntaxUnit, unit_node_list UsedUnits, List`1 ErrorsList, List`1 WarningsList, SyntaxError parser_error, Hashtable bad_nodes, using_namespace_list interface_namespaces, using_namespace_list imlementation_namespaces, Dictionary`2 docs, Boolean debug, Boolean debugging)
в PascalABCCompiler.Compiler.CompileUnit(unit_node_list Units, unit_or_namespace SyntaxUsesUnit)
в PascalABCCompiler.Compiler.CompileUnit(unit_node_list Units, unit_or_namespace SyntaxUsesUnit)
в PascalABCCompiler.Compiler.Compile()'
Считая что в обоих случаях, на сколько я понял, виноваты лямбды - может ли быть так что вы случайно залили билд, в котором падают тесты, из за первого фикса #1897? Или это какая то новая ошибка и придётся её тоже искать.
Последнее было бы нежелательно, ибо падает компиляция SAC.pas, к которому привязано модулей, в общей сумме на, где то, 10k-15k строк. 1 раз найти ошибку, конечно, не сложно. Но если появилась тонна ошибок с лямбдами (которые у меня там повсюду) - всё это придётся перебрать несколько десятков раз.
Да, увидели. В ближайшее время исправим.
А, всё оказалось не так плохо… Там ошибка была в 1 модуле на 340 строк, и все подключённые к нему модули (каким то чудом, ибо в них всё на много всё мудрёнее) не вызывали ошибку.
Вот программа для тестов:
begin
//обязательно лямбда
var p: procedure := ()->
begin end;
try
except
on Exception do//если написать "on e: Exception do" - ошибки нет
end;
end.
() : Внутренняя ошибка компилятора в модуле [pabcnetc.exe] :'System.Exception: System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
в TreeConverter.LambdaExpressions.Closure.CapturedVariablesTreeBuilder.visit(exception_handler eh)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.DefaultVisit(syntax_tree_node n)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.DefaultVisit(syntax_tree_node n)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.DefaultVisit(syntax_tree_node n)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.DefaultVisit(syntax_tree_node n)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
в TreeConverter.LambdaExpressions.Closure.CapturedVariablesTreeBuilder.visit(statement_list stmtList)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
в TreeConverter.LambdaExpressions.Closure.CapturedVariablesTreeBuilder.BuildTree(statement_list statementList)
в TreeConverter.LambdaExpressions.Closure.CapturedVariablesSubstitutionsManager.Substitute(syntax_tree_visitor _visitor, declarations decls, statement_list _statementList)
в 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, List`1 ErrorsList, List`1 WarningsList, SyntaxError parser_error, Hashtable bad_nodes, using_namespace_list namespaces, Dictionary`2 docs, Boolean debug, Boolean debugging)
в PascalABCCompiler.Compiler.CompileUnit(unit_node_list Units, unit_or_namespace SyntaxUsesUnit)
в PascalABCCompiler.Compiler.Compile()'
И таки, получается, так же как #1900, проблема в столкновении лямбд и on-do
.
Кидать в issue?
Давайте мы откатим issue вызвавший проблему и потом решим
Появилась версия 3.4.3 (сборка 2041 от 24.04.2019). Хорошо бы узнать основные отличия от 3.4.2. Например, через “Что нового” на официальном сайте.
Это ошибка. В ближайшее время восстановим 3.4.2