D was already doing it in 2010 thereabouts, an then there is the whole reader macros in Lisp and Scheme.

And Nim, which has multiple levels of metaprogramming.