From f13caf5c4856646a546dbf231cc9d9de63650375 Mon Sep 17 00:00:00 2001 From: blueloveTH Date: Mon, 27 Feb 2023 18:32:33 +0800 Subject: [PATCH] up --- src/compiler.h | 2 +- src/vm.h | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/compiler.h b/src/compiler.h index ab34c132..8fac8002 100644 --- a/src/compiler.h +++ b/src/compiler.h @@ -173,7 +173,7 @@ private: if(base == 16) SyntaxError("hex literal should not contain a dot"); parser->set_next_token(TK("@num"), vm->PyFloat(S_TO_FLOAT(m[0], &size))); } else { - parser->set_next_token(TK("@num"), vm->PyInt(S_TO_INT(m[0], &size, base))); + parser->set_next_token(TK("@num"), py_object(vm, S_TO_INT(m[0], &size, base))); } if (size != m.length()) UNREACHABLE(); } diff --git a/src/vm.h b/src/vm.h index 5bc1bd37..dc539139 100644 --- a/src/vm.h +++ b/src/vm.h @@ -955,10 +955,10 @@ void CodeObject::optimize(VM* vm){ } } -PyVar py_object(VM* vm, i64 val){ - if(((val << 2) >> 2) != val){ - vm->_error("OverflowError", std::to_string(val) + " is out of range"); - } +template +std::enable_if_t, PyVar> py_object(VM* vm, T _val){ + i64 val = static_cast(_val); + if(((val << 2) >> 2) != val) vm->_error("OverflowError", std::to_string(val)); val = (val << 2) | 0b01; return PyVar(reinterpret_cast(val)); }