private object Procedure_DefReturn(Block block) { string funcName = Lua.VariableNames.GetName(block.GetFieldValue("NAME"), Define.PROCEDURE_CATEGORY_NAME); string branch = Lua.Generator.StatementToCode(block, "STACK", ""); string returnValue = Lua.Generator.ValueToCode(block, "RETURN", Lua.ORDER_NONE); if (!string.IsNullOrEmpty(returnValue)) { returnValue = " return " + returnValue + "\n"; } StringBuilder argumentSB = new StringBuilder(); List <string> arguments = ProcedureDB.GetProcedureArguments(block); for (int i = 0; i < arguments.Count; i++) { argumentSB.Append(Lua.VariableNames.GetName(arguments[i], Define.VARIABLE_CATEGORY_NAME)); if (i < arguments.Count - 1) { argumentSB.Append(", "); } } string code = string.Format("function {0}({1})\n{2}{3}end\n", funcName, argumentSB.ToString(), branch, returnValue); code = Lua.Generator.Scrub(block, code); // Add % so as not to collide with helper functions in definitions list. Lua.Generator.AddFunction('%' + funcName, code); return(null); }
private CodeStruct Procedure_CallReturn(Block block) { // Call a procedure with a return value. string funcName = Lua.VariableNames.GetName(block.GetFieldValue("NAME"), Define.PROCEDURE_CATEGORY_NAME); StringBuilder argumentSB = new StringBuilder(); List <string> arguments = ProcedureDB.GetProcedureArguments(block); for (int i = 0; i < arguments.Count; i++) { argumentSB.Append(Lua.Generator.ValueToCode(block, "ARG" + i, Lua.ORDER_NONE, "nil")); if (i < arguments.Count - 1) { argumentSB.Append(", "); } } string code = string.Format("{0}({1})", funcName, argumentSB.ToString()); return(new CodeStruct(code, Lua.ORDER_HIGH)); }