Skip to content

Commit b9849e9

Browse files
committed
LuaTableTextWriter should support writing fields outside table.
This will prevent LField.ToString() from throwing writer exception.
1 parent bf356c8 commit b9849e9

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

Luaon.NET/LuaTableTextWriter.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ private enum Token
5050
// @formatter:off
5151
/* TableStart TableEnd KeyStart KeyEnd Literal*/
5252
/* Unknown */ new[] {State.Error, State.Error, State.Error, State.Error, State.Error},
53-
/* Start */ new[] {State.TableStart, State.Error, State.Error, State.Error, State.Start},
53+
/* Start */ new[] {State.TableStart, State.Error, State.KeyStart, State.Error, State.FieldStart},
5454
/* TableStart */ new[] {State.TableStart, State.Unknown, State.KeyStart, State.Error, State.FieldStart},
5555
/* FieldStart */ new[] {State.TableStart, State.Unknown, State.KeyStart, State.Error, State.FieldStart},
5656
/* KeyStart */ new[] {State.TableStart, State.Error, State.Error, State.Error, State.Key},
@@ -231,7 +231,6 @@ public virtual void WriteEndTable()
231231
/// </summary>
232232
public virtual void WriteStartKey()
233233
{
234-
AssertContainerType(LuaContainerType.Table);
235234
DelimitLastValue(Token.KeyStart);
236235
Writer.Write('[');
237236
Push(LuaContainerType.Key);
@@ -263,7 +262,6 @@ public virtual void WriteKey(string key)
263262
if (key == null) throw new ArgumentNullException(nameof(key));
264263
if (key.Length <= MaxUnquotedNameLength && LuaConvert.IsValidIdentifier(key))
265264
{
266-
AssertContainerType(LuaContainerType.Table);
267265
DelimitLastValue(Token.KeyStart);
268266
GotoNextState(Token.Literal);
269267
Writer.Write(key);

XUnitTestProject1/Tests/LuaTableTextWriterTests.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,5 +102,29 @@ public void WriteNestedTableTest()
102102
}
103103
}
104104

105+
[Fact]
106+
public void WriteOutsideTableTest()
107+
{
108+
using (var sw = new StringWriter())
109+
using (var tw = new LuaTableTextWriter(sw))
110+
{
111+
tw.WriteLiteral(123);
112+
113+
tw.WriteStartKey();
114+
tw.WriteLiteral(2);
115+
tw.WriteEndKey();
116+
117+
tw.WriteLiteral(456);
118+
119+
tw.WriteKey("key");
120+
tw.WriteLiteral("value");
121+
122+
tw.WriteLiteral("last");
123+
124+
tw.Flush();
125+
Assert.Equal("123,[2]=456,key=\"value\",\"last\"", sw.ToString());
126+
}
127+
}
128+
105129
}
106130
}

0 commit comments

Comments
 (0)