From d1b855144e3a0ae06131d52520ccf988c68ef7cd Mon Sep 17 00:00:00 2001 From: 0x4261756D <38735823+0x4261756D@users.noreply.github.com> Date: Wed, 21 Feb 2024 15:05:06 +0100 Subject: [PATCH] Make parser nodes json serializable --- Parser.cs | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/Parser.cs b/Parser.cs index 9e068f5..9ab4064 100644 --- a/Parser.cs +++ b/Parser.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Text.Json.Serialization; namespace luaaaaah; @@ -16,6 +17,21 @@ class Parser public RetstatNode? retstat; public CodeRegion startRegion = startRegion, endRegion = endRegion; } + [JsonDerivedType(typeof(Semicolon), typeDiscriminator: "st Semicolon")] + [JsonDerivedType(typeof(Assignment), typeDiscriminator: "st Assignment")] + [JsonDerivedType(typeof(Functioncall), typeDiscriminator: "st Functioncall")] + [JsonDerivedType(typeof(Label), typeDiscriminator: "st Label")] + [JsonDerivedType(typeof(Break), typeDiscriminator: "st Break")] + [JsonDerivedType(typeof(Goto), typeDiscriminator: "st Goto")] + [JsonDerivedType(typeof(Do), typeDiscriminator: "st Do")] + [JsonDerivedType(typeof(While), typeDiscriminator: "st While")] + [JsonDerivedType(typeof(Repeat), typeDiscriminator: "st Repeat")] + [JsonDerivedType(typeof(If), typeDiscriminator: "st If")] + [JsonDerivedType(typeof(ForNumerical), typeDiscriminator: "st ForNum")] + [JsonDerivedType(typeof(ForGeneric), typeDiscriminator: "st ForGen")] + [JsonDerivedType(typeof(Function), typeDiscriminator: "st Function")] + [JsonDerivedType(typeof(LocalFunction), typeDiscriminator: "st LocalFunction")] + [JsonDerivedType(typeof(Local), typeDiscriminator: "st Local")] public abstract class StatNode(CodeRegion startRegion, CodeRegion endRegion) { public CodeRegion startRegion = startRegion, endRegion = endRegion; @@ -156,6 +172,8 @@ class Parser public List vars = vars; public CodeRegion startRegion = startRegion, endRegion = endRegion; } + [JsonDerivedType(typeof(Normal), typeDiscriminator: "s Normal")] + [JsonDerivedType(typeof(Functioncall), typeDiscriminator: "s Functioncall")] public abstract class SuffixexpNode(CodeRegion startRegion, CodeRegion endRegion) { public CodeRegion startRegion = startRegion, endRegion = endRegion; @@ -168,6 +186,9 @@ class Parser public FunctioncallNode node = node; } } + [JsonDerivedType(typeof(Bracketed), typeDiscriminator: "a Bracketed")] + [JsonDerivedType(typeof(Tableconstructor), typeDiscriminator: "a Tableconstructor")] + [JsonDerivedType(typeof(Literal), typeDiscriminator: "a Literal")] public abstract class ArgsNode(CodeRegion startRegion, CodeRegion endRegion) { public CodeRegion startRegion = startRegion, endRegion = endRegion; @@ -184,6 +205,17 @@ class Parser public string name = name; } } + [JsonDerivedType(typeof(Nil), typeDiscriminator: "e Nil")] + [JsonDerivedType(typeof(False), typeDiscriminator: "e True")] + [JsonDerivedType(typeof(True), typeDiscriminator: "e False")] + [JsonDerivedType(typeof(Numeral), typeDiscriminator: "e Numeral")] + [JsonDerivedType(typeof(LiteralString), typeDiscriminator: "e Literal")] + [JsonDerivedType(typeof(Varargs), typeDiscriminator: "e Varargs")] + [JsonDerivedType(typeof(Functiondef), typeDiscriminator: "e Functiondef")] + [JsonDerivedType(typeof(Suffixexp), typeDiscriminator: "e Suffixexp")] + [JsonDerivedType(typeof(Tableconstructor), typeDiscriminator: "e Tableconstructor")] + [JsonDerivedType(typeof(Unop), typeDiscriminator: "e Unop")] + [JsonDerivedType(typeof(Binop), typeDiscriminator: "e Binop")] public abstract class ExpNode(CodeRegion startRegion, CodeRegion endRegion) { public CodeRegion startRegion = startRegion, endRegion = endRegion; @@ -244,6 +276,9 @@ class Parser public List attnames = attnames; public CodeRegion startRegion = startRegion, endRegion = endRegion; } + [JsonDerivedType(typeof(Name), typeDiscriminator: "v Name")] + [JsonDerivedType(typeof(Indexed), typeDiscriminator: "v Indexed")] + [JsonDerivedType(typeof(Member), typeDiscriminator: "v Member")] public abstract class VarNode(CodeRegion startRegion, CodeRegion endRegion) { public CodeRegion startRegion = startRegion, endRegion = endRegion; @@ -326,6 +361,8 @@ class Parser public string name = name; public CodeRegion startRegion = startRegion, endRegion = endRegion; } + [JsonDerivedType(typeof(Name), typeDiscriminator: "sfp Name")] + [JsonDerivedType(typeof(BracketedExp), typeDiscriminator: "sfp BracketedExp")] public abstract class SuffixexpFirstPart(CodeRegion startRegion, CodeRegion endRegion) { public CodeRegion startRegion = startRegion, endRegion = endRegion; @@ -338,6 +375,10 @@ class Parser public ExpNode node = node; } } + [JsonDerivedType(typeof(Dot))] + [JsonDerivedType(typeof(Indexed))] + [JsonDerivedType(typeof(Args))] + [JsonDerivedType(typeof(ArgsFirstArg))] public abstract class SuffixexpSuffix(CodeRegion startRegion, CodeRegion endRegion) { public CodeRegion startRegion = startRegion, endRegion = endRegion; @@ -369,6 +410,9 @@ class Parser public ArgsNode rest = rest; public CodeRegion startRegion = startRegion, endRegion = endRegion; } + [JsonDerivedType(typeof(IndexedAssignment))] + [JsonDerivedType(typeof(Assignment))] + [JsonDerivedType(typeof(Exp))] public abstract class FieldNode(CodeRegion startRegion, CodeRegion endRegion) { public CodeRegion startRegion = startRegion, endRegion = endRegion;