peachpiecompiler/peachpie

Strange behavior when instantiating a class in an anonymous function

FibonacciFox opened this issue · 4 comments

When creating an instance of the System\Uri class; in an anonymous function, the program crashes with an error:

Unhandled exception. System.InvalidOperationException: CostOf.ToUriCreationOptions(Pchp.Core.PhpValue) was not resolved.
   at Pchp.Core.Dynamic.Cache.GetMethod(Type type, String name, Type[] ptypes)
   at Pchp.Core.Dynamic.ConvertExpression.BindCostFromValue(Expression arg, Type target)
   at Pchp.Core.Dynamic.ConvertExpression.BindCostFromValue(Expression arg, Type target)
   at Pchp.Core.Dynamic.ConvertExpression.BindCost(Expression arg, Type target)
   at Pchp.Core.Dynamic.OverloadBinder.ArgumentsBinder.BindCostOf(Int32 srcarg, Type ptype, Boolean ismandatory, Boolean ignorecost)
   at Pchp.Core.Dynamic.OverloadBinder.BindCostOf(MethodBase method, ArgumentsBinder args, BitArray costofargs, ConversionCost& minCost)
   at Pchp.Core.Dynamic.OverloadBinder.BindOverloadCall(Type treturn, Expression target, MethodBase[]& methods, Expression ctx, ArgumentsBinder args, Boolean isStaticCallSyntax, Object lateStaticType)
   at Pchp.Core.Dynamic.OverloadBinder.BindOverloadCall(Type treturn, Expression target, MethodBase[] methods, Expression ctx, Expression argsarray, Boolean isStaticCallSyntax, Object lateStaticType)
   at Pchp.Core.Dynamic.BinderHelpers.BindToCreator(Type type, ConstructorInfo[] ctors)
   at Pchp.Core.Reflection.PhpTypeInfo.BuildCreator()
   at Pchp.Core.Reflection.PhpTypeInfo.get_Creator()
   at Pchp.Core.Reflection.PhpTypeInfo.ResolveCreator(Type caller)
   at Pchp.Core.Context.Create[T](RuntimeTypeHandle caller, PhpValue[] arguments)
   at <Root>src/Application/Forms.MainWindow_php.anonymous@function(Closure <closure>, PhpValue ThisClass, PhpValue hello, PhpValue sender, PhpValue e) in C:\Users\Albina\Desktop\NewAvaloniaPeachpie\NewAvaloniaPeachpie\Application\s
rc\Application\Forms\MainWindow.php:line 34
   at anonymous@function#1(Closure, Context, PhpValue[])
   at Pchp.Core.Reflection.RoutineInfo.Invoke(Context ctx, Object target, PhpValue[] arguments)
   at Pchp.Core.Reflection.RoutineInfo.Pchp.Core.IPhpCallable.Invoke(Context ctx, PhpValue[] arguments)
   at Closure.__invoke(PhpValue[] parameters)
   at NewAvaloniaPeachpie.Experimental.Events.<>c__DisplayClass0_0.<On>b__0(Object _, EventArgs e) in C:\Users\Albina\Desktop\NewAvaloniaPeachpie\NewAvaloniaPeachpie\NewAvaloniaPeachpie\Experimental\Events.cs:line 16
   at Avalonia.Interactivity.Interactive.<AddHandler>g__InvokeAdapter|4_0[TEventArgs](Delegate baseHandler, Object sender, RoutedEventArgs args) in /_/src/Avalonia.Base/Interactivity/Interactive.cs:line 64
   at Avalonia.Interactivity.Interactive.<>c__4`1.<AddHandler>b__4_1(Delegate baseHandler, Object sender, RoutedEventArgs args) in /_/src/Avalonia.Base/Interactivity/Interactive.cs:line 70
   at Avalonia.Interactivity.EventRoute.RaiseEventImpl(RoutedEventArgs e) in /_/src/Avalonia.Base/Interactivity/EventRoute.cs:line 118
   at Avalonia.Interactivity.EventRoute.RaiseEvent(Interactive source, RoutedEventArgs e) in /_/src/Avalonia.Base/Interactivity/EventRoute.cs:line 79
   at Avalonia.Interactivity.Interactive.RaiseEvent(RoutedEventArgs e) in /_/src/Avalonia.Base/Interactivity/Interactive.cs:line 126
   at Avalonia.Controls.Button.OnClick() in /_/src/Avalonia.Controls/Button.cs:line 344
   at Avalonia.Controls.Button.OnPointerReleased(PointerReleasedEventArgs e) in /_/src/Avalonia.Controls/Button.cs:line 416
   at Avalonia.Input.InputElement.<>c.<.cctor>b__32_9(InputElement x, PointerReleasedEventArgs e) in /_/src/Avalonia.Base/Input/InputElement.cs:line 225
   at Avalonia.Reactive.LightweightObservableBase`1.PublishNext(T value) in /_/src/Avalonia.Base/Reactive/LightweightObservableBase.cs:line 149
   at Avalonia.Interactivity.EventRoute.RaiseEventImpl(RoutedEventArgs e) in /_/src/Avalonia.Base/Interactivity/EventRoute.cs:line 118
   at Avalonia.Interactivity.EventRoute.RaiseEvent(Interactive source, RoutedEventArgs e) in /_/src/Avalonia.Base/Interactivity/EventRoute.cs:line 79
   at Avalonia.Interactivity.Interactive.RaiseEvent(RoutedEventArgs e) in /_/src/Avalonia.Base/Interactivity/Interactive.cs:line 126
   at Avalonia.Input.MouseDevice.MouseUp(IMouseDevice device, UInt64 timestamp, IInputRoot root, Point p, PointerPointProperties props, KeyModifiers inputModifiers, IInputElement hitTest) in /_/src/Avalonia.Base/Input/MouseDevice.cs
