Open FibonacciFox opened 11 months ago
The compiler sees several Load()
overloads, so it postpones the resolution to runtime using the callsite (call_Load?0
).
The fix would be to improve the compiler so it resolves the Load(object)
overload in compile time - I'm not sure, why it's not resolving it already, it should.
The compiler sees several
Load()
overloads, so it postpones the resolution to runtime using the callsite (call_Load?0
).The fix would be to improve the compiler so it resolves the
Load(object)
overload in compile time - I'm not sure, why it's not resolving it already, it should.
As I understand it, this problem can be solved only at the compiler level?
For a reference: this is how XAML compiler task tries to match AvaloniaXamlLoader.Load(this)
call.
It currently recognizes the normal
ldarg.0
call AvaloniaXamlLoader.Load(object)
pattern and the monstrosity generated by F# compiler.
The peachpie pattern won't be easily recognizable since it would require us to analyze the CallSite static variable initialization that happens elsewhere and looks like an internal implementation detail.
So the preferable solution would be for peachpie to just emit the simple ldarg.0+call sequence.
@kekekeks the compiler mainly emits simple .ldarg
+.call
. Here it's probably an unimplemented optimization where due to more similar overloads, it falls back to runtime overload resolution.
So in PHP, you have the following?
AvaloniaXamlLoader::Load( $this );
Hello, jakubmisek. I can't solve the problem for a very long time. There is a library .Net, which builds the project and replaces the AvaloniaXaml.Load(this) call with !XamlIlPopulateTrampoline(this). (screenshots are attached). In PHP, is it compiled into call_Load?0.Target(call_Load?0, this,, this); Because of this, it is impossible to build the project because the library cannot find AvaloniaXaml.Load(this) in the class. Link to the code section:
XamlCompilerTaskExecutor.cs
Here is what happens in c# :
![image](https://github.com/peachpiecompiler/peachpie/assets/61143434/7703cf98-8767-4bed-8fdc-986ca67ae227)
Here's what's going on in php:
But if you specify in php like this:
Will compile to:
But that won't help in any way, because it's still waiting for AvaloniaXamlLoader.Load(this); when compiling. I will be very grateful in finding a solution to this problem.