diff options
Merge commit '6e19bb560d474736d45f5be011ff0830c7019991' as 'spasm'
1 files changed, 51 insertions, 0 deletions
| -rw-r--r-- | spasm/src/frames.hpp | 51 |
diff --git a/spasm/src/frames.hpp b/spasm/src/frames.hpp new file mode 100644 index 0000000..14d1d14 --- /dev/null +++ b/spasm/src/frames.hpp @@ -0,0 +1,51 @@ +#ifndef FRAMES_HPP +#define FRAMES_HPP + +#include <stack> + +#include "types.hpp" + +namespace SpasmImpl +{ +//! Class representing the stack frame for a function +/*! +** The class is implemented as a simple stack of frames while each frame +** is built up by a number of data_t objects +*/ +class FrameStack +{ + public: + FrameStack(); + FrameStack(const FrameStack&); + ~FrameStack(); + FrameStack& operator=(const FrameStack&); + + const data_t& operator[](size_t) const; + data_t& operator[](size_t); + void pop_frame(); + void new_frame(size_t); + bool empty() const; + + private: + //! pointer to the base of the stack + data_t* base_ptr; + + //! pointer to the beginning of the current frame + data_t* frame_ptr; + + //! size of the whole stack in data_t objects + size_t g_size; + + //! size of the current frame in data_t objects + size_t c_size; + + //! stack of the offsets between frames in the stack. + std::stack<size_t> fstack; + + void copy_fstack(const FrameStack&); + void delete_fstack(); +}; + +} // namespace SpasmImpl + +#endif // #ifndef FRAMES_HPP |
