diff --git a/include/pocketpy/common/strname.h b/include/pocketpy/common/strname.h index a858fba4..4bc59303 100644 --- a/include/pocketpy/common/strname.h +++ b/include/pocketpy/common/strname.h @@ -29,62 +29,9 @@ extern "C" { namespace pkpy { #endif -// unary operators -extern uint16_t __repr__; -extern uint16_t __str__; -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__; +#define MAGIC_METHOD(x) extern uint16_t x; +#include "pocketpy/xmacros/magics.h" +#undef MAGIC_METHOD extern uint16_t pk_id_add; extern uint16_t pk_id_set; diff --git a/include/pocketpy/xmacros/magics.h b/include/pocketpy/xmacros/magics.h new file mode 100644 index 00000000..ac679f0b --- /dev/null +++ b/include/pocketpy/xmacros/magics.h @@ -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 \ No newline at end of file diff --git a/src/common/strname.c b/src/common/strname.c index 2aa3b48f..9f695a31 100644 --- a/src/common/strname.c +++ b/src/common/strname.c @@ -19,66 +19,13 @@ void pk_StrName__initialize() { c11_vector__ctor(&_r_interned, sizeof(c11_string)); _initialized = true; - // unary operators - __repr__ = pk_StrName__map("__repr__"); - __str__ = pk_StrName__map("__str__"); - __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__"); +#define MAGIC_METHOD(x) x = pk_StrName__map(#x); +#include "pocketpy/xmacros/magics.h" +#undef MAGIC_METHOD // print all names 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"); @@ -133,62 +80,10 @@ c11_string pk_StrName__rmap2(uint16_t index) { return (c11_string){p, strlen(p)}; } -// unary operators -uint16_t __repr__; -uint16_t __str__; -uint16_t __hash__; -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__; +/////////////////////////////////// +#define MAGIC_METHOD(x) uint16_t x; +#include "pocketpy/xmacros/magics.h" +#undef MAGIC_METHOD uint16_t pk_id_add; uint16_t pk_id_set;