Przeglądaj źródła

Fix COMPARITH with bitwise inside class members

mingodad 4 lat temu
rodzic
commit
fa46c306e9
2 zmienionych plików z 20 dodań i 0 usunięć
  1. 15 0
      SquiLu/squirrel/sqcompiler.cpp
  2. 5 0
      SquiLu/squirrel/sqvm.cpp

+ 15 - 0
SquiLu/squirrel/sqcompiler.cpp

@@ -1494,6 +1494,21 @@ start_again:
         case TK_MODEQ:
         case TK_MODEQ:
             oper = _SC('%');
             oper = _SC('%');
             break;
             break;
+        case TK_BIT_XOR_EQ:
+            oper = _SC('^');
+            break;
+        case TK_BIT_AND_EQ:
+            oper = _SC('&');
+            break;
+        case TK_BIT_OR_EQ:
+            oper = _SC('|');
+            break;
+        case TK_BIT_SHIFT_LEFT_EQ:
+            oper = _SC('<');
+            break;
+        case TK_BIT_SHIFT_RIGHT_EQ:
+            oper = _SC('>');
+            break;
         default:
         default:
             oper = 0; //shut up compiler
             oper = 0; //shut up compiler
             assert(0);
             assert(0);

+ 5 - 0
SquiLu/squirrel/sqvm.cpp

@@ -87,6 +87,11 @@ bool SQVM::ARITH_OP(SQUnsignedInteger op,SQObjectPtr &trg,const SQObjectPtr &o1,
                     else if(i2 == -1 && i1 == SQ_INT_MIN) { res = 0; break; }
                     else if(i2 == -1 && i1 == SQ_INT_MIN) { res = 0; break; }
 					res = i1 % i2;
 					res = i1 % i2;
 					break;
 					break;
+			case '|': res = i1 | i2; break;
+			case '&': res = i1 & i2; break;
+			case '^': res = i1 ^ i2; break;
+			case '<': res = i1 << i2; break;
+			case '>': res = i1 >> i2; break;
 			default: res = 0xDEADBEEF;
 			default: res = 0xDEADBEEF;
 			}
 			}
 			trg = res; }
 			trg = res; }