Task #4656
Updated by Alexander Kamkin almost 11 years ago
Цель - возможность выделения общей функциональность в операции. Предположим, требуется выделить проверку условий возникновения исключений в отдельную операцию и вызывать ее из action-блоков инструкций. <pre> op ExceptionChecker(flags: Flags) // возможны параметры action = { ... } // синтаксис не нужен </pre> Сейчас для вызова одной операции из другой у родительской операции нужно заводить параметр. Соответственно, параметр нужно указывать в тестовом шаблоне (что уже кривовато); есть шанс, что он будет указан некорректно (это никуда не годится). Другой вариант - создать инстанс требуемой операции и осуществить вызов. Думаю, правильнее всего инстансы описывать в форме атрибутов (грамматика меняется локально + запрет на динамическое порождение инстансов). <pre> op ADD(src1: REG, src2: REG, dst: REG) syntax = format("slozhenie %s %s %s", src1.syntax, src2.syntax, dst.syntax) checker = ExceptionChecker(0xDEAD) // при создании инстанса операции ADD будет автоматически порождаться инстанс дочерней операции action = { ExceptionChecker(0xDEAD).action; checker.action; ... } </pre> Режимы с возвращаемым значением можно использовать в выражениях: <pre> mode TypeOf(x: IMMEDIATE) = x<13..12> </pre> <pre> if(TypeOf(x) == X) ... endif </pre> P.S. Все сказанное справедливо и для режимов.