#include <algorithm>
#include <iostream>
#include <cassert>
#include <list>

#include "Generate.h"
#include "SynTree/Declaration.h"

#include "CodeGenerator2.h"

using namespace std;

namespace CodeGen {
    void generate( std::list< Declaration* > translationUnit, std::ostream &os, bool doIntrinsics ) {
	CodeGen::CodeGenerator2 cgv( os );

	for ( std::list<Declaration *>::iterator i = translationUnit.begin(); i != translationUnit.end();  i++ ) {
	    if ( LinkageSpec::isGeneratable( (*i)->get_linkage() ) && (doIntrinsics || ! LinkageSpec::isBuiltin( (*i)->get_linkage() ) ) ) {
		(*i)->accept(cgv);
		cgv.shift_left();
		if ( doSemicolon( *i ) ) {
		    os << ";";
		} // if
		os << std::endl;
	    } // if
	} // for
    }
} // namespace CodeGen
