OberonCore
https://forum.oberoncore.ru/

проверить по имени, что процедура без параметров?
https://forum.oberoncore.ru/viewtopic.php?f=2&t=5602
Страница 1 из 1

Автор:  Info21 [ Пятница, 15 Январь, 2016 21:20 ]
Заголовок сообщения:  проверить по имени, что процедура без параметров?

Коллеги, с окончательно Наступившим!

Вопрос:

Есть полное имя процедуры (Модуль.Процедура) в виде цепочки литер.

Как убедиться, что это процедура без параметров?

Заранее спасибо.

Автор:  Пётр Кушнир [ Пятница, 15 Январь, 2016 22:03 ]
Заголовок сообщения:  Re: проверить по имени, что процедура без параметров?

Из модуля StdInterpreter можно вычленить кусок, отвечающий за анализ метаинформации о процедуре:
Код:
PROCEDURE CallProc (IN mod, proc: ARRAY OF CHAR);
         VAR i, t: Meta.Item; ok: BOOLEAN;
      BEGIN
         ok := FALSE;
         Meta.Lookup(mod, i);
         IF i.obj = Meta.modObj THEN
            i.Lookup(proc, i);
            IF i.obj = Meta.procObj THEN
               i.GetReturnType(t);
               IF (t.typ = 0) & (i.NumParam() = numPar) THEN
                  i.ParamCallVal(par, t, ok)
               ELSE ok := FALSE
               END;
               IF ~ok THEN
                  Error(incompParList, "#System:IncompatibleParList", mod, proc)
               END
            ELSE
               Error(Kernel.commNotFound, "#System:CommandNotFoundIn", proc, mod)
            END
         ELSE
            ShowLoaderResult(mod)
         END
      END CallProc;


numPar это глобальная переменная отвечающая за хранение результата синтаксического разбора строчки с командой (они там ищут скобки, константы и точки с запятой)

Автор:  Info21 [ Пятница, 15 Январь, 2016 22:13 ]
Заголовок сообщения:  Re: проверить по имени, что процедура без параметров?

Огромное спасибо!

Стормозил насчёт интерпретатора.

Автор:  Info21 [ Пятница, 15 Январь, 2016 22:19 ]
Заголовок сообщения:  Re: проверить по имени, что процедура без параметров?

Стоп. Это 1.6?

Со школьниками я все еще юзаю 1.5, там такого нет.
Что ли пора переходить.

Автор:  Пётр Кушнир [ Пятница, 15 Январь, 2016 23:20 ]
Заголовок сообщения:  Re: проверить по имени, что процедура без параметров?

Исходник StdInterpreter имеет отметки об изменениях от 2007-го года, не уверен, что тогда был 1.6.

Автор:  Пётр Кушнир [ Пятница, 15 Январь, 2016 23:21 ]
Заголовок сообщения:  Re: проверить по имени, что процедура без параметров?

В архиве школьной сборки такой файл имеется.

Автор:  Пётр Кушнир [ Суббота, 16 Январь, 2016 01:20 ]
Заголовок сообщения:  Re: проверить по имени, что процедура без параметров?

Вообще, StdInterpreter это скрытая реализация Dialog.Call, если я правильно помню.

Автор:  Иван Денисов [ Суббота, 16 Январь, 2016 06:14 ]
Заголовок сообщения:  Re: проверить по имени, что процедура без параметров?

Info21 писал(а):
Стоп. Это 1.6?

Со школьниками я все еще юзаю 1.5, там такого нет.
Что ли пора переходить.

Фёдор Васильевич, поглядите последнюю сборку Центра:
viewtopic.php?f=127&t=5600#p94446
Серьезных изменений до финального релиза не предвидится. Все возможности по локализации и юникодизации применены.
Если вы заметите в процессе перехода какой-то баг или потребуется что-то изменить, сейчас на этапе альфа версии возможно добавить что-то важное, а не только исправления ошибок.

Автор:  Info21 [ Понедельник, 18 Январь, 2016 00:20 ]
Заголовок сообщения:  Re: проверить по имени, что процедура без параметров?

Пётр Кушнир писал(а):
В архиве школьной сборки такой файл имеется.
Файл-то имеется, да в нём нет, например, GetReturnType.

Всё-таки 1.6 и старше.

Автор:  Info21 [ Понедельник, 18 Январь, 2016 00:22 ]
Заголовок сообщения:  Re: проверить по имени, что процедура без параметров?

Иван Денисов писал(а):
последнюю сборку Центра:
viewtopic.php?f=127&t=5600#p94446
Серьезных изменений до финального релиза не предвидится. Все возможности по локализации и юникодизации применены.
Если вы заметите в процессе перехода какой-то баг или потребуется что-то изменить, сейчас на этапе альфа версии возможно добавить что-то важное, а не только исправления ошибок.
Спасибо.
Вы подольше держите её альфой, а то у меня быстро не получится :)

Автор:  Илья Ермаков [ Вторник, 19 Январь, 2016 15:54 ]
Заголовок сообщения:  Re: проверить по имени, что процедура без параметров?

Info21 писал(а):
Есть полное имя процедуры (Модуль.Процедура) в виде цепочки литер.

Как убедиться, что это процедура без параметров?



Код:
PROCEDURE CheckProcWithoutPar (IN name: ARRAY OF CHAR): BOOLEAN;
   VAR val: RECORD (Meta.Value) proc: PROCEDURE END;
      it : Meta.Item;
      ok: BOOLEAN;
BEGIN
   ok := FALSE;
   Meta.LookupPath(name, it);
   IF it.Valid() THEN
      it.GetVal(val, ok)
   END;
RETURN ok
END CheckProcWithoutPar;

Автор:  Info21 [ Среда, 20 Январь, 2016 01:49 ]
Заголовок сообщения:  Re: проверить по имени, что процедура без параметров?

Большое спасибо, будем проверять.

Автор:  Иван Денисов [ Среда, 27 Январь, 2016 19:19 ]
Заголовок сообщения:  Re: проверить по имени, что процедура без параметров?

Info21 писал(а):
Вы подольше держите её альфой, а то у меня быстро не получится :)

Думаю, что не больше пары недель в альфа версии осталось.

Автор:  Info21 [ Четверг, 28 Январь, 2016 07:38 ]
Заголовок сообщения:  Re: проверить по имени, что процедура без параметров?

Илья Ермаков писал(а):
Код:
PROCEDURE CheckProcWithoutPar (IN name: ARRAY OF CHAR): BOOLEAN;
...

Большое спасибо, работает, и с другими сигнатурами тоже.

Автор:  Info21 [ Четверг, 28 Январь, 2016 07:41 ]
Заголовок сообщения:  Re: проверить по имени, что процедура без параметров?

Иван Денисов писал(а):
Info21 писал(а):
Вы подольше держите её альфой, а то у меня быстро не получится :)

Думаю, что не больше пары недель в альфа версии осталось.

Значит, такая судьба.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/