From 1ab4fb2e872c7c37db6c22a39f09afed69a6a413 Mon Sep 17 00:00:00 2001
From: Luke
Date: Fri, 29 Aug 2025 17:56:44 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E5=AF=B9=E8=B1=A1?=
=?UTF-8?q?=E8=8A=82=E7=82=B9=E7=9A=84=E5=88=9B=E5=BB=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../parser/ast/NewExpressionNode.java | 54 +++++++++++++++++++
1 file changed, 54 insertions(+)
create mode 100644 src/main/java/org/jcnc/snow/compiler/parser/ast/NewExpressionNode.java
diff --git a/src/main/java/org/jcnc/snow/compiler/parser/ast/NewExpressionNode.java b/src/main/java/org/jcnc/snow/compiler/parser/ast/NewExpressionNode.java
new file mode 100644
index 0000000..345c485
--- /dev/null
+++ b/src/main/java/org/jcnc/snow/compiler/parser/ast/NewExpressionNode.java
@@ -0,0 +1,54 @@
+package org.jcnc.snow.compiler.parser.ast;
+
+import org.jcnc.snow.compiler.parser.ast.base.ExpressionNode;
+import org.jcnc.snow.compiler.parser.ast.base.NodeContext;
+
+import java.util.List;
+
+/**
+ * {@code NewExpressionNode}
+ *
+ * 抽象语法树(AST)节点 —— 对象创建表达式。
+ *
new TypeName(arg1, arg2, ...)
+ *
+ *
+ * 语义:在源码中通过 new 关键字实例化某个类型,
+ * 实参列表为构造函数参数。表达式类型通常为对应结构体类型。
+ *
+ *
+ *
+ * 字段说明:
+ *
+ * - {@code typeName} —— 创建对象的目标类型名(如 "Person"、"MyStruct")。
+ * - {@code arguments} —— 构造函数参数表达式列表(可为空)。
+ * - {@code ctx} —— 源码位置上下文(行列信息,便于报错和调试定位)。
+ *
+ *
+ *
+ *
+ * 该类型为 Java record,天然不可变,构造参数即为字段名,自动生成 getter。
+ *
+ *
+ * @param typeName 目标类型名
+ * @param arguments 构造参数表达式列表
+ * @param ctx 源代码位置信息
+ */
+public record NewExpressionNode(
+ String typeName,
+ List arguments,
+ NodeContext ctx
+) implements ExpressionNode {
+
+ /**
+ * 获取本节点的源代码位置信息(行号、列号等)。
+ *
+ * 实现 ExpressionNode 接口的抽象方法,便于统一错误处理与调试。
+ *
+ *
+ * @return 当前节点的源代码上下文信息
+ */
+ @Override
+ public NodeContext context() {
+ return ctx;
+ }
+}