Chromium Code Reviews| Index: core/fpdfapi/fpdf_page/fpdf_page_func.cpp |
| diff --git a/core/fpdfapi/fpdf_page/fpdf_page_func.cpp b/core/fpdfapi/fpdf_page/fpdf_page_func.cpp |
| index ed8e6093d58787879df230a0dd8c27e81427b51d..ed9e6a898eab8657f7ca7361ed5dac443fef63d7 100644 |
| --- a/core/fpdfapi/fpdf_page/fpdf_page_func.cpp |
| +++ b/core/fpdfapi/fpdf_page/fpdf_page_func.cpp |
| @@ -13,6 +13,7 @@ |
| #include <utility> |
| #include <vector> |
| +#include "core/fpdfapi/fpdf_page/cpdf_psengine.h" |
| #include "core/fpdfapi/fpdf_parser/include/cpdf_array.h" |
| #include "core/fpdfapi/fpdf_parser/include/cpdf_dictionary.h" |
| #include "core/fpdfapi/fpdf_parser/include/cpdf_simple_parser.h" |
| @@ -21,58 +22,6 @@ |
| #include "core/fxcrt/include/fx_safe_types.h" |
| #include "third_party/base/numerics/safe_conversions_impl.h" |
| -namespace { |
| - |
| -enum PDF_PSOP { |
| - PSOP_ADD, |
| - PSOP_SUB, |
| - PSOP_MUL, |
| - PSOP_DIV, |
| - PSOP_IDIV, |
| - PSOP_MOD, |
| - PSOP_NEG, |
| - PSOP_ABS, |
| - PSOP_CEILING, |
| - PSOP_FLOOR, |
| - PSOP_ROUND, |
| - PSOP_TRUNCATE, |
| - PSOP_SQRT, |
| - PSOP_SIN, |
| - PSOP_COS, |
| - PSOP_ATAN, |
| - PSOP_EXP, |
| - PSOP_LN, |
| - PSOP_LOG, |
| - PSOP_CVI, |
| - PSOP_CVR, |
| - PSOP_EQ, |
| - PSOP_NE, |
| - PSOP_GT, |
| - PSOP_GE, |
| - PSOP_LT, |
| - PSOP_LE, |
| - PSOP_AND, |
| - PSOP_OR, |
| - PSOP_XOR, |
| - PSOP_NOT, |
| - PSOP_BITSHIFT, |
| - PSOP_TRUE, |
| - PSOP_FALSE, |
| - PSOP_IF, |
| - PSOP_IFELSE, |
| - PSOP_POP, |
| - PSOP_EXCH, |
| - PSOP_DUP, |
| - PSOP_COPY, |
| - PSOP_INDEX, |
| - PSOP_ROLL, |
| - PSOP_PROC, |
| - PSOP_CONST |
| -}; |
| - |
| -class CPDF_PSEngine; |
| -class CPDF_PSProc; |
| - |
| class CPDF_PSOP { |
|
Lei Zhang
2016/08/18 06:21:39
Would be nice to move these out to their own file
Tom Sepez
2016/08/18 21:23:07
Agreed, someday.
|
| public: |
| explicit CPDF_PSOP(PDF_PSOP op) : m_op(op), m_value(0) { |
| @@ -105,39 +54,12 @@ class CPDF_PSOP { |
| std::unique_ptr<CPDF_PSProc> m_proc; |
| }; |
| -class CPDF_PSProc { |
| - public: |
| - CPDF_PSProc() {} |
| - ~CPDF_PSProc() {} |
| - |
| - FX_BOOL Parse(CPDF_SimpleParser* parser); |
| - FX_BOOL Execute(CPDF_PSEngine* pEngine); |
| - |
| - private: |
| - std::vector<std::unique_ptr<CPDF_PSOP>> m_Operators; |
| -}; |
| - |
| -const uint32_t PSENGINE_STACKSIZE = 100; |
| - |
| -class CPDF_PSEngine { |
| - public: |
| - CPDF_PSEngine(); |
| - ~CPDF_PSEngine(); |
| - |
| - FX_BOOL Parse(const FX_CHAR* str, int size); |
| - FX_BOOL Execute() { return m_MainProc.Execute(this); } |
| - FX_BOOL DoOperator(PDF_PSOP op); |
| - void Reset() { m_StackCount = 0; } |
| - void Push(FX_FLOAT value); |
| - void Push(int value) { Push((FX_FLOAT)value); } |
| - FX_FLOAT Pop(); |
| - uint32_t GetStackSize() const { return m_StackCount; } |
| +FX_BOOL CPDF_PSEngine::Execute() { |
| + return m_MainProc.Execute(this); |
| +} |
| - private: |
| - FX_FLOAT m_Stack[PSENGINE_STACKSIZE]; |
| - uint32_t m_StackCount; |
| - CPDF_PSProc m_MainProc; |
| -}; |
| +CPDF_PSProc::CPDF_PSProc() {} |
| +CPDF_PSProc::~CPDF_PSProc() {} |
| FX_BOOL CPDF_PSProc::Execute(CPDF_PSEngine* pEngine) { |
| for (size_t i = 0; i < m_Operators.size(); ++i) { |
| @@ -280,12 +202,18 @@ FX_BOOL CPDF_PSEngine::DoOperator(PDF_PSOP op) { |
| case PSOP_IDIV: |
| i2 = (int)Pop(); |
| i1 = (int)Pop(); |
| - Push(i1 / i2); |
| + if (i2) |
|
Lei Zhang
2016/08/18 06:21:39
1 Push() with a ternary operator inside? Ditto for
Tom Sepez
2016/08/18 21:23:07
Done.
|
| + Push(i1 / i2); |
| + else |
| + Push(0); |
| break; |
| case PSOP_MOD: |
| i2 = (int)Pop(); |
| i1 = (int)Pop(); |
| - Push(i1 % i2); |
| + if (i2) |
| + Push(i1 % i2); |
| + else |
| + Push(0); |
| break; |
| case PSOP_NEG: |
| d1 = Pop(); |
| @@ -538,7 +466,6 @@ FX_BOOL CPDF_PSFunc::v_Call(FX_FLOAT* inputs, FX_FLOAT* results) const { |
| return TRUE; |
| } |
| -} // namespace |
| CPDF_SampledFunc::CPDF_SampledFunc() : CPDF_Function(Type::kType0Sampled) {} |