1. Script项目添加了数组表达式的支持

2. EmitHelper添加了数组创建委托的构建
This commit is contained in:
fengjiayi
2025-07-31 11:21:49 +08:00
parent 85d04029dc
commit 827a9242ae
10 changed files with 254 additions and 105 deletions

View File

@@ -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)
{