the actual AST transform