Просмотр исходного кода

add clear() builtin, fix REPL thread

pikastech 3 лет назад
Родитель
Сommit
6258ccebb2

+ 4 - 0
package/PikaStdLib/PikaStdLib.pyi

@@ -130,6 +130,10 @@ class SysObj:
     @PIKA_C_MACRO_IF("!PIKA_NANO_ENABLE")
     def reboot(): ...
 
+    @staticmethod
+    @PIKA_C_MACRO_IF("!PIKA_NANO_ENABLE")
+    def clear(): ...
+
 
 @PIKA_C_MACRO_IF("0")
 class RangeObj:

+ 4 - 0
package/PikaStdLib/PikaStdLib_SysObj.c

@@ -665,3 +665,7 @@ void PikaStdLib_SysObj_help(PikaObj* self, char* name) {
 void PikaStdLib_SysObj_reboot(PikaObj* self) {
     pika_platform_reboot();
 }
+
+void PikaStdLib_SysObj_clear(PikaObj* self) {
+    pika_platform_clear();
+}

+ 4 - 0
port/linux/package/pikascript/PikaStdLib.pyi

@@ -130,6 +130,10 @@ class SysObj:
     @PIKA_C_MACRO_IF("!PIKA_NANO_ENABLE")
     def reboot(): ...
 
+    @staticmethod
+    @PIKA_C_MACRO_IF("!PIKA_NANO_ENABLE")
+    def clear(): ...
+
 
 @PIKA_C_MACRO_IF("0")
 class RangeObj:

+ 4 - 0
port/linux/package/pikascript/pikascript-lib/PikaStdLib/PikaStdLib_SysObj.c

@@ -665,3 +665,7 @@ void PikaStdLib_SysObj_help(PikaObj* self, char* name) {
 void PikaStdLib_SysObj_reboot(PikaObj* self) {
     pika_platform_reboot();
 }
+
+void PikaStdLib_SysObj_clear(PikaObj* self) {
+    pika_platform_clear();
+}

+ 2 - 0
src/PikaObj.c

@@ -1918,7 +1918,9 @@ Arg* __eventListener_runEvent_dataInt(PikaEventListener* lisener,
 static void _thread_event(void* arg) {
     while (1) {
         _VMEvent_pickupEvent();
+        pika_GIL_EXIT();
         pika_platform_thread_delay();
+        pika_GIL_ENTER();
     }
 }
 

+ 4 - 0
src/PikaPlatform.c

@@ -587,3 +587,7 @@ PIKA_WEAK void pika_platform_thread_timer_usleep(unsigned long usec) {
 PIKA_WEAK void pika_platform_reboot(void) {
     WEAK_FUNCTION_NEED_OVERRIDE_ERROR();
 }
+
+PIKA_WEAK void pika_platform_clear(void) {
+    WEAK_FUNCTION_NEED_OVERRIDE_ERROR();
+}

+ 1 - 0
src/PikaPlatform.h

@@ -287,6 +287,7 @@ int pika_platform_thread_timer_remain(pika_platform_timer_t* timer);
 unsigned long pika_platform_thread_timer_now(void);
 void pika_platform_thread_timer_usleep(unsigned long usec);
 void pika_platform_reboot(void);
+void pika_platform_clear(void);
 
 #define WEAK_FUNCTION_NEED_OVERRIDE_ERROR(_)                               \
     pika_platform_printf("Error: weak function `%s()` need override.\r\n", \