code: protected Generated genIrExp(IRStatus<SExpIR> expStatus,
  			MergeVisitor mergeVisitor)
  			throws org.overture.codegen.ir.analysis.AnalysisException
  	{
  		StringWriter writer = new StringWriter();
  		SExpIR expCg = expStatus.getIrNode();
  
  		if (expStatus.canBeGenerated())
  		{
  			mergeVisitor.init();
  
  			expCg.apply(mergeVisitor, writer);
  
  			if (mergeVisitor.hasMergeErrors())
  			{
  				return new Generated(mergeVisitor.getMergeErrors());
  			} else if (mergeVisitor.hasUnsupportedTargLangNodes())
  			{
  				return new Generated(new HashSet<VdmNodeInfo>(), mergeVisitor.getUnsupportedInTargLang());
  			} else
  			{
  				String code = writer.toString();
  
  				return new Generated(code);
  			}
  		} else
  		{
  
  			return new Generated(expStatus.getUnsupportedInIr(), new HashSet<IrNodeInfo>());
  		}
  	}
docs: Translates an IR expression into target language code.
  
  @param expStatus
  The IR status that holds the expressions that we want to code generate.
  @param mergeVisitor
  The visitor that translates the IR expression into target language code.
  @return The generated code and data about what has been generated.
  @throws org.overture.codegen.ir.analysis.AnalysisException
  If something goes wrong during the code generation process.