@@ -331,8 +331,7 @@ Object_str(Object *self) {
331331/**
332332 * Implements len().
333333 */
334- static Py_ssize_t
335- Object_length (Object * self ) {
334+ static int get_len (Object * self ) {
336335 int len = EM_ASM_INT ({
337336 var val = Emval .toValue ($0 );
338337 if (val [Symbol .iterator ] && val .length != = undefined ) {
@@ -342,7 +341,12 @@ Object_length(Object *self) {
342341 return -1 ;
343342 }
344343 }, self -> handle );
344+ return len ;
345+ }
345346
347+ static Py_ssize_t
348+ Object_length (Object * self ) {
349+ int len = get_len (self );
346350 if (len >= 0 ) {
347351 return len ;
348352 }
@@ -517,6 +521,18 @@ Object_dir(Object *self, PyObject *noarg) {
517521 }, self -> handle ));
518522}
519523
524+ /**
525+ * Implements truth test.
526+ */
527+ static int
528+ Object_as_bool (PyObject * self ) {
529+ return (int )(get_len ((Object * )self ) != 0 );
530+ }
531+
532+ static PyNumberMethods Object_as_number = {
533+ .nb_bool = Object_as_bool ,
534+ };
535+
520536static PyAsyncMethods Object_async = {
521537 .am_await = (unaryfunc )Object_await ,
522538};
@@ -551,6 +567,7 @@ static PyTypeObject Object_Type = {
551567 .tp_iter = (getiterfunc )Object_iter ,
552568 .tp_iternext = (iternextfunc )Object_next ,
553569 .tp_methods = Object_methods ,
570+ .tp_as_number = & Object_as_number ,
554571 .tp_new = PyType_GenericNew ,
555572};
556573
@@ -920,6 +937,9 @@ static PyObject *emval_to_py(EM_VAL handle) {
920937 switch (type ) {
921938 case 1 :
922939 exc_type = PyExc_TypeError ;
940+ puts ("==== please use new() not .new() ======" );
941+ puts (message );
942+ puts ("=======================================" );
923943 break ;
924944
925945 case 2 :
@@ -1182,20 +1202,29 @@ PyObject *PyInit_browser() {
11821202 PyUnstable_Module_SetGIL (module , Py_MOD_GIL_NOT_USED );
11831203#endif
11841204
1185- Object * window = PyObject_New (Object , & Object_Type );
1186- if (PyModule_AddObject (module , "window " , (PyObject * )window ) < 0 ) {
1187- Py_DECREF (& window );
1205+ Object * globalThis = PyObject_New (Object , & Object_Type );
1206+ if (PyModule_AddObject (module , "globalThis " , (PyObject * )globalThis ) < 0 ) {
1207+ Py_DECREF (& globalThis );
11881208 Py_DECREF (module );
11891209 return NULL ;
11901210 }
11911211
1212+
11921213 Object * console = PyObject_New (Object , & Object_Type );
11931214 if (PyModule_AddObject (module , "console" , (PyObject * )console ) < 0 ) {
11941215 Py_DECREF (& console );
11951216 Py_DECREF (module );
11961217 return NULL ;
11971218 }
11981219
1220+ // worker ?
1221+ Object * window = PyObject_New (Object , & Object_Type );
1222+ if (PyModule_AddObject (module , "window" , (PyObject * )window ) < 0 ) {
1223+ Py_DECREF (& window );
1224+ Py_DECREF (module );
1225+ return NULL ;
1226+ }
1227+
11991228 Object * document = PyObject_New (Object , & Object_Type );
12001229 if (PyModule_AddObject (module , "document" , (PyObject * )document ) < 0 ) {
12011230 Py_DECREF (& document );
@@ -1204,12 +1233,12 @@ PyObject *PyInit_browser() {
12041233 }
12051234
12061235 EM_ASM ({
1207- setValue ($0 , Emval .toHandle (window ), '*' );
1236+ setValue ($0 , Emval .toHandle (globalThis ), '*' );
12081237 setValue ($1 , Emval .toHandle (console ), '*' );
1209- setValue ($2 , Emval .toHandle (document ), '*' );
1210-
1211- window .__py_alive = new Set ();
1212- }, & window -> handle , & console -> handle , & document -> handle );
1238+ setValue ($2 , Emval .toHandle (window ), '*' );
1239+ setValue ( $3 , Emval . toHandle ( document ), '*' );
1240+ globalThis .__py_alive = new Set ();
1241+ }, & globalThis -> handle , & console -> handle , & window -> handle , & document -> handle );
12131242
12141243 return module ;
12151244}
0 commit comments