コード例 #1
0
        public static void resume(LuaInterop lua)
        {
            LuaThread co = lua.Argument <LuaThread>(0);

            co.BeginResume(lua.ArgumentCount - 1);
            for (int argument = 0; argument < lua.ArgumentCount - 1; ++argument)
            {
                co.ResumeArgument(argument, lua.Argument(argument));
            }

            int resultCount;

            try
            {
                resultCount = co.Resume(LuaThread.VarResult);
            }
            catch (Exception e)
            {
                lua.BeginReturn(2);
                lua.ReturnResult(0, false);
                lua.ReturnResult(1, e.Message);
                lua.EndReturn();
                return;
            }

            lua.BeginReturn(resultCount + 1);
            lua.ReturnResult(0, true);
            for (int result = 0; result < resultCount; ++result)
            {
                lua.ReturnResult(result + 1, co.ResumeResult(result));
            }
            co.EndResume();
            lua.EndReturn();
        }
コード例 #2
0
ファイル: io.file.cs プロジェクト: edmundmk/apollua
            public void read(LuaInterop lua)
            {
                EnsureReader();

                if (lua.ArgumentCount > 0)
                {
                    List <LuaValue> results = new List <LuaValue>();

                    for (int argument = 0; argument < lua.ArgumentCount; ++argument)
                    {
                        string type = lua.ArgumentType(argument);
                        if (type == "number")
                        {
                            int number = lua.Argument <int>(argument);
                            if (number > 0)
                            {
                                // Read actual number of characters.
                                char[] s     = new char[number];
                                int    count = reader.ReadBlock(s, 0, number);
                                if (count > 0)
                                {
                                    results.Add(new String(s, 0, count));
                                }
                                else
                                {
                                    results.Add(null);
                                }
                            }
                            else
                            {
                                // Check for EOF.
                                if (reader.Peek() != -1)
                                {
                                    results.Add("");
                                }
                                else
                                {
                                    results.Add(null);
                                }
                            }
                        }
                        else
                        {
                            string format = lua.Argument <string>(argument);
                            if (format == "*n")
                            {
                                StringBuilder s = new StringBuilder();

                                // Read a number token from the file.
                                while (Char.IsWhiteSpace(GetChar()))
                                {
                                    Shift();
                                }
                                if (GetChar() == '+' || GetChar() == '-')
                                {
                                    s.Append(Shift());
                                }
                                while (Char.IsDigit(GetChar()) || GetChar() == '.')
                                {
                                    s.Append(Shift());
                                }
                                if (GetChar() == 'e' || GetChar() == 'E')
                                {
                                    s.Append(Shift());
                                    if (GetChar() == '+' || GetChar() == '-')
                                    {
                                        s.Append(Shift());
                                    }
                                }
                                while (Char.IsLetter(GetChar()) || Char.IsNumber(GetChar()) || GetChar() == '_')
                                {
                                    s.Append(Shift());
                                }

                                // Parse the number.
                                int    integerValue;
                                double doubleValue;
                                string v = s.ToString();
                                if (v.StartsWith("0x") && Int32.TryParse(v.Substring(2), NumberStyles.HexNumber, NumberFormatInfo.InvariantInfo, out integerValue))
                                {
                                    results.Add(integerValue);
                                }
                                else if (Int32.TryParse(v, NumberStyles.Number, NumberFormatInfo.InvariantInfo, out integerValue))
                                {
                                    results.Add(integerValue);
                                }
                                else if (Double.TryParse(v, NumberStyles.Float, NumberFormatInfo.InvariantInfo, out doubleValue))
                                {
                                    results.Add(doubleValue);
                                }
                                else
                                {
                                    results.Add(null);
                                }
                            }
                            else if (format == "*a")
                            {
                                results.Add(reader.ReadToEnd() ?? "");
                            }
                            else if (format == "*l")
                            {
                                results.Add(reader.ReadLine());
                            }
                        }
                    }

                    lua.BeginReturn(results.Count);
                    for (int result = 0; result < results.Count; ++result)
                    {
                        lua.ReturnResult(result, results[result]);
                    }
                    lua.EndReturn();
                }
                else
                {
                    lua.Return(reader.ReadLine());
                }
            }