Пример #1
0
        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);
        }
Пример #2
0
        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));
        }