Sfoglia il codice sorgente

Fix implementation error from converting from Lua to SquiLu, It's not enough to test for OT_CLOSURE we need also test OT_NATIVECLOSURE.

mingodad 13 anni fa
parent
commit
d6d8eca201
1 ha cambiato i file con 8 aggiunte e 3 eliminazioni
  1. 8 3
      ext/sq_socket.cpp

+ 8 - 3
ext/sq_socket.cpp

@@ -1423,9 +1423,11 @@ static int global_select(HSQUIRRELVM v) {
 \*=========================================================================*/
 static t_socket getfd(HSQUIRRELVM v) {
     t_socket fd = SOCKET_INVALID;
+    SQInteger top = sq_gettop(v);
     sq_pushliteral(v, _SC("getfd"));
     if(sq_get(v, -2) == SQ_OK){
-        if (sq_gettype(v, -1) == OT_CLOSURE) {
+        SQObjectType ptype = sq_gettype(v, -1);
+        if (ptype == OT_CLOSURE || ptype == OT_NATIVECLOSURE) {
             sq_push(v, -2);
             if(sq_call(v, 1, SQTrue, SQFalse) == SQ_OK){
                 if (sq_gettype(v, -1) == OT_INTEGER){
@@ -1435,16 +1437,18 @@ static t_socket getfd(HSQUIRRELVM v) {
                 }
             }
         }
-        sq_pop(v, 1);
     }
+    sq_settop(v, top);
     return fd;
 }
 
 static int dirty(HSQUIRRELVM v) {
     int is = 0;
+    SQInteger top = sq_gettop(v);
     sq_pushliteral(v, _SC("dirty"));
     if(sq_get(v, -2) == SQ_OK){
-        if (sq_gettype(v, -1) == OT_CLOSURE) {
+        SQObjectType ptype = sq_gettype(v, -1);
+        if (ptype == OT_CLOSURE || ptype == OT_NATIVECLOSURE) {
             sq_push(v, -2);
             if(sq_call(v, 1, SQTrue, SQFalse) == SQ_OK){
                 if (sq_gettype(v, -1) == OT_INTEGER){
@@ -1456,6 +1460,7 @@ static int dirty(HSQUIRRELVM v) {
         }
         sq_pop(v, 1);
     }
+    sq_settop(v, top);
     return is;
 }