diff --git a/src/main/java/org/jcnc/snow/compiler/parser/utils/ASTJsonSerializer.java b/src/main/java/org/jcnc/snow/compiler/parser/utils/ASTJsonSerializer.java index b3094c1..80618ce 100644 --- a/src/main/java/org/jcnc/snow/compiler/parser/utils/ASTJsonSerializer.java +++ b/src/main/java/org/jcnc/snow/compiler/parser/utils/ASTJsonSerializer.java @@ -83,7 +83,7 @@ public class ASTJsonSerializer { return switch (n) { // 模块节点 case ModuleNode( - String name, List imports, List globals, List functions, NodeContext _ + String name, List imports, List globals,List structs, List functions, NodeContext _ ) -> { Map map = newNodeMap("Module"); map.put("name", name); @@ -105,9 +105,39 @@ public class ASTJsonSerializer { for (FunctionNode f : functions) { funcs.add(nodeToMap(f)); } + + List lStructs = new ArrayList<>(); + structs.forEach(s -> lStructs.add(nodeToMap(s))); + map.put("structs", lStructs); + map.put("functions", funcs); yield map; } + + // Struct 节点 + case StructNode( + String name, List fields, + FunctionNode init, List methods, NodeContext _ + ) -> { + Map map = newNodeMap("Struct"); + map.put("name", name); + + List lFields = new ArrayList<>(); + fields.forEach(d -> lFields.add(Map.of( + "type", "Field", + "name", d.getName(), + "varType", d.getType()))); + map.put("fields", lFields); + + map.put("init", init == null ? null : nodeToMap(init)); + + List lMethods = new ArrayList<>(); + methods.forEach(f -> lMethods.add(nodeToMap(f))); + map.put("methods", lMethods); + yield map; + } + + // 函数定义节点 case FunctionNode f -> { Map map = newNodeMap("Function");