Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

accept ForeignInclude attributes on methods (beta-3.0) #491

Merged
merged 3 commits into from
Jun 1, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lib/Uno.Net.Sockets/Dns.uno
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ namespace Uno.Net
[extern(UNIX) Require("Source.Include", "netinet/in.h")]
[extern(MSVC) Require("Source.Include", "ws2tcpip.h")]
[Require("Source.Include", "vector")]
[ForeignInclude(Language.Java, "java.util.*", "java.net.*")]
public class Dns
{
extern(APPLE || LINUX) static IPAddress[] GetLocalAddresses()
Expand Down Expand Up @@ -47,6 +46,7 @@ namespace Uno.Net
@}

[Foreign(Language.Java)]
[ForeignInclude(Language.Java, "java.util.*", "java.net.*")]
extern(ANDROID) static bool JavaGetLocalAddresses(List<string> addresses)
@{
try
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,69 +6,9 @@ namespace Uno.Compiler.ExportTargetInterop
public readonly Language Language;
public readonly string[] Annotations;

public ForeignAnnotationAttribute(Language language, string[] annotations)
public ForeignAnnotationAttribute(Language language, params string[] annotations)
{
Language = language;
}

public ForeignAnnotationAttribute(Language language, string annotation0)
: this(language, new string[] { annotation0 }) {}

public ForeignAnnotationAttribute(Language language, string annotation0, string annotation1)
: this(language, new string[] { annotation0, annotation1 }) {}

public ForeignAnnotationAttribute(Language language, string annotation0, string annotation1, string annotation2)
: this(language, new string[] { annotation0, annotation1 , annotation2 }) {}

public ForeignAnnotationAttribute(Language language, string annotation0, string annotation1, string annotation2, string annotation3)
: this(language, new string[] { annotation0, annotation1, annotation2, annotation3}) {}

public ForeignAnnotationAttribute(Language language, string annotation0, string annotation1, string annotation2, string annotation3, string annotation4)
: this(language, new string[] { annotation0, annotation1, annotation2, annotation3, annotation4}) {}

public ForeignAnnotationAttribute(Language language, string annotation0, string annotation1, string annotation2, string annotation3, string annotation4, string annotation5)
: this(language, new string[] { annotation0, annotation1, annotation2, annotation3, annotation4, annotation5}) {}

public ForeignAnnotationAttribute(Language language, string annotation0, string annotation1, string annotation2, string annotation3, string annotation4, string annotation5, string annotation6)
: this(language, new string[] { annotation0, annotation1, annotation2, annotation3, annotation4, annotation5, annotation6}) {}

public ForeignAnnotationAttribute(Language language, string annotation0, string annotation1, string annotation2, string annotation3, string annotation4, string annotation5, string annotation6, string annotation7)
: this(language, new string[] { annotation0, annotation1, annotation2, annotation3, annotation4, annotation5, annotation6, annotation7}) {}

public ForeignAnnotationAttribute(Language language, string annotation0, string annotation1, string annotation2, string annotation3, string annotation4, string annotation5, string annotation6, string annotation7, string annotation8)
: this(language, new string[] { annotation0, annotation1, annotation2, annotation3, annotation4, annotation5, annotation6, annotation7, annotation8}) {}

public ForeignAnnotationAttribute(Language language, string annotation0, string annotation1, string annotation2, string annotation3, string annotation4, string annotation5, string annotation6, string annotation7, string annotation8, string annotation9)
: this(language, new string[] { annotation0, annotation1, annotation2, annotation3, annotation4, annotation5, annotation6, annotation7, annotation8, annotation9}) {}

public ForeignAnnotationAttribute(Language language, string annotation0, string annotation1, string annotation2, string annotation3, string annotation4, string annotation5, string annotation6, string annotation7, string annotation8, string annotation9, string annotation10)
: this(language, new string[] { annotation0, annotation1, annotation2, annotation3, annotation4, annotation5, annotation6, annotation7, annotation8, annotation9, annotation10}) {}

public ForeignAnnotationAttribute(Language language, string annotation0, string annotation1, string annotation2, string annotation3, string annotation4, string annotation5, string annotation6, string annotation7, string annotation8, string annotation9, string annotation10, string annotation11)
: this(language, new string[] { annotation0, annotation1, annotation2, annotation3, annotation4, annotation5, annotation6, annotation7, annotation8, annotation9, annotation10, annotation11}) {}

public ForeignAnnotationAttribute(Language language, string annotation0, string annotation1, string annotation2, string annotation3, string annotation4, string annotation5, string annotation6, string annotation7, string annotation8, string annotation9, string annotation10, string annotation11, string annotation12)
: this(language, new string[] { annotation0, annotation1, annotation2, annotation3, annotation4, annotation5, annotation6, annotation7, annotation8, annotation9, annotation10, annotation11, annotation12}) {}

public ForeignAnnotationAttribute(Language language, string annotation0, string annotation1, string annotation2, string annotation3, string annotation4, string annotation5, string annotation6, string annotation7, string annotation8, string annotation9, string annotation10, string annotation11, string annotation12, string annotation13)
: this(language, new string[] { annotation0, annotation1, annotation2, annotation3, annotation4, annotation5, annotation6, annotation7, annotation8, annotation9, annotation10, annotation11, annotation12, annotation13}) {}

public ForeignAnnotationAttribute(Language language, string annotation0, string annotation1, string annotation2, string annotation3, string annotation4, string annotation5, string annotation6, string annotation7, string annotation8, string annotation9, string annotation10, string annotation11, string annotation12, string annotation13, string annotation14)
: this(language, new string[] { annotation0, annotation1, annotation2, annotation3, annotation4, annotation5, annotation6, annotation7, annotation8, annotation9, annotation10, annotation11, annotation12, annotation13, annotation14}) {}

public ForeignAnnotationAttribute(Language language, string annotation0, string annotation1, string annotation2, string annotation3, string annotation4, string annotation5, string annotation6, string annotation7, string annotation8, string annotation9, string annotation10, string annotation11, string annotation12, string annotation13, string annotation14, string annotation15)
: this(language, new string[] { annotation0, annotation1, annotation2, annotation3, annotation4, annotation5, annotation6, annotation7, annotation8, annotation9, annotation10, annotation11, annotation12, annotation13, annotation14, annotation15}) {}

public ForeignAnnotationAttribute(Language language, string annotation0, string annotation1, string annotation2, string annotation3, string annotation4, string annotation5, string annotation6, string annotation7, string annotation8, string annotation9, string annotation10, string annotation11, string annotation12, string annotation13, string annotation14, string annotation15, string annotation16)
: this(language, new string[] { annotation0, annotation1, annotation2, annotation3, annotation4, annotation5, annotation6, annotation7, annotation8, annotation9, annotation10, annotation11, annotation12, annotation13, annotation14, annotation15, annotation16}) {}

public ForeignAnnotationAttribute(Language language, string annotation0, string annotation1, string annotation2, string annotation3, string annotation4, string annotation5, string annotation6, string annotation7, string annotation8, string annotation9, string annotation10, string annotation11, string annotation12, string annotation13, string annotation14, string annotation15, string annotation16, string annotation17)
: this(language, new string[] { annotation0, annotation1, annotation2, annotation3, annotation4, annotation5, annotation6, annotation7, annotation8, annotation9, annotation10, annotation11, annotation12, annotation13, annotation14, annotation15, annotation16, annotation17}) {}

public ForeignAnnotationAttribute(Language language, string annotation0, string annotation1, string annotation2, string annotation3, string annotation4, string annotation5, string annotation6, string annotation7, string annotation8, string annotation9, string annotation10, string annotation11, string annotation12, string annotation13, string annotation14, string annotation15, string annotation16, string annotation17, string annotation18)
: this(language, new string[] { annotation0, annotation1, annotation2, annotation3, annotation4, annotation5, annotation6, annotation7, annotation8, annotation9, annotation10, annotation11, annotation12, annotation13, annotation14, annotation15, annotation16, annotation17, annotation18}) {}

public ForeignAnnotationAttribute(Language language, string annotation0, string annotation1, string annotation2, string annotation3, string annotation4, string annotation5, string annotation6, string annotation7, string annotation8, string annotation9, string annotation10, string annotation11, string annotation12, string annotation13, string annotation14, string annotation15, string annotation16, string annotation17, string annotation18, string annotation19)
: this(language, new string[] { annotation0, annotation1, annotation2, annotation3, annotation4, annotation5, annotation6, annotation7, annotation8, annotation9, annotation10, annotation11, annotation12, annotation13, annotation14, annotation15, annotation16, annotation17, annotation18, annotation19}) {}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ using Android.Base.Primitives;
namespace Uno.Compiler.ExportTargetInterop
{
[ForeignTypeName("::NSData*")]
[ForeignInclude(Language.ObjC, "Foundation/Foundation.h")]
public extern(FOREIGN_OBJC_SUPPORTED) class ForeignDataView : ObjC.Object
{
ForeignDataView() { }
Expand Down Expand Up @@ -36,6 +35,7 @@ namespace Uno.Compiler.ExportTargetInterop
}

[Foreign(Language.ObjC)]
[ForeignInclude(Language.ObjC, "Foundation/Foundation.h")]
static ObjC.Object CreateNSDataFromByteArray(IntPtr rawUnoArray)
@{
auto unoArray = (\@{byte[]})rawUnoArray;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,77 +1,15 @@
namespace Uno.Compiler.ExportTargetInterop
{
[AttributeUsage(AttributeTargets.Class)]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method | AttributeTargets.Constructor)]
public sealed class ForeignIncludeAttribute : Attribute
{
public readonly Language Language;
public readonly string[] Includes;

// look..I know. I'm sorry, but at the time attributes didnt like param args
public ForeignIncludeAttribute(Language language, string[] includes)
public ForeignIncludeAttribute(Language language, params string[] includes)
{
Language = language;
Includes = includes;
}

public ForeignIncludeAttribute(Language language, string include0)
: this(language, new string[] { include0 }) {}

public ForeignIncludeAttribute(Language language, string include0, string include1)
: this(language, new string[] { include0, include1 }) {}

public ForeignIncludeAttribute(Language language, string include0, string include1, string include2)
: this(language, new string[] { include0, include1 , include2 }) {}

public ForeignIncludeAttribute(Language language, string include0, string include1, string include2, string include3)
: this(language, new string[] { include0, include1, include2, include3}) {}

public ForeignIncludeAttribute(Language language, string include0, string include1, string include2, string include3, string include4)
: this(language, new string[] { include0, include1, include2, include3, include4}) {}

public ForeignIncludeAttribute(Language language, string include0, string include1, string include2, string include3, string include4, string include5)
: this(language, new string[] { include0, include1, include2, include3, include4, include5}) {}

public ForeignIncludeAttribute(Language language, string include0, string include1, string include2, string include3, string include4, string include5, string include6)
: this(language, new string[] { include0, include1, include2, include3, include4, include5, include6}) {}

public ForeignIncludeAttribute(Language language, string include0, string include1, string include2, string include3, string include4, string include5, string include6, string include7)
: this(language, new string[] { include0, include1, include2, include3, include4, include5, include6, include7}) {}

public ForeignIncludeAttribute(Language language, string include0, string include1, string include2, string include3, string include4, string include5, string include6, string include7, string include8)
: this(language, new string[] { include0, include1, include2, include3, include4, include5, include6, include7, include8}) {}

public ForeignIncludeAttribute(Language language, string include0, string include1, string include2, string include3, string include4, string include5, string include6, string include7, string include8, string include9)
: this(language, new string[] { include0, include1, include2, include3, include4, include5, include6, include7, include8, include9}) {}

public ForeignIncludeAttribute(Language language, string include0, string include1, string include2, string include3, string include4, string include5, string include6, string include7, string include8, string include9, string include10)
: this(language, new string[] { include0, include1, include2, include3, include4, include5, include6, include7, include8, include9, include10}) {}

public ForeignIncludeAttribute(Language language, string include0, string include1, string include2, string include3, string include4, string include5, string include6, string include7, string include8, string include9, string include10, string include11)
: this(language, new string[] { include0, include1, include2, include3, include4, include5, include6, include7, include8, include9, include10, include11}) {}

public ForeignIncludeAttribute(Language language, string include0, string include1, string include2, string include3, string include4, string include5, string include6, string include7, string include8, string include9, string include10, string include11, string include12)
: this(language, new string[] { include0, include1, include2, include3, include4, include5, include6, include7, include8, include9, include10, include11, include12}) {}

public ForeignIncludeAttribute(Language language, string include0, string include1, string include2, string include3, string include4, string include5, string include6, string include7, string include8, string include9, string include10, string include11, string include12, string include13)
: this(language, new string[] { include0, include1, include2, include3, include4, include5, include6, include7, include8, include9, include10, include11, include12, include13}) {}

public ForeignIncludeAttribute(Language language, string include0, string include1, string include2, string include3, string include4, string include5, string include6, string include7, string include8, string include9, string include10, string include11, string include12, string include13, string include14)
: this(language, new string[] { include0, include1, include2, include3, include4, include5, include6, include7, include8, include9, include10, include11, include12, include13, include14}) {}

public ForeignIncludeAttribute(Language language, string include0, string include1, string include2, string include3, string include4, string include5, string include6, string include7, string include8, string include9, string include10, string include11, string include12, string include13, string include14, string include15)
: this(language, new string[] { include0, include1, include2, include3, include4, include5, include6, include7, include8, include9, include10, include11, include12, include13, include14, include15}) {}

public ForeignIncludeAttribute(Language language, string include0, string include1, string include2, string include3, string include4, string include5, string include6, string include7, string include8, string include9, string include10, string include11, string include12, string include13, string include14, string include15, string include16)
: this(language, new string[] { include0, include1, include2, include3, include4, include5, include6, include7, include8, include9, include10, include11, include12, include13, include14, include15, include16}) {}

public ForeignIncludeAttribute(Language language, string include0, string include1, string include2, string include3, string include4, string include5, string include6, string include7, string include8, string include9, string include10, string include11, string include12, string include13, string include14, string include15, string include16, string include17)
: this(language, new string[] { include0, include1, include2, include3, include4, include5, include6, include7, include8, include9, include10, include11, include12, include13, include14, include15, include16, include17}) {}

public ForeignIncludeAttribute(Language language, string include0, string include1, string include2, string include3, string include4, string include5, string include6, string include7, string include8, string include9, string include10, string include11, string include12, string include13, string include14, string include15, string include16, string include17, string include18)
: this(language, new string[] { include0, include1, include2, include3, include4, include5, include6, include7, include8, include9, include10, include11, include12, include13, include14, include15, include16, include17, include18}) {}

public ForeignIncludeAttribute(Language language, string include0, string include1, string include2, string include3, string include4, string include5, string include6, string include7, string include8, string include9, string include10, string include11, string include12, string include13, string include14, string include15, string include16, string include17, string include18, string include19)
: this(language, new string[] { include0, include1, include2, include3, include4, include5, include6, include7, include8, include9, include10, include11, include12, include13, include14, include15, include16, include17, include18, include19}) {}

}
}
7 changes: 6 additions & 1 deletion src/compiler/api/Domain/IL/Expressions/Expression.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,12 @@ public abstract class Expression : Statement
public Expression Address => !ReturnType.IsReferenceType ? this as AddressOf ?? new AddressOf(this) : ActualValue;
public virtual Expression ActualValue => this;
public virtual object ConstantValue => null;
public string ConstantString => ConstantValue as string ?? ConstantValue?.ToString();
public string ConstantString => ConstantValue as string ?? (
ConstantValue is object[]
? ToString() // Use disassembler for arrays
: ConstantValue?.ToString()
);

public override StatementType StatementType => StatementType.Expression;

protected Expression(Source src)
Expand Down
Loading