@@ -50,18 +50,26 @@ public Section run(Script script, StringBuilder sb) {
5050 case Modulo : { Value b = pop (); Value a = pop (); if (a .isNumber () && b .isNumber ()) push (Value .number (a .getNumber () % b .getNumber ())); else error ("Can only modulo 2 numbers." ); break ; }
5151 case Power : { Value b = pop (); Value a = pop (); if (a .isNumber () && b .isNumber ()) push (Value .number (Math .pow (a .getNumber (), b .getNumber ()))); else error ("Can only power 2 numbers." ); break ; }
5252
53+ case BitwiseAnd : { Value b = pop (); Value a = pop (); if (a .isNumber () && b .isNumber ()) push (Value .number (((int ) a .getNumber ()) & ((int ) b .getNumber ()))); else error ("This operation requires 2 numbers." ); break ; }
54+ case BitwiseOr : { Value b = pop (); Value a = pop (); if (a .isNumber () && b .isNumber ()) push (Value .number (((int ) a .getNumber ()) | ((int ) b .getNumber ()))); else error ("This operation requires 2 numbers." ); break ; }
55+ case BitwiseXor : { Value b = pop (); Value a = pop (); if (a .isNumber () && b .isNumber ()) push (Value .number (((int ) a .getNumber ()) ^ ((int ) b .getNumber ()))); else error ("This operation requires 2 numbers." ); break ; }
56+ case LeftShift : { Value b = pop (); Value a = pop (); if (a .isNumber () && b .isNumber ()) push (Value .number (((int ) a .getNumber ()) << ((int ) b .getNumber ()))); else error ("This operation requires 2 numbers." ); break ; }
57+ case RightShift : { Value b = pop (); Value a = pop (); if (a .isNumber () && b .isNumber ()) push (Value .number (((int ) a .getNumber ()) >> ((int ) b .getNumber ()))); else error ("This operation requires 2 numbers." ); break ; }
58+ case UnsignedRightShift : { Value b = pop (); Value a = pop (); if (a .isNumber () && b .isNumber ()) push (Value .number (((int ) a .getNumber ()) >>> ((int ) b .getNumber ()))); else error ("This operation requires 2 numbers." ); break ; }
59+
5360 case AddConstant : { Value b = script .constants .get (script .code [ip ++] & 0xFF ); Value a = pop (); if (a .isNumber () && b .isNumber ()) push (Value .number (a .getNumber () + b .getNumber ())); else if (a .isString ()) push (Value .string (a .getString () + b .toString ())); else error ("Can only add 2 numbers or 1 string and other value." ); break ; }
5461
5562 case Pop : pop (); break ;
5663 case Not : push (Value .bool (!pop ().isTruthy ())); break ;
5764 case Negate : { Value a = pop (); if (a .isNumber ()) push (Value .number (-a .getNumber ())); else error ("This operation requires a number." ); break ; }
65+ case BitwiseNot : { Value a = pop (); if (a .isNumber ()) push (Value .number (~((int ) a .getNumber ()))); else error ("This operation requires a number." ); break ; }
5866
5967 case Equals : push (Value .bool (pop ().equals (pop ()))); break ;
6068 case NotEquals : push (Value .bool (!pop ().equals (pop ()))); break ;
61- case Greater : { Value b = pop (); Value a = pop (); if (a .isNumber () && b .isNumber ()) push (Value .bool (a .getNumber () > b .getNumber ())); else error ("This operation requires 2 number ." ); break ; }
62- case GreaterEqual : { Value b = pop (); Value a = pop (); if (a .isNumber () && b .isNumber ()) push (Value .bool (a .getNumber () >= b .getNumber ())); else error ("This operation requires 2 number ." ); break ; }
63- case Less : { Value b = pop (); Value a = pop (); if (a .isNumber () && b .isNumber ()) push (Value .bool (a .getNumber () < b .getNumber ())); else error ("This operation requires 2 number ." ); break ; }
64- case LessEqual : { Value b = pop (); Value a = pop (); if (a .isNumber () && b .isNumber ()) push (Value .bool (a .getNumber () <= b .getNumber ())); else error ("This operation requires 2 number ." ); break ; }
69+ case Greater : { Value b = pop (); Value a = pop (); if (a .isNumber () && b .isNumber ()) push (Value .bool (a .getNumber () > b .getNumber ())); else error ("This operation requires 2 numbers ." ); break ; }
70+ case GreaterEqual : { Value b = pop (); Value a = pop (); if (a .isNumber () && b .isNumber ()) push (Value .bool (a .getNumber () >= b .getNumber ())); else error ("This operation requires 2 numbers ." ); break ; }
71+ case Less : { Value b = pop (); Value a = pop (); if (a .isNumber () && b .isNumber ()) push (Value .bool (a .getNumber () < b .getNumber ())); else error ("This operation requires 2 numbers ." ); break ; }
72+ case LessEqual : { Value b = pop (); Value a = pop (); if (a .isNumber () && b .isNumber ()) push (Value .bool (a .getNumber () <= b .getNumber ())); else error ("This operation requires 2 numbers ." ); break ; }
6573
6674 case Variable : { String name = script .constants .get (script .code [ip ++] & 0xFF ).getString (); Supplier <Value > s = globals .getRaw (name ); push (s != null ? s .get () : Value .null_ ()); break ; }
6775 case Get : { String name = script .constants .get (script .code [ip ++] & 0xFF ).getString (); Value v = pop (); if (!v .isMap ()) { push (Value .null_ ()); break ; } Supplier <Value > s = v .getMap ().getRaw (name ); push (s != null ? s .get () : Value .null_ ()); break ; }
0 commit comments