Пытаюсь сделать макрос наподобие forindex
отсюдаАвтор(ы): Чистяков Владислав Юрьевич
Дата: 18.08.2011
Во второй части статьи о макросах Nemerle речь пойдет о макросах уровня выражения, о макросах, изменяющих синтаксис языка, а также о контексте компиляции, доступном в макросах, и тех возможностях, которые он предоставляет (типизации выражений, получении доступа к описанию типов проекта, информации о методах и т.п.).
.
macro RangePattern(body)
syntax ("cond", "(", body, ")") {
SandboxImpl.DoTransform(Macros.ImplicitCTX(), body)
}
module SandboxImpl {
public DoTransform(typer: Typer, body: PExpr) : PExpr {
Macros.DefineCTX(typer);
if (body is <[ $minExpr < $val < $maxExpr ]>)
{
<[ $val > $minExpr && $val < $maxExpr ]>
}
else
{
Message.Error(body.Location, $"Syntax error '$body'");
<[ () ]>
}
}
}
Тест:
module Test {
x(): void {
def y =
def foo = 45;
def x = cond (1 < foo < 4);
}
}
}
Выдаёт ошибку "Error: Unbound name `foo`". Видимо, $val надо как-то преобразовать?