^ СтроковаяПеременная ^ ( СтроковоеВыражение ) |
Оператор макроподстановки допустим в исполняемом коде. В определениях модуля или процедуры запрещен предупреждением MacroInDefinition.
Оператор раскрывает макроподстановку, т.е. исполняет текст, полученный из переменной или выражения немассивового строкового типа. Текст макроподстановки - произвольная часть оператора или последовательности операторов. Текст макроподстановки не может содержать определения (типов, констант, переменных или процедур), поскольку таковые не допускаются в исполняемом коде. В режиме игнорирования (игнорируемые части выражений, игнорируемые ветки оператора IF, и т.д.) макроподстановка не раскрывается, интерпретатор лишь формально проверяет синтаксис оператора.
Начиная с v14.268.150 поддерживаются вложенные макроподстановки, если раскрытие происходит не в одном и том же вызове процедуры. В пределах одной процедуры вложенные макроподстановки запрещены исключением 886 и предупреждением NestedMacros.
CONST S1 = "S2 = 'так нельзя'"; ^S1; BEGIN END.
CONST C = "и так нельзя"; VAR S: STRING[]; BEGIN S := "S := ^C;"; ^S; END.
PROCEDURE P2(); BEGIN ; END; PROCEDURE P1(); VAR S: STRING[]; BEGIN S := "P2()"; ^S; END; VAR S: STRING[]; BEGIN S := "P1(); P1();"; ^S; END.