|
@@ -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;
|
|
}
|
|
}
|
|
}
|
|
}
|