This commit is contained in:
blueloveTH 2024-07-01 00:32:56 +08:00
parent 52b210b016
commit c5ab28d75b
3 changed files with 73 additions and 169 deletions

View File

@ -29,62 +29,9 @@ extern "C" {
namespace pkpy { namespace pkpy {
#endif #endif
// unary operators #define MAGIC_METHOD(x) extern uint16_t x;
extern uint16_t __repr__; #include "pocketpy/xmacros/magics.h"
extern uint16_t __str__; #undef MAGIC_METHOD
extern uint16_t __hash__;
extern uint16_t __len__;
extern uint16_t __iter__;
extern uint16_t __next__;
extern uint16_t __neg__;
// logical operators
extern uint16_t __eq__;
extern uint16_t __ne__;
extern uint16_t __lt__;
extern uint16_t __le__;
extern uint16_t __gt__;
extern uint16_t __ge__;
extern uint16_t __contains__;
// binary operators
extern uint16_t __add__;
extern uint16_t __radd__;
extern uint16_t __sub__;
extern uint16_t __rsub__;
extern uint16_t __mul__;
extern uint16_t __rmul__;
extern uint16_t __truediv__;
extern uint16_t __rtruediv__;
extern uint16_t __floordiv__;
extern uint16_t __rfloordiv__;
extern uint16_t __mod__;
extern uint16_t __rmod__;
extern uint16_t __pow__;
extern uint16_t __rpow__;
extern uint16_t __matmul__;
extern uint16_t __lshift__;
extern uint16_t __rshift__;
extern uint16_t __and__;
extern uint16_t __or__;
extern uint16_t __xor__;
extern uint16_t __invert__;
// indexer
extern uint16_t __getitem__;
extern uint16_t __setitem__;
extern uint16_t __delitem__;
// specials
extern uint16_t __new__;
extern uint16_t __init__;
extern uint16_t __call__;
extern uint16_t __divmod__;
extern uint16_t __enter__;
extern uint16_t __exit__;
extern uint16_t __name__;
extern uint16_t __all__;
extern uint16_t __package__;
extern uint16_t __path__;
extern uint16_t __class__;
extern uint16_t __missing__;
extern uint16_t pk_id_add; extern uint16_t pk_id_add;
extern uint16_t pk_id_set; extern uint16_t pk_id_set;

View File

@ -0,0 +1,62 @@
#ifdef MAGIC_METHOD
// unary operators
MAGIC_METHOD(__repr__)
MAGIC_METHOD(__str__)
MAGIC_METHOD(__hash__)
MAGIC_METHOD(__len__)
MAGIC_METHOD(__iter__)
MAGIC_METHOD(__next__)
MAGIC_METHOD(__neg__)
MAGIC_METHOD(__invert__)
// logical operators
MAGIC_METHOD(__contains__)
/////////////////////////////
MAGIC_METHOD(__eq__)
MAGIC_METHOD(__ne__)
MAGIC_METHOD(__lt__)
MAGIC_METHOD(__le__)
MAGIC_METHOD(__gt__)
MAGIC_METHOD(__ge__)
// binary operators
MAGIC_METHOD(__add__)
MAGIC_METHOD(__radd__)
MAGIC_METHOD(__sub__)
MAGIC_METHOD(__rsub__)
MAGIC_METHOD(__mul__)
MAGIC_METHOD(__rmul__)
MAGIC_METHOD(__truediv__)
MAGIC_METHOD(__rtruediv__)
MAGIC_METHOD(__floordiv__)
MAGIC_METHOD(__rfloordiv__)
MAGIC_METHOD(__mod__)
MAGIC_METHOD(__rmod__)
MAGIC_METHOD(__pow__)
MAGIC_METHOD(__rpow__)
MAGIC_METHOD(__matmul__)
MAGIC_METHOD(__lshift__)
MAGIC_METHOD(__rshift__)
MAGIC_METHOD(__and__)
MAGIC_METHOD(__or__)
MAGIC_METHOD(__xor__)
/////////////////////////////
// indexer
MAGIC_METHOD(__getitem__)
MAGIC_METHOD(__setitem__)
MAGIC_METHOD(__delitem__)
// specials
MAGIC_METHOD(__new__)
MAGIC_METHOD(__init__)
MAGIC_METHOD(__call__)
MAGIC_METHOD(__divmod__)
MAGIC_METHOD(__enter__)
MAGIC_METHOD(__exit__)
MAGIC_METHOD(__name__)
MAGIC_METHOD(__all__)
MAGIC_METHOD(__package__)
MAGIC_METHOD(__path__)
MAGIC_METHOD(__class__)
MAGIC_METHOD(__missing__)
#endif

View File

@ -19,66 +19,13 @@ void pk_StrName__initialize() {
c11_vector__ctor(&_r_interned, sizeof(c11_string)); c11_vector__ctor(&_r_interned, sizeof(c11_string));
_initialized = true; _initialized = true;
// unary operators #define MAGIC_METHOD(x) x = pk_StrName__map(#x);
__repr__ = pk_StrName__map("__repr__"); #include "pocketpy/xmacros/magics.h"
__str__ = pk_StrName__map("__str__"); #undef MAGIC_METHOD
__hash__ = pk_StrName__map("__hash__");
__len__ = pk_StrName__map("__len__");
__iter__ = pk_StrName__map("__iter__");
__next__ = pk_StrName__map("__next__");
__neg__ = pk_StrName__map("__neg__");
// logical operators
__eq__ = pk_StrName__map("__eq__");
__ne__ = pk_StrName__map("__ne__");
__lt__ = pk_StrName__map("__lt__");
__le__ = pk_StrName__map("__le__");
__gt__ = pk_StrName__map("__gt__");
__ge__ = pk_StrName__map("__ge__");
__contains__ = pk_StrName__map("__contains__");
// binary operators
__add__ = pk_StrName__map("__add__");
__radd__ = pk_StrName__map("__radd__");
__sub__ = pk_StrName__map("__sub__");
__rsub__ = pk_StrName__map("__rsub__");
__mul__ = pk_StrName__map("__mul__");
__rmul__ = pk_StrName__map("__rmul__");
__truediv__ = pk_StrName__map("__truediv__");
__rtruediv__ = pk_StrName__map("__rtruediv__");
__floordiv__ = pk_StrName__map("__floordiv__");
__rfloordiv__ = pk_StrName__map("__rfloordiv__");
__mod__ = pk_StrName__map("__mod__");
__rmod__ = pk_StrName__map("__rmod__");
__pow__ = pk_StrName__map("__pow__");
__rpow__ = pk_StrName__map("__rpow__");
__matmul__ = pk_StrName__map("__matmul__");
__lshift__ = pk_StrName__map("__lshift__");
__rshift__ = pk_StrName__map("__rshift__");
__and__ = pk_StrName__map("__and__");
__or__ = pk_StrName__map("__or__");
__xor__ = pk_StrName__map("__xor__");
__invert__ = pk_StrName__map("__invert__");
// indexer
__getitem__ = pk_StrName__map("__getitem__");
__setitem__ = pk_StrName__map("__setitem__");
__delitem__ = pk_StrName__map("__delitem__");
// specials
__new__ = pk_StrName__map("__new__");
__init__ = pk_StrName__map("__init__");
__call__ = pk_StrName__map("__call__");
__divmod__ = pk_StrName__map("__divmod__");
__enter__ = pk_StrName__map("__enter__");
__exit__ = pk_StrName__map("__exit__");
__name__ = pk_StrName__map("__name__");
__all__ = pk_StrName__map("__all__");
__package__ = pk_StrName__map("__package__");
__path__ = pk_StrName__map("__path__");
__class__ = pk_StrName__map("__class__");
__missing__ = pk_StrName__map("__missing__");
// print all names // print all names
for(int i = 0; i < _interned.count; i++) { for(int i = 0; i < _interned.count; i++) {
printf("%d: %s\n", i+1, c11__getitem(char*, &_r_interned, i)); printf("%d: %s\n", i + 1, c11__getitem(char*, &_r_interned, i));
} }
pk_id_add = pk_StrName__map("add"); pk_id_add = pk_StrName__map("add");
@ -133,62 +80,10 @@ c11_string pk_StrName__rmap2(uint16_t index) {
return (c11_string){p, strlen(p)}; return (c11_string){p, strlen(p)};
} }
// unary operators ///////////////////////////////////
uint16_t __repr__; #define MAGIC_METHOD(x) uint16_t x;
uint16_t __str__; #include "pocketpy/xmacros/magics.h"
uint16_t __hash__; #undef MAGIC_METHOD
uint16_t __len__;
uint16_t __iter__;
uint16_t __next__;
uint16_t __neg__;
// logical operators
uint16_t __eq__;
uint16_t __ne__;
uint16_t __lt__;
uint16_t __le__;
uint16_t __gt__;
uint16_t __ge__;
uint16_t __contains__;
// binary operators
uint16_t __add__;
uint16_t __radd__;
uint16_t __sub__;
uint16_t __rsub__;
uint16_t __mul__;
uint16_t __rmul__;
uint16_t __truediv__;
uint16_t __rtruediv__;
uint16_t __floordiv__;
uint16_t __rfloordiv__;
uint16_t __mod__;
uint16_t __rmod__;
uint16_t __pow__;
uint16_t __rpow__;
uint16_t __matmul__;
uint16_t __lshift__;
uint16_t __rshift__;
uint16_t __and__;
uint16_t __or__;
uint16_t __xor__;
uint16_t __invert__;
// indexer
uint16_t __getitem__;
uint16_t __setitem__;
uint16_t __delitem__;
// specials
uint16_t __new__;
uint16_t __init__;
uint16_t __call__;
uint16_t __divmod__;
uint16_t __enter__;
uint16_t __exit__;
uint16_t __name__;
uint16_t __all__;
uint16_t __package__;
uint16_t __path__;
uint16_t __class__;
uint16_t __missing__;
uint16_t pk_id_add; uint16_t pk_id_add;
uint16_t pk_id_set; uint16_t pk_id_set;