defmodule Mage do @moduledoc false def postwalk(ast, fun) do walker = fn ast -> result_ast = fun.(ast) if result_ast == ast do ast else case result_ast do {op, meta, args} -> {op, Keyword.put(meta, :__patch__, true), args} val -> val end end end Macro.postwalk(ast, walker) end def to_string(ast) do Mage.Code.to_string(ast) end def parse_string!(source) do Mage.Code.parse_string!(source) end end