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

LibPDF: Tweak implementation of postscript `roll` op

Since positive offsets roll to the right, it makes more sense
to do the big reverse first. Gets rid of an awkward minus sign.

No behavior change.
Nico Weber 1 год назад
Родитель
Сommit
cd9f4655ec
1 измененных файлов с 2 добавлено и 2 удалено
  1. 2 2
      Userland/Libraries/LibPDF/Function.cpp

+ 2 - 2
Userland/Libraries/LibPDF/Function.cpp

@@ -728,7 +728,7 @@ PDFErrorOr<void> PostScriptCalculatorFunction::execute(Vector<Token> const& toke
             TRY(stack.pop());
             TRY(stack.pop());
             break;
             break;
         case OperatorType::Roll: {
         case OperatorType::Roll: {
-            int j = -(int)TRY(stack.pop());
+            int j = (int)TRY(stack.pop());
             int n = (int)TRY(stack.pop());
             int n = (int)TRY(stack.pop());
             if (n < 0)
             if (n < 0)
                 return Error { Error::Type::RenderingUnsupported, "PostScript roll with negative argument"_string };
                 return Error { Error::Type::RenderingUnsupported, "PostScript roll with negative argument"_string };
@@ -742,9 +742,9 @@ PDFErrorOr<void> PostScriptCalculatorFunction::execute(Vector<Token> const& toke
                 return Error { Error::Type::RenderingUnsupported, "PostScript roll with argument larger than stack"_string };
                 return Error { Error::Type::RenderingUnsupported, "PostScript roll with argument larger than stack"_string };
             // http://pointer-overloading.blogspot.com/2013/09/algorithms-rotating-one-dimensional.html
             // http://pointer-overloading.blogspot.com/2013/09/algorithms-rotating-one-dimensional.html
             auto elements = stack.stack.span().slice(stack.top - n, n);
             auto elements = stack.stack.span().slice(stack.top - n, n);
+            elements.reverse();
             elements.slice(0, j).reverse();
             elements.slice(0, j).reverse();
             elements.slice(j).reverse();
             elements.slice(j).reverse();
-            elements.reverse();
             break;
             break;
         }
         }
         }
         }