188 lines
5.7 KiB
C++
188 lines
5.7 KiB
C++
// Copyright 2014 PDFium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
|
|
|
|
#ifndef XFA_FXFA_FM2JS_CXFA_FMEXPRESSION_H_
|
|
#define XFA_FXFA_FM2JS_CXFA_FMEXPRESSION_H_
|
|
|
|
#include <memory>
|
|
#include <vector>
|
|
|
|
#include "xfa/fxfa/fm2js/cxfa_fmsimpleexpression.h"
|
|
|
|
class CFX_WideTextBuf;
|
|
|
|
class CXFA_FMExpression {
|
|
public:
|
|
virtual ~CXFA_FMExpression() = default;
|
|
virtual bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) = 0;
|
|
|
|
protected:
|
|
CXFA_FMExpression();
|
|
};
|
|
|
|
class CXFA_FMFunctionDefinition final : public CXFA_FMExpression {
|
|
public:
|
|
CXFA_FMFunctionDefinition(
|
|
WideStringView wsName,
|
|
std::vector<WideStringView>&& arguments,
|
|
std::vector<std::unique_ptr<CXFA_FMExpression>>&& expressions);
|
|
~CXFA_FMFunctionDefinition() override;
|
|
|
|
bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override;
|
|
|
|
private:
|
|
WideStringView m_wsName;
|
|
std::vector<WideStringView> m_pArguments;
|
|
std::vector<std::unique_ptr<CXFA_FMExpression>> m_pExpressions;
|
|
};
|
|
|
|
class CXFA_FMAST {
|
|
public:
|
|
explicit CXFA_FMAST(
|
|
std::vector<std::unique_ptr<CXFA_FMExpression>> expressions);
|
|
~CXFA_FMAST();
|
|
|
|
bool ToJavaScript(CFX_WideTextBuf* js);
|
|
|
|
private:
|
|
std::vector<std::unique_ptr<CXFA_FMExpression>> expressions_;
|
|
};
|
|
|
|
class CXFA_FMVarExpression final : public CXFA_FMExpression {
|
|
public:
|
|
CXFA_FMVarExpression(WideStringView wsName,
|
|
std::unique_ptr<CXFA_FMSimpleExpression> pInit);
|
|
~CXFA_FMVarExpression() override;
|
|
|
|
bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override;
|
|
|
|
private:
|
|
WideStringView m_wsName;
|
|
std::unique_ptr<CXFA_FMSimpleExpression> m_pInit;
|
|
};
|
|
|
|
class CXFA_FMExpExpression final : public CXFA_FMExpression {
|
|
public:
|
|
explicit CXFA_FMExpExpression(
|
|
std::unique_ptr<CXFA_FMSimpleExpression> pExpression);
|
|
~CXFA_FMExpExpression() override;
|
|
|
|
bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override;
|
|
|
|
private:
|
|
std::unique_ptr<CXFA_FMSimpleExpression> m_pExpression;
|
|
};
|
|
|
|
class CXFA_FMBlockExpression final : public CXFA_FMExpression {
|
|
public:
|
|
CXFA_FMBlockExpression(
|
|
std::vector<std::unique_ptr<CXFA_FMExpression>>&& pExpressionList);
|
|
~CXFA_FMBlockExpression() override;
|
|
|
|
bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override;
|
|
|
|
private:
|
|
std::vector<std::unique_ptr<CXFA_FMExpression>> m_ExpressionList;
|
|
};
|
|
|
|
class CXFA_FMDoExpression final : public CXFA_FMExpression {
|
|
public:
|
|
explicit CXFA_FMDoExpression(std::unique_ptr<CXFA_FMExpression> pList);
|
|
~CXFA_FMDoExpression() override;
|
|
|
|
bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override;
|
|
|
|
private:
|
|
std::unique_ptr<CXFA_FMExpression> m_pList;
|
|
};
|
|
|
|
class CXFA_FMIfExpression final : public CXFA_FMExpression {
|
|
public:
|
|
CXFA_FMIfExpression(
|
|
std::unique_ptr<CXFA_FMSimpleExpression> pExpression,
|
|
std::unique_ptr<CXFA_FMExpression> pIfExpression,
|
|
std::vector<std::unique_ptr<CXFA_FMIfExpression>> pElseIfExpressions,
|
|
std::unique_ptr<CXFA_FMExpression> pElseExpression);
|
|
~CXFA_FMIfExpression() override;
|
|
|
|
bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override;
|
|
|
|
private:
|
|
std::unique_ptr<CXFA_FMSimpleExpression> m_pExpression;
|
|
std::unique_ptr<CXFA_FMExpression> m_pIfExpression;
|
|
std::vector<std::unique_ptr<CXFA_FMIfExpression>> m_pElseIfExpressions;
|
|
std::unique_ptr<CXFA_FMExpression> m_pElseExpression;
|
|
};
|
|
|
|
class CXFA_FMWhileExpression final : public CXFA_FMExpression {
|
|
public:
|
|
CXFA_FMWhileExpression(std::unique_ptr<CXFA_FMSimpleExpression> pCodition,
|
|
std::unique_ptr<CXFA_FMExpression> pExpression);
|
|
~CXFA_FMWhileExpression() override;
|
|
|
|
bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override;
|
|
|
|
private:
|
|
std::unique_ptr<CXFA_FMSimpleExpression> m_pCondition;
|
|
std::unique_ptr<CXFA_FMExpression> m_pExpression;
|
|
};
|
|
|
|
class CXFA_FMBreakExpression final : public CXFA_FMExpression {
|
|
public:
|
|
CXFA_FMBreakExpression();
|
|
~CXFA_FMBreakExpression() override;
|
|
|
|
bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override;
|
|
};
|
|
|
|
class CXFA_FMContinueExpression final : public CXFA_FMExpression {
|
|
public:
|
|
CXFA_FMContinueExpression();
|
|
~CXFA_FMContinueExpression() override;
|
|
|
|
bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override;
|
|
};
|
|
|
|
class CXFA_FMForExpression final : public CXFA_FMExpression {
|
|
public:
|
|
CXFA_FMForExpression(WideStringView wsVariant,
|
|
std::unique_ptr<CXFA_FMSimpleExpression> pAssignment,
|
|
std::unique_ptr<CXFA_FMSimpleExpression> pAccessor,
|
|
int32_t iDirection,
|
|
std::unique_ptr<CXFA_FMSimpleExpression> pStep,
|
|
std::unique_ptr<CXFA_FMExpression> pList);
|
|
~CXFA_FMForExpression() override;
|
|
|
|
bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override;
|
|
|
|
private:
|
|
WideStringView m_wsVariant;
|
|
std::unique_ptr<CXFA_FMSimpleExpression> m_pAssignment;
|
|
std::unique_ptr<CXFA_FMSimpleExpression> m_pAccessor;
|
|
const bool m_bDirection;
|
|
std::unique_ptr<CXFA_FMSimpleExpression> m_pStep;
|
|
std::unique_ptr<CXFA_FMExpression> m_pList;
|
|
};
|
|
|
|
class CXFA_FMForeachExpression final : public CXFA_FMExpression {
|
|
public:
|
|
// Takes ownership of |pAccessors|.
|
|
CXFA_FMForeachExpression(
|
|
WideStringView wsIdentifier,
|
|
std::vector<std::unique_ptr<CXFA_FMSimpleExpression>>&& pAccessors,
|
|
std::unique_ptr<CXFA_FMExpression> pList);
|
|
~CXFA_FMForeachExpression() override;
|
|
|
|
bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override;
|
|
|
|
private:
|
|
WideStringView m_wsIdentifier;
|
|
std::vector<std::unique_ptr<CXFA_FMSimpleExpression>> m_pAccessors;
|
|
std::unique_ptr<CXFA_FMExpression> m_pList;
|
|
};
|
|
|
|
#endif // XFA_FXFA_FM2JS_CXFA_FMEXPRESSION_H_
|