/// <summary> /// Ejecuta la sentencia para devolver el resultado de una función /// </summary> private async Task ExecuteFunctionReturnAsync(SentenceReturn sentence, CancellationToken cancellationToken) { if (string.IsNullOrWhiteSpace(Context.Actual.ScopeFuntionResultVariable)) { AddError("Cant execute a return because there is not function block"); } else { VariableModel result = await ExecuteExpressionAsync(sentence.Expression, cancellationToken); // Si no hay error, añade el resultado al contexto if (result != null) { Context.Actual.VariablesTable.Add(Context.Actual.ScopeFuntionResultVariable, result.Type, result.Value); } } }
/// <summary> /// Ejecuta la sentencia para devolver el resultado de una función /// </summary> private void ExecuteFunctionReturn(SentenceReturn sentence) { if (string.IsNullOrWhiteSpace(Context.Actual.ScopeFuntionResultVariable)) { AddError("Cant execute a return because there is not function block"); } else { VariableModel result = new Compiler.Interpreter().EvaluateExpression(Context, sentence.Expression, out string error); // Si no hay error, añade el resultado al contexto if (!string.IsNullOrWhiteSpace(error)) { AddError(error); } else { Context.Actual.VariablesTable.Add(new VariableModel(Context.Actual.ScopeFuntionResultVariable, result.Value)); } } }
/// <summary> /// Transforma una sentencia return /// </summary> /// <remarks> /// return expresion /// </remarks> private void TransformReturn(SentenceReturn sentence) { AddSentence("return " + TransformExpressions(sentence.Expression)); }