mirror of
https://gitee.com/langsisi_admin/serein-flow
synced 2026-03-03 00:00:49 +08:00
1. Script项目添加了数组表达式的支持
2. EmitHelper添加了数组创建委托的构建
This commit is contained in:
@@ -175,6 +175,39 @@ namespace Serein.Script
|
||||
return result;
|
||||
}
|
||||
return await InterpreterCollectionIndexNodeAsync(context, collectionIndexNode);
|
||||
case ArrayDefintionNode arrayDefintionNode:
|
||||
async Task<Array> InterpreterArrayDefintionNodeAsync(ArrayDefintionNode arrayDefintionNode)
|
||||
{
|
||||
var elementNodes = arrayDefintionNode.Elements;
|
||||
var elementCount = elementNodes.Count;
|
||||
if(elementCount == 0)
|
||||
{
|
||||
return Array.Empty<object>();
|
||||
}
|
||||
/*var arrayType = symbolInfos[arrayDefintionNode]; // 从 symbolInfos 中获取数组类型( T[])
|
||||
var eleType = arrayType.MakeArrayType();*/
|
||||
/*if (!ASTDelegateDetails.TryGetValue(arrayDefintionNode, out DelegateDetails? delegateDetails))
|
||||
{
|
||||
delegateDetails = new DelegateDetails(symbolInfos[elementNodes[0]], DelegateDetails.EmitType.ArrayCreate);
|
||||
ASTDelegateDetails[arrayDefintionNode] = delegateDetails;
|
||||
}*/
|
||||
//var arrobj = await delegateDetails.InvokeAsync(null, [elementCount]);
|
||||
|
||||
var elementType1 = symbolInfos[elementNodes[0]];
|
||||
var array = Array.CreateInstance(elementType1, elementCount);
|
||||
for (int i = 0; i < elementNodes.Count; i++)
|
||||
{
|
||||
var elementNode = elementNodes[i];
|
||||
var elementType = symbolInfos[elementNode];
|
||||
var value = await InterpretAsync(context, elementNode);
|
||||
var c = Convert.ChangeType(value, elementType);
|
||||
array.SetValue(c, i);
|
||||
//array[i] = value;
|
||||
}
|
||||
return array;
|
||||
|
||||
}
|
||||
return await InterpreterArrayDefintionNodeAsync(arrayDefintionNode);
|
||||
case ClassTypeDefinitionNode classTypeDefinitionNode: // 类型定义
|
||||
void InterpreterClassTypeDefinitionNode(IScriptInvokeContext context, ClassTypeDefinitionNode classTypeDefinitionNode)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user