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


#21

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


#22

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


#23

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


#24

При этом, разумеется, ломается компиляция использующих этот модуль программ. Падает, как ни странно, в строке 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)


#25

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


#26

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


#27

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


#28

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


#29

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


#30

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


#31

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

Держите.


#32

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

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

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


#33

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


#34

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

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


#35

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


#36

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

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


#37

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

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


#38

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


#39

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


#40

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