diff --git a/src/apps/debugger/value/value_nodes/ExpressionValueNode.cpp b/src/apps/debugger/value/value_nodes/ExpressionValueNode.cpp new file mode 100644 index 0000000000..899cba17f7 --- /dev/null +++ b/src/apps/debugger/value/value_nodes/ExpressionValueNode.cpp @@ -0,0 +1,94 @@ +/* + * Copyright 2014, Rene Gollent, rene@gollent.com + * Distributed under the terms of the MIT License. + */ + + +#include "ExpressionValueNode.h" + +#include + +#include "Type.h" + + +// #pragma mark - ExpressionValueNode + + +ExpressionValueNode::ExpressionValueNode(ExpressionValueNodeChild* nodeChild, + Type* type) + : + ChildlessValueNode(nodeChild), + fType(type) +{ + fType->AcquireReference(); +} + + +ExpressionValueNode::~ExpressionValueNode() +{ + fType->ReleaseReference(); +} + + +Type* +ExpressionValueNode::GetType() const +{ + return fType; +} + + +status_t +ExpressionValueNode::ResolvedLocationAndValue(ValueLoader* valueLoader, + ValueLocation*& _location, Value*& _value) +{ + return B_NOT_SUPPORTED; +} + + +// #pragma mark - ExpressionValueNodeChild + + +ExpressionValueNodeChild::ExpressionValueNodeChild(const BString& expression, + Type* resultType) + : + fExpression(expression), + fResultType(resultType) +{ + fResultType->AcquireReference(); +} + + +ExpressionValueNodeChild::~ExpressionValueNodeChild() +{ + fResultType->ReleaseReference(); +} + + +const BString& +ExpressionValueNodeChild::Name() const +{ + return fExpression; +} + + +Type* +ExpressionValueNodeChild::GetType() const +{ + return fResultType; +} + + +ValueNode* +ExpressionValueNodeChild::Parent() const +{ + return NULL; +} + + +status_t +ExpressionValueNodeChild::ResolveLocation(ValueLoader* valueLoader, + ValueLocation*& _location) +{ + _location = NULL; + return B_OK; +} diff --git a/src/apps/debugger/value/value_nodes/ExpressionValueNode.h b/src/apps/debugger/value/value_nodes/ExpressionValueNode.h new file mode 100644 index 0000000000..f1a01da2a8 --- /dev/null +++ b/src/apps/debugger/value/value_nodes/ExpressionValueNode.h @@ -0,0 +1,56 @@ +/* + * Copyright 2014, Rene Gollent, rene@gollent.com. + * Distributed under the terms of the MIT License. + */ +#ifndef EXPRESSION_VALUE_NODE_H +#define EXPRESSION_VALUE_NODE_H + + +#include "ValueNode.h" + + +class ExpressionValueNodeChild; + + +class ExpressionValueNode : public ChildlessValueNode { +public: + ExpressionValueNode( + ExpressionValueNodeChild* nodeChild, + Type* type); + virtual ~ExpressionValueNode(); + + virtual Type* GetType() const; + + virtual status_t ResolvedLocationAndValue( + ValueLoader* valueLoader, + ValueLocation*& _location, + Value*& _value); + +private: + Type* fType; +}; + + +class ExpressionValueNodeChild : public ValueNodeChild { +public: + ExpressionValueNodeChild( + const BString& expression, + Type* type); + virtual ~ExpressionValueNodeChild(); + + virtual const BString& Name() const; + virtual Type* GetType() const; + virtual ValueNode* Parent() const; + + const BString& GetExpression() const { return fExpression; }; + + virtual status_t ResolveLocation(ValueLoader* valueLoader, + ValueLocation*& _location); + +private: + BString fExpression; + Type* fResultType; +}; + + +#endif // EXPRESSION_VALUE_NODE_H