Victor_VG
Tracker Mod | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Применил предложенный DrKnS патч для RESearch: ExitFARW -> ExitFAR_ устраняющий проблему "После вызова RESearh Far b5464+ падает при выходе по F10" - больше не падает. Подробности на форуме Far - в Глюки и баги и теме плагина. Я просто в хекс редакторе пробежался по ANSI ExitFAR и заменил символ W (0х57) на _ (0x5F). Протестил, но в коммит ещё не попало, будет. По скрипту Editor_MouseSelect.lua (c) SumSU - при просмотре кода скрипта от 14.11.2018 обратил внимание на строку 84: Код: local cd = editor.GetColor(nil,Line,0) | в функции MouseToText() скрипта: Код: local function MouseToText() -- Функция пересчёта экранных координат мышки в координаты текста. local cd = editor.GetColor(nil,Line,0) local d = cd.StartPos<0 and 1-cd.StartPos or 0 --!!! Суперкостыль local X0,Y0 = Editor.Pos(0,5)-d,Editor.Pos(0,4) local Yc= Mouse.Y==TitleBar-1 and Y0 or Mouse.Y>=Far.Height-1-KeyBar and Y0+Far.Height-1-TitleBar-KeyBar or Y0+Mouse.Y-TitleBar local Xc= Mouse.X==0 and X0 or Mouse.X>=Far.Width-1-ScrollBar and X0+Far.Width-1-ScrollBar or X0+Mouse.X return Xc,Yc,X0,Y0 -- Координаты курсора и координаты экрана. end | стоит не инициализированная переменная Line на которую ругается и LuaCheck W113, 84:34. Переменная по идее отдаёт в editor.GetColor(EditorId, StringNumber, ColorItem) номер текущей строки, а так как её значение "неопредёлённость", то и все остальные вычисления не действительны, в итоге падаем. Потому я сильно думаю, что в строке 84 подразумевался такой код в строке 84: local cd = editor.GetColor(nil,Editor.CurLine,0) тогда неопределённость испаряется, а в оригинале смысл "суперкостыля" с ходу не понятен ибо если в строке 84 дёргается editor.GetColor(nil,<неопределённость>,0) то зачем "костыль" в строке 85 если мы уже на 84-й упали? Ну а чуть выше уже по мелочи W113 69:14 - local SimSU= SimSU or {} - варнинг опять на неопределённость, но это место падения не порождает, хотя по совести переменные надо инитить как минимум 0х0 - защита от падения при счёте. Например так (PL/1): Dcl A char(30) "" Dcl B int(16) 0 можно и так: Dcl A char(30) Dcl B int(16) и это допустимо, но в момент старта программы в памяти A и B будет произвольный мусор оставшийся от ранее считавшихся задач, а если задать начальные значения то такая неопределённость исчезает.
---------- Жив курилка! (Р. Ролан, "Кола Брюньон") Xeon E5 2697v2/C602/128 GB PC3-14900L/GTX 1660 Ti, Xeon E5-2697v2/C602J/128 Gb PC3-14900L/GTX 1660 Ti |
| Всего записей: 34431 | Зарегистр. 31-07-2002 | Отправлено: 00:39 07-09-2019 | Исправлено: Victor_VG, 02:41 07-09-2019 |
|