NETSquirrel - вопросы и ответы

Тогда это не подходит.

Тогда какие есть варианты (кроме отлова ошибка по привычной схеме)?

Думаю. Пока никаких

При этом, разумеется, ломается компиляция использующих этот модуль программ. Падает, как ни странно, в строке 1944. Добавил 4 строки в модуле (псевдонимы типов) и на 4 строки ниже ошибка сползла. Метод:

    // Строка ниже вызывает сбой при компиляции.
    public static function ReadBoolTuple4(handler: ExceptionHandler; promptFormat: string := __FormatStringsHelper.WithOneIndex): ValueTuple<boolean, boolean, boolean, boolean>;
    begin
      var item1, item2, item3, item4: boolean;
      
      try
        item1 := BaseTypesUtils.ReadBool(string.Format(promptFormat, 0));
        item2 := BaseTypesUtils.ReadBool(string.Format(promptFormat, 1));
        item3 := BaseTypesUtils.ReadBool(string.Format(promptFormat, 2));
        item4 := BaseTypesUtils.ReadBool(string.Format(promptFormat, 3));
      
      except
        on e: Exception do
        begin
          if handler = nil then
            raise;
          handler(e);
        end;
      end;
      
      Result := ValueTupleOf(item1, item2, item3, item4);
    end;

Вспомогательная функция.

function ValueTupleOf<T, T1, T2, T3>(item1: T; item2: T1; item3: T2; item4: T3) := new ValueTuple(item1, item2, item3, item4);

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

NETMouseForPascal.pas (136.3 KB) __Helpers.pas (1.1 KB) NETMouse for NET.dll (76 KB)

Да, увидел ошибку.

Задача осложняется и тем, что, как сейчас выяснилось, ошибка может возникнуть при первой компиляции модуля (сразу после его открытия). Чудеса творятся…

Увидел - увидел. Очень неприятная ошибка. Пока не пойму, из-за какой конструкции она возникает и в какой подсистеме.

А разве это не упрощает поиск минимального кода? И я так и не понял, почему вы этим всё ещё не занялись?

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

Желательно хотя бы чтобы была одна dll и один модуль

NETMouse for NET.dll (76 KB) NETMouseForPascal.pas (57.1 KB)

Держите.

Всё стало ещё интересней:

Новая пища для размышлений на тему чем же SliceSpan не понравился компилятору. :slight_smile:

__Helpers.pas (1.1 KB) NETMouseForPascalABC.pas (22.3 KB) NETMouse for NET.dll (76 KB)

В случае модуль и dll не воспроизводится. У вас есть?

__Helpers.pcu (3.7 KB) NETMouse for NET.dll (76.5 KB) NETMouseForPascal.pcu (174.6 KB)

Я как понял Вам готовый модуль был нужен?

Нет. Это я разберусь с 2-мя модулями. С одним модулем ошибка воспроизводится?

Да. Ниже подтверждение в виде скриншотов:

Компилятор дал сбой сразу после того, как я вставил код __Helpers в NETMouseForPascal.

А если вы работаете в чистой папке и там только один модуль и dll, - ошибка есть? Я также имею в виду, что вы сразу вошли.

Просто у меня на чистой папке не воспроизводится. А надо бы

У меня пока не воспроизвелось из папки, в которой ничего кроме модуля с .dll нет.

А попробуйте во всех модулях прописать {$savepcu false}

Ошибки нет с данной директивой.