Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Сб апр 20, 2024 06:55

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: CATCH & SPF
СообщениеДобавлено: Сб ноя 11, 2006 02:59 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Собственно вопрос вот в чем, как можно перекрыть оригинальный кадр исключения в СПФ, чтобы при ошибке в любом месте программы попасть на необходимый обработчик, то есть не так:

Код:
 
     ...  ['] someting CATCH IF err action THEN ... 


а как то так:
Код:
   VECT err_code
   ['] err_code DEFCATCH


чтобы любая ошибка приводила к выполнению вектора err_code


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб ноя 11, 2006 07:22 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Забыл сказать, нужно, чтобы работало во время интерпретации текста, точнее его частей. Что-то типа:

CatchMoment

...
someting
...

EndMoment

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб ноя 11, 2006 13:17 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Лично я в проблему не въехал.
Чем тебя не устраивает CATCH ?
Под любой ошибкой я понимаю выполнение команды THROW при не 0ом
значении на стеке.
Ну подмени его с помощью REPLACE-WORD

REQUIRE REPLACE-WORD lib\ext\patch.f

но только, если очень хочется.

С CatchMoment someting EndMoment вобще ничего не понял.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс ноя 12, 2006 18:52 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
проблема в том, чтобы не прерывая поток интерпретации можно было в случае ошибки получать управление на нужный обработчик. При этом не вызывая никаких дополнительных парсеров.
Catch тем и не устраивает, что нужно ему на вход подать слово которое будет исполняться, а мне нужно Ctach для уже исполняющегося слова.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс ноя 12, 2006 20:12 
Идея такова:

: CatchMoment
LAMBDA{
INTERPRET
BEGIN REFILL WHILE INTERPET REPEAT
} CATCH DUP IF DUP -2006 = IF DROP EXIT THEN >R err_code R> THEN THROW
;
: EndMoment -2006 THROW ( стек должен быть той же глубины, что и перед CatchMoment ) ;

Это будет работать только при немедленном исполнении из исходного текста (интерпретации), — по сути, CatchMoment ... EndMoment выполняет роль некой разметки.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс ноя 12, 2006 20:20 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
идея как раз в том, чтобы вот этого:
rvm писал(а):
BEGIN REFILL WHILE INTERPET REPEAT

не делать.

У меня сейчас появилась идея сделать так:

: catchMoment R> CreateExceptionFrame >R ;

: EndMoment R> RemoveExceptionFrame >R ;

буду пробовать


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс ноя 12, 2006 20:21 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
mOleg писал(а):
Catch тем и не устраивает, что нужно ему на вход подать слово которое будет исполняться, а мне нужно Ctach для уже исполняющегося слова.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс ноя 12, 2006 20:25 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Хищник писал(а):
И такая задача возникает достаточно часто. Я уже писал, что решается путем введения векторизованных обработчиков исключений. Его же можно использовать для организации CATCH.


Логично, но вопрос в том, что сделать с СПФом сейчас 8)
Не влазя по уши в src - дело противное и неблагодарное


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс ноя 12, 2006 23:01 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
mOleg писал(а):
Логично, но вопрос в том, что сделать с СПФом сейчас Cool
Не влазя по уши в src - дело противное и неблагодарное

Если кто-то хочет искупаться, рано или поздно надо будет сказать "уххх!" и прыгнуть в воду. В воде будет теплее :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн ноя 13, 2006 13:09 
mOleg писал(а):
У меня сейчас появилась идея сделать так:

: catchMoment R> CreateExceptionFrame >R ;

: EndMoment R> RemoveExceptionFrame >R ;

буду пробовать


Интересно, но хак это :) И оно ограниченно словом, непосредственно вызывающим catchMoment (и EndMoment, что обязательно). Если это будет INTERPRET (при нулевом STATE) и EndMoment будет в другой строке — то не сработает.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 14, 2006 19:42 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
rvm писал(а):
Интересно, но хак это И оно ограниченно словом, непосредственно вызывающим catchMoment (и EndMoment, что обязательно). Если это будет INTERPRET (при нулевом STATE) и EndMoment будет в другой строке — то не сработает.

Увы, это так. А копать глубже опасно.
Так что раздумья продолжаются 8(


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 14, 2006 20:08 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Самое, кстати противное в том, что кадр исключения лежит на стеке возвратов, и простым образом перекрыть его опять же не получается.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB