Imported Upstream version 5.10.0.71

Former-commit-id: 65f7f4344e4c1c5e42628faefa5b9d36955387d1
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2018-01-30 19:19:26 +00:00
parent e2950ec768
commit b7cd5de421
44 changed files with 251 additions and 169 deletions

View File

@@ -1 +1 @@
b27caaa0982fd67a1d7894558a1ad7e1bc5164da
4d6fcb44c0d9390b15f0449683dd69fb56c10390

View File

@@ -338,6 +338,8 @@ namespace Mono.CSharp {
Module.PredefinedAttributes.Dynamic.EmitAttribute (CreateReturnBuilder ().Builder);
} else if (rtype.HasDynamicElement) {
Module.PredefinedAttributes.Dynamic.EmitAttribute (CreateReturnBuilder ().Builder, rtype, Location);
} else if (rtype is ReadOnlyReferenceContainer) {
Module.PredefinedAttributes.IsReadOnly.EmitAttribute (CreateReturnBuilder ().Builder);
}
if (rtype.HasNamedTupleElement) {

View File

@@ -1 +1 @@
cf27d94416e563d7cd096b31566b356ef3f05640
51f268737c01310008f6ef3be4705ffc0373b7ed

View File

@@ -720,6 +720,8 @@ namespace Mono.CSharp {
Module.PredefinedAttributes.Dynamic.EmitAttribute (CreateReturnBuilder ().Builder);
} else if (ReturnType.HasDynamicElement) {
Module.PredefinedAttributes.Dynamic.EmitAttribute (CreateReturnBuilder ().Builder, ReturnType, Location);
} else if (ReturnType is ReadOnlyReferenceContainer) {
Module.PredefinedAttributes.IsReadOnly.EmitAttribute (CreateReturnBuilder ().Builder);
}
if (ReturnType.HasNamedTupleElement) {
@@ -2466,6 +2468,8 @@ namespace Mono.CSharp {
Module.PredefinedAttributes.Dynamic.EmitAttribute (CreateReturnBuilder ().Builder);
} else if (ReturnType.HasDynamicElement) {
Module.PredefinedAttributes.Dynamic.EmitAttribute (CreateReturnBuilder ().Builder, ReturnType, Location);
} else if (ReturnType is ReadOnlyReferenceContainer) {
Module.PredefinedAttributes.IsReadOnly.EmitAttribute (CreateReturnBuilder ().Builder);
}
if (ReturnType.HasNamedTupleElement) {

View File

@@ -265,6 +265,7 @@ namespace Mono.CSharp
readonly Dictionary<ArrayContainer.TypeRankPair, ArrayContainer> array_types;
readonly Dictionary<TypeSpec, PointerContainer> pointer_types;
readonly Dictionary<TypeSpec, ReferenceContainer> reference_types;
readonly Dictionary<TypeSpec, ReadOnlyReferenceContainer> readonly_reference_types;
readonly Dictionary<TypeSpec, MethodSpec> attrs_cache;
readonly Dictionary<TypeSpec, AwaiterDefinition> awaiters;
readonly Dictionary<TypeSpec, TypeInfo> type_info_cache;
@@ -301,6 +302,7 @@ namespace Mono.CSharp
array_types = new Dictionary<ArrayContainer.TypeRankPair, ArrayContainer> ();
pointer_types = new Dictionary<TypeSpec, PointerContainer> ();
reference_types = new Dictionary<TypeSpec, ReferenceContainer> ();
readonly_reference_types = new Dictionary<TypeSpec, ReadOnlyReferenceContainer> ();
attrs_cache = new Dictionary<TypeSpec, MethodSpec> ();
awaiters = new Dictionary<TypeSpec, AwaiterDefinition> ();
type_info_cache = new Dictionary<TypeSpec, TypeInfo> ();
@@ -427,6 +429,12 @@ namespace Mono.CSharp
}
}
internal Dictionary<TypeSpec, ReadOnlyReferenceContainer> ReadonlyReferenceTypesCache {
get {
return readonly_reference_types;
}
}
internal Dictionary<TypeSpec, TypeInfo> TypeInfoCache {
get {
return type_info_cache;

View File

@@ -1 +1 @@
78cc7661ddc8331cbf6788617ee8e450077108dc
6f86db260bf6516fe48fce41e5197b299a5cfc88

View File

@@ -2023,7 +2023,7 @@ namespace Mono.CSharp
[System.Diagnostics.DebuggerDisplay("{DisplayDebugInfo()}")]
class ReferenceContainer : ElementTypeSpec
{
ReferenceContainer (TypeSpec element)
protected ReferenceContainer (TypeSpec element)
: base (MemberKind.ByRef, element, null)
{
cache = null;
@@ -2074,6 +2074,34 @@ namespace Mono.CSharp
}
}
[System.Diagnostics.DebuggerDisplay ("{DisplayDebugInfo()}")]
class ReadOnlyReferenceContainer : ReferenceContainer
{
public ReadOnlyReferenceContainer (TypeSpec element)
: base (element)
{
}
string DisplayDebugInfo ()
{
return "ref readonly " + GetSignatureForError ();
}
public new static ReferenceContainer MakeType (ModuleContainer module, TypeSpec element)
{
if (element.Kind == MemberKind.ByRef)
throw new ArgumentException ();
ReadOnlyReferenceContainer pc;
if (!module.ReadonlyReferenceTypesCache.TryGetValue (element, out pc)) {
pc = new ReadOnlyReferenceContainer (element);
module.ReadonlyReferenceTypesCache.Add (element, pc);
}
return pc;
}
}
class PointerContainer : ElementTypeSpec
{
private PointerContainer (TypeSpec element)