X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fmcs%2Fdynamic.cs;h=939984e5c6b41e972d3ce4e8facebc77bf89b276;hb=f37e86ff58d7b5a47484e60aded45bf8b98ae918;hp=2124f0fda088d89e5febb0092edb68e3dd115246;hpb=e946a6cdebde729e1c03ec374184254ab38da184;p=mono.git diff --git a/mcs/mcs/dynamic.cs b/mcs/mcs/dynamic.cs index 2124f0fda08..939984e5c6b 100644 --- a/mcs/mcs/dynamic.cs +++ b/mcs/mcs/dynamic.cs @@ -13,7 +13,7 @@ using System; using System.Linq; using SLE = System.Linq.Expressions; -#if NET_4_0 || MONODROID +#if NET_4_0 || MOBILE_DYNAMIC using System.Dynamic; #endif @@ -63,7 +63,7 @@ namespace Mono.CSharp // public class RuntimeValueExpression : Expression, IDynamicAssign, IMemoryLocation { -#if !NET_4_0 && !MONODROID +#if !NET_4_0 && !MOBILE_DYNAMIC public class DynamicMetaObject { public TypeSpec RuntimeType; @@ -146,7 +146,7 @@ namespace Mono.CSharp return base.MakeExpression (ctx); #else -#if NET_4_0 || MONODROID +#if NET_4_0 || MOBILE_DYNAMIC if (type.IsStruct && !obj.Expression.Type.IsValueType) return SLE.Expression.Unbox (obj.Expression, type.GetMetaInfo ()); @@ -181,7 +181,7 @@ namespace Mono.CSharp return this; } -#if NET_4_0 || MONODROID +#if NET_4_0 || MOBILE_DYNAMIC public override SLE.Expression MakeExpression (BuilderContext ctx) { #if STATIC @@ -450,6 +450,14 @@ namespace Mono.CSharp d.PrepareEmit (); site.AddTypeContainer (d); + + // + // Add new container to inflated site container when the + // member cache already exists + // + if (site.CurrentType is InflatedTypeSpec && index > 0) + site.CurrentType.MemberCache.AddMember (d.CurrentType); + del_type = new TypeExpression (d.CurrentType, loc); if (targs_for_instance != null) { del_type_instance_access = null; @@ -532,6 +540,11 @@ namespace Mono.CSharp } } + public override void FlowAnalysis (FlowAnalysisContext fc) + { + arguments.FlowAnalysis (fc); + } + public static MemberAccess GetBinderNamespace (Location loc) { return new MemberAccess (new MemberAccess ( @@ -612,6 +625,11 @@ namespace Mono.CSharp stmt.Emit (ec); } } + + public override void FlowAnalysis (FlowAnalysisContext fc) + { + invoke.FlowAnalysis (fc); + } } class DynamicConversion : DynamicExpressionStatement, IDynamicBinder