2024-12-20 23:39:29 +08:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using System.Text;
|
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
|
|
|
|
|
|
namespace Serein.Script.Node
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 类型创建
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class ObjectInstantiationNode : ASTNode
|
|
|
|
|
|
{
|
2025-07-11 20:52:21 +08:00
|
|
|
|
/// <summary>
|
2025-07-16 16:16:19 +08:00
|
|
|
|
/// 类型来源
|
2025-07-11 20:52:21 +08:00
|
|
|
|
/// </summary>
|
2025-07-16 16:16:19 +08:00
|
|
|
|
public TypeNode Type { get; }
|
2025-07-11 20:52:21 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 构造方法的参数来源
|
|
|
|
|
|
/// </summary>
|
2024-12-20 23:39:29 +08:00
|
|
|
|
public List<ASTNode> Arguments { get; }
|
2025-07-16 16:16:19 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 构造器赋值
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public List<CtorAssignmentNode> CtorAssignments { get; private set; } = [];
|
|
|
|
|
|
|
|
|
|
|
|
public ObjectInstantiationNode(TypeNode type, List<ASTNode> arguments)
|
2024-12-20 23:39:29 +08:00
|
|
|
|
{
|
2025-07-16 16:16:19 +08:00
|
|
|
|
this.Type = type;
|
2024-12-20 23:39:29 +08:00
|
|
|
|
this.Arguments = arguments;
|
|
|
|
|
|
}
|
2025-07-16 16:16:19 +08:00
|
|
|
|
|
|
|
|
|
|
public ObjectInstantiationNode SetCtorAssignments(List<CtorAssignmentNode> ctorAssignments)
|
|
|
|
|
|
{
|
|
|
|
|
|
CtorAssignments = ctorAssignments;
|
|
|
|
|
|
return this;
|
|
|
|
|
|
}
|
2025-07-29 14:25:31 +08:00
|
|
|
|
|
|
|
|
|
|
public override string ToString()
|
|
|
|
|
|
{
|
|
|
|
|
|
var arg = string.Join(",", Arguments.Select(p => $"{p}"));
|
|
|
|
|
|
var ctor_arg = string.Join(",", CtorAssignments.Select(p => $"{p}"));
|
|
|
|
|
|
return $"new {Type}({arg}){ctor_arg}";
|
|
|
|
|
|
}
|
2024-12-20 23:39:29 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|