Project

General

Profile

Task #4656

[translator] Возможность инстанцирования операций в других операциях

Added by Alexander Kamkin over 6 years ago. Updated over 5 years ago.

Status:
Closed
Priority:
High
Assignee:
Andrei Tatarnikov
Category:
-
Target version:
Start date:
12/26/2013
Due date:
05/31/2014
% Done:

100%

Estimated time:
Detected in build:
svn
Published in build:
141230

Description

Цель - возможность выделения общей функциональность в операции.

Предположим, требуется выделить проверку условий возникновения исключений в отдельную операцию и вызывать ее из action-блоков инструкций.

op ExceptionChecker(flags: Flags) // возможны параметры
    action = { ... }              // синтаксис не нужен

Сейчас для вызова одной операции из другой у родительской операции нужно заводить параметр. Соответственно, параметр нужно указывать в тестовом шаблоне (что уже кривовато); есть шанс, что он будет указан некорректно (это никуда не годится).

Другой вариант - создать инстанс требуемой операции и осуществить вызов.

op ADD(src1: REG, src2: REG, dst: REG)
    syntax  = format("slozhenie %s %s %s", src1.syntax, src2.syntax, dst.syntax)
    action  =
    {
        ExceptionChecker(0xDEAD).action;
        checker.action;
        ...
    }

Режимы с возвращаемым значением можно использовать в выражениях:

mode TypeOf(x: IMMEDIATE) = x<13..12>
if(TypeOf(x) == X)
    ...
endif

History

#1

Updated by Alexander Kamkin over 6 years ago

  • Description updated (diff)
#2

Updated by Alexander Kamkin over 6 years ago

  • Due date set to 05/31/2014
  • Target version set to 2.1
#3

Updated by Andrei Tatarnikov over 5 years ago

  • Status changed from New to Open
  • Priority changed from Normal to High
#4

Updated by Andrei Tatarnikov over 5 years ago

  • % Done changed from 0 to 20

r2923, r2928 - support in grammar (syntactic structures are recognized, but no useful action is performed yet).

#5

Updated by Andrei Tatarnikov over 5 years ago

  • % Done changed from 20 to 80

First workable implementation: r2940, r2941, r2942

#6

Updated by Andrei Tatarnikov over 5 years ago

TODO: implement checks to make sure that arguments match the signature of the MODE/OP being created - see Bug #5542.

#7

Updated by Andrei Tatarnikov over 5 years ago

  • Status changed from Open to Resolved
  • % Done changed from 80 to 100
#8

Updated by Andrei Tatarnikov over 5 years ago

  • Status changed from Resolved to Closed
  • Published in build set to 141230

Also available in: Atom PDF