Немного доработал сплайс ..$. Теперь:
1. Сплайс
..$ позволяет передать в него IEnumerable[PExpr], а не только list[PExpr].
2. Сплайс
..$ можно использовать внутри последовательностей кода, а не только в скобках.
Все вышеперечисленное работает только для генерации кода (недопустимо использовать в паттернах).
Пример:
// Файл: Issue-git-480-macro.n
// REFERENCE: Nemerle.Compiler
public macro M()
{
def args1 = [<[ 3 ]>, <[ 4 ]>];
def args2 = [<[ 6 ]>, <[ 7 ]>];
def q = array[<[ def a = x + 1; ]>, <[ def b = a + x; ]>];
def x = <[ { def c = b * 2; def d = c + a + x; } ]>;
<[
def tuple = (1, 2, ..$args1, 5, ..$args2);
DebugPrint(tuple);
def x = 2;
..$q;
DebugPrint(a);
..$x;
DebugPrint(b);
DebugPrint(c);
DebugPrint(d);
d
]>
}
Тест:
// Файл: Issue-git-480.n
//REFERENCE: Issue-git-480-macro
System.Console.WriteLine(M());
/*
BEGIN-OUTPUT
tuple ==> (1, 2, 3, 4, 5, 6, 7)
a ==> 3
b ==> 5
c ==> 10
d ==> 15
15
END-OUTPUT
*/
Дополнительные примеры по ссылкам.