metaprogramming blocks