From 2abca22e004bf5f3554f0d858f4fcd9e6ce57c19 Mon Sep 17 00:00:00 2001 From: Leonardo de Moura Date: Wed, 18 Sep 2019 17:15:22 -0700 Subject: [PATCH] fix(kernel/instantiate): compilation problem on Windows --- src/kernel/instantiate.cpp | 10 +++++----- src/util/nat.h | 2 ++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/kernel/instantiate.cpp b/src/kernel/instantiate.cpp index caaacf7244..0e64bfe0d5 100644 --- a/src/kernel/instantiate.cpp +++ b/src/kernel/instantiate.cpp @@ -59,11 +59,11 @@ extern "C" object * lean_expr_instantiate(object * a0, object * subst) { nat const & vidx = bvar_idx(m); if (vidx >= offset) { size_t h = offset + n; - if (h < offset /* overflow, h is bigger than any vidx */ || vidx < h) { + if (h < offset /* overflow, h is bigger than any vidx */ || (vidx.is_small() && vidx.get_small_value() < h)) { expr v(lean_array_get_core(subst, vidx.get_small_value() - offset), true); return some_expr(lift_loose_bvars(v, offset)); } else { - return some_expr(mk_bvar(vidx - nat(n))); + return some_expr(mk_bvar(vidx - nat::of_size_t(n))); } } } @@ -82,7 +82,7 @@ expr instantiate_rev(expr const & a, unsigned n, expr const * subst) { nat const & vidx = bvar_idx(m); if (vidx >= offset) { size_t h = offset + n; - if (h < offset /* overflow, h is bigger than any vidx */ || vidx < h) { + if (h < offset /* overflow, h is bigger than any vidx */ || (vidx.is_small() && vidx.get_small_value() < h)) { return some_expr(lift_loose_bvars(subst[n - (vidx.get_small_value() - offset) - 1], offset)); } else { return some_expr(mk_bvar(vidx - nat(n))); @@ -107,11 +107,11 @@ extern "C" object * lean_expr_instantiate_rev(object * a0, object * subst) { nat const & vidx = bvar_idx(m); if (vidx >= offset) { size_t h = offset + n; - if (h < offset /* overflow, h is bigger than any vidx */ || vidx < h) { + if (h < offset /* overflow, h is bigger than any vidx */ || (vidx.is_small() && vidx.get_small_value() < h)) { expr v(lean_array_get_core(subst, n - (vidx.get_small_value() - offset) - 1), true); return some_expr(lift_loose_bvars(v, offset)); } else { - return some_expr(mk_bvar(vidx - nat(n))); + return some_expr(mk_bvar(vidx - nat::of_size_t(n))); } } } diff --git a/src/util/nat.h b/src/util/nat.h index d71d4f3bfb..28ca4f5a09 100644 --- a/src/util/nat.h +++ b/src/util/nat.h @@ -25,6 +25,8 @@ public: if (m > 0) *this = nat(mk_nat_obj(m)); } + static nat of_size_t(size_t v) { return nat(lean_usize_to_nat(v)); } + nat(nat const & other):object_ref(other) {} nat(nat && other):object_ref(other) {}