From be175adba85875466fc44807429a186b2d85fa92 Mon Sep 17 00:00:00 2001 From: Marek Safar Date: Tue, 20 Oct 2009 17:55:55 +0000 Subject: [PATCH] 2009-10-20 Marek Safar * argument.cs, dynamic.cs, expression.cs: Latest API update. svn path=/trunk/mcs/; revision=144476 --- mcs/mcs/ChangeLog | 4 +++ mcs/mcs/argument.cs | 2 +- mcs/mcs/dynamic.cs | 72 +++++++++++++++++++++++++++++-------------- mcs/mcs/expression.cs | 17 +++++----- 4 files changed, 64 insertions(+), 31 deletions(-) diff --git a/mcs/mcs/ChangeLog b/mcs/mcs/ChangeLog index ffa844ad502..dee0db444da 100644 --- a/mcs/mcs/ChangeLog +++ b/mcs/mcs/ChangeLog @@ -1,3 +1,7 @@ +2009-10-20 Marek Safar + + * argument.cs, dynamic.cs, expression.cs: Latest API update. + 2009-10-19 Marek Safar * typemanager.cs, expression.cs: Dynamic array initializer. diff --git a/mcs/mcs/argument.cs b/mcs/mcs/argument.cs index f1418f6bb01..ad13a6539e3 100644 --- a/mcs/mcs/argument.cs +++ b/mcs/mcs/argument.cs @@ -260,7 +260,7 @@ namespace Mono.CSharp dargs.Add (new Argument (info_flags)); dargs.Add (new Argument (new StringLiteral (named_value, loc))); - all.Add (new New (new MemberAccess (binder, "CSharpArgumentInfo", loc), dargs, loc)); + all.Add (new Invocation (new MemberAccess (new MemberAccess (binder, "CSharpArgumentInfo", loc), "Create", loc), dargs)); } return all; diff --git a/mcs/mcs/dynamic.cs b/mcs/mcs/dynamic.cs index 16da02df018..2196f2a95a9 100644 --- a/mcs/mcs/dynamic.cs +++ b/mcs/mcs/dynamic.cs @@ -270,6 +270,16 @@ namespace Mono.CSharp new QualifiedAliasMember (QualifiedAliasMember.GlobalAlias, "Microsoft", loc), "CSharp", loc), "RuntimeBinder", loc); } + public static MemberAccess GetBinderClass (Location loc) + { + return new MemberAccess (GetBinderNamespace (loc), "Binder", loc); + } + + public static MemberAccess GetBinderFlagsClass (Location loc) + { + return new MemberAccess (GetBinderNamespace (loc), "CSharpBinderFlags", loc); + } + TypeExpr CreateSiteType (CompilerContext ctx, int dyn_args_count) { const int default_args = 2; @@ -356,12 +366,12 @@ namespace Mono.CSharp public Expression CreateCallSiteBinder (ResolveContext ec, Arguments args) { Arguments binder_args = new Arguments (2); - MemberAccess binder = GetBinderNamespace (loc); + MemberAccess binder = GetBinderClass (loc); binder_args.Add (new Argument (new StringLiteral (name, loc))); binder_args.Add (new Argument (new TypeOf (new TypeExpression (ec.CurrentType, loc), loc))); - return new New (new MemberAccess (binder, "CSharpIsEventBinder", loc), binder_args, loc); + return new Invocation (new MemberAccess (binder, "IsEvent", loc), binder_args); } public override void EmitStatement (EmitContext ec) @@ -390,14 +400,22 @@ namespace Mono.CSharp public Expression CreateCallSiteBinder (ResolveContext ec, Arguments args) { Arguments binder_args = new Arguments (2); - MemberAccess binder = GetBinderNamespace (loc); + MemberAccess binder = GetBinderClass (loc); + Expression flags; + if (is_explicit) { + flags = new MemberAccess (GetBinderFlagsClass (loc), "ConvertExplicit"); + } else { + flags = new IntLiteral (0, loc); + } + + binder_args.Add (new Argument (flags)); binder_args.Add (new Argument (new TypeOf (new TypeExpression (type, loc), loc))); - binder_args.Add (new Argument (new MemberAccess (new MemberAccess (binder, "CSharpConversionKind", loc), - is_explicit ? "ExplicitConversion" : "ImplicitConversion", loc))); - binder_args.Add (new Argument (new BoolLiteral (ec.HasSet (ResolveContext.Options.CheckedScope), loc))); + + // TODO: dynamic + //binder_args.Add (new Argument (new BoolLiteral (ec.HasSet (ResolveContext.Options.CheckedScope), loc))); - return new New (new MemberAccess (binder, "CSharpConvertBinder", loc), binder_args, loc); + return new Invocation (new MemberAccess (binder, "Convert", loc), binder_args); } } @@ -414,13 +432,14 @@ namespace Mono.CSharp public Expression CreateCallSiteBinder (ResolveContext ec, Arguments args) { - Arguments binder_args = new Arguments (2); - MemberAccess binder = GetBinderNamespace (loc); + Arguments binder_args = new Arguments (3); + MemberAccess binder = GetBinderClass (loc); + binder_args.Add (new Argument (new IntLiteral (0, loc))); binder_args.Add (new Argument (new TypeOf (new TypeExpression (ec.CurrentType, loc), loc))); binder_args.Add (new Argument (new ImplicitlyTypedArrayCreation ("[]", args.CreateDynamicBinderArguments (), loc))); - return new New (new MemberAccess (binder, isSet ? "CSharpSetIndexBinder" : "CSharpGetIndexBinder", loc), binder_args, loc); + return new Invocation (new MemberAccess (binder, isSet ? "SetIndex" : "GetIndex", loc), binder_args); } #region IAssignMethod Members @@ -462,24 +481,22 @@ namespace Mono.CSharp public Expression CreateCallSiteBinder (ResolveContext ec, Arguments args) { Arguments binder_args = new Arguments (member != null ? 5 : 3); - MemberAccess binder = GetBinderNamespace (loc); + MemberAccess binder = GetBinderClass (loc); bool is_member_access = member is MemberAccess; string call_flags; if (!is_member_access && member is SimpleName) { - call_flags = "SimpleNameCall"; + call_flags = "InvokeSimpleName"; is_member_access = true; } else { call_flags = "None"; } - binder_args.Add (new Argument (new MemberAccess (new MemberAccess (binder, "CSharpCallFlags", loc), call_flags, loc))); + binder_args.Add (new Argument (new MemberAccess (GetBinderFlagsClass (loc), call_flags, loc))); if (is_member_access) binder_args.Add (new Argument (new StringLiteral (member.Name, member.Location))); - binder_args.Add (new Argument (new TypeOf (new TypeExpression (ec.CurrentType, loc), loc))); - if (member != null && member.HasTypeArguments) { TypeArguments ta = member.TypeArguments; if (ta.Resolve (ec)) { @@ -493,6 +510,8 @@ namespace Mono.CSharp binder_args.Add (new Argument (new NullLiteral (loc))); } + binder_args.Add (new Argument (new TypeOf (new TypeExpression (ec.CurrentType, loc), loc))); + Expression real_args; if (args == null) { // Cannot be null because .NET trips over @@ -503,8 +522,8 @@ namespace Mono.CSharp binder_args.Add (new Argument (real_args)); - return new New (new MemberAccess (binder, - is_member_access ? "CSharpInvokeMemberBinder" : "CSharpInvokeBinder", loc), binder_args, loc); + return new Invocation (new MemberAccess (binder, + is_member_access ? "InvokeMember" : "Invoke", loc), binder_args); } } @@ -523,14 +542,15 @@ namespace Mono.CSharp public Expression CreateCallSiteBinder (ResolveContext ec, Arguments args) { - Arguments binder_args = new Arguments (3); - MemberAccess binder = GetBinderNamespace (loc); + Arguments binder_args = new Arguments (4); + MemberAccess binder = GetBinderClass (loc); + binder_args.Add (new Argument (new IntLiteral (0, loc))); binder_args.Add (new Argument (new StringLiteral (name, loc))); binder_args.Add (new Argument (new TypeOf (new TypeExpression (ec.CurrentType, loc), loc))); binder_args.Add (new Argument (new ImplicitlyTypedArrayCreation ("[]", args.CreateDynamicBinderArguments (), loc))); - return new New (new MemberAccess (binder, isSet ? "CSharpSetMemberBinder" : "CSharpGetMemberBinder", loc), binder_args, loc); + return new Invocation (new MemberAccess (binder, isSet ? "SetMember" : "GetMember", loc), binder_args); } #region IAssignMethod Members @@ -571,13 +591,19 @@ namespace Mono.CSharp MemberAccess sle = new MemberAccess (new MemberAccess ( new QualifiedAliasMember (QualifiedAliasMember.GlobalAlias, "System", loc), "Linq", loc), "Expressions", loc); - MemberAccess binder = GetBinderNamespace (loc); + MemberAccess binder = GetBinderClass (loc); + Expression flags; + if (ec.HasSet (ResolveContext.Options.CheckedScope)) { + flags = new MemberAccess (GetBinderFlagsClass (loc), "CheckedContext"); + } else { + flags = new IntLiteral (0, loc); + } + binder_args.Add (new Argument (flags)); binder_args.Add (new Argument (new MemberAccess (new MemberAccess (sle, "ExpressionType", loc), name, loc))); - binder_args.Add (new Argument (new BoolLiteral (ec.HasSet (ResolveContext.Options.CheckedScope), loc))); binder_args.Add (new Argument (new ImplicitlyTypedArrayCreation ("[]", args.CreateDynamicBinderArguments (), loc))); - return new New (new MemberAccess (binder, "CSharpUnaryOperationBinder", loc), binder_args, loc); + return new Invocation (new MemberAccess (binder, "UnaryOperation", loc), binder_args); } } } diff --git a/mcs/mcs/expression.cs b/mcs/mcs/expression.cs index 901a4cd68d8..b7ded370011 100644 --- a/mcs/mcs/expression.cs +++ b/mcs/mcs/expression.cs @@ -3599,21 +3599,24 @@ namespace Mono.CSharp { public Expression CreateCallSiteBinder (ResolveContext ec, Arguments args) { - Arguments binder_args = new Arguments (4); + Arguments binder_args = new Arguments (3); MemberAccess sle = new MemberAccess (new MemberAccess ( new QualifiedAliasMember (QualifiedAliasMember.GlobalAlias, "System", loc), "Linq", loc), "Expressions", loc); - MemberAccess binder = DynamicExpressionStatement.GetBinderNamespace (loc); + MemberAccess binder = DynamicExpressionStatement.GetBinderClass (loc); + Expression flags; + if (ec.HasSet (ResolveContext.Options.CheckedScope)) { + flags = new MemberAccess (DynamicExpressionStatement.GetBinderFlagsClass (loc), "CheckedContext"); + } else { + flags = new IntLiteral (0, loc); + } + binder_args.Add (new Argument (flags)); binder_args.Add (new Argument (new MemberAccess (new MemberAccess (sle, "ExpressionType", loc), GetOperatorExpressionTypeName (), loc))); - binder_args.Add (new Argument (new BoolLiteral (ec.HasSet (ResolveContext.Options.CheckedScope), loc))); - - bool member_access = left is DynamicMemberBinder || right is DynamicMemberBinder; - binder_args.Add (new Argument (new BoolLiteral (member_access, loc))); binder_args.Add (new Argument (new ImplicitlyTypedArrayCreation ("[]", args.CreateDynamicBinderArguments (), loc))); - return new New (new MemberAccess (binder, "CSharpBinaryOperationBinder", loc), binder_args, loc); + return new Invocation (new MemberAccess (binder, "BinaryOperation", loc), binder_args); } public override Expression CreateExpressionTree (ResolveContext ec) -- 2.25.1