Add KBOOT.
This commit is contained in:
97
apps/elftosb/common/EvalContext.h
Normal file
97
apps/elftosb/common/EvalContext.h
Normal file
@@ -0,0 +1,97 @@
|
||||
/*
|
||||
* File: EvalContext.h
|
||||
*
|
||||
* Copyright (c) Freescale Semiconductor, Inc. All rights reserved.
|
||||
* See included license file for license details.
|
||||
*/
|
||||
#if !defined(_EvalContext_h_)
|
||||
#define _EvalContext_h_
|
||||
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include "Value.h"
|
||||
#include "int_size.h"
|
||||
#include "SourceFile.h"
|
||||
|
||||
namespace elftosb
|
||||
{
|
||||
/*!
|
||||
* \brief Context for evaluating AST tree and expressions.
|
||||
*
|
||||
* Keeps a map of variable names to integer values. Each integer value has a
|
||||
* size attribute in addition to the actual value. Variables can be locked, which
|
||||
* simply means that they cannot be assigned a new value.
|
||||
*
|
||||
* \todo Switch to using Value instances to keep track of variable values. This
|
||||
* will enable variables to have string values, for one.
|
||||
*/
|
||||
class EvalContext
|
||||
{
|
||||
public:
|
||||
/*!
|
||||
* \brief Abstract interface for a manager of source files.
|
||||
*/
|
||||
class SourceFileManager
|
||||
{
|
||||
public:
|
||||
//! \brief Returns true if a source file with the name \a name exists.
|
||||
virtual bool hasSourceFile(const std::string &name) = 0;
|
||||
|
||||
//! \brief Gets the requested source file.
|
||||
virtual SourceFile *getSourceFile(const std::string &name) = 0;
|
||||
|
||||
//! \brief Returns the default source file, or NULL if none is set.
|
||||
virtual SourceFile *getDefaultSourceFile() = 0;
|
||||
};
|
||||
|
||||
public:
|
||||
//! \brief Constructor.
|
||||
EvalContext();
|
||||
|
||||
//! \brief Destructor.
|
||||
virtual ~EvalContext();
|
||||
|
||||
//! \name Source file manager
|
||||
//@{
|
||||
//! \brief
|
||||
void setSourceFileManager(SourceFileManager *manager) { m_sourcesManager = manager; }
|
||||
//! \brief
|
||||
SourceFileManager *getSourceFileManager() { return m_sourcesManager; }
|
||||
//@}
|
||||
|
||||
//! \name Variables
|
||||
//@{
|
||||
bool isVariableDefined(const std::string &name);
|
||||
uint32_t getVariableValue(const std::string &name);
|
||||
int_size_t getVariableSize(const std::string &name);
|
||||
void setVariable(const std::string &name, uint32_t value, int_size_t size = kWordSize);
|
||||
//@}
|
||||
|
||||
//! \name Locks
|
||||
//@{
|
||||
bool isVariableLocked(const std::string &name);
|
||||
void lockVariable(const std::string &name);
|
||||
void unlockVariable(const std::string &name);
|
||||
//@}
|
||||
|
||||
void dump();
|
||||
|
||||
protected:
|
||||
//! Information about a variable's value.
|
||||
struct variable_info_t
|
||||
{
|
||||
uint32_t m_value; //!< Variable value.
|
||||
int_size_t m_size; //!< Number of bytes
|
||||
bool m_isLocked; //!< Can this variable's value be changed?
|
||||
};
|
||||
|
||||
//! Type to maps between the variable name and its info.
|
||||
typedef std::map<std::string, variable_info_t> variable_map_t;
|
||||
|
||||
SourceFileManager *m_sourcesManager; //!< Interface to source file manager.
|
||||
variable_map_t m_variables; //!< Map of variables to their final values.
|
||||
};
|
||||
|
||||
}; // namespace elftosb
|
||||
|
||||
#endif // _EvalContext_h_
|
||||
Reference in New Issue
Block a user