static ILuaMultiValue _read(int[] opts, StreamReader s, ILuaEnvironment E) { List <ILuaValue> ret = new List <ILuaValue>(); foreach (var item in opts) { switch (item) { case -4: ret.Add(E.Runtime.CreateValue(s.EndOfStream ? null : s.ReadLine() + "\n")); break; case -3: ret.Add(E.Runtime.CreateValue(s.EndOfStream ? null : s.ReadLine())); break; case -2: ret.Add(E.Runtime.CreateValue(s.EndOfStream ? null : s.ReadToEnd())); break; case -1: if (s.EndOfStream) { ret.Add(null); } else { double?d = NetHelpers.ReadNumber(s); if (d.HasValue) { ret.Add(E.Runtime.CreateValue(d.Value)); } else { ret.Add(LuaNil.Nil); } } break; default: if (s.EndOfStream) { ret.Add(null); } else { char[] c = new char[item]; s.Read(c, 0, item); ret.Add(E.Runtime.CreateValue(new string(c))); } break; } } return(E.Runtime.CreateMultiValue(ret.ToArray())); }