improvements for handle lambda function

master
この中二病に爆焔を! 5 years ago
parent fcb0203274
commit 82e094946e

@ -1,4 +1,5 @@
Imports System.Reflection
Imports Microsoft.VisualBasic.Scripting.SymbolBuilder
#If netcore5 = 1 Then
Imports Microsoft.VisualBasic.ApplicationServices.Development.NetCore5
#End If
@ -27,18 +28,40 @@ Public Class IDelegate
Call Me.New(target.Method)
End Sub
Public Function GetMethodTarget() As Object
Dim type As Type = provideType()
If VBLanguage.IsValidVBSymbolName(name) Then
Return Nothing
Else
Return Activator.CreateInstance(type)
End If
End Function
Private Function provideType() As Type
Return type.GetType(knownFirst:=True, searchPath:={filepath})
End Function
Public Function GetMethod() As MethodInfo
Dim type As Type = Me.type.GetType(knownFirst:=True, searchPath:={filepath})
Dim type As Type = provideType()
#If netcore5 = 1 Then
Call deps.TryHandleNetCore5AssemblyBugs(package:=type)
#End If
For Each method As MethodInfo In CType(type, System.Reflection.TypeInfo).DeclaredMethods
If method.IsStatic AndAlso method.Name = name Then
Return method
End If
Next
If Not VBLanguage.IsValidVBSymbolName(name) Then
For Each method As MethodInfo In CType(type, System.Reflection.TypeInfo).DeclaredMethods
If (Not method.IsStatic) AndAlso method.Name = name Then
Return method
End If
Next
Else
For Each method As MethodInfo In CType(type, System.Reflection.TypeInfo).DeclaredMethods
If method.IsStatic AndAlso method.Name = name Then
Return method
End If
Next
End If
Return Nothing
End Function

@ -57,7 +57,7 @@ Public Class SlaveTask
End If
End Function
Public Function RunTask(entry As [Delegate], ParamArray parameters As Object()) As Object
Public Function RunTask(Of T)(entry As [Delegate], ParamArray parameters As Object()) As T
Dim target As New IDelegate(entry)
Dim result As Object = Nothing
Dim host As IPCSocket = Nothing
@ -78,8 +78,8 @@ Public Class SlaveTask
Dim commandlineArgvs As String = builder(processor, host.HostPort)
'If Not debugPort Is Nothing Then
' Console.WriteLine(commandlineArgvs)
' Pause()
' Console.WriteLine(commandlineArgvs)
' Pause()
'End If
#If netcore5 = 0 Then

@ -23,6 +23,7 @@ Public Class TaskBuilder : Implements ITaskDriver
Public Function Run() As Integer Implements ITaskDriver.Run
Dim task As IDelegate = GetMethod()
Dim api As MethodInfo = task.GetMethod
Dim target As Object = task.GetMethodTarget
Dim n As Integer = GetArgumentValueNumber()
Dim args As New List(Of Object)
@ -45,8 +46,8 @@ Public Class TaskBuilder : Implements ITaskDriver
' send debug message
Call New TcpRequest(masterPort).SendMessage(New RequestStream(IPCSocket.Protocol, Protocols.PostStart))
Call PostFinished(api.Invoke(Nothing, args.ToArray))
' Call PostStdOut(api.Invoke(Nothing, args.ToArray))
Call PostFinished(api.Invoke(target, args.ToArray))
' Call PostStdOut(api.Invoke(target, args.ToArray))
Call Console.WriteLine("job done!")
Return 0

Loading…
Cancel
Save