require "utils" Visitor = {} function Visitor.new() self = {} self.args = {} self.locals = {} self.variables = {} setmetatable(self, Visitor) Visitor.__index = Visitor return self end Expr = {} function Expr.new(kind) self = {} self.kind = kind setmetatable(self, Expr) Expr.__index = Expr return self end function Visitor:visit_expr(expr) debug("Visiting Expr: " .. expr.kind) if expr.kind == "Binary" then tmp = expr.lhs expr.lhs = expr.rhs expr.rhs = tmp elseif expr.kind == "Ret" and expr.value then ret_expr = expr.value expr.value = Expr.new("Binary") expr.value.op = "*" expr.value.lhs = Expr.new("Lit") expr.value.lhs.value = 10 expr.value.rhs = ret_expr end return true end refactor:transform( function(transform_ctx) return transform_ctx:visit_fn_like(Visitor.new()) end ) refactor:save_crate() print("Finished change_ast_kinds.lua")