root/headers/private/debugger/value/value_nodes/ExpressionValueNode.h
/*
 * 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