Implement Macro By Example.
This commit is contained in:
parent
4a6ccf3b0f
commit
e18d70fe12
7 changed files with 667 additions and 235 deletions
|
|
@ -1,5 +1,5 @@
|
|||
// xfail-stage0
|
||||
//error-pattern:expanded as an identifier
|
||||
//error-pattern:is an expr, expected an identifier
|
||||
fn main() {
|
||||
#macro([#mylambda(x, body), {fn f(int x) -> int {ret body}; f}]);
|
||||
|
||||
|
|
|
|||
9
src/test/run-pass/macro-by-example-1.rs
Normal file
9
src/test/run-pass/macro-by-example-1.rs
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
fn main() {
|
||||
#macro([#apply(f,[x,...]), f(x, ...)]);
|
||||
|
||||
fn add(int a, int b) -> int {
|
||||
ret a+b;
|
||||
}
|
||||
|
||||
assert(#apply(add, [1, 15]) == 16);
|
||||
}
|
||||
24
src/test/run-pass/macro-by-example-2.rs
Normal file
24
src/test/run-pass/macro-by-example-2.rs
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
fn main() {
|
||||
#macro([#zip_or_unzip([[x, ...], [y, ...]]), [[x, y], ...]],
|
||||
[#zip_or_unzip([[xx, yy], ...]), [[xx, ...], [yy, ...]]]);
|
||||
|
||||
|
||||
assert(#zip_or_unzip([[1,2,3,4],[5,6,7,8]]) == [[1,5],[2,6],[3,7],[4,8]]);
|
||||
assert(#zip_or_unzip([[1,5],[2,6],[3,7],[4,8]]) == [[1,2,3,4],[5,6,7,8]]);
|
||||
|
||||
|
||||
#macro([#nested([[[x, ...], ...], [[y, ...], ...]]),
|
||||
[[[x, y], ...], ...]]);
|
||||
assert(#nested([[[1,2,3,4,5], [7,8,9,10,11,12]],
|
||||
[[-1,-2,-3,-4,-5], [-7,-8,-9,-10,-11,-12]]])
|
||||
==
|
||||
[[[1, -1], [2, -2], [3, -3], [4, -4], [5, -5]],
|
||||
[[7, -7], [8, -8], [9, -9], [10, -10], [11, -11], [12, -12]]]);
|
||||
|
||||
#macro([#dup([y, [x, ...]]), [[y, x], ...]]);
|
||||
|
||||
assert(#dup([1,[1,2,3,4]]) == [[1,1], [1,2], [1,3], [1,4]]);
|
||||
|
||||
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue