Example #1
0
 expr visit_macro(expr const & e) {
     buffer<expr> new_args;
     for (unsigned i = 0; i < macro_num_args(e); i++)
         new_args.push_back(visit(macro_arg(e, i)));
     auto def = macro_def(e);
     expr r = update_macro(e, new_args.size(), new_args.data());
     if (def.trust_level() >= m_trust_lvl) {
         if (optional<expr> new_r = m_tc.expand_macro(r)) {
             return *new_r;
         } else {
             throw_generic_exception("failed to expand macro", e);
         }
     } else {
         return r;
     }
 }
Example #2
0
 virtual expr visit_macro(expr const & e) override {
     buffer<expr> new_args;
     for (unsigned i = 0; i < macro_num_args(e); i++)
         new_args.push_back(visit(macro_arg(e, i)));
     auto def = macro_def(e);
     expr r = update_macro(e, new_args.size(), new_args.data());
     if (!m_trust_lvl || def.trust_level() >= *m_trust_lvl) {
         if (optional<expr> new_r = m_ctx.expand_macro(r)) {
             return visit(*new_r);
         } else {
             throw generic_exception(e, "failed to expand macro");
         }
     } else {
         return r;
     }
 }