call function test success

master
xieguigang 5 years ago
parent 9d4befc3bd
commit 8e15ca353d

@ -31,7 +31,7 @@ Namespace Interpreter.Expressions
args.Add(item.Exec(context))
Next
Dim result As Object = invoke(args.ToArray)
Dim result As Object = DirectCast(invoke, Callable).Evaluate(args.ToArray)
Return result
End Function

@ -20,6 +20,10 @@ Namespace Interpreter.Expressions
bin.right = FixLiteral(bin.right)
ElseIf TypeOf expr Is Literals Then
expr = New SymbolReference(DirectCast(expr, Literals).value)
ElseIf TypeOf expr Is FuncEval Then
DirectCast(expr, FuncEval).parameters = DirectCast(expr, FuncEval).parameters _
.Select(AddressOf FixLiteral) _
.ToArray
End If
Return expr

@ -5,6 +5,7 @@ Namespace Runtime
Public Class Callable
Dim method As MethodInfo
Dim parameters As ParameterInfo()
Public ReadOnly Property name As String
Get
@ -14,6 +15,7 @@ Namespace Runtime
Sub New(method As MethodInfo)
Me.method = method
Me.parameters = method.GetParameters
End Sub
Sub New(math1 As Func(Of Double, Double))
@ -25,7 +27,21 @@ Namespace Runtime
End Sub
Public Function Evaluate(params As Object()) As Object
Dim args As New List(Of Object)
For i As Integer = 0 To parameters.Length - 1
If i >= params.Length Then
If parameters(i).IsOptional Then
args.Add(parameters(i).DefaultValue)
Else
Throw New InvalidExpressionException
End If
Else
args.Add(CTypeDynamic(params(i), parameters(i).ParameterType))
End If
Next
Return method.Invoke(Nothing, args.ToArray)
End Function
End Class
End Namespace
Loading…
Cancel
Save