package de.fuberlin.optimierung.commands; import de.fuberlin.optimierung.*; /* * Syntax: ret <type> <value> ; Return a value from a non-void function ret void ; Return from void function */ public class LLVM_ReturnCommand extends LLVM_GenericCommand{ public LLVM_ReturnCommand(String cmdLine, LLVM_GenericCommand predecessor, LLVM_Block block){ super(predecessor, block, cmdLine); StringBuilder cmd = new StringBuilder(cmdLine); parseEraseComment(cmd); parseEraseString(cmd, "ret"); if (parseOptionalString(cmd, "void")){ setOperation(LLVM_Operation.RET); operands.add(new LLVM_Parameter("void", "void")); }else{ setOperation(LLVM_Operation.RET_CODE); String type = parseReadType(cmd); String value = parseReadValue(cmd); operands.add(new LLVM_Parameter(value, type)); } if (LLVM_Optimization.DEBUG) System.out.println("Operation generiert: " + this.toString()); } public String toString() { if (operands == null || operands.size() < 1) return null; String cmd_output = "ret "; switch(operation){ case RET : cmd_output += operands.get(0).getTypeString() + " "; break; case RET_CODE : cmd_output += operands.get(0).getTypeString() + " "; cmd_output += operands.get(0).getName() + " "; break; default: return ""; } cmd_output += " " + getComment(); return cmd_output; } }