@@ -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 ((long ) a .getNumber () & (long ) 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 ((long ) a .getNumber () | (long ) 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 ((long ) a .getNumber () ^ (long ) 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 ((long ) a .getNumber () << (long ) 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 ((long ) a .getNumber () >> (long ) 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 ((long ) a .getNumber () >>> (long ) 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 (~((long ) 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