View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000768 | Wishes | Macro | public | 2009-03-04 08:36 | 2009-03-06 10:34 |
Reporter | JohnDoe | Assigned To | vskirdin | ||
Priority | normal | Severity | feature | Reproducibility | N/A |
Status | closed | Resolution | fixed | ||
Product Version | 1.75 | ||||
Fixed in Version | 1.75 | ||||
Summary | 0000768: Расширение параметров макрофункции eval() для проверки корректности макропоследовательности | ||||
Description | Сказано: >N=eval(S) >Функция возвращает 0 в случае успешной компиляции последовательности S. (1) Чтобы проверить корректность S достаточно посмотреть на N Но хотелось бы иметь возможность проверить корректность не выполняя саму S. Для этого можно было бы довавить в функцию опциональный параметр: N=eval(S[,T]) Если T=0x00000001, то макропоследовательность заданная строкой S не исполняется, а только проверяется на корректность. (2) Что собственно означает N? Номер символа на котором компилятор споткнулся? | ||||
Tags | No tags attached. | ||||
Build | 2539 | ||||
|
> Что собственно означает N? это некий счетчик ошибок (см. syntax.cpp::_macro_nErr) |
|
кстати, да, можно добавить параметр. причем безболезненно. сделаю |
|
вообще-то это вроде и сейчас можно сделать добавлением $if 0. не? |
|
не, eval в онлайне компилирует - ей строка передается, а движок строки не парсит |
|
Вообще это мысль $If(eval("$If(0) "+%m+" $Else $End")>0) msgbox("Error in macro",%m) $End |
|
> Вообще это мысль закрываем тему? ;-) |
|
(1) Можно и закрыть (добавив про $If(0) в писание). (2) >> Что собственно означает N? > это некий счетчик ошибок (см. syntax.cpp::_macro_nErr) А нельзя ли возвращать номер символа, на котором встретилась первая ошибка? |
|
> А нельзя ли возвращать номер символа, на котором встретилась первая ошибка? А смысл? Для многострочных (макросы можно хранить в REG_MULTISZ!) в какой строке ОНО произошло? На счет проверки и диагностики. Сейчас есть неопубликованный АПИ. MCMD_CHECKMACRO возвращает 3 строки: 1. из lng от MMacroPErrUnrecognized_keyword до MMacroPErrExpr_Expected 2. часть макропоследовательности (кусок, вокруг ошибки) 3. символ '^' указывающий на "батву", обнаруженную компилятором Неопубликованно оно потому, что считаю такую реализацию кривой и сильно завязанной на текущий формат макроязыка и не универсальной (была сделана для отладки). |
|
>А смысл? Учитывая REG_MULTISZ выходит что смысла нет. Но "некий счетчик ошибок" несёт смысла ещё меньше... Насчёт кривизны АПИ судить не берусь (квалификации нет). Но какое-то пусть и кривенькое средство отладки хотелось бы. Что если eval() научить возвращать строку 1+2+3? |
|
>> Что собственно означает N? >это некий счетчик ошибок (см. syntax.cpp::_macro_nErr) наврал я... ;-) N - это код ошибки enum errParseCode { err_Success, err_Unrecognized_keyword, err_Unrecognized_function, err_Not_expected_ELSE, err_Not_expected_END, err_Unexpected_EOS, err_Expected, err_Bad_Hex_Control_Char, err_Bad_Control_Char, err_Var_Expected, err_Expr_Expected, }; (надо в писание дописать...) |
|
2.00 = 811 1.75 = 2537 |
|
2537 macro:post msgbox(eval("msgbox(1)",1)) не исполняется macro:post msgbox(eval("msgbox(1)")) в коммандную строку вставляется 0 |
|
блин... забыл в одном месте прописать.... будет в 2539 |
|
Можно добавить констант. Но это смотря как переведут http://api.farmanager.com/en/macro/macrocmd/functions.html варианты: REGEDIT4 [HKEY_CURRENT_USER\Software\Far\KeyMacros\Consts] "EVAL_EXECUTE"=dword:00000000 "EVAL_RUN"=dword:00000000 "EVAL_PLAY"=dword:00000000 "EVAL_TEST"=dword:00000001 "EVAL_CHECK"=dword:00000001 |
|
все пять? А коды возврата? (хотя, нужны ли они) |
|
:-) Не, только 2. Но пока не перевели писание непонятно как точнее назвать константы. А коды возврата можно было бы в стиле EVAL_err_Unrecognized_keyword, но только вряд ли кто будет интенсивно пользоваться. А если просто код возврата переводить в текст, то проще без констант. $If(%n!=0) $If(%n==1) %err="err_Unrecognized_keyword"; $End $If(%n==2) %err="err_Unrecognized_function"; $End $If(%n==3) %err="err_Not_expected_ELSE"; $End $If(%n==4) %err="err_Not_expected_END"; $End $If(%n==5) %err="err_Unexpected_EOS"; $End $If(%n==6) %err="err_Expected"; $End $If(%n==7) %err="err_Bad_Hex_Control_Char"; $End $If(%n==8) %err="err_Bad_Control_Char"; $End $If(%n==9) %err="err_Var_Expected"; $End $If(%n==10) %err="err_Expr_Expected"; $End $End |
Date Modified | Username | Field | Change |
---|---|---|---|
2009-03-04 08:36 | JohnDoe | New Issue | |
2009-03-04 08:36 | JohnDoe | Status | new => assigned |
2009-03-04 08:36 | JohnDoe | Assigned To | => vskirdin |
2009-03-04 10:55 | vskirdin | Note Added: 0002684 | |
2009-03-04 10:57 | vskirdin | Note Added: 0002685 | |
2009-03-04 11:29 | zg | Note Added: 0002686 | |
2009-03-04 11:35 | vskirdin | Note Added: 0002687 | |
2009-03-04 11:49 | JohnDoe | Note Added: 0002688 | |
2009-03-04 12:56 | vskirdin | Note Added: 0002689 | |
2009-03-04 13:03 | JohnDoe | Note Added: 0002690 | |
2009-03-04 13:08 | JohnDoe | Note Edited: 0002690 | |
2009-03-04 13:19 | vskirdin | Note Added: 0002691 | |
2009-03-04 14:46 | JohnDoe | Note Added: 0002692 | |
2009-03-04 14:47 | vskirdin | Note Added: 0002693 | |
2009-03-04 15:30 | vskirdin | Note Added: 0002694 | |
2009-03-04 15:30 | vskirdin | Status | assigned => feedback |
2009-03-05 08:45 | JohnDoe | Note Added: 0002705 | |
2009-03-05 09:04 | vskirdin | Note Added: 0002706 | |
2009-03-05 09:58 | JohnDoe | Note Edited: 0002688 | |
2009-03-05 12:01 | JohnDoe | Note Added: 0002712 | |
2009-03-05 12:06 | vskirdin | Note Added: 0002714 | |
2009-03-05 12:17 | JohnDoe | Note Added: 0002716 | |
2009-03-06 08:27 | JohnDoe | Status | feedback => resolved |
2009-03-06 08:27 | JohnDoe | Resolution | open => fixed |
2009-03-06 10:34 | vskirdin | Build | => 2539 |
2009-03-06 10:34 | vskirdin | Status | resolved => closed |
2009-03-06 10:34 | vskirdin | Fixed in Version | => 1.75 |
2009-09-08 18:11 | alexy | Relationship added | has duplicate 0001046 |
2009-09-08 19:02 | vskirdin | Relationship deleted | has duplicate 0001046 |