#ifndef COMPILER_OUTPUT_H_INCLUDED
#define COMPILER_OUTPUT_H_INCLUDED

#include "literals.hpp"

#include <vector>

#include <components/interpreter/types.hpp>

namespace Compiler
{
    class Locals;

    class Output
    {
            Literals mLiterals;
            std::vector<Interpreter::Type_Code> mCode;            
            Locals& mLocals;
                
        public:
        
            Output (Locals& locals);
    
            void getCode (std::vector<Interpreter::Type_Code>& code) const;
            ///< store generated code in \a code.

            const Literals& getLiterals() const;

            const Locals& getLocals() const;
            
            const std::vector<Interpreter::Type_Code>& getCode() const;
            
            Literals& getLiterals();

            std::vector<Interpreter::Type_Code>& getCode();
            
            Locals& getLocals();
            
            void clear();
    };
}

#endif