mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-11-04 10:56:42 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			75 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#include "output.hpp"
 | 
						|
 | 
						|
#include <algorithm>
 | 
						|
#include <cassert>
 | 
						|
#include <iterator>
 | 
						|
 | 
						|
#include "locals.hpp"
 | 
						|
 | 
						|
namespace Compiler
 | 
						|
{
 | 
						|
    Output::Output(Locals& locals)
 | 
						|
        : mLocals(locals)
 | 
						|
    {
 | 
						|
    }
 | 
						|
 | 
						|
    void Output::getCode(std::vector<Interpreter::Type_Code>& code) const
 | 
						|
    {
 | 
						|
        code.clear();
 | 
						|
 | 
						|
        // header
 | 
						|
        code.push_back(static_cast<Interpreter::Type_Code>(mCode.size()));
 | 
						|
 | 
						|
        assert(mLiterals.getIntegerSize() % 4 == 0);
 | 
						|
        code.push_back(static_cast<Interpreter::Type_Code>(mLiterals.getIntegerSize() / 4));
 | 
						|
 | 
						|
        assert(mLiterals.getFloatSize() % 4 == 0);
 | 
						|
        code.push_back(static_cast<Interpreter::Type_Code>(mLiterals.getFloatSize() / 4));
 | 
						|
 | 
						|
        assert(mLiterals.getStringSize() % 4 == 0);
 | 
						|
        code.push_back(static_cast<Interpreter::Type_Code>(mLiterals.getStringSize() / 4));
 | 
						|
 | 
						|
        // code
 | 
						|
        std::copy(mCode.begin(), mCode.end(), std::back_inserter(code));
 | 
						|
 | 
						|
        // literals
 | 
						|
        mLiterals.append(code);
 | 
						|
    }
 | 
						|
 | 
						|
    const Literals& Output::getLiterals() const
 | 
						|
    {
 | 
						|
        return mLiterals;
 | 
						|
    }
 | 
						|
 | 
						|
    const std::vector<Interpreter::Type_Code>& Output::getCode() const
 | 
						|
    {
 | 
						|
        return mCode;
 | 
						|
    }
 | 
						|
 | 
						|
    const Locals& Output::getLocals() const
 | 
						|
    {
 | 
						|
        return mLocals;
 | 
						|
    }
 | 
						|
 | 
						|
    Literals& Output::getLiterals()
 | 
						|
    {
 | 
						|
        return mLiterals;
 | 
						|
    }
 | 
						|
 | 
						|
    std::vector<Interpreter::Type_Code>& Output::getCode()
 | 
						|
    {
 | 
						|
        return mCode;
 | 
						|
    }
 | 
						|
 | 
						|
    Locals& Output::getLocals()
 | 
						|
    {
 | 
						|
        return mLocals;
 | 
						|
    }
 | 
						|
 | 
						|
    void Output::clear()
 | 
						|
    {
 | 
						|
        mLiterals.clear();
 | 
						|
        mCode.clear();
 | 
						|
        mLocals.clear();
 | 
						|
    }
 | 
						|
}
 |