修复了脚本语言中构造器赋值的 bug

This commit is contained in:
fengjiayi
2025-07-16 16:16:19 +08:00
parent 01ab905155
commit 88a82046b8
16 changed files with 825 additions and 1376 deletions

View File

@@ -15,41 +15,40 @@ namespace Serein.Script.Node
public bool IsOverlay { get; set; }
/// <summary>
/// 类名称
/// 类名称
/// </summary>
public string ClassName { get; }
public TypeNode ClassType { get; }
/// <summary>
/// 字段名称及字段类型
/// 类型中的属性
/// </summary>
[Obsolete("此属性已经过时,将会改为Dictionary<string, string>", false)]
public Dictionary<string, Type> Fields { get; }
/// <summary>
/// 字段名称及字段类型(Kvp[fididName:fidleTypeName])
/// </summary>
public Dictionary<string, string> FieldInfos { get; }
public Dictionary<string, TypeNode> Propertys { get; }
public ClassTypeDefinitionNode(Dictionary<string, string> fields, string className)
public ClassTypeDefinitionNode(Dictionary<string, TypeNode> propertys, TypeNode className)
{
this.FieldInfos = fields;
this.ClassName = className;
this.Propertys = propertys;
this.ClassType = className;
}
[Obsolete("此构造方法已经过时,可能在下一个版本中移除", false)]
public ClassTypeDefinitionNode(Dictionary<string, Type> fields, string className)
{
this.Fields = fields;
this.ClassName = className;
}
[Obsolete("此构造方法已经过时,可能在下一个版本中移除", false)]
public ClassTypeDefinitionNode(Dictionary<string, Type> fields, string className, bool isOverlay)
{
this.Fields = fields;
this.ClassName = className;
IsOverlay = isOverlay;
}
/* /// <summary>
/// 字段名称及字段类型
/// </summary>
[Obsolete("此属性已经过时将会改为Dictionary<string, string>", false)]
public Dictionary<TypeNode, Type> Fields { get; }
*/
/* /// <summary>
/// 字段名称及字段类型(Kvp[fididName:fidleTypeName])
/// </summary>
public Dictionary<TypeNode, string> FieldInfos { get; }
*/
//[Obsolete("此构造方法已经过时,可能在下一个版本中移除", false)]
}
}

View File

@@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Serein.Script.Node
{
/// <summary>
/// 构造器对对象成员赋值
/// </summary>
public class CtorAssignmentNode : ASTNode
{
/// <summary>
/// 成员来源类型
/// </summary>
public TypeNode Class { get; }
/// <summary>
/// 成员名称
/// </summary>
public string MemberName { get; }
/// <summary>
/// 值来源
/// </summary>
public ASTNode Value { get; }
/// <summary>
/// 构造器赋值
/// </summary>
/// <param name="typeNode">成员来源类型</param>
/// <param name="memberName">成员名称</param>
/// <param name="value">成员值来源</param>
public CtorAssignmentNode(TypeNode typeNode, string memberName, ASTNode value)
{
Class = typeNode;
MemberName = memberName;
Value = value;
}
}
}

View File

@@ -12,19 +12,31 @@ namespace Serein.Script.Node
public class ObjectInstantiationNode : ASTNode
{
/// <summary>
/// 类型名称
/// 类型来源
/// </summary>
public string TypeName { get; }
public TypeNode Type { get; }
/// <summary>
/// 构造方法的参数来源
/// </summary>
public List<ASTNode> Arguments { get; }
public ObjectInstantiationNode(string typeName, List<ASTNode> arguments)
/// <summary>
/// 构造器赋值
/// </summary>
public List<CtorAssignmentNode> CtorAssignments { get; private set; } = [];
public ObjectInstantiationNode(TypeNode type, List<ASTNode> arguments)
{
this.TypeName = typeName;
this.Type = type;
this.Arguments = arguments;
}
public ObjectInstantiationNode SetCtorAssignments(List<CtorAssignmentNode> ctorAssignments)
{
CtorAssignments = ctorAssignments;
return this;
}
}
}

View File

@@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Serein.Script.Node
{
/// <summary>
/// 类型节点
/// </summary>
public class TypeNode : ASTNode
{
public string TypeName { get; }
public TypeNode(string typeName)
{
TypeName = typeName;
}
}
}