You've already forked linux-packaging-mono
Imported Upstream version 5.10.0.78
Former-commit-id: 46737382176d7b811604042c613d5df6eef74f33
This commit is contained in:
parent
b7cd5de421
commit
6db692b74b
@@ -391,9 +391,21 @@ namespace Mono.CSharp {
|
||||
return System.Linq.Expressions.Expression.Assign (target_object, source_object);
|
||||
}
|
||||
|
||||
protected virtual Expression ResolveConversions (ResolveContext ec)
|
||||
protected virtual Expression ResolveConversions (ResolveContext rc)
|
||||
{
|
||||
source = Convert.ImplicitConversionRequired (ec, source, target.Type, source.Location);
|
||||
var ttype = target.Type;
|
||||
var stackAlloc = source as StackAlloc;
|
||||
if (stackAlloc != null && ttype.Arity == 1 && ttype.GetDefinition () == rc.Module.PredefinedTypes.SpanGeneric.TypeSpec &&
|
||||
rc.Module.Compiler.Settings.Version >= LanguageVersion.V_7_2) {
|
||||
|
||||
var etype = ttype.TypeArguments [0];
|
||||
var stype = ((PointerContainer)source.Type).Element;
|
||||
if (etype == stype && stackAlloc.ResolveSpanConversion (rc, ttype)) {
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
source = Convert.ImplicitConversionRequired (rc, source, ttype, source.Location);
|
||||
if (source == null)
|
||||
return null;
|
||||
|
||||
|
||||
192
mcs/mcs/async.cs
192
mcs/mcs/async.cs
@@ -628,59 +628,113 @@ namespace Mono.CSharp
|
||||
|
||||
protected override bool DoDefineMembers ()
|
||||
{
|
||||
PredefinedType builder_type;
|
||||
PredefinedMember<MethodSpec> bf;
|
||||
PredefinedMember<MethodSpec> bs;
|
||||
PredefinedMember<MethodSpec> sr;
|
||||
PredefinedMember<MethodSpec> se;
|
||||
PredefinedMember<MethodSpec> sm;
|
||||
TypeSpec bt;
|
||||
bool has_task_return_type = false;
|
||||
var pred_members = Module.PredefinedMembers;
|
||||
|
||||
if (return_type.Kind == MemberKind.Void) {
|
||||
builder_type = Module.PredefinedTypes.AsyncVoidMethodBuilder;
|
||||
bf = pred_members.AsyncVoidMethodBuilderCreate;
|
||||
bs = pred_members.AsyncVoidMethodBuilderStart;
|
||||
sr = pred_members.AsyncVoidMethodBuilderSetResult;
|
||||
se = pred_members.AsyncVoidMethodBuilderSetException;
|
||||
sm = pred_members.AsyncVoidMethodBuilderSetStateMachine;
|
||||
} else if (return_type == Module.PredefinedTypes.Task.TypeSpec) {
|
||||
builder_type = Module.PredefinedTypes.AsyncTaskMethodBuilder;
|
||||
bf = pred_members.AsyncTaskMethodBuilderCreate;
|
||||
bs = pred_members.AsyncTaskMethodBuilderStart;
|
||||
sr = pred_members.AsyncTaskMethodBuilderSetResult;
|
||||
se = pred_members.AsyncTaskMethodBuilderSetException;
|
||||
sm = pred_members.AsyncTaskMethodBuilderSetStateMachine;
|
||||
task = pred_members.AsyncTaskMethodBuilderTask.Get ();
|
||||
} else {
|
||||
builder_type = Module.PredefinedTypes.AsyncTaskMethodBuilderGeneric;
|
||||
bf = pred_members.AsyncTaskMethodBuilderGenericCreate;
|
||||
bs = pred_members.AsyncTaskMethodBuilderGenericStart;
|
||||
sr = pred_members.AsyncTaskMethodBuilderGenericSetResult;
|
||||
se = pred_members.AsyncTaskMethodBuilderGenericSetException;
|
||||
sm = pred_members.AsyncTaskMethodBuilderGenericSetStateMachine;
|
||||
task = pred_members.AsyncTaskMethodBuilderGenericTask.Get ();
|
||||
has_task_return_type = true;
|
||||
}
|
||||
|
||||
set_result = sr.Get ();
|
||||
set_exception = se.Get ();
|
||||
builder_factory = bf.Get ();
|
||||
builder_start = bs.Get ();
|
||||
|
||||
var istate_machine = Module.PredefinedTypes.IAsyncStateMachine;
|
||||
var set_statemachine = sm.Get ();
|
||||
MethodSpec set_statemachine;
|
||||
|
||||
if (!builder_type.Define () || !istate_machine.Define () || set_result == null || builder_factory == null ||
|
||||
set_exception == null || set_statemachine == null || builder_start == null ||
|
||||
!Module.PredefinedTypes.INotifyCompletion.Define ()) {
|
||||
Report.Error (1993, Location,
|
||||
"Cannot find compiler required types for asynchronous functions support. Are you targeting the wrong framework version?");
|
||||
return base.DoDefineMembers ();
|
||||
if (return_type.IsCustomTaskType ()) {
|
||||
//
|
||||
// TODO: Would be nice to cache all this on per-type basis
|
||||
//
|
||||
var btypes = Compiler.BuiltinTypes;
|
||||
bt = return_type.MemberDefinition.GetAsyncMethodBuilder ();
|
||||
TypeSpec bt_inflated;
|
||||
if (return_type.IsGeneric) {
|
||||
bt_inflated = bt.MakeGenericType (Module, bt.MemberDefinition.TypeParameters);
|
||||
} else {
|
||||
bt_inflated = bt;
|
||||
}
|
||||
|
||||
var set_result_sign = MemberFilter.Method ("SetResult", 0, ParametersCompiled.CreateFullyResolved (bt.MemberDefinition.TypeParameters), btypes.Void);
|
||||
set_result = new PredefinedMember<MethodSpec> (Module, bt, set_result_sign).Resolve (Location);
|
||||
|
||||
var set_exception_sign = MemberFilter.Method ("SetException", 0, ParametersCompiled.CreateFullyResolved (btypes.Exception), btypes.Void);
|
||||
set_exception = new PredefinedMember<MethodSpec> (Module, bt, set_exception_sign).Resolve (Location);
|
||||
|
||||
var builder_factory_sign = MemberFilter.Method ("Create", 0, ParametersCompiled.EmptyReadOnlyParameters, bt_inflated);
|
||||
builder_factory = new PredefinedMember<MethodSpec> (Module, bt, builder_factory_sign).Resolve (Location);
|
||||
if (builder_factory?.IsStatic == false)
|
||||
throw new NotImplementedException ("report better error message");
|
||||
|
||||
var builder_start_sign = MemberFilter.Method ("Start", 1, new ParametersImported (
|
||||
new [] {
|
||||
new ParameterData (null, Parameter.Modifier.REF),
|
||||
},
|
||||
new [] {
|
||||
new TypeParameterSpec (0, null, SpecialConstraint.None, Variance.None, null),
|
||||
}, false),
|
||||
btypes.Void);
|
||||
builder_start = new PredefinedMember<MethodSpec> (Module, bt, builder_start_sign).Resolve (Location);
|
||||
|
||||
if (!istate_machine.Define ())
|
||||
return false;
|
||||
|
||||
var set_statemachine_sign = MemberFilter.Method ("SetStateMachine", 0, ParametersCompiled.CreateFullyResolved (istate_machine.TypeSpec), btypes.Void);
|
||||
set_statemachine = new PredefinedMember<MethodSpec> (Module, bt, set_statemachine_sign).Resolve (Location); ;
|
||||
|
||||
var task_sign = MemberFilter.Property ("Task", return_type.MemberDefinition as TypeSpec);
|
||||
task = new PredefinedMember<PropertySpec> (Module, bt, task_sign).Resolve (Location);
|
||||
|
||||
if (set_result == null || set_exception == null || builder_factory == null || builder_start == null || set_statemachine == null || task == null ||
|
||||
!Module.PredefinedTypes.INotifyCompletion.Define ()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
has_task_return_type = return_type.IsGeneric;
|
||||
} else {
|
||||
PredefinedType builder_type;
|
||||
PredefinedMember<MethodSpec> bf;
|
||||
PredefinedMember<MethodSpec> bs;
|
||||
PredefinedMember<MethodSpec> sr;
|
||||
PredefinedMember<MethodSpec> se;
|
||||
PredefinedMember<MethodSpec> sm;
|
||||
var pred_members = Module.PredefinedMembers;
|
||||
|
||||
if (return_type.Kind == MemberKind.Void) {
|
||||
builder_type = Module.PredefinedTypes.AsyncVoidMethodBuilder;
|
||||
bf = pred_members.AsyncVoidMethodBuilderCreate;
|
||||
bs = pred_members.AsyncVoidMethodBuilderStart;
|
||||
sr = pred_members.AsyncVoidMethodBuilderSetResult;
|
||||
se = pred_members.AsyncVoidMethodBuilderSetException;
|
||||
sm = pred_members.AsyncVoidMethodBuilderSetStateMachine;
|
||||
} else if (return_type == Module.PredefinedTypes.Task.TypeSpec) {
|
||||
builder_type = Module.PredefinedTypes.AsyncTaskMethodBuilder;
|
||||
bf = pred_members.AsyncTaskMethodBuilderCreate;
|
||||
bs = pred_members.AsyncTaskMethodBuilderStart;
|
||||
sr = pred_members.AsyncTaskMethodBuilderSetResult;
|
||||
se = pred_members.AsyncTaskMethodBuilderSetException;
|
||||
sm = pred_members.AsyncTaskMethodBuilderSetStateMachine;
|
||||
task = pred_members.AsyncTaskMethodBuilderTask.Get ();
|
||||
} else {
|
||||
builder_type = Module.PredefinedTypes.AsyncTaskMethodBuilderGeneric;
|
||||
bf = pred_members.AsyncTaskMethodBuilderGenericCreate;
|
||||
bs = pred_members.AsyncTaskMethodBuilderGenericStart;
|
||||
sr = pred_members.AsyncTaskMethodBuilderGenericSetResult;
|
||||
se = pred_members.AsyncTaskMethodBuilderGenericSetException;
|
||||
sm = pred_members.AsyncTaskMethodBuilderGenericSetStateMachine;
|
||||
task = pred_members.AsyncTaskMethodBuilderGenericTask.Get ();
|
||||
has_task_return_type = true;
|
||||
}
|
||||
|
||||
set_result = sr.Get ();
|
||||
set_exception = se.Get ();
|
||||
builder_factory = bf.Get ();
|
||||
builder_start = bs.Get ();
|
||||
|
||||
set_statemachine = sm.Get ();
|
||||
|
||||
if (!builder_type.Define () || !istate_machine.Define () || set_result == null || builder_factory == null ||
|
||||
set_exception == null || set_statemachine == null || builder_start == null ||
|
||||
!Module.PredefinedTypes.INotifyCompletion.Define ()) {
|
||||
Report.Error (1993, Location,
|
||||
"Cannot find compiler required types for asynchronous functions support. Are you targeting the wrong framework version?");
|
||||
return base.DoDefineMembers ();
|
||||
}
|
||||
|
||||
bt = builder_type.TypeSpec;
|
||||
}
|
||||
|
||||
var bt = builder_type.TypeSpec;
|
||||
|
||||
//
|
||||
// Inflate generic Task types
|
||||
//
|
||||
@@ -825,9 +879,26 @@ namespace Mono.CSharp
|
||||
predefined = unsafeVersion ? pm.AsyncVoidMethodBuilderOnCompletedUnsafe : pm.AsyncVoidMethodBuilderOnCompleted;
|
||||
} else if (return_type == Module.PredefinedTypes.Task.TypeSpec) {
|
||||
predefined = unsafeVersion ? pm.AsyncTaskMethodBuilderOnCompletedUnsafe : pm.AsyncTaskMethodBuilderOnCompleted;
|
||||
} else {
|
||||
} else if (return_type.IsGenericTask) {
|
||||
predefined = unsafeVersion ? pm.AsyncTaskMethodBuilderGenericOnCompletedUnsafe : pm.AsyncTaskMethodBuilderGenericOnCompleted;
|
||||
has_task_return_type = true;
|
||||
} else {
|
||||
var parameters = new ParametersImported (
|
||||
new [] {
|
||||
new ParameterData (null, Parameter.Modifier.REF),
|
||||
new ParameterData (null, Parameter.Modifier.REF)
|
||||
},
|
||||
new [] {
|
||||
new TypeParameterSpec (0, null, SpecialConstraint.None, Variance.None, null),
|
||||
new TypeParameterSpec (1, null, SpecialConstraint.None, Variance.None, null)
|
||||
}, false);
|
||||
|
||||
var on_completed_sign = unsafeVersion ?
|
||||
MemberFilter.Method ("AwaitUnsafeOnCompleted", 2, parameters, Compiler.BuiltinTypes.Void) :
|
||||
MemberFilter.Method ("AwaitOnCompleted", 2, parameters, Compiler.BuiltinTypes.Void);
|
||||
|
||||
predefined = new PredefinedMember<MethodSpec> (Module, return_type.MemberDefinition.GetAsyncMethodBuilder (), on_completed_sign);
|
||||
has_task_return_type = return_type.IsGeneric;
|
||||
}
|
||||
|
||||
var on_completed = predefined.Resolve (Location);
|
||||
@@ -887,11 +958,14 @@ namespace Mono.CSharp
|
||||
// stateMachine.$builder.Start<{storey-type}>(ref stateMachine);
|
||||
//
|
||||
instance.AddressOf (ec, AddressOp.Store);
|
||||
ec.Emit (OpCodes.Ldflda, builder_field);
|
||||
|
||||
bool struct_builder = builder.MemberType.IsStruct;
|
||||
|
||||
ec.Emit (struct_builder ? OpCodes.Ldflda : OpCodes.Ldfld, builder_field);
|
||||
if (Task != null)
|
||||
ec.Emit (OpCodes.Dup);
|
||||
instance.AddressOf (ec, AddressOp.Store);
|
||||
ec.Emit (OpCodes.Call, builder_start.MakeGenericMethod (Module, instance.Type));
|
||||
ec.Emit (struct_builder ? OpCodes.Call : OpCodes.Callvirt, builder_start.MakeGenericMethod (Module, instance.Type));
|
||||
|
||||
//
|
||||
// Emits return stateMachine.$builder.Task;
|
||||
@@ -1029,4 +1103,20 @@ namespace Mono.CSharp
|
||||
EmitAssign (ec, new NullConstant (type, loc), false, false);
|
||||
}
|
||||
}
|
||||
|
||||
static class TypeSpecAsyncExtensions
|
||||
{
|
||||
public static bool IsCustomTaskType (this TypeSpec type)
|
||||
{
|
||||
// LAMESPEC: Arity is not mentioned
|
||||
if (type.Arity > 1)
|
||||
return false;
|
||||
|
||||
var amb = type.MemberDefinition.GetAsyncMethodBuilder ();
|
||||
if (amb == null)
|
||||
return false;
|
||||
|
||||
return amb.Arity == type.Arity;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -789,6 +789,17 @@ namespace Mono.CSharp {
|
||||
return ((BoolConstant) pos_args[0].Expr).Value;
|
||||
}
|
||||
|
||||
public TypeSpec GetAsyncMethodBuilderValue ()
|
||||
{
|
||||
if (!arg_resolved)
|
||||
Resolve ();
|
||||
|
||||
if (resolve_error)
|
||||
return null;
|
||||
|
||||
return GetArgumentType ();
|
||||
}
|
||||
|
||||
public TypeSpec GetCoClassAttributeValue ()
|
||||
{
|
||||
if (!arg_resolved)
|
||||
@@ -1754,6 +1765,7 @@ namespace Mono.CSharp {
|
||||
|
||||
// New in .NET 4.7
|
||||
public readonly PredefinedTupleElementNamesAttribute TupleElementNames;
|
||||
public readonly PredefinedAttribute AsyncMethodBuilder;
|
||||
|
||||
// New in .NET 4.7.1
|
||||
public readonly PredefinedAttribute IsReadOnly;
|
||||
@@ -1838,6 +1850,7 @@ namespace Mono.CSharp {
|
||||
CallerLineNumberAttribute = new PredefinedAttribute (module, "System.Runtime.CompilerServices", "CallerLineNumberAttribute");
|
||||
CallerFilePathAttribute = new PredefinedAttribute (module, "System.Runtime.CompilerServices", "CallerFilePathAttribute");
|
||||
|
||||
AsyncMethodBuilder = new PredefinedAttribute (module, "System.Runtime.CompilerServices", "AsyncMethodBuilderAttribute");
|
||||
TupleElementNames = new PredefinedTupleElementNamesAttribute (module, "System.Runtime.CompilerServices", "TupleElementNamesAttribute");
|
||||
IsReadOnly = new PredefinedAttribute (module, "System.Runtime.CompilerServices", "IsReadOnlyAttribute");
|
||||
IsByRefLike = new PredefinedAttribute (module, "System.Runtime.CompilerServices", "IsByRefLikeAttribute");
|
||||
|
||||
@@ -1 +1 @@
|
||||
da3ec32d6fb042738c08224ca2367f0262506c27
|
||||
6b1adc297a3831c9f1efbe0d0eb0b1af7230f911
|
||||
@@ -1 +1 @@
|
||||
b6a508cffc61cadc2e4ab73e7cc62af1fc2793d6
|
||||
20ee9e73b19c3cf415315fbd67fcaeb787ac8ef6
|
||||
@@ -1 +1 @@
|
||||
51f268737c01310008f6ef3be4705ffc0373b7ed
|
||||
518ccc8ef43fb3e1a0902069579690ac6875696a
|
||||
@@ -693,6 +693,11 @@ namespace Mono.CSharp {
|
||||
GetSignatureForError (), mc.GetSignatureForError (), input_variance, gtype_variance, parameters);
|
||||
}
|
||||
|
||||
public TypeSpec GetAsyncMethodBuilder ()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public TypeSpec GetAttributeCoClass ()
|
||||
{
|
||||
return null;
|
||||
|
||||
@@ -1405,6 +1405,7 @@ namespace Mono.CSharp
|
||||
public string DefaultIndexerName;
|
||||
public bool? CLSAttributeValue;
|
||||
public TypeSpec CoClass;
|
||||
public TypeSpec AsyncMethodBuilder;
|
||||
|
||||
static bool HasMissingType (ConstructorInfo ctor)
|
||||
{
|
||||
@@ -1446,7 +1447,14 @@ namespace Mono.CSharp
|
||||
if (args.Count == 1) {
|
||||
bag.Obsolete = new ObsoleteAttribute ((string) args[0].Value);
|
||||
} else if (args.Count == 2) {
|
||||
bag.Obsolete = new ObsoleteAttribute ((string) args[0].Value, (bool) args[1].Value);
|
||||
const string ByRefLikeMarker = "Types with embedded references are not supported in this version of your compiler.";
|
||||
|
||||
var msg = (string)args[0].Value;
|
||||
|
||||
if (msg == ByRefLikeMarker)
|
||||
continue;
|
||||
|
||||
bag.Obsolete = new ObsoleteAttribute (msg, (bool) args[1].Value);
|
||||
} else {
|
||||
bag.Obsolete = new ObsoleteAttribute ();
|
||||
}
|
||||
@@ -1526,6 +1534,20 @@ namespace Mono.CSharp
|
||||
bag.CoClass = importer.ImportType ((MetaType) a.ConstructorArguments[0].Value);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (name == "AsyncMethodBuilderAttribute") {
|
||||
if (dt.Namespace != "System.Runtime.CompilerServices")
|
||||
continue;
|
||||
|
||||
if (HasMissingType (a.Constructor))
|
||||
continue;
|
||||
|
||||
if (bag == null)
|
||||
bag = new AttributesBag ();
|
||||
|
||||
bag.AsyncMethodBuilder = importer.ImportType ((MetaType)a.ConstructorArguments [0].Value);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2133,6 +2155,14 @@ namespace Mono.CSharp
|
||||
}
|
||||
}
|
||||
|
||||
public TypeSpec GetAsyncMethodBuilder ()
|
||||
{
|
||||
if (cattrs == null)
|
||||
ReadAttributes ();
|
||||
|
||||
return cattrs.AsyncMethodBuilder;
|
||||
}
|
||||
|
||||
public TypeSpec GetAttributeCoClass ()
|
||||
{
|
||||
if (cattrs == null)
|
||||
@@ -2449,6 +2479,11 @@ namespace Mono.CSharp
|
||||
|
||||
#endregion
|
||||
|
||||
public TypeSpec GetAsyncMethodBuilder ()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public TypeSpec GetAttributeCoClass ()
|
||||
{
|
||||
return null;
|
||||
|
||||
@@ -1267,8 +1267,9 @@ namespace Mono.CSharp {
|
||||
if ((ModFlags & Modifiers.ASYNC) != 0) {
|
||||
if (ReturnType.Kind != MemberKind.Void &&
|
||||
ReturnType != Module.PredefinedTypes.Task.TypeSpec &&
|
||||
!ReturnType.IsGenericTask) {
|
||||
Report.Error (1983, Location, "The return type of an async method must be void, Task, or Task<T>");
|
||||
!ReturnType.IsGenericTask &&
|
||||
!ReturnType.IsCustomTaskType ()) {
|
||||
Report.Error (1983, Location, "The return type of an async method must be void or task type");
|
||||
}
|
||||
|
||||
block = (ToplevelBlock) block.ConvertToAsyncTask (this, Parent.PartialContainer, parameters, ReturnType, null, Location);
|
||||
|
||||
@@ -1 +1 @@
|
||||
6f86db260bf6516fe48fce41e5197b299a5cfc88
|
||||
9c51128548f7bf24c42648a23fef1bf5dbc67fa8
|
||||
@@ -242,6 +242,7 @@ namespace Mono.CSharp
|
||||
|
||||
// C# 7.0
|
||||
public readonly PredefinedType[] Tuples;
|
||||
public readonly PredefinedType SpanGeneric;
|
||||
|
||||
public PredefinedTypes (ModuleContainer module)
|
||||
{
|
||||
@@ -301,6 +302,8 @@ namespace Mono.CSharp
|
||||
FormattableString = new PredefinedType (module, MemberKind.Class, "System", "FormattableString");
|
||||
FormattableStringFactory = new PredefinedType (module, MemberKind.Class, "System.Runtime.CompilerServices", "FormattableStringFactory");
|
||||
|
||||
SpanGeneric = new PredefinedType (module, MemberKind.Struct, "System", "Span", 1);
|
||||
|
||||
//
|
||||
// Define types which are used for comparison. It does not matter
|
||||
// if they don't exist as no error report is needed
|
||||
@@ -348,6 +351,8 @@ namespace Mono.CSharp
|
||||
if (pt.Define ())
|
||||
pt.TypeSpec.IsTupleType = true;
|
||||
}
|
||||
|
||||
SpanGeneric.Define ();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -430,6 +435,7 @@ namespace Mono.CSharp
|
||||
ArrayEmpty = new PredefinedMember<MethodSpec> (module, types.Array,
|
||||
MemberFilter.Method ("Empty", 1, ParametersCompiled.EmptyReadOnlyParameters, null));
|
||||
|
||||
// TODO: Must me static
|
||||
AsyncTaskMethodBuilderCreate = new PredefinedMember<MethodSpec> (module, types.AsyncTaskMethodBuilder,
|
||||
MemberFilter.Method ("Create", 0, ParametersCompiled.EmptyReadOnlyParameters, types.AsyncTaskMethodBuilder.TypeSpec));
|
||||
|
||||
@@ -485,6 +491,7 @@ namespace Mono.CSharp
|
||||
AsyncTaskMethodBuilderTask = new PredefinedMember<PropertySpec> (module, types.AsyncTaskMethodBuilder,
|
||||
MemberFilter.Property ("Task", null));
|
||||
|
||||
// TODO: Must me static
|
||||
AsyncTaskMethodBuilderGenericCreate = new PredefinedMember<MethodSpec> (module, types.AsyncTaskMethodBuilderGeneric,
|
||||
MemberFilter.Method ("Create", 0, ParametersCompiled.EmptyReadOnlyParameters, types.AsyncVoidMethodBuilder.TypeSpec));
|
||||
|
||||
@@ -542,6 +549,7 @@ namespace Mono.CSharp
|
||||
AsyncTaskMethodBuilderGenericTask = new PredefinedMember<PropertySpec> (module, types.AsyncTaskMethodBuilderGeneric,
|
||||
MemberFilter.Property ("Task", null));
|
||||
|
||||
// TODO: Must me static
|
||||
AsyncVoidMethodBuilderCreate = new PredefinedMember<MethodSpec> (module, types.AsyncVoidMethodBuilder,
|
||||
MemberFilter.Method ("Create", 0, ParametersCompiled.EmptyReadOnlyParameters, types.AsyncVoidMethodBuilder.TypeSpec));
|
||||
|
||||
@@ -1006,9 +1014,6 @@ namespace Mono.CSharp
|
||||
|
||||
public T Resolve (Location loc)
|
||||
{
|
||||
if (member != null)
|
||||
return member;
|
||||
|
||||
if (Get () != null)
|
||||
return member;
|
||||
|
||||
|
||||
@@ -1454,6 +1454,7 @@ namespace Mono.CSharp
|
||||
int TypeParametersCount { get; }
|
||||
TypeParameterSpec[] TypeParameters { get; }
|
||||
|
||||
TypeSpec GetAsyncMethodBuilder ();
|
||||
TypeSpec GetAttributeCoClass ();
|
||||
string GetAttributeDefaultMember ();
|
||||
AttributeUsageAttribute GetAttributeUsage (PredefinedAttribute pa);
|
||||
@@ -1588,6 +1589,11 @@ namespace Mono.CSharp
|
||||
|
||||
#region ITypeDefinition Members
|
||||
|
||||
TypeSpec ITypeDefinition.GetAsyncMethodBuilder ()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
TypeSpec ITypeDefinition.GetAttributeCoClass ()
|
||||
{
|
||||
return null;
|
||||
@@ -1776,6 +1782,11 @@ namespace Mono.CSharp
|
||||
}
|
||||
}
|
||||
|
||||
public TypeSpec GetAsyncMethodBuilder ()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public TypeSpec GetAttributeCoClass ()
|
||||
{
|
||||
return Element.MemberDefinition.GetAttributeCoClass ();
|
||||
|
||||
Reference in New Issue
Block a user