Оператор макроподстановки


Синтаксис

^ СтроковаяПеременная

^ ( СтроковоеВыражение )

Описание

Оператор макроподстановки допустим в исполняемом коде. В определениях модуля или процедуры запрещен предупреждением MacroInDefinition.

Оператор раскрывает макроподстановку, т.е. исполняет текст, полученный из переменной или выражения немассивового строкового типа. Текст макроподстановки - произвольная часть оператора или последовательности операторов. Текст макроподстановки не может содержать определения (типов, констант, переменных или процедур), поскольку таковые не допускаются в исполняемом коде. В режиме игнорирования (игнорируемые части выражений, игнорируемые ветки оператора IF, и т.д.) макроподстановка не раскрывается, интерпретатор лишь формально проверяет синтаксис оператора.

Начиная с v14.268.150 поддерживаются вложенные макроподстановки, если раскрытие происходит не в одном и том же вызове процедуры. В пределах одной процедуры вложенные макроподстановки запрещены исключением 886 и предупреждением NestedMacros.

Пример 1. Запрещенная макроподстановка в определениях модуля

CONST
 S1 = "S2 = 'так нельзя'";
 ^S1;

BEGIN
END.

Пример 2. Запрещенная вложенная макроподстановка в пределах одной процедуры

CONST
 C = "и так нельзя";
VAR
 S: STRING[];
BEGIN
 S := "S := ^C;";
 ^S;
END.

Пример 3. Разрешенная вложенная макроподстановка

PROCEDURE P2();
BEGIN
 ;
END;

PROCEDURE P1();
 VAR
  S: STRING[];
BEGIN
 S := "P2()";
 ^S;
END;

VAR
 S: STRING[];
BEGIN
 S := "P1(); P1();";
 ^S;
END.