diff --git a/docs/features/long.md b/docs/features/long.md index 62827e10..85848a32 100644 --- a/docs/features/long.md +++ b/docs/features/long.md @@ -8,6 +8,11 @@ Unlike cpython, pkpy's `int` is of limited precision (64-bit). For arbitrary sized integers, we provide a builtin `long` type, just like python2's `long`. `long` is implemented via pure python in [_long.py](https://github.com/blueloveTH/pocketpy/blob/main/python/_long.py). +!!! +This feature is still under development. +Some operations are missing, and some operations are not optimized. +!!! + ### Create a long object You can use `L` suffix to create a `long` literal from a decimal literal. @@ -25,8 +30,3 @@ a = 2L # use `L` suffix to create a `long` object print(a ** 1000) # 10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376L ``` - -!!! -This feature is still under development. -Some operations are missing, and some operations are not optimized. -!!! \ No newline at end of file diff --git a/python/_long.py b/python/_long.py index fcb7df79..a4d0803f 100644 --- a/python/_long.py +++ b/python/_long.py @@ -1,12 +1,5 @@ -from c import sizeof - -# https://www.cnblogs.com/liuchanglc/p/14203783.html -if sizeof('void_p') == 4: - PyLong_SHIFT = 28//2 - 1 -elif sizeof('void_p') == 8: - PyLong_SHIFT = 60//2 - 1 -else: - raise NotImplementedError +# after v1.2.2, int is always 64-bit +PyLong_SHIFT = 60//2 - 1 PyLong_BASE = 2 ** PyLong_SHIFT PyLong_MASK = PyLong_BASE - 1