Внутренняя ошибка компилятора System.NullReferenceException

Текст отчёта:

//Здесь вы можете добавить свой комментарий


02.04.2021 20:11:56
PascalABCCompiler.Core v3.8.0.2872 (27.03.2021), debug version
Runtime version: 4.0.30319.42000
OS version: Microsoft Windows NT 10.0.19042.0
Processor count: 4
WorkingSet: 145684 kb
StatesList: 
BeginCompileFile test_prettyPrint.pas
BeginParsingFile test_prettyPrint.pas
EndParsingFile test_prettyPrint.pas
SyntaxTreeConversion Standard
ReadPCUFile PABCSystem.pcu
ReadDLL System.dll
ReadDLL mscorlib.dll
ReadDLL System.Core.dll
ReadDLL System.Numerics.dll
ReadPCUFile PABCExtensions.pcu
ReadPCUFile __RedirectIOMode.pcu
ReadDLL System.Windows.Forms.dll
CompileInterface test_prettyPrint.pas
EndCompileFile test_prettyPrint.pas
SemanticTreeConversion Optimizer
CodeGeneration test_prettyPrint.exe
CompilationFinished test_prettyPrint.pas
Ready

Error[0]: Внутренняя ошибка компилятора в модуле [pabcnetc.exe] :'System.Exception: System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
   в PascalABCCompiler.NETGenerator.ILConverter.visit(IThisNode value)
   в PascalABCCompiler.NETGenerator.ILConverter.visit(ICommonMethodCallNode value)
   в PascalABCCompiler.NETGenerator.ILConverter.ConvertStatement(IStatementNode value)
   в PascalABCCompiler.NETGenerator.ILConverter.visit(IStatementsListNode value)
   в PascalABCCompiler.NETGenerator.ILConverter.ConvertStatement(IStatementNode value)
   в PascalABCCompiler.NETGenerator.ILConverter.visit(IStatementsListNode value)
   в PascalABCCompiler.NETGenerator.ILConverter.ConvertStatement(IStatementNode value)
   в PascalABCCompiler.NETGenerator.ILConverter.visit(IStatementsListNode value)
   в PascalABCCompiler.NETGenerator.ILConverter.ConvertBody(IStatementNode body)
   в PascalABCCompiler.NETGenerator.ILConverter.ConvertFunctionBody(ICommonFunctionNode func)
   в PascalABCCompiler.NETGenerator.ILConverter.ConvertFunctionsBodies(ICommonFunctionNode[] funcs)
   в PascalABCCompiler.NETGenerator.ILConverter.ConvertFromTree(IProgramNode p, String TargetFileName, String SourceFileName, CompilerOptions options, String[] ResourceFiles)
   в PascalABCCompiler.Compiler.Compile() System.Exception: System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
   в PascalABCCompiler.NETGenerator.ILConverter.visit(IThisNode value)
   в PascalABCCompiler.NETGenerator.ILConverter.visit(ICommonMethodCallNode value)
   в PascalABCCompiler.NETGenerator.ILConverter.ConvertStatement(IStatementNode value)
   в PascalABCCompiler.NETGenerator.ILConverter.visit(IStatementsListNode value)
   в PascalABCCompiler.NETGenerator.ILConverter.ConvertStatement(IStatementNode value)
   в PascalABCCompiler.NETGenerator.ILConverter.visit(IStatementsListNode value)
   в PascalABCCompiler.NETGenerator.ILConverter.ConvertStatement(IStatementNode value)
   в PascalABCCompiler.NETGenerator.ILConverter.visit(IStatementsListNode value)
   в PascalABCCompiler.NETGenerator.ILConverter.ConvertBody(IStatementNode body)
   в PascalABCCompiler.NETGenerator.ILConverter.ConvertFunctionBody(ICommonFunctionNode func)
   в PascalABCCompiler.NETGenerator.ILConverter.ConvertFunctionsBodies(ICommonFunctionNode[] funcs)
   в PascalABCCompiler.NETGenerator.ILConverter.ConvertFromTree(IProgramNode p, String TargetFileName, String SourceFileName, CompilerOptions options, String[] ResourceFiles)
   в PascalABCCompiler.Compiler.Compile()'

Код, приводящий к ошибке:

type
  node = class
  private
    _nodes: list<node>;
    _value: string;
  public
    property Nodes[x: integer]: node
    read _nodes[x];default;
    
    constructor(v: string);
    begin
      _value := v;
      _nodes := new List<node>();
    end;
    
    function AddNode(v: string): node;
    begin
      var t := new node(v);
      _nodes.Add(t);
      Result := t;
    end;
  end;

begin
  var tree_command := new node('C:.');
  tree_command.AddNode('.android');
  with tree_command.AddNode('.vscode').AddNode('extensions') do
  begin
    with AddNode('some') do
    begin
      AddNode('1');
      AddNode('2');
    end;
    AddNode('ms-vscode.cpptools-1.2.2');
  end;
  tree_command.AddNode('3D Objects');
end.

Это получилось после недолгой игры с оператором “with”, вроде бы из-за вложенности. Если удалить внутренний, то всё идёт хорошо. + после нажатия на кнопку “Сохранить отчёт как…” окно с ним перестаёт отвечать

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

Примерно вот так:

1 лайк