Lombiq / Hastlayer-SDK

Turning .NET software into FPGA hardware for faster execution and lower power usage.

Home Page:https://hastlayer.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Add support for transforming Nullable, ValueTuple (HAST-239)

sarahelsaig opened this issue · comments

Currently you are unable to work with nullable structs, for example a method that returns Unum? will throw "The declaration of the type System.Nullable`1[[Lombiq.Arithmetics.Unum]] couldn't be found." error in the TypeConverter. Also null-coalescing operations need to be tested.
Similarly, (int A, int B) Foo() => (1, 1); will throw "The declaration of the type System.ValueTuple`2[[System.Int32],[System.Int32]] couldn't be found.".

Although not a bug, both are commonly used features of modern C# where lack of support will hinder adoption.

Jira issue

I'm not sure if this is related or a separate issue, but also if you return an array from a method instead of a property it won't work even if the two are functionally equivalent. For example Quire.Segments is an array returning property which is not suggested for performance reasons. But if I replace it with a ulong[] GetSegments() => _segments; method, I will get the The length of the array holder System.Void Lombiq.Arithmetics.Quire::.ctor(System.UInt64[],System.UInt16).Lombiq.Arithmetics.Quire.GetSegments (@this)[82..87) couldn't be statically determined. error. Checking if a method returns a trivial reference could resolve that problem.

The second one is a different issue. However, fixing CA1819 should rather be ulong[] GetSegments() => _segments.Clone(); which would need specific support on top of that.

Okay, then I will open a new issue for it here. As for your suggestion, wouldn't the cloning cause unnecessary overhead? If possible passing an immutable reference via IReadOnlyList<ulong> GetSegments() => _segments; makes more sense to me. Then the consumer can clone via .ToArray() if that's actually what they need.