From 237fd57b66bb4cfeeb053c082e58e34adbe86387 Mon Sep 17 00:00:00 2001 From: blueloveTH Date: Sat, 20 Apr 2024 11:47:50 +0800 Subject: [PATCH] some optimize --- include/pocketpy/str.h | 98 +++++++++++++++++++++--------------------- src/str.cpp | 60 ++++++++++++++++++++++++++ 2 files changed, 109 insertions(+), 49 deletions(-) diff --git a/include/pocketpy/str.h b/include/pocketpy/str.h index a21a9037..063035d9 100644 --- a/include/pocketpy/str.h +++ b/include/pocketpy/str.h @@ -174,61 +174,61 @@ struct CString{ }; // unary operators -const StrName __repr__ = StrName::get("__repr__"); -const StrName __str__ = StrName::get("__str__"); -const StrName __hash__ = StrName::get("__hash__"); -const StrName __len__ = StrName::get("__len__"); -const StrName __iter__ = StrName::get("__iter__"); -const StrName __next__ = StrName::get("__next__"); -const StrName __neg__ = StrName::get("__neg__"); +extern const StrName __repr__; +extern const StrName __str__; +extern const StrName __hash__; +extern const StrName __len__; +extern const StrName __iter__; +extern const StrName __next__; +extern const StrName __neg__; // logical operators -const StrName __eq__ = StrName::get("__eq__"); -const StrName __lt__ = StrName::get("__lt__"); -const StrName __le__ = StrName::get("__le__"); -const StrName __gt__ = StrName::get("__gt__"); -const StrName __ge__ = StrName::get("__ge__"); -const StrName __contains__ = StrName::get("__contains__"); +extern const StrName __eq__; +extern const StrName __lt__; +extern const StrName __le__; +extern const StrName __gt__; +extern const StrName __ge__; +extern const StrName __contains__; // binary operators -const StrName __add__ = StrName::get("__add__"); -const StrName __radd__ = StrName::get("__radd__"); -const StrName __sub__ = StrName::get("__sub__"); -const StrName __rsub__ = StrName::get("__rsub__"); -const StrName __mul__ = StrName::get("__mul__"); -const StrName __rmul__ = StrName::get("__rmul__"); -const StrName __truediv__ = StrName::get("__truediv__"); -const StrName __floordiv__ = StrName::get("__floordiv__"); -const StrName __mod__ = StrName::get("__mod__"); -const StrName __pow__ = StrName::get("__pow__"); -const StrName __matmul__ = StrName::get("__matmul__"); -const StrName __lshift__ = StrName::get("__lshift__"); -const StrName __rshift__ = StrName::get("__rshift__"); -const StrName __and__ = StrName::get("__and__"); -const StrName __or__ = StrName::get("__or__"); -const StrName __xor__ = StrName::get("__xor__"); -const StrName __invert__ = StrName::get("__invert__"); +extern const StrName __add__; +extern const StrName __radd__; +extern const StrName __sub__; +extern const StrName __rsub__; +extern const StrName __mul__; +extern const StrName __rmul__; +extern const StrName __truediv__; +extern const StrName __floordiv__; +extern const StrName __mod__; +extern const StrName __pow__; +extern const StrName __matmul__; +extern const StrName __lshift__; +extern const StrName __rshift__; +extern const StrName __and__; +extern const StrName __or__; +extern const StrName __xor__; +extern const StrName __invert__; // indexer -const StrName __getitem__ = StrName::get("__getitem__"); -const StrName __setitem__ = StrName::get("__setitem__"); -const StrName __delitem__ = StrName::get("__delitem__"); +extern const StrName __getitem__; +extern const StrName __setitem__; +extern const StrName __delitem__; // specials -const StrName __new__ = StrName::get("__new__"); -const StrName __init__ = StrName::get("__init__"); -const StrName __call__ = StrName::get("__call__"); -const StrName __divmod__ = StrName::get("__divmod__"); -const StrName __enter__ = StrName::get("__enter__"); -const StrName __exit__ = StrName::get("__exit__"); -const StrName __name__ = StrName::get("__name__"); -const StrName __all__ = StrName::get("__all__"); -const StrName __package__ = StrName::get("__package__"); -const StrName __path__ = StrName::get("__path__"); -const StrName __class__ = StrName::get("__class__"); -const StrName __missing__ = StrName::get("__missing__"); +extern const StrName __new__; +extern const StrName __init__; +extern const StrName __call__; +extern const StrName __divmod__; +extern const StrName __enter__; +extern const StrName __exit__; +extern const StrName __name__; +extern const StrName __all__; +extern const StrName __package__; +extern const StrName __path__; +extern const StrName __class__; +extern const StrName __missing__; -const StrName pk_id_add = StrName::get("add"); -const StrName pk_id_set = StrName::get("set"); -const StrName pk_id_long = StrName::get("long"); -const StrName pk_id_complex = StrName::get("complex"); +extern const StrName pk_id_add; +extern const StrName pk_id_set; +extern const StrName pk_id_long; +extern const StrName pk_id_complex; #define DEF_SNAME(name) const static StrName name(#name) diff --git a/src/str.cpp b/src/str.cpp index 195d1d68..5f2d38bc 100644 --- a/src/str.cpp +++ b/src/str.cpp @@ -539,4 +539,64 @@ int utf8len(unsigned char c, bool suppress){ #undef PK_STR_ALLOCATE #undef PK_STR_COPY_INIT + + +// unary operators +const StrName __repr__ = StrName::get("__repr__"); +const StrName __str__ = StrName::get("__str__"); +const StrName __hash__ = StrName::get("__hash__"); +const StrName __len__ = StrName::get("__len__"); +const StrName __iter__ = StrName::get("__iter__"); +const StrName __next__ = StrName::get("__next__"); +const StrName __neg__ = StrName::get("__neg__"); +// logical operators +const StrName __eq__ = StrName::get("__eq__"); +const StrName __lt__ = StrName::get("__lt__"); +const StrName __le__ = StrName::get("__le__"); +const StrName __gt__ = StrName::get("__gt__"); +const StrName __ge__ = StrName::get("__ge__"); +const StrName __contains__ = StrName::get("__contains__"); +// binary operators +const StrName __add__ = StrName::get("__add__"); +const StrName __radd__ = StrName::get("__radd__"); +const StrName __sub__ = StrName::get("__sub__"); +const StrName __rsub__ = StrName::get("__rsub__"); +const StrName __mul__ = StrName::get("__mul__"); +const StrName __rmul__ = StrName::get("__rmul__"); +const StrName __truediv__ = StrName::get("__truediv__"); +const StrName __floordiv__ = StrName::get("__floordiv__"); +const StrName __mod__ = StrName::get("__mod__"); +const StrName __pow__ = StrName::get("__pow__"); +const StrName __matmul__ = StrName::get("__matmul__"); +const StrName __lshift__ = StrName::get("__lshift__"); +const StrName __rshift__ = StrName::get("__rshift__"); +const StrName __and__ = StrName::get("__and__"); +const StrName __or__ = StrName::get("__or__"); +const StrName __xor__ = StrName::get("__xor__"); +const StrName __invert__ = StrName::get("__invert__"); +// indexer +const StrName __getitem__ = StrName::get("__getitem__"); +const StrName __setitem__ = StrName::get("__setitem__"); +const StrName __delitem__ = StrName::get("__delitem__"); + +// specials +const StrName __new__ = StrName::get("__new__"); +const StrName __init__ = StrName::get("__init__"); +const StrName __call__ = StrName::get("__call__"); +const StrName __divmod__ = StrName::get("__divmod__"); +const StrName __enter__ = StrName::get("__enter__"); +const StrName __exit__ = StrName::get("__exit__"); +const StrName __name__ = StrName::get("__name__"); +const StrName __all__ = StrName::get("__all__"); +const StrName __package__ = StrName::get("__package__"); +const StrName __path__ = StrName::get("__path__"); +const StrName __class__ = StrName::get("__class__"); +const StrName __missing__ = StrName::get("__missing__"); + +const StrName pk_id_add = StrName::get("add"); +const StrName pk_id_set = StrName::get("set"); +const StrName pk_id_long = StrName::get("long"); +const StrName pk_id_complex = StrName::get("complex"); + + } // namespace pkpy \ No newline at end of file