:line 200
   at Avalonia.Input.MouseDevice.ProcessRawEvent(RawPointerEventArgs e) in /_/src/Avalonia.Base/Input/MouseDevice.cs:line 58
   at Avalonia.Input.InputManager.ProcessInput(RawInputEventArgs e) in /_/src/Avalonia.Base/Input/InputManager.cs:line 37
   at Avalonia.Controls.TopLevel.HandleInput(RawInputEventArgs e) in /_/src/Avalonia.Controls/TopLevel.cs:line 739
   at Avalonia.Win32.WindowImpl.AppWndProc(IntPtr hWnd, UInt32 msg, IntPtr wParam, IntPtr lParam) in /_/src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs:line 812
   at Avalonia.Win32.WindowImpl.WndProc(IntPtr hWnd, UInt32 msg, IntPtr wParam, IntPtr lParam) in /_/src/Windows/Avalonia.Win32/WindowImpl.WndProc.cs:line 26
   at Avalonia.Win32.Interop.UnmanagedMethods.DispatchMessage(MSG& lpmsg)
   at Avalonia.Win32.Win32DispatcherImpl.RunLoop(CancellationToken cancellationToken) in /_/src/Windows/Avalonia.Win32/Win32DispatcherImpl.cs:line 111
   at Avalonia.Threading.DispatcherFrame.Run(IControlledDispatcherImpl impl) in /_/src/Avalonia.Base/Threading/DispatcherFrame.cs:line 117
   at Avalonia.Threading.Dispatcher.PushFrame(DispatcherFrame frame) in /_/src/Avalonia.Base/Threading/Dispatcher.MainLoop.cs:line 53
   at Avalonia.Threading.Dispatcher.MainLoop(CancellationToken cancellationToken) in /_/src/Avalonia.Base/Threading/Dispatcher.MainLoop.cs:line 80
   at Avalonia.Controls.ApplicationLifetimes.ClassicDesktopStyleApplicationLifetime.Start(String[] args) in /_/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs:line 127
   at NewAvaloniaPeachpie.Platform.Application..ctor(Closure closure, String[] args) in C:\Users\Albina\Desktop\NewAvaloniaPeachpie\NewAvaloniaPeachpie\NewAvaloniaPeachpie\Platform\Application.cs:line 28
   at <Root>.ApplicationDesktop_php.<Main>(Context <ctx>, PhpArray <locals>, Object this, RuntimeTypeHandle <self>) in C:\Users\Albina\Desktop\NewAvaloniaPeachpie\NewAvaloniaPeachpie\ApplicationDesktop\ApplicationDesktop.php:line 8
   at <Script>.Main(String[] args) 

But when declared:
$uri = new Uri('avares://Application/src/Application/Forms/MyWindow.axaml');
Anywhere else in the code, everything works.
It seems to me that such behavior should not be.

Link to the project with this exception: https://github.com/FibonacciFox/NewAvaloniaPeachpie

I have a suspicion that the problem is in the Closure.

Hi @FibonacciFox and thank you for reporting the issue.

For some reason, it compiles new Uri(..) differently than outside the closure. I'll have to debug it for more details.

thank you @FibonacciFox , there were a few issues with this case, fixed now.

thank you @FibonacciFox , there were a few issues with this case, fixed now.

thank you @jakubmisek !