2 // RuntimeBinderContext.cs
5 // Marek Safar <marek.safar@gmail.com>
7 // Copyright (C) 2009 Novell, Inc (http://www.novell.com)
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30 using System.Collections.Generic;
31 using Compiler = Mono.CSharp;
33 namespace Microsoft.CSharp.RuntimeBinder
35 sealed class RuntimeBinderContext : Compiler.IMemberContext
37 readonly Compiler.ModuleContainer module;
38 readonly Type callingType;
39 readonly DynamicContext ctx;
40 Compiler.TypeSpec callingTypeImported;
42 public RuntimeBinderContext (DynamicContext ctx, Compiler.TypeSpec callingType)
45 this.module = ctx.Module;
46 this.callingTypeImported = callingType;
49 public RuntimeBinderContext (DynamicContext ctx, Type callingType)
52 this.module = ctx.Module;
53 this.callingType = callingType;
56 #region IMemberContext Members
58 public Compiler.TypeSpec CurrentType {
61 // Delay importing of calling type to be compatible with .net
62 // Some libraries are setting it to null which is invalid
63 // but the NullReferenceException is thrown only when the context
64 // is used and not during initialization
66 if (callingTypeImported == null && callingType != null)
67 callingTypeImported = ctx.ImportType (callingType);
69 return callingTypeImported;
73 public Compiler.TypeParameter[] CurrentTypeParameters {
74 get { throw new NotImplementedException (); }
77 public Compiler.MemberCore CurrentMemberDefinition {
83 public bool IsObsolete {
85 // Always true to ignore obsolete attribute checks
90 public bool IsUnsafe {
92 // Dynamic cannot be used with pointers
97 public bool IsStatic {
99 throw new NotImplementedException ();
103 public Compiler.ModuleContainer Module {
109 public string GetSignatureForError ()
111 throw new NotImplementedException ();
114 public Compiler.ExtensionMethodCandidates LookupExtensionMethod (Compiler.TypeSpec extensionType, string name, int arity)
116 // No extension method lookup in this context
120 public Compiler.FullNamedExpression LookupNamespaceOrType (string name, int arity, Mono.CSharp.LookupMode mode, Mono.CSharp.Location loc)
122 throw new NotImplementedException ();
125 public Compiler.FullNamedExpression LookupNamespaceAlias (string name)
127 // No namespace aliases in this context