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

Станислав Станиславович, я бы очень хотел, чтобы Вы перед сборкой и публикацией очередного офиц. релиза всегда синхронизировали свой репозиторий с Гитхабом и создавали новый Release-tag, чтобы они у нас были четко привязаны к своим последним коммитам. Если Вас это не очень затруднит, конечно…

1 лайк

Я перед сборкой всегда синхронизирую.

А что такое Release tag?

  1. stackoverflow.com – Creating a tag in a GitHub repository

  2. Основы Git - Работа с метками

  3. How to Create Release In GitHub from Tags

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

Тогда хотя бы в заголовке комментария к релизному коммиту всегда ставьте полную версию билда: так, как вы это сделали последний раз с 3.7.1.2699.

Я уже говорил на эту тему - бывают незначимые изменения. В основном - незначимые изменения. Это утомительно - каждый раз ставить это руками. Я иногда несколько раз в день это делаю.

Со значимыми - согласен.

var
  i, j, n: integer;
begin
   n := 5;
   for i := 1 to n do
      for j := 1 to n do begin
         Writeln(i, ' ', j);
         n := 0
      end;   
end.  

Циклы (оба) не должны прерываться.

Всё правильно работает. Второй цикл начинается полностью заново на следующей итерации первого. А тогда n уже 0, поэтому второй никуда не уходит.

1 лайк

Внешний цикл и не прерывается, он выполняется ровно 5 раз. Внутренний выполняется для i = 1 пять раз. Затем он больше не выполняется, поскольку n = 0.

Второй - это который? Оба цикла инициализируются при n = 5. И последующее изменение n не может влиять на число повторений.

Вы ошибаетесь. Внутренний заголовок цикла инициализируется 5 раз. Это классика цикла for.

Как же внешний повторяется 5 раз, если i, которое выводится, все время 1

Сейчас посмотрим. Я описал, как должны работать вложенные for, а не что и как получилось в Вашем случае.

Посмотрел. Все так. Вывод пяти строк - результат первого прохода по внешнему циклу при i = 1 и пяти проходов по внутреннему для j от 1 до 5. Далее i = 2, i <= 5, j = 1, j > 0, ничего не выводится, i =3, 4, 5 И каждый раз j = 1, j > 0.

Да, пожалуй, я неправ. Вся печать происходит при i = 1, потом внешний цикл продолжается, но уже ничего не печатается.

Спасибо. Извините.

Можно все удалить.

2 лайка

Люблю, когда человек понимает, где ошибся. Потому что это уже навсегда. Больше в этом вопросе у него ляпов не случится.

2 лайка

@Admin после фикса #2305 вызов _GenerateAllSetups.bat стал выдавать:

[0]Internal compiler error in module Compiler.Compile[RebuildStandartModules.pas] :'System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
Parameter name: startLine
   at System.Reflection.Emit.ILGenerator.MarkSequencePoint(ISymbolDocumentWriter document, Int32 startLine, Int32 startColumn, Int32 endLine, Int32 endColumn)
   at PascalABCCompiler.NETGenerator.ILConverter.MarkSequencePoint(ILGenerator ilg, ILocation Location)
   at PascalABCCompiler.NETGenerator.ILConverter.MarkSequencePoint(ILocation Location)
   at PascalABCCompiler.NETGenerator.ILConverter.ConvertStatement(IStatementNode value)
   at PascalABCCompiler.NETGenerator.ILConverter.visit(IStatementsListNode value)
   at PascalABCCompiler.NETGenerator.ILConverter.ConvertBody(IStatementNode body)
   at PascalABCCompiler.NETGenerator.ILConverter.visit(ICommonMethodNode value)
   at PascalABCCompiler.NETGenerator.ILConverter.visit(ICommonTypeNode value)
   at PascalABCCompiler.NETGenerator.ILConverter.ConvertTypeImplementations(ICommonTypeNode[] types)
   at PascalABCCompiler.NETGenerator.ILConverter.ConvertFromTree(IProgramNode p, String TargetFileName, String SourceFileName, CompilerOptions options, String[] ResourceFiles)
   at PascalABCCompiler.Compiler.Compile() System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
Parameter name: startLine
   at System.Reflection.Emit.ILGenerator.MarkSequencePoint(ISymbolDocumentWriter document, Int32 startLine, Int32 startColumn, Int32 endLine, Int32 endColumn)
   at PascalABCCompiler.NETGenerator.ILConverter.MarkSequencePoint(ILGenerator ilg, ILocation Location)
   at PascalABCCompiler.NETGenerator.ILConverter.MarkSequencePoint(ILocation Location)
   at PascalABCCompiler.NETGenerator.ILConverter.ConvertStatement(IStatementNode value)
   at PascalABCCompiler.NETGenerator.ILConverter.visit(IStatementsListNode value)
   at PascalABCCompiler.NETGenerator.ILConverter.ConvertBody(IStatementNode body)
   at PascalABCCompiler.NETGenerator.ILConverter.visit(ICommonMethodNode value)
   at PascalABCCompiler.NETGenerator.ILConverter.visit(ICommonTypeNode value)
   at PascalABCCompiler.NETGenerator.ILConverter.ConvertTypeImplementations(ICommonTypeNode[] types)
   at PascalABCCompiler.NETGenerator.ILConverter.ConvertFromTree(IProgramNode p, String TargetFileName, String SourceFileName, CompilerOptions options, String[] ResourceFiles)
   at PascalABCCompiler.Compiler.Compile()'

Да, знаю. Попробуйте сейчас.

А это нормально, что подобный код не компилируется?

## var a:= 'strok12345';
(a[1:6], a[6:11]):= (a[6:11], a[1:6]);

Приходится использовать методы с буферами, типо такого

## var a:= 'strok12345';
var buf:= a[1:6];
a[1:6]:= a[6:11];
a[6:11]:= buf;

Ненормально. Пишите Issue на Github

3 лайка

У нас скоро будет обмен частями массива, а потом и фрагменты матриц менять местами сможем? Класс! Вот только интересно, будет ли работать при частичном или полном перекрытии областей?