diff options
Diffstat (limited to 'xfa/fxfa')
-rw-r--r-- | xfa/fxfa/parser/cxfa_object.cpp | 21 | ||||
-rw-r--r-- | xfa/fxfa/parser/cxfa_object.h | 25 | ||||
-rw-r--r-- | xfa/fxfa/parser/cxfa_thisproxy.cpp | 8 | ||||
-rw-r--r-- | xfa/fxfa/parser/cxfa_thisproxy.h | 2 |
4 files changed, 31 insertions, 25 deletions
diff --git a/xfa/fxfa/parser/cxfa_object.cpp b/xfa/fxfa/parser/cxfa_object.cpp index 920e33860e..6daf3aa7b4 100644 --- a/xfa/fxfa/parser/cxfa_object.cpp +++ b/xfa/fxfa/parser/cxfa_object.cpp @@ -15,6 +15,7 @@ #include "xfa/fxfa/cxfa_ffnotify.h" #include "xfa/fxfa/parser/cxfa_document.h" #include "xfa/fxfa/parser/cxfa_node.h" +#include "xfa/fxfa/parser/cxfa_thisproxy.h" #include "xfa/fxfa/parser/cxfa_treelist.h" CXFA_Object::CXFA_Object(CXFA_Document* pDocument, @@ -43,6 +44,10 @@ WideString CXFA_Object::GetSOMExpression() { return pScriptContext->GetSomExpression(ToNode(this)); } +CXFA_List* CXFA_Object::AsList() { + return IsList() ? static_cast<CXFA_List*>(this) : nullptr; +} + CXFA_Node* CXFA_Object::AsNode() { return IsNode() ? static_cast<CXFA_Node*>(this) : nullptr; } @@ -51,18 +56,22 @@ CXFA_TreeList* CXFA_Object::AsTreeList() { return IsTreeList() ? static_cast<CXFA_TreeList*>(this) : nullptr; } -const CXFA_Node* CXFA_Object::AsNode() const { - return IsNode() ? static_cast<const CXFA_Node*>(this) : nullptr; +CXFA_ThisProxy* CXFA_Object::AsThisProxy() { + return IsThisProxy() ? static_cast<CXFA_ThisProxy*>(this) : nullptr; } -const CXFA_TreeList* CXFA_Object::AsTreeList() const { - return IsTreeList() ? static_cast<const CXFA_TreeList*>(this) : nullptr; +CXFA_List* ToList(CXFA_Object* pObj) { + return pObj ? pObj->AsList() : nullptr; } CXFA_Node* ToNode(CXFA_Object* pObj) { return pObj ? pObj->AsNode() : nullptr; } -const CXFA_Node* ToNode(const CXFA_Object* pObj) { - return pObj ? pObj->AsNode() : nullptr; +CXFA_TreeList* ToTreeList(CXFA_Object* pObj) { + return pObj ? pObj->AsTreeList() : nullptr; +} + +CXFA_ThisProxy* ToThisProxy(CXFA_Object* pObj) { + return pObj ? pObj->AsThisProxy() : nullptr; } diff --git a/xfa/fxfa/parser/cxfa_object.h b/xfa/fxfa/parser/cxfa_object.h index 023516a05e..173bf23f25 100644 --- a/xfa/fxfa/parser/cxfa_object.h +++ b/xfa/fxfa/parser/cxfa_object.h @@ -24,12 +24,14 @@ enum class XFA_ObjectType { TreeList, ContainerNode, ContentNode, - VariablesThis + ThisProxy, }; class CJX_Object; class CXFA_Document; +class CXFA_List; class CXFA_Node; +class CXFA_ThisProxy; class CXFA_TreeList; class CXFA_Object : public CFXJSE_HostObject { @@ -42,6 +44,10 @@ class CXFA_Object : public CFXJSE_HostObject { CXFA_Document* GetDocument() const { return m_pDocument.Get(); } XFA_ObjectType GetObjectType() const { return m_objectType; } + bool IsList() const { + return m_objectType == XFA_ObjectType::List || + m_objectType == XFA_ObjectType::TreeList; + } bool IsNode() const { return m_objectType == XFA_ObjectType::Node || m_objectType == XFA_ObjectType::NodeC || @@ -50,7 +56,7 @@ class CXFA_Object : public CFXJSE_HostObject { m_objectType == XFA_ObjectType::TextNode || m_objectType == XFA_ObjectType::ContainerNode || m_objectType == XFA_ObjectType::ContentNode || - m_objectType == XFA_ObjectType::VariablesThis; + m_objectType == XFA_ObjectType::ThisProxy; } bool IsTreeList() const { return m_objectType == XFA_ObjectType::TreeList; } bool IsContentNode() const { @@ -61,15 +67,12 @@ class CXFA_Object : public CFXJSE_HostObject { } bool IsModelNode() const { return m_objectType == XFA_ObjectType::ModelNode; } bool IsNodeV() const { return m_objectType == XFA_ObjectType::NodeV; } - bool IsVariablesThis() const { - return m_objectType == XFA_ObjectType::VariablesThis; - } + bool IsThisProxy() const { return m_objectType == XFA_ObjectType::ThisProxy; } + CXFA_List* AsList(); CXFA_Node* AsNode(); CXFA_TreeList* AsTreeList(); - - const CXFA_Node* AsNode() const; - const CXFA_TreeList* AsTreeList() const; + CXFA_ThisProxy* AsThisProxy(); CJX_Object* JSObject() { return m_pJSObject.get(); } const CJX_Object* JSObject() const { return m_pJSObject.get(); } @@ -99,11 +102,13 @@ class CXFA_Object : public CFXJSE_HostObject { const XFA_Element m_elementType; const uint32_t m_elementNameHash; const WideStringView m_elementName; - std::unique_ptr<CJX_Object> m_pJSObject; }; +// Helper functions that permit nullptr arguments. +CXFA_List* ToList(CXFA_Object* pObj); CXFA_Node* ToNode(CXFA_Object* pObj); -const CXFA_Node* ToNode(const CXFA_Object* pObj); +CXFA_TreeList* ToTreeList(CXFA_Object* pObj); +CXFA_ThisProxy* ToThisProxy(CXFA_Object* pObj); #endif // XFA_FXFA_PARSER_CXFA_OBJECT_H_ diff --git a/xfa/fxfa/parser/cxfa_thisproxy.cpp b/xfa/fxfa/parser/cxfa_thisproxy.cpp index a3593e99b5..60a90b0931 100644 --- a/xfa/fxfa/parser/cxfa_thisproxy.cpp +++ b/xfa/fxfa/parser/cxfa_thisproxy.cpp @@ -10,15 +10,9 @@ #include "third_party/base/ptr_util.h" #include "xfa/fxfa/parser/cxfa_node.h" -// static -CXFA_ThisProxy* CXFA_ThisProxy::FromCXFAObject(CXFA_Object* that) { - return that && that->IsVariablesThis() ? static_cast<CXFA_ThisProxy*>(that) - : nullptr; -} - CXFA_ThisProxy::CXFA_ThisProxy(CXFA_Node* pThisNode, CXFA_Node* pScriptNode) : CXFA_Object(pThisNode->GetDocument(), - XFA_ObjectType::VariablesThis, + XFA_ObjectType::ThisProxy, XFA_Element::Unknown, WideStringView(), pdfium::MakeUnique<CJX_Object>(this)), diff --git a/xfa/fxfa/parser/cxfa_thisproxy.h b/xfa/fxfa/parser/cxfa_thisproxy.h index e86a6b5534..197a97da67 100644 --- a/xfa/fxfa/parser/cxfa_thisproxy.h +++ b/xfa/fxfa/parser/cxfa_thisproxy.h @@ -13,8 +13,6 @@ class CXFA_ThisProxy : public CXFA_Object { public: - static CXFA_ThisProxy* FromCXFAObject(CXFA_Object* that); - CXFA_ThisProxy(CXFA_Node* pThisNode, CXFA_Node* pScriptNode); ~CXFA_ThisProxy() override; |