call method
Implementation
@override
FutureOr<ASTValue<T>> call(VMContext parent,
{List? positionalParameters, Map? namedParameters}) async {
var context = VMContext(this, parent: parent);
var prevContext = VMContext.setCurrent(context);
try {
await initializeVariables(context, positionalParameters, namedParameters);
var parametersSize = this.parametersSize;
dynamic result;
if (externalFunction.isParametersSize0 || parametersSize == 0) {
result = externalFunction();
} else if (externalFunction.isParametersSize1 || parametersSize == 1) {
var paramVal = await getParameterValueByIndex(context, 0);
var a0 = resolveParameterValue(paramVal, context);
result = externalFunction(a0);
} else if (this.parametersSize == 2) {
var paramVal0 = await getParameterValueByIndex(context, 0);
var paramVal1 = await getParameterValueByIndex(context, 1);
var a0 = resolveParameterValue(paramVal0, context);
var a1 = resolveParameterValue(paramVal1, context);
result = externalFunction(a0, a1);
} else if (this.parametersSize == 3) {
var paramVal0 = await getParameterValueByIndex(context, 0);
var paramVal1 = await getParameterValueByIndex(context, 1);
var paramVal2 = await getParameterValueByIndex(context, 2);
var a0 = resolveParameterValue(paramVal0, context);
var a1 = resolveParameterValue(paramVal1, context);
var a2 = resolveParameterValue(paramVal2, context);
result = externalFunction(a0, a1, a2);
} else if (this.parametersSize == 4) {
var paramVal0 = await getParameterValueByIndex(context, 0);
var paramVal1 = await getParameterValueByIndex(context, 1);
var paramVal2 = await getParameterValueByIndex(context, 2);
var paramVal3 = await getParameterValueByIndex(context, 4);
var a0 = resolveParameterValue(paramVal0, context);
var a1 = resolveParameterValue(paramVal1, context);
var a2 = resolveParameterValue(paramVal2, context);
var a3 = resolveParameterValue(paramVal3, context);
result = externalFunction(a0, a1, a2, a3);
} else if (this.parametersSize == 5) {
var paramVal0 = await getParameterValueByIndex(context, 0);
var paramVal1 = await getParameterValueByIndex(context, 1);
var paramVal2 = await getParameterValueByIndex(context, 2);
var paramVal3 = await getParameterValueByIndex(context, 4);
var paramVal4 = await getParameterValueByIndex(context, 5);
var a0 = resolveParameterValue(paramVal0, context);
var a1 = resolveParameterValue(paramVal1, context);
var a2 = resolveParameterValue(paramVal2, context);
var a3 = resolveParameterValue(paramVal3, context);
var a4 = resolveParameterValue(paramVal4, context);
result = externalFunction(a0, a1, a2, a3, a4);
} else {
result = externalFunction.call();
}
if (result is Future) {
var r = await result;
return await resolveReturnValue(context, r);
} else {
return await resolveReturnValue(context, result);
}
} finally {
VMContext.setCurrent(prevContext);
}
}