/IronPython_Main/Runtime/Microsoft.Dynamic/Actions/BoundMemberTracker.cs

# · C# · 82 lines · 54 code · 14 blank · 14 comment · 0 complexity · f75f450fbf55b3217f74e2d107b1b781 MD5 · raw file

  1. /* ****************************************************************************
  2. *
  3. * Copyright (c) Microsoft Corporation.
  4. *
  5. * This source code is subject to terms and conditions of the Apache License, Version 2.0. A
  6. * copy of the license can be found in the License.html file at the root of this distribution. If
  7. * you cannot locate the Apache License, Version 2.0, please send an email to
  8. * dlr@microsoft.com. By using this source code in any fashion, you are agreeing to be bound
  9. * by the terms of the Apache License, Version 2.0.
  10. *
  11. * You must not remove this notice, or any other, from this software.
  12. *
  13. *
  14. * ***************************************************************************/
  15. using System;
  16. using System.Dynamic;
  17. using Microsoft.Scripting.Actions.Calls;
  18. namespace Microsoft.Scripting.Actions {
  19. public class BoundMemberTracker : MemberTracker {
  20. private DynamicMetaObject _instance;
  21. private MemberTracker _tracker;
  22. private object _objInst;
  23. public BoundMemberTracker(MemberTracker tracker, DynamicMetaObject instance) {
  24. _tracker = tracker;
  25. _instance = instance;
  26. }
  27. public BoundMemberTracker(MemberTracker tracker, object instance) {
  28. _tracker = tracker;
  29. _objInst = instance;
  30. }
  31. public override TrackerTypes MemberType {
  32. get { return TrackerTypes.Bound; }
  33. }
  34. public override Type DeclaringType {
  35. get { return _tracker.DeclaringType; }
  36. }
  37. public override string Name {
  38. get { return _tracker.Name; }
  39. }
  40. public DynamicMetaObject Instance {
  41. get {
  42. return _instance;
  43. }
  44. }
  45. public object ObjectInstance {
  46. get {
  47. return _objInst;
  48. }
  49. }
  50. public MemberTracker BoundTo {
  51. get {
  52. return _tracker;
  53. }
  54. }
  55. public override DynamicMetaObject GetValue(OverloadResolverFactory resolverFactory, ActionBinder binder, Type type) {
  56. return _tracker.GetBoundValue(resolverFactory, binder, type, _instance);
  57. }
  58. public override ErrorInfo GetError(ActionBinder binder) {
  59. return _tracker.GetBoundError(binder, _instance);
  60. }
  61. public override DynamicMetaObject SetValue(OverloadResolverFactory resolverFactory, ActionBinder binder, Type type, DynamicMetaObject value) {
  62. return _tracker.SetBoundValue(resolverFactory, binder, type, value, _instance);
  63. }
  64. public override DynamicMetaObject SetValue(OverloadResolverFactory resolverFactory, ActionBinder binder, Type type, DynamicMetaObject value, DynamicMetaObject errorSuggestion) {
  65. return _tracker.SetBoundValue(resolverFactory, binder, type, value, _instance, errorSuggestion);
  66. }
  67. }
  68. }