summaryrefslogtreecommitdiff
path: root/xfa/fxfa/parser
diff options
context:
space:
mode:
Diffstat (limited to 'xfa/fxfa/parser')
-rw-r--r--xfa/fxfa/parser/cxfa_object.cpp21
-rw-r--r--xfa/fxfa/parser/cxfa_object.h25
-rw-r--r--xfa/fxfa/parser/cxfa_thisproxy.cpp8
-rw-r--r--xfa/fxfa/parser/cxfa_thisproxy.h2
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;