mirror of
https://gitee.com/langsisi_admin/serein-flow
synced 2026-03-03 08:10:47 +08:00
修复了脚本语言中构造器赋值的 bug
This commit is contained in:
@@ -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)]
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
46
Serein.Script/Node/CtorAssignmentNode.cs
Normal file
46
Serein.Script/Node/CtorAssignmentNode.cs
Normal 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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
22
Serein.Script/Node/TypeNode.cs
Normal file
22
Serein.Script/Node/TypeNode.cs
Normal 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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user