From 8da3b7f110ff42de04dd5d579e109bb6d5366809 Mon Sep 17 00:00:00 2001 From: blueloveTH Date: Mon, 15 May 2023 17:05:52 +0800 Subject: [PATCH] ... --- src/c.pyi | 1 + src/cffi.h | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/c.pyi b/src/c.pyi index 41feadf4..25287996 100644 --- a/src/c.pyi +++ b/src/c.pyi @@ -18,6 +18,7 @@ class void_p: def __sub__(self, i: int) -> 'void_p': ... def __eq__(self, other: 'void_p') -> bool: ... def __ne__(self, other: 'void_p') -> bool: ... + def offset(self, i: int) -> 'void_p': ... def read_char(self) -> int: ... def read_uchar(self) -> int: ... diff --git a/src/cffi.h b/src/cffi.h index 24f5d635..44caccb4 100644 --- a/src/cffi.h +++ b/src/cffi.h @@ -79,16 +79,22 @@ struct VoidP{ return VAR(self.base_offset); }); - vm->bind_method<1>(type, "__add__", [](VM* vm, ArgsView args){ + vm->bind_method<1>(type, "offset", [](VM* vm, ArgsView args){ VoidP& self = _CAST(VoidP&, args[0]); i64 offset = CAST(i64, args[1]); return VAR_T(VoidP, (char*)self.ptr + offset * self.base_offset); }); + vm->bind_method<1>(type, "__add__", [](VM* vm, ArgsView args){ + VoidP& self = _CAST(VoidP&, args[0]); + i64 offset = CAST(i64, args[1]); + return VAR_T(VoidP, (char*)self.ptr + offset); + }); + vm->bind_method<1>(type, "__sub__", [](VM* vm, ArgsView args){ VoidP& self = _CAST(VoidP&, args[0]); i64 offset = CAST(i64, args[1]); - return VAR_T(VoidP, (char*)self.ptr - offset * self.base_offset); + return VAR_T(VoidP, (char*)self.ptr - offset); }); #define BIND_SETGET(T, name) \